From 2fd1aa97195cc1bf8c26447a3d144e6d6192021f Mon Sep 17 00:00:00 2001 From: Erik Munson Date: Fri, 28 Jun 2019 08:12:22 -0700 Subject: [PATCH] feat(core/amazon): add a visual indicator to infra managed by Keel (#7161) --- .../details/instance.details.controller.js | 2 - .../src/instance/details/instanceDetails.html | 8 +++- .../details/loadBalancerDetails.controller.ts | 2 + .../details/loadBalancerDetails.html | 9 +++- .../details/targetGroupDetails.controller.ts | 10 ++--- .../details/targetGroupDetails.html | 37 ++++------------- .../details/securityGroupDetail.controller.js | 2 + .../details/securityGroupDetail.html | 17 ++++++-- app/scripts/modules/core/src/index.ts | 2 + .../ManagedResourceDetailsIndicator.less | 4 ++ .../ManagedResourceDetailsIndicator.tsx | 41 +++++++++++++++++++ app/scripts/modules/core/src/managed/index.ts | 2 + ...nagedResourceDetailsIndicator.component.ts | 10 +++++ .../details/ServerGroupDetails.tsx | 2 + 14 files changed, 106 insertions(+), 42 deletions(-) create mode 100644 app/scripts/modules/core/src/managed/ManagedResourceDetailsIndicator.less create mode 100644 app/scripts/modules/core/src/managed/ManagedResourceDetailsIndicator.tsx create mode 100644 app/scripts/modules/core/src/managed/index.ts create mode 100644 app/scripts/modules/core/src/managed/managedResourceDetailsIndicator.component.ts 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 31eee69854b..7b81b6d1877 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 @@ -25,7 +25,6 @@ module.exports = angular .controller('awsInstanceDetailsCtrl', [ '$scope', '$state', - '$uibModal', 'amazonInstanceWriter', 'confirmationModalService', 'instance', @@ -37,7 +36,6 @@ module.exports = angular function( $scope, $state, - $uibModal, amazonInstanceWriter, confirmationModalService, instance, diff --git a/app/scripts/modules/amazon/src/instance/details/instanceDetails.html b/app/scripts/modules/amazon/src/instance/details/instanceDetails.html index a470bfc71d2..572ce503d05 100644 --- a/app/scripts/modules/amazon/src/instance/details/instanceDetails.html +++ b/app/scripts/modules/amazon/src/instance/details/instanceDetails.html @@ -116,9 +116,13 @@

>
VPC
-
+
+ +
Subnet
-
+
+ +
Image ID
{{instance.imageId}}
diff --git a/app/scripts/modules/amazon/src/loadBalancer/details/loadBalancerDetails.controller.ts b/app/scripts/modules/amazon/src/loadBalancer/details/loadBalancerDetails.controller.ts index 84a0c41031c..eac9273336c 100644 --- a/app/scripts/modules/amazon/src/loadBalancer/details/loadBalancerDetails.controller.ts +++ b/app/scripts/modules/amazon/src/loadBalancer/details/loadBalancerDetails.controller.ts @@ -16,6 +16,7 @@ import { SecurityGroupReader, SubnetReader, FirewallLabels, + MANAGED_RESOURCE_DETAILS_INDICATOR, } from '@spinnaker/core'; import { @@ -234,4 +235,5 @@ module(AWS_LOAD_BALANCER_DETAILS_CTRL, [ LOAD_BALANCER_ACTIONS, LOAD_BALANCER_READ_SERVICE, CONFIRMATION_MODAL_SERVICE, + MANAGED_RESOURCE_DETAILS_INDICATOR, ]).controller('awsLoadBalancerDetailsCtrl', AwsLoadBalancerDetailsController); diff --git a/app/scripts/modules/amazon/src/loadBalancer/details/loadBalancerDetails.html b/app/scripts/modules/amazon/src/loadBalancer/details/loadBalancerDetails.html index 88d718fa734..ae2d3fc7ad9 100644 --- a/app/scripts/modules/amazon/src/loadBalancer/details/loadBalancerDetails.html +++ b/app/scripts/modules/amazon/src/loadBalancer/details/loadBalancerDetails.html @@ -58,6 +58,11 @@

+ +
@@ -68,7 +73,9 @@

{{ctrl.loadBalancer.region}}
VPC
-
+
+ +
Subnet
{{ctrl.getFirstSubnetPurpose(ctrl.loadBalancer.subnetDetails)}}
Type
diff --git a/app/scripts/modules/amazon/src/loadBalancer/details/targetGroupDetails.controller.ts b/app/scripts/modules/amazon/src/loadBalancer/details/targetGroupDetails.controller.ts index 008cced1682..f119088b525 100644 --- a/app/scripts/modules/amazon/src/loadBalancer/details/targetGroupDetails.controller.ts +++ b/app/scripts/modules/amazon/src/loadBalancer/details/targetGroupDetails.controller.ts @@ -1,7 +1,7 @@ import { IController, IPromise, IQService, IScope, module } from 'angular'; import { StateService } from '@uirouter/angularjs'; -import { Application, ILoadBalancer } from '@spinnaker/core'; +import { Application, ILoadBalancer, MANAGED_RESOURCE_DETAILS_INDICATOR } from '@spinnaker/core'; import { IAmazonApplicationLoadBalancer, ITargetGroup } from 'amazon/domain/IAmazonLoadBalancer'; @@ -87,7 +87,7 @@ export class AwsTargetGroupDetailsController implements IController { } export const AWS_TARGET_GROUP_DETAILS_CTRL = 'spinnaker.amazon.loadBalancer.details.targetGroupDetails.controller'; -module(AWS_TARGET_GROUP_DETAILS_CTRL, [require('@uirouter/angularjs').default]).controller( - 'awsTargetGroupDetailsCtrl', - AwsTargetGroupDetailsController, -); +module(AWS_TARGET_GROUP_DETAILS_CTRL, [ + require('@uirouter/angularjs').default, + MANAGED_RESOURCE_DETAILS_INDICATOR, +]).controller('awsTargetGroupDetailsCtrl', AwsTargetGroupDetailsController); diff --git a/app/scripts/modules/amazon/src/loadBalancer/details/targetGroupDetails.html b/app/scripts/modules/amazon/src/loadBalancer/details/targetGroupDetails.html index e9844af7e31..22fcc809c88 100644 --- a/app/scripts/modules/amazon/src/loadBalancer/details/targetGroupDetails.html +++ b/app/scripts/modules/amazon/src/loadBalancer/details/targetGroupDetails.html @@ -22,42 +22,21 @@

{{ctrl.targetGroup.name}}

-
-
- -
-
+ +
In
{{ctrl.targetGroup.region}}
VPC
-
+
+ +
Protocol
{{ctrl.targetGroup.protocol}}
Port
diff --git a/app/scripts/modules/amazon/src/securityGroup/details/securityGroupDetail.controller.js b/app/scripts/modules/amazon/src/securityGroup/details/securityGroupDetail.controller.js index 7c67a4746a3..efcac059715 100644 --- a/app/scripts/modules/amazon/src/securityGroup/details/securityGroupDetail.controller.js +++ b/app/scripts/modules/amazon/src/securityGroup/details/securityGroupDetail.controller.js @@ -10,6 +10,7 @@ import { SECURITY_GROUP_READER, SecurityGroupWriter, FirewallLabels, + MANAGED_RESOURCE_DETAILS_INDICATOR, } from '@spinnaker/core'; import { VpcReader } from '../../vpc/VpcReader'; @@ -20,6 +21,7 @@ module.exports = angular SECURITY_GROUP_READER, CONFIRMATION_MODAL_SERVICE, require('../clone/cloneSecurityGroup.controller').name, + MANAGED_RESOURCE_DETAILS_INDICATOR, ]) .controller('awsSecurityGroupDetailsCtrl', [ '$scope', diff --git a/app/scripts/modules/amazon/src/securityGroup/details/securityGroupDetail.html b/app/scripts/modules/amazon/src/securityGroup/details/securityGroupDetail.html index 456db1c5f99..041722566da 100644 --- a/app/scripts/modules/amazon/src/securityGroup/details/securityGroupDetail.html +++ b/app/scripts/modules/amazon/src/securityGroup/details/securityGroupDetail.html @@ -54,17 +54,26 @@

+ +
ID
{{securityGroup.id}}
Account
-
+
+ +
Region
{{securityGroup.region}}
VPC
-
+
+ +
Description
{{securityGroup.description}}
@@ -102,7 +111,9 @@

ng-class="insightCtrl.vm.filtersExpanded ? '' : 'dl-horizontal dl-medium'" ng-repeat="rule in securityGroupRules | orderBy: 'securityGroup.name' " > -
+
+ +
.icon { + text-shadow: 0px 1px 4px rgba(0, 0, 0, 0.5); + padding-right: 5px; +} diff --git a/app/scripts/modules/core/src/managed/ManagedResourceDetailsIndicator.tsx b/app/scripts/modules/core/src/managed/ManagedResourceDetailsIndicator.tsx new file mode 100644 index 00000000000..c92447e8441 --- /dev/null +++ b/app/scripts/modules/core/src/managed/ManagedResourceDetailsIndicator.tsx @@ -0,0 +1,41 @@ +import * as React from 'react'; +import { get } from 'lodash'; + +import { IEntityTags } from 'core/domain'; +import { HoverablePopover } from 'core/presentation'; + +import './ManagedResourceDetailsIndicator.less'; + +export const MANAGED_BY_SPINNAKER_TAG_NAME = 'spinnaker_ui_notice:managed_by_spinnaker'; + +export interface IManagedResourceDetailsIndicatorProps { + entityTags: IEntityTags[]; +} + +export const ManagedResourceDetailsIndicator = ({ entityTags }: IManagedResourceDetailsIndicatorProps) => { + const isManaged = + get(entityTags, 'length') && + entityTags.some(({ tags }) => tags.some(({ name }) => name === MANAGED_BY_SPINNAKER_TAG_NAME)); + + if (!isManaged) { + return null; + } + + const helpText = ( + <> +

+ Spinnaker is continuously managing this resource. +

+

Changes made in the UI will be stomped in favor of the existing declarative configuration.

+ + ); + + return ( + +
+ 🌈 + Managed by Spinnaker +
+
+ ); +}; diff --git a/app/scripts/modules/core/src/managed/index.ts b/app/scripts/modules/core/src/managed/index.ts new file mode 100644 index 00000000000..93dd424131f --- /dev/null +++ b/app/scripts/modules/core/src/managed/index.ts @@ -0,0 +1,2 @@ +export * from './ManagedResourceDetailsIndicator'; +export * from './managedResourceDetailsIndicator.component'; diff --git a/app/scripts/modules/core/src/managed/managedResourceDetailsIndicator.component.ts b/app/scripts/modules/core/src/managed/managedResourceDetailsIndicator.component.ts new file mode 100644 index 00000000000..007664f4dc1 --- /dev/null +++ b/app/scripts/modules/core/src/managed/managedResourceDetailsIndicator.component.ts @@ -0,0 +1,10 @@ +import { module } from 'angular'; +import { react2angular } from 'react2angular'; + +import { ManagedResourceDetailsIndicator } from './ManagedResourceDetailsIndicator'; + +export const MANAGED_RESOURCE_DETAILS_INDICATOR = 'spinnaker.core.managed.resourceDetailsIndicator.component'; +module(MANAGED_RESOURCE_DETAILS_INDICATOR, []).component( + 'managedResourceDetailsIndicator', + react2angular(ManagedResourceDetailsIndicator, ['entityTags']), +); diff --git a/app/scripts/modules/core/src/serverGroup/details/ServerGroupDetails.tsx b/app/scripts/modules/core/src/serverGroup/details/ServerGroupDetails.tsx index 4d1482be236..f1fd24810cc 100644 --- a/app/scripts/modules/core/src/serverGroup/details/ServerGroupDetails.tsx +++ b/app/scripts/modules/core/src/serverGroup/details/ServerGroupDetails.tsx @@ -4,6 +4,7 @@ import { Subject } from 'rxjs'; import { CloudProviderLogo } from 'core/cloudProvider/CloudProviderLogo'; import { EntityNotifications } from 'core/entityTag/notifications/EntityNotifications'; +import { ManagedResourceDetailsIndicator } from 'core/managed'; import { IServerGroup } from 'core/domain'; import { ReactInjector } from 'core/reactShims'; import { SETTINGS } from 'core/config/settings'; @@ -121,6 +122,7 @@ export class ServerGroupDetails extends React.ComponentDisabled {timestamp(serverGroup.disabledDate)}

)} + {!loading && } {!loading && (