通過將日歷應(yīng)用集成到 Ansible 中,確保你的自動化工作流計(jì)劃不會與其他東西沖突。
• 來源:linux.cn • 作者:Nicolas Leiva • 譯者:geekpi •
(本文字?jǐn)?shù):1966,閱讀時(shí)長大約:2 分鐘)
“隨時(shí)”是執(zhí)行自動化工作流的好時(shí)機(jī)嗎?出于不同的原因,答案可能是否定的。
如果要避免同時(shí)進(jìn)行更改,以最大限度地減少對關(guān)鍵業(yè)務(wù)流程的影響,并降低意外服務(wù)中斷的風(fēng)險(xiǎn),則在你的自動化運(yùn)行的同時(shí),其他任何人都不應(yīng)該試圖進(jìn)行更改。
在某些情況下,可能存在一個(gè)正在進(jìn)行的計(jì)劃維護(hù)窗口。或者,可能有大型事件即將來臨、一個(gè)關(guān)鍵的業(yè)務(wù)時(shí)間、或者假期(你或許不想在星期五晚上進(jìn)行更改)。
Street scene with a large calendar and people walking
無論出于什么原因,你都希望將此信息發(fā)送到你的自動化平臺,以防止在特定時(shí)間段內(nèi)執(zhí)行周期性或臨時(shí)任務(wù)。用變更管理的行話,我說的是當(dāng)變更活動不應(yīng)該發(fā)生時(shí),指定封鎖窗口。
Ansible 中的日歷集成
如何在 Ansible 中實(shí)現(xiàn)這個(gè)功能?雖然它本身沒有日歷功能,但 Ansible 的可擴(kuò)展性將允許它與任何具有 API 的日歷應(yīng)用集成。
目標(biāo)是這樣的:在執(zhí)行任何自動化或變更活動之前,你要執(zhí)行一個(gè) pre-task ,它會檢查日歷中是否已經(jīng)安排了某些事情(目前或最近),并確認(rèn)你沒有在一個(gè)阻塞的時(shí)間段中。
想象一下,你有一個(gè)名為 calendar 的虛構(gòu)模塊,它可以連接到一個(gè)遠(yuǎn)程日歷,比如 google 日歷,以確定你指定的時(shí)間是否已經(jīng)以其他方式被標(biāo)記為繁忙。你可以寫一個(gè)類似這樣的劇本:
- name: Check if timeslot is taken
calendar:
time: "{{ ansible_date_time.iso8601 }}"
register: output
Ansible 實(shí)際會給出 ansible_date_time,將其傳遞給 calendar 模塊,以驗(yàn)證時(shí)間的可用性,以便它可以注冊響應(yīng) (output),用于后續(xù)任務(wù)。
如果你的日歷是這樣的:
Google Calendar screenshot
那么這個(gè)任務(wù)的輸出就會指明這個(gè)時(shí)間段被占用的事實(shí) (busy: true):
ok: [localhost] => {
"output": {
"busy": true,
"changed": false,
"failed": false,
"msg": "The timeslot 2020-09-02T17:53:43Z is busy: true"
}
}
阻止任務(wù)運(yùn)行
接下來, Ansible Conditionals 將幫助阻止所有之后任務(wù)的執(zhí)行。一個(gè)簡單的例子,你可以在下一個(gè)任務(wù)上使用 when 語句來強(qiáng)制它只有當(dāng)上一個(gè)輸出中的 busy 字段不是 true 時(shí),它才會運(yùn)行:
tasks:
- shell: echo "Run this only when not busy!"
when: not output.busy
總結(jié)
在 上一篇文章 中,我說過 Ansible 是一個(gè)將事物連接在一起的框架,將不同的組成部分相互連接,以協(xié)調(diào)端到端自動化工作流。
這篇文章探討了 Ansible 劇本如何與日歷應(yīng)用集成以檢查可用性。然而,我只做了一些表面工作!例如,你的任務(wù)也可以阻止日歷中的一個(gè)時(shí)間段,這里的發(fā)揮空間很大。
在我的下一篇文章中,我將深入 calendar 模塊是如何構(gòu)建的,以及其他編程語言如何與 Ansible 一起使用。如果你和我一樣是 Go 的粉絲,請繼續(xù)關(guān)注!
這篇文章最初發(fā)表在 Medium 上,名為 Ansible and Google Calendar integration for change management ,采用 CC BY-SA 4.0 許可,經(jīng)許可后轉(zhuǎn)載。
via: opensource.com
作者: Nicolas Leiva 選題: lujun9972 譯者: geekpi 校對: wxy
本文由 LCTT 原創(chuàng)編譯, Linux中國 榮譽(yù)推出