diff --git a/app/assets/javascripts/boards/components/boards_selector.vue b/app/assets/javascripts/boards/components/boards_selector.vue index 0484c88c587..334c162954e 100644 --- a/app/assets/javascripts/boards/components/boards_selector.vue +++ b/app/assets/javascripts/boards/components/boards_selector.vue @@ -316,6 +316,7 @@ export default { {{ s__('IssueBoards|Delete board') }} diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue index ce2e4b883e4..b865c9deb72 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue @@ -7,8 +7,16 @@ export default { ServiceCredentialsForm, EksClusterConfigurationForm, }, + props: { + gitlabManagedClusterHelpPath: { + type: String, + required: true, + }, + }, }; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue index 94a446f1721..d451516dd35 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue @@ -1,9 +1,11 @@ diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/security_group_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/security_group_dropdown.vue deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/app/assets/javascripts/create_cluster/eks_cluster/constants.js b/app/assets/javascripts/create_cluster/eks_cluster/constants.js new file mode 100644 index 00000000000..339642f991e --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/constants.js @@ -0,0 +1,7 @@ +// eslint-disable-next-line import/prefer-default-export +export const KUBERNETES_VERSIONS = [ + { name: '1.14', value: '1.14' }, + { name: '1.13', value: '1.13' }, + { name: '1.12', value: '1.12' }, + { name: '1.11', value: '1.11' }, +]; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/index.js b/app/assets/javascripts/create_cluster/eks_cluster/index.js index 9365fc41f4c..77454a2bc00 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/index.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/index.js @@ -12,7 +12,18 @@ export default () => components: { CreateEksCluster, }, + data() { + const { gitlabManagedClusterHelpPath } = document.querySelector(this.$options.el).dataset; + + return { + gitlabManagedClusterHelpPath, + }; + }, render(createElement) { - return createElement('create-eks-cluster'); + return createElement('create-eks-cluster', { + props: { + gitlabManagedClusterHelpPath: this.gitlabManagedClusterHelpPath, + }, + }); }, }); diff --git a/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js b/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js index 98ad33d6651..d982e4db4c1 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js @@ -1,96 +1,84 @@ import EC2 from 'aws-sdk/clients/ec2'; import IAM from 'aws-sdk/clients/iam'; -export const fetchRoles = () => - new Promise((resolve, reject) => { - const iam = new IAM(); +export const fetchRoles = () => { + const iam = new IAM(); - iam - .listRoles() - .on('success', ({ data: { Roles: roles } }) => { - const transformedRoles = roles.map(({ RoleName: name }) => ({ name })); + return iam + .listRoles() + .promise() + .then(({ Roles: roles }) => roles.map(({ RoleName: name }) => ({ name }))); +}; - resolve(transformedRoles); - }) - .on('error', error => { - reject(error); - }) - .send(); - }); +export const fetchKeyPairs = () => { + const ec2 = new EC2(); -export const fetchKeyPairs = () => - new Promise((resolve, reject) => { - const ec2 = new EC2(); + return ec2 + .describeKeyPairs() + .promise() + .then(({ KeyPairs: keyPairs }) => keyPairs.map(({ RegionName: name }) => ({ name }))); +}; - ec2 - .describeKeyPairs() - .on('success', ({ data: { KeyPairs: keyPairs } }) => { - const transformedKeyPairs = keyPairs.map(({ RegionName: name }) => ({ name })); +export const fetchRegions = () => { + const ec2 = new EC2(); - resolve(transformedKeyPairs); - }) - .on('error', error => { - reject(error); - }) - .send(); - }); + return ec2 + .describeRegions() + .promise() + .then(({ Regions: regions }) => + regions.map(({ RegionName: name }) => ({ + name, + value: name, + })), + ); +}; -export const fetchRegions = () => - new Promise((resolve, reject) => { - const ec2 = new EC2(); +export const fetchVpcs = () => { + const ec2 = new EC2(); - ec2 - .describeRegions() - .on('success', ({ data: { Regions: regions } }) => { - const transformedRegions = regions.map(({ RegionName: name }) => ({ name })); + return ec2 + .describeVpcs() + .promise() + .then(({ Vpcs: vpcs }) => + vpcs.map(({ VpcId: id }) => ({ + value: id, + name: id, + })), + ); +}; - resolve(transformedRegions); - }) - .on('error', error => { - reject(error); - }) - .send(); - }); +export const fetchSubnets = ({ vpc }) => { + const ec2 = new EC2(); -export const fetchVpcs = () => - new Promise((resolve, reject) => { - const ec2 = new EC2(); + return ec2 + .describeSubnets({ + Filters: [ + { + Name: 'vpc-id', + Values: [vpc], + }, + ], + }) + .promise() + .then(({ Subnets: subnets }) => subnets.map(({ SubnetId: id }) => ({ id, name: id }))); +}; - ec2 - .describeVpcs() - .on('success', ({ data: { Vpcs: vpcs } }) => { - const transformedVpcs = vpcs.map(({ VpcId: id }) => ({ id, name: id })); +export const fetchSecurityGroups = ({ vpc }) => { + const ec2 = new EC2(); - resolve(transformedVpcs); - }) - .on('error', error => { - reject(error); - }) - .send(); - }); - -export const fetchSubnets = ({ vpc }) => - new Promise((resolve, reject) => { - const ec2 = new EC2(); - - ec2 - .describeSubnets({ - Filters: [ - { - Name: 'vpc-id', - Values: [vpc.id], - }, - ], - }) - .on('success', ({ data: { Subnets: subnets } }) => { - const transformedSubnets = subnets.map(({ SubnetId: id }) => ({ id, name: id })); - - resolve(transformedSubnets); - }) - .on('error', error => { - reject(error); - }) - .send(); - }); + return ec2 + .describeSecurityGroups({ + Filters: [ + { + Name: 'vpc-id', + Values: [vpc], + }, + ], + }) + .promise() + .then(({ SecurityGroups: securityGroups }) => + securityGroups.map(({ GroupName: name, GroupId: value }) => ({ name, value })), + ); +}; export default () => {}; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js b/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js index f2abc121f57..917c8da6c3e 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js @@ -1,5 +1,17 @@ import * as types from './mutation_types'; +export const setClusterName = ({ commit }, payload) => { + commit(types.SET_CLUSTER_NAME, payload); +}; + +export const setEnvironmentScope = ({ commit }, payload) => { + commit(types.SET_ENVIRONMENT_SCOPE, payload); +}; + +export const setKubernetesVersion = ({ commit }, payload) => { + commit(types.SET_KUBERNETES_VERSION, payload); +}; + export const setRegion = ({ commit }, payload) => { commit(types.SET_REGION, payload); }; @@ -20,4 +32,12 @@ export const setRole = ({ commit }, payload) => { commit(types.SET_ROLE, payload); }; +export const setSecurityGroup = ({ commit }, payload) => { + commit(types.SET_SECURITY_GROUP, payload); +}; + +export const setGitlabManagedCluster = ({ commit }, payload) => { + commit(types.SET_GITLAB_MANAGED_CLUSTER, payload); +}; + export default () => {}; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/index.js b/app/assets/javascripts/create_cluster/eks_cluster/store/index.js index 584cd267d8c..d575deafd19 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/store/index.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/index.js @@ -35,6 +35,10 @@ const createStore = () => namespaced: true, ...clusterDropdownStore(awsServices.fetchSubnets), }, + securityGroups: { + namespaced: true, + ...clusterDropdownStore(awsServices.fetchSecurityGroups), + }, }, }); diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js b/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js index b9af9c1d5a4..82eb512ac07 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js @@ -1,5 +1,10 @@ +export const SET_CLUSTER_NAME = 'SET_CLUSTER_NAME'; +export const SET_ENVIRONMENT_SCOPE = 'SET_ENVIRONMENT_SCOPE'; +export const SET_KUBERNETES_VERSION = 'SET_KUBERNETES_VERSION'; export const SET_REGION = 'SET_REGION'; export const SET_VPC = 'SET_VPC'; export const SET_KEY_PAIR = 'SET_KEY_PAIR'; export const SET_SUBNET = 'SET_SUBNET'; export const SET_ROLE = 'SET_ROLE'; +export const SET_SECURITY_GROUP = 'SET_SECURITY_GROUP'; +export const SET_GITLAB_MANAGED_CLUSTER = 'SET_GITLAB_MANAGED_CLUSTER'; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js b/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js index 748a78e0b1e..79950ac7dce 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js @@ -1,6 +1,15 @@ import * as types from './mutation_types'; export default { + [types.SET_CLUSTER_NAME](state, { clusterName }) { + state.clusterName = clusterName; + }, + [types.SET_ENVIRONMENT_SCOPE](state, { environmentScope }) { + state.environmentScope = environmentScope; + }, + [types.SET_KUBERNETES_VERSION](state, { kubernetesVersion }) { + state.kubernetesVersion = kubernetesVersion; + }, [types.SET_REGION](state, { region }) { state.selectedRegion = region; }, @@ -16,4 +25,10 @@ export default { [types.SET_ROLE](state, { role }) { state.selectedRole = role; }, + [types.SET_SECURITY_GROUP](state, { securityGroup }) { + state.selectedSecurityGroup = securityGroup; + }, + [types.SET_GITLAB_MANAGED_CLUSTER](state, { gitlabManagedCluster }) { + state.gitlabManagedCluster = gitlabManagedCluster; + }, }; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/state.js b/app/assets/javascripts/create_cluster/eks_cluster/store/state.js index 6ed174d247b..bf74213bdce 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/store/state.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/state.js @@ -1,11 +1,18 @@ +import { KUBERNETES_VERSIONS } from '../constants'; + export default () => ({ isValidatingCredentials: false, validCredentials: false, + clusterName: '', + environmentScope: '*', + kubernetesVersion: [KUBERNETES_VERSIONS].value, selectedRegion: '', selectedRole: '', selectedKeyPair: '', selectedVpc: '', selectedSubnet: '', selectedSecurityGroup: '', + + gitlabManagedCluster: true, }); diff --git a/app/assets/javascripts/jobs/components/log/line_number.vue b/app/assets/javascripts/jobs/components/log/line_number.vue index 6c76bef13d3..08c4a7ed330 100644 --- a/app/assets/javascripts/jobs/components/log/line_number.vue +++ b/app/assets/javascripts/jobs/components/log/line_number.vue @@ -48,7 +48,7 @@ export default {