Ansible/Linux:设置一个组';会员名单
在Ansible/Redhat7.6中,我正在寻找一种清除组成员列表并将其设置为新列表的方法 给定一个用户列表u1、u2、u3、u4,我想转换/etc/group中的以下条目:Ansible/Linux:设置一个组';会员名单,ansible,Ansible,在Ansible/Redhat7.6中,我正在寻找一种清除组成员列表并将其设置为新列表的方法 给定一个用户列表u1、u2、u3、u4,我想转换/etc/group中的以下条目: mygroup:x:1234:u1,oldu17,oldu19,u3 到 我无法访问旧的组成员列表。还要注意,一些成员可能会留在组中(在上面的示例中,u1和u3都在旧用户和新用户列表中) 背景:我们有很多用户一次可以访问某些应用程序六个月,所有这些用户都是在同一时间开始的(想想大学里一个学期的课程)。每六个月,我都要清
mygroup:x:1234:u1,oldu17,oldu19,u3
到
我无法访问旧的组成员列表。还要注意,一些成员可能会留在组中(在上面的示例中,u1和u3都在旧用户和新用户列表中)
背景:我们有很多用户一次可以访问某些应用程序六个月,所有这些用户都是在同一时间开始的(想想大学里一个学期的课程)。每六个月,我都要清理这个群体,添加新的一批用户
当然,我可以想出两种方法来实现这一点,但它们似乎都很老练
- 我可以使用lineinfile直接编辑/etc/group
- 我可以删除组并重新创建它(但那甚至不是幂等的)
- 我可以以某种方式解析出旧组成员的列表,使用jinja2构建一个包含所有要删除的用户和所有要添加的用户的列表
---
- hosts: sample-host
gather_facts: no
vars:
managed_group: docker
valid_users:
- deploy
- telegraf
tasks:
- getent:
database: group
# 'getent_group' fact is registered by this module
- command: "gpasswd -d {{ item | quote }} {{ managed_group | quote }}"
become: yes
loop: "{{ actual_users | difference(valid_users) }}"
vars:
actual_users: "{{ getent_group[managed_group][2].split(',') }}"
---
- hosts: sample-host
gather_facts: no
vars:
managed_group: docker
valid_users:
- deploy
- telegraf
tasks:
- getent:
database: group
# 'getent_group' fact is registered by this module
- command: "gpasswd -d {{ item | quote }} {{ managed_group | quote }}"
become: yes
loop: "{{ actual_users | difference(valid_users) }}"
vars:
actual_users: "{{ getent_group[managed_group][2].split(',') }}"