Объект, ссылающийся на себя (поле является результатом другого) Jinja - PullRequest
1 голос
/ 24 марта 2020

Здравствуйте, парни и девушки: D

Я пытаюсь создать объект, в котором поле зависит от другого, представьте, что в файле group_vars / all есть что-то вроде:

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

Задача очень проста, просто (я пытаюсь отладить это)

---
- hosts: 127.0.0.1
  tasks:
  - 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

Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать и заранее спасибо: D

РЕДАКТИРОВАТЬ : Когда я запускаю это, я получаю AnsibleUndefinedVariable для last_name

1 Ответ

1 голос
/ 24 марта 2020

Q: "Создать объект, в котором поле зависит от другого."

A: Это невозможно. См. Например # 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"
        }
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...