gpt4 book ai didi

vagrant - 在 Ansible 中使用 pyenv

转载 作者:行者123 更新时间:2023-12-02 15:30:39 24 4
gpt4 key购买 nike

我正在使用 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时,一切正常,直到:

TASK [python : Install default python version] ********************************* fatal: [192.168.33.15]: FAILED! => {"changed": true, "cmd": ". /home/deploy/.bashrc && pyenv install 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: not found", "stdout": "", "stdout_lines": [], "warnings": []}

更新:以防万一,在本例中(Vagrant 框),我的 vagrant.yml 剧本将 remote_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身份登录,然后sudo -u部署bash -i,我会得到pyenv:命令未找到...

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

最佳答案

由于您的错误是:

pyenv: not found

只需尝试在任务中使用 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
...

关于vagrant - 在 Ansible 中使用 pyenv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35432119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com