我正在运行以下任务,使用Ansible 2.1在ubuntu 14操作系统上运行debian软件包,但是下面复制了异常。远程用户在远程计算机上具有sudo权限。
- name: run dpkg
shell: dpkg -i {{ debian_build.stdout }}
become: true
become_user: ubuntu
become_method: sudo
错误
fatal: [testserver]: FAILED! => {"changed": true, "cmd": "dpkg -i /home/ubuntu/test-server_0.1.0-7c47d103f8da21045e3ee817529eb84a0aa79723_all.deb", "delta": "0:00:00.002444", "end": "2016-10-10 14:33:32.014887", "failed": true, "rc": 2, "start": "2016-10-10 14:33:32.012443", "stderr": "dpkg: error: requested operation requires superuser privilege", "stdout": "", "stdout_lines": [], "warnings": []}
答案 0 :(得分:2)
因为这个;
become: true
become_user: ubuntu
become_method: sudo
是否在shell上执行此操作:
myuser$ sudo su ubuntu
ubuntu$
您正在使用sudo切换到非特权用户帐户。 " Ubuntu的"没有调用sudo就没有运行dpkg的权限,这就是为什么你的playbook在你的shell命令中放置sudo的原因。
根据Ansible最佳做法,您也不应该使用“转换为非特权用户”: http://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user
例如,您应该使用remote_user作为正确的用户运行此playbook。