У меня есть цель создать файл параметров автоматизированного c dynamici c. Это воссоздать, когда некоторые изменения были добавлены. Это не обычная структура с yaml. Некоторые переменные хоста имеют дополнительные параметры. В моем случае использования мы можем добавить новый экземпляр tomcat для одного из приложений.
param.yml
db:
env:
proxy1:
host1:
tomcat1:
tomcat2:
proxy2:
host1:
tomcat1:
parameter_one: xxx
parameter_two: xyz
tomcat2:
proxy3:
host1:
tomcat1:
tomcat2:
tomcat3:
run ansible:
ansible-playbook playbook.yml --extra_vars "server_proxy=proxy3 server_tomcat=tomcat4 server_name=host1"
playbook.yml Создание частей конфигурации, а затем сборка.
(...)
- template:
src: scheme.j2
dest: "parts/proxy_{{item}}"
with_items:
- {{ proxy_list }}
(..)
схема.j2
{{item| indent(2, True)}}:
{% for servername in db.env[item] | list %}
{{ servername | indent(4, True) }}:
{% for tomcats in db.env[item][servername] | list %}
{{ tomcats|indent(6, True) }}:
{% endfor %}
{% if server_proxy == item and server_name==servername %}
{% for tomcat in tomcat_list %}
{{tomcat|indent(6, True)}}:
{% endfor %}
{% endif %}
{% endfor%}
Приведенная выше схема воссоздает все без дополнительных параметров.
ожидаемые результаты _newparam.yml
db:
env:
proxy1:
host1:
tomcat1:
tomcat2:
proxy2:
tomcat1:
parameter_one: xxx
parameter_two: xyz
tomcat2:
proxy3:
tomcat1:
tomcat2:
tomcat3:
tomcat4:
Я получаю результат:
db:
env:
proxy1:
host1:
tomcat1: **without**
tomcat2:
proxy2:
tomcat1:
tomcat2:
proxy3:
tomcat1:
tomcat2:
tomcat3:
tomcat4:
Я был попробуйте условное в схеме, но условное в двойном l oop для пусто
схема.j2
{{item| indent(2, True)}}:
{% for servername in db.env[item] | list %}
{{ servername | indent(4, True) }}:
{% for tomcats in db.env[item][servername] | list %}
{{ tomcats|indent(6, True) }}:
{% endfor %}
{% if server_proxy == item and server_name==servername %}
{% for tomcat in tomcat_list %}
{{tomcat|indent(6, True)}}:
{% if item == "proxy1" %}{% set additonal= db.env.proxy1.host1.tom1 | dict2items %}
{{additional}}{% endif %}
{% endfor %}
{% endif %}
{% endfor%}
Это просто разрешение для этого варианта использования ? Можно ли добавить нерегулярные дополнительные параметры в мой файл параметров и воссоздать его?