模板输出(Output)

除了模板中的每个任务可以有输出,模板也是可以有输出的,其可用来呈现模板执行成功后得到的重要数据。另外,如果该模板作为子模板被嵌套时,父模板中嵌套该子模板的任务可以通过定义其任务输出参数来对子模板的输出进行引用,具体是通过ValueSelector筛选子模板的输出参数名,以此获得子模板的输出值,而此值则会作为任务输出参数的值,这样父模板的其他任务就可以通过引用嵌套任务的输出参数来达到对子模板输出的引用。

模板输出(Outputs)用于获取模板执行后的关键数据,例如成功创建的资源ID。在嵌套场景中,它更充当着父模板与子模板之间数据传递的桥梁。父模板可以直接引用子模板的输出,实现任务间的数据联动。例如,父模板的一个任务可以获取由子模板创建的ECS实例ID,然后将这个ID传递给后续任务,用以重启该实例。

直接引用

您现在可以直接在模板输出中引用任务的输出,无需预先在任务中定义输出参数。

  • 单任务模板示例:

    FormatVersion: OOS-2019-06-01
    Description: 执行单个API
    Tasks:
      - Name: ExecuteApi
        Action: ACS::ExecuteApi
        Description: 执行API
        Properties:
          Service: ecs
          API: DescribeRegions
          Parameters:
            RegionId: cn-hangzhou
    Outputs:
      LocalName:
        Type: String
        Value: '{{ ExecuteApi.Regions.Region[]?.LocalName }}'
    FormatVersion: OOS-2019-06-01
    Description: 执行单个API
    Tasks:
      - Name: ExecuteApi
        Action: ACS::ExecuteApi
        Description: 执行API
        Properties:
          Service: ecs
          API: DescribeRegions
          Parameters:
            RegionId: cn-hangzhou
    Outputs:
      LocalName:
        Type: String
        Value: '{{ ExecuteApi.Regions.Region[]?.LocalName }}'

    在流程配置界面,系统会自动列出每个任务可供引用的输出项。

    image

    可以看到任务输出会展示出该任务能够提供的任务输出。

    任务输出默认为List

    image

    • 您可以在模板输出这里直接选择对应的输出。image

    • 如果有多个任务的话则可以分别选择。image

  • 多任务模板示例:

    FormatVersion: OOS-2019-06-01
    Description: 执行单个API
    Tasks:
      - Name: ExecuteApi
        Action: ACS::ExecuteApi
        Description: 执行API
        Properties:
          Service: ecs
          API: DescribeRegions
          Parameters:
            RegionId: cn-hangzhou
        Outputs: {}
      - Action: ACS::ECS::RunCommand
        Name: RunCommand
        Description: ''
        Properties:
          regionId: '{{ ACS::RegionId }}'
          commandType: RunPowerShellScript
          commandContent: |-
            ##### 可在脚本开始运行时调用,打印当时的时间戳及PID。
            function job_start
            {
                $now = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
                "[{0}][{1}] job_start" -f $now,$pid
            }
    
            ##### 如果返回值为0,则认为此执行成功,如果非0,则认为执行失败
            job_start
          contentEncoding: PlainText
          workingDir: C:\\Windows\\System32
          timeout: 600
          enableParameter: false
          parameters: {}
          username: ''
          windowsPasswordName: ''
          maxRetryInterval: 300
    Outputs:
      CommandOutput:
        Type: String
        Value: '{{ RunCommand.invocationOutput }}'
    
    {
      "FormatVersion": "OOS-2019-06-01",
      "Description": "执行单个API",
      "Tasks": [
        {
          "Name": "ExecuteApi",
          "Action": "ACS::ExecuteApi",
          "Description": "执行API",
          "Properties": {
            "Service": "ecs",
            "API": "DescribeRegions",
            "Parameters": {
              "RegionId": "cn-hangzhou"
            }
          },
          "Outputs": {}
        },
        {
          "Action": "ACS::ECS::RunCommand",
          "Name": "RunCommand",
          "Description": "",
          "Properties": {
            "regionId": "{{ ACS::RegionId }}",
            "commandType": "RunPowerShellScript",
            "commandContent": "##### 可在脚本开始运行时调用,打印当时的时间戳及PID。\nfunction job_start\n{\n    $now = Get-Date -Format \"yyyy-MM-dd HH:mm:ss\"\n    \"[{0}][{1}] job_start\" -f $now,$pid\n}\n\n##### 如果返回值为0,则认为此执行成功,如果非0,则认为执行失败\njob_start",
            "contentEncoding": "PlainText",
            "workingDir": "C:\\\\Windows\\\\System32",
            "timeout": 600,
            "enableParameter": false,
            "parameters": {},
            "username": "",
            "windowsPasswordName": "",
            "maxRetryInterval": 300
          }
        }
      ],
      "Outputs": {
        "CommandOutput": {
          "Type": "String",
          "Value": "{{ RunCommand.invocationOutput }}"
        }
      }
    }

定义引用

如果需要自定义的参数的话,参考如下内容

语法

模板输出的值可以是模板内所有可被引用的参数的值。任务的输出参数、伪参数以及模板Parameters部分定义的参数,它们的值均可被模板输出参数引用并作为模板的输出值。

单个输出:

Outputs:
  OutputParameterName: # 必填,参数名,有效字符为[a-zA-Z0-9_-],即英文半角字母数字下划线中划线,长度限制200个字符。
    Type: String # 可选,YAML, JSON格式支持的基本类型String, Number, Boolean, List(Array),Object,默认String。
    Value: "{{ TaskName.OutputParameterName }}" # 必填,参数值,通常为某个任务的输出。
{
  "Outputs": {
    "OutputParameterName": {
      "Type": "String",
      "Value": "{{ TaskName.OutputParameterName }}"
    }
  }
}

多个输出:

Outputs:
  OutputParameterName1: 
    Type: String # 可选,YAML, JSON格式支持的基本类型String, Number, Boolean, List(Array),Object,默认String。
    Value: "{{ TaskName1.OutputParameterName }}" # 必填,参数值,通常为某个任务的输出。
  OutputParameterName2: # 必填,参数名,有效字符为[a-zA-Z0-9_-],即英文半角字母数字下划线中划线,长度限制200个字符。
    Type: String # 可选,YAML, JSON格式支持的基本类型String, Number, Boolean, List(Array),Object,默认String。
    Value: "{{ TaskName2.OutputParameterName }}" # 必填,参数值,通常为某个任务的输出。
  OutputParameterName3: # 必填,参数名,有效字符为[a-zA-Z0-9_-],即英文半角字母数字下划线中划线,长度限制200个字符。
    Type: String # 可选,YAML, JSON格式支持的基本类型String, Number, Boolean, List(Array),Object,默认String。
    Value: "{{ TaskName3.OutputParameterName }}" # 必填,参数值,通常为某个任务的输出。
{
  "Outputs": {
    "OutputParameterName1": {
      "Type": "String",
      "Value": "{{ TaskName1.OutputParameterName }}"
    },
    "OutputParameterName2": {
      "Type": "String",
      "Value": "{{ TaskName2.OutputParameterName }}"
    },
    "OutputParameterName3": {
      "Type": "String",
      "Value": "{{ TaskName3.OutputParameterName }}"
    }
  }
}