Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorDylan Griffith <dyl.griffith@gmail.com>2018-02-20 04:42:05 +0300
committerDylan Griffith <dyl.griffith@gmail.com>2018-02-20 04:47:07 +0300
commitba4114d25f538d198df2f681b9cb08567494207e (patch)
tree876cf5b44ab81b25cdf30acb9ebd642778800615 /app
parentf0b27f9b406579a03e55fa16cbc7095009dc8c2b (diff)
Refactor ingress IP address waiting code (#42643)
Diffstat (limited to 'app')
-rw-r--r--app/models/clusters/applications/ingress.rb15
-rw-r--r--app/models/clusters/concerns/application_core.rb4
-rw-r--r--app/services/clusters/applications/check_ingress_ip_address_service.rb23
-rw-r--r--app/services/clusters/applications/check_installation_progress_service.rb1
-rw-r--r--app/workers/cluster_wait_for_ingress_ip_address_worker.rb15
5 files changed, 32 insertions, 26 deletions
diff --git a/app/models/clusters/applications/ingress.rb b/app/models/clusters/applications/ingress.rb
index 5e9086aecca..418ce7d1504 100644
--- a/app/models/clusters/applications/ingress.rb
+++ b/app/models/clusters/applications/ingress.rb
@@ -5,6 +5,7 @@ module Clusters
include ::Clusters::Concerns::ApplicationCore
include ::Clusters::Concerns::ApplicationStatus
+ include AfterCommitQueue
default_value_for :ingress_type, :nginx
default_value_for :version, :nginx
@@ -15,6 +16,15 @@ module Clusters
IP_ADDRESS_FETCH_RETRIES = 3
+ state_machine :status do
+ before_transition any => [:installed] do |application|
+ application.run_after_commit do
+ ClusterWaitForIngressIpAddressWorker.perform_in(
+ ClusterWaitForIngressIpAddressWorker::INTERVAL, application.name, application.id, IP_ADDRESS_FETCH_RETRIES)
+ end
+ end
+ end
+
def chart
'stable/nginx-ingress'
end
@@ -26,11 +36,6 @@ module Clusters
def install_command
Gitlab::Kubernetes::Helm::InstallCommand.new(name, chart: chart, chart_values_file: chart_values_file)
end
-
- def post_install
- ClusterWaitForIngressIpAddressWorker.perform_in(
- ClusterWaitForIngressIpAddressWorker::INTERVAL, name, id, IP_ADDRESS_FETCH_RETRIES)
- end
end
end
end
diff --git a/app/models/clusters/concerns/application_core.rb b/app/models/clusters/concerns/application_core.rb
index b047fbce214..a98fa85a5ff 100644
--- a/app/models/clusters/concerns/application_core.rb
+++ b/app/models/clusters/concerns/application_core.rb
@@ -23,10 +23,6 @@ module Clusters
def name
self.class.application_name
end
-
- def post_install
- # Override for any extra work that needs to be done after install
- end
end
end
end
diff --git a/app/services/clusters/applications/check_ingress_ip_address_service.rb b/app/services/clusters/applications/check_ingress_ip_address_service.rb
index 3262aa59a90..300b7ed522c 100644
--- a/app/services/clusters/applications/check_ingress_ip_address_service.rb
+++ b/app/services/clusters/applications/check_ingress_ip_address_service.rb
@@ -1,22 +1,24 @@
module Clusters
module Applications
class CheckIngressIpAddressService < BaseHelmService
+ Error = Class.new(StandardError)
+
LEASE_TIMEOUT = 3.seconds.to_i
- def execute(retries_remaining)
- return if app.external_ip
- return unless try_obtain_lease
+ def execute
+ return true if app.external_ip
+ return true unless try_obtain_lease
service = get_service
if service.status.loadBalancer.ingress
resolve_external_ip(service)
else
- retry_if_necessary(retries_remaining)
+ false
end
- rescue KubeException
- retry_if_necessary(retries_remaining)
+ rescue KubeException => e
+ raise Error, "#{e.class}: #{e.message}"
end
private
@@ -28,19 +30,12 @@ module Clusters
end
def resolve_external_ip(service)
- app.update!( external_ip: service.status.loadBalancer.ingress[0].ip)
+ app.update!(external_ip: service.status.loadBalancer.ingress[0].ip)
end
def get_service
kubeclient.get_service('ingress-nginx-ingress-controller', Gitlab::Kubernetes::Helm::NAMESPACE)
end
-
- def retry_if_necessary(retries_remaining)
- if retries_remaining > 0
- ClusterWaitForIngressIpAddressWorker.perform_in(
- ClusterWaitForIngressIpAddressWorker::INTERVAL, app.name, app.id, retries_remaining - 1)
- end
- end
end
end
end
diff --git a/app/services/clusters/applications/check_installation_progress_service.rb b/app/services/clusters/applications/check_installation_progress_service.rb
index 7dcddc1c3f7..bde090eaeec 100644
--- a/app/services/clusters/applications/check_installation_progress_service.rb
+++ b/app/services/clusters/applications/check_installation_progress_service.rb
@@ -20,7 +20,6 @@ module Clusters
def on_success
app.make_installed!
- app.post_install
ensure
remove_installation_pod
end
diff --git a/app/workers/cluster_wait_for_ingress_ip_address_worker.rb b/app/workers/cluster_wait_for_ingress_ip_address_worker.rb
index 829417484cf..0fbb9fb2526 100644
--- a/app/workers/cluster_wait_for_ingress_ip_address_worker.rb
+++ b/app/workers/cluster_wait_for_ingress_ip_address_worker.rb
@@ -4,11 +4,22 @@ class ClusterWaitForIngressIpAddressWorker
include ClusterApplications
INTERVAL = 10.seconds
- TIMEOUT = 20.minutes
def perform(app_name, app_id, retries_remaining)
find_application(app_name, app_id) do |app|
- Clusters::Applications::CheckIngressIpAddressService.new(app).execute(retries_remaining)
+ result = Clusters::Applications::CheckIngressIpAddressService.new(app).execute
+ retry_if_necessary(app_name, app_id, retries_remaining) unless result
+ end
+ rescue Clusters::Applications::CheckIngressIpAddressService::Error => e
+ retry_if_necessary(app_name, app_id, retries_remaining)
+ raise e
+ end
+
+ private
+
+ def retry_if_necessary(app_name, app_id, retries_remaining)
+ if retries_remaining > 0
+ self.class.perform_in(INTERVAL, app_name, app_id, retries_remaining - 1)
end
end
end