【问题标题】:Ansible cannot make dir /$HOME/.ansible/cpAnsible 无法制作 dir /$HOME/.ansible/cp
【发布时间】:2015-10-28 20:07:00
【问题描述】:

我在运行 ansible 时遇到了一个非常奇怪的错误:

收集事实 ************************************************ *************** 致命:[i-0f55b6a4] => 无法创建目录 /$HOME/.ansible/cp:[Errno 13] 权限被拒绝:'/$HOME' 任务:[任务#1] ******************************************* ******************** 致命:没有匹配的主机或所有主机都已失败 - 正在中止 播放回顾 ************************************************ ******************** 要重试,请使用:--limit @/home/ubuntu/install.retry i-0f55b6a4 : 正常=0 更改=0 无法访问=1 失败=0

通常,这个 playbook 运行没有问题,但我最近做了一些更改,以便从 start-stop-daemon 调用调用 ansible 的程序,以便我将作为服务运行。最终目标是拥有一个可以在认为有必要时自动运行 playbook 的服务。

剧本的开头是这样的:

---
- hosts: w_vm:main
  sudo: True
  tasks:
  - name: Task #1
    ...

sudo 设置为 True,所以我有点确定错误不在目标机器上。

ansible-playbook 的生成调用如下所示:

ansible-playbook -i /tmp/ansible3397486563152037600.inventory \
                    /home/ubuntu/playbooks/main_playbook.yml \
                    -e @/home/ubuntu/extra_params.json

我不确定Could not make dir /$HOME/.ansible/cp 错误是否发生在服务器或远程机器上,或者为什么ansible 试图在/ 中创建一个名为$HOME 的目录。这只发生在从 linux 服务调用调用 ansible 的程序时,而不是从命令行显式调用时。


我在这里问了一个更具体的问题: https://unix.stackexchange.com/questions/220841/start-stop-daemon-services-environment-variables-and-ansible

【问题讨论】:

标签: linux ansible ansible-playbook start-stop-daemon


【解决方案1】:

我在使用 Jenkins 时遇到了类似的问题。它有一个默认的$HOME env var 设置为/root/。解决方案是在运行时注入环境变量。

HOME=/path/to/your/users/home

【讨论】:

  • 我也有这个问题。对于作为命令运行的人,您可以在类 unix 系统上使用 env 实用程序:env HOME=/path/to/home ansible ...
【解决方案2】:

回答迟了,但可能对某人有用。检查 ~/.ansible 的所有权。本地机器(运行 ansible/ansible 控制器节点)中 .ansible 的所有权可能会导致问题。执行“chown -R username:groupname .ansible”(用户名:组名应该是运行剧本的用户)并尝试再次运行剧本

作为替代方法,从控制器节点中删除此 .ansible 目录并重新运行 playbook。

【讨论】:

    【解决方案3】:

    试试sudo chown -R YOUR_USERNAME /home/YOUR_USERNAME/.ansible

    【讨论】:

    • 介意explain your solution吗?
    • 我查看了我的系统,它以 root 身份拥有。也许以 root 身份运行之前的命令创建了它?
    【解决方案4】:

    Ansible 在您的本地计算机上的~/.ansible 中创建临时文件在远程计算机上。所以理论上可以从双方触发。

    我的猜测是,它在 Ansible 运行的本地机器上,因为 Ansible 的启动方式不应该对目标框产生影响。快速搜索显示以start-stop-deamon 开头的程序没有$HOME(或任何环境)可用,但它有一个-e 选项可以根据您的需要进行设置。

    如果-e不可用,看这个answer,它建议额外执行/usr/bin/env来设置环境变量。

    【讨论】:

    • 你说得对,这似乎是从start-stop-daemon 调用的程序调用 Ansible 的问题。我在您链接的答案中尝试了这个技巧,但是唉,它似乎不起作用:(
    • 这是一个肮脏的黑客,但如果你真的创建 /$HOME,也许作为 /tmp 的符号链接? ln -s /tmp /$HOME (可能转义 $。抱歉,现在在移动设备上,无法测试)
    • 我不是那么绝望。然而...:/
    • 其实我认为这个问题与ansible作为服务执行时找不到它的配置有关。 remote_tmp 变量默认设置为 /$HOME/.ansible/tmp (docs.ansible.com/ansible/intro_configuration.html#remote-tmp),我想知道如果 ansible-run-as-service 无法确定 $HOME 是什么,这是否也会影响它在此处设置的内容.我试图在/etc/ansible/ansible.cfg 中覆盖它,但它似乎不起作用......
    • 看来这是我悲痛的根源:github.com/ansible/ansible/blob/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2019-11-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多