Я пытаюсь создать собственный файл sudoer с использованием шаблона Jinja2, но оказывается, что результат не соответствует ожидаемому.
Переменные :
container_group: sistemas
container_name:
- template-01
- template-02
Содержание роли :
- name: Create sudoer file for tomcat container management
template:
src: sistemas.j2
dest: /etc/sudoers.d/sistemas
owner: root
group: root
mode: 0440
validate: visudo -c -f %s
Шаблон Jinja :
#{{ ansible_managed }}
{% for instance in container_name %}
Cmnd_Alias {{ instance | upper }} = /usr/bin/systemctl restart tomcat@{{ instance }}, /usr/bin/systemctl stop tomcat@{{ instance }}, /usr/bin/systemctl start tomcat@{{ instance }}
{% endfor %}
%{{ container_group }} ALL=(ALL) NOPASSWD: {{ container_name | map('upper') | join (', ') }}
Ожидаемый результат:
Cmnd_Alias TEMPLATE-01 = /usr/bin/systemctl restart tomcat@template-01, /usr/bin/systemctl stop tomcat@template-01, /usr/bin/systemctl start tomcat@template-01
Cmnd_Alias TEMPLATE-02 = /usr/bin/systemctl restart tomcat@template-02, /usr/bin/systemctl stop tomcat@template-02, /usr/bin/systemctl start tomcat@template-02
%sistemas ALL=(ALL) NOPASSWD: TEMPLATE-01, TEMPLATE-02
Реальный результат:
Cmnd_Alias <generator object do_map at 0x7fac65dd70d0> = /usr/bin/systemctl restart tomcat@template-01, /usr/bin/systemctl stop tomcat@template-01, /usr/bin/systemctl start tomcat@template-01
Cmnd_Alias <generator object do_map at 0x7fac65dd70d0> = /usr/bin/systemctl restart tomcat@template-02, /usr/bin/systemctl stop tomcat@template-02, /usr/bin/systemctl start tomcat@template-02
%sistemas ALL=(ALL) NOPASSWD: TEMPLATE-01, TEMPLATE-02
2019/09/29 - Обновление:
Я добавил отладку впоказать выходные данные шаблона при получении значений переменных.
Однако возникает ошибка проверки.
- name: Exibe o resultado do template jinja
debug:
msg: "{{ lookup('template', 'sistemas.j2') }}"
Изображение, показывающее наиболее подробную ошибку