-
Notifications
You must be signed in to change notification settings - Fork 17
/
ACS::ESS::ReplaceSystemDisk.yml
444 lines (444 loc) · 13.4 KB
/
ACS::ESS::ReplaceSystemDisk.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
FormatVersion: OOS-2019-06-01
Description:
name-en: ACS::ESS::ReplaceSystemDisk
name-zh-cn: 伸缩组内ECS实例更换系统盘
en: Replaces the system disk of an ECS instance in scaling group
zh-cn: 伸缩组内ECS实例更换系统盘
Parameters:
regionId:
Description:
en: The ID of region
zh-cn: 地域ID
Type: String
Default: '{{ ACS::RegionId }}'
rollBack:
Description:
en: Whether to roll back
zh-cn: 是否回滚
Type: String
AllowedValues:
- 'true'
- 'false'
Default: 'false'
imageId:
Description:
en: The ID of image
zh-cn: 镜像ID
Type: String
instanceId:
Description:
en: The ID of ECS instance
zh-cn: ECS实例ID
Type: String
MinLength: 1
MaxLength: 30
lifecycleState:
Description:
en: The lifecycle status of ECS instance
zh-cn: ECS实例生命周期状态
Type: String
AllowedValues:
- InService
- Protected
Default: InService
scalingGroupId:
Description:
en: The ID of scaling group
zh-cn: 伸缩组ID
Type: String
Tasks:
- Name: viewInstanceLifecycleState
Action: ACS::ExecuteApi
Description:
en: Queries ECS instance lifecycle status
zh-cn: 获取实例生命周期挂钩的状态
Properties:
Service: ESS
API: DescribeScalingInstances
Parameters:
RegionId: '{{ regionId }}'
InstanceId1: '{{ instanceId }}'
Outputs:
lifecycleState:
Type: String
ValueSelector: 'ScalingInstances.ScalingInstance[].LifecycleState'
- Name: whetherLifecycleStateIsStandby
Action: ACS::Choice
Description:
en: Choose next task by lifecycle status
zh-cn: 根据生命周期挂钩的状态选择下一个任务
Properties:
DefaultTask: enterStandby
Choices:
- When:
'Fn::Equals':
- Standby
- '{{ viewInstanceLifecycleState.lifecycleState }}'
NextTask: viewInstanceStatus
- When:
Fn::Equals:
- 'Protected'
- '{{ viewInstanceLifecycleState.lifecycleState }}'
NextTask: setInstancesProtectionToFalse
- Name: setInstancesProtectionToFalse
Action: ACS::ExecuteAPI
Description:
en: Sets the protection status of ECS instances to false
zh-cn: 设置ECS实例的保护状态为false
Properties:
Service: ESS
API: SetInstancesProtection
Parameters:
RegionId: '{{ regionId }}'
ScalingGroupId: '{{ scalingGroupId }}'
InstanceIds:
- '{{ instanceId }}'
ProtectedFromScaleIn: 'false'
- Name: enterStandby
Action: ACS::WaitFor
Description:
en: Waits for ECS instance enter to standby status
zh-cn: 等待实例进入备用中状态
Retries: 30
Delay: 10
DelayType: Constant
Properties:
Service: ESS
API: EnterStandby
Parameters:
RegionId: '{{ regionId }}'
ScalingGroupId: '{{ scalingGroupId }}'
InstanceId:
- '{{ instanceId }}'
DesiredValues:
- CodeNotExists
StopRetryValues:
- OtherCodes
PropertySelector: .| if .Code==null then "CodeNotExists" else if .Code=="BackendServer.configuring" or .Code=="IncorrectScalingGroupStatus" then "RetryCodeExists" else "OtherCodes" end end
- Name: viewInstanceStatus
Action: ACS::ExecuteApi
Description:
en: Queries ECS instance status
zh-cn: 获取实例的运行状态
Properties:
Service: ECS
API: DescribeInstances
Parameters:
RegionId: '{{ regionId }}'
InstanceIds:
- '{{ instanceId }}'
Outputs:
instanceStatus:
Type: String
ValueSelector: 'Instances.Instance[].Status'
- Name: whetherInstanceStatusIsRunning
Action: ACS::Choice
Description:
en: Choose next task by instance status
zh-cn: 根据实例状态选择下一个任务
Properties:
DefaultTask: stopInstance
Choices:
- When:
'Fn::Equals':
- Stopped
- '{{ viewInstanceStatus.instanceStatus }}'
NextTask: describeScalingGroups
- Name: stopInstance
Action: ACS::ExecuteAPI
Description:
en: Stops the ECS instance
zh-cn: 停止实例
Properties:
Service: ECS
API: StopInstance
Parameters:
RegionId: '{{ regionId }}'
InstanceId: '{{ instanceId }}'
- Name: untilInstanceReady
Action: ACS::WaitFor
Description:
en: Waits for the ECS instance to enter stopped status
zh-cn: 等待实例进入stopped状态
Properties:
Service: ECS
API: DescribeInstances
Parameters:
RegionId: '{{ regionId }}'
InstanceIds:
- '{{ instanceId }}'
DesiredValues:
- Stopped
PropertySelector: 'Instances.Instance[].Status'
- Name: describeScalingGroups
Action: ACS::ExecuteAPI
Description:
en: Queries scaling group
zh-cn: 获取伸缩组信息
Properties:
Service: ESS
API: DescribeScalingGroups
Parameters:
ScalingGroupId1: '{{ scalingGroupId }}'
Outputs:
configurationId:
Type: String
ValueSelector: 'ScalingGroups.ScalingGroup[].ActiveScalingConfigurationId'
launchTemplateId:
Type: String
ValueSelector: 'ScalingGroups.ScalingGroup[].LaunchTemplateId'
launchTemplateVersion:
Type: String
ValueSelector: 'ScalingGroups.ScalingGroup[].LaunchTemplateVersion'
activeScalingConfigurationId:
Type: String
ValueSelector: 'ScalingGroups.ScalingGroup[].ActiveScalingConfigurationId'
- Name: whetherToDescribeLaunchTemplateVersions
Action: ACS::Choice
Description:
en: Choose next task by launch template id
zh-cn: 根据启动模板的ID选择下一个任务
Properties:
DefaultTask: describeLaunchTemplates
Choices:
- When:
'Fn::Equals':
- Null
- '{{ describeScalingGroups.launchTemplateId }}'
NextTask: describeScalingConfigurations
- Name: describeLaunchTemplates
Action: 'ACS::ExecuteApi'
Description:
en: Queries launtch template version info
zh-cn: 获取启动模板版本信息
Properties:
Service: ECS
API: DescribeLaunchTemplates
Parameters:
RegionId: '{{ regionId }}'
LaunchTemplateId:
- '{{ describeScalingGroups.launchTemplateId }}'
Outputs:
defaultVersionNumber:
Type: String
ValueSelector: 'LaunchTemplateSets.LaunchTemplateSet[].DefaultVersionNumber'
latestVersionNumber:
Type: String
ValueSelector: 'LaunchTemplateSets.LaunchTemplateSet[].LatestVersionNumber'
versionInfo:
Type: String
ValueSelector: 'LaunchTemplateSets.LaunchTemplateSet[]'
- Name: describeLaunchTemplateVersions
Action: ACS::ExecuteApi
OnSuccess: replaceSystemDisk
Description:
en: Queries userdata by launtch template
zh-cn: 通过启动模板获取UserData
Properties:
Service: ECS
API: DescribeLaunchTemplateVersions
Parameters:
RegionId: '{{ regionId }}'
LaunchTemplateId: '{{ describeScalingGroups.launchTemplateId }}'
LaunchTemplateVersion:
- 'Fn::Jq':
- First
- 'if "{{describeScalingGroups.launchTemplateVersion}}" == "Default" then "{{describeLaunchTemplates.defaultVersionNumber}}" elif "{{describeScalingGroups.launchTemplateVersion}}" == "Latest" then "{{ describeLaunchTemplates.latestVersionNumber }}" else "{{describeScalingGroups.launchTemplateVersion}}" end'
- '{{ describeLaunchTemplates.versionInfo }}'
Outputs:
userData:
Type: String
ValueSelector: 'LaunchTemplateVersionSets.LaunchTemplateVersionSet[].LaunchTemplateData.UserData'
keyPairName:
Type: String
ValueSelector: 'LaunchTemplateVersionSets.LaunchTemplateVersionSet[].LaunchTemplateData.KeyPairName'
- Name: describeScalingConfigurations
Action: ACS::ExecuteApi
Description:
en: Queries scaling configurations
zh-cn: 获取伸缩配置信息
Properties:
Service: ESS
API: DescribeScalingConfigurations
Parameters:
RegionId: '{{ regionId }}'
ScalingGroupId: '{{ scalingGroupId }}'
ScalingConfigurationId1: '{{ describeScalingGroups.activeScalingConfigurationId }}'
Outputs:
userData:
Type: String
ValueSelector: 'ScalingConfigurations.ScalingConfiguration[].UserData'
keyPairName:
Type: String
ValueSelector: 'ScalingConfigurations.ScalingConfiguration[].KeyPairName'
- Name: replaceSystemDisk
Action: ACS::ExecuteAPI
Description:
en: Replaces the system disk of ECS instance
zh-cn: 更换ECS实例的系统盘
Properties:
Service: ECS
API: ReplaceSystemDisk
Parameters:
RegionId: '{{ regionId }}'
ImageId: '{{ imageId }}'
InstanceId: '{{ instanceId }}'
KeyPairName:
'Fn::If':
- 'Fn::Equals':
- Null
- '{{ describeScalingGroups.launchTemplateId }}'
- '{{ describeScalingConfigurations.keyPairName }}'
- '{{ describeLaunchTemplateVersions.keyPairName }}'
Outputs:
diskId:
Type: String
ValueSelector: DiskId
- Name: untilNewDiskReady
Action: ACS::WaitFor
Description:
en: Waits for the disks to be In_use satus
zh-cn: 等待新系统盘进入使用中状态
Properties:
Service: ECS
API: DescribeDisks
Parameters:
RegionId: '{{ regionId }}'
DiskIds:
- '{{ replaceSystemDisk.diskId }}'
DesiredValues:
- In_use
PropertySelector: 'Disks.Disk[].Status'
- Name: whetherToModifyInstanceUserData
Action: ACS::Choice
Description:
en: Whether to modify instance userdata by launch template id
zh-cn: 根据启动模板的ID选择是否修改ECS实例的UserData
Properties:
DefaultTask: whetherToModifyECSInstanceUserDataByLaunchTemplate
Choices:
- When:
'Fn::Equals':
- Null
- '{{ describeScalingGroups.launchTemplateId }}'
NextTask: whetherToModifyECSInstanceUserDataByScalingConfigurations
- Name: whetherToModifyECSInstanceUserDataByLaunchTemplate
Action: ACS::Choice
Description:
en: Choose next task by LaunchTemplate UserData
zh-cn: 根据启动模板的UserDate选择下一个任务
Properties:
DefaultTask: modifyInstanceUserdataByLaunchTemplate
Choices:
- When:
'Fn::Equals':
- Null
- '{{ describeLaunchTemplateVersions.userData }}'
NextTask: startInstance
- Name: modifyInstanceUserdataByLaunchTemplate
Action: ACS::ExecuteApi
OnSuccess: startInstance
Description:
en: Modifies ECS instance UserData by LaunchTemplate
zh-cn: 根据启动模板信息修改ECS实例的UserData
Properties:
Service: ECS
API: ModifyInstanceAttribute
Parameters:
RegionId: '{{ regionId }}'
InstanceId: '{{ instanceId }}'
UserData: '{{ describeLaunchTemplateVersions.userData }}'
- Name: whetherToModifyECSInstanceUserDataByScalingConfigurations
Action: ACS::Choice
Description:
en: Choose next task by ScalingConfigurations UserData
zh-cn: 根据伸缩配置中的UserData选择下一个任务
Properties:
DefaultTask: modifyInstanceUserdataByScalingConfigurations
Choices:
- When:
'Fn::Equals':
- Null
- '{{ describeScalingConfigurations.userData }}'
NextTask: startInstance
- Name: modifyInstanceUserdataByScalingConfigurations
Action: ACS::ExecuteApi
Description:
en: Modifies ECS instance UserData by ScalingConfigurations
zh-cn: 根据伸缩配置信息修改ECS实例的UserData
Properties:
Service: ECS
API: ModifyInstanceAttribute
Parameters:
RegionId: '{{ regionId }}'
InstanceId: '{{ instanceId }}'
UserData: '{{ describeScalingConfigurations.userData }}'
- Name: startInstance
Action: ACS::ExecuteAPI
Description:
en: Starts the ECS instance
zh-cn: 启动实例
Properties:
Service: ECS
API: StartInstance
Parameters:
RegionId: '{{ regionId }}'
InstanceId: '{{ instanceId }}'
- Name: untilInstanceToRunning
Action: ACS::WaitFor
Description:
en: Waits for the ECS instance to enter Running status
zh-cn: 等待实例进入运行中状态
Properties:
Service: ECS
API: DescribeInstances
Parameters:
RegionId: '{{ regionId }}'
InstanceIds:
- '{{ instanceId }}'
DesiredValues:
- Running
PropertySelector: 'Instances.Instance[].Status'
- Name: exitStandBy
Action: ACS::WaitFor
Description:
en: Modifies the state of ECS instances in a scaling group from Standby to Running
zh-cn: 设置伸缩组内处于备用状态的ECS实例为运行中状态
Retries: 30
Delay: 10
DelayType: Constant
Properties:
Service: ESS
API: ExitStandBy
Parameters:
RegionId: '{{ regionId }}'
ScalingGroupId: '{{ scalingGroupId }}'
InstanceId:
- '{{ instanceId }}'
DesiredValues:
- CodeNotExists
StopRetryValues:
- OtherCodes
PropertySelector: .| if .Code==null then "CodeNotExists" else if .Code=="BackendServer.configuring" or .Code=="IncorrectScalingGroupStatus" then "RetryCodeExists" else "OtherCodes" end end
- Name: setInstancesProtectionToTrue
Action: ACS::ExecuteAPI
When:
Fn::Equals:
- 'Protected'
- '{{ lifecycleState }}'
Description:
en: Sets the protection status of ECS instances to true
zh-cn: 设置ECS实例的保护状态为true
Properties:
Service: ESS
API: SetInstancesProtection
Parameters:
RegionId: '{{ regionId }}'
ScalingGroupId: '{{ scalingGroupId }}'
InstanceIds:
- '{{ instanceId }}'
ProtectedFromScaleIn: 'true'
Outputs:
newSystemDiskId:
Type: String
Value: '{{ replaceSystemDisk.diskId }}'