Ansible获取localhost USER错误?

时间:2017-01-24 00:01:14

标签: ansible

我试图设置一个寄存器,即在执行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来解决此问题,但我不知道如何制作此通用..

1 个答案:

答案 0 :(得分:2)

为该角色设置的

become指令适用于所有任务,包括delegate_to的任务。

实际上,您尝试使用前面的sudo命令在本地运行任务,并要求提供/etc/sudoers中设置的密码。

Ansible在这里所做的事情并没有什么愚蠢的事情,并且没有"思考"你是root,实际上,如果它"想到"你是root用户,它不会要求输入密码。

您可以将become: false添加到任务中。