fa5a6ae172
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.
113 lines
4 KiB
Ruby
113 lines
4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
describe Clusters::RefreshService do
|
|
shared_examples 'creates a kubernetes namespace' do
|
|
let(:token) { 'aaaaaa' }
|
|
let(:service_account_creator) { double(Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService, execute: true) }
|
|
let(:secrets_fetcher) { double(Clusters::Gcp::Kubernetes::FetchKubernetesTokenService, execute: token) }
|
|
|
|
it 'creates a kubernetes namespace' do
|
|
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)
|
|
|
|
expect { subject }.to change(project.kubernetes_namespaces, :count)
|
|
|
|
kubernetes_namespace = cluster.kubernetes_namespaces.first
|
|
expect(kubernetes_namespace).to be_present
|
|
expect(kubernetes_namespace.project).to eq(project)
|
|
end
|
|
end
|
|
|
|
shared_examples 'does not create a kubernetes namespace' do
|
|
it 'does not create a new kubernetes namespace' do
|
|
expect(Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService).not_to receive(:namespace_creator)
|
|
expect(Clusters::Gcp::Kubernetes::FetchKubernetesTokenService).not_to receive(:new)
|
|
|
|
expect { subject }.not_to change(Clusters::KubernetesNamespace, :count)
|
|
end
|
|
end
|
|
|
|
describe '.create_or_update_namespaces_for_cluster' do
|
|
let(:cluster) { create(:cluster, :provided_by_user, :project) }
|
|
let(:project) { cluster.project }
|
|
|
|
subject { described_class.create_or_update_namespaces_for_cluster(cluster) }
|
|
|
|
context 'cluster is project level' do
|
|
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
|
|
end
|
|
|
|
context 'cluster is group level' do
|
|
let(:cluster) { create(:cluster, :provided_by_user, :group) }
|
|
let(:group) { cluster.group }
|
|
let(:project) { create(:project, group: group) }
|
|
|
|
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
|
|
end
|
|
end
|
|
|
|
describe '.create_or_update_namespaces_for_project' do
|
|
let(:project) { create(:project) }
|
|
|
|
subject { described_class.create_or_update_namespaces_for_project(project) }
|
|
|
|
it 'creates no kubernetes namespaces' do
|
|
expect { subject }.not_to change(project.kubernetes_namespaces, :count)
|
|
end
|
|
|
|
context 'project has a project cluster' do
|
|
let!(:cluster) { create(:cluster, :provided_by_gcp, cluster_type: :project_type, projects: [project]) }
|
|
|
|
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
|
|
end
|
|
|
|
context 'project belongs to a group cluster' do
|
|
let!(:cluster) { create(:cluster, :provided_by_gcp, :group) }
|
|
|
|
let(:group) { cluster.group }
|
|
let(:project) { create(:project, group: group) }
|
|
|
|
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 'cluster is not managed' do
|
|
let!(:cluster) { create(:cluster, :project, :not_managed, projects: [project]) }
|
|
|
|
include_examples 'does not create a kubernetes namespace'
|
|
end
|
|
end
|
|
end
|