diff options
author | Mayra Cabrera <mcabrera@gitlab.com> | 2018-02-21 14:16:09 -0600 |
---|---|---|
committer | Mayra Cabrera <mcabrera@gitlab.com> | 2018-02-21 14:20:55 -0600 |
commit | 4a3d7281f20aac5d8cea2189dde402f41d7e6800 (patch) | |
tree | e0f3a2893f082c204f80b8a3f2ef2ad0d610f81a | |
parent | 8579894f1b6e8bf9656e03fc415f60050b82e8a9 (diff) | |
download | gitlab-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
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') |