Stop configuring group clusters on creation
Immediate configuration is not ideal for group and instance level clusters as projects that may never be deployed would still have Kubernetes namespaces and service accounts created for them. As of https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/25586 we now create only the resources that are required for the project being deployed, at the time of deployment.
This commit is contained in:
parent
e9ed028472
commit
fa5a6ae172
11 changed files with 19 additions and 128 deletions
|
@ -378,8 +378,6 @@ module Ci
|
||||||
end
|
end
|
||||||
|
|
||||||
def any_unmet_prerequisites?
|
def any_unmet_prerequisites?
|
||||||
return false unless Feature.enabled?(:ci_preparing_state, default_enabled: true)
|
|
||||||
|
|
||||||
prerequisites.present?
|
prerequisites.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -21,11 +21,7 @@ module Clusters
|
||||||
private_class_method :projects_with_missing_kubernetes_namespaces_for_cluster
|
private_class_method :projects_with_missing_kubernetes_namespaces_for_cluster
|
||||||
|
|
||||||
def self.clusters_with_missing_kubernetes_namespaces_for_project(project)
|
def self.clusters_with_missing_kubernetes_namespaces_for_project(project)
|
||||||
if Feature.enabled?(:ci_preparing_state, default_enabled: true)
|
project.clusters.managed.missing_kubernetes_namespace(project.kubernetes_namespaces)
|
||||||
project.clusters.managed.missing_kubernetes_namespace(project.kubernetes_namespaces)
|
|
||||||
else
|
|
||||||
project.all_clusters.managed.missing_kubernetes_namespace(project.kubernetes_namespaces)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private_class_method :clusters_with_missing_kubernetes_namespaces_for_project
|
private_class_method :clusters_with_missing_kubernetes_namespaces_for_project
|
||||||
|
|
|
@ -100,8 +100,6 @@ module Projects
|
||||||
current_user.invalidate_personal_projects_count
|
current_user.invalidate_personal_projects_count
|
||||||
|
|
||||||
create_readme if @initialize_with_readme
|
create_readme if @initialize_with_readme
|
||||||
|
|
||||||
configure_group_clusters_for_project
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Refresh the current user's authorizations inline (so they can access the
|
# Refresh the current user's authorizations inline (so they can access the
|
||||||
|
@ -127,10 +125,6 @@ module Projects
|
||||||
Files::CreateService.new(@project, current_user, commit_attrs).execute
|
Files::CreateService.new(@project, current_user, commit_attrs).execute
|
||||||
end
|
end
|
||||||
|
|
||||||
def configure_group_clusters_for_project
|
|
||||||
ClusterProjectConfigureWorker.perform_async(@project.id)
|
|
||||||
end
|
|
||||||
|
|
||||||
def skip_wiki?
|
def skip_wiki?
|
||||||
!@project.feature_available?(:wiki, current_user) || @skip_wiki
|
!@project.feature_available?(:wiki, current_user) || @skip_wiki
|
||||||
end
|
end
|
||||||
|
|
|
@ -54,7 +54,6 @@ module Projects
|
||||||
end
|
end
|
||||||
|
|
||||||
attempt_transfer_transaction
|
attempt_transfer_transaction
|
||||||
configure_group_clusters_for_project
|
|
||||||
end
|
end
|
||||||
# rubocop: enable CodeReuse/ActiveRecord
|
# rubocop: enable CodeReuse/ActiveRecord
|
||||||
|
|
||||||
|
@ -164,9 +163,5 @@ module Projects
|
||||||
@new_namespace.full_path
|
@new_namespace.full_path
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def configure_group_clusters_for_project
|
|
||||||
ClusterProjectConfigureWorker.perform_async(project.id)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,7 +6,7 @@ class ClusterConfigureWorker
|
||||||
|
|
||||||
def perform(cluster_id)
|
def perform(cluster_id)
|
||||||
Clusters::Cluster.managed.find_by_id(cluster_id).try do |cluster|
|
Clusters::Cluster.managed.find_by_id(cluster_id).try do |cluster|
|
||||||
if cluster.project_type? || Feature.disabled?(:ci_preparing_state, default_enabled: true)
|
if cluster.project_type?
|
||||||
Clusters::RefreshService.create_or_update_namespaces_for_cluster(cluster)
|
Clusters::RefreshService.create_or_update_namespaces_for_cluster(cluster)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Remove ability for group clusters to be automatically configured on creation
|
||||||
|
merge_request: 27245
|
||||||
|
author:
|
||||||
|
type: removed
|
|
@ -2925,26 +2925,18 @@ describe Ci::Build do
|
||||||
|
|
||||||
subject { build.any_unmet_prerequisites? }
|
subject { build.any_unmet_prerequisites? }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(build).to receive(:prerequisites).and_return(prerequisites)
|
||||||
|
end
|
||||||
|
|
||||||
context 'build has prerequisites' do
|
context 'build has prerequisites' do
|
||||||
before do
|
let(:prerequisites) { [double] }
|
||||||
allow(build).to receive(:prerequisites).and_return([double])
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to be_truthy }
|
it { is_expected.to be_truthy }
|
||||||
|
|
||||||
context 'and the ci_preparing_state feature is disabled' do
|
|
||||||
before do
|
|
||||||
stub_feature_flags(ci_preparing_state: false)
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to be_falsey }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'build does not have prerequisites' do
|
context 'build does not have prerequisites' do
|
||||||
before do
|
let(:prerequisites) { [] }
|
||||||
allow(build).to receive(:prerequisites).and_return([])
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to be_falsey }
|
it { is_expected.to be_falsey }
|
||||||
end
|
end
|
||||||
|
|
|
@ -93,32 +93,14 @@ describe Clusters::RefreshService do
|
||||||
let(:group) { cluster.group }
|
let(:group) { cluster.group }
|
||||||
let(:project) { create(:project, group: group) }
|
let(:project) { create(:project, group: group) }
|
||||||
|
|
||||||
context 'when ci_preparing_state feature flag is enabled' do
|
include_examples 'does not create a kubernetes namespace'
|
||||||
include_examples 'does not create a kubernetes namespace'
|
|
||||||
|
|
||||||
context 'when project already has kubernetes namespace' do
|
context 'when project already has kubernetes namespace' do
|
||||||
before do
|
|
||||||
create(:cluster_kubernetes_namespace, project: project, cluster: cluster)
|
|
||||||
end
|
|
||||||
|
|
||||||
include_examples 'does not create a kubernetes namespace'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when ci_preparing_state feature flag is disabled' do
|
|
||||||
before do
|
before do
|
||||||
stub_feature_flags(ci_preparing_state: false)
|
create(:cluster_kubernetes_namespace, project: project, cluster: cluster)
|
||||||
end
|
end
|
||||||
|
|
||||||
include_examples 'creates a kubernetes namespace'
|
include_examples 'does not create a kubernetes namespace'
|
||||||
|
|
||||||
context 'when project already has kubernetes namespace' do
|
|
||||||
before do
|
|
||||||
create(:cluster_kubernetes_namespace, project: project, cluster: cluster)
|
|
||||||
end
|
|
||||||
|
|
||||||
include_examples 'does not create a kubernetes namespace'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -268,33 +268,6 @@ describe Projects::CreateService, '#execute' do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when group has kubernetes cluster' do
|
|
||||||
let(:group_cluster) { create(:cluster, :group, :provided_by_gcp) }
|
|
||||||
let(:group) { group_cluster.group }
|
|
||||||
|
|
||||||
let(:token) { 'aaaa' }
|
|
||||||
let(:service_account_creator) { double(Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService, execute: true) }
|
|
||||||
let(:secrets_fetcher) { double(Clusters::Gcp::Kubernetes::FetchKubernetesTokenService, execute: token) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
group.add_owner(user)
|
|
||||||
|
|
||||||
stub_feature_flags(ci_preparing_state: false)
|
|
||||||
expect(Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService).to receive(:namespace_creator).and_return(service_account_creator)
|
|
||||||
expect(Clusters::Gcp::Kubernetes::FetchKubernetesTokenService).to receive(:new).and_return(secrets_fetcher)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'creates kubernetes namespace for the project' do
|
|
||||||
project = create_project(user, opts.merge!(namespace_id: group.id))
|
|
||||||
|
|
||||||
expect(project).to be_valid
|
|
||||||
|
|
||||||
kubernetes_namespace = group_cluster.kubernetes_namespaces.first
|
|
||||||
expect(kubernetes_namespace).to be_present
|
|
||||||
expect(kubernetes_namespace.project).to eq(project)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when there is an active service template' do
|
context 'when there is an active service template' do
|
||||||
before do
|
before do
|
||||||
create(:service, project: nil, template: true, active: true)
|
create(:service, project: nil, template: true, active: true)
|
||||||
|
|
|
@ -73,33 +73,6 @@ describe Projects::TransferService do
|
||||||
shard_name: project.repository_storage
|
shard_name: project.repository_storage
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'new group has a kubernetes cluster' do
|
|
||||||
let(:group_cluster) { create(:cluster, :group, :provided_by_gcp) }
|
|
||||||
let(:group) { group_cluster.group }
|
|
||||||
|
|
||||||
let(:token) { 'aaaa' }
|
|
||||||
let(:service_account_creator) { double(Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService, execute: true) }
|
|
||||||
let(:secrets_fetcher) { double(Clusters::Gcp::Kubernetes::FetchKubernetesTokenService, execute: token) }
|
|
||||||
|
|
||||||
subject { transfer_project(project, user, group) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
stub_feature_flags(ci_preparing_state: false)
|
|
||||||
expect(Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService).to receive(:namespace_creator).and_return(service_account_creator)
|
|
||||||
expect(Clusters::Gcp::Kubernetes::FetchKubernetesTokenService).to receive(:new).and_return(secrets_fetcher)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'creates kubernetes namespace for the project' do
|
|
||||||
subject
|
|
||||||
|
|
||||||
expect(project.kubernetes_namespaces.count).to eq(1)
|
|
||||||
|
|
||||||
kubernetes_namespace = group_cluster.kubernetes_namespaces.first
|
|
||||||
expect(kubernetes_namespace).to be_present
|
|
||||||
expect(kubernetes_namespace.project).to eq(project)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when transfer fails' do
|
context 'when transfer fails' do
|
||||||
|
|
|
@ -4,11 +4,6 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe ClusterConfigureWorker, '#perform' do
|
describe ClusterConfigureWorker, '#perform' do
|
||||||
let(:worker) { described_class.new }
|
let(:worker) { described_class.new }
|
||||||
let(:ci_preparing_state_enabled) { false }
|
|
||||||
|
|
||||||
before do
|
|
||||||
stub_feature_flags(ci_preparing_state: ci_preparing_state_enabled)
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples 'configured cluster' do
|
shared_examples 'configured cluster' do
|
||||||
it 'creates a namespace' do
|
it 'creates a namespace' do
|
||||||
|
@ -33,26 +28,14 @@ describe ClusterConfigureWorker, '#perform' do
|
||||||
context 'when group has a project' do
|
context 'when group has a project' do
|
||||||
let!(:project) { create(:project, group: group) }
|
let!(:project) { create(:project, group: group) }
|
||||||
|
|
||||||
it_behaves_like 'configured cluster'
|
it_behaves_like 'unconfigured cluster'
|
||||||
|
|
||||||
context 'ci_preparing_state feature is enabled' do
|
|
||||||
let(:ci_preparing_state_enabled) { true }
|
|
||||||
|
|
||||||
it_behaves_like 'unconfigured cluster'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when group has project in a sub-group' do
|
context 'when group has project in a sub-group' do
|
||||||
let!(:subgroup) { create(:group, parent: group) }
|
let!(:subgroup) { create(:group, parent: group) }
|
||||||
let!(:project) { create(:project, group: subgroup) }
|
let!(:project) { create(:project, group: subgroup) }
|
||||||
|
|
||||||
it_behaves_like 'configured cluster'
|
it_behaves_like 'unconfigured cluster'
|
||||||
|
|
||||||
context 'ci_preparing_state feature is enabled' do
|
|
||||||
let(:ci_preparing_state_enabled) { true }
|
|
||||||
|
|
||||||
it_behaves_like 'unconfigured cluster'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue