任务循环(loops)
所有文档
menu
没有找到结果,请重新输入

运维编排 OOS

任务循环(loops)

任务循环

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],
        }
    ]
}
上一篇
内置函数(BuiltinFunctions)
下一篇
参数(properties)