Назад | Перейти на главную страницу

Ansible заполняет переменную на основе имени хоста

Я погуглил, но не могу найти решение того, что пытаюсь сделать.

Я хочу установить переменную 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)