2016-04-14 14 views
1

Ansibleのdictonaryを使って既存のファイルをチェックする際に問題があります。私はそれをデバッグしようとしたStat.exists in ableの変数リスト

FAILED! => {"failed": true, "msg": "The conditional check 'check_file_id.stat.exists == True' failed. The error was: error while evaluating conditional (check_file_id.stat.exists == True): 'dict' object has no attribute 'stat'\n\n 

tasks: 
    - name: Checking existing file id 
    stat: path=/tmp/{{ item.id }}.conf 
    with_items: "{{ file_vars }}" 
    register: check_file_id 

    - name: Checking existing file name 
    stat: path=/tmp/{{ item.name }}.conf 
    with_items: "{{ file_vars }}" 
    register: check_file_name 

    - name: Checking file exists 
    debug: msg='File_id exists' 
    when: check_file_id.stat.exists == True 

    - name: Checking file name exists 
    debug: msg='File name exists' 
    when: check_file_name.stat.exists == True 

    vars: 
    file_vars: 
     - { id: 1, name: one } 
     - { id: 2, name: two } 

その後、私は脚本を実行しようとした場合、私はエラーだ

- debug: var=check_file_id をして得た:

"results": [ 
    { 
     "_ansible_item_result": true, 
     "_ansible_no_log": false, 
     "changed": false, 
     "invocation": { 
      "module_args": { 
       "checksum_algorithm": "sha1", 
       "follow": false, 
       "get_checksum": true, 
       "get_md5": true, 
       "mime": false, 
       "path": "/tmp/1.conf" 
      }, 
      "module_name": "stat" 
     }, 
     "item": { 
      "id": 1, 
      "name": "one" 
     }, 
     "stat": { 
      "exists": false 
     } 
    }, 
    { 
     "_ansible_item_result": true, 
     "_ansible_no_log": false, 
     "changed": false, 
     "invocation": { 
      "module_args": { 
       "checksum_algorithm": "sha1", 
       "follow": false, 
       "get_checksum": true, 
       "get_md5": true, 
       "mime": false, 
       "path": "/tmp/2.conf" 
      }, 
      "module_name": "stat" 
     }, 
     "item": { 
      "id": 2, 
      "name": "two" 
     }, 
     "stat": { 
      "exists": false 
     } 
    } 
] 

どこが間違っていますか? 変数リストにstat.existsを使用できますか?

ありがとうございます!

答えて

6

問題は、check_file_idをループに登録していることです。あなたはthe documentation on using register in a loopを読む必要があります。これはこれを行うことの意義を論じています。変数には、ループの各反復の結果を含むresultsキーがあります。あなたはdebug出力でそれを見ることができます。後続のタスクで

、あなたはこのように、check_file_id.results代わりのfile_varsを反復処理する必要があります。

- hosts: localhost 
    gather_facts: false 
    vars: 
    file_vars: 
     - {id: 1, name: foo} 
     - {id: 2, name: bar} 
    tasks: 
    - name: Checking existing file id 
     stat: 
     path: ./files/{{ item.id }}.conf 
     with_items: "{{ file_vars }}" 
     register: check_file_id 

    - name: Checking existing file name 
     stat: 
     path: ./files/{{ item.name }}.conf 
     with_items: "{{ file_vars }}" 
     register: check_file_name 

    - debug: 
     msg: 'file id {{item.item.id}} (name {{item.item.name}}) exists' 
     with_items: "{{ check_file_id.results }}" 
     when: item.stat.exists 

    - debug: 
     msg: 'file name {{item.item.name}} (id {{item.item.id}}) exists' 
     with_items: "{{ check_file_name.results }}" 
     when: item.stat.exists