任务循环(loops)
更新时间:2024-08-16
任务循环
OOS可以为任务设置loops属性,用来支持对单个任务的循环执行。
若设置了任务的loops属性,当前任务将包含多个子执行,每个子执行对应loops中的一个元素。
语法
假设我们有一个重启虚机的任务,如下所示
JSON
1{
2 "operators": [
3 {
4 "name": "重启虚机", // 任务名称
5 "operator": "BCE::Bcc::RestartInstance", // 重启虚机任务
6 "properties": { // 参数列表
7 "instance": {
8 "shortId": "i-Qnu499eJ", // 虚机id
9 }
10 }
11 }
12 ]
13}
若我们想批量重启多个虚机,可使用任务的loops属性,对多个bcc实例循环执行该任务
JSON
1{
2 "operators": [
3 {
4 "name": "重启虚机", // 任务名称
5 "operator": "BCE::Bcc::RestartInstance", // 重启虚机任务
6 "loops": [
7 { // 第一组参数
8 "instance": {
9 "shortId": "i-Qnu499eJ",
10 }
11 },
12 { // 第二组参数
13 "instance": {
14 "shortId": "i-Bt9Okyh8",
15 }
16 },
17 ]
18 }
19 ]
20}
除了上述形式,我们还可以使用更简化的形式来指定loops
JSON
1{
2 "operators": [
3 {
4 "name": "重启虚机", // 任务名称
5 "operator": "BCE::Bcc::RestartInstance", // 重启虚机任务
6 "loops": {
7 // 使用list指定instance参数的多个值
8 "instance": [
9 {
10 "shortId": "i-Qnu499eJ",
11 },
12 {
13 "shortId": "i-Bt9Okyh8",
14 }
15 ]
16 }
17 }
18 ]
19}
当然,你可以使用内置函数指定loops参数
JSON
1{
2 "operators": [
3 {
4 "name": "重启虚机", // 任务名称
5 "operator": "BCE::Bcc::RestartInstance", // 重启虚机任务
6 "loops": {
7 // 使用函数,引用当前执行的其他变量,主要该变量的类型,比如与参数类型匹配
8 "instance": {"Ref": "inputInstances"},
9 }
10 }
11 ]
12}
并发控制
你可以批量执行循环中的子执行,通过以下属性控制循环执行的并发度和并发方式
JSON
1{
2 "operators": [
3 {
4 "name": "重启虚机", // 任务名称
5 "operator": "BCE::Bcc::RestartInstance", // 重启虚机任务
6 "loops": [], // loops列表
7
8 // 允许的并行比例,选填,默认值:0,表示串行执行。取值范围[0, 1]
9 // 该字段仅当loops字段存在时生效
10 // 计算得到的loops并发度 = max(1, len(loops) * parallelismRatio)
11 "parallelismRatio": 0.1,
12
13 // 允许的并行个数,选填,默认值:0,表示串行执行
14 // 只允许对parallelismRatio和parallelismCount之一进行设置
15 "parallelismCount": 0,
16
17 // Loops执行时,使用的窗口类型,选填
18 // 可选值:
19 // SLICING - 滑动窗口,始终保持有'parallelismCount'个子执行在执行,默认值
20 // TUMBLING - 滚动窗口,只有当上一个窗口中的子执行全部执行完成后,才会开始下一个窗口
21 "loopWindowType": "SLICING",
22 }
23 ]
24}
容错机制
你可以设置最多允许多少个子执行执行失败,若失败的子执行数小于等于设置的阈值,则仍然认为当前任务执行成功。
JSON
1{
2 "operators": [
3 {
4 "name": "重启虚机", // 任务名称
5 "operator": "BCE::Bcc::RestartInstance", // 重启虚机任务
6 "loops": [], // loops列表
7
8 // 允许失败的loops比例,选填,默认值:0,表示不允许失败。取值范围[0, 1]
9 // 该字段仅当loops字段存在时生效,表示在循环中允许失败的比例。
10 "allowedFailureRatio": 0.1,
11
12 // 允许失败的loops个数,选填,默认值:0,表示不允许失败
13 "allowedFailureCount": 0,
14 }
15 ]
16}
设置断点
有时候,你希望在几个子执行执行完成后,可以暂停整个流程,以方便你进行一些观察之后再继续。OOS通过设置断点实现这一功能。
JSON
1{
2 "operators": [
3 {
4 "name": "重启虚机", // 任务名称
5 "operator": "BCE::Bcc::RestartInstance", // 重启虚机任务
6 "loops": [], // loops列表
7
8 // 断点(也称作暂停点),选填
9 // 仅在设置了loops参数时生效
10 // 例如,[1,3,6]表示在执行第1,3,6个子执行后,暂停loops执行
11 // 暂停点优先于并发度:比如5并发,暂停点为1,那么会只执行一个子执行,然后暂停
12 "breakpoints": [1, 3, 6],
13 }
14 ]
15}