导入Ansible角色时,是否可以在两个变量上循环?

时间:2019-05-17 12:58:59

标签: loops variables ansible

我要在剧中导入Ansible角色并运行其“安装”任务。该角色旨在在虚拟机管理程序(如Vbox)上创建VM,并且工作正常。 但是,我想使用它同时创建多个VM,为此我必须提供2个变量: -vm_ip:要创建的虚拟机的IP -vm_name:要创建的虚拟机的名称

我已经用循环,with_items和其他方法尝试了几乎所有方法。例如,此代码不起作用:

- name: Create VMs
  hosts: localhost
  tasks:
  - import_role:
      name: vm_creation
      tasks_from: install
    vars:
      vm_ip: "{{ item.ips }}"
      vm_name: "{{ item.names }}"
      loop:
        - { ips: '192.168.20.4', names: 'test4' }
        - { ips: '192.168.20.5', names: 'test5' }

本应同时创建.20.4和.20.5 VM,但播放崩溃时告诉我:“该任务包括一个带有未定义变量的选项。错误是:'item'未定义

1 个答案:

答案 0 :(得分:0)

您似乎误用了loop指令。为此,您定义了一个名为loop的变量,而不是实际创建循环(这就是item未定义的原因)。

您还需要使用include_role而不是import_role。您可以在the documentation中了解include_roleimport_role之间的区别。

- name: Create VMs
  hosts: localhost
  tasks:
  - include_role:
      name: vm_creation
      tasks_from: install
    vars:
      vm_ip: "{{ item.ips }}"
      vm_name: "{{ item.names }}"
    loop:
      - { ips: '192.168.20.4', names: 'test4' }
      - { ips: '192.168.20.5', names: 'test5' }