运行虚拟环境Ansible

时间:2015-10-21 19:29:06

标签: python ansible virtual-environment

我正在尝试在Ansible中运行虚拟环境。

它经常出错。

以下是代码:

- name: Install virtualenv
  pip: name=virtualenv
  when: virtualenvexists.stat.exists != true

- name: Create virtualenv
  sudo: true
  command: virtualenv /home/vagrant/db/venv

- name: Activate
  sudo: yes
  sudo_user: vagrant
  command: /home/vagrant/db/venv/bin/source /home/vagrant/db/venv/bin/activate

我收到错误消息:

{“cmd”:“/ home / vagrant / db / venv / bin / activate”,“failed”:true,“rc”:13} 消息:[Errno 13]权限被拒绝

我尝试以多个用户身份运行此命令,我也试图弄清楚如何在不激活虚拟实例的情况下自动运行命令,而且我没有运气。

如何在Ansible的虚拟环境中运行命令?

我也试过这个没有运气:

- name: ansible_python_interpreter
  set_fact:
    ansible_python_interpreter: /home/vagrant/db/venv/bin/python

2 个答案:

答案 0 :(得分:4)

这里有很多问题。首先,您要将虚拟环境创建为root

- name: Create virtualenv
  sudo: true
  command: virtualenv /home/vagrant/db/venv

但您尝试以vagrant用户身份访问它:

- name: Activate
  sudo: yes
  sudo_user: vagrant
  command: /home/vagrant/db/venv/bin/source /home/vagrant/db/venv/bin/activate

您可能希望sudo_user: vagrant执行这两项任务。

其次,source命令是内置的shell,你不会在/home/vagrant/db/venv/bin/source找到它。所以这个命令根本没有意义。

最后,即使确实有意义,它也没有实际效果:这将修改command模块的环境,但不会对后续任务产生影响。有几种方法可以解决这个问题;如果您只是尝试运行已在虚拟环境中安装的命令,则可以直接运行该命令:

command: /home/vagrant/db/venv/bin/somecommand

这将正确使用您的虚拟环境中安装的Python版本。或者,您可以将所有内容嵌入到shell脚本中:

shell:
  cmd: |
    source /home/vagrant/db/venv/bin/activate
    do_stuff_here

<强>更新

对于那些“它不起作用!”评论者,我送给你...... running example

答案 1 :(得分:0)

通过执行~/.synapse模块,在以pip的虚拟环境中安装synapse的示例如下。

- pip:
    name: 'https://github.com/matrix-org/synapse/tarball/master'
    virtualenv: ~/.synapse
    virtualenv_site_packages: yes
    virtualenv_python: python2.7

然后,在新创建的虚拟环境中运行命令。使用chdir参数,并确保在command:前添加bin/

- command: bin/python -m synapse.app.homeserver --server-name {{ matrix_hostname }}
--config-path homeserver.yaml --generate-config --report-stats=yes
  args:
    chdir: ~/.synapse
    creates: homeserver.yaml