Hi all,
I try to simplify my Nginx template by using extends template. To do that, I follow the Jinja2 doc
I create a child template:
{% extends “nginx_servers.j2” %}
{% block listen %}
listen {{ item.server.listen }};
{% endblock %}
{% block servername %}
server_name {{ item.server.server_name }};
{% endblock %}
{% block root %}
# Root directory
root {{ item.server.root }};
{% endblock %}
{% block ssl %}
# Ssl configuration
ssl on;
ssl_certificate {{ item.server.ssl_certificate }};
ssl_certificate_key {{ item.server.ssl_certificate_key }};
{% endblock %}
{% block logs %}
# Logs
access_log {{ item.server.access_log }};
error_log {{ item.server.error_log }};
{% endblock %}
{% block location %}
location {{ loc.name }} {
{% for k,v in loc %}
{{ k }} {{ v }};
{% endfor %}
}
{% endblock %}
Then I create my vhosts template ( nginx_servers.j2 ):
server {
{% block listen %}{% endblock %}
{% if ‘server_name’ in item.server %}
{% block servername %}{% endblock %}
{% endif %}
{%if ‘root’ in item.server %}
{% block root %}{% endblock %}
{% endif %}
{% if ‘ssl’ in item.server %}
{% block ssl %}{% endblock %}
{% endif %}
{% if ‘access_log’ in item.server %}
{% block logs %}{% endblock %}
{% endif %}
{% for loc in item %}
{% if loc.find(‘location’) != -1 %}
{% block location scoped %}{{ loc }}{% endblock %}
{% endif %}
{% endfor %}
}
My variable file:
nginx_servers:
- server:
name: “site1”
listen: 80
server_name: “site1”
location1:
name: “/”
try_files: “$uri $uri/ /index.php”
location2:
name: “bla”
auth_basic: “"Restricted Area"”
auth_basic_user_file: “xxxxxxxxxxx”
- server:
name: “site2”
listen: 443
server_name: “site2”
location1:
name: “/”
try_files: “$uri $uri/ /index.php”
location2:
name: “~ \.ini$”
deny: “all”
location3:
name: “~ /\.ht”
allow: “all”
}
All the simple block works fine ( servername, listen … ), but when I run the location block, I get this error :
fatal: [127.0.0.1] => {‘msg’: “KeyError: ‘undefined variable: 0’”, ‘failed’: True}
I try to just print loc variable in the block, but I get the same error.
Does this feature is available in Ansible ?
Thanks.