私はAnabilitiesのvarsファイルからの配列値を持つ辞書を持っています。Jinjaでユニークなペアのリストを作成するには?
ipfilter:
zone1:
- { application: "app 1", local_ip: 1.1.1.1 }
- { application: "app 1", local_ip: 1.1.1.1 }
- { application: "app 2", local_ip: 2.2.2.2 }
zone2:
- { application: "app 3", local_ip: 3.3.3.3 }
- { application: "app 4", local_ip: 4.4.4.4 }
- { application: "app 4", local_ip: 4.4.4.4 }
問題は、それが次のスクリプトには関係ありませんので、オブジェクトが、私は一例では省略している追加のデータを、含まれているためapplication
とlocal_ip
のタプルは、一意ではないこと、です。
#! /bin/bash
set -eu
cat <<';' |
{% for zone, rules in ipfilter.items() %}
{% for rule in rules %}
{{zone}} {{rule.application}} {{rule.local_ip}}
{% endfor %}
{% endfor %}
;
sort | uniq | while read zone application local_ip; do
ipfcfg delete "$zone" "$application" "$local_ip"
done
辞書上アウターループ反復と配列値を超える内側ループ反復:
スクリプトは、SolarisサーバにAnsibleによって送達神社テンプレートです。
私はJinjaでタプルのリストを一意にすることはできません。そこで私はBashでsort | uniq | while read
ループを使用しなければなりませんでした。これは完全ではなく、独自の限界があります。
代わりにJinjaでタプルのリストをユニークにする方法はありますか? あなたの例からユニークなリストのペアを取得するには
これは動作しますが、私は 'sum(start = []) 'が何をしているのかまだ分かりません。私は何も要約したくないのに、なぜ「和」を使わなければならないのですか? – ceving
'ipfilter.values()'では、ゾーンのリストなのでリストのリストを取得します。しかし、内側のリストだけが必要なので、すべての内側のリストを含む長い普通のリストを作るためにそれらを合計します。 –