public async execute()

in src/tasks/SystemsManagerRunCommand/TaskOperations.ts [13:104]


    public async execute(): Promise<void> {
        const request: SSM.SendCommandRequest = {
            DocumentName: this.taskParameters.documentName
        }
        if (this.taskParameters.outputS3KeyPrefix) {
            request.OutputS3KeyPrefix = this.taskParameters.outputS3KeyPrefix
        }
        if (this.taskParameters.outputS3BucketName) {
            request.OutputS3BucketName = this.taskParameters.outputS3BucketName
        }
        if (this.taskParameters.timeout) {
            request.TimeoutSeconds = parseInt(this.taskParameters.timeout, 10)
        }
        if (this.taskParameters.maxErrors) {
            request.MaxErrors = this.taskParameters.maxErrors
        }
        if (this.taskParameters.maxConcurrency) {
            request.MaxConcurrency = this.taskParameters.maxConcurrency
        }
        if (this.taskParameters.serviceRoleARN) {
            request.ServiceRoleArn = this.taskParameters.serviceRoleARN
        }
        if (this.taskParameters.comment) {
            request.Comment = this.taskParameters.comment
        }
        if (this.taskParameters.documentParameters) {
            request.Parameters = JSON.parse(this.taskParameters.documentParameters)
        }
        if (this.taskParameters.cloudWatchOutputEnabled) {
            request.CloudWatchOutputConfig = {
                CloudWatchOutputEnabled: true
            }

            if (this.taskParameters.cloudWatchLogGroupName) {
                request.CloudWatchOutputConfig.CloudWatchLogGroupName = this.taskParameters.cloudWatchLogGroupName
            }
        }

        switch (this.taskParameters.instanceSelector) {
            case fromInstanceIds:
                request.InstanceIds = this.taskParameters.instanceIds
                break

            case fromTags:
                request.Targets = []
                // TODO repalce with getTags when https://github.com/aws/aws-toolkit-azure-devops/pull/184 merges
                this.taskParameters.instanceTags.forEach(it => {
                    const kv = it.split('=')
                    const t: SSM.Target = {}
                    t.Key = 'tag:' + kv[0].trim()
                    t.Values = kv[1].split(',')
                    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
                    request.Targets!.push(t)
                })
                break

            case fromBuildVariable:
                const instanceIds = tl.getVariable(this.taskParameters.instanceBuildVariable)
                if (instanceIds) {
                    request.InstanceIds = instanceIds.trim().split(',')
                } else {
                    throw new Error(tl.loc('InstanceIdsFromVariableFailed', this.taskParameters.instanceBuildVariable))
                }
                break
        }

        if (this.taskParameters.notificationArn) {
            request.NotificationConfig = {
                NotificationArn: this.taskParameters.notificationArn,
                NotificationType: this.taskParameters.notificationType
            }

            if (this.taskParameters.notificationEvents) {
                request.NotificationConfig.NotificationEvents = [this.taskParameters.notificationEvents]
            }
        }

        const response = await this.ssmClient.sendCommand(request).promise()
        let commandId = ''
        if (response.Command) {
            commandId = `${response.Command.CommandId}`
        } else {
            commandId = `${undefined}`
        }

        if (this.taskParameters.commandIdOutputVariable) {
            console.log(tl.loc('SettingOutputVariable', this.taskParameters.commandIdOutputVariable))
            tl.setVariable(this.taskParameters.commandIdOutputVariable, commandId)
        }

        console.log(tl.loc('TaskCompleted', this.taskParameters.documentName, commandId))
    }