Ansible教程:Ad-hoc 命令用法-group模块详解

介绍

group模块用于远程主机管理系统用户组(新增/修改/删除组)

作用

管理远程Linux系统/etc/group用户组,对应底层groupadd/groupmod/groupdel命令

提示:只操作系统组

常用参数

参数 说明
name 【必选】组名称
state present(默认,创建/更新组);absent(删除组)
gid 指定组ID(gid),不填自动分配
system yes/no 是否为系统组(系统组gid一般 <1000)

幂等特性

Ad-hoc多次执行相同命令不会重复报错,状态不变时返回changed: false

例子

1. 创建普通用户组

ansible all -m group -a "name=appgroup state=present" -b  -i ansible_client.ini

解释:

  • -b:提权,创建组需要root权限
  • state=present:组不存在则创建;已存在则不改动,可不写

执行结果:

2. 创建组,并指定GID=2001

ansible all -m group -a "name=appgroup gid=2001 state=present" -b -i ansible_client.ini

提示:state=present 可省略

注意:如果主机上已有其他组占用2001,会报错;组已存在但gid不一致,会修改原有组gid

3. 创建系统组 sysgroup

ansible all -m group -a "name=sysgroup system=yes " -b -i ansible_client.ini

4. 删除用户组 appgroup

ansible all -m group -a "name=appgroup state=absent" -b -i ansible_client.ini

注意:如果组内还有用户,默认依然可以删除组(仅删 /etc/group 条目,用户保留)

返回结果字段说明

changed: true  # true=发生变更;false=状态已经符合,无操作
gid: 2001
name: appgroup
state: present
system: false

常见坑

  1. 忘记加 -b 提权:创建/删除组必须root,否则权限拒绝报错
  2. 区分 Ansible inventory 主机组 和 系统group
    • inventory [web]:ansible管理的一批主机
    • group模块操作的:远程服务器操作系统里的用户组
  3. gid冲突:指定gid前最好先用Ad-hoc提前检查
    # ad-hoc shell模块查看远程gid占用
    ansible web -m shell -a "getent group | grep 2001" -b
    
  4. 不支持组内成员管理:group模块不能添加用户到组,添加用户进组要用user模块的groups参数

原文出处:/show_1GW46Dw602oq.html