diff --git a/app/scripts/modules/amazon/aws.module.js b/app/scripts/modules/amazon/aws.module.js index 89c1762af1e..3f613c2a56b 100644 --- a/app/scripts/modules/amazon/aws.module.js +++ b/app/scripts/modules/amazon/aws.module.js @@ -43,7 +43,6 @@ module.exports = angular.module('spinnaker.aws', [ require('./instance/details/instance.details.controller.js'), require('./securityGroup/details/securityGroupDetail.controller.js'), require('./securityGroup/configure/CreateSecurityGroupCtrl.js'), - require('./keyPairs/keyPairs.read.service.js'), require('./securityGroup/configure/EditSecurityGroupCtrl.js'), require('./securityGroup/securityGroup.transformer.js'), require('./securityGroup/securityGroup.reader.js'), diff --git a/app/scripts/modules/amazon/cache/cacheConfigurer.service.js b/app/scripts/modules/amazon/cache/cacheConfigurer.service.js index 0499170af1f..3d87ec59a3c 100644 --- a/app/scripts/modules/amazon/cache/cacheConfigurer.service.js +++ b/app/scripts/modules/amazon/cache/cacheConfigurer.service.js @@ -9,12 +9,14 @@ import { SUBNET_READ_SERVICE } from '@spinnaker/core'; +import { VPC_READ_SERVICE } from '../vpc/vpc.read.service'; + module.exports = angular.module('spinnaker.aws.cache.initializer', [ ACCOUNT_SERVICE, LOAD_BALANCER_READ_SERVICE, INSTANCE_TYPE_SERVICE, SUBNET_READ_SERVICE, - require('../vpc/vpc.read.service.js'), + VPC_READ_SERVICE, ]) .factory('awsCacheConfigurer', function ($q, accountService, instanceTypeService, @@ -41,8 +43,8 @@ module.exports = angular.module('spinnaker.aws.cache.initializer', [ config.networks = { version: 2, - initializers: [vpcReader.listVpcs], - onReset: [vpcReader.resetCache], + initializers: [() => vpcReader.listVpcs() ], + onReset: [() => vpcReader.resetCache() ], }; return config; diff --git a/app/scripts/modules/amazon/domain/IKeyPair.ts b/app/scripts/modules/amazon/domain/IKeyPair.ts new file mode 100644 index 00000000000..00099e09314 --- /dev/null +++ b/app/scripts/modules/amazon/domain/IKeyPair.ts @@ -0,0 +1,6 @@ +export interface IKeyPair { + account: string; + region: string; + keyName: string; + keyFingerprint: string; +} diff --git a/app/scripts/modules/amazon/domain/index.ts b/app/scripts/modules/amazon/domain/index.ts new file mode 100644 index 00000000000..e0a5348852d --- /dev/null +++ b/app/scripts/modules/amazon/domain/index.ts @@ -0,0 +1 @@ +export * from './IKeyPair'; diff --git a/app/scripts/modules/amazon/index.ts b/app/scripts/modules/amazon/index.ts new file mode 100644 index 00000000000..6741075326c --- /dev/null +++ b/app/scripts/modules/amazon/index.ts @@ -0,0 +1,5 @@ +export * from './domain'; + +export * from './keyPairs'; + +export * from './vpc'; diff --git a/app/scripts/modules/amazon/keyPairs/index.ts b/app/scripts/modules/amazon/keyPairs/index.ts new file mode 100644 index 00000000000..8cccd87d28a --- /dev/null +++ b/app/scripts/modules/amazon/keyPairs/index.ts @@ -0,0 +1 @@ +export * from './keyPairs.read.service'; diff --git a/app/scripts/modules/amazon/keyPairs/keyPairs.read.service.js b/app/scripts/modules/amazon/keyPairs/keyPairs.read.service.js deleted file mode 100644 index 28da6a6f2c6..00000000000 --- a/app/scripts/modules/amazon/keyPairs/keyPairs.read.service.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -const angular = require('angular'); - -import { API_SERVICE } from '@spinnaker/core'; - -module.exports = angular - .module('spinnaker.keyPairs.read.service', [API_SERVICE]) - .factory('keyPairsReader', function ($q, API) { - - function listKeyPairs() { - return API.one('keyPairs') - .useCache() - .get() - .then(keyPairs => keyPairs.sort((a, b) => a.keyName.localeCompare(b.keyName))); - } - - return { - listKeyPairs: listKeyPairs - }; - - }); diff --git a/app/scripts/modules/amazon/keyPairs/keyPairs.read.service.ts b/app/scripts/modules/amazon/keyPairs/keyPairs.read.service.ts new file mode 100644 index 00000000000..00440927690 --- /dev/null +++ b/app/scripts/modules/amazon/keyPairs/keyPairs.read.service.ts @@ -0,0 +1,20 @@ +import { module, IPromise } from 'angular'; + +import { API_SERVICE, Api } from '@spinnaker/core'; + +import { IKeyPair } from 'amazon/domain'; + +export class KeyPairsReader { + + constructor(private API: Api) { + 'ngInject'; + } + + public listKeyPairs(): IPromise { + return this.API.all('keyPairs').useCache().getList() + .then((keyPairs: IKeyPair[]) => keyPairs.sort((a, b) => a.keyName.localeCompare(b.keyName))); + } +} + +export const KEY_PAIRS_READ_SERVICE = 'spinnaker.amazon.keyPairs.read.service'; +module(KEY_PAIRS_READ_SERVICE, [API_SERVICE]).service('keyPairsReader', KeyPairsReader); diff --git a/app/scripts/modules/amazon/loadBalancer/loadBalancer.transformer.js b/app/scripts/modules/amazon/loadBalancer/loadBalancer.transformer.js index 05fa2794980..cc6098f7e14 100644 --- a/app/scripts/modules/amazon/loadBalancer/loadBalancer.transformer.js +++ b/app/scripts/modules/amazon/loadBalancer/loadBalancer.transformer.js @@ -4,9 +4,10 @@ const angular = require('angular'); import _ from 'lodash'; import { AWSProviderSettings } from '../aws.settings'; +import { VPC_READ_SERVICE } from '../vpc/vpc.read.service'; module.exports = angular.module('spinnaker.aws.loadBalancer.transformer', [ - require('../vpc/vpc.read.service.js'), + VPC_READ_SERVICE, ]) .factory('awsLoadBalancerTransformer', function (vpcReader) { diff --git a/app/scripts/modules/amazon/search/searchResultFormatter.js b/app/scripts/modules/amazon/search/searchResultFormatter.js index c5b94a4ab0a..fd028ac6d0c 100644 --- a/app/scripts/modules/amazon/search/searchResultFormatter.js +++ b/app/scripts/modules/amazon/search/searchResultFormatter.js @@ -2,9 +2,11 @@ const angular = require('angular'); +import { VPC_READ_SERVICE } from '../vpc/vpc.read.service'; + module.exports = angular .module('spinnaker.amazon.search.searchResultFormatter', [ - require('../vpc/vpc.read.service.js'), + VPC_READ_SERVICE, ]) .factory('awsSearchResultFormatter', function(vpcReader) { return { diff --git a/app/scripts/modules/amazon/securityGroup/clone/cloneSecurityGroup.controller.js b/app/scripts/modules/amazon/securityGroup/clone/cloneSecurityGroup.controller.js index 36c28e3980d..0b574625180 100644 --- a/app/scripts/modules/amazon/securityGroup/clone/cloneSecurityGroup.controller.js +++ b/app/scripts/modules/amazon/securityGroup/clone/cloneSecurityGroup.controller.js @@ -5,10 +5,12 @@ import _ from 'lodash'; import { ACCOUNT_SERVICE } from '@spinnaker/core'; +import { VPC_READ_SERVICE } from 'amazon/vpc/vpc.read.service'; + module.exports = angular .module('spinnaker.amazon.securityGroup.clone.controller', [ ACCOUNT_SERVICE, - require('../../vpc/vpc.read.service.js'), + VPC_READ_SERVICE, require('../configure/configSecurityGroup.mixin.controller.js') ]) .controller('awsCloneSecurityGroupController', function($scope, $uibModalInstance, $controller, accountService, securityGroup, application) { diff --git a/app/scripts/modules/amazon/securityGroup/configure/configSecurityGroup.mixin.controller.js b/app/scripts/modules/amazon/securityGroup/configure/configSecurityGroup.mixin.controller.js index 12096263adf..fe1da3fc592 100644 --- a/app/scripts/modules/amazon/securityGroup/configure/configSecurityGroup.mixin.controller.js +++ b/app/scripts/modules/amazon/securityGroup/configure/configSecurityGroup.mixin.controller.js @@ -4,8 +4,6 @@ const angular = require('angular'); import _ from 'lodash'; import { Subject } from 'rxjs'; -import { AWSProviderSettings } from 'amazon/aws.settings'; - import { ACCOUNT_SERVICE, SECURITY_GROUP_READER, @@ -14,6 +12,9 @@ import { V2_MODAL_WIZARD_SERVICE } from '@spinnaker/core'; +import { AWSProviderSettings } from 'amazon/aws.settings'; +import { VPC_READ_SERVICE } from 'amazon/vpc/vpc.read.service'; + module.exports = angular .module('spinnaker.amazon.securityGroup.baseConfig.controller', [ require('angular-ui-router').default, @@ -21,7 +22,7 @@ module.exports = angular SECURITY_GROUP_READER, SECURITY_GROUP_WRITER, ACCOUNT_SERVICE, - require('../../vpc/vpc.read.service'), + VPC_READ_SERVICE, V2_MODAL_WIZARD_SERVICE, require('./ingressRuleGroupSelector.component'), ]) diff --git a/app/scripts/modules/amazon/securityGroup/securityGroup.transformer.js b/app/scripts/modules/amazon/securityGroup/securityGroup.transformer.js index cc7d2225649..86ec6846110 100644 --- a/app/scripts/modules/amazon/securityGroup/securityGroup.transformer.js +++ b/app/scripts/modules/amazon/securityGroup/securityGroup.transformer.js @@ -2,8 +2,10 @@ const angular = require('angular'); +import { VPC_READ_SERVICE } from '../vpc/vpc.read.service'; + module.exports = angular.module('spinnaker.aws.securityGroup.transformer', [ - require('../vpc/vpc.read.service.js'), + VPC_READ_SERVICE, ]) .factory('awsSecurityGroupTransformer', function (vpcReader) { diff --git a/app/scripts/modules/amazon/serverGroup/configure/serverGroupConfiguration.service.js b/app/scripts/modules/amazon/serverGroup/configure/serverGroupConfiguration.service.js index 1ec06fc7817..9ebbf091192 100644 --- a/app/scripts/modules/amazon/serverGroup/configure/serverGroupConfiguration.service.js +++ b/app/scripts/modules/amazon/serverGroup/configure/serverGroupConfiguration.service.js @@ -13,6 +13,8 @@ import { SUBNET_READ_SERVICE } from '@spinnaker/core'; +import { KEY_PAIRS_READ_SERVICE } from 'amazon/keyPairs/keyPairs.read.service'; + module.exports = angular.module('spinnaker.aws.serverGroup.configure.service', [ require('../../image/image.reader.js'), ACCOUNT_SERVICE, @@ -20,7 +22,7 @@ module.exports = angular.module('spinnaker.aws.serverGroup.configure.service', [ SECURITY_GROUP_READER, SUBNET_READ_SERVICE, require('../../instance/awsInstanceType.service.js'), - require('../../keyPairs/keyPairs.read.service.js'), + KEY_PAIRS_READ_SERVICE, LOAD_BALANCER_READ_SERVICE, CACHE_INITIALIZER_SERVICE, SERVER_GROUP_COMMAND_REGISTRY_PROVIDER, diff --git a/app/scripts/modules/amazon/serverGroup/serverGroup.transformer.js b/app/scripts/modules/amazon/serverGroup/serverGroup.transformer.js index a833c44fb7b..10253c0c102 100644 --- a/app/scripts/modules/amazon/serverGroup/serverGroup.transformer.js +++ b/app/scripts/modules/amazon/serverGroup/serverGroup.transformer.js @@ -1,11 +1,12 @@ 'use strict'; +const angular = require('angular'); import _ from 'lodash'; -const angular = require('angular'); +import { VPC_READ_SERVICE } from '../vpc/vpc.read.service'; module.exports = angular.module('spinnaker.aws.serverGroup.transformer', [ - require('../vpc/vpc.read.service.js'), + VPC_READ_SERVICE, ]) .factory('awsServerGroupTransformer', function (vpcReader) { diff --git a/app/scripts/modules/amazon/vpc/index.ts b/app/scripts/modules/amazon/vpc/index.ts new file mode 100644 index 00000000000..2ab653270dc --- /dev/null +++ b/app/scripts/modules/amazon/vpc/index.ts @@ -0,0 +1 @@ +export * from './vpc.read.service'; diff --git a/app/scripts/modules/amazon/vpc/vpc.module.js b/app/scripts/modules/amazon/vpc/vpc.module.js index d8e5ae7c5b0..73cc22b7b91 100644 --- a/app/scripts/modules/amazon/vpc/vpc.module.js +++ b/app/scripts/modules/amazon/vpc/vpc.module.js @@ -4,5 +4,5 @@ const angular = require('angular'); module.exports = angular .module('spinnaker.vpc', [ - require('./vpc.read.service.js') + require('./vpcTag.directive') ]); diff --git a/app/scripts/modules/amazon/vpc/vpc.read.service.js b/app/scripts/modules/amazon/vpc/vpc.read.service.js deleted file mode 100644 index 9f4f3bc0157..00000000000 --- a/app/scripts/modules/amazon/vpc/vpc.read.service.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -const angular = require('angular'); - -import { NETWORK_READ_SERVICE } from '@spinnaker/core'; - -module.exports = angular - .module('spinnaker.vpc.read.service', [ - NETWORK_READ_SERVICE, - ]) - .factory('vpcReader', function ($q, networkReader) { - - let cachedVpcs = null; - - function listVpcs() { - if (cachedVpcs) { - return $q.when(cachedVpcs); - } - return networkReader.listNetworksByProvider('aws').then(function(vpcs) { - let results = vpcs.map(function(vpc) { - vpc.label = vpc.name; - vpc.deprecated = !!vpc.deprecated; - if (vpc.deprecated) { - vpc.label += ' (deprecated)'; - } - return vpc; - }); - cachedVpcs = results; - return results; - }); - } - - function resetCache() { - cachedVpcs = null; - } - - function getVpcName(id) { - return listVpcs().then(function(vpcs) { - var matches = vpcs.filter(function(test) { - return test.id === id; - }); - return matches.length ? matches[0].name : null; - }); - } - - return { - listVpcs: listVpcs, - getVpcName: getVpcName, - resetCache: resetCache, - }; - - }); diff --git a/app/scripts/modules/amazon/vpc/vpc.read.service.spec.js b/app/scripts/modules/amazon/vpc/vpc.read.service.spec.js index 7b9eaa94585..1c5c389a005 100644 --- a/app/scripts/modules/amazon/vpc/vpc.read.service.spec.js +++ b/app/scripts/modules/amazon/vpc/vpc.read.service.spec.js @@ -2,13 +2,15 @@ import { API_SERVICE } from '@spinnaker/core'; +import { VPC_READ_SERVICE } from '../vpc/vpc.read.service'; + describe('vpcReader', function() { var service, $http, $scope, API; beforeEach( window.module( - require('./vpc.read.service.js'), + VPC_READ_SERVICE, API_SERVICE ) ); diff --git a/app/scripts/modules/amazon/vpc/vpc.read.service.ts b/app/scripts/modules/amazon/vpc/vpc.read.service.ts new file mode 100644 index 00000000000..9ac04a74935 --- /dev/null +++ b/app/scripts/modules/amazon/vpc/vpc.read.service.ts @@ -0,0 +1,46 @@ +import { module, IQService, IPromise } from 'angular'; + +import { IVpc, NETWORK_READ_SERVICE, NetworkReader } from '@spinnaker/core'; + +export class VpcReader { + + private cachedVpcs: IVpc[]; + + constructor(private $q: IQService, private networkReader: NetworkReader) { + 'ngInject'; + } + + public listVpcs(): IPromise { + if (this.cachedVpcs) { + return this.$q.when(this.cachedVpcs); + } + return this.networkReader.listNetworksByProvider('aws').then((vpcs: IVpc[]) => { + const results = vpcs.map(vpc => { + vpc.label = vpc.name; + vpc.deprecated = !!vpc.deprecated; + if (vpc.deprecated) { + vpc.label += ' (deprecated)'; + } + return vpc; + }); + this.cachedVpcs = results; + return results; + }); + } + + public resetCache() { + this.cachedVpcs = null; + } + + public getVpcName(id: string) { + return this.listVpcs().then(vpcs => { + const match = vpcs.find(test => { + return test.id === id; + }); + return match ? match.name : null; + }); + } +} + +export const VPC_READ_SERVICE = 'spinnaker.amazon.vpc.read.service'; +module(VPC_READ_SERVICE, [NETWORK_READ_SERVICE]).service('vpcReader', VpcReader); diff --git a/app/scripts/modules/amazon/vpc/vpcTag.directive.js b/app/scripts/modules/amazon/vpc/vpcTag.directive.js index 10650fa666f..64a84bef747 100644 --- a/app/scripts/modules/amazon/vpc/vpcTag.directive.js +++ b/app/scripts/modules/amazon/vpc/vpcTag.directive.js @@ -2,8 +2,10 @@ const angular = require('angular'); +import { VPC_READ_SERVICE } from '../vpc/vpc.read.service'; + module.exports = angular.module('spinnaker.vpc.tag.directive', [ - require('./vpc.read.service.js'), + VPC_READ_SERVICE, ]) .directive('vpcTag', function(vpcReader) { return { diff --git a/app/scripts/modules/amazon/vpc/vpcTag.directive.spec.js b/app/scripts/modules/amazon/vpc/vpcTag.directive.spec.js index 9d2a53dc6c7..e80ad583bb8 100644 --- a/app/scripts/modules/amazon/vpc/vpcTag.directive.spec.js +++ b/app/scripts/modules/amazon/vpc/vpcTag.directive.spec.js @@ -1,5 +1,7 @@ 'use strict'; +import { VPC_READ_SERVICE } from '../vpc/vpc.read.service'; + describe('Directives: vpcTag', function () { var $q, vpcReader; @@ -7,7 +9,7 @@ describe('Directives: vpcTag', function () { beforeEach( window.module( require('./vpcTag.directive.js'), - require('./vpc.read.service.js') + VPC_READ_SERVICE ) ); diff --git a/app/scripts/modules/core/src/domain/IVpc.ts b/app/scripts/modules/core/src/domain/IVpc.ts index 7258c62d3fb..38a2254953a 100644 --- a/app/scripts/modules/core/src/domain/IVpc.ts +++ b/app/scripts/modules/core/src/domain/IVpc.ts @@ -4,4 +4,6 @@ export interface IVpc { name: string; region: string; cloudProvider: string; + label?: string; + deprecated?: boolean; } diff --git a/app/scripts/modules/netflix/migrator/pipeline/pipeline.migrator.directive.js b/app/scripts/modules/netflix/migrator/pipeline/pipeline.migrator.directive.js index 80d392d42db..0f5f1085de7 100644 --- a/app/scripts/modules/netflix/migrator/pipeline/pipeline.migrator.directive.js +++ b/app/scripts/modules/netflix/migrator/pipeline/pipeline.migrator.directive.js @@ -11,6 +11,8 @@ import { TASK_READ_SERVICE } from '@spinnaker/core'; +import { KEY_PAIRS_READ_SERVICE, VPC_READ_SERVICE } from '@spinnaker/amazon'; + import { NetflixSettings } from 'netflix/netflix.settings'; import '../migrator.less'; @@ -18,15 +20,14 @@ import '../migrator.less'; module.exports = angular .module('spinnaker.migrator.pipeline.directive', [ require('angular-ui-bootstrap'), - require('amazon/vpc/vpc.read.service.js'), + VPC_READ_SERVICE, SUBNET_READ_SERVICE, require('../migrator.service.js'), PIPELINE_CONFIG_SERVICE, SCROLL_TO_SERVICE, CACHE_INITIALIZER_SERVICE, TASK_READ_SERVICE, - require('amazon/keyPairs/keyPairs.read.service'), - require('amazon/vpc/vpc.read.service'), + KEY_PAIRS_READ_SERVICE, require('../migrationWarnings.component'), require('../migratedSecurityGroups.component'), require('../migratedLoadBalancers.component'), diff --git a/app/scripts/modules/netflix/migrator/serverGroup/serverGroup.migrator.directive.js b/app/scripts/modules/netflix/migrator/serverGroup/serverGroup.migrator.directive.js index ea2be9da140..9dafe9df39c 100644 --- a/app/scripts/modules/netflix/migrator/serverGroup/serverGroup.migrator.directive.js +++ b/app/scripts/modules/netflix/migrator/serverGroup/serverGroup.migrator.directive.js @@ -4,6 +4,7 @@ const angular = require('angular'); import _ from 'lodash'; import { SUBNET_READ_SERVICE } from '@spinnaker/core'; +import { KEY_PAIRS_READ_SERVICE, VPC_READ_SERVICE } from '@spinnaker/amazon'; import { NetflixSettings } from 'netflix/netflix.settings'; @@ -12,11 +13,10 @@ import '../migrator.less'; module.exports = angular .module('spinnaker.netflix.migrator.directive', [ require('angular-ui-bootstrap'), - require('amazon/vpc/vpc.read.service.js'), + VPC_READ_SERVICE, SUBNET_READ_SERVICE, require('../migrator.service.js'), - require('amazon/keyPairs/keyPairs.read.service'), - require('amazon/vpc/vpc.read.service'), + KEY_PAIRS_READ_SERVICE, require('../migrationWarnings.component'), require('../migratedSecurityGroups.component'), require('../migratedLoadBalancers.component'), diff --git a/app/scripts/modules/titus/securityGroup/securityGroupPicker.component.ts b/app/scripts/modules/titus/securityGroup/securityGroupPicker.component.ts index 731a54e037d..6f15af9f7b4 100644 --- a/app/scripts/modules/titus/securityGroup/securityGroupPicker.component.ts +++ b/app/scripts/modules/titus/securityGroup/securityGroupPicker.component.ts @@ -14,6 +14,8 @@ import { SECURITY_GROUP_READER } from '@spinnaker/core'; +import { VPC_READ_SERVICE } from '@spinnaker/amazon'; + class SecurityGroupPickerController implements ng.IComponentController { public securityGroups: any; public availableGroups: ISecurityGroup[]; @@ -165,6 +167,6 @@ module(TITUS_SECURITY_GROUP_PICKER, [ ACCOUNT_SERVICE, SECURITY_GROUP_READER, CACHE_INITIALIZER_SERVICE, - require('amazon/vpc/vpc.read.service'), + VPC_READ_SERVICE, ]) .component('titusSecurityGroupPicker', new SecurityGroupPickerComponent()); diff --git a/tsconfig.json b/tsconfig.json index 480cdda8321..88473648c8a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,7 +26,8 @@ "core": ["core/src"], "@spinnaker/docker": ["docker/src"], "docker/*": ["docker/src/*"], - "docker": ["docker/src"] + "docker": ["docker/src"], + "@spinnaker/amazon": ["amazon"] }, "pretty": true, "removeComments": true, diff --git a/webpack.common.js b/webpack.common.js index d5b100a86f0..738495cd96f 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -34,6 +34,8 @@ function configure(IS_TEST) { '@spinnaker/core': path.join(__dirname, 'app', 'scripts', 'modules', 'core', 'src'), 'docker': path.join(__dirname, 'app', 'scripts', 'modules', 'docker', 'src'), '@spinnaker/docker': path.join(__dirname, 'app', 'scripts', 'modules', 'docker', 'src'), + 'amazon': path.join(__dirname, 'app', 'scripts', 'modules', 'amazon'), + '@spinnaker/amazon': path.join(__dirname, 'app', 'scripts', 'modules', 'amazon'), } }, module: {