2016-05-22 12 views
1

FQDNを定義する一連の変数があります。ネストされた変数をループする可能性があります

domains: 
    - erp: erp.mycompany.com 
    - crm: crm.mycompany.com 
    - git: git.mycompany.com 

実際、私はそれらをループして(テンプレートファイル内で)それらにアクセスする必要があります。だから、domains.erpのようなものにアクセスすることは、魅力のように機能します。しかし、私はこれらをループすることはできません。私がしなければ

はもちろん、:

- name: Print domains 
    debug: 
    msg: test {{ item }} 
    with_items: 
    - "{{ domains }}" 

それは...、キーと値の両方を印刷し、私が行った場合:

- name: Print domains 
    debug: 
    msg: test {{ domains[{{ item }}] }} 
    with_items: 
    - "{{ domain }}" 

しかし、それは動作しません。私はまた、hashes formをドキュメントに記載されているように試しましたが、いずれの運も得られませんでした...

+1

ネストされたリストではかなり難しいようですが、私の質問はこちらをご覧ください:http://stackoverflow.com/questions/36206551/multiple-nested-loops-in-ansibleおそらく、プレイブックは強調してはいけません。あるいは、構文が本当に厄介になるので、カスタムプラグインを実装するべきです。 – allo

答えて

1

最後に、私はdictを使用しなければなりませんでした。自分のライン上の各行くのアイテムを持っているwith_itemsとは異なり、with_dictはをループする要素の前に-なし1つのライナーがあるので

それは最初の時間を動作しませんでした。

domains: 
    erp: 
    address: erp.mycompany.com 
    crm: 
    address: crm.mycompany.com 
    git: 
    address: git.mycompany.com 

# used by letsencrypt 
webserverType: apache2 
withCerts: true 

tasks: 

- name: Print phone records 
    debug: 
    msg: "{{ item.value.address }}" 
    with_dict: "{{ domains }}" 

# I can still access a given domain by its name when needed like so: 
{{ domains.erp.address }} 
0

あなたの問題を理解したようです。最初の試行では、同じキーを含まない辞書のリストを使用しているため、各リスト項目に均等に値にアクセスすることは困難です。

2番目のソリューションは、キーが他の辞書を参照する辞書を作成します。あなたはまだリストを使用したい場合は、投稿何よりも

別の解決策:

- hosts: localhost 
     vars: 
     domains: 
      - name: erp 
      address: erp.mycompany.com 
      - name: crm 
      address: crm.mycompany.com 
      - name: git 
      address: git.mycompany.com 
     tasks: 
     - name: Print phone records 
      debug: 
      msg: "{{ item.address }}" 
      with_items: "{{ domains }}" 

私に、このアプローチは簡単ですが、あなたの第二のアプローチは、同様に動作します。

+0

答えのThx。それにもかかわらず、このアプローチでは、ドメインを名前で参照できないようです。私の演劇の他の部分で、私はexpのドメイン名にアクセスする必要がある場合、どうすればそれに対処できますか? 'domains.0.address'は本当にエラーが起こりやすいです。 – Buzut

+1

ああ、あなたは正しいです。あなたのユースケースを誤解しました。ドメイン項目を個別に取得し、ループするだけでなく、必要な場合は、おそらく最も信頼できる方法です。 – barnesm999

関連する問題