我有一个CentOS集群,其中/home
将通过nfs挂载。所以我认为centos
用户的家应该搬到本地的某个地方,也许是/var/lib/centos
或其他什么地方。但鉴于centos
是ansible_user
我不能使用:
hosts: cluster
become: yes
tasks:
- ansible.builtin.user:
name: centos
move_home: yes
home: "/var/lib/centos"
不出所料,
失败了usermod: user centos is currently used by process 45028
有什么半整洁的解决方法,或者更好的主意吗?
我不认为你将能够做到这一点与user
模块,如果你连接作为centos
用户。但是,如果您自己处理各个步骤,它应该可以工作:
---
- hosts: centos
gather_facts: false
become: true
tasks:
- command: rsync -a /home/centos/ /var/lib/centos/
- command: sed -i 's,/home/centos,/var/lib/centos,' /etc/passwd
args:
warn: false
- meta: reset_connection
- command: rm -rf /home/centos
args:
warn: false
这将重新定位主目录,更新/etc/passwd
,然后删除旧的主目录。reset_connection
在那里强制建立一个新的ssh连接:没有它,当你删除主目录时,Ansible会不高兴。
在实践中,你可能需要在上面的剧本中添加一些逻辑,使其幂等。