运行Ansible的pip模块时,如何在PATH前面添加?


17

我正在尝试使用Ansible的pip模块将psycopg2安装到Python virtualenv中,但是我需要在PATH前面添加一个条目才能正确构建(它需要知道包含的目录的路径pg_config)。我知道可以传递environment给该pip模块,但是我不确定如何添加而不是覆盖PATH

在这里,我试图在路径前添加必要的目录,但是它将覆盖virtualenv PATH并失败:

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

Answers:


33

如果您使用的是Ansible 1.4或更高版本(建议使用),则可以访问远程 PATH env变量:

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

相反,如果您对运行Ansible脚本(而不是目标服务器PATH本地客户端的env 变量感兴趣,那么您需要执行以下操作:

- 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') }}

4
ansible_env.PATH选项正是我所需要的-完美运行。谢谢!
Collin Allen

1
请注意,这需要工作站的路径,而不是服务器的路径!
vdboor 2014年

4
如果需要添加前缀~/bin,请使用PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}"。如果改用PATH: "~/bin:{{ansible_env.PATH}}",则某些程序(例如Python的shutil.which)将无法使用该组件。
Lekensteyn 2014年

3
另请注意,它ansible_env指的是SSH用户的sudo环境,而不是环境。ansible_env.USER因此可能导致root而不是非特权用户。
Lekensteyn 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.