Ansible / Linux系统:设置组的成员列表

时间:2019-01-30 18:03:17

标签: ansible

在Ansible / 7.6在RedHat,我在寻找一种方式来清除一组的成员列表,并将其设置为一个新的列表。

给定一个用户列表U1,U2,U3,U4,我想变换在/ etc /组以下项:

mygroup:x:1234:u1,oldu17,oldu19,u3

mygroup:x:1234:u1,u2,u3,u4

我没有访问组成员的旧列表。另外请注意,某些成员可能留在组中(在上述例子中,U1和U3都处于老用户的新的列表)

背景:我们有许多用户一次可以访问六个月的某些应用程序,并且都是在同一时间开始的(例如,大学里一个学期的课程)。每六个月,我必须清除该组并添加新一批用户。

当然,我能想到的几种方法可以做到这一点,但他们似乎都非常的hackish。

  • 我可以使用lineinfile到编辑/ etc /组直接。
  • 我可以删除该组并重新创建它(但不会甚至幂等)。
  • 我可以以某种方式解析旧组成员的列表,使用jinja2构建要删除的所有用户以及要添加的所有用户的列表。

我要寻找的是不太粗糙的东西,希望不太复杂。

1 个答案:

答案 0 :(得分:1)

类似这样的东西:

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