2017-01-28 16 views
14

with_subelementsの構文のロジックを理解するのに苦労していますが、with_subelementsとはどういうことがありますか?私はwith_subelementsここにあるhttp://docs.ansible.com/ansible/playbooks_loops.html#looping-over-subelementsの安全なドキュメントを見て、それほど役に立ちませんでした。また、ブログでwith_sublementsの例を含む演劇を見た不可能なwith_subelements

--- 
- hosts: cent 
    vars: 
    users: 
    - name: jagadish 
     comments: 
     - 'Jagadish is Good' 

    - name: srini 
     comments: 
     - 'Srini is Bad' 

    tasks: 
    - name: User Creation 
    shell: useradd -c "{{ item.1 }}" "{{ item.0.name }}" 
    with_subelements: 
     - users 
     - comments 

何をしているのでしょうか?

答えて

28

これは実際にはsubelementsルックアップの悪い例です。 (そして古い、サポートされていない、構文も同様です)。この1で

ルック:

--- 
- hosts: localhost 
    gather_facts: no 
    vars: 
    families: 
     - surname: Smith 
     children: 
      - name: Mike 
      age: 4 
      - name: Kate 
      age: 7 
     - surname: Sanders 
     children: 
      - name: Pete 
      age: 12 
      - name: Sara 
      age: 17 

    tasks: 
    - name: List children 
     debug: 
     msg: "Family={{ item.0.surname }} Child={{ item.1.name }} Age={{ item.1.age }}" 
     with_subelements: 
     - "{{ families }}" 
     - children 

タスク一覧子供familiesリスト(外側のループ)を超えると、それぞれの家族(内側のループ)でchildrenサブ要素の上に、ネストされたループのようなものです。
subelementsの最初の引数としてdictsのリストを指定し、外側の各項目の内部で繰り返したいサブ要素の名前を指定する必要があります。

この例ではitem.0(私の例では家族)は外側の項目で、item.1(私の例では子供)は内側の項目です。

In ansibleドキュメントの例では、subelementsは、ユーザ(外側)をループし、いくつかの公開鍵(内側)を追加するために使用されます。

+2

これは、Ansible docsのものよりも100万倍優れた説明です。今、フォローアップの質問があります。別の内側のループに孫がいるとしたら、そのようなシナリオでサブ要素はどのように機能しますか? – ahmedjaad

+0

3番目のネストされたループafaikのための道はありません。あなたのタスクに応じて 'map'や' json_query'が役に立ちます。 –

関連する問題