Skip to content

Commit 7b3202a

Browse files
authored
Merge pull request #11 from edquist/SOFTWARE-5460.ap-specific
add filter group option (-g) (SOFTWARE-5460)
2 parents 851abae + 130ee96 commit 7b3202a

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

osg-comanage-project-usermap.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
-e ENDPOINT specify REST endpoint
2626
(default = {ENDPOINT})
2727
-o outfile specify output file (default: write to stdout)
28+
-g filter_group filter users by group name (eg, 'ap1-login')
2829
-h display this help text
2930
3031
PASS for USER is taken from the first of:
@@ -48,6 +49,7 @@ class Options:
4849
osg_co_id = OSG_CO_ID
4950
outfile = None
5051
authstr = None
52+
filtergrp = None
5153

5254

5355
options = Options()
@@ -145,7 +147,7 @@ def get_co_person_osguser(pid):
145147

146148
def parse_options(args):
147149
try:
148-
ops, args = getopt.getopt(args, 'u:c:d:f:e:o:h')
150+
ops, args = getopt.getopt(args, 'u:c:d:f:g:e:o:h')
149151
except getopt.GetoptError:
150152
usage()
151153

@@ -163,6 +165,7 @@ def parse_options(args):
163165
if op == '-f': passfile = arg
164166
if op == '-e': options.endpoint = arg
165167
if op == '-o': options.outfile = arg
168+
if op == '-g': options.filtergrp = arg
166169

167170
user, passwd = getpw(options.user, passfd, passfile)
168171
options.authstr = mkauthstr(user, passwd)
@@ -179,13 +182,22 @@ def gid_pids_to_osguser_pid_gids(gid_pids, pid_osguser):
179182
return pid_gids
180183

181184

182-
def get_osguser_groups():
185+
def filter_by_group(pid_gids, groups, filter_group_name):
186+
groups_idx = { v: k for k,v in groups.items() }
187+
filter_gid = groups_idx[filter_group_name] # raises KeyError if missing
188+
filter_group_pids = set(get_co_group_members__pids(filter_gid))
189+
return { p: g for p,g in pid_gids.items() if p in filter_group_pids }
190+
191+
192+
def get_osguser_groups(filter_group_name=None):
183193
groups = get_osg_co_groups__map()
184194
ospool_gids = filter(co_group_is_ospool, groups)
185195
gid_pids = { gid: get_co_group_members__pids(gid) for gid in ospool_gids }
186196
all_pids = set( pid for gid in gid_pids for pid in gid_pids[gid] )
187197
pid_osguser = { pid: get_co_person_osguser(pid) for pid in all_pids }
188198
pid_gids = gid_pids_to_osguser_pid_gids(gid_pids, pid_osguser)
199+
if filter_group_name is not None:
200+
pid_gids = filter_by_group(pid_gids, groups, filter_group_name)
189201

190202
return { pid_osguser[pid]: sorted(map(groups.get, gids))
191203
for pid, gids in pid_gids.items() }
@@ -207,7 +219,7 @@ def print_usermap(osguser_groups):
207219
def main(args):
208220
parse_options(args)
209221

210-
osguser_groups = get_osguser_groups()
222+
osguser_groups = get_osguser_groups(options.filtergrp)
211223
print_usermap(osguser_groups)
212224

213225

0 commit comments

Comments
 (0)