2016-06-19 2 views
0

DNSエントリの変更を複数のネームサーバに適用するための実行可能なランブラがあります。ドメインに関する辞書を通したプレイブックの反復

情報は、このような辞書のリストに格納されます。

domains: [ 
    { 
    domain: "domain.me", 
    location: "default", 
    ip: "XX.XX.XX.XX", 
    <..> 
    }, 

私は成功したゾーンファイルを生成したタスクを構築するために管理しました。しかし、削除されたドメインの古いファイルもクリーンアップする必要があります。このようなリストをどのように反復することができるかはわかりませんが、

- name: Check for available configuration 
    shell: ls -1 /etc/bind/zones/{{ location }}/ 
    register: contents 

- name: Cleanup old files 
    file: path=/etc/bind/zones/{{ location }}/{{ item }} state=absent 
    with_items: "{{ contents.stdout_lines }}" 
    when: item not in domains 

明らかに、すべてのファイルを削除して最初から生成しますが、 varsに重複した情報を持つ別のリストを作成せずに辞書のリストを繰り返し処理する方法はありますか?

答えて

0

thisあなたのお手伝いはありますか? ITSは基本的にあなたがベースの、文字列のリストに辞書のリストを減らすためにmapフィルタを使用することができます(あなたが持っている設定から生成できること)

# tidy_expected: [‘conf1.cfg’, conf2.cfg’] 
- find: paths={{tidy_path}} #/etc/myapp 
    register: existing 

- file: path={{item.path}} state=absent 
    when: item.path|basename not in tidy_expected 
    with_items: “{{existing.files|default([ ])}}” 
    register: removed 

- mail: body=“{{removed}}” 
+0

私はこの質問に投稿したコードのほぼ完全なコピーですが、あなたの答えはありがとうございます。私が辞書にリストを持っていることです。それは私がスタックしていることです。辞書の特定のフィールドをどのように反復することができるのか分かりません。 – rush

0

のリストの一部ではないすべてのファイルを削除しますこの例では、ディクテーションの1つの属性にdomainと入力します。

when: item not in domains|map(attribute='domain')|list 
関連する問題