Commit 3c8df0c9 authored by Thong Kuah's avatar Thong Kuah Committed by Stan Hu

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.
parent 938e90f4
......@@ -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
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
expect(application).to be_uninstalled
expect(application.status_reason).to be_nil
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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment