我试图设置一个寄存器,即在执行ansible中的任务之前检查文件是否存在
- name: check CRAN R script exists
stat:
path: "{{ playbook_dir }}/scripts/R/cran.R"
delegate_to: localhost
register: cran
tags: r_extras
此任务是作为sudo
运行的剧本的一部分- name: installing common apt dependencies, pip python packages as well as java
hosts: base
remote_user: "{{ sudo_guy }}"
roles:
# need to have non previlidged installer guy
- make_sw_guy
# apt-get installation
- common
become: true
当我像这样运行剧本时
ansible-playbook -vvvv -i my_hosts all.yml --tags r_extras
我收到此错误
fatal: [bio_training -> localhost]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {
"module_name": "stat"
},
"module_stderr": "sudo: a password is required\n",
"module_stdout": "",
"msg": "MODULE FAILURE"
}
因为Ansible认为我root
..这对我来说似乎有些愚蠢,但我可能会忽略这一点?
如何检查本地文件是否存在?和/或如何获取localhost的$USER
变量
我可以"修复"通过添加become_user: $USER
来解决此问题,但我不知道如何制作此通用..
答案 0 :(得分:2)
become
指令适用于所有任务,包括delegate_to
的任务。
实际上,您尝试使用前面的sudo
命令在本地运行任务,并要求提供/etc/sudoers
中设置的密码。
Ansible在这里所做的事情并没有什么愚蠢的事情,并且没有"思考"你是root
,实际上,如果它"想到"你是root用户,它不会要求输入密码。
您可以将become: false
添加到任务中。