ฉันจะผนวกกับ PATH ในขณะที่ใช้งานโมดูล pip ของ 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 หรือใหม่กว่า (ซึ่งฉันแนะนำ) คุณสามารถเข้าถึงตัวแปร env ระยะไกล PATH :

- 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ตัวเลือกคือสิ่งที่ผมจำเป็น - ทำงานอย่างสมบูรณ์ ขอบคุณ!
Collin Allen

1
โปรดทราบว่านี่จะใช้เส้นทางของเวิร์กสเตชันไม่ใช่เซิร์ฟเวอร์!
vdboor

4
หากคุณจำเป็นต้องเพิ่มการใช้งาน~/bin PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}"หากคุณใช้แทนPATH: "~/bin:{{ansible_env.PATH}}"บางโปรแกรม (เช่น Python shutil.which) จะไม่สามารถใช้องค์ประกอบนั้นได้
Lekensteyn

3
ระวังด้วยที่ansible_envอ้างอิงถึงสภาพแวดล้อมของผู้ใช้ SSH ไม่ใช่sudoสภาพแวดล้อม ansible_env.USERอาจส่งผลให้rootมากกว่าผู้ใช้ที่ไม่มีสิทธิ
Lekensteyn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.