IOT*_*IOT 3 scripting jinja2 ansible
关于如何在 Jinja2 模板中使用动态变量的任何想法。以下是我的 Jinja2 模板中的数据。
oracle.install.asm.diskGroup.disks=/dev/oracleasm/disks/DATA,/dev/oracleasm/disks/ARCH,/dev/oracleasm/disks/OCR
中的变量值为defaults/main.yml:
asm_disk_detail:
- { name: 'OCR', path: '/dev/sde1' }
- { name: 'DATA', path: '/dev/sdf1' }
- { name: 'ARCH', path: '/dev/sdg1' }
Run Code Online (Sandbox Code Playgroud)
我试图使用这些变量值在运行剧本时动态传递。这些值应该自动填充到模板中。
是的,这是可能的。当调用 ansible 角色时,将自动获取 main.yml。您只需为此编写一个 jinja2 模板文件即可。
例如下面的文件:
main.yml 文件的更好表示是
---
asm_disk_detail:
- name: OCR
path: "/dev/sde1"
- name: DATA
path: "/dev/sdf1"
- name: ARCH
path: "/dev/sdg1"
Run Code Online (Sandbox Code Playgroud)
jinja2 模板:支持 for 循环,因此您可以在上述变量 asm_disk_detail 上应用 with_items 并根据需要创建配置文件。
注意:- 请尝试从您这边创建 jinja2 文件,以防出现任何问题,请大喊:)
===============Play 和 jinja2 模板
剧本-->
---
- name: test
hosts: localhost
tasks:
- name: test
include_vars: vars.yml
- name: jinja2
template:
src: template/template.yml
dest: target/target.yml
Run Code Online (Sandbox Code Playgroud)
金贾2-->
{%- for item in asm_disk_detail -%}
{%- if not loop.last -%}
{{ item.path }}/{{ item.name }},
{%- else -%}
{{ item.path }}/{{ item.name }}
{%- endif -%}
{%- endfor -%}
Run Code Online (Sandbox Code Playgroud)
输出-->
oracle.install.asm.diskGroup.disks=/dev/sde1/OCR,/dev/sdf1/DATA,/dev/sdg1/ARCH
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23880 次 |
| 最近记录: |