ALIYUN::ROS::WaitConditionHandle用於接收訊號,與ALIYUN::ROS::WaitCondition配合使用以控制資源棧的執行流程。建立ECS執行個體時,在自訂資料執行過程中發送訊號。
文法
{
"Type": "ALIYUN::ROS::WaitConditionHandle",
"Properties": {
"Mode": String,
"Count": Integer
}
}
屬性
屬性名稱 | 類型 | 必須 | 允許更新 | 描述 | 約束 |
Mode | String | 否 | 是 | 控制舊訊號在資源更新前如何刪除。 | |
Count | Integer | 否 | 是 | Mode取值為Full時,ID為整數且大於Count的舊訊號在資源更新前會被刪除。 | 預設值為-1。 當滿足以下2個條件時,該屬性生效: 如果該屬性生效,則ID>Count的舊訊號將在更新前刪除。如果存在非整數ID的舊訊號,則資源更新失敗。
說明 在需要通過更新資源棧進行彈性擴容或縮容的情境下,推薦設定該值,並與ALIYUN::ROS::WaitCondition的Count屬性取值相同。 |
傳回值
Fn::GetAtt
CurlCli:該資源產生的curl命令。通過該命令發送自訂資料執行的結果或者狀態到Resource Orchestration Service服務。
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資源棧事件(訊號通知類型)當中。
例如:-d "{\"status\": \" SUCCESS \", \"reason\": \"nginx is installed successfully.\"}"
。
指定了reason欄位
之後,這個請求的內容就會出現在資源棧事件(訊號通知類型)當中。
CurlCli、WindowsCurlCli、PowerShellCurlCli的請求體中均可通過設定了data欄位(字串)
設定訊號關聯的資料,這個資料可以通過ALIYUN::ROS::WaitCondition的輸出屬性Data、ErrorData、JoinedErrorData擷取。
例如:-d "{\"id\" : \"ssh_pub_key\", \"data\" : \"$pub_key\"}"
。
通過status
欄位可以指定訊號類型,包括SUCCESS
、FAILURE
、WARNING
。訊號類型與資源操作結果的關係如下:(優先順序從高到低)
樣本
YAML
格式
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
InstanceId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::InstanceId
Resources:
InstallNginx:
Type: 'ALIYUN::ECS::RunCommand'
Properties:
Type: RunShellScript
CommandContent:
Fn::Sub: |
#!/bin/sh
yum install -y nginx
systemctl restart nginx
if [[ $? -eq 0 ]];
then
${InstallNginxWaitConditionHandle.CurlCli} --data-binary "{\"status\": \"SUCCESS\", \"data\": \"Nginx is installed successfully.\"}"
else
${InstallNginxWaitConditionHandle.CurlCli} --data-binary "{\"status\": \"FAILURE\", \"reason\": \"Failed to install and start nginx.\"}"
fi
Name: InstallNginxScript
InstanceIds:
- Ref:
InstanceId
Timeout: 60
InstallNginxWaitConditionHandle:
Type: 'ALIYUN::ROS::WaitConditionHandle'
InstallNginxWaitCondition:
Type: 'ALIYUN::ROS::WaitCondition'
Properties:
Handle:
Ref: InstallNginxWaitConditionHandle
Timeout: 60
Outputs:
InstallNginxData:
Description: Received the data sent by the first ecs, JSON serialized dict containing
data associated with wait condition signals sent to the handle.
Value:
Fn::GetAtt:
- InstallNginxWaitCondition
- Data
JSON
格式
{
"ROSTemplateFormatVersion": "2015-09-01",
"Parameters": {
"InstanceId": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceId"
}
},
"Resources": {
"InstallNginx": {
"Type": "ALIYUN::ECS::RunCommand",
"Properties": {
"Type": "RunShellScript",
"CommandContent": {
"Fn::Sub": "#!/bin/sh\nyum install -y nginx\nsystemctl restart nginx\nif [[ $? -eq 0 ]];\nthen\n${InstallNginxWaitConditionHandle.CurlCli} --data-binary \"{\\\"status\\\": \\\"SUCCESS\\\", \\\"data\\\": \\\"Nginx is installed successfully.\\\"}\"\nelse\n${InstallNginxWaitConditionHandle.CurlCli} --data-binary \"{\\\"status\\\": \\\"FAILURE\\\", \\\"reason\\\": \\\"Failed to install and start nginx.\\\"}\"\nfi\n"
},
"Name": "InstallNginxScript",
"InstanceIds": [
{
"Ref": "InstanceId"
}
],
"Timeout": 60
}
},
"InstallNginxWaitConditionHandle": {
"Type": "ALIYUN::ROS::WaitConditionHandle"
},
"InstallNginxWaitCondition": {
"Type": "ALIYUN::ROS::WaitCondition",
"Properties": {
"Handle": {
"Ref": "InstallNginxWaitConditionHandle"
},
"Timeout": 60
}
}
},
"Outputs": {
"InstallNginxData": {
"Description": "Received the data sent by the first ecs, JSON serialized dict containing data associated with wait condition signals sent to the handle.",
"Value": {
"Fn::GetAtt": [
"InstallNginxWaitCondition",
"Data"
]
}
}
}
}
更多樣本,請參見JSON樣本和YAML樣本。