简体   繁体   English

在 ansible Playbook 中使用 Jinja2 模板中的变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM