当用户主目录安装在 NFS 卷上时,Ansible 不起作用

Posted

技术标签:

【中文标题】当用户主目录安装在 NFS 卷上时,Ansible 不起作用【英文标题】:Ansible doesn't work when user home directory mounted on NFS volume 【发布时间】:2017-02-23 23:36:49 【问题描述】:

情况是这样的。我有一些我想通过 Ansible 维护的主机。登录名/用户/等主机的基线配置由公司 IT 霸主控制,因此我只能更改与应用程序相关的内容,而不是一般主机设置。一些与应用程序相关的任务需要以“root”或其他特权用户身份运行。

我在所有主机上都有无密码 sudo 访问权限,但是所有用户主目录都位于 NFS 安装卷上。据我了解 ansible 的工作原理,它首先以普通用户身份登录目标主机并将一些文件放入$HOME/.ansible 目录,然后使用 sudo 切换到 root 用户并尝试从该目录运行内容。

但这就是问题所在。正如我上面提到的,主目录位于 NFS 卷上,因此在目标机器上的 ansible 进程成为 root 后,由于 NFS 限制,它不能再访问$HOME/.ansible 目录。有没有办法告诉 ansible 将这些工作文件放在某个非 NFS 卷上的主目录之外。

【问题讨论】:

【参考方案1】:

Ansible 2.1 中引入的ansible.cfg 配置文件有两个参数,允许指定目标机器和控制机器上临时目录的位置:

remote_tmp

Ansible 的工作原理是将模块传输到您的远程机器,运行它们,然后自行清理。在某些情况下,您可能不希望使用默认位置并希望更改路径。您可以通过更改此设置来做到这一点:

remote_tmp = ~/.ansible/tmp

local_tmp

当 Ansible 准备好将模块发送到远程机器时,它通常必须向模块添加一些内容:一些样板代码、模块的参数以及配置文件中的一些常量。这种组合存储在一个临时文件中,直到 ansible 退出并自行清理。默认位置是用户主目录的子目录。如果您想更改它,可以通过更改此设置来实现:

local_tmp = $HOME/.ansible/tmp

【讨论】:

这不应该是remote_tmp吗? @ILIV 我认为应该。我和你一样困惑。 肯定是remote_tmp。我刚检查过。你应该更正你的答案。 local_tmp 不适用于问题中描述的问题。您真的应该将引用更改为 remote_tmp 配置设置的描述,并完全省略 local_tmp。 我可以看到,但我对 OP 的确认感到困惑。感谢您发现这一点。

以上是关于当用户主目录安装在 NFS 卷上时,Ansible 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

四ansible-playbook案例(nfslnmp+可道云tomcatnginx)

ansible安装drbd+nfs+keepalived

ansible一键批量部署nfs服务

nfs

原创 :nfs软件服务利用ansible实现一键化部署

TiDB Operator恢复持久卷上的备份文件