ALIYUN::ROS::WaitConditionHandle用于接收信号,与ALIYUN::ROS::WaitCondition配合使用以控制资源栈的执行流程。创建ECS实例时,在自定义数据执行过程中发送信号。

语法

{
  "Type": "ALIYUN::ROS::WaitConditionHandle",
  "Properties": {
    "Mode": String,
    "Count": Integer
  }
}

属性

属性名称 类型 必须 允许更新 描述 约束
Mode String 控制旧信号在资源更新前如何删除。
取值:
  • Increment:所有旧信号将在资源更新前被删除。
    说明 更新过程中ALIYUN::ROS::WaitCondition等待的信号数量 = ALIYUN::ROS::WaitCondition的Count属性的取值。
  • Full(默认值):如果Count属性生效,在资源更新前会对旧信号进行删除,否则不删除。
    说明 更新过程中ALIYUN::ROS::WaitCondition等待的信号数量 = ALIYUN::ROS::WaitCondition的Count属性取值 - 删除操作后剩余的旧信号的数量。
Count Integer Mode取值为Full时,ID为整数且大于Count的旧信号在资源更新前会被删除。

默认值为-1。

当满足以下2个条件时,该属性生效:
  • Mode取值为Full。
  • Count≥0。

如果该属性生效,则ID>Count的旧信号将在更新前删除。如果存在非整数ID的旧信号,则资源更新失败。

说明 在需要通过更新资源栈进行弹性扩容或缩容的场景下,推荐设置该值,并与ALIYUN::ROS::WaitCondition的Count属性取值相同。

返回值

Fn::GetAtt

  • CurlCli:该资源产生的curl命令。通过该命令发送自定义数据执行的结果或者状态到资源编排服务。
  • WindowsCurlCli:为Windows提供curl CLI命令前缀,可用于发送处理完成或失败的信号。由于Windows不支持curl命令,您需要先安装curl.exe并将其添加到PATH中。您可以通过添加-d "{\"status\": \" SUCCESS \"}表示成功、添加-d "{\"status\": \" FAILURE \"}表示失败。
  • PowerShellCurlCli:为PowerShell提供curl CLI命令前缀,可用于发送处理完成或失败的信号。由于此cmdlet是在PowerShell 3.0中引入的,所以要确保PowerShell的版本满足此约束,PowerShell的版本可以通过$PSVersionTable.PSVersion显示。您可以通过添加-Body '{"status": " SUCCESS "}表示成功、添加-Body '{"status": " FAILURE "}表示失败。
  • Headers:HTTP POST请求头,可用于在程序中发送处理完成或失败的信号。
  • URL:HTTP POST请求地址,可用于在程序中发送处理完成或失败的信号。
说明
  • CurlCli、WindowsCurlCli、PowerShellCurlCli的请求体中均可通过设置ID字段(字符串)明确指定信号ID。

    例如:-d "{\"status\": \" SUCCESS \", \"id\": \"test\"}

    相同ID的信号会被当作同一信号,后面收到的信号会覆盖前面收到的。

    如果没有指定ID,ROS会使用整数作为信号ID,这个整数=已有信号的数量+1。

  • CurlCli、WindowsCurlCli、PowerShellCurlCli的请求体中均可通过设置reason字段(字符串)设置信号成功或失败原因,这个原因会出现在ROS资源栈事件(信号通知类型)当中。
  • CurlCli、WindowsCurlCli、PowerShellCurlCli的请求体中均可通过设置data字段(字符串)设置信号关联的数据,这个数据可以通过ALIYUN::ROS::WaitCondition的输出属性Data、ErrorData、JoinedErrorData获取。
  • 通过status字段可以指定信号类型,包括SUCCESSFAILUREWARNING。信号类型与资源操作结果的关系如下:(优先级从高到低)
    • 如果收到FAILURE信号,则资源操作失败。
    • 如果在设定时间内,收到的信号数量未满足要求,则资源操作超时失败。
    • 如果收到的信号数量满足了要求,且所有信号均为WARNING,则资源操作失败。
    • 其他情况下,资源操作成功。

示例

  • YAML格式

    ROSTemplateFormatVersion: '2015-09-01'
    Description: ''
    Parameters: {}
    Outputs: {}
    Resources:
      InstallNginx:
        Type: 'ALIYUN::ECS::RunCommand'
        Properties:
          Type: RunShellScript
          CommandContent:
            'Fn::Replace':
              - ros-notify:
                  'Fn::GetAtt':
                    - InstallNginxWaitConditionHandle
                    - CurlCli
              - |
                #!/bin/sh
                yum install -y nginx
                systemctl restart nginx
                if [[ $? -eq 0 ]];
                then
                ros-notify -d "{\"status\" : \"SUCCESS\"}"
                else
                ros-notify -d "{\"status\" : \"FAILURE\"}"
                fi
          Name: InstallNginxScript
          InstanceIds:
            - i-wz9f94fl18o950ow****
          Timeout: 60
      InstallNginxWaitConditionHandle:
        Type: 'ALIYUN::ROS::WaitConditionHandle'
      InstallNginxWaitCondition:
        Type: 'ALIYUN::ROS::WaitCondition'
        Properties:
          Handle:
            Ref: InstallNginxWaitConditionHandle
          Timeout: 60
    Metadata: {}
  • JSON格式

    {
      "ROSTemplateFormatVersion": "2015-09-01",
      "Description": "",
      "Parameters": {},
      "Outputs": {},
      "Resources": {
        "InstallNginx": {
          "Type": "ALIYUN::ECS::RunCommand",
          "Properties": {
            "Type": "RunShellScript",
            "CommandContent": {
              "Fn::Replace": [
                {
                  "ros-notify": {
                    "Fn::GetAtt": [
                      "InstallNginxWaitConditionHandle",
                      "CurlCli"
                    ]
                  }
                },
                "#!/bin/sh\nyum install -y nginx\nsystemctl restart nginx\nif [[ $? -eq 0 ]];\nthen \nros-notify -d \"{\\\"status\\\" : \\\"SUCCESS\\\"}\" \nelse \nros-notify -d \"{\\\"status\\\" : \\\"FAILURE\\\"}\" \nfi \n"
              ]
            },
            "Name": "InstallNginxScript",
            "InstanceIds": [
              "i-wz9f94fl18o950ow****"
            ],
            "Timeout": 60
          }
        },
        "InstallNginxWaitConditionHandle": {
          "Type": "ALIYUN::ROS::WaitConditionHandle"
        },
        "InstallNginxWaitCondition": {
          "Type": "ALIYUN::ROS::WaitCondition",
          "Properties": {
            "Handle": {
              "Ref": "InstallNginxWaitConditionHandle"
            },
            "Timeout": 60
          }
        }
      },
      "Metadata": {}
    }

更多示例,请参见JSON示例YAML示例