running mkvirtualenv using ansible

2020-03-10 04:50发布

问题:

I am provisioning a machine using ansible. I managed to install virtualenv and virtualenvwrapper fine on the vm. However, I can't seem to create a virtualenv on the vm.

I am trying using

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

and

- name: create virtualenv test
  action: command mkvirtualenv test

but no luck. Any ideas?

回答1:

Source only adds virtualenvwrappers to the shell its invoked in, which you then exit immediately. In any case, I would not use virtualenvwrapper for this. Invoke virtualenv directly.



回答2:

You can create an environment using mkvirtualenv like this. I was hoping to be able to use the toggleglobalsitepackages, but I found that toggling is not so convenient in an automated session.

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


回答3:

Additionally to @SiggyF's excellent answer, I would like to add: In case that it appears that this ansible task fails, as it happens somehow with me, you can use the failed_when feature (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'