运行虚拟环境 Ansible

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)

lar*_*sks 8

这里有很多问题。首先是您将虚拟环境创建为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)

更新

对于那些“它不起作用!” 评论者,我向您展示......一个正在运行的例子