From d7a3e6c41f447c1527b900d168be2fa95b549f2a Mon Sep 17 00:00:00 2001 From: Enrique Alcantara Date: Fri, 30 Aug 2019 16:36:59 -0400 Subject: Create EKS cluster Vue app skeleton - Add AWS SDK Dependency - Create placeholders for Vue components - Create store with state structure --- .../eks_cluster/components/create_eks_cluster.vue | 14 +++++++++++++ .../components/eks_cluster_configuration_form.vue | 18 +++++++++++++++++ .../eks_cluster/components/role_name_dropdown.vue | 0 .../components/security_group_dropdown.vue | 0 .../components/service_credentials_form.vue | 3 +++ .../eks_cluster/components/subnet_dropdown.vue | 0 .../eks_cluster/components/vpc_dropdown.vue | 0 .../create_cluster/eks_cluster/index.js | 19 ++++++++++++++++++ .../eks_cluster/services/aws_services_facade.js | 0 .../create_cluster/eks_cluster/store/actions.js | 3 +++ .../create_cluster/eks_cluster/store/getters.js | 0 .../create_cluster/eks_cluster/store/index.js | 15 ++++++++++++++ .../eks_cluster/store/mutation_types.js | 0 .../create_cluster/eks_cluster/store/mutations.js | 0 .../create_cluster/eks_cluster/store/state.js | 23 ++++++++++++++++++++++ .../pages/projects/clusters/new/index.js | 5 +++++ app/views/clusters/clusters/new.html.haml | 3 +++ 17 files changed, 103 insertions(+) create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/security_group_dropdown.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/service_credentials_form.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/subnet_dropdown.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/vpc_dropdown.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/index.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/actions.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/getters.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/index.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/state.js create mode 100644 app/assets/javascripts/pages/projects/clusters/new/index.js 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 new file mode 100644 index 00000000000..ce2e4b883e4 --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue @@ -0,0 +1,14 @@ + + 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 new file mode 100644 index 00000000000..1ec45c8b651 --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue @@ -0,0 +1,18 @@ + + diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue new file mode 100644 index 00000000000..e69de29bb2d 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 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/service_credentials_form.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/service_credentials_form.vue new file mode 100644 index 00000000000..79029b8cfa8 --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/service_credentials_form.vue @@ -0,0 +1,3 @@ + diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/subnet_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/subnet_dropdown.vue new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/vpc_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/vpc_dropdown.vue new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/assets/javascripts/create_cluster/eks_cluster/index.js b/app/assets/javascripts/create_cluster/eks_cluster/index.js new file mode 100644 index 00000000000..c62e5ec101d --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/index.js @@ -0,0 +1,19 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import CreateEksCluster from './components/create_eks_cluster.vue'; +import createStore from './store'; + +Vue.use(Vuex); + +export default () => + new Vue({ + el: '.js-create-eks-cluster-form-container', + store: createStore(), + components: { + CreateEksCluster, + }, + data() {}, + render(createElement) { + return createElement('create-eks-cluster'); + }, + }); 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 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js b/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js new file mode 100644 index 00000000000..861bcddfcc7 --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js @@ -0,0 +1,3 @@ +// import awsServices from '../services/aws_services_facade'; + +export default () => {}; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/getters.js b/app/assets/javascripts/create_cluster/eks_cluster/store/getters.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/index.js b/app/assets/javascripts/create_cluster/eks_cluster/store/index.js new file mode 100644 index 00000000000..99e9e35fd1a --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/index.js @@ -0,0 +1,15 @@ +import Vuex from 'vuex'; +import * as actions from './actions'; +import * as getters from './getters'; +import mutations from './mutations'; +import state from './state'; + +const createStore = () => + new Vuex.Store({ + actions, + getters, + mutations, + state, + }); + +export default createStore; 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 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js b/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/state.js b/app/assets/javascripts/create_cluster/eks_cluster/store/state.js new file mode 100644 index 00000000000..5007df8ad95 --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/state.js @@ -0,0 +1,23 @@ +export default () => ({ + serviceCredentials: { + accessKeyId: '', + secretAccessKey: '', + }, + isValidatingCredentials: false, + validCredentials: false, + + isLoadingRoles: false, + isLoadingVPCs: false, + isLoadingSubnets: false, + isLoadingSecurityGroups: false, + + roles: [], + vpcs: [], + subnets: [], + securityGroups: [], + + selectedRole: '', + selectedVPC: '', + selectedSubnet: '', + selectedSecurityGroup: '', +}); diff --git a/app/assets/javascripts/pages/projects/clusters/new/index.js b/app/assets/javascripts/pages/projects/clusters/new/index.js new file mode 100644 index 00000000000..518253b14c7 --- /dev/null +++ b/app/assets/javascripts/pages/projects/clusters/new/index.js @@ -0,0 +1,5 @@ +import initCreateEKSCluster from '~/create_cluster/eks_cluster'; + +document.addEventListener('DOMContentLoaded', () => { + initCreateEKSCluster(); +}); diff --git a/app/views/clusters/clusters/new.html.haml b/app/views/clusters/clusters/new.html.haml index fb182d99ff0..c9e4dcec36d 100644 --- a/app/views/clusters/clusters/new.html.haml +++ b/app/views/clusters/clusters/new.html.haml @@ -5,6 +5,9 @@ - link_end = ''.html_safe = javascript_include_tag 'https://apis.google.com/js/api.js' +- if create_eks_enabled + = javascript_include_tag 'https://sdk.amazonaws.com/js/aws-sdk-2.523.0.min.js' + = render_gcp_signup_offer .row.prepend-top-default -- cgit v1.2.1 From 15096b01c6fc3cc6f2e2b9dd292cdb73549c8c21 Mon Sep 17 00:00:00 2001 From: Enrique Alcantara Date: Fri, 6 Sep 2019 14:14:51 -0400 Subject: Remove service credentials object --- app/assets/javascripts/create_cluster/eks_cluster/store/state.js | 4 ---- 1 file changed, 4 deletions(-) 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 5007df8ad95..9754ccfeeaf 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/store/state.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/state.js @@ -1,8 +1,4 @@ export default () => ({ - serviceCredentials: { - accessKeyId: '', - secretAccessKey: '', - }, isValidatingCredentials: false, validCredentials: false, -- cgit v1.2.1 From bf37e086342f2b2fc478ddb0e836172c950dea83 Mon Sep 17 00:00:00 2001 From: Enrique Alcantara Date: Wed, 11 Sep 2019 12:28:54 -0400 Subject: Include AWS SDK as packge dependency - Load EKS create cluster form as dynamic import dependency. - Include aws-sdk dependency in package.json --- .../pages/projects/clusters/new/index.js | 8 +-- app/controllers/clusters/clusters_controller.rb | 3 ++ app/views/clusters/clusters/new.html.haml | 3 -- package.json | 1 + yarn.lock | 62 +++++++++++++++++++--- 5 files changed, 63 insertions(+), 14 deletions(-) diff --git a/app/assets/javascripts/pages/projects/clusters/new/index.js b/app/assets/javascripts/pages/projects/clusters/new/index.js index 518253b14c7..55aa29c9797 100644 --- a/app/assets/javascripts/pages/projects/clusters/new/index.js +++ b/app/assets/javascripts/pages/projects/clusters/new/index.js @@ -1,5 +1,7 @@ -import initCreateEKSCluster from '~/create_cluster/eks_cluster'; - document.addEventListener('DOMContentLoaded', () => { - initCreateEKSCluster(); + if (gon.features.createEksClusters) { + import(/* webpackChunkName: 'eks_cluster' */ '~/create_cluster/eks_cluster') + .then(({ default: initCreateEKSCluster }) => initCreateEKSCluster()) + .catch(() => {}); + } }); diff --git a/app/controllers/clusters/clusters_controller.rb b/app/controllers/clusters/clusters_controller.rb index bcd771dafcf..97f59da7885 100644 --- a/app/controllers/clusters/clusters_controller.rb +++ b/app/controllers/clusters/clusters_controller.rb @@ -12,6 +12,9 @@ class Clusters::ClustersController < Clusters::BaseController before_action :authorize_update_cluster!, only: [:update] before_action :authorize_admin_cluster!, only: [:destroy] before_action :update_applications_status, only: [:cluster_status] + before_action only: [:new, :create_gcp] do + push_frontend_feature_flag(:create_eks_clusters) + end helper_method :token_in_session diff --git a/app/views/clusters/clusters/new.html.haml b/app/views/clusters/clusters/new.html.haml index c9e4dcec36d..fb182d99ff0 100644 --- a/app/views/clusters/clusters/new.html.haml +++ b/app/views/clusters/clusters/new.html.haml @@ -5,9 +5,6 @@ - link_end = ''.html_safe = javascript_include_tag 'https://apis.google.com/js/api.js' -- if create_eks_enabled - = javascript_include_tag 'https://sdk.amazonaws.com/js/aws-sdk-2.523.0.min.js' - = render_gcp_signup_offer .row.prepend-top-default diff --git a/package.json b/package.json index 4256b8bfdcc..20747b910a1 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "apollo-upload-client": "^10.0.0", "at.js": "^1.5.4", "autosize": "^4.0.0", + "aws-sdk": "^2.526.0", "axios": "^0.19.0", "babel-loader": "^8.0.5", "bootstrap": "4.3.1", diff --git a/yarn.lock b/yarn.lock index c64c3a6acaa..18307d7abae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1983,6 +1983,21 @@ autosize@^4.0.0: resolved "https://registry.yarnpkg.com/autosize/-/autosize-4.0.0.tgz#7a0599b1ba84d73bd7589b0d9da3870152c69237" integrity sha1-egWZsbqE1zvXWJsNnaOHAVLGkjc= +aws-sdk@^2.526.0: + version "2.526.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.526.0.tgz#e0f899be59edb7d50eb8cca7978bcd401a5d48c2" + integrity sha512-ZZqf8AnD9A8ZJd/4oU711R8taxm8sV7wcAOvT0HhrZxv8zASAzoz2lpZ19QAil6uJ52IOkq4ij/zGy7VBXEgPA== + dependencies: + buffer "4.9.1" + events "1.1.1" + ieee754 "1.1.8" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2433,7 +2448,7 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= -buffer@^4.3.0: +buffer@4.9.1, buffer@^4.3.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= @@ -4805,7 +4820,7 @@ eventemitter3@1.x.x: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" integrity sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg= -events@^1.0.0: +events@1.1.1, events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= @@ -6128,10 +6143,10 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" -ieee754@^1.1.4: - version "1.1.11" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455" - integrity sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg== +ieee754@1.1.8, ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q= iferr@^0.1.5: version "0.1.5" @@ -7231,6 +7246,11 @@ jest@^24.1.0: import-local "^2.0.0" jest-cli "^24.8.0" +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= + jquery-ujs@1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jquery-ujs/-/jquery-ujs-1.2.2.tgz#6a8ef1020e6b6dda385b90a4bddc128c21c56397" @@ -10727,7 +10747,12 @@ sass-graph@^2.2.4: scss-tokenizer "^0.2.3" yargs "^7.0.0" -sax@^1.2.4: +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= + +sax@>=0.6.0, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -12439,6 +12464,14 @@ url-to-options@^1.0.1: resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -12485,7 +12518,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.3.2: +uuid@3.3.2, uuid@^3.0.1, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== @@ -13131,6 +13164,14 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + xml@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" @@ -13141,6 +13182,11 @@ xmlbuilder@8.2.2: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" integrity sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M= +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + xmlcreate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-1.0.2.tgz#fa6bf762a60a413fb3dd8f4b03c5b269238d308f" -- cgit v1.2.1