Конечно, если для вас развертывание означает другой хост Ansible, вы можете назначить переменную customError
на уровне хоста в инвентаре.
Вот пример, с которого нужно начать :
Инвентарь, в котором указано определение переменной customError
:
all:
hosts:
server1.nginx.tld:
customError: true
server2:.nginx.tld:
customError: false
Плейбук, содержащий основы c развертывание файла шаблона :
---
- hosts: all
tasks:
- name: Copy default Nginx config
template:
src: default.j2
dest: /etc/nginx/sites-enabled/default
Шаблон в формате Jinja, использующий базовое c условие на основе переменной хоста, default.j2 :
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
{% if customError %}
error_page 404 /custom_404.html;
location = /custom_404.html {
root /usr/share/nginx/html;
internal;
}
{% endif %}
}
Выполнение:
$ ansible-playbook playbook.yml --inventory=inventory.yaml
PLAY [all] *********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [server2.nginx.tld]
ok: [server1.nginx.tld]
TASK [Copy default Nginx config] ***********************************************
changed: [server1.nginx.tld]
changed: [server2.nginx.tld]
PLAY RECAP *********************************************************************
server1.nginx.tld : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
server2.nginx.tld : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
И чтобы проверить, что это сгенерировало, еще немного ad-ho c Ansible:
$ ansible -a 'cat /etc/nginx/sites-enabled/default' all --inventory=inventory.yaml
server1.nginx.tld | CHANGED | rc=0 >>
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
error_page 404 /custom_404.html;
location = /custom_404.html {
root /usr/share/nginx/html;
internal;
}
}
server2.nginx.tld | CHANGED | rc=0 >>
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
}