使用 Ansible pip 错误配置 CoreOS

Provisioning CoreOS with Ansible pip error

我正在尝试使用 Ansible 提供一个 coreOS 盒子。首先使用 https://github.com/defunctzombie/ansible-coreos-bootstrap

引导盒子

这似乎有效,但没有将 pip(位于 /home/core/bin)添加到路径中。在下一步中,我正在尝试 运行 安装 docker-py:

的任务
- name: Install docker-py
  pip: name=docker-py  

由于 pip 的文件夹不在我使用 ansible 的路径中:

  environment:
    PATH: /home/core/bin:$PATH

如果我尝试执行此任务,我会收到以下错误:

致命:[192.168.0.160]:失败! => {"changed": false, "cmd": "/home/core/bin/pip install docker-py", "failed": true, "msg": " \n:stderr: /home/core/bin/pip: line 2: basename: command not found\n/home/core/bin/pip: line 2: /root/pypy/bin/: No such file or directory\n"}

我问的是/root/pypy/bin/是从哪里来的,看来这就是问题所在。有什么想法吗?

设置 Ansible 变量时不能使用 shell 式变量扩展。在此声明中...

environment:
  PATH: /home/core/bin:$PATH

...您正在将 PATH 环境变量设置为 文字 /home/core/bin:$PATH。换句话说,您正在吹走 $PATH 的任何现有值,这就是为什么您会在 basename.

等基本内容上收到 "command not found" 错误的原因

考虑在现有 $PATH 中的某处安装 pip,在 调用 ansible 之前修改 $PATH ,或从调用 pip shells 脚本:

- name: install something with pip
  shell: |
    PATH="/home/core/bin:$PATH"
    pip install some_module

问题出在/home/core/bin/pip脚本中,字面意思是:

#!/bin/bash
LD_LIBRARY_PATH=$HOME/pypy/lib:$LD_LIBRARY_PATH $HOME/pypy/bin/$(basename [=10=]) $@

当 运行 在 root 下通过 ansible 时,$HOME 变量被替换为 /root 而不是 /home/core。 将 $HOME 更改为 /home/core,它应该可以工作。