UNPKG

@spotinst/spinnaker-deck

Version:

Spinnaker-Deck service, forked with support to Spotinst

83 lines (72 loc) 3.12 kB
import { isEmpty } from 'lodash'; import { Observable } from 'rxjs'; import { AccountService, IServerGroupDetailsProps, ISubnet, ServerGroupReader, SubnetReader } from '@spinnaker/core'; import { IAmazonLoadBalancer, IAmazonServerGroup, IAmazonServerGroupView } from 'amazon/domain'; import { AwsReactInjector } from 'amazon/reactShims'; import { AutoScalingProcessService } from './scalingProcesses/AutoScalingProcessService'; function extractServerGroupSummary(props: IServerGroupDetailsProps): PromiseLike<IAmazonServerGroup> { const { app, serverGroup } = props; return app.ready().then(() => { let summary: IAmazonServerGroup = app.serverGroups.data.find((toCheck: IAmazonServerGroup) => { return ( toCheck.name === serverGroup.name && toCheck.account === serverGroup.accountId && toCheck.region === serverGroup.region ); }); if (!summary) { app.loadBalancers.data.some((loadBalancer: IAmazonLoadBalancer) => { if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) { return loadBalancer.serverGroups.some((possibleServerGroup) => { if (possibleServerGroup.name === serverGroup.name) { summary = possibleServerGroup; return true; } return false; }); } return false; }); } return summary; }); } export function amazonServerGroupDetailsGetter( props: IServerGroupDetailsProps, autoClose: () => void, ): Observable<IAmazonServerGroup> { const { app, serverGroup: serverGroupInfo } = props; return new Observable<IAmazonServerGroupView>((observer) => { extractServerGroupSummary(props).then((summary) => { ServerGroupReader.getServerGroup( app.name, serverGroupInfo.accountId, serverGroupInfo.region, serverGroupInfo.name, ).then((details: IAmazonServerGroup) => { // it's possible the summary was not found because the clusters are still loading Object.assign(details, summary, { account: serverGroupInfo.accountId }); const serverGroup = AwsReactInjector.awsServerGroupTransformer.normalizeServerGroupDetails(details); AccountService.getAccountDetails(serverGroup.account).then((accountDetails) => { serverGroup.accountDetails = accountDetails; observer.next(serverGroup); }); if (!isEmpty(serverGroup)) { const vpc = serverGroup.asg ? serverGroup.asg.vpczoneIdentifier : ''; if (vpc !== '') { const subnetId = vpc.split(',')[0]; SubnetReader.listSubnets().then((subnets: ISubnet[]) => { const subnet = subnets.find((s) => s.id === subnetId); serverGroup.subnetType = subnet.purpose; observer.next(serverGroup); }); } serverGroup.disabledDate = AutoScalingProcessService.getDisabledDate(serverGroup); observer.next(serverGroup); } else { autoClose(); } }, autoClose); }, autoClose); }); }