2017-01-27 17 views
0

を働いていない私はここにいくつかの助けが必要:Ansibleスタットモジュール

私は彼らにいくつかのクラスタを構成するベイグラントで仮想マシンを作成しています。私がAnsibleコントロールノードとして使用したい最初のVMについては、私のローカルマシンからAnsibleを実行して、コントロールノードにAnsibleをインストールして設定しています。

.inventoryファイルが存在するかどうかをチェックし、ファイルをホームディレクトリ(VM内)にコピーしようとすると、この問題が発生します。

私がインベントリファイルに使用するコマンドと同じコマンドは、.ansible.cfgファイルの統計情報をチェックするためのファイルだけで、インベントリファイルはチェックしません。

あなたは私が間違っていることを知っていますか?

roles/ansible/tasks/main.yml

--- 
- name: install epel-release 
    yum: 
    name: epel-release 
    state: present 

- name: install ansible 
    yum: 
    name: ansible 
    state: present 

- name: stat ansible configuration file 
    stat: 
    path: "{{ cfg_file }}" 
    register: stat_ansible_config 

- name: copy .ansible.cfg to home directory 
    copy: 
    src: .ansible.cfg 
    dest: /home/{{ user }}/.ansible.cfg 
    owner: "{{ user }}" 
    group: "{{ group }}" 
    mode: 0644 
    when: stat_ansible_config.stat.exists 

- name: stat ansible inventory file 
    stat: 
    path: "{{ inventory_file }}" 
    register: stat_inventory 

- name: copy .inventory to home directory 
    copy: 
    src: .inventory 
    dest: /home/{{ user }}/.inventory 
    owner: "{{ user }}" 
    group: "{{ group }}" 
    mode: 0644 
    when: stat_inventory.stat.exists 
... 

roles/ansible/vars/main.yml

--- 
user: vagrant 
group: vagrant 
cfg_file:  /{{ user }}/provision/playbooks/roles/ansible/files/.ansible.cfg 
inventory_file: /{{ user }}/provision/playbooks/roles/ansible/files/.inventory 
... 

the playbook:

--- 
- hosts: controller 
    become: yes 

    roles: 
    - ansible 
... 

and the output:

TASK [ansible : stat ansible configuration file] ******************************* 

ok: [controller] => { 
    "changed": false, 
    "invocation": { 
     "module_args": { 
      "checksum_algorithm": "sha1", 
      "follow": false, 
      "get_checksum": true, 
      "get_md5": true, 
      "mime": false, 
      "path": "/vagrant/provision/playbooks/roles/ansible/files/.ansible.cfg" 
     }, 
     "module_name": "stat" 
    }, 
    "stat": { 
     "atime": 1485527858.0, 
     "checksum": "46acc076fda7e38fd7262fbc88f8ab4e1f52ddca", 
     "ctime": 1485452789.0, 
     "dev": 38, 
     "executable": false, 
     "exists": true, 
     "gid": 1000, 
     "gr_name": "vagrant", 
     "inode": 118, 
     "isblk": false, 
     "ischr": false, 
     "isdir": false, 
     "isfifo": false, 
     "isgid": false, 
     "islnk": false, 
     "isreg": true, 
     "issock": false, 
     "isuid": false, 
     "md5": "0cb8c97246776dc7e88fe44f19c3278f", 
     "mode": "0644", 
     "mtime": 1485452789.0, 
     "nlink": 1, 
     "path": "/vagrant/provision/playbooks/roles/ansible/files/.ansible.cfg", 
     "pw_name": "vagrant", 
     "readable": true, 
     "rgrp": true, 
     "roth": true, 
     "rusr": true, 
     "size": 164, 
     "uid": 1000, 
     "wgrp": false, 
     "woth": false, 
     "writeable": true, 
     "wusr": true, 
     "xgrp": false, 
     "xoth": false, 
     "xusr": false 
    } 
} 

TASK [ansible : copy .ansible.cfg to home directory] *************************** 

ok: [controller] => { 
    "changed": false, 
    "checksum": "46acc076fda7e38fd7262fbc88f8ab4e1f52ddca", 
    "dest": "/home/vagrant/.ansible.cfg", 
    "diff": { 
     "after": { 
      "path": "/home/vagrant/.ansible.cfg" 
     }, 
     "before": { 
      "path": "/home/vagrant/.ansible.cfg" 
     } 
    }, 
    "gid": 1000, 
    "group": "vagrant", 
    "invocation": { 
     "module_args": { 
      "backup": null, 
      "content": null, 
      "delimiter": null, 
      "dest": "/home/vagrant/.ansible.cfg", 
      "diff_peek": null, 
      "directory_mode": null, 
      "follow": false, 
      "force": false, 
      "group": "vagrant", 
      "mode": 420, 
      "original_basename": ".ansible.cfg", 
      "owner": "vagrant", 
      "path": "/home/vagrant/.ansible.cfg", 
      "recurse": false, 
      "regexp": null, 
      "remote_src": null, 
      "selevel": null, 
      "serole": null, 
      "setype": null, 
      "seuser": null, 
      "src": ".ansible.cfg", 
      "state": null, 
      "unsafe_writes": null, 
      "validate": null 
     } 
    }, 
    "mode": "0644", 
    "owner": "vagrant", 
    "path": "/home/vagrant/.ansible.cfg", 
    "secontext": "unconfined_u:object_r:user_home_t:s0", 
    "size": 164, 
    "state": "file", 
    "uid": 1000 
} 

TASK [ansible : stat ansible inventory file] *********************************** 

ok: [controller] => { 
    "changed": false, 
    "invocation": { 
     "module_args": { 
      "checksum_algorithm": "sha1", 
      "follow": false, 
      "get_checksum": true, 
      "get_md5": true, 
      "mime": false, 
      "path": null 
     }, 
     "module_name": "stat" 
    }, 
    "stat": { 
     "exists": false 
    } 
} 

TASK [ansible : copy .inventory to home directory] ***************************** 

task path: /Users/alessandro/Go/src/github.com/alesr/neo4go/provision/playbooks/roles/ansible/tasks/main.yml:31 
skipping: [controller] => { 
    "changed": false, 
    "skip_reason": "Conditional check failed", 
    "skipped": true 
} 

答えて

1

inventory_fileは、magic variableであり、プレイブックの実行中にAnsibleによって割り当てられた値を上書きして設定されます。

stat在庫には、invocation.module_args.path: nullがあります。

inventory_file変数の名前をmy_inventory_fileに変更すると機能します。

+0

ありがとうございました。私はこれをチェックします。 –

-1

copyはファイルがすでに存在し、変更はないがソースと同一であり、変更を加えないことを示しています。

デバッグ出力ショー:

stat_ansible_config.stat.exists = True 
stat_inventory.stat.exists = False 

、それが行動の違いを説明します。

+0

申し訳ありませんが、あなたの意図が理解できませんでした。あなたは答えを再調整できますか? –

+0

statモジュール呼び出しのデバッグ時に、レジスタに割り当てられたjsonは、 "exists":true、 "exists":false、 – andyhky

+0

を示しています。しかし、このファイルは実際には存在しません。 –