例如:我有5台客户端计算机,并且我需要在所有5台计算机上安装5个不同的软件包
192.168.20.5: vsftpd
192.168.30.7:ftp
192.168.45.7:httpd
等等 是否有任何方法可以同时迭代主机名和包名
我尝试使用with_items进行迭代,但是无法与主机进行迭代
- name: installing packages
yum: name="{{item.name}}" state=present
when: ansible_hostname== item.host
答案 0 :(得分:2)
这是Ansible host variables的绝佳用例。在host_vars/
中为每个主机创建一个如下所示的文件:
packages:
- vsftpd
然后您的软件包安装任务应如下所示:
- name: install packages
package:
name: "{{ packages }}"
state: installed
这将为执行任务的主机使用packages
变量的正确值。
您的主机似乎在服务不同的角色。您可能希望使用Ansible角色来组织项目,而不是使用我在本问题的第一部分中提出的解决方案(例如,一个用于Web服务器,一个用于ftp服务器,等等)。在这种情况下,有关软件包的信息将链接到角色而不是特定的主机,并且您的剧本会将角色与主机相关联。