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

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)

我试图使用这些变量值在运行剧本时动态传递。这些值应该自动填充到模板中。

err*_*404 5

是的,这是可能的。当调用 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)