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
end
member do
# EE specific
get :metrics, to: 'clusters/cluster_metrics#show', as: :metrics
scope :applications do
post '/:application', to: 'clusters/applications#create', as: :install_applications
end
......
import '~/pages/projects/clusters/show';
import '~/pages/clusters/show';
import initClusterHealth from './cluster_health';
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
extend ::Gitlab::Utils::Override
override :can_create_cluster?
def can_create_cluster?(project)
super || project.feature_available?(:multiple_clusters)
def can_create_cluster?
super || clusterable.feature_available?(:multiple_clusters)
end
end
end
......
......@@ -10,7 +10,7 @@
"empty-loading-svg-path": image_path('illustrations/monitoring/loading.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'),
"metrics-endpoint": metrics_namespace_project_cluster_path( format: :json ),
"metrics-endpoint": metrics_cluster_path(clusterable_params.merge(format: :json)),
"project-path": project_path(@project),
"tags-path": project_tags_path(@project) } }
......
require 'spec_helper'
describe Projects::ClustersController do
describe Clusters::ClusterMetricsController do
include AccessMatchersForController
set(:project) { create(:project) }
describe 'GET metrics' do
describe 'GET show' do
let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
describe 'functionality' do
......@@ -69,10 +69,11 @@ describe Projects::ClustersController do
end
def go
get :metrics, format: :json,
namespace_id: project.namespace,
project_id: project,
id: cluster
get :show,
format: :json,
namespace_id: project.namespace.to_param,
project_id: project.to_param,
id: cluster
end
describe 'security' do
......
......@@ -9,7 +9,7 @@ describe 'Gcp Cluster', :js do
before do
project.add_maintainer(user)
gitlab_sign_in(user)
allow(Projects::ClustersController).to receive(:STATUS_POLLING_INTERVAL) { 100 }
allow(ClustersController).to receive(:STATUS_POLLING_INTERVAL) { 100 }
end
context 'when a user has a licence to use multiple clusers' do
......
......@@ -75,14 +75,11 @@ describe 'EE Clusters', :js do
context 'when user adds an Google Kubernetes Engine cluster' do
before do
allow_any_instance_of(Projects::ClustersController)
allow_any_instance_of(ClustersController)
.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)
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)
.to receive(:projects_zones_clusters_create) do
OpenStruct.new(
......
......@@ -6,7 +6,7 @@ describe Clusters::CreateService do
let(:user) { create(:user) }
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
allow(project).to receive(:feature_available?).and_call_original
......@@ -18,13 +18,38 @@ describe Clusters::CreateService do
end
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'
end
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'
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