剧本和角色中忽略“remote_user”

pap*_*ito 5 ansible ansible-2.x

我在我的中定义了以下内容ansible.cfg

# default user to use for playbooks if user is not specified
# (/usr/bin/ansible will use current user as default)
remote_user = ansible
Run Code Online (Sandbox Code Playgroud)

然而,我有一本剧本bootstrap.yaml,我可以在其中联系root而不是ansible

---
- hosts: "{{ target }}"
  become: no
  gather_facts: false
  remote_user: root

  vars:
    os_family: "{{ osfamily }}}"

  roles:
  - role: papanito.bootstrap
Run Code Online (Sandbox Code Playgroud)

然而,它似乎remote_user: root被忽略了,因为我总是收到连接错误,因为它使用用户ansible而不是rootssh 连接

fatal: [node001]: UNREACHABLE! => {"changed": false,
"msg": "Failed to connect to the host via ssh:
 ansible@node001: Permission denied (publickey,password).", 
"unreachable": true}
Run Code Online (Sandbox Code Playgroud)

我能找到的唯一解决方法是使用 调用剧本-e ansible_user=root。但这并不方便,因为我想用 调用多个剧本site.yaml,其中第一个剧本必须用 运行ansible_user root,而其他剧本必须用ansible

- import_playbook: playbooks/bootstrap.yml
- import_playbook: playbooks/networking.yml
- import_playbook: playbooks/monitoring.yml
Run Code Online (Sandbox Code Playgroud)

我缺少什么或如何解决它有什么建议吗?

Vla*_*tka 2

问:“remote_user:root 被忽略”

答:剧本按预期运作

- hosts: test_01
  gather_facts: false
  become: no
  remote_user: root
  tasks:
    - command: whoami
      register: result
    - debug:
        var: result.stdout
Run Code Online (Sandbox Code Playgroud)

给出

"result.stdout": "root"
Run Code Online (Sandbox Code Playgroud)

但是,该变量可以在清单中被覆盖。例如库存

$ cat hosts
all:
  hosts:
    test_01:
  vars:
    ansible_connection: ssh
    ansible_user: admin
Run Code Online (Sandbox Code Playgroud)

结果是

"result.stdout": "admin"
Run Code Online (Sandbox Code Playgroud)

使用命令仔细检查库存

$ ansible-inventory --list
Run Code Online (Sandbox Code Playgroud)


笔记