我要在剧中导入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'未定义
答案 0 :(得分:0)
您似乎误用了loop
指令。为此,您定义了一个名为loop
的变量,而不是实际创建循环(这就是item
未定义的原因)。
您还需要使用include_role
而不是import_role
。您可以在the documentation中了解include_role
和import_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' }