Commit faa5b22e authored by Mayra Cabrera's avatar Mayra Cabrera Committed by Kamil Trzciński

EE Port: Improves restriction of multiple Kubernetes clusters via API

parent b64f59d1
---
title: Improves restriction of multiple Kubernetes clusters through API
merge_request: 24251
author:
type: fixed
...@@ -56,12 +56,10 @@ describe API::ProjectClusters do ...@@ -56,12 +56,10 @@ describe API::ProjectClusters do
} }
end end
before do
post api("/projects/#{project.id}/clusters/user", current_user), params: cluster_params
end
context 'when user sets specific environment scope' do context 'when user sets specific environment scope' do
it 'should create a cluster with that specific environment' do it 'should create a cluster with that specific environment' do
post api("/projects/#{project.id}/clusters/user", current_user), params: cluster_params
expect(json_response['environment_scope']).to eq('production/*') expect(json_response['environment_scope']).to eq('production/*')
end end
end end
...@@ -75,9 +73,30 @@ describe API::ProjectClusters do ...@@ -75,9 +73,30 @@ describe API::ProjectClusters do
end end
it 'should set default environment' do it 'should set default environment' do
post api("/projects/#{project.id}/clusters/user", current_user), params: cluster_params
expect(json_response['environment_scope']).to eq('*') expect(json_response['environment_scope']).to eq('*')
end end
end end
context 'when license has multiple clusters feature' do
before do
stub_licensed_features(multiple_clusters: true)
create(:cluster, :provided_by_gcp, :project,
projects: [project])
post api("/projects/#{project.id}/clusters/user", current_user), params: cluster_params
end
it 'should respond with 201' do
expect(response).to have_gitlab_http_status(201)
end
it 'should allow to associate multiple cluster to project' do
expect(project.reload.clusters.count).to eq(2)
end
end
end end
describe 'PUT /projects/:id/clusters/:cluster_id' do describe 'PUT /projects/:id/clusters/:cluster_id' do
......
...@@ -248,8 +248,8 @@ module API ...@@ -248,8 +248,8 @@ module API
forbidden! unless current_user.admin? forbidden! unless current_user.admin?
end end
def authorize!(action, subject = :global) def authorize!(action, subject = :global, reason = nil)
forbidden! unless can?(current_user, action, subject) forbidden!(reason) unless can?(current_user, action, subject)
end end
def authorize_push_project def authorize_push_project
......
...@@ -65,7 +65,7 @@ module API ...@@ -65,7 +65,7 @@ module API
use :create_params_ee use :create_params_ee
end end
post ':id/clusters/user' do post ':id/clusters/user' do
authorize! :create_cluster, user_project authorize! :add_cluster, user_project, 'Instance does not support multiple Kubernetes clusters'
user_cluster = ::Clusters::CreateService user_cluster = ::Clusters::CreateService
.new(current_user, create_cluster_user_params) .new(current_user, create_cluster_user_params)
......
...@@ -266,6 +266,23 @@ describe API::ProjectClusters do ...@@ -266,6 +266,23 @@ describe API::ProjectClusters do
end end
end end
end end
context 'when user tries to add multiple clusters' do
before do
create(:cluster, :provided_by_gcp, :project,
projects: [project])
post api("/projects/#{project.id}/clusters/user", current_user), params: cluster_params
end
it 'should respond with 403' do
expect(response).to have_gitlab_http_status(403)
end
it 'should return an appropriate message' do
expect(json_response['message']).to include('Instance does not support multiple Kubernetes clusters')
end
end
end end
describe 'PUT /projects/:id/clusters/:cluster_id' do describe 'PUT /projects/:id/clusters/:cluster_id' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment