Mac-Osx

如何使用 Ansible 的自製模組來斷言已安裝的軟體包列表

  • October 28, 2017

我是 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。並且模組需要對此有零意識或明確支持。強大的。

引用自:https://serverfault.com/questions/880360