Làm cách nào tôi có thể trả trước PATH khi chạy mô-đun pip của Ansible?


17

Tôi đang cố gắng cài đặt psycopg2 vào một virtualenv Python với pipmô-đun của Ansible , nhưng tôi cần phải thêm một mục vào PATH để xây dựng chính xác (nó cần biết đường dẫn đến thư mục chứa pg_config). Tôi thấy rằng tôi có thể vượt qua environmentđể các pipmô-đun, nhưng tôi không chắc chắn làm thế nào để thêm vào trước chứ không phải là ghi đè PATH.

Ở đây tôi đang cố gắng thêm vào đường dẫn với thư mục cần thiết, nhưng nó đã ghi đè lên virtualenv PATHvà thất bại:

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

Câu trả lời:


33

Nếu bạn đang sử dụng Ansible 1.4 trở lên (mà tôi khuyên dùng), bạn có thể truy cập biến env từ xa PATH :

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

Nếu thay vào đó, bạn quan tâm đến PATHvar env của máy khách cục bộ đang chạy các tập lệnh Ansible (thay vì máy chủ được nhắm mục tiêu ), thì bạn muốn làm như sau:

- 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
Các ansible_env.PATHtùy chọn là những gì tôi cần - làm việc một cách hoàn hảo. Cảm ơn!
Collin Allen

1
Lưu ý rằng điều này sẽ lấy PATH của máy trạm, không phải máy chủ!
vdboor

4
Nếu bạn cần phải trả trước ~/bin, sử dụng PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}". Nếu bạn thay vào đó sử dụng PATH: "~/bin:{{ansible_env.PATH}}", thì một số chương trình (như Python shutil.which) không thể sử dụng thành phần đó.
Lekensteyn

3
Cũng lưu ý rằng ansible_envđề cập đến môi trường của người dùng SSH, không phải sudomôi trường. ansible_env.USERdo đó có thể dẫn đến rootthay vì một người dùng không có quyền.
Lekensteyn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.