Destroy app on successful uninstallation
Rescue and put into :uninstall_errored if something goes wrong while destroying, which can happen. I think it is safe to expose the full error message from the destroy error. Remove the :uninstalled state as no longer used.
This commit is contained in:
parent
938e90f472
commit
3c8df0c944
5 changed files with 23 additions and 24 deletions
|
@ -27,7 +27,6 @@ module Clusters
|
|||
state :update_errored, value: 6
|
||||
state :uninstalling, value: 7
|
||||
state :uninstall_errored, value: 8
|
||||
state :uninstalled, value: 9
|
||||
|
||||
event :make_scheduled do
|
||||
transition [:installable, :errored, :installed, :updated, :update_errored, :uninstall_errored] => :scheduled
|
||||
|
@ -60,10 +59,6 @@ module Clusters
|
|||
transition [:scheduled] => :uninstalling
|
||||
end
|
||||
|
||||
event :make_uninstalled do
|
||||
transition [:uninstalling] => :uninstalled
|
||||
end
|
||||
|
||||
before_transition any => [:scheduled] do |app_status, _|
|
||||
app_status.status_reason = nil
|
||||
end
|
||||
|
|
|
@ -23,7 +23,9 @@ module Clusters
|
|||
private
|
||||
|
||||
def on_success
|
||||
app.make_uninstalled!
|
||||
app.destroy!
|
||||
rescue StandardError => e
|
||||
app.make_errored!("Application uninstalled but failed to destroy: #{e.message}")
|
||||
ensure
|
||||
remove_installation_pod
|
||||
end
|
||||
|
|
|
@ -49,10 +49,6 @@ FactoryBot.define do
|
|||
status_reason 'something went wrong'
|
||||
end
|
||||
|
||||
trait :uninstalled do
|
||||
status 9
|
||||
end
|
||||
|
||||
trait :timeouted do
|
||||
installing
|
||||
updated_at { ClusterWaitForAppInstallationWorker::TIMEOUT.ago }
|
||||
|
|
|
@ -56,13 +56,30 @@ describe Clusters::Applications::CheckUninstallProgressService do
|
|||
service.execute
|
||||
end
|
||||
|
||||
it 'make the application installed' do
|
||||
it 'destroys the application' do
|
||||
expect(worker_class).not_to receive(:perform_in)
|
||||
|
||||
service.execute
|
||||
expect(application).to be_destroyed
|
||||
end
|
||||
|
||||
expect(application).to be_uninstalled
|
||||
expect(application.status_reason).to be_nil
|
||||
context 'an error occurs while destroying' do
|
||||
before do
|
||||
expect(application).to receive(:destroy!).once.and_raise("destroy failed")
|
||||
end
|
||||
|
||||
it 'still removes the installation POD' do
|
||||
expect(service).to receive(:remove_installation_pod).once
|
||||
|
||||
service.execute
|
||||
end
|
||||
|
||||
it 'makes the application uninstall_errored' do
|
||||
service.execute
|
||||
|
||||
expect(application).to be_uninstall_errored
|
||||
expect(application.status_reason).to eq('Application uninstalled but failed to destroy: destroy failed')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -192,16 +192,6 @@ shared_examples 'cluster application status specs' do |application_name|
|
|||
expect(subject).to be_uninstalling
|
||||
end
|
||||
end
|
||||
|
||||
describe '#make_uninstalled' do
|
||||
subject { create(application_name, :uninstalling) }
|
||||
|
||||
it 'is uninstalled' do
|
||||
subject.make_uninstalled!
|
||||
|
||||
expect(subject).to be_uninstalled
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#available?' do
|
||||
|
@ -219,7 +209,6 @@ shared_examples 'cluster application status specs' do |application_name|
|
|||
:update_errored | false
|
||||
:uninstalling | false
|
||||
:uninstall_errored | false
|
||||
:uninstalled | false
|
||||
:timeouted | false
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue