Bagaimana saya bisa menambahkan ke PATH saat menjalankan modul pip Ansible?

17

Saya mencoba untuk menginstal psycopg2 ke dalam virtualenv Python dengan pipmodul Ansible , tapi saya perlu menambahkan entri ke PATH agar dapat dibangun dengan benar (perlu mengetahui path ke direktori yang berisi pg_config). Saya melihat bahwa saya bisa lulus environmentke pipmodul, tapi saya tidak yakin bagaimana untuk menambahkan bukan menimpa PATH.

Di sini saya mencoba untuk menambahkan path dengan direktori yang diperlukan, tetapi menimpa virtualenv PATHdan gagal:

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

Jawaban:

33

Jika Anda menggunakan Ansible 1.4 atau lebih baru (yang saya sarankan) Anda dapat mengakses variabel env jarak jauh PATH :

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

Jika sebaliknya Anda tertarik dengan PATHenv var dari klien lokal yang menjalankan skrip Ansible (bukan server yang ditargetkan ), maka Anda ingin melakukan hal berikut:

- 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
sumber
4
The ansible_env.PATHpilihan adalah apa yang saya butuhkan - bekerja dengan sempurna. Terima kasih!
Collin Allen
1
Perhatikan bahwa ini mengambil PATH dari workstation, bukan server!
vdboor
4
Jika Anda perlu menambahkan ~/bin, gunakan PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}". Jika Anda menggunakannya PATH: "~/bin:{{ansible_env.PATH}}", maka beberapa program (seperti Python shutil.which) tidak dapat menggunakan komponen itu.
Lekensteyn
3
Sadarilah juga bahwa ini ansible_envmerujuk pada lingkungan pengguna SSH, bukan sudolingkungan. ansible_env.USEROleh karena itu dapat menghasilkan rootpengguna yang tidak berprivasi.
Lekensteyn