50 lines
1.4 KiB
Ruby
50 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Clusters
|
|
module Aws
|
|
class VerifyProvisionStatusService
|
|
attr_reader :provider
|
|
|
|
INITIAL_INTERVAL = 5.minutes
|
|
POLL_INTERVAL = 1.minute
|
|
TIMEOUT = 30.minutes
|
|
|
|
def execute(provider)
|
|
@provider = provider
|
|
|
|
case cluster_stack.stack_status
|
|
when 'CREATE_IN_PROGRESS'
|
|
continue_creation
|
|
when 'CREATE_COMPLETE'
|
|
finalize_creation
|
|
else
|
|
provider.make_errored!("Unexpected status; #{cluster_stack.stack_status}")
|
|
end
|
|
rescue ::Aws::CloudFormation::Errors::ServiceError => e
|
|
provider.make_errored!("Amazon CloudFormation request failed; #{e.message}")
|
|
end
|
|
|
|
private
|
|
|
|
def cluster_stack
|
|
@cluster_stack ||= provider.api_client.describe_stacks(stack_name: provider.cluster.name).stacks.first
|
|
end
|
|
|
|
def continue_creation
|
|
if timeout_threshold.future?
|
|
WaitForClusterCreationWorker.perform_in(POLL_INTERVAL, provider.cluster_id)
|
|
else
|
|
provider.make_errored!(_('Kubernetes cluster creation time exceeds timeout; %{timeout}') % { timeout: TIMEOUT })
|
|
end
|
|
end
|
|
|
|
def timeout_threshold
|
|
cluster_stack.creation_time + TIMEOUT
|
|
end
|
|
|
|
def finalize_creation
|
|
Clusters::Aws::FinalizeCreationService.new.execute(provider)
|
|
end
|
|
end
|
|
end
|
|
end
|