Cec*_*uez 4 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
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
{"cmd": "/home/vagrant/db/venv/bin/activate", "failed": true, "rc": 13} msg: [Errno 13] 权限被拒绝
我尝试以多个用户身份运行此命令,并且我还试图弄清楚如何从虚拟实例自动运行命令而不激活它,但我没有运气。
如何在 Ansible 的虚拟环境中运行命令?
我也试过这个没有运气:
- name: ansible_python_interpreter
set_fact:
ansible_python_interpreter: /home/vagrant/db/venv/bin/python
Run Code Online (Sandbox Code Playgroud)
这里有很多问题。首先是您将虚拟环境创建为root:
- name: Create virtualenv
sudo: true
command: virtualenv /home/vagrant/db/venv
Run Code Online (Sandbox Code Playgroud)
但是您正在尝试以vagrant用户身份访问它:
- name: Activate
sudo: yes
sudo_user: vagrant
command: /home/vagrant/db/venv/bin/source /home/vagrant/db/venv/bin/activate
Run Code Online (Sandbox Code Playgroud)
您可能希望sudo_user: vagrant同时完成这两项任务。
其次,该source命令是一个内置的 shell,你不会在/home/vagrant/db/venv/bin/source. 所以这个命令根本没有意义。
最后,即使它确实有意义,它也没有实际效果:这会修改command模块的环境,但不会对后续任务产生影响。有几种方法可以解决这个问题;如果您只是尝试运行已安装在虚拟环境中的命令,则可以直接运行该命令:
command: /home/vagrant/db/venv/bin/somecommand
Run Code Online (Sandbox Code Playgroud)
这将正确使用安装在您的虚拟环境中的 Python 版本。或者,您可以将所有内容嵌入到 shell 脚本中:
shell:
cmd: |
source /home/vagrant/db/venv/bin/activate
do_stuff_here
Run Code Online (Sandbox Code Playgroud)
更新
对于那些“它不起作用!” 评论者,我向您展示......一个正在运行的例子!