diff options
author | João Cunha <j.a.cunha@gmail.com> | 2019-08-05 16:44:32 +0100 |
---|---|---|
committer | João Cunha <j.a.cunha@gmail.com> | 2019-08-14 15:54:44 +0200 |
commit | c6b5cc69d1ac1fa6ea4038f3aa42818052196819 (patch) | |
tree | 5d401bf0ff8d54035056f16b83e247d603bc640a | |
parent | 2ef4ec0276da7d7a0dbe0a8c7809275651133246 (diff) | |
download | gitlab-ce-create-kubectl-delete-method-65343.tar.gz |
Add module to contain the kubectl command creationcreate-kubectl-delete-method-65343
- creates main module file and spec file
- refactor all calls to these commands so to use the new module
-rw-r--r-- | app/models/clusters/applications/cert_manager.rb | 8 | ||||
-rw-r--r-- | app/models/clusters/applications/knative.rb | 12 | ||||
-rw-r--r-- | app/models/clusters/applications/prometheus.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/kubernetes.rb | 12 | ||||
-rw-r--r-- | lib/gitlab/kubernetes/helm/reset_command.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/kubernetes/kubectl_cmd.rb | 19 | ||||
-rw-r--r-- | spec/lib/gitlab/kubernetes/kubectl_cmd_spec.rb | 48 | ||||
-rw-r--r-- | spec/lib/gitlab/kubernetes_spec.rb | 20 | ||||
-rw-r--r-- | spec/models/clusters/applications/knative_spec.rb | 12 |
9 files changed, 88 insertions, 51 deletions
diff --git a/app/models/clusters/applications/cert_manager.rb b/app/models/clusters/applications/cert_manager.rb index 2fc1b67dfd2..6bd7473c8ff 100644 --- a/app/models/clusters/applications/cert_manager.rb +++ b/app/models/clusters/applications/cert_manager.rb @@ -64,11 +64,15 @@ module Clusters end def delete_private_key - "kubectl delete secret -n #{Gitlab::Kubernetes::Helm::NAMESPACE} #{private_key_name} --ignore-not-found" if private_key_name.present? + return unless private_key_name.present? + + args = %W(secret -n #{Gitlab::Kubernetes::Helm::NAMESPACE} #{private_key_name} --ignore-not-found) + + Gitlab::Kubernetes::KubectlCmd.delete(*args) end def delete_crd(definition) - "kubectl delete crd #{definition} --ignore-not-found" + Gitlab::Kubernetes::KubectlCmd.delete("crd", definition, "--ignore-not-found") end def cluster_issuer_file diff --git a/app/models/clusters/applications/knative.rb b/app/models/clusters/applications/knative.rb index ab99108548d..244fe738396 100644 --- a/app/models/clusters/applications/knative.rb +++ b/app/models/clusters/applications/knative.rb @@ -89,7 +89,7 @@ module Clusters def delete_knative_services cluster.kubernetes_namespaces.map do |kubernetes_namespace| - Gitlab::Kubernetes.kubectl_delete("ksvc", "--all", "-n", kubernetes_namespace.namespace) + Gitlab::Kubernetes::KubectlCmd.delete("ksvc", "--all", "-n", kubernetes_namespace.namespace) end end @@ -99,14 +99,14 @@ module Clusters def delete_knative_namespaces [ - Gitlab::Kubernetes.kubectl_delete("--ignore-not-found", "ns", "knative-serving"), - Gitlab::Kubernetes.kubectl_delete("--ignore-not-found", "ns", "knative-build") + Gitlab::Kubernetes::KubectlCmd.delete("--ignore-not-found", "ns", "knative-serving"), + Gitlab::Kubernetes::KubectlCmd.delete("--ignore-not-found", "ns", "knative-build") ] end def delete_knative_and_istio_crds api_resources.map do |crd| - Gitlab::Kubernetes.kubectl_delete("--ignore-not-found", "crd", "#{crd}") + Gitlab::Kubernetes::KubectlCmd.delete("--ignore-not-found", "crd", "#{crd}") end end @@ -119,13 +119,13 @@ module Clusters def install_knative_metrics return [] unless cluster.application_prometheus_available? - [Gitlab::Kubernetes.kubectl_apply("-f", METRICS_CONFIG)] + [Gitlab::Kubernetes::KubectlCmd.apply_file(METRICS_CONFIG)] end def delete_knative_istio_metrics return [] unless cluster.application_prometheus_available? - [Gitlab::Kubernetes.kubectl_delete("--ignore-not-found", "-f", METRICS_CONFIG)] + [Gitlab::Kubernetes::KubectlCmd.delete("--ignore-not-found", "-f", METRICS_CONFIG)] end def verify_cluster? diff --git a/app/models/clusters/applications/prometheus.rb b/app/models/clusters/applications/prometheus.rb index cebe9b2a5c2..f31a6b8b50e 100644 --- a/app/models/clusters/applications/prometheus.rb +++ b/app/models/clusters/applications/prometheus.rb @@ -106,13 +106,13 @@ module Clusters def install_knative_metrics return [] unless cluster.application_knative_available? - [Gitlab::Kubernetes.kubectl_apply("-f", Clusters::Applications::Knative::METRICS_CONFIG)] + [Gitlab::Kubernetes::KubectlCmd.apply_file(Clusters::Applications::Knative::METRICS_CONFIG)] end def delete_knative_istio_metrics return [] unless cluster.application_knative_available? - [Gitlab::Kubernetes.kubectl_delete("-f", Clusters::Applications::Knative::METRICS_CONFIG)] + [Gitlab::Kubernetes::KubectlCmd.delete("-f", Clusters::Applications::Knative::METRICS_CONFIG)] end end end diff --git a/lib/gitlab/kubernetes.rb b/lib/gitlab/kubernetes.rb index f8b0ae279fa..22bd00751bc 100644 --- a/lib/gitlab/kubernetes.rb +++ b/lib/gitlab/kubernetes.rb @@ -7,18 +7,6 @@ module Gitlab Hash.new { |h, k| h[k] = [] } end - def self.kubectl_delete(*args) - command = %w(kubectl delete) + args - - command.shelljoin - end - - def self.kubectl_apply(*args) - command = %w(kubectl apply) + args - - command.shelljoin - end - # This is the comand that is run to start a terminal session. Kubernetes # expects `command=foo&command=bar, not `command[]=foo&command[]=bar` EXEC_COMMAND = URI.encode_www_form( diff --git a/lib/gitlab/kubernetes/helm/reset_command.rb b/lib/gitlab/kubernetes/helm/reset_command.rb index 37e1d8573ab..a35ffa34c58 100644 --- a/lib/gitlab/kubernetes/helm/reset_command.rb +++ b/lib/gitlab/kubernetes/helm/reset_command.rb @@ -38,9 +38,9 @@ module Gitlab # Tracking this method to be removed here: # https://gitlab.com/gitlab-org/gitlab-ce/issues/52791#note_199374155 def delete_tiller_replicaset - command = %w[kubectl delete replicaset -n gitlab-managed-apps -l name=tiller] + delete_args = %w[replicaset -n gitlab-managed-apps -l name=tiller] - command.shelljoin + Gitlab::Kubernetes::KubectlCmd.delete(*delete_args) end def reset_helm_command diff --git a/lib/gitlab/kubernetes/kubectl_cmd.rb b/lib/gitlab/kubernetes/kubectl_cmd.rb new file mode 100644 index 00000000000..981eb5681dc --- /dev/null +++ b/lib/gitlab/kubernetes/kubectl_cmd.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Gitlab + module Kubernetes + module KubectlCmd + class << self + def delete(*args) + %w(kubectl delete).concat(args).shelljoin + end + + def apply_file(filename, *args) + raise ArgumentError, "filename is not present" unless filename.present? + + %w(kubectl apply -f).concat([filename], args).shelljoin + end + end + end + end +end diff --git a/spec/lib/gitlab/kubernetes/kubectl_cmd_spec.rb b/spec/lib/gitlab/kubernetes/kubectl_cmd_spec.rb new file mode 100644 index 00000000000..f24ab5579df --- /dev/null +++ b/spec/lib/gitlab/kubernetes/kubectl_cmd_spec.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' + +describe Gitlab::Kubernetes::KubectlCmd do + describe '.delete' do + it 'constructs string properly' do + args = %w(resource_type type --flag-1 --flag-2) + + expected_command = 'kubectl delete resource_type type --flag-1 --flag-2' + + expect(described_class.delete(*args)).to eq expected_command + end + end + + describe '.apply_file' do + context 'without optional args' do + it 'requires filename to be present' do + expect { described_class.apply_file(nil) }.to raise_error(ArgumentError, "filename is not present") + expect { described_class.apply_file(" ") }.to raise_error(ArgumentError, "filename is not present") + end + + it 'constructs string properly' do + expected_command = 'kubectl apply -f filename' + + expect(described_class.apply_file('filename')).to eq expected_command + end + end + + context 'with optional args' do + it 'constructs command properly with many args' do + args = %w(arg-1 --flag-0-1 arg-2 --flag-0-2) + + expected_command = 'kubectl apply -f filename arg-1 --flag-0-1 arg-2 --flag-0-2' + + expect(described_class.apply_file('filename', *args)).to eq expected_command + end + + it 'constructs command properly with single arg' do + args = "arg-1" + + expected_command = 'kubectl apply -f filename arg-1' + + expect(described_class.apply_file('filename', args)).to eq(expected_command) + end + end + end +end diff --git a/spec/lib/gitlab/kubernetes_spec.rb b/spec/lib/gitlab/kubernetes_spec.rb index 60335eadd4d..a7ea942960b 100644 --- a/spec/lib/gitlab/kubernetes_spec.rb +++ b/spec/lib/gitlab/kubernetes_spec.rb @@ -38,26 +38,6 @@ describe Gitlab::Kubernetes do end end - describe '.kubectl_delete' do - it 'constructs string properly' do - args = %w(resource_type type --flag-1 --flag-2) - - expected_command = 'kubectl delete resource_type type --flag-1 --flag-2' - - expect(described_class.kubectl_delete(*args)).to eq expected_command - end - end - - describe '.kubectl_delete' do - it 'constructs string properly' do - args = %w(resource_type type --flag-1 --flag-2) - - expected_command = 'kubectl apply resource_type type --flag-1 --flag-2' - - expect(described_class.kubectl_apply(*args)).to eq expected_command - end - end - describe '#filter_by_label' do it 'returns matching labels' do matching_items = [kube_pod(track: 'foo'), kube_deployment(track: 'foo')] diff --git a/spec/models/clusters/applications/knative_spec.rb b/spec/models/clusters/applications/knative_spec.rb index f496022b95c..334f10526cb 100644 --- a/spec/models/clusters/applications/knative_spec.rb +++ b/spec/models/clusters/applications/knative_spec.rb @@ -146,8 +146,8 @@ describe Clusters::Applications::Knative do end remove_namespaced_services_script = [ - Gitlab::Kubernetes.kubectl_delete("ksvc", "--all", "-n", knative.cluster.kubernetes_namespaces.first.namespace), - Gitlab::Kubernetes.kubectl_delete("ksvc", "--all", "-n", knative.cluster.kubernetes_namespaces.second.namespace) + "kubectl delete ksvc --all -n #{knative.cluster.kubernetes_namespaces.first.namespace}", + "kubectl delete ksvc --all -n #{knative.cluster.kubernetes_namespaces.second.namespace}" ] expect(subject.predelete).to match_array(remove_namespaced_services_script) @@ -157,17 +157,15 @@ describe Clusters::Applications::Knative do api_resources = YAML.safe_load(File.read(Rails.root.join(Clusters::Applications::Knative::API_RESOURCES_PATH))) remove_knative_istio_leftovers_script = [ - Gitlab::Kubernetes.kubectl_delete("--ignore-not-found", "ns", "knative-serving"), - Gitlab::Kubernetes.kubectl_delete("--ignore-not-found", "ns", "knative-build") + "kubectl delete --ignore-not-found ns knative-serving", + "kubectl delete --ignore-not-found ns knative-build" ] full_delete_commands_size = api_resources.size + remove_knative_istio_leftovers_script.size expect(subject.postdelete).to include(*remove_knative_istio_leftovers_script) expect(subject.postdelete.size).to eq(full_delete_commands_size) - expect(subject.postdelete[2]).to eq( - Gitlab::Kubernetes.kubectl_delete("--ignore-not-found", "crd", api_resources[0]) - ) + expect(subject.postdelete[2]).to eq("kubectl delete --ignore-not-found crd #{api_resources[0]}") end end |