В Ansible у меня есть playbook с заданием, которое запускается на одном сервере nginx (т.е. nginx.example.com).Цель состоит в том, чтобы создать столько конфигурационных файлов обратного прокси, сколько необходимо (или просто: конфигурационный файл для каждого хоста).Задача включает в себя шаблон модуля.Этот один шаблон в идеале должен быть повторно использован для многих хостов.Задача:
- name: nginx proxied hosts
template:
src: proxy-template.j2
dest: /etc/nginx/sites-enabled/{{ item }}
with_items: "{{ groups['groupname'] }}"
when: hostvars[item].nginx_proxy is defined
Эта задача пройдет через все хосты в группе имя_группы , будет использовать шаблон proxy-template.j2 и создаст файл конфигурации /etc/nginx/sites-enabled/random.example.com
.
Поскольку host_vars / random.example.com имеет конфигурацию ниже yaml:
nginx_proxy:
target_fqdn: random.example.com
target_resource: http://10.10.0.65
server_ip: 10.10.0.10
Когда ansible создает файл конфигурации для этого хоста, я ожидаю, что он примет значения из этого файла хоста yaml vars вhost_vars / random.example.com
одна из строк в proxy-template.j2: server_name {{ vars.nginx_proxy.target_fqdn }};
Проблема в том, что Ansible может успешно проверить, есть ли у хоста атрибут nginx_proxy (в host_vars/random.example.com), он не использует переменные хостов в шаблоне jinja.Ansible либо не выполнит шаг для этого хоста, либо примет переменные сервера nginx, если они указаны в host_vars (в host_vars / nginx.example.com), который должен быть.
Два результата:
host_vars / nginx.example.com и host_vars / random.example.com имеют определенные переменные nginx_proxy.оба имеют разные значения.
Результат: На сервере nginx созданы файлы /etc/nginx/sites-enabled/nginx.example.com
и /etc/nginx/sites-enabled/random.example.com
.Но оба файла содержат переменные сервера nginx.Файл random имеет значения файла nginx.
только для host_vars / random.example.com определены nginx_proxy
переменные.
Результат: ANSIBLE завершается ошибкой с элементом
item ":" random.example.com "," msg ":" AnsibleUndefinedVariable: 'объект dict' не имеет атрибута 'nginx_proxy' "
TLDRansible проверит, имеет ли какой-либо хост nginx_proxy в host_vars, но будет использовать только host_vars хоста nginx для шаблонов. А если host_vars / nginx.example.com не имеет vgin nginx_proxy, то произойдет сбой.
{"изменено": false," item ":" random.example.com "," msg ":" AnsibleUndefinedVariable: 'объект dict' не имеет атрибута 'nginx_proxy' "}