BigW Consortium Gitlab

Commit 3d3d09fa by Dylan Griffith

Schedule Ingress IP address fetch from K8s after clusters page load (#42643)

parent ba4114d2
...@@ -4,6 +4,7 @@ class Projects::ClustersController < Projects::ApplicationController ...@@ -4,6 +4,7 @@ class Projects::ClustersController < Projects::ApplicationController
before_action :authorize_create_cluster!, only: [:new] before_action :authorize_create_cluster!, only: [:new]
before_action :authorize_update_cluster!, only: [:update] before_action :authorize_update_cluster!, only: [:update]
before_action :authorize_admin_cluster!, only: [:destroy] before_action :authorize_admin_cluster!, only: [:destroy]
before_action :sync_application_details, only: [:status]
STATUS_POLLING_INTERVAL = 10_000 STATUS_POLLING_INTERVAL = 10_000
...@@ -114,4 +115,8 @@ class Projects::ClustersController < Projects::ApplicationController ...@@ -114,4 +115,8 @@ class Projects::ClustersController < Projects::ApplicationController
def authorize_admin_cluster! def authorize_admin_cluster!
access_denied! unless can?(current_user, :admin_cluster, cluster) access_denied! unless can?(current_user, :admin_cluster, cluster)
end end
def sync_application_details
@cluster.applications.each(&:sync_details)
end
end end
...@@ -36,6 +36,14 @@ module Clusters ...@@ -36,6 +36,14 @@ module Clusters
def install_command def install_command
Gitlab::Kubernetes::Helm::InstallCommand.new(name, chart: chart, chart_values_file: chart_values_file) Gitlab::Kubernetes::Helm::InstallCommand.new(name, chart: chart, chart_values_file: chart_values_file)
end 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 end
end end
...@@ -23,6 +23,11 @@ module Clusters ...@@ -23,6 +23,11 @@ module Clusters
def name def name
self.class.application_name self.class.application_name
end end
def sync_details
# Override if you need extra data synchronized
# from K8s after installation
end
end end
end end
end end
......
...@@ -91,6 +91,12 @@ describe Projects::ClustersController do ...@@ -91,6 +91,12 @@ describe Projects::ClustersController do
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
expect(response).to match_response_schema('cluster_status') expect(response).to match_response_schema('cluster_status')
end end
it 'invokes sync_details on each application' do
expect_any_instance_of(Clusters::Applications::Ingress).to receive(:sync_details)
go
end
end end
describe 'security' do describe 'security' do
......
...@@ -22,4 +22,33 @@ describe Clusters::Applications::Ingress do ...@@ -22,4 +22,33 @@ describe Clusters::Applications::Ingress do
.with(ClusterWaitForIngressIpAddressWorker::INTERVAL, 'ingress', application.id, 3) .with(ClusterWaitForIngressIpAddressWorker::INTERVAL, 'ingress', application.id, 3)
end end
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 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