文档

OOS任务的审批的使用

更新时间:

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

解决方案

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

操作步骤

  1. 登录系统运维管理 OOS(CloudOps Orchestration Service)管理控制台

  2. 单击自定义任务模板>创建模板,并选取空白模板image

  3. 单击YAML,将附录1:模板内容粘贴到空白编辑栏,输入模板名称,单击创建模板image

  4. 自定义任务模板中,找到刚创建成功的模板,单击创建执行

  5. 单击下一步,设置参数

  6. 输入以下的参数。

    • targets:必填,将重启的实例范围。

    • webHookUrl:必填,审批通知及链接将发送到的钉钉群助手WebHook。获取方法可参考附录2:钉钉WebHook获取

    • rateControl:选填,并发速率控制。

    • atMobiles:选填,发送审批通知时,在钉钉群中@的指定的用户。

    • atAll:选填,发送审批通知时,是否@钉钉群中的所有成员。

    • OOSAssumeRole:选填。OOS默认使用当前登录用户的权限执行动作;如果指定了RAM角色名称,OOS扮演该RAM角色执行动作。 image

  7. 单击下一步,确定,单击创建执行

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

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

  • 模板任务逻辑:

    1. 捕捉所选实例信息。

    2. 下发对实例重启的审批通知及链接。

    3. 如审批通过,对所选实例进行重启。

  • 模板内容(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获取

  1. 选择要添加群助手通知的群,单击117

  2. 单击智能群助手8

  3. 单击添加机器人6

  4. 单击自定义7

  5. 单击添加8

  6. 填写机器人名字,本示例安全设置选择自定义关键字,并输入WebHook通知内容中所包含的词汇作为关键字,比如本示例模板的通知内容中含"Notify",于是在该处可填写"Notify"。单击完成10

  7. 单击复制,获取到WebHook地址。

  • 本页导读 (0)
文档反馈