如何在 Ansible 配置(YAML/Jinja2)中逐个循环遍历项目?

如何在 Ansible 配置(YAML/Jinja2)中逐个循环遍历项目?

我正在尝试从 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:在库存上设置主机名

但答案比我期望的要复杂得多。那里的建议是添加后缀,但原则上我想要的简单循环肯定不需要这样做。

答案1

您不需要循环主机,因为这是最基本的 Ansible 功能之一(它在几个选定的模块上被禁用,但hostname不是其中之一)。

要将目标计算机的主机名设置为 Ansible 清单文件中定义的值,您需要做的就是引用变量inventory_hostname(请参阅魔法变量):

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

相关内容