Python

如何在 Ansible 配置(YAML/Jinja2)中逐個循環項目?

  • February 22, 2017

我正在嘗試從我在 Ansible 中的清單中遍歷我的主機,並在命令中使用該迭代的主機名稱。特別是,我試圖將每個主機的主機名設置為我在主機文件中呼叫它們的任何名稱。所以,我的網路伺服器有 web01、web02、web03 等——我想在每個問題中將它們設置為伺服器上的主機名,即我想遍歷“所有”主機以及當我在 web01 上時(第一次迭代) ,我想將我所在主機的名稱傳遞給主機名模組。這是我嘗試過的:

- hosts: all
become: true
tasks:
 - hostname:
     name: "{{ item }}"
   with_items: "{{ play_hosts }}"

但是,不是將我所在主機的名稱設置為主機名,而是嘗試將我的 ansible 配置中的每個主機設置為每個伺服器上的主機名。所以它試圖做:

connect to web01; hostname -> web01; hostname -> web02; hostname -> web03
connect to web02; hostname -> web01; hostname -> web02; hostname -> web03
connect to web03; hostname -> web01; hostname -> web02; hostname -> web03

相反,我想要:

connect to web01; hostname -> web01
connect to web02; hostname -> web02
connect to web03; hostname -> web03

我怎樣才能做到這一點?

我在這裡發現了一個類似的問題:Ansible: setting hostname over inventory

但這得到了一個比我希望的更複雜的解決方案。那裡的建議是添加後綴,但肯定像我想要的簡單循環原則上不應該要求這樣做。

您不需要遍歷主機,因為這是最基本的 Ansible 功能之一(它在一些選定的模組上被禁用,但hostname不是其中之一)。

要將目標機器的主機名設置為 Ansible 清單文件中定義的值,您需要做的就是引用該inventory_hostname變數(請參閱Magic Variables):

- hosts: all
 become: true
 tasks:
   - hostname:
       name: "{{ inventory_hostname }}"

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