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