summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoão Cunha <j.a.cunha@gmail.com>2019-09-10 23:26:23 +0100
committerJoão Cunha <j.a.cunha@gmail.com>2019-09-11 21:11:00 +0100
commit006720008291a120eae93361abaf074a76701daa (patch)
tree533d2df491a221712bd0531cf23b86717e19f40e
parent5da22d855de39d87aafad3509a88e7a4d0fa75b7 (diff)
downloadgitlab-ce-006720008291a120eae93361abaf074a76701daa.tar.gz
Tracks cluster removal when calling ClusterRemoveWorker
-rw-r--r--app/workers/cluster_remove_worker.rb13
-rw-r--r--spec/workers/cluster_remove_worker_spec.rb28
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