当我运行ansible时,我遇到了一个非常奇怪的错误:
GATHERING FACTS *************************************************************** fatal: [i-0f55b6a4] => Could not make dir /$HOME/.ansible/cp: [Errno 13] Permission denied: '/$HOME' TASK: [Task #1] *************************************************************** FATAL: no hosts matched or all hosts have already failed -- aborting PLAY RECAP ******************************************************************** to retry, use: --limit @/home/ubuntu/install.retry i-0f55b6a4 : ok=0 changed=0 unreachable=1 failed=0
通常情况下,这个剧本运行没有问题,但我最近做了一些更改,以便从start-stop-daemon
调用调用ansible的程序,以便我将作为服务运行。最终目标是在认为必要时自动运行剧本的服务。
剧本的开头如下:
---
- 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
答案 0 :(得分:4)
尝试sudo chown -R YOUR_USERNAME /home/YOUR_USERNAME/.ansible
答案 1 :(得分:2)
迟到回答但可能对某人有用。检查〜/ .ansible的所有权。本地计算机(运行ansible / ansible控制器节点)中的.ansible的所有权可能导致问题。 “chown -R username:groupname .ansible”(用户名:groupname应该是运行playbook的用户)并尝试再次运行该剧本
作为替代方法,从控制器节点中删除此.ansible目录并重新运行该剧本。
答案 2 :(得分:1)
Ansible在远程计算机上的本地计算机和上的~/.ansible
中创建临时文件。因此,理论上可以从双方触发。
我的猜测是,它是在Ansible运行的本地机器上,因为Ansible的启动方式不会对目标框产生影响。快速搜索显示以start-stop-deamon
开头的程序没有可用的$HOME
(或任何env),但它有一个-e
选项可根据您的需要进行设置。
如果-e
不可用,请参阅此answer,其中建议另外执行/usr/bin/env
来设置环境变量。
答案 3 :(得分:0)
我使用Jenkins遇到了类似的问题。它将默认$HOME
env var设置为/root/
。解决方案是在运行时注入环境变量。
HOME=/path/to/your/users/home