我正在尝试在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
答案 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