loops - 导入 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 虚拟机,但播放崩溃告诉我:“任务包含一个带有未定义变量的选项。错误是:‘项目’未定义
解决方案
您似乎错误地缩进了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' }
推荐阅读
- r - sliderInput 值随着滑块拖动而变化
- python - 我正在尝试将对象添加到 python 中的数组,然后打印数组的内容
- php - 引导模式不显示 - Laravel - AdminLTE
- javascript - 受保护的内容 - 如何使右键单击和 F12 在您的网站中不起作用?
- r - R中按条件分组的两个变量的相关性
- assembly - AT&T 汇编器子串
- macros - 在 Rust 宏中调用具有不同数量参数的函数
- firebase - 通过 Android Studio 使用 Firebase 测试实验室时如何指定超时
- linux - wget URL中的多括号扩展
- python - 在 Amazon Redshift 中创建 Python 2.7 UDF 以在 Postgres 上执行