[英]Using variables in the Jinja2 template in ansible Playbook
Any idea of how we can use dynamic variables inside the Jinja2 Template.关于我们如何在 Jinja2 模板中使用动态变量的任何想法。 Below is the data from my Jinja2 template.下面是来自我的 Jinja2 模板的数据。
oracle.install.asm.diskGroup.disks=/dev/oracleasm/disks/DATA,/dev/oracleasm/disks/ARCH,/dev/oracleasm/disks/OCR
The variable values in the defaults/main.yml
is: defaults/main.yml
的变量值为:
asm_disk_detail:
- { name: 'OCR', path: '/dev/sde1' }
- { name: 'DATA', path: '/dev/sdf1' }
- { name: 'ARCH', path: '/dev/sdg1' }
I am trying to use these variable values to pass dynamically at the time of running the playbook.我正在尝试使用这些变量值在运行剧本时动态传递。 These values should automatically get populated in the template.这些值应自动填充到模板中。
Yes, this is possible.是的,这是可能的。 The main.yml will be sourced automatically when the ansible role is invoked.调用 ansible 角色时,将自动获取 main.yml。 You just have to write a jinja2 template file for the same.您只需要为此编写一个 jinja2 模板文件。
For example the below file:例如下面的文件:
A better representation of the main.yml file would be main.yml 文件的更好表示是
---
asm_disk_detail:
- name: OCR
path: "/dev/sde1"
- name: DATA
path: "/dev/sdf1"
- name: ARCH
path: "/dev/sdg1"
jinja2 template: supports for loop so you can apply with_items on the above variable asm_disk_detail and create a config file as needed. jinja2 模板:支持 for 循环,因此您可以在上述变量 asm_disk_detail 上应用 with_items 并根据需要创建配置文件。
Note:- Please try the jinja2 file creation from your side in case any issues please shout :)注意:-请尝试从您身边创建 jinja2 文件,以防万一有任何问题请大喊 :)
===============Play and jinja2 template ==============播放和jinja2模板
playbook-->剧本-->
---
- name: test
hosts: localhost
tasks:
- name: test
include_vars: vars.yml
- name: jinja2
template:
src: template/template.yml
dest: target/target.yml
jinja2--> jinja2-->
{%- for item in asm_disk_detail -%}
{%- if not loop.last -%}
{{ item.path }}/{{ item.name }},
{%- else -%}
{{ item.path }}/{{ item.name }}
{%- endif -%}
{%- endfor -%}
output-->输出-->
oracle.install.asm.diskGroup.disks=/dev/sde1/OCR,/dev/sdf1/DATA,/dev/sdg1/ARCH
Use Ansible template module with a For loop in your template.在模板中使用带有For 循环的Ansible 模板模块。
{% for disk in asm_disk_detail %}
disk name: {{ disk.name}}
disk path: {{ disk.path }}
{% endfor %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.