2014-04-09 28 views
10

Tôi đang cấp phép một máy sử dụng ansible. Tôi quản lý để cài đặt virtualenv và virtualenvwrapper tốt trên vm. Tuy nhiên, tôi dường như không thể tạo một virtualenv trên vm.chạy mkvirtualenv bằng cách sử dụng ansible

tôi đang cố gắng sử dụng

- name: create virtualenv test 
    shell: > 
    executable=/bin/zsh 
    source `which virtualenvwrapper.sh` && mkvirtualenv test 
    register: run_cmd 

- name: create virtualenv test 
    action: command mkvirtualenv test 

nhưng không có may mắn. Ý tưởng nào?

Trả lời

4

Nguồn chỉ thêm virtualenvwrappers vào trình bao được gọi ra, sau đó bạn thoát ngay lập tức. Trong mọi trường hợp, tôi sẽ không sử dụng virtualenvwrapper cho việc này. Gọi trực tiếp virtualenv.

11

Bạn có thể tạo môi trường bằng mkvirtualenv như thế này. Tôi đã hy vọng có thể sử dụng toggleglobalsitepackages, nhưng tôi thấy rằng việc chuyển đổi không thuận tiện trong một phiên tự động.

- name: Make a virtualenv 
    shell: . /usr/share/virtualenvwrapper/virtualenvwrapper.sh && mkvirtualenv {{ venv }} 
    args: 
    executable: /bin/bash 
    creates: "{{ venvabs }}" 
2

Ngoài ra câu trả lời tuyệt vời @ SiggyF, tôi muốn nói thêm: Trong trường hợp đó có vẻ như nhiệm vụ ansible này không thành công, vì nó xảy ra bằng cách nào đó với tôi, bạn có thể sử dụng failed_when tính năng (ansible 1.4+):

- name: Make virtualenv 
    shell: "./usr/share/virtualenvwrapper/virtualenvwrapper.sh && mkvirtualenv {{ project }} --python={{ python }} --no-site-packages" 
    args: 
    executable: /bin/bash 
    creates: "{{ virtualenv_dir }}/{{ project }}" 
    register: mkvirtualenv 
    failed_when: 'mkvirtualenv.changed and "New python executable" not in mkvirtualenv.stdout' 
Các vấn đề liên quan