шаблон 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(' ') }}