現時点では、 map関数は次のようにのみ使用できます。
[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attribute='path')
のリターンで
['/var/file1', '/var/file2']
(ドキュメント:http://jinja.pocoo.org/docs/dev/templates/#map)
私はこれを許可することを提案したい:
[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attribute=['path', 'mtime'])
また
[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attributes=['path', 'mtime'])
戻るはずです
[{'path':'/var/file1', 'mtime': '123'},{'path':'/var/file2', 'mtime': '123'}]
これが何に役立つかはすでにわかります。dictのリストを操作して、これらのdictが限られた属性のセットのみを保持するようにします。
この機能が大好きです。
テンプレートでこれが必要な理由がわかりません。 辞書を繰り返し処理し、必要な属性を使用するだけで、同じことが達成されます。 別のデータが必要な場合は、レンダリングする前にPythonでその操作を行うことをお勧めします。 タプルを返すための使用法を_多分_見ることができました。
それでも誰かがこれを必要とする場合は、次のコードを使用できます( playbooks/filter_plugins/mapattributes.py
):
#!/usr/bin/env python
class FilterModule(object):
def filters(self):
return { 'mapattributes': self.mapattributes }
def mapattributes(self, list_of_dicts, list_of_keys):
l = []
for di in list_of_dicts:
newdi = { }
for key in list_of_keys:
newdi[key] = di[key]
l.append(newdi)
return l
経由で使用:
ansible_mounts | mapattributes(['mount', 'size_total', 'size_available',])
この問題が解決され、Nee6ioneソリューションが正式に実装されていないのはなぜですか? これが追加のプラグインなしでサポートされていれば、はるかに簡単になります
最も参考になるコメント
それでも誰かがこれを必要とする場合は、次のコードを使用できます(
playbooks/filter_plugins/mapattributes.py
):経由で使用: