private async updateStack()

in src/tasks/CloudFormationCreateOrUpdateStack/TaskOperations.ts [162:242]


    private async updateStack(): Promise<void> {
        console.log(tl.loc('UpdateStack', this.taskParameters.templateFile))

        const request: CloudFormation.UpdateStackInput = {
            StackName: this.taskParameters.stackName,
            RoleARN: this.taskParameters.roleARN
        }

        switch (this.taskParameters.templateSource) {
            case fileSource:
                {
                    if (this.taskParameters.s3BucketName) {
                        request.TemplateURL = await this.uploadTemplateFile(
                            this.taskParameters.templateFile,
                            this.taskParameters.s3BucketName
                        )
                    } else {
                        request.TemplateBody = await this.loadTemplateFile(this.taskParameters.templateFile)
                    }
                }
                break

            case urlSource:
                {
                    request.TemplateURL = this.taskParameters.templateUrl
                }
                break

            case s3Source:
                {
                    // sync call
                    request.TemplateURL = await SdkUtils.getPresignedUrl(
                        this.s3Client,
                        'getObject',
                        this.taskParameters.s3BucketName,
                        this.taskParameters.s3ObjectKey
                    )
                }
                break

            case usePreviousTemplate: {
                request.UsePreviousTemplate = true
                break
            }
        }

        request.Parameters = this.loadTemplateParameters()

        request.NotificationARNs = this.getNotificationArns(this.taskParameters.notificationARNs)
        request.ResourceTypes = this.getResourceTypes(this.taskParameters.resourceTypes)
        request.Capabilities = this.getCapabilities(
            this.taskParameters.capabilityIAM,
            this.taskParameters.capabilityNamedIAM,
            this.taskParameters.capabilityAutoExpand
        )
        request.Tags = SdkUtils.getTags<CloudFormation.Tag[]>(this.taskParameters.tags)

        if (this.taskParameters.monitorRollbackTriggers) {
            request.RollbackConfiguration = {
                MonitoringTimeInMinutes: this.taskParameters.monitoringTimeInMinutes,
                RollbackTriggers: this.constructRollbackTriggerCollection(this.taskParameters.rollbackTriggerARNs)
            }
        }

        try {
            await this.cloudFormationClient.updateStack(request).promise()
            await waitForStackUpdate(this.cloudFormationClient, request.StackName, this.taskParameters.timeoutInMins)
        } catch (err) {
            const e = <AWSError>err
            if (isNoWorkToDoValidationError(e.code, e.message)) {
                if (this.taskParameters.warnWhenNoWorkNeeded) {
                    tl.warning(tl.loc('NoWorkToDo'))
                }

                return
            }

            console.error(tl.loc('StackUpdateRequestFailed', e.message), err)
            throw err
        }
    }