in magenta-lib/src/main/scala/magenta/tasks/ChangeSetTasks.scala [81:158]
override def execute(
resources: DeploymentResources,
stopFlag: => Boolean
): Unit = {
if (!stopFlag) {
CloudFormation.withCfnClient(keyRing, region, resources) { cfnClient =>
STS.withSTSclient(keyRing, region, resources) { stsClient =>
ASG.withAsgClient(keyRing, region, resources) { asgClient =>
{
val accountNumber = STS.getAccountNumber(stsClient)
val (stackName, _, existingParameters, currentTags) =
stackLookup.lookup(resources.reporter, cfnClient)
resources.reporter.info(
"Creating Cloudformation change set to update AMI parameters"
)
resources.reporter.info(s"CloudFormation stack name: $stackName")
resources.reporter.info(
s"Change set name: ${stackLookup.changeSetName}"
)
val maybeExecutionRole = CloudFormation.getExecutionRole(keyRing)
maybeExecutionRole.foreach(role =>
resources.reporter.verbose(s"Using execution role: $role")
)
val cfnStackNameTag = TagMatch(
"aws:cloudformation:stack-name",
stackName
)
val minInServiceParameters =
unresolvedParameters.minInServiceParameterMap.map {
case (cfnParam, asgTagRequirements) =>
cfnParam -> ASG.getMinInstancesInService(
asgTagRequirements :+ cfnStackNameTag,
asgClient,
resources.reporter
)
}
val parameters = CloudFormationParameters
.resolve(
resources.reporter,
unresolvedParameters,
accountNumber,
existingParameters.map { p =>
TemplateParameter(p.key, default = true)
},
existingParameters,
minInServiceParameters
)
.fold(
resources.reporter.fail(_),
identity
)
val awsParameters = convertInputParametersToAwsAndLog(
resources.reporter,
parameters,
existingParameters
)
CloudFormation.createParameterUpdateChangeSet(
client = cfnClient,
changeSetName = stackLookup.changeSetName,
stackName = stackName,
currentStackTags = currentTags,
parameters = awsParameters,
maybeRole = maybeExecutionRole
)
}
}
}
}
}
}