def sync_members(self, group_name, members, dry_run=False): """Add or remove users from the specified group as necessary so that the group contains ``members`` (a list or uwnetids). When ``dry_run`` is True, log the necessary actions but don't modify the group. The group is created if it does not already exist. """ desired_members = set(members) try: current_members = set(self.get_members(group_name)) except MissingResourceError: self.reset() current_members = set() log.warning('creating group {}'.format(group_name)) if not dry_run: self.create_group(group_name) log.info('{} current members'.format(len(current_members))) log.debug('current members: {}'.format(current_members)) to_add, to_delete = reconcile(current_members, desired_members) if to_add: log.info('[+] {}: {}'.format(group_name, ','.join(to_add))) if not dry_run: self.add_members(group_name, sorted(to_add)) if to_delete: log.info('[-] {}: {}'.format(group_name, ','.join(to_delete))) if not dry_run: self.delete_members(group_name, sorted(to_delete))
def test05(self): to_add, to_remove = reconcile(current={'b', 'd'}, desired={'a', 'b', 'c'}) self.assertSetEqual(to_add, {'a', 'c'}) self.assertSetEqual(to_remove, {'d'})
def test01(self): to_add, to_remove = reconcile(current=set(), desired=set()) self.assertSetEqual(to_add, set()) self.assertSetEqual(to_remove, set())