diff --git a/app/services/clusters/applications/check_installation_progress_service.rb b/app/services/clusters/applications/check_installation_progress_service.rb index 1bd5dae0584489b744a86cec49ec8f9bec4093ff..69bd3613cce89bffcf2af5630931cc5820a1e18f 100644 --- a/app/services/clusters/applications/check_installation_progress_service.rb +++ b/app/services/clusters/applications/check_installation_progress_service.rb @@ -6,7 +6,7 @@ module Clusters case installation_phase when Gitlab::Kubernetes::Pod::SUCCEEDED - finalize_installation + on_success when Gitlab::Kubernetes::Pod::FAILED on_failed else @@ -18,23 +18,39 @@ module Clusters private + def on_success + app.make_installed! + ensure + remove_installation_pod + end + def on_failed app.make_errored!(installation_errors || 'Installation silently failed') - finalize_installation + ensure + remove_installation_pod end def check_timeout - if Time.now.utc - app.updated_at.to_time.utc > ClusterWaitForAppInstallationWorker::TIMEOUT - app.make_errored!('Installation timeouted') - finalize_installation + if timeouted? + begin + app.make_errored!('Installation timeouted') + ensure + remove_installation_pod + end else ClusterWaitForAppInstallationWorker.perform_in( ClusterWaitForAppInstallationWorker::INTERVAL, app.name, app.id) end end - def finalize_installation - FinalizeInstallationService.new(app).execute + def timeouted? + Time.now.utc - app.updated_at.to_time.utc > ClusterWaitForAppInstallationWorker::TIMEOUT + end + + def remove_installation_pod + helm_api.delete_installation_pod!(app) + rescue + # no-op end def installation_phase diff --git a/app/services/clusters/applications/finalize_installation_service.rb b/app/services/clusters/applications/finalize_installation_service.rb deleted file mode 100644 index 292c789b67bd924bd2e09e15cd5b56460263ee30..0000000000000000000000000000000000000000 --- a/app/services/clusters/applications/finalize_installation_service.rb +++ /dev/null @@ -1,11 +0,0 @@ -module Clusters - module Applications - class FinalizeInstallationService < BaseHelmService - def execute - helm_api.delete_installation_pod!(app) - - app.make_installed! if app.installing? - end - end - end -end diff --git a/spec/services/clusters/applications/check_installation_progress_service_spec.rb b/spec/services/clusters/applications/check_installation_progress_service_spec.rb index fe04fac9613e4ec45a44f1bfcdf17d2410b3d0ae..faa5b469069ba330db83eafe447a3aba99f62167 100644 --- a/spec/services/clusters/applications/check_installation_progress_service_spec.rb +++ b/spec/services/clusters/applications/check_installation_progress_service_spec.rb @@ -9,8 +9,8 @@ describe Clusters::Applications::CheckInstallationProgressService do let(:errors) { nil } shared_examples 'a terminated installation' do - it 'finalize the installation' do - expect(service).to receive(:finalize_installation).once + it 'removes the installation POD' do + expect(service).to receive(:remove_installation_pod).once service.execute end @@ -23,7 +23,7 @@ describe Clusters::Applications::CheckInstallationProgressService do context 'when not timeouted' do it 'reschedule a new check' do expect(ClusterWaitForAppInstallationWorker).to receive(:perform_in).once - expect(service).not_to receive(:finalize_installation) + expect(service).not_to receive(:remove_installation_pod) service.execute @@ -53,7 +53,7 @@ describe Clusters::Applications::CheckInstallationProgressService do expect(service).to receive(:installation_phase).once.and_return(phase) allow(service).to receive(:installation_errors).and_return(errors) - allow(service).to receive(:finalize_installation).and_return(nil) + allow(service).to receive(:remove_installation_pod).and_return(nil) end describe '#execute' do @@ -61,6 +61,15 @@ describe Clusters::Applications::CheckInstallationProgressService do let(:phase) { Gitlab::Kubernetes::Pod::SUCCEEDED } it_behaves_like 'a terminated installation' + + it 'make the application installed' do + expect(ClusterWaitForAppInstallationWorker).not_to receive(:perform_in) + + service.execute + + expect(application).to be_installed + expect(application.status_reason).to be_nil + end end context 'when installation POD failed' do diff --git a/spec/services/clusters/applications/finalize_installation_service_spec.rb b/spec/services/clusters/applications/finalize_installation_service_spec.rb deleted file mode 100644 index 08b7a80dfcdb9b9ce5d15fdb468c007a7d6b2891..0000000000000000000000000000000000000000 --- a/spec/services/clusters/applications/finalize_installation_service_spec.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'spec_helper' - -describe Clusters::Applications::FinalizeInstallationService do - describe '#execute' do - let(:application) { create(:applications_helm, :installing) } - let(:service) { described_class.new(application) } - - before do - expect_any_instance_of(Gitlab::Kubernetes::Helm).to receive(:delete_installation_pod!).with(application) - end - - context 'when installation POD succeeded' do - it 'make the application installed' do - service.execute - - expect(application).to be_installed - expect(application.status_reason).to be_nil - end - end - - context 'when installation POD failed' do - let(:application) { create(:applications_helm, :errored) } - - it 'make the application errored' do - service.execute - - expect(application).to be_errored - expect(application.status_reason).not_to be_nil - end - end - end -end