37 lines
866 B
Ruby
37 lines
866 B
Ruby
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
|