我正在使用 Ansible 设置基于 Ubuntu 的 Vagrant 和 DigitalOcean 盒子,并希望使用 pyenv 来管理几个不同网站的环境。
我在尝试使用我安装的 pyenv 安装 python 版本时遇到权限问题,这可能是由于我缺乏基本的 *nix 知识。
我有一个deploy
用户和组,我已经为他们安装了 pyenv,但很明显,由于下面的最终任务失败,用户的操作有问题(为清楚起见,所有变量都替换为字符串):
- name: Install pyenv
git:
repo: https://github.com/yyuu/pyenv.git
dest: "/home/deploy/.pyenv"
- name: Install pyenv-virtualenv plugin
git:
repo: https://github.com/yyuu/pyenv-virtualenv.git
dest: "/home/deploy/.pyenv/plugins/pyenv-virtualenv"
- name: Add path etc to .bashrc.
lineinfile:
dest: "/home/deploy/.bashrc"
state: present
create: yes
line: "{{ item }}"
with_items:
- 'export PYENV_ROOT="$HOME/.pyenv"'
- 'export PATH="$PYENV_ROOT/bin:$PATH"'
- 'eval "$(pyenv init -)"'
- 'eval "$(pyenv virtualenv-init -)"'
- name: Ensure .pyenv permissions are set properly
file: path=/home/deploy/.pyenv
recurse=yes
owner=deploy
group=deploy
state=directory
- name: Install default python version
become: yes
become_user: 'deploy'
shell: . /home/deploy/.bashrc && pyenv install 3.5.1
creates="/home/deploy/.pyenv/versions/3.5.1"
这样做时vagrant up
一切顺利,直到:
任务[python:安装默认python版本] *********************************致命:[192.168.33.15]:失败的!=> {“已更改”:true,“cmd”:“./home/deploy/.bashrc && pyenv install 3.5.1”,“delta”:“0:00:00.002111”,“end”:“2016-02 -16 11:48:26.930971”,“失败”:真,“rc”:127,“开始”:“2016-02-16 11:48:26.928860”,“stderr”:“/bin/sh:1: pyenv:未找到”,“stdout”:“”,“stdout_lines”:[],“警告”:[]}
更新:如果它很重要,在这种情况下(流浪盒)我的vagrant.yml
剧本设置remote_user
为vagrant
:
- name: Create a virtual machine via vagrant
hosts: all
become: yes
become_method: sudo
remote_user: vagrant
...
更新 2:如果我以用户身份 ssh 进入 Vagrant VM,deploy
那么我可以使用pyenv
OK。如果我 ssh in asvagrant
然后sudo -u deploy bash -i
我得到pyenv: command not found
...
更新 3:问题的根源可能是在切换到用户时既没有也没有/home/deploy/.bashrc
来源(通过从每个文件中进行测试),但是当以. 但是,我认为是由失败的任务引起的 - 回显的文本出现在标准输出中。/home/deploy/.profile
deploy
sudo
echo
deploy
/home/deploy/.bashrc