辞書の配列があり、いくつかの辞書属性を使用して配列を作成するとします。 これを行うには、 selectattr、map 、および新しい抽出フィルターといういくつかの方法があります。
これは、あるグループのホストを辞書の初期配列として使用することを決定するまではうまく機能します。 したがって、フィルターを使用してグループ内のホストごとにhostvars
を取得する必要があります。 通常、これはいくつかのjinjaの反復で回避できますが、変数の設定では機能しません。
それは解決策があると言った:
def fetchlistfromdict(d, l):
result = []
for item in l:
result.append(d[item])
return result
class FilterModule(object):
def filters(self):
return {
'fetchlistfromdict': fetchlistfromdict,
}
そして今:
{{ hostvars|fetchlistfromdict(groups['webservers']) |map(attribute='custom_facts.aliases.0.ip')|list}}
このケースは非常に具体的であるように思われ、 route53
モジュールに関連している可能性があります。
では、このフィルターをansibleに追加できますか? PRをしませんか? ネーミングはどうですか? 元のファイルを保存しましたが、 list_from_dict
の方が見栄えがします。
{{hostvars | fetchlistfromdict(groups ['webservers'])| map(attribute = 'custom_facts.aliases.0.ip')| list}}
これは何と違うのですか
{{groups ['webservers'] | map( 'extract'、hostvars、['custom_facts'、 'aliases'、 '0'、 'ip'])| list}}
?
@amenonsen良い点、私はmap(attribute=
でこれを取得しようとしただけで、新しい抽出フィルターが機能するように見えます。新しいリリースでそれを試してみるのを楽しみにしています!
この例は、ドキュメントに含める必要があります。 この問題を見つけるずっと前に検索しました。
最も参考になるコメント
この例は、ドキュメントに含める必要があります。 この問題を見つけるずっと前に検索しました。