From b70c6d98a92adc3f2ddabb4d449c6ced3249480c Mon Sep 17 00:00:00 2001 From: Erik Munson Date: Tue, 22 May 2018 14:11:36 -0700 Subject: [PATCH 1/2] feat(*/instance): add moniker info + env to instance link templates (#5367) --- .../details/instance.details.controller.js | 4 +++ .../instance.details.controller.spec.js | 4 ++- .../src/instance/details/instanceDetails.html | 2 +- .../details/instance.details.controller.js | 4 +++ .../instance.details.controller.spec.js | 2 ++ .../instance/details/instanceDetails.html | 2 +- .../core/src/cloudProvider/skin.service.ts | 22 +++++++++++++++ .../src/instance/details/InstanceDetails.tsx | 28 ++++++++++++++----- .../details/instanceLinks.component.js | 9 +++++- .../details/instance.details.controller.js | 4 +++ .../ecs/instance/details/instanceDetails.html | 2 +- .../details/instance.details.controller.js | 4 +++ .../instance.details.controller.spec.js | 2 ++ .../src/instance/details/instanceDetails.html | 2 +- .../instance/details/details.controller.js | 4 +++ .../src/instance/details/details.html | 2 +- .../details/instance.details.controller.js | 4 +++ .../src/instance/details/instanceDetails.html | 2 +- .../details/instance.details.controller.js | 4 +++ .../src/instance/details/instanceDetails.html | 2 +- 20 files changed, 93 insertions(+), 16 deletions(-) diff --git a/app/scripts/modules/amazon/src/instance/details/instance.details.controller.js b/app/scripts/modules/amazon/src/instance/details/instance.details.controller.js index 6fa01afbe66..a1ddb36d4e9 100644 --- a/app/scripts/modules/amazon/src/instance/details/instance.details.controller.js +++ b/app/scripts/modules/amazon/src/instance/details/instance.details.controller.js @@ -32,6 +32,8 @@ module.exports = angular instanceReader, instance, app, + moniker, + environment, $q, overrides, ) { @@ -45,6 +47,8 @@ module.exports = angular }; $scope.application = app; + $scope.moniker = moniker; + $scope.environment = environment; $scope.securityGroupsLabel = FirewallLabels.get('Firewalls'); diff --git a/app/scripts/modules/amazon/src/instance/details/instance.details.controller.spec.js b/app/scripts/modules/amazon/src/instance/details/instance.details.controller.spec.js index a87ca14cc96..0fe6a3c74c2 100644 --- a/app/scripts/modules/amazon/src/instance/details/instance.details.controller.spec.js +++ b/app/scripts/modules/amazon/src/instance/details/instance.details.controller.spec.js @@ -18,9 +18,11 @@ describe('Controller: awsInstanceDetailsCtrl', function() { this.createController = function(application, instance) { controller = $controller('awsInstanceDetailsCtrl', { $scope: scope, - instance: instance, app: application, overrides: {}, + moniker: {}, + environment: 'test', + instance, }); }; diff --git a/app/scripts/modules/amazon/src/instance/details/instanceDetails.html b/app/scripts/modules/amazon/src/instance/details/instanceDetails.html index ee54f51b324..b9233e489dc 100644 --- a/app/scripts/modules/amazon/src/instance/details/instanceDetails.html +++ b/app/scripts/modules/amazon/src/instance/details/instanceDetails.html @@ -189,7 +189,7 @@

- +
diff --git a/app/scripts/modules/cloudfoundry/instance/details/instance.details.controller.js b/app/scripts/modules/cloudfoundry/instance/details/instance.details.controller.js index c92a8c36db2..14ceeda16cc 100644 --- a/app/scripts/modules/cloudfoundry/instance/details/instance.details.controller.js +++ b/app/scripts/modules/cloudfoundry/instance/details/instance.details.controller.js @@ -29,6 +29,8 @@ module.exports = angular instanceReader, instance, app, + moniker, + environment, ) { // needed for standalone instances $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('cf', 'instance.detailsTemplateUrl'); @@ -39,6 +41,8 @@ module.exports = angular }; $scope.application = app; + $scope.moniker = moniker; + $scope.environment = environment; function extractHealthMetrics(instance, latest) { // do not backfill on standalone instances diff --git a/app/scripts/modules/cloudfoundry/instance/details/instance.details.controller.spec.js b/app/scripts/modules/cloudfoundry/instance/details/instance.details.controller.spec.js index abd98ac9b85..598c26d0417 100644 --- a/app/scripts/modules/cloudfoundry/instance/details/instance.details.controller.spec.js +++ b/app/scripts/modules/cloudfoundry/instance/details/instance.details.controller.spec.js @@ -13,6 +13,8 @@ describe('Controller: cfInstanceDetailsCtrl', function() { controller = $controller('cfInstanceDetailsCtrl', { $scope: scope, instance: {}, + moniker: {}, + environment: 'test', app: { isStandalone: true }, }); }), diff --git a/app/scripts/modules/cloudfoundry/instance/details/instanceDetails.html b/app/scripts/modules/cloudfoundry/instance/details/instanceDetails.html index 2e1ee11754b..0ab83888e9d 100644 --- a/app/scripts/modules/cloudfoundry/instance/details/instanceDetails.html +++ b/app/scripts/modules/cloudfoundry/instance/details/instanceDetails.html @@ -137,7 +137,7 @@

- +

diff --git a/app/scripts/modules/core/src/cloudProvider/skin.service.ts b/app/scripts/modules/core/src/cloudProvider/skin.service.ts index 6cb4ec5ae70..5a295f981c3 100644 --- a/app/scripts/modules/core/src/cloudProvider/skin.service.ts +++ b/app/scripts/modules/core/src/cloudProvider/skin.service.ts @@ -6,6 +6,7 @@ import { SETTINGS } from 'core/config/settings'; import { AccountService, IAccountDetails } from 'core/account'; import { CloudProviderRegistry } from 'core/cloudProvider'; import { ILoadBalancer, IServerGroup } from 'core/domain'; +import { IMoniker } from 'core/naming'; import { Application } from 'core/application'; export class SkinService { @@ -86,6 +87,27 @@ export class SkinService { }); } + public static getMonikerForInstance(cloudProvider: string, instanceId: string, app: Application): IPromise { + return app.ready().then(() => { + const serverGroups = app.getDataSource('serverGroups').data as IServerGroup[]; + const loadBalancers = app.getDataSource('loadBalancers').data as ILoadBalancer[]; + const loadBalancerServerGroups = loadBalancers.map(lb => lb.serverGroups).reduce((acc, sg) => acc.concat(sg), []); + + const hasInstance = (obj: IServerGroup | ILoadBalancer) => { + return ( + obj.cloudProvider === cloudProvider && (obj.instances || []).some(instance => instance.id === instanceId) + ); + }; + + const all: Array = [] + .concat(serverGroups) + .concat(loadBalancers) + .concat(loadBalancerServerGroups); + const found = all.find(hasInstance); + return found && found.moniker; + }); + } + public static getAccounts(): IPromise { if (!SETTINGS.feature.versionedProviders) { return $q.resolve([]); diff --git a/app/scripts/modules/core/src/instance/details/InstanceDetails.tsx b/app/scripts/modules/core/src/instance/details/InstanceDetails.tsx index 18c698b47c6..faea3c21cd4 100644 --- a/app/scripts/modules/core/src/instance/details/InstanceDetails.tsx +++ b/app/scripts/modules/core/src/instance/details/InstanceDetails.tsx @@ -3,8 +3,10 @@ import { Subject, Observable } from 'rxjs'; import { Overridable, IOverridableProps } from 'core/overrideRegistry'; import { Application } from 'core/application'; +import { AccountService } from 'core/account/AccountService'; import { Spinner } from 'core/widgets'; import { SkinService } from 'core/cloudProvider/skin.service'; +import { IMoniker } from 'core/naming'; export interface IInstanceDetailsProps extends IOverridableProps { $stateParams: { @@ -12,15 +14,21 @@ export interface IInstanceDetailsProps extends IOverridableProps { instanceId: string; }; app: Application; + moniker: IMoniker; + environment: string; } export interface IInstanceDetailsState { accountId: string; + moniker: IMoniker; + environment: string; loading: boolean; } export class InstanceDetails extends React.Component { public state = { accountId: null, + moniker: null, + environment: null, loading: false, } as IInstanceDetailsState; @@ -29,14 +37,20 @@ export class InstanceDetails extends React.Component this.setState({ loading: true, accountId: null })) + .do(() => this.setState({ loading: true, accountId: null, moniker: null, environment: null })) .switchMap(({ app, $stateParams }) => { - const acct = SkinService.getAccountForInstance($stateParams.provider, $stateParams.instanceId, app); - return Observable.fromPromise(acct); + const accountId = SkinService.getAccountForInstance($stateParams.provider, $stateParams.instanceId, app); + return Observable.fromPromise( + Promise.all([ + accountId, + SkinService.getMonikerForInstance($stateParams.provider, $stateParams.instanceId, app), + accountId.then(id => AccountService.getAccountDetails(id)), + ]), + ); }) .takeUntil(this.destroy$) - .subscribe((accountId: string) => { - this.setState({ accountId, loading: false }); + .subscribe(([accountId, moniker, { environment }]) => { + this.setState({ accountId, moniker, environment, loading: false }); }); this.props$.next(this.props); @@ -51,12 +65,12 @@ export class InstanceDetails extends React.Component; } - return ; + return ; } } diff --git a/app/scripts/modules/core/src/instance/details/instanceLinks.component.js b/app/scripts/modules/core/src/instance/details/instanceLinks.component.js index 02d938f12b1..b0defa08239 100644 --- a/app/scripts/modules/core/src/instance/details/instanceLinks.component.js +++ b/app/scripts/modules/core/src/instance/details/instanceLinks.component.js @@ -12,6 +12,8 @@ module.exports = angular.module('spinnaker.core.instance.details.instanceLinks', address: '=', application: '=', instance: '=', + moniker: '=', + environment: '=', }, templateUrl: require('./instanceLinks.component.html'), controller: function($interpolate) { @@ -25,7 +27,12 @@ module.exports = angular.module('spinnaker.core.instance.details.instanceLinks', let url = link.path; // handle interpolated variables if (url.includes('{{')) { - url = $interpolate(url)(Object.assign({}, this.instance, { ipAddress: this.address })); + url = $interpolate(url)( + Object.assign({}, this.instance, this.moniker, { + ipAddress: this.address, + environment: this.environment, + }), + ); } // handle relative paths if (!url.includes('//')) { diff --git a/app/scripts/modules/ecs/instance/details/instance.details.controller.js b/app/scripts/modules/ecs/instance/details/instance.details.controller.js index 3e31dea3331..f7ef67662f6 100644 --- a/app/scripts/modules/ecs/instance/details/instance.details.controller.js +++ b/app/scripts/modules/ecs/instance/details/instance.details.controller.js @@ -27,6 +27,8 @@ module.exports = angular instanceWriter, instance, app, + moniker, + environment, $q, overrides, ) { @@ -40,6 +42,8 @@ module.exports = angular }; $scope.application = app; + $scope.moniker = moniker; + $scope.environment = environment; const cloudProvider = 'ecs'; const defaultRequestParams = { cloudProvider: cloudProvider }; diff --git a/app/scripts/modules/ecs/instance/details/instanceDetails.html b/app/scripts/modules/ecs/instance/details/instanceDetails.html index d45cd019840..94205e2fb0b 100644 --- a/app/scripts/modules/ecs/instance/details/instanceDetails.html +++ b/app/scripts/modules/ecs/instance/details/instanceDetails.html @@ -128,7 +128,7 @@

- +

diff --git a/app/scripts/modules/google/src/instance/details/instance.details.controller.js b/app/scripts/modules/google/src/instance/details/instance.details.controller.js index aa14b2d8a8b..dd8f4dc3e99 100644 --- a/app/scripts/modules/google/src/instance/details/instance.details.controller.js +++ b/app/scripts/modules/google/src/instance/details/instance.details.controller.js @@ -33,6 +33,8 @@ module.exports = angular instanceReader, instance, app, + moniker, + environment, $q, gceHttpLoadBalancerUtils, gceXpnNamingService, @@ -48,6 +50,8 @@ module.exports = angular }; $scope.application = app; + $scope.moniker = moniker; + $scope.environment = environment; function extractHealthMetrics(instance, latest) { // do not backfill on standalone instances diff --git a/app/scripts/modules/google/src/instance/details/instance.details.controller.spec.js b/app/scripts/modules/google/src/instance/details/instance.details.controller.spec.js index 06c3a70e395..5477bc978d4 100644 --- a/app/scripts/modules/google/src/instance/details/instance.details.controller.spec.js +++ b/app/scripts/modules/google/src/instance/details/instance.details.controller.spec.js @@ -14,6 +14,8 @@ describe('Controller: gceInstanceDetailsCtrl', function() { controller = $controller('gceInstanceDetailsCtrl', { $scope: scope, instance: {}, + moniker: {}, + environment: 'test', app: { isStandalone: true }, }); }), diff --git a/app/scripts/modules/google/src/instance/details/instanceDetails.html b/app/scripts/modules/google/src/instance/details/instanceDetails.html index 7c4303151f1..d2b014b5b04 100644 --- a/app/scripts/modules/google/src/instance/details/instanceDetails.html +++ b/app/scripts/modules/google/src/instance/details/instanceDetails.html @@ -213,7 +213,7 @@

- +

diff --git a/app/scripts/modules/kubernetes/src/instance/details/details.controller.js b/app/scripts/modules/kubernetes/src/instance/details/details.controller.js index fcc007752d3..981d104d41c 100644 --- a/app/scripts/modules/kubernetes/src/instance/details/details.controller.js +++ b/app/scripts/modules/kubernetes/src/instance/details/details.controller.js @@ -29,6 +29,8 @@ module.exports = angular instanceReader, instance, app, + moniker, + environment, kubernetesProxyUiService, $q, ) { @@ -41,6 +43,8 @@ module.exports = angular }; this.application = app; + $scope.moniker = moniker; + $scope.environment = environment; this.uiLink = function uiLink() { return kubernetesProxyUiService.buildLink( diff --git a/app/scripts/modules/kubernetes/src/instance/details/details.html b/app/scripts/modules/kubernetes/src/instance/details/details.html index bceabb2edf0..bd8fffff471 100644 --- a/app/scripts/modules/kubernetes/src/instance/details/details.html +++ b/app/scripts/modules/kubernetes/src/instance/details/details.html @@ -141,7 +141,7 @@

- +
diff --git a/app/scripts/modules/openstack/src/instance/details/instance.details.controller.js b/app/scripts/modules/openstack/src/instance/details/instance.details.controller.js index 71124294390..16f3272e96f 100644 --- a/app/scripts/modules/openstack/src/instance/details/instance.details.controller.js +++ b/app/scripts/modules/openstack/src/instance/details/instance.details.controller.js @@ -30,6 +30,8 @@ module.exports = angular instanceReader, instance, app, + moniker, + environment, $q, overrides, ) { @@ -45,6 +47,8 @@ module.exports = angular $scope.firewallsLabel = FirewallLabels.get('Firewalls'); $scope.application = app; + $scope.moniker = moniker; + $scope.environment = environment; function extractHealthMetrics(instance, latest) { // do not backfill on standalone instances diff --git a/app/scripts/modules/openstack/src/instance/details/instanceDetails.html b/app/scripts/modules/openstack/src/instance/details/instanceDetails.html index 5ee908aca87..f18175b813d 100644 --- a/app/scripts/modules/openstack/src/instance/details/instanceDetails.html +++ b/app/scripts/modules/openstack/src/instance/details/instanceDetails.html @@ -160,7 +160,7 @@

- +

diff --git a/app/scripts/modules/titus/src/instance/details/instance.details.controller.js b/app/scripts/modules/titus/src/instance/details/instance.details.controller.js index 52c82844f74..b56b33410c8 100644 --- a/app/scripts/modules/titus/src/instance/details/instance.details.controller.js +++ b/app/scripts/modules/titus/src/instance/details/instance.details.controller.js @@ -33,6 +33,8 @@ module.exports = angular instanceReader, instance, app, + moniker, + environment, titusSecurityGroupReader, ) { // needed for standalone instances @@ -45,6 +47,8 @@ module.exports = angular $scope.firewallsLabel = FirewallLabels.get('Firewalls'); $scope.application = app; + $scope.moniker = moniker; + $scope.environment = environment; $scope.gateUrl = SETTINGS.gateUrl; function extractHealthMetrics(instance, latest) { diff --git a/app/scripts/modules/titus/src/instance/details/instanceDetails.html b/app/scripts/modules/titus/src/instance/details/instanceDetails.html index c51c9caba1e..55c56e1f7ae 100644 --- a/app/scripts/modules/titus/src/instance/details/instanceDetails.html +++ b/app/scripts/modules/titus/src/instance/details/instanceDetails.html @@ -169,7 +169,7 @@

Logs in Titus UI - +

From bd2b5b8e446eb864f01ad4326b5c350e0420350f Mon Sep 17 00:00:00 2001 From: Eric Zimanyi Date: Tue, 22 May 2018 18:15:06 -0400 Subject: [PATCH 2/2] fix(core): Fix warnings about unused variables (#5371) --- .../modules/core/src/projects/service/project.write.service.js | 2 +- .../securityGroup/configure/createSecurityGroup.controller.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/scripts/modules/core/src/projects/service/project.write.service.js b/app/scripts/modules/core/src/projects/service/project.write.service.js index ce195ef79d4..fd6449f6616 100644 --- a/app/scripts/modules/core/src/projects/service/project.write.service.js +++ b/app/scripts/modules/core/src/projects/service/project.write.service.js @@ -4,7 +4,7 @@ import { TaskExecutor } from 'core/task/taskExecutor'; const angular = require('angular'); -module.exports = angular.module('spinnaker.core.projects.write.service', []).factory('projectWriter', function($q) { +module.exports = angular.module('spinnaker.core.projects.write.service', []).factory('projectWriter', function() { function upsertProject(project) { let descriptor = project.id ? 'Update' : 'Create'; return TaskExecutor.executeTask({ diff --git a/app/scripts/modules/google/src/securityGroup/configure/createSecurityGroup.controller.js b/app/scripts/modules/google/src/securityGroup/configure/createSecurityGroup.controller.js index e11b3af2e34..d69af5cb796 100644 --- a/app/scripts/modules/google/src/securityGroup/configure/createSecurityGroup.controller.js +++ b/app/scripts/modules/google/src/securityGroup/configure/createSecurityGroup.controller.js @@ -2,7 +2,7 @@ const angular = require('angular'); -import { AccountService, FirewallLabels, InfrastructureCaches } from '@spinnaker/core'; +import { AccountService, InfrastructureCaches } from '@spinnaker/core'; module.exports = angular .module('spinnaker.gce.securityGroup.create.controller', [require('@uirouter/angularjs').default])