2014-04-09 13 views
10

Sto provando una macchina usando ansible. Sono riuscito a installare virtualenv e virtualenvwrapper bene sul VM. Tuttavia, non riesco a creare un virtualenv sul vm.in esecuzione mkvirtualenv using ansible

Sto cercando utilizzando

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

e

- name: create virtualenv test 
    action: command mkvirtualenv test 

ma senza fortuna. Qualche idea?

risposta

4

L'origine aggiunge solo virtualenvwrappers alla shell a cui è stato richiamato, che quindi esci immediatamente. In ogni caso, non userei virtualenvwrapper per questo. Richiamare direttamente virtualenv.

11

È possibile creare un ambiente utilizzando mkvirtualenv come questo. Speravo di essere in grado di utilizzare il toggleglobalsitepackages, ma ho trovato che la commutazione non è così conveniente in una sessione automatica.

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

In aggiunta alla risposta eccellente @ di SiggyF, vorrei aggiungere: Nel caso in cui sembra che questo compito ansible non riesce, come accade in qualche modo con me, è possibile utilizzare la failed_when funzione (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'