本质上,这里发生的情况是,运行 ansible 的用户帐户同时存在于控制节点和目标客户端上。
但是,在目标客户端上,作为服务器修复过程的一部分,步骤之一是将该帐户的主目录所在位置从 /home/voltron/ 更改为 /opt/home/voltron/ (不,帐户可以遗憾的是,在创建服务器时不能使用该目录来创建。)
使用 ansible 执行此操作的问题是,它“失去了对目标客户端(在本例中为服务器 t-rex)上 ~/.ansible/tmp 中的工作 tmp 目录的访问权限”。这会导致 playbook 在任何后续播放中失败,并显示以下错误消息:
fatal: [t-rex]: UNREACHABLE! => {"changed": false, "msg": "Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the remote directory. Consider changing the remote temp path in ansible.cfg to a path rooted in \"/tmp\". Failed command was: ( umask 77 && mkdir -p \"` echo /home/volton/.ansible/tmp/ansible-tmp-1507231978.66-123682989430617 `\" && echo ansible-tmp-1507231978.66-123682989430617=\"` echo /home/volton/.ansible/tmp/ansible-tmp-1507231978.66-123682989430617 `\" ), exited with result 1", "unreachable": true}
现在,我需要做的就是以某种方式告诉 ansible,它在目标客户端上的工作目录在剧本运行期间通过重新收集事实而更改了位置,但这似乎没有帮助。 (至少我是这样做的)
我试图在更改 ansible 帐户(voltron)工作临时目录位置的模块之后立即调用 play 中的设置模块,并且它“似乎”运行,但是当读取下一个“import_playbook”语句时,发生上述故障,给出故障,整个事情就会爆发,迫使我可能重新运行相当长的剧本。显然,下面的运行确实有效,因为 ansible 的事实现在知道它的工作目录已更改。
有人知道我在工作临时目录位置发生变化时如何通知 ansible 吗?告诉我一下,谢谢!
答案1
为什么不改变临时目录安塞波的用途?例如在ansible.cfg
集合中类似
remote_tmp = /var/tmp/notfiddledwithduringtheplay
然后可能需要将其创建为引导过程的一部分,或者您可能会冒险使用某些公共tmp
目录,或者...
local_tmp
如果您要在本地系统上摆弄东西,还有一个目录。