用途
使用该动作可以等待资源进入预期的状态。通过调用云产品的OpenAPI去查询指定资源的状态,直到资源的状态和预期的一致。如通过调用ECS的OpenAPIRunInstances
创建资源后,可以通过调用ACS::WaitFor
等待实例被创建完成,即其状态为运行中(Running)。
语法
Tasks:
- Name: waitForTaskExample
Action: ACS::WaitFor
Properties:
# 以下属性和ACS::ExecuteAPI一致,请参考ACS::ExecuteAPI语法说明。
Service: ECS
API: DescribeInstances
Parameters:
InstanceId: i-12345678abcedfg
# 以下属性为ACS::WaitFor的特殊属性
PropertySelector: "jq selector" # 必填,需要等待的具体的API返回值,参考ACS::ExecuteAPI中的ValueSelector说明
StopRetryValues: # 可选,一旦任务PropertySelector结果为status1状态时终止任务等待及API重试。比如status1为Stopped时,一旦API返回结果筛选后为Stopped,则该任务执行停止。
- status1
DesiredValues: # DesiredValue,NotDesiredValues 必填其一,指上面截取的值要匹配到以下值之一,匹配则表示成功,否则会超时然后失败。
- value1
- value2
NotDesiredValues: # DesiredValue,NotDesiredValues 必填其一,指上面截取的值要不匹配到以下的所有值,全都不匹配则表示成功,否则会超时然后失败。
- value3
- value4
Retries: #可选,表示最大重试次数,默认值10,填写正整数,如5,取值范围[0,300]。
DelayType: #Exponential(默认),Constant,Linear。Exponential类型的重试间隔为:2 ^ times(重试次数);Constant类型的重试间隔固定为Delay;Linear类型的重试间隔为:Delay + BackOff * times(重试次数)。
Delay: #DelayType为Constant或Linear时需要添加此属性,表示重试间隔时间,填写正整数,如10,表示重试间隔为10s,默认值2,取值范围[1,3600]。
BackOff: #DelayType为Linear时需要添加此属性,表示重试间隔补偿时间,填写正整数,默认值为2,取值范围[1,3600]。
MaxRetryInterval: #最大重试间隔, 单位秒,默认值为1800,填写正整数,取值范围[1, 1800]。
Outputs: #WaitFor动作所在的任务支持输出,当任务满足NotDesiredValues/DesiredValues的条件时,任务执行成功后会返回输出参数的。
ValueSelector: #jq的选择器语法,以OpenAPI的返回作为JSON输入,jq的语法请参考 https://stedolan.github.io/jq
Type: String/Boolean/List(Array)/Number/Object
{
"Tasks": [
{
"Name": "waitForTaskExample",
"Action": "ACS::WaitFor",
"Properties": {
"Service": "ECS",
"API": "DescribeInstances",
"Parameters": {
"InstanceId": "i-12345678abcedfg"
},
"PropertySelector": "jq selector",
"StopRetryValues": [
"status1"
],
"DesiredValues": [
"value1",
"value2"
],
"NotDesiredValues": [
"value3",
"value4"
]
},
"Retries": "#可选,表示最大重试次数,默认值10,填写正整数,如5,取值范围[0,300]。",
"DelayType": "#Exponential(默认),Constant,Linear。Exponential类型的重试间隔为:2 ^ times(重试次数);Constant类型的重试间隔固定为Delay;Linear类型的重试间隔为:Delay + BackOff * times(重试次数)。",
"Delay": "#DelayType为Constant或Linear时需要添加此属性,表示重试间隔时间,填写正整数,如10,表示重试间隔为10s,默认值2,取值范围[1,3600]。",
"BackOff": "#DelayType为Linear时需要添加此属性,表示重试间隔补偿时间,填写正整数,默认值为2,取值范围[1,3600]。",
"MaxRetryInterval": "#最大重试间隔, 单位秒,默认值为1800,填写正整数,取值范围[1, 1800]。"
"Outputs": {
"ValueSelector": "# jq的选择器语法,以OpenAPI的返回作为JSON输入,jq的语法请参考 https://stedolan.github.io/jq",
"Type": "String/Boolean/List(Array)/Number/Object"
}
}
]
}
示例
如下模板:启动一台指定实例,通过调用WaitFor等待实例的状态变为Running。
---
FormatVersion: OOS-2019-06-01
Parameters:
InstanceId:
Description: the instance id that you will start.
Type: String
Tasks:
- Name: startInstance
Action: ACS::ExecuteAPI
Description: start instance with specified parameters
Properties:
Service: ECS
API: StartInstance
Parameters:
InstanceId: '{{ InstanceId }}'
- Name: untilInstanceReady
Action: ACS::WaitFor
Description: describe instances with specified parameters
MaxRetryInterval: 900
Properties:
Service: ECS
API: DescribeInstances
Parameters:
InstanceIds:
- '{{ InstanceId }}'
PropertySelector: Instances.Instance[].Status
DesiredValues:
- Running
{
"FormatVersion": "OOS-2019-06-01",
"Parameters": {
"InstanceId": {
"Description": "the instance id that you will start.",
"Type": "String"
}
},
"Tasks": [
{
"Name": "startInstance",
"Action": "ACS::ExecuteAPI",
"Description": "start instance with specified parameters",
"Properties": {
"Service": "ECS",
"API": "StartInstance",
"Parameters": {
"InstanceId": "{{ InstanceId }}"
}
}
},
{
"Name": "untilInstanceReady",
"Action": "ACS::WaitFor",
"Description": "describe instances with specified parameters",
"MaxRetryInterval": 900,
"Properties": {
"Service": "ECS",
"API": "DescribeInstances",
"Parameters": {
"InstanceIds": [ "{{ InstanceId }}"]
},
"PropertySelector": "Instances.Instance[].Status",
"DesiredValues": [ "Running" ]
}
}
]
}
文档内容是否对您有帮助?