Update version on :installed, not :installing
This makes this consistent with :updated. And also avoids a potential issue where an install errors which means that that the recorded version won't necessarily reflect the version that is actually installed.
This commit is contained in:
parent
8ef1128f67
commit
e72f24d27b
9 changed files with 22 additions and 89 deletions
|
@ -7,11 +7,7 @@ module Clusters
|
||||||
|
|
||||||
included do
|
included do
|
||||||
state_machine :status do
|
state_machine :status do
|
||||||
after_transition any => [:installing] do |application|
|
before_transition any => [:installed, :updated] do |application|
|
||||||
application.update(version: application.class.const_get(:VERSION))
|
|
||||||
end
|
|
||||||
|
|
||||||
before_transition any => :updated do |application|
|
|
||||||
application.version = application.class.const_get(:VERSION)
|
application.version = application.class.const_get(:VERSION)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Update cluster application version on updated and installed status
|
||||||
|
merge_request: 24810
|
||||||
|
author:
|
||||||
|
type: other
|
|
@ -4,20 +4,7 @@ describe Clusters::Applications::CertManager do
|
||||||
let(:cert_manager) { create(:clusters_applications_cert_managers) }
|
let(:cert_manager) { create(:clusters_applications_cert_managers) }
|
||||||
|
|
||||||
include_examples 'cluster application core specs', :clusters_applications_cert_managers
|
include_examples 'cluster application core specs', :clusters_applications_cert_managers
|
||||||
|
include_examples 'cluster application status specs', :clusters_applications_cert_managers
|
||||||
describe '#make_installing!' do
|
|
||||||
before do
|
|
||||||
application.make_installing!
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'application install previously errored with older version' do
|
|
||||||
let(:application) { create(:clusters_applications_cert_managers, :scheduled, version: 'v0.4.0') }
|
|
||||||
|
|
||||||
it 'updates the application version' do
|
|
||||||
expect(application.reload.version).to eq('v0.5.2')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#install_command' do
|
describe '#install_command' do
|
||||||
let(:cluster_issuer_file) { { "cluster_issuer.yaml": "---\napiVersion: certmanager.k8s.io/v1alpha1\nkind: ClusterIssuer\nmetadata:\n name: letsencrypt-prod\nspec:\n acme:\n server: https://acme-v02.api.letsencrypt.org/directory\n email: admin@example.com\n privateKeySecretRef:\n name: letsencrypt-prod\n http01: {}\n" } }
|
let(:cluster_issuer_file) { { "cluster_issuer.yaml": "---\napiVersion: certmanager.k8s.io/v1alpha1\nkind: ClusterIssuer\nmetadata:\n name: letsencrypt-prod\nspec:\n acme:\n server: https://acme-v02.api.letsencrypt.org/directory\n email: admin@example.com\n privateKeySecretRef:\n name: letsencrypt-prod\n http01: {}\n" } }
|
||||||
|
|
|
@ -26,20 +26,6 @@ describe Clusters::Applications::Ingress do
|
||||||
it { is_expected.to contain_exactly(cluster) }
|
it { is_expected.to contain_exactly(cluster) }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#make_installing!' do
|
|
||||||
before do
|
|
||||||
application.make_installing!
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'application install previously errored with older version' do
|
|
||||||
let(:application) { create(:clusters_applications_ingress, :scheduled, version: '0.22.0') }
|
|
||||||
|
|
||||||
it 'updates the application version' do
|
|
||||||
expect(application.reload.version).to eq('1.1.2')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#make_installed!' do
|
describe '#make_installed!' do
|
||||||
before do
|
before do
|
||||||
application.make_installed!
|
application.make_installed!
|
||||||
|
|
|
@ -2,6 +2,7 @@ require 'rails_helper'
|
||||||
|
|
||||||
describe Clusters::Applications::Jupyter do
|
describe Clusters::Applications::Jupyter do
|
||||||
include_examples 'cluster application core specs', :clusters_applications_jupyter
|
include_examples 'cluster application core specs', :clusters_applications_jupyter
|
||||||
|
include_examples 'cluster application status specs', :clusters_applications_jupyter
|
||||||
include_examples 'cluster application helm specs', :clusters_applications_jupyter
|
include_examples 'cluster application helm specs', :clusters_applications_jupyter
|
||||||
|
|
||||||
it { is_expected.to belong_to(:oauth_application) }
|
it { is_expected.to belong_to(:oauth_application) }
|
||||||
|
@ -26,20 +27,6 @@ describe Clusters::Applications::Jupyter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#make_installing!' do
|
|
||||||
before do
|
|
||||||
application.make_installing!
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'application install previously errored with older version' do
|
|
||||||
let(:application) { create(:clusters_applications_jupyter, :scheduled, version: 'v0.5') }
|
|
||||||
|
|
||||||
it 'updates the application version' do
|
|
||||||
expect(application.reload.version).to eq('v0.6')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#install_command' do
|
describe '#install_command' do
|
||||||
let!(:ingress) { create(:clusters_applications_ingress, :installed, external_ip: '127.0.0.1') }
|
let!(:ingress) { create(:clusters_applications_ingress, :installed, external_ip: '127.0.0.1') }
|
||||||
let!(:jupyter) { create(:clusters_applications_jupyter, cluster: ingress.cluster) }
|
let!(:jupyter) { create(:clusters_applications_jupyter, cluster: ingress.cluster) }
|
||||||
|
|
|
@ -34,20 +34,6 @@ describe Clusters::Applications::Knative do
|
||||||
it { is_expected.to contain_exactly(cluster) }
|
it { is_expected.to contain_exactly(cluster) }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#make_installing!' do
|
|
||||||
before do
|
|
||||||
application.make_installing!
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'application install previously errored with older version' do
|
|
||||||
let(:application) { create(:clusters_applications_knative, :scheduled, version: '0.2.2') }
|
|
||||||
|
|
||||||
it 'updates the application version' do
|
|
||||||
expect(application.reload.version).to eq('0.2.2')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#make_installed' do
|
describe '#make_installed' do
|
||||||
subject { described_class.installed }
|
subject { described_class.installed }
|
||||||
|
|
||||||
|
|
|
@ -19,20 +19,6 @@ describe Clusters::Applications::Prometheus do
|
||||||
it { is_expected.to contain_exactly(cluster) }
|
it { is_expected.to contain_exactly(cluster) }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#make_installing!' do
|
|
||||||
before do
|
|
||||||
application.make_installing!
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'application install previously errored with older version' do
|
|
||||||
let(:application) { create(:clusters_applications_prometheus, :scheduled, version: '6.7.2') }
|
|
||||||
|
|
||||||
it 'updates the application version' do
|
|
||||||
expect(application.reload.version).to eq('6.7.3')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'transition to installed' do
|
describe 'transition to installed' do
|
||||||
let(:project) { create(:project) }
|
let(:project) { create(:project) }
|
||||||
let(:cluster) { create(:cluster, :with_installed_helm, projects: [project]) }
|
let(:cluster) { create(:cluster, :with_installed_helm, projects: [project]) }
|
||||||
|
|
|
@ -9,20 +9,6 @@ describe Clusters::Applications::Runner do
|
||||||
|
|
||||||
it { is_expected.to belong_to(:runner) }
|
it { is_expected.to belong_to(:runner) }
|
||||||
|
|
||||||
describe '#make_installing!' do
|
|
||||||
before do
|
|
||||||
application.make_installing!
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'application install previously errored with older version' do
|
|
||||||
let(:application) { create(:clusters_applications_runner, :scheduled, version: '0.1.30') }
|
|
||||||
|
|
||||||
it 'updates the application version' do
|
|
||||||
expect(application.reload.version).to eq('0.1.45')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '.installed' do
|
describe '.installed' do
|
||||||
subject { described_class.installed }
|
subject { described_class.installed }
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,10 @@ shared_examples 'cluster application status specs' do |application_name|
|
||||||
context 'when application is scheduled' do
|
context 'when application is scheduled' do
|
||||||
before do
|
before do
|
||||||
create(:clusters_applications_helm, :installed, cluster: cluster)
|
create(:clusters_applications_helm, :installed, cluster: cluster)
|
||||||
|
|
||||||
|
if described_class == Clusters::Applications::Jupyter
|
||||||
|
create(:clusters_applications_ingress, :installed, external_ip: '127.0.0.1', cluster: cluster)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets a default status' do
|
it 'sets a default status' do
|
||||||
|
@ -58,6 +62,16 @@ shared_examples 'cluster application status specs' do |application_name|
|
||||||
|
|
||||||
expect(subject.cluster.application_helm.version).to eq(Gitlab::Kubernetes::Helm::HELM_VERSION)
|
expect(subject.cluster.application_helm.version).to eq(Gitlab::Kubernetes::Helm::HELM_VERSION)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'sets the correct version of the application' do
|
||||||
|
subject.update!(version: '0.0.0')
|
||||||
|
|
||||||
|
subject.make_installed!
|
||||||
|
|
||||||
|
subject.reload
|
||||||
|
|
||||||
|
expect(subject.version).to eq(subject.class.const_get(:VERSION))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#make_updated' do
|
describe '#make_updated' do
|
||||||
|
|
Loading…
Reference in a new issue