我正在尝试从Ansible中的库存中遍历我的主机,并在命令中使用该迭代的主机名称。 特别是,我试图将我的每个主机的主机名设置为我在主机文件中调用的主机名。 所以,我有我的web服务器的web01,web02,web03等 – 我想在每个问题的服务器上设置这些主机名,即我想循环“所有”主机,当我在web01上(第一次迭代) ,我想将我所在主机的名称传递给主机名模块。 这是我试过的:
- hosts: all become: true tasks: - hostname: name: "{{ item }}" with_items: "{{ play_hosts }}"
但是,不是将主机名称设置为主机名称,而是尝试将每个单独的主机从我的configuration文件设置为每台服务器上的主机名称。 所以它试图做到:
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:在主页上设置主机名
但是这个答案比我希望的更复杂的解决scheme。 那里的build议是要加后缀,但是确实像我想要的那样简单的循环原则上不需要这样做。
您不需要在主机上循环,因为这是最基本的Ansible函数之一(它在几个选定的模块上被禁用,但hostname不是其中之一)。
要将目标计算机的主机名设置为Ansible清单文件中定义的值,您只需引用inventory_hostnamevariables(请参阅Magic Variables ):
- hosts: all become: true tasks: - hostname: name: "{{ inventory_hostname }}"