Skip to content
Snippets Groups Projects
Commit 9f0983a4 authored by Mike Greiling's avatar Mike Greiling Committed by Kushal Pandya
Browse files

Resolve "Hide cluster features that don't work yet with Group Clusters"

parent 70ba4ba2
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -14,6 +14,7 @@ import MonitoringButtonComponent from './environment_monitoring.vue';
import CommitComponent from '../../vue_shared/components/commit.vue';
import eventHub from '../event_hub';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
import { CLUSTER_TYPE } from '~/clusters/constants';
 
/**
* Environment Item Component
Loading
Loading
@@ -84,6 +85,15 @@ export default {
return this.model && this.model.is_protected;
},
 
/**
* Hide group cluster features which are not currently implemented.
*
* @returns {Boolean}
*/
disableGroupClusterFeatures() {
return this.model && this.model.cluster_type === CLUSTER_TYPE.GROUP;
},
/**
* Returns whether the environment can be stopped.
*
Loading
Loading
@@ -547,6 +557,7 @@ export default {
<terminal-button-component
v-if="model && model.terminal_path"
:terminal-path="model.terminal_path"
:disabled="disableGroupClusterFeatures"
/>
 
<rollback-component
Loading
Loading
Loading
Loading
@@ -19,6 +19,11 @@ export default {
required: false,
default: '',
},
disabled: {
type: Boolean,
required: false,
default: false,
},
},
computed: {
title() {
Loading
Loading
@@ -33,6 +38,7 @@ export default {
:title="title"
:aria-label="title"
:href="terminalPath"
:class="{ disabled: disabled }"
class="btn terminal-button d-none d-sm-none d-md-block"
>
<icon name="terminal" />
Loading
Loading
# frozen_string_literal: true
 
class Environment < ActiveRecord::Base
include Gitlab::Utils::StrongMemoize
# Used to generate random suffixes for the slug
LETTERS = 'a'..'z'
NUMBERS = '0'..'9'
Loading
Loading
@@ -231,7 +232,9 @@ class Environment < ActiveRecord::Base
end
 
def deployment_platform
project.deployment_platform(environment: self.name)
strong_memoize(:deployment_platform) do
project.deployment_platform(environment: self.name)
end
end
 
private
Loading
Loading
Loading
Loading
@@ -23,6 +23,10 @@ class EnvironmentEntity < Grape::Entity
stop_project_environment_path(environment.project, environment)
end
 
expose :cluster_type, if: ->(environment, _) { cluster_platform_kubernetes? } do |environment|
cluster.cluster_type
end
expose :terminal_path, if: ->(*) { environment.has_terminals? && can_access_terminal? } do |environment|
terminal_project_environment_path(environment.project, environment)
end
Loading
Loading
@@ -48,4 +52,16 @@ class EnvironmentEntity < Grape::Entity
def can_access_terminal?
can?(request.current_user, :create_environment_terminal, environment)
end
def cluster_platform_kubernetes?
deployment_platform && deployment_platform.is_a?(Clusters::Platforms::Kubernetes)
end
def deployment_platform
environment.deployment_platform
end
def cluster
deployment_platform.cluster
end
end
---
title: Hide cluster features that don't work yet with Group Clusters
merge_request: 23935
author:
type: fixed
Loading
Loading
@@ -2,30 +2,46 @@ import Vue from 'vue';
import terminalComp from '~/environments/components/environment_terminal_button.vue';
 
describe('Stop Component', () => {
let TerminalComponent;
let component;
const terminalPath = '/path';
 
beforeEach(() => {
TerminalComponent = Vue.extend(terminalComp);
const mountWithProps = props => {
const TerminalComponent = Vue.extend(terminalComp);
component = new TerminalComponent({
propsData: {
terminalPath,
},
propsData: props,
}).$mount();
});
};
describe('enabled', () => {
beforeEach(() => {
mountWithProps({ terminalPath });
});
describe('computed', () => {
it('title', () => {
expect(component.title).toEqual('Terminal');
});
});
 
describe('computed', () => {
it('title', () => {
expect(component.title).toEqual('Terminal');
it('should render a link to open a web terminal with the provided path', () => {
expect(component.$el.tagName).toEqual('A');
expect(component.$el.getAttribute('data-original-title')).toEqual('Terminal');
expect(component.$el.getAttribute('aria-label')).toEqual('Terminal');
expect(component.$el.getAttribute('href')).toEqual(terminalPath);
});
it('should render a non-disabled button', () => {
expect(component.$el.classList).not.toContain('disabled');
});
});
 
it('should render a link to open a web terminal with the provided path', () => {
expect(component.$el.tagName).toEqual('A');
expect(component.$el.getAttribute('data-original-title')).toEqual('Terminal');
expect(component.$el.getAttribute('aria-label')).toEqual('Terminal');
expect(component.$el.getAttribute('href')).toEqual(terminalPath);
describe('disabled', () => {
beforeEach(() => {
mountWithProps({ terminalPath, disabled: true });
});
it('should render a disabled button', () => {
expect(component.$el.classList).toContain('disabled');
});
});
});
Loading
Loading
@@ -4,7 +4,7 @@ require 'spec_helper'
 
describe Gitlab::Prometheus::QueryVariables do
describe '.call' do
set(:environment) { create(:environment) }
let(:environment) { create(:environment) }
let(:slug) { environment.slug }
 
subject { described_class.call(environment) }
Loading
Loading
@@ -20,7 +20,7 @@ describe Gitlab::Prometheus::QueryVariables do
it { is_expected.to include(kube_namespace: '') }
end
 
context 'with deplyoment platform' do
context 'with deployment platform' do
let(:kube_namespace) { environment.deployment_platform.actual_namespace }
 
before do
Loading
Loading
Loading
Loading
@@ -40,4 +40,34 @@ describe EnvironmentEntity do
expect(subject).to include(:metrics_path)
end
end
context 'with deployment platform' do
let(:project) { create(:project, :repository) }
let(:environment) { create(:environment, project: project) }
context 'when deployment platform is a cluster' do
before do
create(:cluster,
:provided_by_gcp,
:project,
environment_scope: '*',
projects: [project])
end
it 'should include cluster_type' do
expect(subject).to include(:cluster_type)
expect(subject[:cluster_type]).to eq('project_type')
end
end
context 'when deployment platform is a Kubernetes Service' do
before do
create(:kubernetes_service, project: project)
end
it 'should not include cluster_type' do
expect(subject).not_to include(:cluster_type)
end
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment