首页 > 解决方案 > 导入 Ansible 角色时,有没有办法循环两个变量?

问题描述

我在戏剧中导入 Ansible 角色并运行其“安装”任务。该角色旨在在 Vbox 等虚拟机管理程序上创建 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 虚拟机,但播放崩溃告诉我:“任务包含一个带有未定义变量的选项。错误是:‘项目’未定义

标签: loopsvariablesansible

解决方案


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

您还需要使用include_role而不是import_role. 您可以在文档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' }

推荐阅读