diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2018-03-01 17:38:04 +0000 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2018-03-01 17:38:04 +0000 |
commit | ccb080d94aa765d8391f262e25c5ead0764dc2ff (patch) | |
tree | 643e50759d3d92617606850ac987507c0ed59774 /app/services | |
parent | 52e133d17627396f29c1875b972534eaba4a837e (diff) | |
parent | ebac9c81ad1e859afe73482dd6f112b141cf9ede (diff) | |
download | gitlab-ce-ccb080d94aa765d8391f262e25c5ead0764dc2ff.tar.gz |
Merge branch '42643-persist-external-ip-of-ingress-controller-gke' into 'master'
Display ingress IP address in the Kubernetes page
See merge request gitlab-org/gitlab-ce!17052
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/clusters/applications/check_ingress_ip_address_service.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/app/services/clusters/applications/check_ingress_ip_address_service.rb b/app/services/clusters/applications/check_ingress_ip_address_service.rb new file mode 100644 index 00000000000..e572b1e5d99 --- /dev/null +++ b/app/services/clusters/applications/check_ingress_ip_address_service.rb @@ -0,0 +1,36 @@ +module Clusters + module Applications + class CheckIngressIpAddressService < BaseHelmService + include Gitlab::Utils::StrongMemoize + + Error = Class.new(StandardError) + + LEASE_TIMEOUT = 15.seconds.to_i + + def execute + return if app.external_ip + return unless try_obtain_lease + + app.update!(external_ip: ingress_ip) if ingress_ip + end + + private + + def try_obtain_lease + Gitlab::ExclusiveLease + .new("check_ingress_ip_address_service:#{app.id}", timeout: LEASE_TIMEOUT) + .try_obtain + end + + def ingress_ip + service.status.loadBalancer.ingress&.first&.ip + end + + def service + strong_memoize(:ingress_service) do + kubeclient.get_service('ingress-nginx-ingress-controller', Gitlab::Kubernetes::Helm::NAMESPACE) + end + end + end + end +end |