summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatija Čupić <matteeyah@gmail.com>2018-03-16 18:41:51 +0100
committerMatija Čupić <matteeyah@gmail.com>2018-03-16 18:42:30 +0100
commite911a0f896c3699c69b27509b1b38d173f96c81a (patch)
treee9714749d68aa100befdcd896a79ddc5fe20947c
parent45b3bcc39631729ce573210ef6201c2cc59d7cdb (diff)
downloadgitlab-ce-38759-fetch-available-parameters-directly-from-gke-when-creating-a-cluster.tar.gz
Expose CloudPlatform::Client#projects_list as GcpController#list_projects38759-fetch-available-parameters-directly-from-gke-when-creating-a-cluster
-rw-r--r--app/controllers/projects/clusters/gcp_controller.rb9
-rw-r--r--config/routes/project.rb1
-rw-r--r--spec/controllers/projects/clusters/gcp_controller_spec.rb30
3 files changed, 39 insertions, 1 deletions
diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb
index 6b0b22f8e73..7dfe819525f 100644
--- a/app/controllers/projects/clusters/gcp_controller.rb
+++ b/app/controllers/projects/clusters/gcp_controller.rb
@@ -1,6 +1,6 @@
class Projects::Clusters::GcpController < Projects::ApplicationController
before_action :authorize_read_cluster!
- before_action :authorize_google_api, except: [:login]
+ before_action :authorize_google_api, except: [:login, :list_projects]
before_action :authorize_google_project_billing, only: [:new, :create]
before_action :authorize_create_cluster!, only: [:new, :create]
before_action :verify_billing, only: [:create]
@@ -35,6 +35,13 @@ class Projects::Clusters::GcpController < Projects::ApplicationController
end
end
+ def list_projects
+ projects = GoogleApi::CloudPlatform::Client.new(token_in_session, nil).projects_list
+ respond_to do |format|
+ format.json { render status: :ok, json: { projects: projects } }
+ end
+ end
+
private
def verify_billing
diff --git a/config/routes/project.rb b/config/routes/project.rb
index c803737d40b..4cd11fe76e8 100644
--- a/config/routes/project.rb
+++ b/config/routes/project.rb
@@ -200,6 +200,7 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
get '/gcp/new', to: 'clusters/gcp#new'
get '/gcp/login', to: 'clusters/gcp#login'
+ get '/gcp/list_projects', to: 'clusters/gcp#list_projects'
post '/gcp', to: 'clusters/gcp#create'
end
end
diff --git a/spec/controllers/projects/clusters/gcp_controller_spec.rb b/spec/controllers/projects/clusters/gcp_controller_spec.rb
index e14ba29fa70..98158e081f8 100644
--- a/spec/controllers/projects/clusters/gcp_controller_spec.rb
+++ b/spec/controllers/projects/clusters/gcp_controller_spec.rb
@@ -199,4 +199,34 @@ describe Projects::Clusters::GcpController do
post :create, params.merge(namespace_id: project.namespace, project_id: project)
end
end
+
+ describe 'GET list_projects' do
+ describe 'functionality' do
+ let(:user) { create(:user) }
+ let(:api_response) { [project_id: 'test-project-1234'] }
+
+ before do
+ project.add_master(user)
+ sign_in(user)
+
+ allow_any_instance_of(GoogleApi::CloudPlatform::Client).to receive(:projects_list).and_return(api_response)
+ end
+
+ it 'calls the Google Cloud Platform projects_list' do
+ expect_any_instance_of(GoogleApi::CloudPlatform::Client).to receive(:projects_list)
+
+ go
+ end
+
+ it 'renders the response as json' do
+ go
+
+ expect(response.body).to eq({ projects: api_response }.to_json)
+ end
+ end
+
+ def go
+ get :list_projects, namespace_id: project.namespace, project_id: project, format: :json
+ end
+ end
end