4

运行 ansible 时出现一个非常奇怪的错误:

收集事实 ************************************************ ***************
致命:[i-0f55b6a4] => 无法创建目录 /$HOME/.ansible/cp:[Errno 13] 权限被拒绝:'/$HOME'

任务:[任务#1] ******************************************* ********************
致命:没有匹配的主机或所有主机都已失败 - 正在中止


播放回顾 ************************************************ ********************
           要重试,请使用:--limit @/home/ubuntu/install.retry

i-0f55b6a4 : 正常=0 更改=0 无法访问=1 失败=0   

通常,这个剧本运行没有问题,但我最近做了一些更改,以便调用调用 ansible 的程序,start-stop-daemon以便我将作为服务运行。最终目标是拥有一个可以在认为必要时自动运行 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 试图创建一个名为$HOMEin的目录/。这只发生在从 linux 服务调用调用 ansible 的程序时,而不是从命令行显式调用它时。


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

4

4 回答 4

4

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

于 2015-11-09T09:34:10.923 回答
3

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

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

于 2017-04-07T14:55:05.813 回答
1

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

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

如果-e不可用,请参阅此答案,该答案建议另外 exec/usr/bin/env设置环境变量。

于 2015-08-05T21:55:18.783 回答
1

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

HOME=/path/to/your/users/home
于 2017-05-16T21:27:11.120 回答