Commit 08752e5d authored by Alessio Caiazza's avatar Alessio Caiazza

Remove `Clusters::Applications::FetchInstallationStatusService`

parent c46417c5
...@@ -52,7 +52,7 @@ module Clusters ...@@ -52,7 +52,7 @@ module Clusters
end end
def applications def applications
[ [
application_helm || build_application_helm application_helm || build_application_helm
] ]
end end
......
...@@ -4,26 +4,52 @@ module Clusters ...@@ -4,26 +4,52 @@ module Clusters
def execute def execute
return unless app.installing? return unless app.installing?
FetchInstallationStatusService.new(app).execute do |phase, log| case installation_phase
case phase when Gitlab::Kubernetes::Pod::SUCCEEDED
when 'Succeeded' on_succeeded
if app.make_installed when Gitlab::Kubernetes::Pod::FAILED
FinalizeInstallationService.new(app).execute on_failed
else else
app.make_errored!("Failed to update app record; #{app.errors}") check_timeout
end
when 'Failed'
app.make_errored!(log || 'Installation silently failed')
FinalizeInstallationService.new(app).execute
else
if Time.now.utc - app.updated_at.to_time.utc > ClusterWaitForAppInstallationWorker::TIMEOUT
app.make_errored!('App installation timeouted')
else
ClusterWaitForAppInstallationWorker.perform_in(
ClusterWaitForAppInstallationWorker::EAGER_INTERVAL, app.name, app.id)
end
end
end end
rescue KubeException => ke
app.make_errored!("Kubernetes error: #{ke.message}") unless app.errored?
end
private
def on_succeeded
if app.make_installed
finalize_installation
else
app.make_errored!("Failed to update app record; #{app.errors}")
end
end
def on_failed
app.make_errored!(log || 'Installation silently failed')
finalize_installation
end
def check_timeout
if Time.now.utc - app.updated_at.to_time.utc > ClusterWaitForAppInstallationWorker::TIMEOUT
app.make_errored!('App installation timeouted')
else
ClusterWaitForAppInstallationWorker.perform_in(
ClusterWaitForAppInstallationWorker::INTERVAL, app.name, app.id)
end
end
def finilize_installation
FinalizeInstallationService.new(app).execute
end
def installation_phase
helm_api.installation_status(app)
end
def installation_errors
helm_api.installation_log(app)
end end
end end
end end
......
module Clusters
module Applications
class FetchInstallationStatusService < BaseHelmService
def execute
return unless app.installing?
phase = helm_api.installation_status(app)
log = helm_api.installation_log(app) if phase == 'Failed'
yield(phase, log) if block_given?
rescue KubeException => ke
app.make_errored!("Kubernetes error: #{ke.message}") unless app.errored?
end
end
end
end
...@@ -9,7 +9,7 @@ module Clusters ...@@ -9,7 +9,7 @@ module Clusters
if app.make_installing if app.make_installing
ClusterWaitForAppInstallationWorker.perform_in( ClusterWaitForAppInstallationWorker.perform_in(
ClusterWaitForAppInstallationWorker::INITIAL_INTERVAL, app.name, app.id) ClusterWaitForAppInstallationWorker::INTERVAL, app.name, app.id)
else else
app.make_errored!("Failed to update app record; #{app.errors}") app.make_errored!("Failed to update app record; #{app.errors}")
end end
......
...@@ -3,8 +3,7 @@ class ClusterWaitForAppInstallationWorker ...@@ -3,8 +3,7 @@ class ClusterWaitForAppInstallationWorker
include ClusterQueue include ClusterQueue
include ClusterApplications include ClusterApplications
INITIAL_INTERVAL = 30.seconds INTERVAL = 30.seconds
EAGER_INTERVAL = 10.seconds
TIMEOUT = 20.minutes TIMEOUT = 20.minutes
def perform(app_name, app_id) def perform(app_name, app_id)
......
module Gitlab
module Kubernetes
module Pod
PENDING = 'Pending'.freeze
RUNNING = 'Running'.freeze
SUCCEEDED = 'Succeeded'.freeze
FAILED = 'Failed'.freeze
UNKNOWN = 'Unknown'.freeze
PHASES = [PENDING, RUNNING, SUCCEEDED, FAILED, UNKNONW].freeze
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment