2018-07-16 12:31:01 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-10-13 13:21:23 -04:00
|
|
|
module Clusters
|
|
|
|
module Gcp
|
|
|
|
class VerifyProvisionStatusService
|
|
|
|
attr_reader :provider
|
|
|
|
|
|
|
|
INITIAL_INTERVAL = 2.minutes
|
|
|
|
EAGER_INTERVAL = 10.seconds
|
|
|
|
TIMEOUT = 20.minutes
|
|
|
|
|
|
|
|
def execute(provider)
|
|
|
|
@provider = provider
|
|
|
|
|
|
|
|
request_operation do |operation|
|
|
|
|
case operation.status
|
2017-10-23 04:36:35 -04:00
|
|
|
when 'PENDING', 'RUNNING'
|
2017-10-13 13:21:23 -04:00
|
|
|
continue_creation(operation)
|
|
|
|
when 'DONE'
|
|
|
|
finalize_creation
|
|
|
|
else
|
2018-04-18 05:19:40 -04:00
|
|
|
provider.make_errored!("Unexpected operation status; #{operation.status} #{operation.status_message}")
|
2017-10-13 13:21:23 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def continue_creation(operation)
|
2017-10-23 04:36:35 -04:00
|
|
|
if elapsed_time_from_creation(operation) < TIMEOUT
|
|
|
|
WaitForClusterCreationWorker.perform_in(EAGER_INTERVAL, provider.cluster_id)
|
|
|
|
else
|
2018-01-29 14:49:00 -05:00
|
|
|
provider.make_errored!(_('Kubernetes cluster creation time exceeds timeout; %{timeout}') % { timeout: TIMEOUT })
|
2017-10-13 13:21:23 -04:00
|
|
|
end
|
2017-10-23 04:36:35 -04:00
|
|
|
end
|
2017-10-13 13:21:23 -04:00
|
|
|
|
2017-10-23 04:36:35 -04:00
|
|
|
def elapsed_time_from_creation(operation)
|
|
|
|
Time.now.utc - operation.start_time.to_time.utc
|
2017-10-13 13:21:23 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def finalize_creation
|
|
|
|
Clusters::Gcp::FinalizeCreationService.new.execute(provider)
|
|
|
|
end
|
|
|
|
|
|
|
|
def request_operation(&blk)
|
2017-10-23 04:36:35 -04:00
|
|
|
Clusters::Gcp::FetchOperationService.new.execute(provider, &blk)
|
2017-10-13 13:21:23 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|