Skip to content
Snippets Groups Projects
Commit fa5a6ae1 authored by Tiger Watson's avatar Tiger Watson
Browse files

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.
parent e9ed0284
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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
 
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -54,7 +54,6 @@ module Projects
end
 
attempt_transfer_transaction
configure_group_clusters_for_project
end
# rubocop: enable CodeReuse/ActiveRecord
 
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
---
title: Remove ability for group clusters to be automatically configured on creation
merge_request: 27245
author:
type: removed
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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'
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
include_examples 'does not create a kubernetes namespace'
 
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
 
Loading
Loading
Loading
Loading
@@ -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)
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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
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