Django+Ansible構建任務中心思路

Ansible作爲老牌的自動化運維工具,由Python開發,應用廣泛,但其默認只提供了命令行下的使用方式,好在提供有完善的API支持二次開發,可以很方便的集成到我們的自動化運維繫統中

最近一個朋友跳槽到了新公司轉做DevOps開發,接到的第一個需求就是基於Ansible研發簡單的任務中心,而他欠缺相關經驗就找我幫忙,我就花了兩天時間從熟悉Ansible開始寫了個項目,由於我們的任務都是通過自研的一套自定義任務引擎Probius來實現的,之前從未正式用過Ansible,趁此機會也算是熟悉了

本篇文章只有思路沒有代碼,主要幫助新手瞭解流程整理思路,從而更好的理解代碼

思路整理

可以通過Web運行Ansible的Module和Playbook這是我們的目標,要實現這個目標我們要做哪些功能呢?我大概畫了個腦圖幫助整理思路

前端頁面

根據上邊的思路,我們來想一下都需要編寫哪些頁面,首先需要一個任務執行頁面,在這個頁面裏需要選擇是本次任務是運行module還是Playbook,如果是需要運行module,則需要用戶選擇具體的module和輸入參數,如果需要運行playbook,則需要用戶選擇具體的playbook和輸入參數,無論是運行module還是playbook,都需要確定在哪些主機上運行

通常情況下我們的主機信息都是通過CMDB系統維護的,而對於任務的執行,大多也是針對項目或服務,所以對主機的選擇就轉換成了對項目或服務的選擇,選擇了項目服務就確定了運行主機,由此一個完整的任務執行頁面就確定了

上邊的頁面有兩個下拉選擇框,其一是項目的選擇,我們通過選擇項目來確定運行的主機,這些數據需要去CMDB獲取,這就需要CMDB提供2個API,一個用來獲取項目服務的列表,供頁面上選擇,另外還需要一個根據項目服務查詢項目服務下主機列表的API,以確定任務要運行的主機列表

另外一個下拉框是playbook的選擇,這就需要另外一個playbook管理的頁面,管理playbook就需要進行增刪改查,一個簡單的頁面如下

任務執行過程中需要一個實時展示日誌的頁面,可以及時的觀察任務執行過程中遇到的問題,點擊運行按鈕直接跳轉到任務執行日誌頁面,觀察任務執行日誌

任務執行完成後還需要一個歷史任務的列表頁面,可以查看所有歷史執行的任務,以及可以根據條件方便的過濾任務

簡單的幾個頁面就將整個流程清晰的展示了出來

後端邏輯

上邊講了前端頁面的設計思路,而後端的邏輯又是怎樣的,我們同樣從這幾個頁面入手思考

ansible執行頁面,當用戶點擊提交按鈕的同時會將所選項目、所選模塊/playbook,以及參數傳給後端,後端根據所選的項目獲取到項目下的主機,然後將主機、module/playbook、參數,以及任務創建時間、創建用戶等信息寫入數據庫,同時調用AnsibleAPI異步執行,最後跳轉到任務詳情頁面

AnsibleAPI執行過程中將日誌實時寫入緩存,同時可以通過websocket推給任務詳情頁面,任務詳情頁面接受到數據之後展示,如果覺得使用websocket沒必要也可以像我一樣直接在任務詳情頁啓動一個循環,每秒請求日誌將更新追加到頁面上,在任務執行完成後,將緩存數據寫入數據庫,這樣的好處是可以減少對數據庫的讀寫,提高效率,整個流程大概如下

以上是運行和任務詳情頁面的後端邏輯,而對於playbook和任務歷史兩個頁面就比較簡單了,就是普通的增刪改查而已,不過多介紹

後記

一個新項目在開始編寫代碼之前就需要對這個項目有相對清晰的認識,在腦海裏過一下基本邏輯,這一步也可以藉助思維導圖來完成,然後搭框架填內容水到渠成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章