【问题标题】:how to pass ansible group_vars array to jinja template如何将 ansible group_vars 数组传递给 jinja 模板
【发布时间】:2019-02-08 11:34:09
【问题描述】:

我正在尝试使用 ansible jinja2 模板化 python 脚本。当我将迭代项传递给模板以进一步生成 python 字典时不起作用。

提前感谢您的帮助!

[group_vars]
backups:
- sap

sap:
- db_host: sadf
- db_name: xyz
- db_user: xzzx
- db_pass: alskdf

ansible 模板看起来像:

- name: transfer backup script file
  template:
    src: backup.py.j2
    dest: "{{ item }}_backup.py"
    mode: 0755
  with_items:
    - "{{ backups }}"

jinja python 模板如下:

dbs = {
  {% for mongo_d in item %}

    "{{ mongo_d.db_name }}" :
    {
    "db_host": "{{ mongo_d.db_host }}",
    "db_user": "{{ mongo_d.db_user }}",
    "db_password": "{{ mongo_d.db_password }}",
 ]},

 {% endfor %}

因错误而失败:

item: sap
  msg: 'AnsibleUndefinedVariable: ''unicode object'' has no attribute ''db_name'''

【问题讨论】:

    标签: python ansible jinja2


    【解决方案1】:

    你的数据结构比较麻烦,用字典代替单键值对的列表:

    backups:
      - sap
    
    sap:
      db_host: sadf
      db_name: xyz
      db_user: xzzx
      db_password: alskdf
    

    您无需在模板中进行迭代。

    任务:

    - name: transfer backup script file
      template:
        src: backup.py.j2
        dest: "{{ item }}_backup.py"
        mode: 0755
      with_items:
        - "{{ backups }}"
      vars:
        mongo_d: "{{ lookup('vars', item) }}"
    

    模板:

    dbs = {
        "{{ mongo_d.db_name }}" :
        {
        "db_host": "{{ mongo_d.db_host }}",
        "db_user": "{{ mongo_d.db_user }}",
        "db_password": "{{ mongo_d.db_password }}",
     ]},
    

    我更正了db_password 的错字,但由于模板中的不一致,我将它们保留在问题中。

    【讨论】:

    • 太棒了@techraf。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多