summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMayra Cabrera <mcabrera@gitlab.com>2018-02-21 14:16:09 -0600
committerMayra Cabrera <mcabrera@gitlab.com>2018-02-21 14:20:55 -0600
commit4a3d7281f20aac5d8cea2189dde402f41d7e6800 (patch)
treee0f3a2893f082c204f80b8a3f2ef2ad0d610f81a
parent8579894f1b6e8bf9656e03fc415f60050b82e8a9 (diff)
downloadgitlab-ce-fix-cluster-creation.tar.gz
Changes GCPProjectBillingService to directly request the projectfix-cluster-creation
For some reason, service.list_project is no longer returning all the projects we have access to. By directly requesting the project we can tell if this one has billing enabled or not Closes #43576
-rw-r--r--app/controllers/projects/clusters/gcp_controller.rb7
-rw-r--r--app/services/check_gcp_project_billing_service.rb10
-rw-r--r--app/workers/check_gcp_project_billing_worker.rb4
-rw-r--r--spec/services/check_gcp_project_billing_service_spec.rb6
-rw-r--r--spec/workers/check_gcp_project_billing_worker_spec.rb10
5 files changed, 20 insertions, 17 deletions
diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb
index 0f41af7d87b..557b4363e07 100644
--- a/app/controllers/projects/clusters/gcp_controller.rb
+++ b/app/controllers/projects/clusters/gcp_controller.rb
@@ -1,7 +1,7 @@
class Projects::Clusters::GcpController < Projects::ApplicationController
before_action :authorize_read_cluster!
before_action :authorize_google_api, except: [:login]
- before_action :authorize_google_project_billing, only: [:new, :create]
+ before_action :authorize_google_project_billing, only: [:create]
before_action :authorize_create_cluster!, only: [:new, :create]
before_action :verify_billing, only: [:create]
@@ -77,7 +77,10 @@ class Projects::Clusters::GcpController < Projects::ApplicationController
def authorize_google_project_billing
redis_token_key = CheckGcpProjectBillingWorker.store_session_token(token_in_session)
- CheckGcpProjectBillingWorker.perform_async(redis_token_key)
+ project_id = params[:cluster][:provider_gcp_attributes][:gcp_project_id]
+ return unless project_id
+
+ CheckGcpProjectBillingWorker.perform_async(redis_token_key, project_id)
end
def google_project_billing_status
diff --git a/app/services/check_gcp_project_billing_service.rb b/app/services/check_gcp_project_billing_service.rb
index ea82b61b279..04148f2f594 100644
--- a/app/services/check_gcp_project_billing_service.rb
+++ b/app/services/check_gcp_project_billing_service.rb
@@ -1,11 +1,9 @@
class CheckGcpProjectBillingService
- def execute(token)
+ def execute(token, project_id)
client = GoogleApi::CloudPlatform::Client.new(token, nil)
- client.projects_list.select do |project|
- begin
- client.projects_get_billing_info(project.project_id).billing_enabled
- rescue
- end
+ begin
+ client.projects_get_billing_info(project_id).billing_enabled
+ rescue
end
end
end
diff --git a/app/workers/check_gcp_project_billing_worker.rb b/app/workers/check_gcp_project_billing_worker.rb
index 363f81590ab..c115cbeb445 100644
--- a/app/workers/check_gcp_project_billing_worker.rb
+++ b/app/workers/check_gcp_project_billing_worker.rb
@@ -30,14 +30,14 @@ class CheckGcpProjectBillingWorker
end
end
- def perform(token_key)
+ def perform(token_key, project_id)
return unless token_key
token = self.class.get_session_token(token_key)
return unless token
return unless try_obtain_lease_for(token)
- billing_enabled_state = !CheckGcpProjectBillingService.new.execute(token).empty?
+ billing_enabled_state = CheckGcpProjectBillingService.new.execute(token, project_id)
update_billing_change_counter(self.class.get_billing_state(token), billing_enabled_state)
self.class.set_billing_state(token, billing_enabled_state)
end
diff --git a/spec/services/check_gcp_project_billing_service_spec.rb b/spec/services/check_gcp_project_billing_service_spec.rb
index 3e68d906e71..e8ec40e6d0e 100644
--- a/spec/services/check_gcp_project_billing_service_spec.rb
+++ b/spec/services/check_gcp_project_billing_service_spec.rb
@@ -11,14 +11,14 @@ describe CheckGcpProjectBillingService do
stub_cloud_platform_projects_list(project_id: project_id)
end
- subject { service.execute('bogustoken') }
+ subject { service.execute('bogustoken', project_id) }
context 'google account has a billing enabled gcp project' do
before do
stub_cloud_platform_projects_get_billing_info(project_id, true)
end
- it { is_expected.to all(satisfy { |project| project.project_id == project_id }) }
+ it { is_expected.to be_truthy }
end
context 'google account does not have a billing enabled gcp project' do
@@ -26,7 +26,7 @@ describe CheckGcpProjectBillingService do
stub_cloud_platform_projects_get_billing_info(project_id, false)
end
- it { is_expected.to eq([]) }
+ it { is_expected.to be_falsy }
end
end
end
diff --git a/spec/workers/check_gcp_project_billing_worker_spec.rb b/spec/workers/check_gcp_project_billing_worker_spec.rb
index 526ecf75921..5d822f59185 100644
--- a/spec/workers/check_gcp_project_billing_worker_spec.rb
+++ b/spec/workers/check_gcp_project_billing_worker_spec.rb
@@ -1,10 +1,12 @@
require 'spec_helper'
describe CheckGcpProjectBillingWorker do
+ let(:project_id) { 'project-123' }
+
describe '.perform' do
let(:token) { 'bogustoken' }
- subject { described_class.new.perform('token_key') }
+ subject { described_class.new.perform('token_key', project_id) }
before do
allow(described_class).to receive(:get_billing_state)
@@ -22,13 +24,13 @@ describe CheckGcpProjectBillingWorker do
end
it 'calls the service' do
- expect(CheckGcpProjectBillingService).to receive_message_chain(:new, :execute).and_return([double])
+ expect(CheckGcpProjectBillingService).to receive_message_chain(:new, :execute).and_return(true)
subject
end
it 'stores billing status in redis' do
- expect(CheckGcpProjectBillingService).to receive_message_chain(:new, :execute).and_return([double])
+ expect(CheckGcpProjectBillingService).to receive_message_chain(:new, :execute).and_return(true)
expect(described_class).to receive(:set_billing_state).with(token, true)
subject
@@ -62,7 +64,7 @@ describe CheckGcpProjectBillingWorker do
end
describe 'billing change counter' do
- subject { described_class.new.perform('token_key') }
+ subject { described_class.new.perform('token_key', project_id) }
before do
allow(described_class).to receive(:get_session_token).and_return('bogustoken')