Ansible 获取 localhost USER 错误?

ser*_*ine 3 ansible

我正在尝试设置一个寄存器,即在 ansible 中执行任务之前检查文件是否存在

- name: check CRAN R script exists
  stat:
    path: "{{ playbook_dir }}/scripts/R/cran.R"
  delegate_to: localhost
  register: cran

  tags: r_extras
Run Code Online (Sandbox Code Playgroud)

此任务是剧本的一部分,作为 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
Run Code Online (Sandbox Code Playgroud)

当我像这样运行剧本时

ansible-playbook -vvvv -i my_hosts all.yml --tags r_extras
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

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"
}
Run Code Online (Sandbox Code Playgroud)

因为 Ansible 认为我root......这对我来说似乎有点愚蠢,但我可能没有抓住重点?

如何检查本地文件是否存在?和/或如何获取$USER本地主机的变量


我可以通过添加来“解决”这个问题,become_user: $USER但我不知道如何使这个通用。

tec*_*raf 6

become为角色设置的指令对所有任务都有效,包括带有delegate_to.

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

Ansible 在这里所做的事情并不愚蠢,它不会“认为”你是rootroot,实际上,如果它“认为”你是 root,它就不会要求输入密码。

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