Sudo
Ansible become_user 沒有正確選擇路徑
這是顯示我認為存在問題的程式碼:
# 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 }}"
這是輸出,您可以看到不添加“修復”的路徑是不完整的。
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" }
為什麼這個修復是必要的,這是一個錯誤嗎?
這是在 CentOS 6.7 上並使用 Ansible 2.0
這是正常和預期的行為。
請記住,
sudo
切換使用者時會清理環境,這就是您最終使用最小預設 PATH 的原因。PATH 中的其餘項目來自 shell 啟動腳本,當您(或者更確切地說 Ansible)呼叫時不會執行這些腳本,
sudo <command>
因為它不要求互動式或登錄 shell。如果您必須執行不在預設位置的命令,請明確提供其路徑。