Ansible无法制作dir /$HOME/.ansible/cp

时间:2015-08-05 21:06:06

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

当我运行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

4 个答案:

答案 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