0
私はJinja2にはかなり新しく、これを実現する方法が不思議です。Anipal/Jinja2での複雑なフィルタリング
は、私は次のようvars
を持って言う:
---
servers:
192.168.0.1:
names:
- foo.example.com
- foo
exports:
data:
foo1: /disks/foo1
foo2: /disks/foo2
192.168.0.2:
...
私は/disks/foo2
に/disks/foo1
と/data/foo2
にシンボリックリンク/data/foo1
を作成したいのですが、唯一のfoo
サーバー上;他のサーバーでは、それぞれのエクスポートにシンボリックリンクを作成します。だから私はfile status=link with_items=...
が正しいことだと思った。 Pythonでは、以下のロジックを使用して必要な配列を得ることができます:
[
{ 'mount': mount, 'export': export }
for ip, server in servers.iteritems()
if ansible_hostname in server['names']
and 'exports' in server
and 'data' in server['exports']
for mount, export in server['exports']['data'].iteritems()'
]
私はJinja2でこれを行う方法がわかりません。私は
{{ servers | select('ansible_hostname in self.names') | ... }}
のようにしたかったが、うまくいかなかった。このロジック用のプラグインを作成する必要がありますか?または私のアプローチがすべて間違っていると私はservers
データの構造を再考する必要がありますか?私のコメントから
なぜ 'servers [ansible_hostname] .exports.data'にループしないのですか? –
@ ConstantinSuvorov: 'ansible_hostname'のどの形式が必要なのか分かりません。今、私はそれを愚かに思っています。おそらく私が '目録 'に入れたものでしょうか?私は明日それを試して遊びます。その間、私はまだJinja2の複雑な変換について興味があります。 – Amadan
通常は 'inventory_hostname'変数を使います。これは、インベントリのホスト名として使用します。 'servers [ansible_hostname]'は 'anals_hostname'の値で' servers'キーにアクセスします。ただ好奇心のために、あなたがチェックアウトすることができ、[この](http://stackoverflow.com/a/40395995/2795592)と[この](http://stackoverflow.com/a/40036807/2795592)。 –