шаблон ansible добавить значение в список -

на основе следующих значений ansible playbook ..

target:  "actual.domain.com"
aliases:
  - "alias1.domain.com"
  - "alias2.domain.com"

Я пытаюсь настроить Ansible шаблон для создания nginx server_name который в данном случае должен быть:

server_name: "actual.domain.com alias1.domain.com alias2.domain.com"

Итак, я попробовал следующий сценарий jinja2 ...

{% if item.aliases is defined %}
    {% set servername = [ item.target ] %}
    {% for alias in item.aliases.iteritems() %}
       {% if alias|length > 0 %}
           {% servername|join(' '), alias %}  # <= line 30
       {% endif %}
    {% endfor %}
    server_name {{ servername }};
 {% else %}
     server_name {{ item.target }};
 {% endif %}
  ....

но это не удается, номер строки: 30, ошибка: обнаружен неизвестный тег "имя_сервера"

где я могу ошибаться ?

спасибо за помощь и HNY !

2 ответов


Кажется, вы сделали это значительно сложнее, чем это необходимо. Почему не что-то вроде этого?

$ ansible-playbook -i hosts play.yml

PLAY [localhost] **************************************************************

TASK: [template src='servername.j2' dest=tmp/servername-{{item.target}}] ******
changed: [localhost] => (item={'target': 'actual.domain.com', 'aliases': ['alias1.domain.com', 'alias2.domain.com']})

PLAY RECAP ********************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0

содержимое файлы

$ tail -n 1000 `find ./ -type f`

==> .//hosts <==
[localhost]
localhost ansible_connection=local


==> .//play.yml <==
- hosts: localhost
  gather_facts: false
  vars:
    servers:
      - target: "actual.domain.com"
        aliases:
          - "alias1.domain.com"
          - "alias2.domain.com"
  tasks:
    - template: src='servername.j2' dest=tmp/servername-{{item.target}}
      with_items: servers


==> .//servername.j2 <==
server_name {{ item.target }} {{ item.aliases|join(" ") }}


==> .//tmp/servername-actual.domain.com <==
server_name actual.domain.com alias1.domain.com alias2.domain.com

Почему бы просто не объединить target и aliases а затем запустите join(' ') на результат?

{% set servername = [ item.target ] %}
{% set aliases = item.aliases if item.aliases is defined else [] %}
{% set ignored = servername.extend(aliases) %}
servername: {{ servername | join(' ') }}