我想要一部剧本在多台机器上安装多个软件包

时间:2019-05-15 10:59:51

标签: ansible

例如:我有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

1 个答案:

答案 0 :(得分:2)

这是Ansible host variables的绝佳用例。在host_vars/中为每个主机创建一个如下所示的文件:

packages:
  - vsftpd

然后您的软件包安装任务应如下所示:

- name: install packages
  package:
    name: "{{ packages }}"
    state: installed

这将为执行任务的主机使用packages变量的正确值。


您的主机似乎在服务不同的角色。您可能希望使用Ansible角色来组织项目,而不是使用我在本问题的第一部分中提出的解决方案(例如,一个用于Web服务器,一个用于ftp服务器,等等)。在这种情况下,有关软件包的信息将链接到角色而不是特定的主机,并且您的剧本会将角色与主机相关联。