Schedule Ingress IP address fetch from K8s after clusters page load (#42643)
This commit is contained in:
parent
ba4114d25f
commit
3d3d09fa9d
5 changed files with 53 additions and 0 deletions
|
@ -4,6 +4,7 @@ class Projects::ClustersController < Projects::ApplicationController
|
|||
before_action :authorize_create_cluster!, only: [:new]
|
||||
before_action :authorize_update_cluster!, only: [:update]
|
||||
before_action :authorize_admin_cluster!, only: [:destroy]
|
||||
before_action :sync_application_details, only: [:status]
|
||||
|
||||
STATUS_POLLING_INTERVAL = 10_000
|
||||
|
||||
|
@ -114,4 +115,8 @@ class Projects::ClustersController < Projects::ApplicationController
|
|||
def authorize_admin_cluster!
|
||||
access_denied! unless can?(current_user, :admin_cluster, cluster)
|
||||
end
|
||||
|
||||
def sync_application_details
|
||||
@cluster.applications.each(&:sync_details)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -36,6 +36,14 @@ module Clusters
|
|||
def install_command
|
||||
Gitlab::Kubernetes::Helm::InstallCommand.new(name, chart: chart, chart_values_file: chart_values_file)
|
||||
end
|
||||
|
||||
def sync_details
|
||||
return unless installed?
|
||||
return if external_ip
|
||||
|
||||
ClusterWaitForIngressIpAddressWorker.perform_in(
|
||||
ClusterWaitForIngressIpAddressWorker::INTERVAL, name, id, IP_ADDRESS_FETCH_RETRIES)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -23,6 +23,11 @@ module Clusters
|
|||
def name
|
||||
self.class.application_name
|
||||
end
|
||||
|
||||
def sync_details
|
||||
# Override if you need extra data synchronized
|
||||
# from K8s after installation
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -91,6 +91,12 @@ describe Projects::ClustersController do
|
|||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to match_response_schema('cluster_status')
|
||||
end
|
||||
|
||||
it 'invokes sync_details on each application' do
|
||||
expect_any_instance_of(Clusters::Applications::Ingress).to receive(:sync_details)
|
||||
|
||||
go
|
||||
end
|
||||
end
|
||||
|
||||
describe 'security' do
|
||||
|
|
|
@ -22,4 +22,33 @@ describe Clusters::Applications::Ingress do
|
|||
.with(ClusterWaitForIngressIpAddressWorker::INTERVAL, 'ingress', application.id, 3)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#sync_details' do
|
||||
let(:application) { create(:clusters_applications_ingress, :installed) }
|
||||
|
||||
before do
|
||||
application.sync_details
|
||||
end
|
||||
|
||||
it 'schedules a ClusterWaitForIngressIpAddressWorker' do
|
||||
expect(ClusterWaitForIngressIpAddressWorker).to have_received(:perform_in)
|
||||
.with(ClusterWaitForIngressIpAddressWorker::INTERVAL, 'ingress', application.id, 3)
|
||||
end
|
||||
|
||||
context 'when the application is not installed' do
|
||||
let(:application) { create(:clusters_applications_ingress, :installing) }
|
||||
|
||||
it 'does not schedule a ClusterWaitForIngressIpAddressWorker' do
|
||||
expect(ClusterWaitForIngressIpAddressWorker).not_to have_received(:perform_in)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there is already an external_ip' do
|
||||
let(:application) { create(:clusters_applications_ingress, :installed, external_ip: '111.222.222.111') }
|
||||
|
||||
it 'does not schedule a ClusterWaitForIngressIpAddressWorker' do
|
||||
expect(ClusterWaitForIngressIpAddressWorker).not_to have_received(:perform_in)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue