这是显示我认为有问题的代码:
# Debugging path problems with sudo
---
- hosts: webservers
remote_user: root
tasks:
- name: echo path
command: echo $PATH
register: output
changed_when: False
- name: display root path output
debug: "msg={{ output.stdout }}"
# Now try as apache
- name: echo path
command: echo $PATH
become: true
become_user: apache
become_method: sudo
register: output
changed_when: False
- name: display wrong output
debug: "msg={{ output.stdout }}"
# This is the fix
- name: echo path
command: echo $PATH
environment:
PATH: "{{ ansible_env.PATH }}"
become: true
become_user: apache
become_method: sudo
register: output
changed_when: False
- name: display fixed output
debug: "msg={{ output.stdout }}"
Run Code Online (Sandbox Code Playgroud)
这是输出,您可以看到不添加“修复”的路径是不完整的。
TASK [echo path] ***************************************************************
ok: [webapp]
TASK [display root path output] ************************************************
ok: [webapp] => {
"changed": false,
"msg": "/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
}
TASK [echo path] ***************************************************************
ok: [webapp]
TASK [display wrong output] ****************************************************
ok: [webapp] => {
"changed": false,
"msg": "/sbin:/bin:/usr/sbin:/usr/bin"
}
TASK [echo path] ***************************************************************
ok: [webapp]
TASK [display fixed output] ****************************************************
ok: [webapp] => {
"changed": false,
"msg": "/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
}
Run Code Online (Sandbox Code Playgroud)
为什么需要此修复程序,这是一个错误吗?
这是在 CentOS 6.7 上使用 Ansible 2.0
这是正常和预期的行为。
请记住,sudo
切换用户时会清理环境,这就是为什么您最终会使用最小的默认 PATH。
PATH 中的其余项目来自 shell 启动脚本,当您(或更确切地说 Ansible)调用 时,它们不会运行sudo <command>
,因为它不要求交互式或登录 shell。
如果您必须运行不在默认位置的命令,请明确提供其路径。
归档时间: |
|
查看次数: |
5340 次 |
最近记录: |