本節書摘來自華章出版社《ansible權威指南》一書中的第一章,第x節,作者 李松濤 魏 巍 甘 捷 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
1.4 ansible是如何工作的
ansible沒有用戶端,是以底層通信依賴于系統軟體,linux系統下基于openssh通信,windows系統下基于powershell,管理端必須是linux系統,使用者認證通過後在管理節點通過ansible工具調用各應用子產品将指令推送至被管理端執行,并在執行完畢後自動删除産生的臨時檔案。ansible具體的工作機制官方有專欄介紹httpswww.ansible.comhow-ansible-works,但整體稍過簡略。我們參考從官網視訊中的截圖來詳細了解下其工作方式,如圖1-1所示。根據ansible使用過程中的不同角色,我們将其分為:
使用者
ansible工具集
作用對象
(1)使用者
如圖1-1中ansible工作機制所示,ansible使用者來源于多種次元,圖中為我們展示了4種方式:
第一種方式:cmdb(configuration
management database,配置管理資料庫),cmdb存儲和管理着企業it架構中的各項配置資訊,是建構itil項目的核心工具,運維人員可以組合cmdb和ansible,通過cmdb直接下發指令調用ansible工具集完成操作者所希望達成的目标;
第二種方式:publicprivate方式,ansible除了豐富的内置子產品外,同時提供豐富的api語言接口,如php、python、perl等多種當下流行語言,基于public(公有雲)private(私有雲),ansible以api調用的方式運作;
第三種方式:users直接使用ad-hoc臨時指令集調用ansible工具集來完成任務執行,ad-hoc将在第3章有詳細介紹;
第四種方式:users預先編寫好的ansible
playbooks,通過執行playbooks中預先編排好的任務集按序完成任務執行。
(2)ansible工具集
ansible指令是ansible的核心工具,ansible指令并非自身完成所有的功能集,其隻是ansible執行任務的調用入口,大家可心了解為“總指揮”,所有指令的執行通過其“調兵遣将”最終完成。ansible指令共有哪些兵将可供使喚呢?大家看中間綠色框中有inventory(指令執行的目标對象配置檔案)、api(供第三方程式調用的應用程式程式設計接口)、modules(豐富的内置子產品)、plugins(内置和可自定義的插件)這些可供調遣。
(3)作用對象
ansible的作用對象,不僅僅是linux和非linux作業系統的主機(hosts),同樣也可以作用于各類公有雲私有雲,商業和非商業裝置的網絡設施。

同樣,如果我們按ansible工具集的組成來講,由圖1-1可以看出ansible主要由6部分組成。
ansible
playbooks:任務劇本(任務集),編排定義ansible任務集的配置檔案,由ansible順序依次執行,通常是json格式的yml檔案;
inventory:ansible管理主機的清單;
modules:ansible執行指令的功能子產品,多數為内置的核心子產品,也可自定義;
plugins:子產品功能的補充,如連接配接類型插件、循環插件、變量插件、過濾插件等,該功能不常用。
api:供第三方程式調用的應用程式程式設計接口;
ansible:該部分圖中表示的不明顯,組合inventory、api、modules、plugins的綠框大家可以了解為是ansible指令工具,其為核心執行工具;
ansible執行任務,這些元件互相調用關系如圖1-2所示:
使用者使用ansible或ansible-playbook(會額外讀取playbook檔案)時,在伺服器終端輸入ansible的ad-hoc指令集或playbook後,ansible會遵循預先編排的規則将playbooks逐條拆解為play,再将play組織成ansible可識别的任務(task),随後調用任務涉及的所有子產品(module)和插件(plugin),根據inventory中定義的主機清單通過ssh(linux預設)将任務集以臨時檔案或指令的形式傳輸到遠端用戶端執行并傳回執行結果,如果是臨時檔案則執行完畢後自動删除。