2016-06-17 8 views
2

私は2.1を使用しています。ほとんどのWebサーバーにはIPが1つしかありませんが、一部のサーバーには2つのIPがあります。各Webサーバーには、内部使用のための特別なWebサイトがあります。このサイトに使用するIPを定義する特別な変数があります。INTERNALWEBSITE_LISTEN_IPがnullの場合 - メインIPを使用していない場合はhost_varsのカスタムIPを使用します。 roles/web_std/defaults/main.yml可能:条件を使ってjinja2テンプレートをコンパクトにする方法

内容:inventory/host_vars/100.200.1.2

r_web_std: 
    INTERNALWEBSITE_LISTEN_IP: null 

内容:

r_web_std: 
    INTERNALWEBSITE_LISTEN_IP: "100.200.1.4" 

(このホストが2つの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

r_web_std: INTERNALWEBSITE_LISTEN_IP: "{{ ansible_default_ipv4.address }}" を使用して、それを必要とすること、どこでもINTERNALWEBSITE_LISTEN_IPを使用するようにroles/web_std/defaults/main.ymlを変更してみてください?

1

私は@Kylesアプローチが好きです。しかし、完全性のために、defaultフィルタを使用することもできます。

{{ r_web_std.INTERNALWEBSITE_LISTEN_IP | default(ansible_default_ipv4.address) }} 
関連する問題