It sure is, if for you a deploy means a different Ansible host then, you can assign your variable customError
at host level, in the inventory.
Here is an example to start with:
The inventory, that show the definition of the variable customError
:
all:
hosts:
server1.nginx.tld:
customError: true
server2:.nginx.tld:
customError: false
The playbook, containing a basic deploy of a template file:
---
- hosts: all
tasks:
- name: Copy default Nginx config
template:
src: default.j2
dest: /etc/nginx/sites-enabled/default
The template, in Jinja format, using a basic condition, based on the host variable, 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 %}
}
Executing it:
$ 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
And to verify what this generated, a little more ad-hoc 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;
}