全部产品
云市场

OOS任务的审批的使用

更新时间:2019-11-24 21:23:26

背景和痛点

在自动化运维的一些场景中,有些特殊的操作需要被特殊关注,例如删除重要资源,或使用费用较高的实例等。如果把这些操作也纳入自动化的范畴,您可能会担心失去控制,带来风险。若不纳入自动化的范畴,又会导致这些操作退化到手工执行或其他非自动化方式。而审批步骤刚好能够让您在自动化和特殊关注之间寻找一个平衡。

解决方案

在运维编排服务中,当被执行模板中包括审批动作,且执行到审批动作所在任务时,OOS执行引擎会暂停执行,执行进入等待中状态,并发送一个包含通知的审批链接到管理员用户。当管理员点击审批链接后,可根据业务需求做出审批决定,同意或拒绝,同意后则OOS引擎继续执行后续任务,拒绝后引擎停止执行,执行状态转为已取消(Cancelled)。

操作步骤

  1. 首先登录到运维编排控制台
  2. 单击我的模版>创建模版,并选取空白模版
  3. 单击YAML,将附录1:模版内容粘贴到空白编辑栏,输入模版名称,单击创建模版oos
  4. 我的模版中,找到刚创建成功的模版,单击创建执行
  5. 单击 下一步,设置参数
  6. 输入以下的参数 。
    • targets: 必填,将重启的实例范围。
    • webHookUrl: 必填,审批通知及链接将发送到的钉钉群助手WebHook。获取方法可参考附录2:钉钉WebHook获取
    • rateControl: 选填,并发速率控制。
    • atMobiles: 选填,发送审批通知时,在钉钉群中@的指定的用户。
    • atAll: 选填,发送审批通知时,是否@钉钉群中的所有成员。
    • OOSAssumeRole:选填。OOS默认使用当前登录用户的权限执行动作;如果指定了RAM角色名称,OOS扮演该RAM角色执行动作。oos
  7. 单击 下一步,确认 ,单击 创建执行

  8. 执行管理中可查看刚刚创建的执行,若创建执行成功,被指定的手机号的用户,在钉钉群中会被@,且当前执行状态处于等待中,用户可以点击审批链接,根据需要作出审批决定。

附录1:模版(审批ECS实例重启)

  • 模版任务逻辑:

    1. 捕捉所选实例信息。
    2. 下发对实例重启的审批通知及链接。
    3. 如审批通过,对所选实例进行重启。
  • 模板内容(YAML)
  1. FormatVersion: OOS-2019-06-01
  2. Description:
  3. en: Bulky restarts the ECS instances with Approval.
  4. zh-cn: 批量重启ECS实例带审批。
  5. name-en: BulkyRebootInstancesWithApproval
  6. name-zh-cn: 批量重启ECS实例带审批
  7. Parameters:
  8. targets:
  9. Type: Json
  10. AssociationProperty: Targets
  11. AssociationPropertyMetadata:
  12. ResourceType: 'ALIYUN::ECS::Instance'
  13. rateControl:
  14. Description:
  15. en: Concurrency ratio of task execution.
  16. zh-cn: 任务执行的并发比率。
  17. Type: Json
  18. AssociationProperty: RateControl
  19. Default:
  20. Mode: Concurrency
  21. MaxErrors: 0
  22. Concurrency: 100%
  23. webHookUrl:
  24. Description:
  25. en: >-
  26. The webHook url of dingtalk group assistant,
  27. e.g.https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414.
  28. zh-cn: >-
  29. 钉钉群助手的webhook地址,形如https://oapi.dingtalk.com/robot/send?access_token=1234zxcvaksdq31414。
  30. Type: String
  31. atMobiles:
  32. Description:
  33. en: >-
  34. The telephone numbers of member in dingtalk group assistant @, when
  35. notify comes.
  36. zh-cn: 当群助手向钉钉群中发送审批通知时,要被@的群成员注册钉钉所用手机号。
  37. Type: List
  38. Default:
  39. - '12345678901'
  40. atAll:
  41. Description:
  42. en: 'assistant @ all members in dingtalk group or not, when notify comes.'
  43. zh-cn: 当群助手向钉钉群中发送审批通知时是否@所有人。
  44. Type: String
  45. Default: 'false'
  46. OOSAssumeRole:
  47. Description:
  48. en: The RAM role to be assumed by OOS.
  49. zh-cn: OOS扮演的RAM角色。
  50. Type: String
  51. Default: OOSServiceRole
  52. RamRole: '{{ OOSAssumeRole }}'
  53. Tasks:
  54. - Name: getInstance
  55. Description:
  56. en: Views the ECS instances.
  57. zh-cn: 获取ECS实例。
  58. Action: 'ACS::SelectTargets'
  59. Properties:
  60. ResourceType: 'ALIYUN::ECS::Instance'
  61. Filters:
  62. - '{{ targets }}'
  63. Outputs:
  64. instanceIds:
  65. Type: List
  66. ValueSelector: 'Instances.Instance[].InstanceId'
  67. instanceNames:
  68. Type: List
  69. ValueSelector: 'Instances.Instance[].InstanceName'
  70. - Name: approveRestart
  71. Action: 'ACS::Approve'
  72. Properties:
  73. NotifyType: WebHook
  74. WebHook:
  75. URI: '{{webhookUrl}}'
  76. Headers:
  77. Content-Type: application/json
  78. Content:
  79. msgtype: text
  80. text:
  81. content: >-
  82. Notify: please approve instances restart, instance names to
  83. approve are {{getInstance.instanceNames}}, sent by
  84. {{ACS::RegionId}} oos {{ACS::ExecutionId}}.
  85. at:
  86. atMobiles: '{{atMobiles}}'
  87. isAtAll: '{{atAll}}'
  88. - Name: rebootInstance
  89. Action: 'ACS::ECS::RebootInstance'
  90. Description:
  91. en: Restarts the ECS instances.
  92. zh-cn: 重启实例。
  93. Properties:
  94. instanceId: '{{ ACS::TaskLoopItem }}'
  95. Loop:
  96. RateControl: '{{ rateControl }}'
  97. Items: '{{ getInstance.instanceIds }}'
  98. Outputs:
  99. instanceIds:
  100. Type: List
  101. Value: '{{ getInstance.instanceIds }}'

附录2:钉钉WebHook获取

  1. 选择要添加群助手通知的群,单击 1
  2. 单击智能群助手2
  3. 单击添加机器人3
  4. 单击自定义4
  5. 单击添加5
  6. 填写机器人名字,本示例安全设置选择自定义关键字,并输入WebHook通知内容中所包含的词汇作为关键字,比如本示例模版的通知内容中含”Notify”,于是在该处可填写”Notify”。单击完成6
  7. 单击复制,获取到WebHook地址。7