我需要一些帮助:
我正在使用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
}
答案 0 :(得分:2)
inventory_file
是magic 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
这解释了行为差异。