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
|
||||
|
||||
def any_unmet_prerequisites?
|
||||
return false unless Feature.enabled?(:ci_preparing_state, default_enabled: true)
|
||||
|
||||
prerequisites.present?
|
||||
end
|
||||
|
||||
|
|
|
@ -21,11 +21,7 @@ module Clusters
|
|||
private_class_method :projects_with_missing_kubernetes_namespaces_for_cluster
|
||||
|
||||
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)
|
||||
else
|
||||
project.all_clusters.managed.missing_kubernetes_namespace(project.kubernetes_namespaces)
|
||||
end
|
||||
project.clusters.managed.missing_kubernetes_namespace(project.kubernetes_namespaces)
|
||||
end
|
||||
|
||||
private_class_method :clusters_with_missing_kubernetes_namespaces_for_project
|
||||
|
|
|
@ -100,8 +100,6 @@ module Projects
|
|||
current_user.invalidate_personal_projects_count
|
||||
|
||||
create_readme if @initialize_with_readme
|
||||
|
||||
configure_group_clusters_for_project
|
||||
end
|
||||
|
||||
# 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
|
||||
end
|
||||
|
||||
def configure_group_clusters_for_project
|
||||
ClusterProjectConfigureWorker.perform_async(@project.id)
|
||||
end
|
||||
|
||||
def skip_wiki?
|
||||
!@project.feature_available?(:wiki, current_user) || @skip_wiki
|
||||
end
|
||||
|
|
|
@ -54,7 +54,6 @@ module Projects
|
|||
end
|
||||
|
||||
attempt_transfer_transaction
|
||||
configure_group_clusters_for_project
|
||||
end
|
||||
# rubocop: enable CodeReuse/ActiveRecord
|
||||
|
||||
|
@ -164,9 +163,5 @@ module Projects
|
|||
@new_namespace.full_path
|
||||
)
|
||||
end
|
||||
|
||||
def configure_group_clusters_for_project
|
||||
ClusterProjectConfigureWorker.perform_async(project.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,7 +6,7 @@ class ClusterConfigureWorker
|
|||
|
||||
def perform(cluster_id)
|
||||
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)
|
||||
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? }
|
||||
|
||||
before do
|
||||
allow(build).to receive(:prerequisites).and_return(prerequisites)
|
||||
end
|
||||
|
||||
context 'build has prerequisites' do
|
||||
before do
|
||||
allow(build).to receive(:prerequisites).and_return([double])
|
||||
end
|
||||
let(:prerequisites) { [double] }
|
||||
|
||||
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
|
||||
|
||||
context 'build does not have prerequisites' do
|
||||
before do
|
||||
allow(build).to receive(:prerequisites).and_return([])
|
||||
end
|
||||
let(:prerequisites) { [] }
|
||||
|
||||
it { is_expected.to be_falsey }
|
||||
end
|
||||
|
|
|
@ -93,32 +93,14 @@ describe Clusters::RefreshService do
|
|||
let(:group) { cluster.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
|
||||
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
|
||||
context 'when project already has kubernetes namespace' do
|
||||
before do
|
||||
stub_feature_flags(ci_preparing_state: false)
|
||||
create(:cluster_kubernetes_namespace, project: project, cluster: cluster)
|
||||
end
|
||||
|
||||
include_examples 'creates 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
|
||||
include_examples 'does not create a kubernetes namespace'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -268,33 +268,6 @@ describe Projects::CreateService, '#execute' do
|
|||
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
|
||||
before do
|
||||
create(:service, project: nil, template: true, active: true)
|
||||
|
|
|
@ -73,33 +73,6 @@ describe Projects::TransferService do
|
|||
shard_name: project.repository_storage
|
||||
)
|
||||
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
|
||||
|
||||
context 'when transfer fails' do
|
||||
|
|
|
@ -4,11 +4,6 @@ require 'spec_helper'
|
|||
|
||||
describe ClusterConfigureWorker, '#perform' do
|
||||
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
|
||||
it 'creates a namespace' do
|
||||
|
@ -33,26 +28,14 @@ describe ClusterConfigureWorker, '#perform' do
|
|||
context 'when group has a project' do
|
||||
let!(:project) { create(:project, group: group) }
|
||||
|
||||
it_behaves_like 'configured cluster'
|
||||
|
||||
context 'ci_preparing_state feature is enabled' do
|
||||
let(:ci_preparing_state_enabled) { true }
|
||||
|
||||
it_behaves_like 'unconfigured cluster'
|
||||
end
|
||||
it_behaves_like 'unconfigured cluster'
|
||||
end
|
||||
|
||||
context 'when group has project in a sub-group' do
|
||||
let!(:subgroup) { create(:group, parent: group) }
|
||||
let!(:project) { create(:project, group: subgroup) }
|
||||
|
||||
it_behaves_like 'configured cluster'
|
||||
|
||||
context 'ci_preparing_state feature is enabled' do
|
||||
let(:ci_preparing_state_enabled) { true }
|
||||
|
||||
it_behaves_like 'unconfigured cluster'
|
||||
end
|
||||
it_behaves_like 'unconfigured cluster'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue