Mac-Osx
如何使用 Ansible 的自製模組來斷言已安裝的軟體包列表
我是 Ansible 的一個相對較新的使用者。我用它來編排幾組 Linux 伺服器。我現在正在擴展該用途以使用Ansible 的自製模組。
使用 homebrew 模組,我想斷言我的 macOS 機器上安裝了一個軟體包列表。到目前為止,我能做的最好的事情是為每個包創建單獨的角色,每個角色類似於:
- name: "htop" homebrew: name: htop state: present
似乎必須有一種方法可以在單個角色中提供包列表,我以前在使用 Ansible apt 模組時見過這種方法。
有小費嗎?自製模組本身是否明確必須支持這種操作,或者可能有一些對 Ansible 甚至 Python 本身來說更基本的東西可以提供我正在尋找的東西?
PS - 你可以放心地假設我的 macOS 機器都是伺服器。
我或多或少找到了解決方案。我的角色現在看起來像這樣,並且有效:
- name: "brew favourites" homebrew: name={{ item }} state=present with_items: - htop - nmap - telnet - wget - nginx
擴展筆記
我真的不知道是什麼機制負責這項工作。我覺得它在 Ansible 之外,實際上是一種 Pythonism(這是一個 Lamda 嗎?)。不管它是什麼,它都可以作為此類事情的通用解決方案的模板。
在看到用於定義 apt 包列表的類似內容後,我嘗試了上述方法,該方法如下所示:
- name: "Asserting apt packages" apt: pkg={{ item }} state=installed with_items: - aptitude - vim - htop - nmap - curl - screen - open-vm-tools
因此請注意,在apt 模組中,我希望為pkg參數列出許多包。在自製模組的上下文中,它不是pkg,而是name。
類似地,兩個 Ansible 模組都有一個 state 參數,但是對於 apt 來說,適當的值是installed,並且使用 homebrew 它是present。
所以我認為這種語法適用於全域上下文中的 Ansible。並且模組需要對此有零意識或明確支持。強大的。