diff options
author | João Cunha <j.a.cunha@gmail.com> | 2019-09-10 23:26:23 +0100 |
---|---|---|
committer | João Cunha <j.a.cunha@gmail.com> | 2019-09-11 21:11:00 +0100 |
commit | 006720008291a120eae93361abaf074a76701daa (patch) | |
tree | 533d2df491a221712bd0531cf23b86717e19f40e | |
parent | 5da22d855de39d87aafad3509a88e7a4d0fa75b7 (diff) | |
download | gitlab-ce-006720008291a120eae93361abaf074a76701daa.tar.gz |
Tracks cluster removal when calling ClusterRemoveWorker
-rw-r--r-- | app/workers/cluster_remove_worker.rb | 13 | ||||
-rw-r--r-- | spec/workers/cluster_remove_worker_spec.rb | 28 |
2 files changed, 38 insertions, 3 deletions
diff --git a/app/workers/cluster_remove_worker.rb b/app/workers/cluster_remove_worker.rb index 9a60c8efc32..4e30d541e40 100644 --- a/app/workers/cluster_remove_worker.rb +++ b/app/workers/cluster_remove_worker.rb @@ -23,13 +23,15 @@ class ClusterRemoveWorker def perform(cluster_id, execution_count = 0) @execution_count = execution_count + @cluster = Clusters::Cluster.preload_applications.find_by_id(cluster_id) + # TODO: Log error and notify user that the cluster uninstall failed and # needs to be manually retried. # # https://gitlab.com/gitlab-org/gitlab-ce/issues/66729 - return log_exceeded_execution_limit_error if exceeded_execution_limit? + return exceeded_execution_limit if exceeded_execution_limit? - @cluster = Clusters::Cluster.preload_applications.find_by_id(cluster_id) + @cluster.removing! uninstallable_apps = @cluster.preloaded_applications.select(&:can_uninstall?) @@ -47,6 +49,7 @@ class ClusterRemoveWorker delete_deployed_namespaces delete_gitlab_service_account + @cluster.stop_removing! @cluster.destroy end @@ -72,6 +75,12 @@ class ClusterRemoveWorker @logger ||= Gitlab::Kubernetes::Logger.build end + def exceeded_execution_limit + log_exceeded_execution_limit_error + + @cluster.stop_removing! + end + def log_exceeded_execution_limit_error logger.error({ exception: ExceededExecutionLimitError.name, diff --git a/spec/workers/cluster_remove_worker_spec.rb b/spec/workers/cluster_remove_worker_spec.rb index 9b34e5d0f47..37c1f9f812a 100644 --- a/spec/workers/cluster_remove_worker_spec.rb +++ b/spec/workers/cluster_remove_worker_spec.rb @@ -8,6 +8,14 @@ describe ClusterRemoveWorker do let!(:cluster) { create(:cluster, :project, provider_type: :gcp) } + shared_examples 'removing cluster' do + it 'sets cluster as removing' do + expect_any_instance_of(Clusters::Cluster).to receive(:removing!) + + subject + end + end + context 'when cluster has no applications or roles' do let(:kubeclient_intance_double) do instance_double(Gitlab::Kubernetes::KubeClient, delete_namespace: nil, delete_service_account: nil) @@ -27,6 +35,14 @@ describe ClusterRemoveWorker do end end + it_behaves_like 'removing cluster' + + it 'stops removin cluster' do + expect_any_instance_of(Clusters::Cluster).to receive(:stop_removing!) + + subject + end + it 'deletes namespaces' do expect { subject }.to change { Clusters::KubernetesNamespace.count }.by(-2) end @@ -53,6 +69,8 @@ describe ClusterRemoveWorker do let!(:cert_manager) { create(:clusters_applications_cert_manager, :installed, cluster: cluster) } let!(:jupyter) { create(:clusters_applications_jupyter, :installed, cluster: cluster) } + it_behaves_like 'removing cluster' + it 'only uninstalls apps that are not dependencies for other installed apps' do expect(Clusters::Applications::UninstallService) .not_to receive(:new).with(helm) @@ -91,6 +109,14 @@ describe ClusterRemoveWorker do end context 'when exceeded the execution limit' do + subject { described_class.new.perform(cluster.id, described_class::EXECUTION_LIMIT) } + + it 'stops removing cluster' do + expect_any_instance_of(Clusters::Cluster).to receive(:stop_removing!) + + subject + end + it 'logs the error' do expect_any_instance_of(Gitlab::Kubernetes::Logger).to receive(:error).with( hash_including( @@ -103,7 +129,7 @@ describe ClusterRemoveWorker do ) ) - described_class.new.perform(cluster.id, described_class::EXECUTION_LIMIT) + subject end end end |