我正在尝试在 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
最佳答案
这里有很多问题。首先是您以 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 !
关于python - 运行虚拟环境 Ansible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33267649/