Jinja 模板文件中的自引用字典(一个属性是另一个属性的结果)

问题描述 投票:0回答:1

我正在尝试创建一个字典,其中一个字段依赖于另一个字段,想象一下 group_vars/all 文件包含类似以下内容:

people_names:
 - first_name: tom
   last_name: hardy
   full_name: " {{ first_name}} {{ last_name}} "

任务很简单,我正在尝试调试这个:

- name: Test jinja2template
  template: 
    src: test.j2 
    dest: test.conf

test.j2 会是这样的:

{% for person in people_names %}
person_full_name = person.full_name
{% endfor %}

这在 Ansible/Jinja 中可能吗?

为了构建这个,我正在运行命令:

ansible-playbook jinja2test.yml --check --diff --connection=local

当我运行此命令时,我收到

AnsibleUndefinedVariable
的错误
last_name

ansible jinja2
1个回答
1
投票

问:“创建一个对象,其中一个字段依赖于另一个字段。”

答:这是不可能的。例如参见#8603。如果需要的话,创建包含全名的字典。例如

  vars:
    people_names:
      - first_name: tom
        last_name: hardy
  tasks:
    - set_fact:
        people_full_names: "{{ people_full_names|default([]) +
                               [item|combine({'full_name': full_name})] }}"
      loop: "{{ people_names }}"
      vars:
        full_name: "{{item.first_name}} {{ item.last_name }}"

    - debug:
        var: people_full_names

给予

    "people_full_names": [
        {
            "first_name": "tom", 
            "full_name": "tom hardy", 
            "last_name": "hardy"
        }
    ]
© www.soinside.com 2019 - 2024. All rights reserved.