使用ansible运行mkvirtualenv

Mik*_*ike 13 virtualenv ansible

我正在使用ansible配置一台机器.我设法在虚拟机上安装virtualenv和virtualenvwrapper.但是,我似乎无法在vm上创建virtualenv.

我正在尝试使用

- name: create virtualenv test
  shell: >
    executable=/bin/zsh
    source `which virtualenvwrapper.sh` && mkvirtualenv test
  register: run_cmd
Run Code Online (Sandbox Code Playgroud)

- name: create virtualenv test
  action: command mkvirtualenv test
Run Code Online (Sandbox Code Playgroud)

但没有运气.有任何想法吗?

Sig*_*gyF 14

你可以像这样使用mkvirtualenv创建一个环境.我希望能够使用toggleglobalsitepackages,但我发现在自动化会话中切换不太方便.

- name: Make a virtualenv
  shell: . /usr/share/virtualenvwrapper/virtualenvwrapper.sh && mkvirtualenv {{ venv }}
  args:
    executable: /bin/bash
    creates: "{{ venvabs }}"
Run Code Online (Sandbox Code Playgroud)


Sin*_*ion 5

Source只将virtualenvwrappers添加到它调用的shell中,然后立即退出.无论如何,我不会为此使用virtualenvwrapper.virtualenv直接调用.


Wto*_*wer 5

除了@SiggyF 的出色回答之外,我想补充一点:如果这个 ansible 任务似乎失败了,因为它以某种方式发生在我身上,您可以使用该failed_when功能(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'
Run Code Online (Sandbox Code Playgroud)