Я погуглил, но не могу найти решение того, что пытаюсь сделать.
Я хочу установить переменную jinja2 на основе имени хоста сервера (я использую разные сертификаты и хочу, чтобы ansible создавал ssl.conf
на основе имени хоста).
Я бы хотел, чтобы диктатор сделал что-то вроде:
Certmapping:
host1: www.mydomain.com
host2: beta.mydomain.com
host3: partner.mydomain.com
А затем шаблон, который ссылается на dict так:
SSLCertificateFile /etc/pki/tls/certs/<domain>.crt
У меня мог быть чудовищный:
if {{ ansible_hostname }} == 'host1' ...
Но это выглядит менее элегантно.
Следуя совету неутомимого @ michaelhampton, вот как вы используете host_vars
project root
-- host_vars
-- host1.yml
-- host2.yml
-- host3.yml
-- my_playbook.yml
Поэтому, когда вы настраиваете host1.yml, вы можете просто поместить туда нужное значение:
---
Certmap: www.mydomain.com
И когда вам нужно получить к нему доступ, вы просто обращаетесь к нему так:
{{ Certmap }}
Он будет меняться для разных хостов, если у каждого хоста есть файл host_vars с Certmap
определено.
Учитывая ваш Certmapping
словарь, просто используйте следующее:
- set_fact:
certificate_configuration_line: "SSLCertificateFile /etc/pki/tls/certs/{{Certmapping[ansible_hostname]}}.crt"
(set_fact
просто в качестве примера, вы можете использовать ссылку прямо в lineinfile
или шаблон Jinja2)