Ansible'ın pip modülünü çalıştırırken PATH'yi nasıl başarabilirim?


17

Ansible'ın pipmodülü ile bir Python virtualenv içine psycopg2 yüklemeye çalışıyorum , ancak doğru oluşturmak için PATH için bir giriş eklemeniz gerekiyor (içeren dizinin yolunu bilmek gerekir pg_config). Ben geçebilir görüyoruz environmentiçin pipmodülün ama üzerine yazma yerine başa eklemek nasıl emin değilim PATH.

Burada yolu gerekli dizin ile başlamaya çalışıyorum, ancak virtualenv üzerine yazar PATHve başarısız olur:

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

Yanıtlar:


33

Ansible 1.4 veya üstünü kullanıyorsanız (bunu öneririm) uzak PATH env değişkenine erişebilirsiniz :

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

Bunun yerine , Ansible komut dosyalarını çalıştıran yerel istemcininPATH env var ( ilgilenilen sunucu yerine ) ile ilgileniyorsanız , aşağıdakileri yapmak istersiniz:

- 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.PATHMükemmel çalıştı - seçenek ne gerekli oldu. Teşekkürler!
Collin Allen

1
Bunun sunucunun değil, iş istasyonunun YOLUNU aldığını unutmayın!
14'te vdboor

4
Başa eklemeniz gerekiyorsa ~/bin, kullanın PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}". Bunun yerine PATH: "~/bin:{{ansible_env.PATH}}", bazı programlar (Python'lar gibi shutil.which) bu bileşeni kullanamaz.
Lekensteyn

3
Bunun ansible_env, çevre değil SSH kullanıcısının çevresini ifade ettiğini de unutmayın sudo. ansible_env.USERbu nedenle rootayrıcalıksız bir kullanıcı yerine sonuçlanabilir .
Lekensteyn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.