Extends template with ansible

299 views
Skip to first unread message

Christophe Biguereau

unread,
Dec 15, 2015, 11:04:09 AM12/15/15
to Ansible Project
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.

Christophe Biguereau

unread,
Dec 17, 2015, 3:32:57 AM12/17/15
to Ansible Project
Does anybody already use extends with variable in ansible ?
Reply all
Reply to author
Forward
0 new messages