Commit 0dd58980 authored by Thong Kuah's avatar Thong Kuah

EE: Fix EE specific code affected by refactor

- EE: Restore metrics json endpoint for cluster

Use new controller so that we have one less EE prepend.

- EE: Fix assets and views for ClustersController

We moved from Projects::ClustersController to ClustersController.
So, some of the EE only views and assets needs to be updated.

Also update some EE only controller specs to ClustersController

- EE: Update override of can_create_cluster?

The method signature changed in CE to accomodate group as a
`clusterable`. Correspondingly, update the method to use `clusterable`.

This presumes multiple group level clusters is available at the same
license as projet level clusters which is GitLab Premium.

Also fix related specs
parent 40060eca
...@@ -88,6 +88,9 @@ Rails.application.routes.draw do ...@@ -88,6 +88,9 @@ Rails.application.routes.draw do
end end
member do member do
# EE specific
get :metrics, to: 'clusters/cluster_metrics#show', as: :metrics
scope :applications do scope :applications do
post '/:application', to: 'clusters/applications#create', as: :install_applications post '/:application', to: 'clusters/applications#create', as: :install_applications
end end
......
import '~/pages/projects/clusters/show'; import '~/pages/clusters/show';
import initClusterHealth from './cluster_health'; import initClusterHealth from './cluster_health';
document.addEventListener('DOMContentLoaded', initClusterHealth); document.addEventListener('DOMContentLoaded', initClusterHealth);
# frozen_string_literal: true
class Clusters::ClusterMetricsController < Clusters::BaseController
before_action :cluster, only: :metrics
before_action :authorize_read_cluster!
def show
return render_404 unless prometheus_adapter&.can_query?
respond_to do |format|
format.json do
metrics = prometheus_adapter.query(:cluster) || {}
if metrics.any?
render json: metrics
else
head :no_content
end
end
end
end
private
def cluster
@cluster ||= clusterable.clusters.find(params[:id])
.present(current_user: current_user)
end
def prometheus_adapter
return unless cluster&.application_prometheus_available?
cluster.application_prometheus
end
end
module EE
module Projects
module ClustersController
extend ActiveSupport::Concern
def metrics
return render_404 unless prometheus_adapter&.can_query?
respond_to do |format|
format.json do
metrics = prometheus_adapter.query(:cluster) || {}
if metrics.any?
render json: metrics
else
head :no_content
end
end
end
end
private
def prometheus_adapter
return unless cluster&.application_prometheus_available?
cluster.application_prometheus
end
end
end
end
...@@ -4,8 +4,8 @@ module EE ...@@ -4,8 +4,8 @@ module EE
extend ::Gitlab::Utils::Override extend ::Gitlab::Utils::Override
override :can_create_cluster? override :can_create_cluster?
def can_create_cluster?(project) def can_create_cluster?
super || project.feature_available?(:multiple_clusters) super || clusterable.feature_available?(:multiple_clusters)
end end
end end
end end
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
"empty-loading-svg-path": image_path('illustrations/monitoring/loading.svg'), "empty-loading-svg-path": image_path('illustrations/monitoring/loading.svg'),
"empty-no-data-svg-path": image_path('illustrations/monitoring/no_data.svg'), "empty-no-data-svg-path": image_path('illustrations/monitoring/no_data.svg'),
"empty-unable-to-connect-svg-path": image_path('illustrations/monitoring/unable_to_connect.svg'), "empty-unable-to-connect-svg-path": image_path('illustrations/monitoring/unable_to_connect.svg'),
"metrics-endpoint": metrics_namespace_project_cluster_path( format: :json ), "metrics-endpoint": metrics_cluster_path(clusterable_params.merge(format: :json)),
"project-path": project_path(@project), "project-path": project_path(@project),
"tags-path": project_tags_path(@project) } } "tags-path": project_tags_path(@project) } }
......
require 'spec_helper' require 'spec_helper'
describe Projects::ClustersController do describe Clusters::ClusterMetricsController do
include AccessMatchersForController include AccessMatchersForController
set(:project) { create(:project) } set(:project) { create(:project) }
describe 'GET metrics' do describe 'GET show' do
let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) } let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
describe 'functionality' do describe 'functionality' do
...@@ -69,10 +69,11 @@ describe Projects::ClustersController do ...@@ -69,10 +69,11 @@ describe Projects::ClustersController do
end end
def go def go
get :metrics, format: :json, get :show,
namespace_id: project.namespace, format: :json,
project_id: project, namespace_id: project.namespace.to_param,
id: cluster project_id: project.to_param,
id: cluster
end end
describe 'security' do describe 'security' do
......
...@@ -9,7 +9,7 @@ describe 'Gcp Cluster', :js do ...@@ -9,7 +9,7 @@ describe 'Gcp Cluster', :js do
before do before do
project.add_maintainer(user) project.add_maintainer(user)
gitlab_sign_in(user) gitlab_sign_in(user)
allow(Projects::ClustersController).to receive(:STATUS_POLLING_INTERVAL) { 100 } allow(ClustersController).to receive(:STATUS_POLLING_INTERVAL) { 100 }
end end
context 'when a user has a licence to use multiple clusers' do context 'when a user has a licence to use multiple clusers' do
......
...@@ -75,14 +75,11 @@ describe 'EE Clusters', :js do ...@@ -75,14 +75,11 @@ describe 'EE Clusters', :js do
context 'when user adds an Google Kubernetes Engine cluster' do context 'when user adds an Google Kubernetes Engine cluster' do
before do before do
allow_any_instance_of(Projects::ClustersController) allow_any_instance_of(ClustersController)
.to receive(:token_in_session).and_return('token') .to receive(:token_in_session).and_return('token')
allow_any_instance_of(Projects::ClustersController) allow_any_instance_of(ClustersController)
.to receive(:expires_at_in_session).and_return(1.hour.since.to_i.to_s) .to receive(:expires_at_in_session).and_return(1.hour.since.to_i.to_s)
allow_any_instance_of(Projects::ClustersController).to receive(:authorize_google_project_billing)
allow_any_instance_of(Projects::ClustersController).to receive(:google_project_billing_status).and_return(true)
allow_any_instance_of(GoogleApi::CloudPlatform::Client) allow_any_instance_of(GoogleApi::CloudPlatform::Client)
.to receive(:projects_zones_clusters_create) do .to receive(:projects_zones_clusters_create) do
OpenStruct.new( OpenStruct.new(
......
...@@ -6,7 +6,7 @@ describe Clusters::CreateService do ...@@ -6,7 +6,7 @@ describe Clusters::CreateService do
let(:user) { create(:user) } let(:user) { create(:user) }
let!(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, projects: [project]) } let!(:cluster) { create(:cluster, :provided_by_gcp, :production_environment, projects: [project]) }
subject { described_class.new(user, params).execute(project: project, access_token: access_token) } subject { described_class.new(user, params).execute(access_token: access_token) }
before do before do
allow(project).to receive(:feature_available?).and_call_original allow(project).to receive(:feature_available?).and_call_original
...@@ -18,13 +18,38 @@ describe Clusters::CreateService do ...@@ -18,13 +18,38 @@ describe Clusters::CreateService do
end end
context 'when correct params' do context 'when correct params' do
include_context 'valid cluster create params' let(:params) do
{
name: 'test-cluster',
provider_type: :gcp,
provider_gcp_attributes: {
gcp_project_id: 'gcp-project',
zone: 'us-central1-a',
num_nodes: 1,
machine_type: 'machine_type-a',
legacy_abac: 'true'
},
clusterable: project
}
end
include_examples 'create cluster service success' include_examples 'create cluster service success'
end end
context 'when invalid params' do context 'when invalid params' do
include_context 'invalid cluster create params' let(:params) do
{
name: 'test-cluster',
provider_type: :gcp,
provider_gcp_attributes: {
gcp_project_id: '!!!!!!!',
zone: 'us-central1-a',
num_nodes: 1,
machine_type: 'machine_type-a'
},
clusterable: project
}
end
include_examples 'create cluster service error' include_examples 'create cluster service error'
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