Skip to content
Snippets Groups Projects
Commit 44eec568 authored by Thong Kuah's avatar Thong Kuah :speech_balloon: Committed by Stan Hu
Browse files

Expose can_uninstall in cluster_status.json

Only prometheus can be uninstalled atm, the rest will be dealt with
later.

Presumption is that new application types will have uninstallation
implmemented at the same time.
parent 3c8df0c9
No related branches found
No related tags found
No related merge requests found
Showing
with 115 additions and 1 deletion
Loading
Loading
@@ -24,6 +24,12 @@ module Clusters
'stable/cert-manager'
end
 
# We will implement this in future MRs.
# Need to reverse postinstall step
def allowed_to_uninstall?
false
end
def install_command
Gitlab::Kubernetes::Helm::InstallCommand.new(
name: 'certmanager',
Loading
Loading
Loading
Loading
@@ -29,6 +29,13 @@ module Clusters
self.status = 'installable' if cluster&.platform_kubernetes_active?
end
 
# We will implement this in future MRs.
# Basically we need to check all other applications are not installed
# first.
def allowed_to_uninstall?
false
end
def install_command
Gitlab::Kubernetes::Helm::InitCommand.new(
name: name,
Loading
Loading
Loading
Loading
@@ -35,6 +35,13 @@ module Clusters
'stable/nginx-ingress'
end
 
# We will implement this in future MRs.
# Basically we need to check all dependent applications are not installed
# first.
def allowed_to_uninstall?
false
end
def install_command
Gitlab::Kubernetes::Helm::InstallCommand.new(
name: name,
Loading
Loading
Loading
Loading
@@ -38,6 +38,12 @@ module Clusters
content_values.to_yaml
end
 
# Will be addressed in future MRs
# We need to investigate and document what will be permenantly deleted.
def allowed_to_uninstall?
false
end
def install_command
Gitlab::Kubernetes::Helm::InstallCommand.new(
name: name,
Loading
Loading
Loading
Loading
@@ -51,6 +51,12 @@ module Clusters
{ "domain" => hostname }.to_yaml
end
 
# Handled in a new issue:
# https://gitlab.com/gitlab-org/gitlab-ce/issues/59369
def allowed_to_uninstall?
false
end
def install_command
Gitlab::Kubernetes::Helm::InstallCommand.new(
name: name,
Loading
Loading
Loading
Loading
@@ -29,6 +29,13 @@ module Clusters
content_values.to_yaml
end
 
# Need to investigate if pipelines run by this runner will stop upon the
# executor pod stopping
# I.e.run a pipeline, and uninstall runner while pipeline is running
def allowed_to_uninstall?
false
end
def install_command
Gitlab::Kubernetes::Helm::InstallCommand.new(
name: name,
Loading
Loading
Loading
Loading
@@ -18,6 +18,16 @@ module Clusters
self.status = 'installable' if cluster&.application_helm_available?
end
 
def can_uninstall?
allowed_to_uninstall?
end
# All new applications should uninstall by default
# Override if there's dependencies that needs to be uninstalled first
def allowed_to_uninstall?
true
end
def self.application_name
self.to_s.demodulize.underscore
end
Loading
Loading
Loading
Loading
@@ -10,4 +10,5 @@ class ClusterApplicationEntity < Grape::Entity
expose :hostname, if: -> (e, _) { e.respond_to?(:hostname) }
expose :email, if: -> (e, _) { e.respond_to?(:email) }
expose :update_available?, as: :update_available, if: -> (e, _) { e.respond_to?(:update_available?) }
expose :can_uninstall?, as: :can_uninstall
end
Loading
Loading
@@ -36,7 +36,8 @@
"external_hostname": { "type": ["string", "null"] },
"hostname": { "type": ["string", "null"] },
"email": { "type": ["string", "null"] },
"update_available": { "type": ["boolean", "null"] }
"update_available": { "type": ["boolean", "null"] },
"can_uninstall": { "type": "boolean" }
},
"required" : [ "name", "status" ]
}
Loading
Loading
Loading
Loading
@@ -10,6 +10,12 @@ describe Clusters::Applications::CertManager do
include_examples 'cluster application version specs', :clusters_applications_cert_managers
include_examples 'cluster application initial status specs'
 
describe '#can_uninstall?' do
subject { cert_manager.can_uninstall? }
it { is_expected.to be_falsey }
end
describe '#install_command' do
let(:cert_email) { 'admin@example.com' }
 
Loading
Loading
Loading
Loading
@@ -18,6 +18,14 @@ describe Clusters::Applications::Helm do
it { is_expected.to contain_exactly(installed_cluster, updated_cluster) }
end
 
describe '#can_uninstall?' do
let(:helm) { create(:clusters_applications_helm) }
subject { helm.can_uninstall? }
it { is_expected.to be_falsey }
end
describe '#issue_client_cert' do
let(:application) { create(:clusters_applications_helm) }
subject { application.issue_client_cert }
Loading
Loading
Loading
Loading
@@ -18,6 +18,12 @@ describe Clusters::Applications::Ingress do
allow(ClusterWaitForIngressIpAddressWorker).to receive(:perform_async)
end
 
describe '#can_uninstall?' do
subject { ingress.can_uninstall? }
it { is_expected.to be_falsey }
end
describe '#make_installed!' do
before do
application.make_installed!
Loading
Loading
Loading
Loading
@@ -10,6 +10,15 @@ describe Clusters::Applications::Jupyter do
 
it { is_expected.to belong_to(:oauth_application) }
 
describe '#can_uninstall?' do
let(:ingress) { create(:clusters_applications_ingress, :installed, external_hostname: 'localhost.localdomain') }
let(:jupyter) { create(:clusters_applications_jupyter, cluster: ingress.cluster) }
subject { jupyter.can_uninstall? }
it { is_expected.to be_falsey }
end
describe '#set_initial_status' do
before do
jupyter.set_initial_status
Loading
Loading
Loading
Loading
@@ -39,6 +39,12 @@ describe Clusters::Applications::Knative do
end
end
 
describe '#can_uninstall?' do
subject { knative.can_uninstall? }
it { is_expected.to be_falsey }
end
describe '#schedule_status_update with external_ip' do
let(:application) { create(:clusters_applications_knative, :installed) }
 
Loading
Loading
Loading
Loading
@@ -29,6 +29,14 @@ describe Clusters::Applications::Prometheus do
end
end
 
describe '#can_uninstall?' do
let(:prometheus) { create(:clusters_applications_prometheus) }
subject { prometheus.can_uninstall? }
it { is_expected.to be_truthy }
end
describe '#prometheus_client' do
context 'cluster is nil' do
it 'returns nil' do
Loading
Loading
Loading
Loading
@@ -13,6 +13,14 @@ describe Clusters::Applications::Runner do
 
it { is_expected.to belong_to(:runner) }
 
describe '#can_uninstall?' do
let(:gitlab_runner) { create(:clusters_applications_runner, runner: ci_runner) }
subject { gitlab_runner.can_uninstall? }
it { is_expected.to be_falsey }
end
describe '#install_command' do
let(:kubeclient) { double('kubernetes client') }
let(:gitlab_runner) { create(:clusters_applications_runner, runner: ci_runner) }
Loading
Loading
Loading
Loading
@@ -21,6 +21,10 @@ describe ClusterApplicationEntity do
expect(subject[:status_reason]).to be_nil
end
 
it 'has can_uninstall' do
expect(subject[:can_uninstall]).to be_falsey
end
context 'non-helm application' do
let(:application) { build(:clusters_applications_runner, version: '0.0.0') }
 
Loading
Loading
Loading
Loading
@@ -2,6 +2,14 @@ shared_examples 'cluster application core specs' do |application_name|
it { is_expected.to belong_to(:cluster) }
it { is_expected.to validate_presence_of(:cluster) }
 
describe '#can_uninstall?' do
it 'calls allowed_to_uninstall?' do
expect(subject).to receive(:allowed_to_uninstall?).and_return(true)
expect(subject.can_uninstall?).to be_truthy
end
end
describe '#name' do
it 'is .application_name' do
expect(subject.name).to eq(described_class.application_name)
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment