diff options
author | Shinya Maeda <shinya@gitlab.com> | 2017-11-07 22:12:19 +0900 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2017-11-07 22:12:19 +0900 |
commit | d89c18901bde510da2668e676b3bf2f1e21deef2 (patch) | |
tree | 57ddcc05bb1ca0d70bfb827d0e1ef4930c7ebf7b /app/services/clusters/gcp/provision_service.rb | |
parent | afef38533727cf32a7be324243a25b4db5eb5498 (diff) | |
parent | 666ab4882f2c6d385c04afe269ddf5b11f795b19 (diff) | |
download | gitlab-ce-d89c18901bde510da2668e676b3bf2f1e21deef2.tar.gz |
Merge branch 'master' into fix/sm/31771-do-not-allow-jobs-to-be-erased-new
Diffstat (limited to 'app/services/clusters/gcp/provision_service.rb')
-rw-r--r-- | app/services/clusters/gcp/provision_service.rb | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/app/services/clusters/gcp/provision_service.rb b/app/services/clusters/gcp/provision_service.rb new file mode 100644 index 00000000000..8beea5a8cfb --- /dev/null +++ b/app/services/clusters/gcp/provision_service.rb @@ -0,0 +1,47 @@ +module Clusters + module Gcp + class ProvisionService + attr_reader :provider + + def execute(provider) + @provider = provider + + get_operation_id do |operation_id| + if provider.make_creating(operation_id) + WaitForClusterCreationWorker.perform_in( + Clusters::Gcp::VerifyProvisionStatusService::INITIAL_INTERVAL, + provider.cluster_id) + else + provider.make_errored!("Failed to update provider record; #{provider.errors}") + end + end + end + + private + + def get_operation_id + operation = provider.api_client.projects_zones_clusters_create( + provider.gcp_project_id, + provider.zone, + provider.cluster.name, + provider.num_nodes, + machine_type: provider.machine_type) + + unless operation.status == 'PENDING' || operation.status == 'RUNNING' + return provider.make_errored!("Operation status is unexpected; #{operation.status_message}") + end + + operation_id = provider.api_client.parse_operation_id(operation.self_link) + + unless operation_id + return provider.make_errored!('Can not find operation_id from self_link') + end + + yield(operation_id) + + rescue Google::Apis::ServerError, Google::Apis::ClientError, Google::Apis::AuthorizationError => e + provider.make_errored!("Failed to request to CloudPlatform; #{e.message}") + end + end + end +end |