FormatVersion: OOS-2019-06-01
Description: Runs commands on multiple ECS instances in a batch.
Parameters:
targets:
Label:
en: TargetInstance
zh-cn: Target Instance
Type: Json
AssociationProperty: Targets
AssociationPropertyMetadata:
ResourceType: ALIYUN::ECS::Instance
RegionId: regionId
rateControl:
Label:
en: RateControl
zh-cn: Concurrent rate for task execution
Type: Json
AssociationProperty: RateControl
Default:
Mode: Concurrency
MaxErrors: 0
Concurrency: 10
Tasks:
- Name: getInstance
Description: Obtains ECS instances.
Action: ACS::SelectTargets
Properties:
ResourceType: ALIYUN::ECS::Instance
Filters:
- '{{ targets }}'
Outputs:
instanceIds:
Type: List
ValueSelector: Instances.Instance[].InstanceId
- Name: runCommand
Action: ACS::ECS::RunCommand
Description: Runs a Cloud Assistant command.
Properties:
instanceId: '{{ ACS::TaskLoopItem }}'
commandType: RunShellScript
commandContent: |-
#!/bin/bash
##### This can be called when the script starts to run. It prints the current timestamp and PID.
function job_start()
{
now=`date +'%Y-%m-%d %H:%M:%S'`
echo "[$now][$$] job_start"
}
##### If the return value is 0, the execution is successful. Otherwise, the execution failed.
job_start
regionId: '{{ ACS::RegionId }}'
workingDir: /root
enableParameter: false
timeout: 600
username: ''
parameters: {}
windowsPasswordName: ''
Outputs:
invocationOutput:
Type: String
ValueSelector: invocationOutput
Loop:
Items: '{{ getInstance.instanceIds }}'
RateControl: '{{ rateControl }}'
Outputs:
invocationOutputs:
AggregateType: Fn::ListJoin
AggregateField: invocationOutput
Outputs:
invocationOutputs:
Type: List
Value: '{{ runCommand.invocationOutputs }}'
{
"FormatVersion": "OOS-2019-06-01",
"Description": "Runs commands on multiple ECS instances in a batch.",
"Parameters": {
"targets": {
"Label": {
"en": "TargetInstance",
"zh-cn": "Target Instance"
},
"Type": "Json",
"AssociationProperty": "Targets",
"AssociationPropertyMetadata": {
"ResourceType": "ALIYUN::ECS::Instance",
"RegionId": "regionId"
}
},
"rateControl": {
"Label": {
"en": "RateControl",
"zh-cn": "Concurrent rate for task execution"
},
"Type": "Json",
"AssociationProperty": "RateControl",
"Default": {
"Mode": "Concurrency",
"MaxErrors": 0,
"Concurrency": 10
}
}
},
"Tasks": [
{
"Name": "getInstance",
"Description": "Obtains ECS instances.",
"Action": "ACS::SelectTargets",
"Properties": {
"ResourceType": "ALIYUN::ECS::Instance",
"Filters": [
"{{ targets }}"
]
},
"Outputs": {
"instanceIds": {
"Type": "List",
"ValueSelector": "Instances.Instance[].InstanceId"
}
}
},
{
"Name": "runCommand",
"Action": "ACS::ECS::RunCommand",
"Description": "Runs a Cloud Assistant command.",
"Properties": {
"instanceId": "{{ ACS::TaskLoopItem }}",
"commandType": "RunShellScript",
"commandContent": "#!/bin/bash\n\n##### This can be called when the script starts to run. It prints the current timestamp and PID.\nfunction job_start()\n{\n now=`date +'%Y-%m-%d %H:%M:%S'`\n echo \"[$now][$$] job_start\"\n}\n\n##### If the return value is 0, the execution is successful. Otherwise, the execution failed.\njob_start",
"regionId": "{{ ACS::RegionId }}",
"workingDir": "/root",
"enableParameter": false,
"timeout": 600,
"username": "",
"parameters": {},
"windowsPasswordName": ""
},
"Outputs": {
"invocationOutput": {
"Type": "String",
"ValueSelector": "invocationOutput"
}
},
"Loop": {
"Items": "{{ getInstance.instanceIds }}",
"RateControl": "{{ rateControl }}",
"Outputs": {
"invocationOutputs": {
"AggregateType": "Fn::ListJoin",
"AggregateField": "invocationOutput"
}
}
}
}
],
"Outputs": {
"invocationOutputs": {
"Type": "List",
"Value": "{{ runCommand.invocationOutputs }}"
}
}
}