Ansible: fetchlistfromdictフィルター

作成日 2016年03月25日  ·  3コメント  ·  ソース: ansible/ansible

問題の種類

  • 機能のアイデア
    まとめ

辞書の配列があり、いくつかの辞書属性を使用して配列を作成するとします。 これを行うには、 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の方が見栄えがします。

feature

最も参考になるコメント

この例は、ドキュメントに含める必要があります。 この問題を見つけるずっと前に検索しました。

全てのコメント3件

{{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=でこれを取得しようとしただけで、新しい抽出フィルターが機能するように見えます。新しいリリースでそれを試してみるのを楽しみにしています!

この例は、ドキュメントに含める必要があります。 この問題を見つけるずっと前に検索しました。

このページは役に立ちましたか?
0 / 5 - 0 評価