ansible - Ansible:在另一个循环中引用的循环变量
问题描述
有没有办法引用loop1中的另一个变量以在loop2中使用?
这是我的虚拟剧本,它不起作用:
---
- name: test
hosts: localhost
vars:
- br:
- dir1
- dir2
- folders:
- /folder1/"{{ item.1 }}"/sub1
- /folder1/"{{ item.1 }}"/sub2
tasks:
- name:
debug:
msg: "{{ item.0 }}"
with_nested:
- "{{ folders }}"
- "{{ br }}"
我想要实现的输出是:
/folder1/dir1/sub1
/folder1/dir1/sub2
/folder1/dir2/sub1
/folder1/dir2/sub2
Thank you. Appreciate your response.
解决方案
您可以使用 Jinja 创建结构,例如
- hosts: localhost
vars:
root:
- folder1
br:
- dir1
- dir2
sub:
- sub1
- sub2
_folders: |-
{% for r in root %}
{% for b in br %}
{% for s in sub %}
- /{{ r }}/{{ b }}/{{ s }}
{% endfor %}
{% endfor %}
{% endfor %}
folders: "{{ _folders|from_yaml }}"
tasks:
- debug:
var: folders
给你想要的
folders:
- /folder1/dir1/sub1
- /folder1/dir1/sub2
- /folder1/dir2/sub1
- /folder1/dir2/sub2
您可以将其隐藏在文件中并将动态数据与代码分开,例如下面的播放给出相同的结果
shell> cat my_vars.yml
root:
- folder1
br:
- dir1
- dir2
sub:
- sub1
- sub2
_folders: |-
{% for r in root %}
{% for b in br %}
{% for s in sub %}
- /{{ r }}/{{ b }}/{{ s }}
{% endfor %}
{% endfor %}
{% endfor %}
folders: "{{ _folders|from_yaml }}"
shell> cat playbook.yml
- hosts: localhost
vars_files:
- my_vars.yml
tasks:
- debug:
var: folders
推荐阅读
- angular - 使用反应式表单在 Angular 中检查后,表达式发生了变化
- javascript - 当鼠标快速通过元素时,onMouseEnter 不起作用
- ios - 如何使用 UICollectionViewFlowLayout 使集合中的每个视图居中?
- json - 如何从 SQLITE UNION 查询中获取单个 JSON 对象?
- java - 无法在 Java 应用程序中加载 JDBC 驱动程序类 [oracle.jdbc.driver.OracleDriver]
- php - PHP - 在回调函数的深层传递参数
- javascript - Javascript 对象 ID 字段未传递给事件处理程序
- python - numpy 可以生成大于 64 位的随机数吗?
- angular - 在 Angular 中以模态显示动态数据的问题
- php - phpunit-如何在测试用例中用 mokery 模拟对象