2016-08-26 7 views
3

登録された値の辞書の要素を参照する方法。Ansibleでwith_dictで登録された変数をループする

私Ansible脚本は、次のようになります。

- command: echo {{ item }} 
    with_dict: 
    - foo 
    - bar 
    - baz 
    register: echos 

登録変数 "エコー" は辞書のようになります。私は、 "変更" を参照したい場合は

{ 

"changed": true, 
"msg": "All items completed", 
"results": [ 
    { 
     "changed": true, 
     "cmd": [ 
      "echo", 
      "foo" 
     ], 
     "delta": "0:00:00.002780", 
     "end": "2014-06-08 16:57:52.843478", 
     "invocation": { 
      "module_args": "echo foo", 
      "module_name": "command" 
     }, 
     "item": "foo", 
     "rc": 0, 
     "start": "2014-06-08 16:57:52.840698", 
     "stderr": "", 
     "stdout": "foo" 
    }, 
    { 
     "changed": true, 
     "cmd": [ 
      "echo", 
      "bar" 
     ], 
     "delta": "0:00:00.002736", 
     "end": "2014-06-08 16:57:52.911243", 
     "invocation": { 
      "module_args": "echo bar", 
      "module_name": "command" 
     }, 
     "item": "bar", 
     "rc": 0, 
     "start": "2014-06-08 16:57:52.908507", 
     "stderr": "", 
     "stdout": "bar" 
    }, 
    { 
     "changed": true, 
     "cmd": [ 
      "echo", 
      "baz" 
     ], 
     "delta": "0:00:00.003050", 
     "end": "2014-06-08 16:57:52.979928", 
     "invocation": { 
      "module_args": "echo baz", 
      "module_name": "command" 
     }, 
     "item": "baz", 
     "rc": 0, 
     "start": "2014-06-08 16:57:52.976878", 
     "stderr": "", 
     "stdout": "baz" 
    } 
] 

}今

echos辞書の "foo"辞書要素のフィールド、どうすればいいですか?

答えて

1

まず、あなたの例には欠陥があります。with_dictはリストを反復処理できません。次のように

しかし、一般的なアプローチは次のとおりです。

--- 
- hosts: localhost 
    gather_facts: no 
    tasks: 
    - command: echo {{ item }} 
     with_items: 
     - foo 
     - bar 
     - baz 
     register: echos 

     # Iterate all results 
    - debug: msg='name {{ item.item }}, changed {{ item.changed }}' 
     with_items: '{{ echos.results }}' 

     # Select 'changed' attribute from 'foo' element 
    - debug: msg='foo changed? {{ echos.results | selectattr("item","equalto","foo") | map(attribute="changed") | first }}'