Como posso adicionar o PATH ao executar o módulo pip do Ansible?

17

Estou tentando instalar o psycopg2 em um virtualenv Python com o pipmódulo do Ansible , mas preciso acrescentar uma entrada no PATH para que ele seja construído corretamente (ele precisa saber o caminho para o diretório que contém pg_config). Vejo que posso passar environmentpara o pipmódulo, mas não tenho certeza de como preceder em vez de substituir PATH.

Aqui estou tentando acrescentar o caminho ao diretório necessário, mas ele substitui o virtualenv PATHe falha:

- pip:
    name: psycopg2
    virtualenv: /path/to/my/venv
  environment:
    PATH: /usr/pgsql-9.3/bin:$PATH
Collin Allen
fonte

Respostas:

33

Se você estiver usando o Ansible 1.4 ou posterior (o que eu recomendo), você poderá acessar a variável env remota PATH :

- pip: name=psycopg2 virtualenv=/path/to/my/venv
  environment:
    PATH: /usr/pgsql-9.3/bin:{{ ansible_env.PATH }}

Se, em vez disso, você estiver interessado na PATHvar env do cliente local executando os scripts Ansible (em vez do servidor de destino ), faça o seguinte:

- pip: name=psycopg2 virtualenv=/path/to/my/venv
  environment:
    # This only makes sense if your client and server are homogeneous, that is,
    # they have the same PATHs.
    PATH: /usr/pgsql-9.3/bin:{{ lookup('env', 'PATH') }}
Rico
fonte
4
A ansible_env.PATHopção era o que eu precisava - funcionou perfeitamente. Obrigado!
Collin Allen
1
Observe que isso requer o PATH da estação de trabalho, não do servidor!
vdboor
4
Se você precisar anexar ~/bin, use PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}". Se você usar PATH: "~/bin:{{ansible_env.PATH}}", alguns programas (como o do Python shutil.which) não poderão usar esse componente.
Lekensteyn
3
Esteja ciente também de que ansible_envse refere ao ambiente do usuário SSH, não ao sudoambiente. ansible_env.USERportanto, pode resultar em rootum usuário não privilegiado.
Lekensteyn