Jinja2 テンプレートで Ansible 変数配列をループする

Jinja2 テンプレートで Ansible 変数配列をループする

Ansible がホストに関する事実を収集する場合、たとえば、ホストのすべてのマウントを取得します。

 "ansible_mounts": [
            {
                "block_available": 7800291, 
                "block_size": 4096, 
                "block_total": 8225358, 
                "block_used": 425067, 
                "device": "/dev/mapper/foobar", 
                "fstype": "xfs", 
                "inode_available": 16403366, 
                "inode_total": 16458752, 
                "inode_used": 55386, 
                "mount": "/", 
                "options": "rw,seclabel,relatime,attr2,inode64,noquota", 
                "size_available": 31949991936, 
                "size_total": 33691066368, 
                "uuid": "2ebc82cb-5bc2-4db9-9914-33d65ba350b8"
            }, 
            {
                "block_available": 44648, 
                "block_size": 4096, 
                "block_total": 127145, 
                "block_used": 82497, 
                "device": "/dev/sda1", 
                "fstype": "xfs", 
                "inode_available": 255595, 
                "inode_total": 256000, 
                "inode_used": 405, 
                "mount": "/boot", 
                "options": "rw,seclabel,relatime,attr2,inode64,noquota", 
                "size_available": 182878208, 
                "size_total": 520785920, 
                "uuid": "c5f7eaf2-5b70-4f74-8189-a63bb4bee5f8"
            }, 

などなど。私がやりたいことは、テンプレートで配列内のすべてのオブジェクトをループし、各「マウント」キーの値を出力したいということです。

私は次のように試します:

    (% for mounts in {{ ansible_mounts }} %)
    Mountpoint: {{ ansible_mounts.mount }}
    (% endfor %)

しかし、うまくいきません。iteritems() などの他のものを試してみましたが、うまくいきません。私の知る限り、Ansible の出力は json 形式です。これが誰かの役に立つなら。誰か解決策を知っていますか、それともこれは stackoverflow の質問でしょうか?

回答をいただければ幸いです。

答え1

単純な構文エラーがあります。括弧の代わりに中括弧を使用する必要があります。

現在、以下のものを所有しています:

(% for mounts in {{ ansible_mounts }} %)
Mountpoint: {{ ansible_mounts.mount }}
(% endfor %)

これらは括弧ではなく中括弧、つまり と にする必要があり{%ます%}

さらに、 で選択した変数名はforなのでmounts、ループ内で各オブジェクトを取得するには実際にこれを使用する必要があります。

最後に、 for ループ内の変数を囲む中括弧は必要ありません。

これらのエラーを修正すると、次のようになります。これで正常に動作するはずです。

{% for mounts in ansible_mounts %}
Mountpoint: {{ mounts.mount }}
{% endfor %}

関連情報