Ansible/Linux:设置一个组';会员名单

Ansible/Linux:设置一个组';会员名单,ansible,Ansible,在Ansible/Redhat7.6中,我正在寻找一种清除组成员列表并将其设置为新列表的方法 给定一个用户列表u1、u2、u3、u4,我想转换/etc/group中的以下条目: mygroup:x:1234:u1,oldu17,oldu19,u3 到 我无法访问旧的组成员列表。还要注意,一些成员可能会留在组中(在上面的示例中,u1和u3都在旧用户和新用户列表中) 背景:我们有很多用户一次可以访问某些应用程序六个月,所有这些用户都是在同一时间开始的(想想大学里一个学期的课程)。每六个月,我都要清

在Ansible/Redhat7.6中,我正在寻找一种清除组成员列表并将其设置为新列表的方法

给定一个用户列表u1、u2、u3、u4,我想转换/etc/group中的以下条目:

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(',') }}"