Ansible become_user não pegando caminho corretamente

2

Aqui está o código que mostra o que acredito ser um problema:

# 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 }}"

Aqui está a saída, você pode ver que o caminho não está completo sem adicionar "a correção".

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"
}

Por que essa correção é necessária, isso é um bug?

Isso é no CentOS 6.7 e usando o Ansible 2.0

    
por Joshua Grigonis 06.11.2015 / 22:57

1 resposta

3

Esse é um comportamento normal e esperado.

Lembre-se de que sudo higieniza o ambiente ao alternar usuários, e é por isso que você acaba com um PATH padrão mínimo.

O restante dos itens no PATH vem de scripts de inicialização do shell, que não estão sendo executados quando você (ou melhor, Ansible) chama sudo <command> , porque não está solicitando um shell interativo ou de login.

Se você precisar executar um comando que não esteja em um local padrão, forneça o caminho explicitamente.

    
por 16.11.2015 / 19:07