OOS任务的审批的使用
在自动化运维的一些场景中,有些特殊的操作需要被特殊关注,例如删除重要资源,或使用费用较高的实例等。如果把这些操作也纳入自动化的范畴,您可能会担心失去控制,带来风险。若不纳入自动化的范畴,又会导致这些操作退化到手工执行或其他非自动化方式。而审批步骤刚好能够让您在自动化和特殊关注之间寻找一个平衡。
解决方案
在运维编排服务中,当被执行模板中包括审批动作,且执行到审批动作所在任务时,OOS执行引擎会暂停执行,执行进入等待中状态,并发送一个包含通知的审批链接到管理员用户。当管理员点击审批链接后,可根据业务需求做出审批决定,同意或拒绝,同意后则OOS引擎继续执行后续任务,拒绝后引擎停止执行,执行状态转为已取消(Cancelled)。
操作步骤
登录运维编排管理控制台。
单击我的模板>创建模板,并选取空白模板。
单击YAML,将附录1:模板内容粘贴到空白编辑栏,输入模板名称,单击创建模板。
在我的模板中,找到刚创建成功的模板,单击创建执行。
单击下一步,设置参数。
输入以下的参数。
targets:必填,将重启的实例范围。
webHookUrl:必填,审批通知及链接将发送到的钉钉群助手WebHook。获取方法可参考附录2:钉钉WebHook获取。
rateControl:选填,并发速率控制。
atMobiles:选填,发送审批通知时,在钉钉群中@的指定的用户。
atAll:选填,发送审批通知时,是否@钉钉群中的所有成员。
OOSAssumeRole:选填。OOS默认使用当前登录用户的权限执行动作;如果指定了RAM角色名称,OOS扮演该RAM角色执行动作。
单击下一步,确认,单击创建执行。
在执行管理中可查看刚刚创建的执行,若创建执行成功,被指定的手机号的用户,在钉钉群中会被@,且当前执行状态处于等待中,用户可以点击审批链接,根据需要作出审批决定。
附录1:模板(审批ECS实例重启)
模板任务逻辑:
捕捉所选实例信息。
下发对实例重启的审批通知及链接。
如审批通过,对所选实例进行重启。
模板内容(YAML)
FormatVersion: OOS-2019-06-01
Description:
en: Bulky restarts the ECS instances with Approval.
zh-cn: 批量重启ECS实例带审批。
name-en: BulkyRebootInstancesWithApproval
name-zh-cn: 批量重启ECS实例带审批
Parameters:
targets:
Type: Json
AssociationProperty: Targets
AssociationPropertyMetadata:
ResourceType: 'ALIYUN::ECS::Instance'
rateControl:
Description:
en: Concurrency ratio of task execution.
zh-cn: 任务执行的并发比率。
Type: Json
AssociationProperty: RateControl
Default:
Mode: Concurrency
MaxErrors: 0
Concurrency: 100%
webHookUrl:
Description:
en: >-
The webHook url of dingtalk group assistant,
e.g.https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414.
zh-cn: >-
钉钉群助手的webhook地址,形如https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414。
Type: String
atMobiles:
Description:
en: >-
The telephone numbers of member in dingtalk group assistant @, when
notify comes.
zh-cn: 当群助手向钉钉群中发送审批通知时,要被@的群成员注册钉钉所用手机号。
Type: List
Default:
- '1390000****'
atAll:
Description:
en: 'assistant @ all members in dingtalk group or not, when notify comes.'
zh-cn: 当群助手向钉钉群中发送审批通知时是否@所有人。
Type: String
Default: 'false'
OOSAssumeRole:
Description:
en: The RAM role to be assumed by OOS.
zh-cn: OOS扮演的RAM角色。
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: getInstance
Description:
en: Views the ECS instances.
zh-cn: 获取ECS实例。
Action: 'ACS::SelectTargets'
Properties:
ResourceType: 'ALIYUN::ECS::Instance'
Filters:
- '{{ targets }}'
Outputs:
instanceIds:
Type: List
ValueSelector: 'Instances.Instance[].InstanceId'
instanceNames:
Type: List
ValueSelector: 'Instances.Instance[].InstanceName'
- Name: approveRestart
Action: 'ACS::Approve'
Properties:
NotifyType: WebHook
WebHook:
URI: '{{webhookUrl}}'
Headers:
Content-Type: application/json
Content:
msgtype: text
text:
content: >-
Notify: please approve instances restart, instance names to
approve are {{getInstance.instanceNames}}, sent by
{{ACS::RegionId}} oos {{ACS::ExecutionId}}.
at:
atMobiles: '{{atMobiles}}'
isAtAll: '{{atAll}}'
- Name: rebootInstance
Action: 'ACS::ECS::RebootInstance'
Description:
en: Restarts the ECS instances.
zh-cn: 重启实例。
Properties:
instanceId: '{{ ACS::TaskLoopItem }}'
Loop:
RateControl: '{{ rateControl }}'
Items: '{{ getInstance.instanceIds }}'
Outputs:
instanceIds:
Type: List
Value: '{{ getInstance.instanceIds }}'
附录2:钉钉WebHook获取
选择要添加群助手通知的群,单击
。
单击智能群助手。
单击添加机器人。
单击自定义。
单击添加。
填写机器人名字,本示例安全设置选择自定义关键字,并输入WebHook通知内容中所包含的词汇作为关键字,比如本示例模板的通知内容中含"Notify",于是在该处可填写"Notify"。单击完成。
单击复制,获取到WebHook地址。