diff --git a/app/app.js b/app/app.js index 9d4a7f0e1..0628d722a 100644 --- a/app/app.js +++ b/app/app.js @@ -33,6 +33,44 @@ const App = Application.extend({ } } }, + nodes: { + dependencies: { + services: [ + 'app', + 'access', + 'clusterStore', + 'catalog', + 'endpoint', + 'azureAd', + 'github', + 'globalStore', + 'intl', + 'modal', + 'router', + 'resource-actions', + 'scope', + 'session', + 'settings', + 'store', + 'tooltip', + 'user-language', + 'user-theme', + ], + externalRoutes: { + index: 'index', + failWhale: 'failWhale', + authenticated: 'authenticated', + 'authenticated.cluster': 'authenticated.cluster', + 'authenticated.cluster.projects': 'authenticated.cluster.projects', + 'authenticated.project': 'authenticated.project', + 'authenticated.prefs': 'authenticated.prefs', + 'authenticated.cluster.nodes': 'authenticated.cluster.nodes', + 'authenticated.cluster.nodes.node': 'authenticated.cluster.nodes.node', + 'authenticated.cluster.security.members.index': 'authenticated.cluster.security.members.index', + 'logout': 'logout' + } + } + }, globalAdmin: { dependencies: { services: [ diff --git a/app/authenticated/node-templates/controller.js b/app/authenticated/node-templates/controller.js deleted file mode 100644 index e8c62a448..000000000 --- a/app/authenticated/node-templates/controller.js +++ /dev/null @@ -1,46 +0,0 @@ -import { inject as service } from '@ember/service'; -import Controller from '@ember/controller'; -import { get } from '@ember/object'; - -export default Controller.extend({ - modalService: service('modal'), - - sortBy: 'name', - headers: [ - { - name: 'state', - sort: ['sortState', 'name', 'id'], - translationKey: 'nodeTemplatesPage.table.state', - width: 100, - }, - { - name: 'name', - sort: ['name', 'id'], - translationKey: 'nodeTemplatesPage.table.name', - }, - { - name: 'provider', - sort: ['displayProvider', 'name', 'id'], - translationKey: 'nodeTemplatesPage.table.provider', - width: 150, - }, - { - name: 'location', - sort: ['displayLocation', 'name', 'id'], - translationKey: 'nodeTemplatesPage.table.location', - width: 150, - }, - { - name: 'size', - sort: ['displaySize', 'name', 'id'], - translationKey: 'nodeTemplatesPage.table.size', - width: 150, - }, - ], - - actions: { - newTemplate() { - get(this, 'modalService').toggleModal('modal-edit-node-template'); - }, - }, -}); diff --git a/app/authenticated/node-templates/route.js b/app/authenticated/node-templates/route.js deleted file mode 100644 index 05fcd00e5..000000000 --- a/app/authenticated/node-templates/route.js +++ /dev/null @@ -1,8 +0,0 @@ -import { hash } from 'rsvp'; -import Route from '@ember/routing/route'; - -export default Route.extend({ - model() { - return hash({ nodeTemplates: this.get('globalStore').findAll('nodeTemplate'), }); - }, -}); diff --git a/app/authenticated/route.js b/app/authenticated/route.js index 7c0dc30b0..1d8bbe43a 100644 --- a/app/authenticated/route.js +++ b/app/authenticated/route.js @@ -282,7 +282,7 @@ export default Route.extend(Preload, { this._gotoRoute('authenticated.prefs', 'global'); }, gotoT() { - this._gotoRoute('authenticated.node-templates', 'global'); + this._gotoRoute('nodes.node-templates', 'global'); }, // Cluster or Project diff --git a/app/components/page-header/template.hbs b/app/components/page-header/template.hbs index 21084a901..dd90ea8a8 100644 --- a/app/components/page-header/template.hbs +++ b/app/components/page-header/template.hbs @@ -132,7 +132,7 @@
  • {{#link-to "authenticated.apikeys"}}{{t 'nav.api.link'}} {{/link-to}}
  • -
  • {{#link-to "authenticated.node-templates"}}{{t 'nav.nodeTemplates.link'}} {{/link-to}}
  • +
  • {{#link-to "nodes.node-templates"}}{{t 'nav.nodeTemplates.link'}} {{/link-to}}
  • {{#link-to "authenticated.prefs"}}{{t 'nav.userPreferences.link'}} {{/link-to}}
  • diff --git a/app/instance-initializers/nav.js b/app/instance-initializers/nav.js index 5e0f9252d..7a0fc93d1 100644 --- a/app/instance-initializers/nav.js +++ b/app/instance-initializers/nav.js @@ -245,9 +245,9 @@ const rootNav = [ }, { scope: 'global', - id: 'global-node-drivers', + id: 'nodes-node-drivers', localizedLabel: 'nav.admin.nodeDrivers', - route: 'global-admin.node-drivers', + route: 'nodes.node-drivers', resource: ['nodedriver'], resourceScope: 'global', }, diff --git a/app/router.js b/app/router.js index c86ea54de..306d259df 100644 --- a/app/router.js +++ b/app/router.js @@ -37,6 +37,10 @@ Router.map(function() { this.route('update-critical-settings', { path: '/update-setting' }); this.route('authenticated', { path: '/' }, function() { + this.mount('nodes', { + path: '/n', + resetNamespace: true + }); // Global this.mount('global-admin', { path: '/g', @@ -45,7 +49,7 @@ Router.map(function() { this.route('dummy-dev', { path: '/dev' }); this.route('apikeys'); - this.route('node-templates'); + // this.route('node-templates'); this.route('prefs'); // Per-Cluster diff --git a/blueprints/route/files/app/__path__/__name__.js b/blueprints/route/files/app/__path__/__name__.js deleted file mode 100644 index 26d9f3124..000000000 --- a/blueprints/route/files/app/__path__/__name__.js +++ /dev/null @@ -1,4 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ -}); diff --git a/blueprints/route/files/app/__templatepath__/__templatename__.hbs b/blueprints/route/files/app/__templatepath__/__templatename__.hbs deleted file mode 100644 index c24cd6895..000000000 --- a/blueprints/route/files/app/__templatepath__/__templatename__.hbs +++ /dev/null @@ -1 +0,0 @@ -{{outlet}} diff --git a/blueprints/route/index.js b/blueprints/route/index.js deleted file mode 100644 index 46c7bad4c..000000000 --- a/blueprints/route/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('../../node_modules/ember-cli-legacy-blueprints/blueprints/route/index.js'); diff --git a/lib/global-admin/addon/routes.js b/lib/global-admin/addon/routes.js index 0254a1f3f..a27435096 100644 --- a/lib/global-admin/addon/routes.js +++ b/lib/global-admin/addon/routes.js @@ -15,7 +15,7 @@ export default buildRoutes(function() { this.route('catalog'); - this.route('node-drivers', { path: '/node-drivers' }); + // this.route('node-drivers', { path: '/node-drivers' }); this.route('settings', function() { this.route('index', { path: '/' }); diff --git a/lib/shared/addon/components/modal-edit-node-template/component.js b/lib/nodes/addon/components/modal-edit-node-template/component.js similarity index 100% rename from lib/shared/addon/components/modal-edit-node-template/component.js rename to lib/nodes/addon/components/modal-edit-node-template/component.js diff --git a/lib/shared/addon/components/modal-edit-node-template/template.hbs b/lib/nodes/addon/components/modal-edit-node-template/template.hbs similarity index 100% rename from lib/shared/addon/components/modal-edit-node-template/template.hbs rename to lib/nodes/addon/components/modal-edit-node-template/template.hbs diff --git a/lib/shared/addon/components/node-driver/driver-aliyunecs/component.js b/lib/nodes/addon/components/node-driver/driver-aliyunecs/component.js similarity index 100% rename from lib/shared/addon/components/node-driver/driver-aliyunecs/component.js rename to lib/nodes/addon/components/node-driver/driver-aliyunecs/component.js diff --git a/lib/shared/addon/components/node-driver/driver-aliyunecs/template.hbs b/lib/nodes/addon/components/node-driver/driver-aliyunecs/template.hbs similarity index 100% rename from lib/shared/addon/components/node-driver/driver-aliyunecs/template.hbs rename to lib/nodes/addon/components/node-driver/driver-aliyunecs/template.hbs diff --git a/lib/shared/addon/components/node-driver/driver-amazonec2/component.js b/lib/nodes/addon/components/node-driver/driver-amazonec2/component.js similarity index 66% rename from lib/shared/addon/components/node-driver/driver-amazonec2/component.js rename to lib/nodes/addon/components/node-driver/driver-amazonec2/component.js index 79a010f21..cd9c2d20d 100644 --- a/lib/shared/addon/components/node-driver/driver-amazonec2/component.js +++ b/lib/nodes/addon/components/node-driver/driver-amazonec2/component.js @@ -8,357 +8,10 @@ import { inject as service } from '@ember/service'; import Component from '@ember/component'; import NodeDriver from 'shared/mixins/node-driver'; import layout from './template'; +import { INSTANCE_TYPES, nameFromResource, tagsFromResource, REGIONS } from 'shared/utils/amazon'; let RANCHER_GROUP = 'rancher-nodes'; -export const INSTANCE_TYPES = [ - { - group: 'T2 - Burstable', - name: 't2.nano' - }, - { - group: 'T2 - Burstable', - name: 't2.micro' - }, - { - group: 'T2 - Burstable', - name: 't2.small' - }, - { - group: 'T2 - Burstable', - name: 't2.medium' - }, - { - group: 'T2 - Burstable', - name: 't2.large' - }, - { - group: 'T2 - Burstable', - name: 't2.xlarge' - }, - { - group: 'T2 - Burstable', - name: 't2.2xlarge' - }, - - { - group: 'M5 - General Purpose', - name: 'm5.large' - }, - { - group: 'M5 - General Purpose', - name: 'm5.xlarge' - }, - { - group: 'M5 - General Purpose', - name: 'm5.2xlarge' - }, - { - group: 'M5 - General Purpose', - name: 'm5.4xlarge' - }, - { - group: 'M5 - General Purpose', - name: 'm5.12xlarge' - }, - { - group: 'M5 - General Purpose', - name: 'm5.24xlarge' - }, - - { - group: 'M4 - General Purpose', - name: 'm4.large' - }, - { - group: 'M4 - General Purpose', - name: 'm4.xlarge' - }, - { - group: 'M4 - General Purpose', - name: 'm4.2xlarge' - }, - { - group: 'M4 - General Purpose', - name: 'm4.4xlarge' - }, - { - group: 'M4 - General Purpose', - name: 'm4.10xlarge' - }, - { - group: 'M4 - General Purpose', - name: 'm4.16xlarge' - }, - - { - group: 'M3 - General Purpose', - name: 'm3.medium' - }, - { - group: 'M3 - General Purpose', - name: 'm3.large' - }, - { - group: 'M3 - General Purpose', - name: 'm3.xlarge' - }, - { - group: 'M3 - General Purpose', - name: 'm3.2xlarge' - }, - - { - group: 'C5 - High CPU', - name: 'c5.large' - }, - { - group: 'C5 - High CPU', - name: 'c5.xlarge' - }, - { - group: 'C5 - High CPU', - name: 'c5.2xlarge' - }, - { - group: 'C5 - High CPU', - name: 'c5.4xlarge' - }, - { - group: 'C5 - High CPU', - name: 'c5.9xlarge' - }, - { - group: 'C5 - High CPU', - name: 'c5.18xlarge' - }, - - { - group: 'C4 - High CPU', - name: 'c4.large' - }, - { - group: 'C4 - High CPU', - name: 'c4.xlarge' - }, - { - group: 'C4 - High CPU', - name: 'c4.2xlarge' - }, - { - group: 'C4 - High CPU', - name: 'c4.4xlarge' - }, - { - group: 'C4 - High CPU', - name: 'c4.8xlarge' - }, - - { - group: 'C3 - High CPU', - name: 'c3.large' - }, - { - group: 'C3 - High CPU', - name: 'c3.xlarge' - }, - { - group: 'C3 - High CPU', - name: 'c3.2xlarge' - }, - { - group: 'C3 - High CPU', - name: 'c3.4xlarge' - }, - { - group: 'C3 - High CPU', - name: 'c3.8xlarge' - }, - - { - group: 'R4 - High Memory', - name: 'r4.large' - }, - { - group: 'R4 - High Memory', - name: 'r4.xlarge' - }, - { - group: 'R4 - High Memory', - name: 'r4.2xlarge' - }, - { - group: 'R4 - High Memory', - name: 'r4.4xlarge' - }, - { - group: 'R4 - High Memory', - name: 'r4.8xlarge' - }, - { - group: 'R4 - High Memory', - name: 'r4.16xlarge' - }, - - { - group: 'R3 - High Memory', - name: 'r3.large' - }, - { - group: 'R3 - High Memory', - name: 'r3.xlarge' - }, - { - group: 'R3 - High Memory', - name: 'r3.2xlarge' - }, - { - group: 'R3 - High Memory', - name: 'r3.4xlarge' - }, - { - group: 'R3 - High Memory', - name: 'r3.8xlarge' - }, - - { - group: 'D2 - High Density Storage', - name: 'd2.xlarge' - }, - { - group: 'D2 - High Density Storage', - name: 'd2.2xlarge' - }, - { - group: 'D2 - High Density Storage', - name: 'd2.4xlarge' - }, - { - group: 'D2 - High Density Storage', - name: 'd2.8xlarge' - }, - - { - group: 'I3 - High I/O Storage', - name: 'i3.large' - }, - { - group: 'I3 - High I/O Storage', - name: 'i3.xlarge' - }, - { - group: 'I3 - High I/O Storage', - name: 'i3.2xlarge' - }, - { - group: 'I3 - High I/O Storage', - name: 'i3.4xlarge' - }, - { - group: 'I3 - High I/O Storage', - name: 'i3.8xlarge' - }, - { - group: 'I3 - High I/O Storage', - name: 'i3.16xlarge' - }, - - { - group: 'F1 - FPGA', - name: 'f1.2xlarge' - }, - { - group: 'F1 - FPGA', - name: 'f1.16xlarge' - }, - - { - group: 'G3 - GPU', - name: 'g3.4xlarge' - }, - { - group: 'G3 - GPU', - name: 'g3.8xlarge' - }, - { - group: 'G3 - GPU', - name: 'g3.16xlarge' - }, - - { - group: 'P2 - GPU', - name: 'p2.xlarge' - }, - { - group: 'P2 - GPU', - name: 'p2.8xlarge' - }, - { - group: 'P2 - GPU', - name: 'p2.16xlarge' - }, - - { - group: 'X1 - Really High Memory', - name: 'x1.16xlarge' - }, - { - group: 'X1 - Really High Memory', - name: 'x1.32xlarge' - }, -]; - -// These need to match the supported list in docker-machine: -// https://github.com/docker/machine/blob/master/drivers/amazonec2/region.go -export const REGIONS = [ - 'ap-northeast-1', - 'ap-northeast-2', - 'ap-southeast-1', - 'ap-southeast-2', - 'ap-south-1', - 'ca-central-1', - 'cn-north-1', - 'cn-northwest-1', - 'eu-west-1', - 'eu-west-2', - 'eu-west-3', - 'eu-central-1', - 'sa-east-1', - 'us-east-1', - 'us-east-2', - 'us-west-1', - 'us-west-2', - 'us-gov-west-1', -]; - -export function nameFromResource(r, idField) { - let id = r[idField]; - let out = id; - - if ( r && r.Tags && r.Tags.length ) { - let match = r.Tags.filterBy('Key', 'Name')[0]; - - if ( match ) { - out = `${ match.Value } (${ id })`; - } - } - - return out; -} - -export function tagsFromResource(r) { - let out = []; - - if ( r && r.Tags && r.Tags.length ) { - r.Tags.forEach((tag) => { - if ( tag.Key !== 'Name' ) { - out.push(`${ tag.Key }=${ tag.Value }`) - } - }) - } - - return out; -} export default Component.extend(NodeDriver, { prefs: service(), diff --git a/lib/shared/addon/components/node-driver/driver-amazonec2/template.hbs b/lib/nodes/addon/components/node-driver/driver-amazonec2/template.hbs similarity index 100% rename from lib/shared/addon/components/node-driver/driver-amazonec2/template.hbs rename to lib/nodes/addon/components/node-driver/driver-amazonec2/template.hbs diff --git a/lib/shared/addon/components/node-driver/driver-azure/component.js b/lib/nodes/addon/components/node-driver/driver-azure/component.js similarity index 100% rename from lib/shared/addon/components/node-driver/driver-azure/component.js rename to lib/nodes/addon/components/node-driver/driver-azure/component.js diff --git a/lib/shared/addon/components/node-driver/driver-azure/template.hbs b/lib/nodes/addon/components/node-driver/driver-azure/template.hbs similarity index 100% rename from lib/shared/addon/components/node-driver/driver-azure/template.hbs rename to lib/nodes/addon/components/node-driver/driver-azure/template.hbs diff --git a/lib/shared/addon/components/node-driver/driver-digitalocean/component.js b/lib/nodes/addon/components/node-driver/driver-digitalocean/component.js similarity index 100% rename from lib/shared/addon/components/node-driver/driver-digitalocean/component.js rename to lib/nodes/addon/components/node-driver/driver-digitalocean/component.js diff --git a/lib/shared/addon/components/node-driver/driver-digitalocean/template.hbs b/lib/nodes/addon/components/node-driver/driver-digitalocean/template.hbs similarity index 100% rename from lib/shared/addon/components/node-driver/driver-digitalocean/template.hbs rename to lib/nodes/addon/components/node-driver/driver-digitalocean/template.hbs diff --git a/lib/shared/addon/components/node-driver/driver-exoscale/component.js b/lib/nodes/addon/components/node-driver/driver-exoscale/component.js similarity index 100% rename from lib/shared/addon/components/node-driver/driver-exoscale/component.js rename to lib/nodes/addon/components/node-driver/driver-exoscale/component.js diff --git a/lib/shared/addon/components/node-driver/driver-exoscale/template.hbs b/lib/nodes/addon/components/node-driver/driver-exoscale/template.hbs similarity index 100% rename from lib/shared/addon/components/node-driver/driver-exoscale/template.hbs rename to lib/nodes/addon/components/node-driver/driver-exoscale/template.hbs diff --git a/lib/shared/addon/components/node-driver/driver-other/component.js b/lib/nodes/addon/components/node-driver/driver-other/component.js similarity index 100% rename from lib/shared/addon/components/node-driver/driver-other/component.js rename to lib/nodes/addon/components/node-driver/driver-other/component.js diff --git a/lib/shared/addon/components/node-driver/driver-other/template.hbs b/lib/nodes/addon/components/node-driver/driver-other/template.hbs similarity index 100% rename from lib/shared/addon/components/node-driver/driver-other/template.hbs rename to lib/nodes/addon/components/node-driver/driver-other/template.hbs diff --git a/lib/shared/addon/components/node-driver/driver-packet/component.js b/lib/nodes/addon/components/node-driver/driver-packet/component.js similarity index 100% rename from lib/shared/addon/components/node-driver/driver-packet/component.js rename to lib/nodes/addon/components/node-driver/driver-packet/component.js diff --git a/lib/shared/addon/components/node-driver/driver-packet/template.hbs b/lib/nodes/addon/components/node-driver/driver-packet/template.hbs similarity index 100% rename from lib/shared/addon/components/node-driver/driver-packet/template.hbs rename to lib/nodes/addon/components/node-driver/driver-packet/template.hbs diff --git a/lib/shared/addon/components/node-driver/driver-rackspace/component.js b/lib/nodes/addon/components/node-driver/driver-rackspace/component.js similarity index 100% rename from lib/shared/addon/components/node-driver/driver-rackspace/component.js rename to lib/nodes/addon/components/node-driver/driver-rackspace/component.js diff --git a/lib/shared/addon/components/node-driver/driver-rackspace/template.hbs b/lib/nodes/addon/components/node-driver/driver-rackspace/template.hbs similarity index 100% rename from lib/shared/addon/components/node-driver/driver-rackspace/template.hbs rename to lib/nodes/addon/components/node-driver/driver-rackspace/template.hbs diff --git a/lib/shared/addon/components/node-driver/driver-vmwarevsphere/component.js b/lib/nodes/addon/components/node-driver/driver-vmwarevsphere/component.js similarity index 100% rename from lib/shared/addon/components/node-driver/driver-vmwarevsphere/component.js rename to lib/nodes/addon/components/node-driver/driver-vmwarevsphere/component.js diff --git a/lib/shared/addon/components/node-driver/driver-vmwarevsphere/template.hbs b/lib/nodes/addon/components/node-driver/driver-vmwarevsphere/template.hbs similarity index 100% rename from lib/shared/addon/components/node-driver/driver-vmwarevsphere/template.hbs rename to lib/nodes/addon/components/node-driver/driver-vmwarevsphere/template.hbs diff --git a/app/components/node-template-row/component.js b/lib/nodes/addon/components/node-template-row/component.js similarity index 100% rename from app/components/node-template-row/component.js rename to lib/nodes/addon/components/node-template-row/component.js diff --git a/app/components/node-template-row/template.hbs b/lib/nodes/addon/components/node-template-row/template.hbs similarity index 100% rename from app/components/node-template-row/template.hbs rename to lib/nodes/addon/components/node-template-row/template.hbs diff --git a/lib/nodes/addon/engine.js b/lib/nodes/addon/engine.js new file mode 100644 index 000000000..93ad6cbe0 --- /dev/null +++ b/lib/nodes/addon/engine.js @@ -0,0 +1,51 @@ +import Engine from 'ember-engines/engine'; +import loadInitializers from 'ember-load-initializers'; +import Resolver from './resolver'; +import config from './config/environment'; + +const { modulePrefix } = config; + +const Eng = Engine.extend({ + modulePrefix, + Resolver, + dependencies: { + services: [ + 'access', + 'app', + 'catalog', + 'clusterStore', + 'endpoint', + 'azureAd', + 'github', + 'globalStore', + 'intl', + 'modal', + 'resource-actions', + 'router', + 'scope', + 'session', + 'settings', + 'store', + 'tooltip', + 'user-language', + 'user-theme', + ], + externalRoutes: [ + 'index', + 'failWhale', + 'authenticated', + 'authenticated.cluster', + 'authenticated.cluster.projects', + 'authenticated.project', + 'authenticated.prefs', + 'authenticated.cluster.nodes', + 'authenticated.cluster.nodes.node', + 'authenticated.cluster.security.members.index', + 'logout' + ] + } +}); + +loadInitializers(Eng, modulePrefix); + +export default Eng; diff --git a/lib/global-admin/addon/node-drivers/controller.js b/lib/nodes/addon/node-drivers/controller.js similarity index 81% rename from lib/global-admin/addon/node-drivers/controller.js rename to lib/nodes/addon/node-drivers/controller.js index a16a509ef..5d5fc1042 100644 --- a/lib/global-admin/addon/node-drivers/controller.js +++ b/lib/nodes/addon/node-drivers/controller.js @@ -1,31 +1,31 @@ import { computed } from '@ember/object'; import { inject as service } from '@ember/service'; -import Controller, { inject as controller } from '@ember/controller'; +import Controller from '@ember/controller'; import C from 'ui/utils/constants'; +const HEADERS = [ + { + name: 'state', + sort: ['sortState', 'displayName'], + searchField: 'displayState', + translationKey: 'generic.state', + width: 120 + }, + { + name: 'name', + sort: ['displayName'], + searchField: 'displayName', + translationKey: 'generic.name', + + }, +]; + export default Controller.extend({ growl: service(), settings: service(), globalStore: service(), modalService: service('modal'), - - application: controller(), - headers: [ - { - name: 'state', - sort: ['sortState', 'displayName'], - searchField: 'displayState', - translationKey: 'generic.state', - width: 120 - }, - { - name: 'name', - sort: ['displayName'], - searchField: 'displayName', - translationKey: 'generic.name', - - }, - ], + headers: HEADERS, actions: { addNewDriver() { diff --git a/lib/global-admin/addon/node-drivers/route.js b/lib/nodes/addon/node-drivers/route.js similarity index 100% rename from lib/global-admin/addon/node-drivers/route.js rename to lib/nodes/addon/node-drivers/route.js diff --git a/lib/global-admin/addon/node-drivers/template.hbs b/lib/nodes/addon/node-drivers/template.hbs similarity index 100% rename from lib/global-admin/addon/node-drivers/template.hbs rename to lib/nodes/addon/node-drivers/template.hbs diff --git a/lib/nodes/addon/node-templates/controller.js b/lib/nodes/addon/node-templates/controller.js new file mode 100644 index 000000000..ba4c87f3b --- /dev/null +++ b/lib/nodes/addon/node-templates/controller.js @@ -0,0 +1,47 @@ +import { inject as service } from '@ember/service'; +import Controller from '@ember/controller'; +import { get } from '@ember/object'; + +const HEADERS = [ + { + name: 'state', + sort: ['sortState', 'name', 'id'], + translationKey: 'nodeTemplatesPage.table.state', + width: 100, + }, + { + name: 'name', + sort: ['name', 'id'], + translationKey: 'nodeTemplatesPage.table.name', + }, + { + name: 'provider', + sort: ['displayProvider', 'name', 'id'], + translationKey: 'nodeTemplatesPage.table.provider', + width: 150, + }, + { + name: 'location', + sort: ['displayLocation', 'name', 'id'], + translationKey: 'nodeTemplatesPage.table.location', + width: 150, + }, + { + name: 'size', + sort: ['displaySize', 'name', 'id'], + translationKey: 'nodeTemplatesPage.table.size', + width: 150, + }, +]; + +export default Controller.extend({ + modalService: service('modal'), + sortBy: 'name', + headers: HEADERS, + + actions: { + newTemplate() { + get(this, 'modalService').toggleModal('modal-edit-node-template'); + }, + }, +}); diff --git a/lib/nodes/addon/node-templates/route.js b/lib/nodes/addon/node-templates/route.js new file mode 100644 index 000000000..e3c5c5f6c --- /dev/null +++ b/lib/nodes/addon/node-templates/route.js @@ -0,0 +1,12 @@ +import { hash } from 'rsvp'; +import Route from '@ember/routing/route'; +import { inject as service } from '@ember/service'; +import { get } from '@ember/object'; + +export default Route.extend({ + globalStore: service(), + + model() { + return hash({ nodeTemplates: get(this, 'globalStore').findAll('nodeTemplate') }); + }, +}); diff --git a/app/authenticated/node-templates/template.hbs b/lib/nodes/addon/node-templates/template.hbs similarity index 100% rename from app/authenticated/node-templates/template.hbs rename to lib/nodes/addon/node-templates/template.hbs diff --git a/lib/nodes/addon/resolver.js b/lib/nodes/addon/resolver.js new file mode 100644 index 000000000..2fb563d6c --- /dev/null +++ b/lib/nodes/addon/resolver.js @@ -0,0 +1,3 @@ +import Resolver from 'ember-resolver'; + +export default Resolver; diff --git a/lib/nodes/addon/routes.js b/lib/nodes/addon/routes.js new file mode 100644 index 000000000..d8fb26bdd --- /dev/null +++ b/lib/nodes/addon/routes.js @@ -0,0 +1,7 @@ +import buildRoutes from 'ember-engines/routes'; + +export default buildRoutes(function() { + // Define your engine's route map here + this.route('node-drivers', { path: '/node-drivers' }); + this.route('node-templates'); +}); diff --git a/lib/nodes/addon/templates/application.hbs b/lib/nodes/addon/templates/application.hbs new file mode 100644 index 000000000..e2147cab0 --- /dev/null +++ b/lib/nodes/addon/templates/application.hbs @@ -0,0 +1 @@ +{{outlet}} \ No newline at end of file diff --git a/lib/nodes/app/components/modal-edit-node-template/component.js b/lib/nodes/app/components/modal-edit-node-template/component.js new file mode 100644 index 000000000..3edc3e08e --- /dev/null +++ b/lib/nodes/app/components/modal-edit-node-template/component.js @@ -0,0 +1 @@ +export { default } from 'nodes/components/modal-edit-node-template/component'; diff --git a/lib/nodes/app/components/node-driver/driver-aliyunecs/component.js b/lib/nodes/app/components/node-driver/driver-aliyunecs/component.js new file mode 100644 index 000000000..a1efd5750 --- /dev/null +++ b/lib/nodes/app/components/node-driver/driver-aliyunecs/component.js @@ -0,0 +1 @@ +export { default } from 'nodes/components/node-driver/driver-aliyunecs/component'; diff --git a/lib/nodes/app/components/node-driver/driver-amazonec2/component.js b/lib/nodes/app/components/node-driver/driver-amazonec2/component.js new file mode 100644 index 000000000..114d0ea5c --- /dev/null +++ b/lib/nodes/app/components/node-driver/driver-amazonec2/component.js @@ -0,0 +1 @@ +export { default } from 'nodes/components/node-driver/driver-amazonec2/component'; diff --git a/lib/nodes/app/components/node-driver/driver-azure/component.js b/lib/nodes/app/components/node-driver/driver-azure/component.js new file mode 100644 index 000000000..28c6396be --- /dev/null +++ b/lib/nodes/app/components/node-driver/driver-azure/component.js @@ -0,0 +1 @@ +export { default } from 'nodes/components/node-driver/driver-azure/component'; diff --git a/lib/nodes/app/components/node-driver/driver-digitalocean/component.js b/lib/nodes/app/components/node-driver/driver-digitalocean/component.js new file mode 100644 index 000000000..44ec0e0b9 --- /dev/null +++ b/lib/nodes/app/components/node-driver/driver-digitalocean/component.js @@ -0,0 +1 @@ +export { default } from 'nodes/components/node-driver/driver-digitalocean/component'; diff --git a/lib/nodes/app/components/node-driver/driver-exoscale/component.js b/lib/nodes/app/components/node-driver/driver-exoscale/component.js new file mode 100644 index 000000000..2f4040bd0 --- /dev/null +++ b/lib/nodes/app/components/node-driver/driver-exoscale/component.js @@ -0,0 +1 @@ +export { default } from 'nodes/components/node-driver/driver-exoscale/component'; diff --git a/lib/nodes/app/components/node-driver/driver-other/component.js b/lib/nodes/app/components/node-driver/driver-other/component.js new file mode 100644 index 000000000..a0f0f954f --- /dev/null +++ b/lib/nodes/app/components/node-driver/driver-other/component.js @@ -0,0 +1 @@ +export { default } from 'nodes/components/node-driver/driver-other/component'; diff --git a/lib/nodes/app/components/node-driver/driver-packet/component.js b/lib/nodes/app/components/node-driver/driver-packet/component.js new file mode 100644 index 000000000..cd8020c0d --- /dev/null +++ b/lib/nodes/app/components/node-driver/driver-packet/component.js @@ -0,0 +1 @@ +export { default } from 'nodes/components/node-driver/driver-packet/component'; diff --git a/lib/nodes/app/components/node-driver/driver-rackspace/component.js b/lib/nodes/app/components/node-driver/driver-rackspace/component.js new file mode 100644 index 000000000..d618c4b50 --- /dev/null +++ b/lib/nodes/app/components/node-driver/driver-rackspace/component.js @@ -0,0 +1 @@ +export { default } from 'nodes/components/node-driver/driver-rackspace/component'; diff --git a/lib/nodes/app/components/node-driver/driver-vmwarevsphere/component.js b/lib/nodes/app/components/node-driver/driver-vmwarevsphere/component.js new file mode 100644 index 000000000..902e50335 --- /dev/null +++ b/lib/nodes/app/components/node-driver/driver-vmwarevsphere/component.js @@ -0,0 +1 @@ +export { default } from 'nodes/components/node-driver/driver-vmwarevsphere/component'; diff --git a/lib/nodes/config/environment.js b/lib/nodes/config/environment.js new file mode 100644 index 000000000..4499f8937 --- /dev/null +++ b/lib/nodes/config/environment.js @@ -0,0 +1,11 @@ +/* eslint-env node */ +'use strict'; + +module.exports = function(environment) { + let ENV = { + modulePrefix: 'nodes', + environment + }; + + return ENV; +}; diff --git a/lib/nodes/index.js b/lib/nodes/index.js new file mode 100644 index 000000000..d5f3ab7c4 --- /dev/null +++ b/lib/nodes/index.js @@ -0,0 +1,16 @@ +/* eslint-env node */ +'use strict'; + +const EngineAddon = require('ember-engines/lib/engine-addon'); + +module.exports = EngineAddon.extend({ + name: 'nodes', + + lazyLoading: { + enabled: false + }, + + isDevelopingAddon() { + return true; + } +}); diff --git a/lib/nodes/package.json b/lib/nodes/package.json new file mode 100644 index 000000000..28d84a68e --- /dev/null +++ b/lib/nodes/package.json @@ -0,0 +1,28 @@ +{ + "name": "nodes", + "keywords": [ + "ember-addon", + "ember-engine" + ], + "dependencies": { + "async": "*", + "jgrowl": "*", + "momentjs": "*", + "card": "*", + "d3": "*", + "ember-basic-dropdown": "*", + "ember-math-helpers": "*", + "ember-truth-helpers": "*", + "ember-cli-htmlbars": "*", + "ember-cli-babel": "*", + "ember-cli-clipboard": "*", + "ember-href-to": "*", + "ember-concurrency": "*", + "marked": "*" + }, + "ember-addon": { + "paths": [ + "../shared" + ] + } +} diff --git a/lib/shared/addon/components/cluster-driver/driver-amazoneks/component.js b/lib/shared/addon/components/cluster-driver/driver-amazoneks/component.js index 0378a132c..e03a0ff5c 100644 --- a/lib/shared/addon/components/cluster-driver/driver-amazoneks/component.js +++ b/lib/shared/addon/components/cluster-driver/driver-amazoneks/component.js @@ -1,7 +1,7 @@ import ClusterDriver from 'shared/mixins/cluster-driver'; import Component from '@ember/component' import layout from './template'; -import { INSTANCE_TYPES, nameFromResource, tagsFromResource } from 'shared/components/node-driver/driver-amazonec2/component'; +import { INSTANCE_TYPES, nameFromResource, tagsFromResource } from 'shared/utils/amazon'; import { get, set, setProperties, computed, observer } from '@ember/object'; diff --git a/lib/shared/addon/utils/amazon.js b/lib/shared/addon/utils/amazon.js new file mode 100644 index 000000000..47524ada6 --- /dev/null +++ b/lib/shared/addon/utils/amazon.js @@ -0,0 +1,356 @@ +export const INSTANCE_TYPES = [ + { + group: 'T2 - Burstable', + name: 't2.nano' + }, + { + group: 'T2 - Burstable', + name: 't2.micro' + }, + { + group: 'T2 - Burstable', + name: 't2.small' + }, + { + group: 'T2 - Burstable', + name: 't2.medium' + }, + { + group: 'T2 - Burstable', + name: 't2.large' + }, + { + group: 'T2 - Burstable', + name: 't2.xlarge' + }, + { + group: 'T2 - Burstable', + name: 't2.2xlarge' + }, + + { + group: 'M5 - General Purpose', + name: 'm5.large' + }, + { + group: 'M5 - General Purpose', + name: 'm5.xlarge' + }, + { + group: 'M5 - General Purpose', + name: 'm5.2xlarge' + }, + { + group: 'M5 - General Purpose', + name: 'm5.4xlarge' + }, + { + group: 'M5 - General Purpose', + name: 'm5.12xlarge' + }, + { + group: 'M5 - General Purpose', + name: 'm5.24xlarge' + }, + + { + group: 'M4 - General Purpose', + name: 'm4.large' + }, + { + group: 'M4 - General Purpose', + name: 'm4.xlarge' + }, + { + group: 'M4 - General Purpose', + name: 'm4.2xlarge' + }, + { + group: 'M4 - General Purpose', + name: 'm4.4xlarge' + }, + { + group: 'M4 - General Purpose', + name: 'm4.10xlarge' + }, + { + group: 'M4 - General Purpose', + name: 'm4.16xlarge' + }, + + { + group: 'M3 - General Purpose', + name: 'm3.medium' + }, + { + group: 'M3 - General Purpose', + name: 'm3.large' + }, + { + group: 'M3 - General Purpose', + name: 'm3.xlarge' + }, + { + group: 'M3 - General Purpose', + name: 'm3.2xlarge' + }, + + { + group: 'C5 - High CPU', + name: 'c5.large' + }, + { + group: 'C5 - High CPU', + name: 'c5.xlarge' + }, + { + group: 'C5 - High CPU', + name: 'c5.2xlarge' + }, + { + group: 'C5 - High CPU', + name: 'c5.4xlarge' + }, + { + group: 'C5 - High CPU', + name: 'c5.9xlarge' + }, + { + group: 'C5 - High CPU', + name: 'c5.18xlarge' + }, + + { + group: 'C4 - High CPU', + name: 'c4.large' + }, + { + group: 'C4 - High CPU', + name: 'c4.xlarge' + }, + { + group: 'C4 - High CPU', + name: 'c4.2xlarge' + }, + { + group: 'C4 - High CPU', + name: 'c4.4xlarge' + }, + { + group: 'C4 - High CPU', + name: 'c4.8xlarge' + }, + + { + group: 'C3 - High CPU', + name: 'c3.large' + }, + { + group: 'C3 - High CPU', + name: 'c3.xlarge' + }, + { + group: 'C3 - High CPU', + name: 'c3.2xlarge' + }, + { + group: 'C3 - High CPU', + name: 'c3.4xlarge' + }, + { + group: 'C3 - High CPU', + name: 'c3.8xlarge' + }, + + { + group: 'R4 - High Memory', + name: 'r4.large' + }, + { + group: 'R4 - High Memory', + name: 'r4.xlarge' + }, + { + group: 'R4 - High Memory', + name: 'r4.2xlarge' + }, + { + group: 'R4 - High Memory', + name: 'r4.4xlarge' + }, + { + group: 'R4 - High Memory', + name: 'r4.8xlarge' + }, + { + group: 'R4 - High Memory', + name: 'r4.16xlarge' + }, + + { + group: 'R3 - High Memory', + name: 'r3.large' + }, + { + group: 'R3 - High Memory', + name: 'r3.xlarge' + }, + { + group: 'R3 - High Memory', + name: 'r3.2xlarge' + }, + { + group: 'R3 - High Memory', + name: 'r3.4xlarge' + }, + { + group: 'R3 - High Memory', + name: 'r3.8xlarge' + }, + + { + group: 'D2 - High Density Storage', + name: 'd2.xlarge' + }, + { + group: 'D2 - High Density Storage', + name: 'd2.2xlarge' + }, + { + group: 'D2 - High Density Storage', + name: 'd2.4xlarge' + }, + { + group: 'D2 - High Density Storage', + name: 'd2.8xlarge' + }, + + { + group: 'I3 - High I/O Storage', + name: 'i3.large' + }, + { + group: 'I3 - High I/O Storage', + name: 'i3.xlarge' + }, + { + group: 'I3 - High I/O Storage', + name: 'i3.2xlarge' + }, + { + group: 'I3 - High I/O Storage', + name: 'i3.4xlarge' + }, + { + group: 'I3 - High I/O Storage', + name: 'i3.8xlarge' + }, + { + group: 'I3 - High I/O Storage', + name: 'i3.16xlarge' + }, + + { + group: 'F1 - FPGA', + name: 'f1.2xlarge' + }, + { + group: 'F1 - FPGA', + name: 'f1.16xlarge' + }, + + { + group: 'G3 - GPU', + name: 'g3.4xlarge' + }, + { + group: 'G3 - GPU', + name: 'g3.8xlarge' + }, + { + group: 'G3 - GPU', + name: 'g3.16xlarge' + }, + + { + group: 'P2 - GPU', + name: 'p2.xlarge' + }, + { + group: 'P2 - GPU', + name: 'p2.8xlarge' + }, + { + group: 'P2 - GPU', + name: 'p2.16xlarge' + }, + + { + group: 'X1 - Really High Memory', + name: 'x1.16xlarge' + }, + { + group: 'X1 - Really High Memory', + name: 'x1.32xlarge' + }, +]; + +// These need to match the supported list in docker-machine: +// https://github.com/docker/machine/blob/master/drivers/amazonec2/region.go +export const REGIONS = [ + 'ap-northeast-1', + 'ap-northeast-2', + 'ap-southeast-1', + 'ap-southeast-2', + 'ap-south-1', + 'ca-central-1', + 'cn-north-1', + 'cn-northwest-1', + 'eu-west-1', + 'eu-west-2', + 'eu-west-3', + 'eu-central-1', + 'sa-east-1', + 'us-east-1', + 'us-east-2', + 'us-west-1', + 'us-west-2', + 'us-gov-west-1', +]; + + +export const nameFromResource = function(r, idField) { + let id = r[idField]; + let out = id; + + if ( r && r.Tags && r.Tags.length ) { + let match = r.Tags.filterBy('Key', 'Name')[0]; + + if ( match ) { + out = `${ match.Value } (${ id })`; + } + } + + return out; +} + +export const tagsFromResource = function(r) { + let out = []; + + if ( r && r.Tags && r.Tags.length ) { + r.Tags.forEach((tag) => { + if ( tag.Key !== 'Name' ) { + out.push(`${ tag.Key }=${ tag.Value }`) + } + }) + } + + return out; +} + + +export default { + instanceTypes: INSTANCE_TYPES, + nameFromResource, + tagsFromResource, +} diff --git a/lib/shared/app/amazon/util.js b/lib/shared/app/amazon/util.js new file mode 100644 index 000000000..6733b6fef --- /dev/null +++ b/lib/shared/app/amazon/util.js @@ -0,0 +1 @@ +export { default } from 'shared/amazon/util'; diff --git a/lib/shared/app/components/modal-edit-node-template/component.js b/lib/shared/app/components/modal-edit-node-template/component.js deleted file mode 100644 index a3ed5f346..000000000 --- a/lib/shared/app/components/modal-edit-node-template/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'shared/components/modal-edit-node-template/component'; diff --git a/lib/shared/app/components/node-driver/driver-aliyunecs/component.js b/lib/shared/app/components/node-driver/driver-aliyunecs/component.js deleted file mode 100644 index f5e04ba45..000000000 --- a/lib/shared/app/components/node-driver/driver-aliyunecs/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'shared/components/node-driver/driver-aliyunecs/component'; diff --git a/lib/shared/app/components/node-driver/driver-amazonec2/component.js b/lib/shared/app/components/node-driver/driver-amazonec2/component.js deleted file mode 100644 index e1695017c..000000000 --- a/lib/shared/app/components/node-driver/driver-amazonec2/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'shared/components/node-driver/driver-amazonec2/component'; diff --git a/lib/shared/app/components/node-driver/driver-azure/component.js b/lib/shared/app/components/node-driver/driver-azure/component.js deleted file mode 100644 index fe057ead5..000000000 --- a/lib/shared/app/components/node-driver/driver-azure/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'shared/components/node-driver/driver-azure/component'; diff --git a/lib/shared/app/components/node-driver/driver-digitalocean/component.js b/lib/shared/app/components/node-driver/driver-digitalocean/component.js deleted file mode 100644 index b77d06227..000000000 --- a/lib/shared/app/components/node-driver/driver-digitalocean/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'shared/components/node-driver/driver-digitalocean/component'; diff --git a/lib/shared/app/components/node-driver/driver-exoscale/component.js b/lib/shared/app/components/node-driver/driver-exoscale/component.js deleted file mode 100644 index db4a8bae6..000000000 --- a/lib/shared/app/components/node-driver/driver-exoscale/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'shared/components/node-driver/driver-exoscale/component'; diff --git a/lib/shared/app/components/node-driver/driver-other/component.js b/lib/shared/app/components/node-driver/driver-other/component.js deleted file mode 100644 index 87e019b86..000000000 --- a/lib/shared/app/components/node-driver/driver-other/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'shared/components/node-driver/driver-other/component'; diff --git a/lib/shared/app/components/node-driver/driver-packet/component.js b/lib/shared/app/components/node-driver/driver-packet/component.js deleted file mode 100644 index 476ff61c6..000000000 --- a/lib/shared/app/components/node-driver/driver-packet/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'shared/components/node-driver/driver-packet/component'; diff --git a/lib/shared/app/components/node-driver/driver-rackspace/component.js b/lib/shared/app/components/node-driver/driver-rackspace/component.js deleted file mode 100644 index c658ed65a..000000000 --- a/lib/shared/app/components/node-driver/driver-rackspace/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'shared/components/node-driver/driver-rackspace/component'; diff --git a/lib/shared/app/components/node-driver/driver-vmwarevsphere/component.js b/lib/shared/app/components/node-driver/driver-vmwarevsphere/component.js deleted file mode 100644 index 31d2db3cc..000000000 --- a/lib/shared/app/components/node-driver/driver-vmwarevsphere/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'shared/components/node-driver/driver-vmwarevsphere/component'; diff --git a/package.json b/package.json index 9115ec007..a246f33f8 100644 --- a/package.json +++ b/package.json @@ -105,12 +105,13 @@ }, "ember-addon": { "paths": [ - "lib/global-admin", - "lib/login", - "lib/shared", - "lib/logging", "lib/alert", - "lib/pipeline" + "lib/global-admin", + "lib/logging", + "lib/login", + "lib/nodes", + "lib/pipeline", + "lib/shared" ] } }