diff options
author | Matija Čupić <matteeyah@gmail.com> | 2017-12-21 19:25:28 +0100 |
---|---|---|
committer | Matija Čupić <matteeyah@gmail.com> | 2017-12-21 19:25:28 +0100 |
commit | e395a2c1901aa08c5d1f26f94406552db44140fa (patch) | |
tree | 946ff7c3f46b073259540016d5b47c905824dedb /app | |
parent | 59c7f46e2aa33d633fdc3f78c8a4faa792e40972 (diff) | |
download | gitlab-ce-e395a2c1901aa08c5d1f26f94406552db44140fa.tar.gz |
Implement GCP billing check in cluster form
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/projects/clusters/gcp_controller.rb | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 0c8305480ae..27c11ce554d 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, except: [:login, :check, :run_check] + before_action :authorize_google_project_billing, only: [:new] before_action :authorize_create_cluster!, only: [:new, :create] STATUS_POLLING_INTERVAL = 1.minute.to_i @@ -25,15 +25,20 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end def create - @cluster = ::Clusters::CreateService - .new(project, current_user, create_params) - .execute(token_in_session) + case google_project_billing_status + when 'true' + @cluster = ::Clusters::CreateService + .new(project, current_user, create_params) + .execute(token_in_session) - if @cluster.persisted? - redirect_to project_cluster_path(project, @cluster) + return redirect_to project_cluster_path(project, @cluster) if @cluster.persisted? + when 'false' + flash[:error] = _('Please enable billing for one of your projects to be able to create a cluster.') else - render :new + flash[:error] = _('We could not verify that one of your projects on GCP has billing enabled. Please try again.') end + + render :new end private @@ -61,6 +66,15 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end end + def authorize_google_project_billing + CheckGcpProjectBillingWorker.perform_async(token_in_session) + end + + def google_project_billing_status + Gitlab::Redis::SharedState.with do |redis| + redis.get(CheckGcpProjectBillingWorker.redis_shared_state_key_for(token_in_session)) + end + end def token_in_session @token_in_session ||= |