in app/scripts/modules/amazon/serverGroup/configure/serverGroupCommandBuilder.service.js [159:277]
function buildServerGroupCommandFromExisting(application, serverGroup, mode = 'clone') {
var preferredZonesLoader = accountService.getPreferredZonesByAccount('aws');
var subnetsLoader = subnetReader.listSubnets();
var serverGroupName = namingService.parseServerGroupName(serverGroup.asg.autoScalingGroupName);
var instanceType = serverGroup.launchConfig ? serverGroup.launchConfig.instanceType : null;
var instanceTypeCategoryLoader = instanceTypeService.getCategoryForInstanceType('aws', instanceType);
var asyncLoader = $q.all({
preferredZones: preferredZonesLoader,
subnets: subnetsLoader,
instanceProfile: instanceTypeCategoryLoader,
});
return asyncLoader.then(function(asyncData) {
var zones = serverGroup.asg.availabilityZones.sort();
var usePreferredZones = false;
var preferredZonesForAccount = asyncData.preferredZones[serverGroup.account];
if (preferredZonesForAccount) {
var preferredZones = preferredZonesForAccount[serverGroup.region].sort();
usePreferredZones = zones.join(',') === preferredZones.join(',');
}
// These processes should never be copied over, as the affect launching instances and enabling traffic
let enabledProcesses = ['Launch', 'Terminate', 'AddToLoadBalancer'];
var applicationAwsSettings = _.get(application, 'attributes.providerSettings.aws', {});
var command = {
application: application.name,
strategy: '',
stack: serverGroupName.stack,
freeFormDetails: serverGroupName.freeFormDetails,
credentials: serverGroup.account,
cooldown: serverGroup.asg.defaultCooldown,
enabledMetrics: serverGroup.asg.enabledMetrics,
healthCheckGracePeriod: serverGroup.asg.healthCheckGracePeriod,
healthCheckType: serverGroup.asg.healthCheckType,
terminationPolicies: serverGroup.asg.terminationPolicies,
loadBalancers: serverGroup.asg.loadBalancerNames,
region: serverGroup.region,
useSourceCapacity: false,
capacity: {
'min': serverGroup.asg.minSize,
'max': serverGroup.asg.maxSize,
'desired': serverGroup.asg.desiredCapacity
},
targetHealthyDeployPercentage: 100,
availabilityZones: zones,
selectedProvider: 'aws',
source: {
account: serverGroup.account,
region: serverGroup.region,
asgName: serverGroup.asg.autoScalingGroupName,
},
suspendedProcesses: (serverGroup.asg.suspendedProcesses || [])
.map((process) => process.processName)
.filter((name) => !enabledProcesses.includes(name)),
tags: serverGroup.tags || {},
useAmiBlockDeviceMappings: applicationAwsSettings.useAmiBlockDeviceMappings || false,
viewState: {
instanceProfile: asyncData.instanceProfile,
useAllImageSelection: false,
useSimpleCapacity: serverGroup.asg.minSize === serverGroup.asg.maxSize,
usePreferredZones: usePreferredZones,
mode: mode,
isNew: false,
dirty: {},
},
};
if (application.attributes && application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {
command.interestingHealthProviderNames = ['Amazon'];
}
if (mode === 'clone' || mode === 'editPipeline') {
command.useSourceCapacity = true;
command.viewState.useSimpleCapacity = false;
}
if (mode === 'editPipeline') {
command.strategy = 'redblack';
command.suspendedProcesses = [];
}
var vpcZoneIdentifier = serverGroup.asg.vpczoneIdentifier;
if (vpcZoneIdentifier !== '') {
var subnetId = vpcZoneIdentifier.split(',')[0];
var subnet = _.chain(asyncData.subnets).find({'id': subnetId}).value();
command.subnetType = subnet.purpose;
command.vpcId = subnet.vpcId;
} else {
command.subnetType = '';
command.vpcId = null;
}
if (serverGroup.launchConfig) {
angular.extend(command, {
instanceType: serverGroup.launchConfig.instanceType,
iamRole: serverGroup.launchConfig.iamInstanceProfile,
keyPair: serverGroup.launchConfig.keyName,
associatePublicIpAddress: serverGroup.launchConfig.associatePublicIpAddress,
ramdiskId: serverGroup.launchConfig.ramdiskId,
instanceMonitoring: serverGroup.launchConfig.instanceMonitoring.enabled,
ebsOptimized: serverGroup.launchConfig.ebsOptimized,
});
if (serverGroup.launchConfig.userData) {
command.base64UserData = serverGroup.launchConfig.userData;
}
command.viewState.imageId = serverGroup.launchConfig.imageId;
}
if (serverGroup.launchConfig && serverGroup.launchConfig.securityGroups.length) {
command.securityGroups = serverGroup.launchConfig.securityGroups;
}
return command;
});
}