2016-06-17 4 views
2

Я использую доступный 2.1. У большинства веб-серверов есть только один IP-адрес, но у некоторых серверов есть два IP-адреса. У каждого веб-сервера есть специальный веб-сайт для внутреннего использования, у меня есть специальная переменная для определения того, какой IP-адрес используется для этого сайта: если INTERNALWEBSITE_LISTEN_IP является нулевым - используется основной IP-адрес, если нет - пользовательский IP-адрес из host_vars.Ansible: как сжимать шаблон jinja2, используя условия

содержание roles/web_std/defaults/main.yml:

r_web_std: 
    INTERNALWEBSITE_LISTEN_IP: null 

содержание на inventory/host_vars/100.200.1.2:

r_web_std: 
    INTERNALWEBSITE_LISTEN_IP: "100.200.1.4" 

(узел имеет два IP: 100.200.1.2 и 100.200.1.4 и 100.200.1.2 по умолчанию IP)

и здесь фрагмент от 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 

Мои глаза!

Можно ли это упростить?

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

ответ

2

Попробуйте изменить roles/web_std/defaults/main.yml использовать

r_web_std: INTERNALWEBSITE_LISTEN_IP: "{{ ansible_default_ipv4.address }}" и просто использовать INTERNALWEBSITE_LISTEN_IP везде, где это нужно?

1

Мне нравится подход @Kyles. Но для полноты вы также можете использовать фильтр default:

{{ r_web_std.INTERNALWEBSITE_LISTEN_IP | default(ansible_default_ipv4.address) }} 
Смежные вопросы