override def execute()

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
              )
            }
          }
        }
      }
    }
  }