2016-06-17 7 views
2

verdichtet, verwende ich ansible 2.1. Die meisten Webserver haben nur eine IP, aber einige Server haben zwei IPs. Jeder Webserver verfügt über eine spezielle Website für die interne Nutzung, ich habe eine spezielle Variable, um zu definieren, welche IP für diese Site verwendet wird: wenn INTERNALWEBSITE_LISTEN_IP null ist - verwendete Haupt-IP, falls nicht - benutzerdefinierte IP von host_vars.Ansible: wie man jinja2 Schablone unter Verwendung der Bedingungen

Inhalt roles/web_std/defaults/main.yml:

r_web_std: 
    INTERNALWEBSITE_LISTEN_IP: null 

Inhalt inventory/host_vars/100.200.1.2:

r_web_std: 
    INTERNALWEBSITE_LISTEN_IP: "100.200.1.4" 

(diese Host verfügt über zwei IP: 100.200.1.2 und 100.200.1.4 und 100.200.1.2 ist Standard-IP)

und hier ist Fragment von server.conf.j2:

DocumentRoot /www/{% if r_web_std.INTERNALWEBSITE_LISTEN_IP == null %}{{ ansible_default_ipv4.address }}{% else %}{{ r_web_std.INTERNALWEBSITE_LISTEN_IP }}{% endif %}/www 
ErrorLog /var/log/httpd/{% if r_web_std.INTERNALWEBSITE_LISTEN_IP == null %}{{ ansible_default_ipv4.address }}{% else %}{{ r_web_std.INTERNALWEBSITE_LISTEN_IP }}{% endif %}/error.log 
CustomLog "/var/log/httpd/{% if r_web_std.INTERNALWEBSITE_LISTEN_IP == null %}{{ ansible_default_ipv4.address }}{% else %}{{ r_web_std.INTERNALWEBSITE_LISTEN_IP }}{% endif %}/access.log" combined 

Meine Augen!

Ist es möglich, dies zu vereinfachen?

{% if r_web_std.INTERNALWEBSITE_LISTEN_IP == null %} 
{{ ansible_default_ipv4.address }} 
{% else %} 
{{ r_web_std.INTERNALWEBSITE_LISTEN_IP }} 
{% endif %} 

Antwort

2

Try roles/web_std/defaults/main.yml Ändern

zu verwenden

r_web_std: INTERNALWEBSITE_LISTEN_IP: "{{ ansible_default_ipv4.address }}" und INTERNALWEBSITE_LISTEN_IP einfach überall zu benutzen, die es braucht?

1

Ich mag @Kyles Ansatz. Der Vollständigkeit halber können Sie auch den default Filter verwenden:

{{ r_web_std.INTERNALWEBSITE_LISTEN_IP | default(ansible_default_ipv4.address) }} 
Verwandte Themen