2016-04-07 7 views
0

私はwith_nestedを使用して2つの可能な変数からホストを照合しています。これら2つはjson形式で変わります。レコードが正しく一致しています。しかし、不安定な2.xの変更により、一致するレコードと一致しないレコードがレジスタ変数に表示されます。アノードプレイブックのレジスタ変数の一致条件の数を取得

"all_hosts.results": [ 
     { 
      "_ansible_no_log": false, 
      "changed": true, 
      "cmd": "echo {u'host': u'host1', u'description': u'This is host1 server'}", 
      "delta": "0:00:00.005456", 
      "end": "2016-04-07 02:34:37.151824", 
      "invocation": { 
       "module_args": { 
        "_raw_params": "echo {u'host': u'host1', u'description': u'This is host1 server'}", 
        "_uses_shell": true, 
        "chdir": null, 
        "creates": null, 
        "executable": null, 
        "removes": null, 
        "warn": true 
       }, 
       "module_name": "command" 
      }, 
      "item": [ 
       { 
        "description": "This is host1 server", 
        "host": "host1" 
       }, 
       { 
        "host_name": "host1" 
       } 
      ], 
      "rc": 0, 
      "start": "2016-04-07 02:34:37.146368", 
      "stderr": "", 
      "stdout": "{uhost: uhost1, udescription: uThis is host1 server}", 
      "stdout_lines": [ 
       "{uhost: uhost1, udescription: uThis is host1 server}" 
      ], 
      "warnings": [] 
     }, 
     { 
      "_ansible_no_log": false, 
      "changed": false, 
      "item": [ 
       { 
        "description": "This is host1 server", 
        "host": "host1" 
       }, 
       { 
        "host_name": "host2" 
       } 
      ], 
      "skip_reason": "Conditional check failed", 
      "skipped": true 
     }, 
     { 
      "_ansible_no_log": false, 
      "changed": false, 
      "item": [ 
       { 
        "description": "This is host1 server", 
        "host": "host1" 
       }, 
       { 
        "host_name": "host3" 
       } 
      ], 
      "skip_reason": "Conditional check failed", 
      "skipped": true 
     }, 
     { 
      "_ansible_no_log": false, 
      "changed": false, 
      "item": [ 
       { 
        "description": "This is host1 server", 
        "host": "host1" 
       }, 
       { 
        "host_name": "host4" 
       } 
      ], 
      "skip_reason": "Conditional check failed", 
      "skipped": true 
     }, 
     { 
      "_ansible_no_log": false, 
      "changed": false, 
      "item": [ 
       { 
        "description": "This is host2 server", 
        "host": "host2" 
       }, 
       { 
        "host_name": "host1" 
       } 
      ], 
      "skip_reason": "Conditional check failed", 
      "skipped": true 
     }, 
     { 
      "_ansible_no_log": false, 
      "changed": true, 
      "cmd": "echo {u'host': u'host2', u'description': u'This is host2 server'}", 
      "delta": "0:00:00.005470", 
      "end": "2016-04-07 02:34:37.310095", 
      "invocation": { 
       "module_args": { 
        "_raw_params": "echo {u'host': u'host2', u'description': u'This is host2 server'}", 
        "_uses_shell": true, 
        "chdir": null, 
        "creates": null, 
        "executable": null, 
        "removes": null, 
        "warn": true 
       }, 
       "module_name": "command" 
      }, 
      "item": [ 
       { 
        "description": "This is host2 server", 
        "host": "host2" 
       }, 
       { 
        "host_name": "host2" 
       } 
      ], 
      "rc": 0, 
      "start": "2016-04-07 02:34:37.304625", 
      "stderr": "", 
      "stdout": "{uhost: uhost2, udescription: uThis is host2 server}", 
      "stdout_lines": [ 
       "{uhost: uhost2, udescription: uThis is host2 server}" 
      ], 
      "warnings": [] 
     }, 
     { 
      "_ansible_no_log": false, 
      "changed": false, 
      "item": [ 
       { 
        "description": "This is host2 server", 
        "host": "host2" 
       }, 
       { 
        "host_name": "host3" 
       } 
      ], 
      "skip_reason": "Conditional check failed", 
      "skipped": true 
     }, 
     { 
      "_ansible_no_log": false, 
      "changed": false, 
      "item": [ 
       { 
        "description": "This is host2 server", 
        "host": "host2" 
       }, 
       { 
        "host_name": "host4" 
       } 
      ], 
      "skip_reason": "Conditional check failed", 
      "skipped": true 
     } 
    ] 

--- 

- hosts: 127.0.0.1 
    connection: local 

    tasks: 

    - shell: "echo {{ item[0] }}" 
     with_nested: 
     - [{"host": "host1","description": "This is host1 server"}, {"host": "host2","description": "This is host2 server"}] 
     - [{"host_name": "host1"},{"host_name": "host2"},{"host_name": "host3"},{"host_name":"host4"}] 
     register: all_hosts 
     when: item[0].host == item[1].host_name 

    - debug: var=all_hosts.results 

出力のall_hostsだから2つの一致するレコードが存在しています。これらの一致するレコードの数を得る方法はありますか?

何か

 - debug: msg="Task if matching record count more than one" 
     when: all_hosts.changed | length > 0 

答えて

1

あなたが本当に数を必要とするか、または少なくとも一つの一致するレコードがあるかどうかを確認したいですか?方法:

- debug: msg="Task if matching record count more than one" 
    when: all_hosts.changed 
+0

一致するレコードがあるかどうかをチェックしたいだけです。しかし、配列型として、 'all_hosts.changed'は私のために働いていません。一致するカウントに基づいて任意のタスクを実行するには、 'with_items'に' all_hosts'を再度入れる必要があります。 – Roopendra

+0

'all_hosts'はdictであり、' all_hosts'は 'changed'と呼ばれるキーを持っています。 'all_hosts.results'は配列です。試しましたか?私のためにうまく動作する1.9.2 – helloV

+0

ああ..はい、あなたはもう一度私を救った:)私は非常に閉じていた。 – Roopendra

関連する問題