Vagrant 在Ansible中使用pyenv

Vagrant 在Ansible中使用pyenv,vagrant,ansible,pyenv,Vagrant,Ansible,Pyenv,我正在使用Ansible设置基于Ubuntu的Vagrant和DigitalOcean Box,并希望使用pyenv管理几个不同网站的环境 在尝试使用我安装的pyenv安装python版本时,我遇到了权限问题,这可能是因为我缺乏基本的*nix知识 我有一个deploy用户和组,我为他们安装了pyenv,但很明显,当下面的最后一个任务失败时,用户的操作出现了问题(为了清楚起见,所有变量都替换为字符串): 执行vagrant up操作时,会一直正常,直到: 任务[python:安装默认python版

我正在使用Ansible设置基于Ubuntu的Vagrant和DigitalOcean Box,并希望使用pyenv管理几个不同网站的环境

在尝试使用我安装的pyenv安装python版本时,我遇到了权限问题,这可能是因为我缺乏基本的*nix知识

我有一个
deploy
用户和组,我为他们安装了pyenv,但很明显,当下面的最后一个任务失败时,用户的操作出现了问题(为了清楚起见,所有变量都替换为字符串):

执行
vagrant up
操作时,会一直正常,直到:

任务[python:安装默认python版本]********************************* 致命:[192.168.33.15]:失败!=>{“已更改”:true,“cmd”:“/home/deploy/.bashrc&&pyenv安装3.5.1”,“delta”:“0:00:00.002111”,“end”:“2016-02-16 11:48:26.930971”,“failed”:true,“rc”:127,“start”:“2016-02-16 11:48:26.928860”,“stderr”:“/bin/sh:1:pyenv:未找到”,“stdout”:“,“stdout”;“stdout_行”:[],“警告”:

更新:如果这很重要,在本例中(漫游框)my
Vagrant.yml
playbook正在将
remote\u user
设置为
Vagrant

- name: Create a virtual machine via vagrant
  hosts: all
  become: yes
  become_method: sudo
  remote_user: vagrant
  ...
更新2:如果我以
deploy
用户身份ssh到Vagrant VM中,那么我可以使用
pyenv
OK。如果我以
vagrant
的身份ssh,然后
sudo-u deploy bash-I
我得到
pyenv:command not found

更新3:问题的根源可能是当切换到
sudo
deploy
用户时(通过
echo
从每个文件进行测试),没有
/home/deploy/.bashrc
/home/deploy/.profile
的来源,而是在以
deploy
身份登录时。但是,我认为
/home/deploy/.bashrc
是由失败的任务生成的-回显文本出现在stdout中。

因为您的错误是:

pyenv:找不到

只需在任务中简单地使用pyenv的绝对路径即可。这是处理
shell
任务的推荐方法:

登录到您的计算机并找到
pyenv

which pyenv
然后将任务更改为

 # /path/to/pyenv is the result of the previous command
 ... 
 shell: . /home/deploy/.bashrc && /path/to/pyenv install 3.5.1
 ...

这么简单的事!非常感谢你。我花了一天的时间来解决这个问题。我将该行更改为
shell:/home/deploy/.bashrc&&/home/deploy/.pyenv/libexec/pyenv安装3.5.1
,它可以正常工作。再次感谢。
 # /path/to/pyenv is the result of the previous command
 ... 
 shell: . /home/deploy/.bashrc && /path/to/pyenv install 3.5.1
 ...