2016-07-14 4 views
1

私はSaltStackを使用してBIND9ゾーンファイルを管理しています。以前私はこのような柱のデータを使用していますデータ型に依存するJinja条件付き節

このような(単に読みやすくするためにインデント)神社テンプレートファイルと一緒に
zones: 
    example.com: 
    a: 
     www1: 1.2.3.4 
     www2: 1.2.3.5 

{% if info.a is defined %} 
    {% for host, defn in info.a.items() %} 
    {{ host }} IN A {{ defn }} 
    {% endfor %} 
{% endif %} 

infoがコンテキスト変数(zones.example.comで辞書)であります。

ここで、Aレコードごとに複数のIPを定義できる必要があります。 - 神社テンプレートに - スカラー値(単一のIPアドレスを表す)、またはされてdefnの違いを知ることが

zones: 
    example.com: 
    a: 
     www1: 1.2.3.4 
     www2: 1.2.3.5 
     www: 
     - 1.2.3.4 
     - 1.2.3.5 

必要があります。前の例では、私はサブドメインwwwラウンドロビンに望んでいたと仮定リスト(IPアドレスの集合を表す)。ような何か:this threadから

{% for host, defn in info.a.items() %} 
     {% if DEFN_IS_A_LIST_OBJECT %} 
     {% for ip in defn %} 
      {{ host }} IN A {{ ip }} 
     {% endfor %} 
     {% else %} 
     {{ host }} IN A {{ defn }} 
     {% endif %} 
    {% endfor %} 

は私がif isinstance(defn, list)を試してみましたが、私は得る:

Unable to manage file: Jinja variable 'isinstance' is undefined 

私もif len(defn)を試みたが、実現の長さ()文字列だけでなく、リストへのTruthy対応させていただきます。また、しかし、エラーとして報告されています

Unable to manage file: Jinja variable 'len' is undefined 

はどのようにして、リストや神社内の文字列を区別することができますか?値は文字列のみまたはリストすることができた場合

答えて

2

、あなただけのあなたに感謝、これはbuiltin test

{% if defn is not string %} 
    {% for ip in defn %} 
     {{ host }} IN A {{ ip }} 
    {% endfor %} 
{% else %} 
+0

パーフェクトと文字列でないことを確認することができます! –

関連する問題