【问题标题】:How to use a list of jinja templates store in a YML file with a Playbook?如何使用存储在 YML 文件中的 jinja 模板列表和 Playbook?
【发布时间】:2022-08-19 18:50:20
【问题描述】:

我需要帮助,因为我被一本剧本困住了 2 天。

首先,我有一个 YAML 文件,其中包含神社模板

---
template lab:
 - first_template.j2
 - second_template.j2
 - third_template.j2

它存在一个对每个路由器都有价值的 YAML 文件,存储在\"./yml/{{ inventory_hostname }}.yml\"

我有一个剧本 Ansible 需要使用 jinja 模板来生成.conf文件。

---
- name: Generate .conf file
  hosts: my_routers
  gather_facts: no
  vars: 
  - jinja_templates: \"{{ (lookup(\'template\', \'./template_list.yml\') | from_yaml).template_lab }}\"
  vars_files: 
  - \"./yml/{{ inventory_hostname }}.yml\"
  
  tasks:
    - name: test
      debug:
        msg: \"{{ jinja_templates }}\"
    - name: Generate configuration files
      template:
        src: \"./templates/{{ jinja_templates }}\"
        dest: \"./tmp/general/{{ inventory_hostname }}.conf\"
        mode: \"0644\"

我播放时剧本的输出:

Could not find or access \'./templates/[\'first_template.j2\', \'second_template.j2\', \'third_template\'.j2\']\'

1:第一个问题是{ jinja_templates }}输出包含 \"[\" \"]\" 和 \"\'\" \"\'\",因此 Ansible 无法使用 Jinja 模板。

2:如何进行迭代以使用所有 jinja 模板并在单个文件中生成配置?

我知道我没有使用 Ansible\' Playbook 的正确结构!暂时是实验测试:)

谢谢

    标签: ansible yaml jinja2


    【解决方案1】:

    您将模板文件名作为一行传递:

    - debug:
       msg: "{{ jinja_templates }}"
    

    输出是一个数组:

    TASK [test] *******************************************************************************
    ok: [localhost] => {
        "msg": [
            "first_template.j2",
            "second_template.j2",
            "third_template.j2"
        ]
    }
    

    您应该遍历它以将它们作为单个值获取:

    - debug:
       msg: "{{ item }}"
      loop: "{{ jinja_templates }}"
    
    TASK [test] *******************************************************************************
    ok: [localhost] => (item=first_template.j2) => {
        "msg": "first_template.j2"
    }
    ok: [localhost] => (item=second_template.j2) => {
        "msg": "second_template.j2"
    }
    ok: [localhost] => (item=third_template.j2) => {
        "msg": "third_template.j2"
    }
    

    除此之外,您在模板任务dest: "./tmp/general/{{ inventory_hostname }}.conf" 中定义了相同的目标文件。
    这将导致只编写最后一个模板文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多