Remove Clusters::Applications::FinalizeInstallationService

上级 a46d3241
......@@ -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
......
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
......@@ -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
......
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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册