2016-01-29 9 views
12

変数をデフォルト値に設定したいのですが、変数が未定義の場合にのみ設定します。さもなければ私はそれを変えないで保つつもりです。不可能:定義されていない場合にのみ変数を設定します。

私は、これらの二つのアプローチを試してみましたが、それらの両方は、再帰ループを作る:

namespace: "{{namespace|default(default_namespace)}}" 
namespace: "{% if namespace is defined %}{{namespace}}{% else %}{{default_namespace}}{% endif %}" 

答えて

18

あなたは間違ったアプローチを取っているように思え。

variable precedenceに関するAnsibleドキュメントをご覧ください。変数が定義されていない場合、既定の変数を使用することは、Anabilitiesの組み込み機能です。

あなたは、あなたがすべき変数のデフォルト値を定義したい場合は、役割のデフォルト

在庫だから

をvarsの:Ansibleで

は変数の優先順位は次のように起動するから2.x role/defaults/main.ymlに設定してください。 Anabilitiesは、変数が他のどこかで定義されていない場合にのみ、その値を使用します。

もう1つの方法はJinja2 filterです。 |

{{ some_variable | default(5) }} 
+1

Jina2フィルタを使用すると、 '{{変数のような何かをすることが可能です:神社フィルタを使用すると、このような変数のデフォルト値を設定することができますデフォルト(other_variable)}} '? – johnsona

+1

それはうまくいくはずです。あなたはそれを試しましたか?それは動作しますか? –

+2

はい、私は、中括弧を入れなければならないと仮定しましたが、これはうまくいきません。 – johnsona

10
- set_fact: namespace="default_namespace" 
    when: namespace is undefined 
関連する問題