Skip to content

Commit

Permalink
Merge branch 'master' into arch/addFormValidationForScriptstage
Browse files Browse the repository at this point in the history
  • Loading branch information
archana-s committed May 23, 2018
2 parents d80c795 + bd2b5b8 commit 9e03d01
Show file tree
Hide file tree
Showing 22 changed files with 95 additions and 18 deletions.
Expand Up @@ -32,6 +32,8 @@ module.exports = angular
instanceReader,
instance,
app,
moniker,
environment,
$q,
overrides,
) {
Expand All @@ -45,6 +47,8 @@ module.exports = angular
};

$scope.application = app;
$scope.moniker = moniker;
$scope.environment = environment;

$scope.securityGroupsLabel = FirewallLabels.get('Firewalls');

Expand Down
Expand Up @@ -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,
});
};

Expand Down
Expand Up @@ -189,7 +189,7 @@ <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>
</li>
</ul>
</collapsible-section>
<instance-links address="baseIpAddress" application="application" instance="instance"></instance-links>
<instance-links address="baseIpAddress" application="application" instance="instance" moniker="moniker" environment="environment"></instance-links>
</div>
<div class="content" ng-if="!state.loading && !instance">
<div class="content-section">
Expand Down
Expand Up @@ -29,6 +29,8 @@ module.exports = angular
instanceReader,
instance,
app,
moniker,
environment,
) {
// needed for standalone instances
$scope.detailsTemplateUrl = CloudProviderRegistry.getValue('cf', 'instance.detailsTemplateUrl');
Expand All @@ -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
Expand Down
Expand Up @@ -13,6 +13,8 @@ describe('Controller: cfInstanceDetailsCtrl', function() {
controller = $controller('cfInstanceDetailsCtrl', {
$scope: scope,
instance: {},
moniker: {},
environment: 'test',
app: { isStandalone: true },
});
}),
Expand Down
Expand Up @@ -137,7 +137,7 @@ <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>
</li>
</ul>
</collapsible-section>
<instance-links address="baseIpAddress" application="application" instance="instance"></instance-links>
<instance-links address="baseIpAddress" application="application" instance="instance" moniker="moniker" environment="environment"></instance-links>
</div>
<div class="content" ng-if="!state.loading && !instance">
<div class="content-section">
Expand Down
22 changes: 22 additions & 0 deletions app/scripts/modules/core/src/cloudProvider/skin.service.ts
Expand Up @@ -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 {
Expand Down Expand Up @@ -86,6 +87,27 @@ export class SkinService {
});
}

public static getMonikerForInstance(cloudProvider: string, instanceId: string, app: Application): IPromise<IMoniker> {
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<IServerGroup | ILoadBalancer> = []
.concat(serverGroups)
.concat(loadBalancers)
.concat(loadBalancerServerGroups);
const found = all.find(hasInstance);
return found && found.moniker;
});
}

public static getAccounts(): IPromise<IAccountDetails[]> {
if (!SETTINGS.feature.versionedProviders) {
return $q.resolve([]);
Expand Down
28 changes: 21 additions & 7 deletions app/scripts/modules/core/src/instance/details/InstanceDetails.tsx
Expand Up @@ -3,24 +3,32 @@ 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: {
provider: string;
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<IInstanceDetailsProps, IInstanceDetailsState> {
public state = {
accountId: null,
moniker: null,
environment: null,
loading: false,
} as IInstanceDetailsState;

Expand All @@ -29,14 +37,20 @@ export class InstanceDetails extends React.Component<IInstanceDetailsProps, IIns

public componentDidMount() {
this.props$
.do(() => 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);
Expand All @@ -51,12 +65,12 @@ export class InstanceDetails extends React.Component<IInstanceDetailsProps, IIns
}

public render() {
const { accountId, loading } = this.state;
const { accountId, moniker, environment, loading } = this.state;
if (loading) {
return <Spinner />;
}

return <InstanceDetailsCmp {...this.props} accountId={accountId} />;
return <InstanceDetailsCmp {...this.props} accountId={accountId} moniker={moniker} environment={environment} />;
}
}

Expand Down
Expand Up @@ -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) {
Expand All @@ -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('//')) {
Expand Down
Expand Up @@ -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({
Expand Down
Expand Up @@ -27,6 +27,8 @@ module.exports = angular
instanceWriter,
instance,
app,
moniker,
environment,
$q,
overrides,
) {
Expand All @@ -40,6 +42,8 @@ module.exports = angular
};

$scope.application = app;
$scope.moniker = moniker;
$scope.environment = environment;

const cloudProvider = 'ecs';
const defaultRequestParams = { cloudProvider: cloudProvider };
Expand Down
Expand Up @@ -128,7 +128,7 @@ <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>
</li>
</ul>
</collapsible-section>
<instance-links address="baseIpAddress" application="application" instance="instance"></instance-links>
<instance-links address="baseIpAddress" application="application" instance="instance" moniker="moniker" environment="environment"></instance-links>
</div>
<div class="content" ng-if="!state.loading && !instance">
<div class="content-section">
Expand Down
Expand Up @@ -33,6 +33,8 @@ module.exports = angular
instanceReader,
instance,
app,
moniker,
environment,
$q,
gceHttpLoadBalancerUtils,
gceXpnNamingService,
Expand All @@ -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
Expand Down
Expand Up @@ -14,6 +14,8 @@ describe('Controller: gceInstanceDetailsCtrl', function() {
controller = $controller('gceInstanceDetailsCtrl', {
$scope: scope,
instance: {},
moniker: {},
environment: 'test',
app: { isStandalone: true },
});
}),
Expand Down
Expand Up @@ -213,7 +213,7 @@ <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>
</li>
</ul>
</collapsible-section>
<instance-links address="baseIpAddress" application="application" instance="instance"></instance-links>
<instance-links address="baseIpAddress" application="application" instance="instance" moniker="moniker" environment="environment"></instance-links>
</div>
<div class="content" ng-if="!state.loading && !instance">
<div class="content-section">
Expand Down
Expand Up @@ -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])
Expand Down
Expand Up @@ -29,6 +29,8 @@ module.exports = angular
instanceReader,
instance,
app,
moniker,
environment,
kubernetesProxyUiService,
$q,
) {
Expand All @@ -41,6 +43,8 @@ module.exports = angular
};

this.application = app;
$scope.moniker = moniker;
$scope.environment = environment;

this.uiLink = function uiLink() {
return kubernetesProxyUiService.buildLink(
Expand Down
Expand Up @@ -141,7 +141,7 @@ <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>
<console-output-link instance="instance"></console-output-link>
</div>
</collapsible-section>
<instance-links address="ctrl.baseIpAddress" application="ctrl.application" instance="instance"></instance-links>
<instance-links address="ctrl.baseIpAddress" application="ctrl.application" instance="instance" moniker="moniker" environment="environment"></instance-links>
</div>
<div class="content" ng-if="!state.loading && !instance">
<div class="content-section">
Expand Down
Expand Up @@ -30,6 +30,8 @@ module.exports = angular
instanceReader,
instance,
app,
moniker,
environment,
$q,
overrides,
) {
Expand All @@ -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
Expand Down
Expand Up @@ -160,7 +160,7 @@ <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>
</li>
</ul>
</collapsible-section>
<instance-links address="ctrl.baseIpAddress" application="ctrl.application" instance="instance"></instance-links>
<instance-links address="ctrl.baseIpAddress" application="ctrl.application" instance="instance" moniker="moniker" environment="environment"></instance-links>
</div>
<div class="content" ng-if="!state.loading && !instance">
<div class="content-section">
Expand Down
Expand Up @@ -33,6 +33,8 @@ module.exports = angular
instanceReader,
instance,
app,
moniker,
environment,
titusSecurityGroupReader,
) {
// needed for standalone instances
Expand All @@ -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) {
Expand Down
Expand Up @@ -169,7 +169,7 @@ <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>
Logs in Titus UI</a></li>
</ul>
</collapsible-section>
<instance-links address="baseIpAddress" application="application" instance="instance"></instance-links>
<instance-links address="baseIpAddress" application="application" instance="instance" moniker="moniker" environment="environment"></instance-links>
</div>
<div class="content" ng-if="!state.loading && !instance">
<div class="content-section">
Expand Down

0 comments on commit 9e03d01

Please sign in to comment.