Как мне подготовиться к PATH во время работы модуля ps Ansible?

17

Я пытаюсь установить psycopg2 в Python virtualenv с pipмодулем Ansible , но мне нужно предварительно добавить запись в PATH для его правильной сборки (ему нужно знать путь к каталогу, в котором он находится pg_config). Я вижу, что могу перейти environmentк pipмодулю, но я не уверен, как добавить, а не перезаписать PATH.

Здесь я пытаюсь добавить путь к нужному каталогу, но он перезаписывает virtualenv PATHи завершается ошибкой:

- pip:
    name: psycopg2
    virtualenv: /path/to/my/venv
  environment:
    PATH: /usr/pgsql-9.3/bin:$PATH
Коллин Аллен
источник

Ответы:

33

Если вы используете Ansible 1.4 или более поздней версии (что я рекомендую), вы можете получить доступ к удаленной PATH переменной env:

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

Если вместо этого вас интересует PATHenv var локального клиента, на котором выполняются сценарии Ansible (вместо целевого сервера ), то вы хотите сделать следующее:

- 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Вариант был , что мне нужно - работал отлично. Благодарность!
Коллин Аллен
1
Обратите внимание, что это занимает путь рабочей станции, а не сервера!
vdboor
4
Если вам нужно подготовить ~/bin, используйте PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}". Если вы вместо этого используете PATH: "~/bin:{{ansible_env.PATH}}", то некоторые программы (например, Python shutil.which) не смогут использовать этот компонент.
Лекенштейн
3
Также следует помнить, что это ansible_envотносится к среде пользователя SSH, а не к sudoсреде. ansible_env.USERследовательно, может привести rootк непривилегированному пользователю.
Лекенштейн