将你的日历与 Ansible 集成,以避免日程冲突

通过将日历应用程序集成到 Ansible 中,确保你的自动化工作流程的计划不会与其他事情冲突。
81 位读者喜欢这篇文章。
Poll: Upcoming open source conferences

Dafne Cholet 摄。CC BY-SA 2.0。

 

“任何时间”都是执行自动化工作流程的好时间吗?答案可能是否定的,原因有很多。

如果你想避免同时进行更改,以最大限度地减少对关键业务流程的影响并降低意外服务中断的风险,那么在你的自动化运行时,不应有其他人尝试进行更改。

在某些情况下,可能正在进行计划的维护窗口。或者可能即将发生重大事件、关键业务时期或节假日——或者你可能更喜欢不在星期五晚上进行更改。

无论出于何种原因,你都希望将此信息传递给你的自动化平台,并防止在特定时间段内执行定期或临时任务。用变更管理术语来说,我指的是指定停机窗口,即不应发生变更活动的时间。

Ansible 中的日历集成

如何在 Ansible 中实现这一点? 虽然它本身没有日历功能,但 Ansible 的可扩展性使其能够与任何具有 API 的日历应用程序集成。

目标是:在执行任何自动化或变更活动之前,你执行一个 pre-task,检查日历中是否已安排了某些内容(现在或很快),并确认你没有处于阻止的时段内。

假设你有一个名为 calendar 的虚构模块,它可以连接到远程日历(如 Google 日历),以确定你指定的时间是否已被标记为忙碌。你可以编写如下的 playbook

- name: Check if timeslot is taken
  calendar:
    time: "{{ ansible_date_time.iso8601 }}"
  register: output

Ansible facts 将提供 ansible_date_time,它被传递给 calendar 模块以验证时间可用性,以便它可以注册响应 (output) 以在后续任务中使用。

如果你的日历看起来像这样

那么此任务的输出将突出显示此时段已被占用 (busy: true) 这一事实

ok: [localhost] => {
   "output": {
       "busy": true,
       "changed": false,
       "failed": false,
       "msg": "The timeslot 2020-09-02T17:53:43Z is busy: true"
   }
}

阻止任务运行

接下来,Ansible 条件语句 将帮助阻止执行任何进一步的任务。 作为一个简单的例子,你可以在下一个任务中使用 when 语句来强制它仅在先前输出中的字段 busy 不为 true 时运行

tasks:
  - shell: echo "Run this only when not busy!"
    when: not output.busy

结论

之前的一篇文章中,我说过 Ansible 是一个将事物连接在一起的框架,它将不同的构建块相互连接,以编排端到端的自动化工作流程。

本文探讨了 playbook 如何集成或与日历应用程序对话以检查可用性。 但是,我只是触及了表面! 例如,你的任务也可以阻止日历中的时段……天空才是极限。

在我的下一篇文章中,我将深入探讨 calendar 模块是如何构建的,以及其他编程语言如何与 Ansible 一起使用。 如果你像我一样是 Go 语言的粉丝,请继续关注!


本文最初以 Ansible 和 Google 日历集成的变更管理 为题发表在 Medium 上,根据 CC BY-SA 4.0 许可获得许可并经许可转载。

接下来阅读
标签
User profile image.
拥有 15 年经验的技术专业人士,帮助客户设计、部署和运营大型网络,重点是基础设施自动化。Cisco 认证设计专家 (CCDE) 和网络互联专家 (CCIE)。偶尔在国际会议上发表演讲和撰写博客。喜欢用 Go 编写开源软件,并且是云爱好者。

评论已关闭。

© . All rights reserved.