Ansible stat模块无法正常工作

时间:2017-01-27 15:02:38

标签: ansible

我需要一些帮助:

我正在使用Vagrant创建虚拟机来为它们配置一些群集。对于我想用作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
}

2 个答案:

答案 0 :(得分:2)

inventory_filemagic variable,在Playbook运行期间由Ansible设置,会覆盖您尝试分配的任何值。

在您的广告资源stat任务中,您可能会注意到:invocation.module_args.path: null

将您的inventory_file变量重命名为my_inventory_file,它会起作用。

答案 1 :(得分:-1)

copy看到该文件已存在,并且说没有任何更改,但与您的来源相同而不进行更改。

调试输出显示:

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

这解释了行为差异。