我最喜歡用的 5 個 Ansible 模塊
在我成長的時候,我爺爺在他的花園裡有一個棚子。他經常會花幾個小時在那裡製作和修復東西。這是在我們有互聯網之前的事情,所以我花了很多時間看他在那個棚子里創造東西。雖然棚子里有很多工具,從鑽頭到車床到電器配件,還有很多東西我至今都無法辨認,但他使用的只是他手頭的一小部分。然而,他能做到的事情似乎永遠沒有極限。
我之所以告訴你這個故事,是因為我覺得我的職業生涯是在一個隱喻的棚子里度過的。計算機也是如此多的工具,都在一個狹小(虛擬?)的空間里。而工具棚中又有工具棚 —— 我最喜歡的是 Ansible。最近的 2.9 版本有 3,681 個模塊! 3,681 個啊!當我在 2013 年夏天第一次開始使用 Ansible 時,1.2.1 版本只有 113 個模塊,然而,正如[我當時寫的](http://probably.co.uk/post/puppet-vs-chef-vs-ansible/ "http://probably.co.uk/post/puppet-vs-chef-vs-ansible/"),我仍然可以實現任何我想像到的東西。
模塊是 Ansible 的支柱,是讓重任輕裝上陣的齒輪。它們被設計為做好一項工作,從而實現了 [Unix 哲學](https://en.wikipedia.org/wiki/Unix_philosophy#Do_One_Thing_and_Do_It_Well "https://en.wikipedia.org/wiki/Unix_philosophy#Do_One_Thing_and_Do_It_Well")。我們就是這樣來把這麼多的模塊捆綁在一起,作為樂團的指揮,Ansible 現在有很多樂器可以聽從它的指揮。
回顧一下我多年來的 Ansible 劇本和角色的 Git 倉庫,我發現我只用了 35 個模塊。這個小的子集被用來構建大型基礎設施。不過,我想知道如果用一個更小的子集可以實現什麼?當我回顧這 35 個模塊時,我在思考,我能否只用 5 個模塊就能達到同樣的效果。因此,以下是我最喜歡的五個模塊,順序無關。
5. authorized_key
SSH 是 Ansible 的核心,至少對於除了 Windows 以外的幾乎所有其他功能都是如此。在 Ansible 中高效使用 SSH 的關鍵(沒有雙關語)是……[密鑰](https://linux.die.net/man/1/ssh-keygen "https://linux.die.net/man/1/ssh-keygen")!順便提一下,你可以用 SSH 密鑰為安全性做很多非常酷的事情。值得仔細閱讀 [sshd 手冊頁](https://linux.die.net/man/8/sshd "https://linux.die.net/man/8/sshd")中的 「authorized_keys」 部分。如果你需要精細的用戶訪問控制,管理 SSH 密鑰可能會變得很費力,儘管我可以用接下來的兩個我最愛的模塊中的任何一個,但我更喜歡使用 [authorized_key](https://docs.ansible.com/ansible/latest/modules/authorized_key_module.html "https://docs.ansible.com/ansible/latest/modules/authorized_key_module.html"😉 這個模塊,因為它[可以通過變數輕鬆管理](https://github.com/phips/ansible-demos/blob/3bf59df1eb2390b31b5c42333197e2fbb7fec93f/roles/ansible-users/tasks/main.yml#L35 "https://github.com/phips/ansible-demos/blob/3bf59df1eb2390b31b5c42333197e2fbb7fec93f/roles/ansible-users/tasks/main.yml#L35")。
4. file
除了顯而易見的將文件放置在某個地方的功能外,[file](https://docs.ansible.com/ansible/latest/modules/file_module.html "https://docs.ansible.com/ansible/latest/modules/file_module.html"😉 模塊還可以設置所有權和許可權。我想說的是,這樣一個模塊就能帶來很多的好處。很大一部分安全問題也與設置許可權有關,所以 [file](https://docs.ansible.com/ansible/latest/modules/file_module.html "https://docs.ansible.com/ansible/latest/modules/file_module.html"😉 模塊和 [authorized_key](https://docs.ansible.com/ansible/latest/modules/authorized_key_module.html "https://docs.ansible.com/ansible/latest/modules/authorized_key_module.html"😉 可以很好地配合在一起使用。
3. template
操作文件內容的方法太多了,我看到很多人都在使用 [lineinfile](https://docs.ansible.com/ansible/latest/modules/lineinfile_module.html "https://docs.ansible.com/ansible/latest/modules/lineinfile_module.html")。我自己也用它做過小任務。但是,[template](https://docs.ansible.com/ansible/latest/modules/template_module.html "https://docs.ansible.com/ansible/latest/modules/template_module.html"😉 模塊就清晰多了,因為你維護了整個文件的上下文。我更喜歡以任何人都可以輕鬆理解的方式編寫 Ansible 的內容 —— 對我而言,這意味著容易理解正在發生的事情。[template](https://docs.ansible.com/ansible/latest/modules/template_module.html "https://docs.ansible.com/ansible/latest/modules/template_module.html"😉 的使用意味著能夠看到你正在放置內容的整個文件、全部你正在改變的變數。
2. uri
當前發布版中的許多模塊利用 Ansible 作為編排工具。它們與另一個服務對話,而不是做一些具體的事情,比如把一個文件放到一個地方。通常,這種對話也是通過 HTTP 進行的。在許多這樣的模塊出現之前,你可以直接使用 [uri](https://docs.ansible.com/ansible/latest/modules/uri_module.html "https://docs.ansible.com/ansible/latest/modules/uri_module.html"😉 模塊對 API 進行編程。它是一個強大的訪問工具,可以使你能夠做很多事情。在我的 Ansible 虛擬棚子里,我不會少了它。
1. shell
這是我們工具包里的王牌、瑞士軍刀。如果你為如何控制其他東西而非常苦惱,別說,說就是 [shell](https://docs.ansible.com/ansible/latest/modules/shell_module.html "https://docs.ansible.com/ansible/latest/modules/shell_module.html")。有人會說,我們這樣說是讓 Ansible 成為了 Bash 腳本 —— 但是,我想說的是,這還是有點好處的,因為可以在你的劇本和角色中使用 name
參數記錄下每一步。對我來說,這就像一個很大的獎勵一樣。早在我還在做諮詢的時候,我曾經幫助一個資料庫管理員(DBA)遷移到 Ansible。這位 DBA 並不喜歡改變,對改變工作方法也是推三阻四。於是,為了簡化遷移到 Ansible 方式,我們在 Ansible 中使用 [shell](https://docs.ansible.com/ansible/latest/modules/shell_module.html "https://docs.ansible.com/ansible/latest/modules/shell_module.html"😉 模塊調用了一些現有的資料庫管理腳本。並在任務中附帶了翔實的 name
聲明。
通過這五個模塊,你可以實現很多事情。是的,為完成特定任務而設計的模塊會讓你的生活更加輕鬆。但是,藉助簡單的工程設計,你幾乎可以事半功倍。Ansible 開發者 Brian Coca 是這方面的大師,[他的技巧和竅門講座](https://www.ansible.com/ansible-tips-and-tricks "https://www.ansible.com/ansible-tips-and-tricks")總是值得一看。
你覺得我喜歡的五大模塊怎麼樣?如果你也必須限制在這麼多模塊,你會選擇哪五個,為什麼?在下面的評論中告訴我吧!
via: [https://opensource.com/article/19/11/ansible-modules](https://opensource.com/article/19/11/ansible-modules "https://opensource.com/article/19/11/ansible-modules"😉
作者:[Mark Phillips](https://opensource.com/users/markp "https://opensource.com/users/markp"😉 選題:[lujun9972](https://github.com/lujun9972 "https://github.com/lujun9972"😉 譯者:[wxy](https://github.com/wxy "https://github.com/wxy"😉 校對:[wxy](https://github.com/wxy "https://github.com/wxy"😉
本文由 [LCTT](https://github.com/LCTT/TranslateProject "https://github.com/LCTT/TranslateProject"😉 原創編譯,[Linux中國](https://linux.cn/ "https://linux.cn/"😉 榮譽推出
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive