【问题标题】:Is there a way to loop on two variables when importing an Ansible role?导入 Ansible 角色时,有没有办法循环两个变量?
【发布时间】:2019-05-17 21:13:52
【问题描述】:

我在剧中导入 Ansible 角色并运行其“安装”任务。该角色旨在在 Vbox 等虚拟机管理程序上创建 VM,并且工作正常。 但是,我想用它同时创建多个虚拟机,为此我必须提供 2 个变量: - vm_ip : 要创建的 vm 的 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 虚拟机,但播放崩溃告诉我:“任务包含一个带有未定义变量的选项。错误是:‘项目’未定义

【问题讨论】:

    标签: loops variables ansible


    【解决方案1】:

    您似乎错误地缩进了 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' }
    

    【讨论】:

      猜你喜欢
      • 2019-08-30
      • 1970-01-01
      • 2023-03-04
      • 2010-12-01
      • 1970-01-01
      • 2022-11-04
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多