mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-04 12:51:36 +00:00
Added option minimal|basic|full to gam print|show cigroup-members
Some checks are pending
Build and test GAM / build (Win64, build, 10, VC-WIN64A, windows-2022) (push) Waiting to run
Build and test GAM / build (aarch64, build, 3, linux-aarch64, ubuntu-24.04-arm) (push) Waiting to run
Build and test GAM / build (aarch64, build, 4, linux-aarch64, ubuntu-22.04-arm) (push) Waiting to run
Build and test GAM / build (aarch64, build, 6, linux-aarch64, ubuntu-22.04-arm, yes) (push) Waiting to run
Build and test GAM / build (aarch64, build, 8, darwin64-arm64, macos-14) (push) Waiting to run
Build and test GAM / build (aarch64, build, 9, darwin64-arm64, macos-15) (push) Waiting to run
Build and test GAM / build (x86_64, build, 1, linux-x86_64, ubuntu-22.04) (push) Waiting to run
Build and test GAM / build (x86_64, build, 2, linux-x86_64, ubuntu-24.04) (push) Waiting to run
Build and test GAM / build (x86_64, build, 5, linux-x86_64, ubuntu-22.04, yes) (push) Waiting to run
Build and test GAM / build (x86_64, build, 7, darwin64-x86_64, macos-13) (push) Waiting to run
Build and test GAM / build (x86_64, test, 11, ubuntu-24.04, 3.10) (push) Waiting to run
Build and test GAM / build (x86_64, test, 12, ubuntu-24.04, 3.11) (push) Waiting to run
Build and test GAM / build (x86_64, test, 13, ubuntu-24.04, 3.12) (push) Waiting to run
Build and test GAM / merge (push) Blocked by required conditions
Build and test GAM / publish (push) Blocked by required conditions
CodeQL / Analyze (python) (push) Waiting to run
Check for Google Root CA Updates / check-apis (push) Waiting to run
Some checks are pending
Build and test GAM / build (Win64, build, 10, VC-WIN64A, windows-2022) (push) Waiting to run
Build and test GAM / build (aarch64, build, 3, linux-aarch64, ubuntu-24.04-arm) (push) Waiting to run
Build and test GAM / build (aarch64, build, 4, linux-aarch64, ubuntu-22.04-arm) (push) Waiting to run
Build and test GAM / build (aarch64, build, 6, linux-aarch64, ubuntu-22.04-arm, yes) (push) Waiting to run
Build and test GAM / build (aarch64, build, 8, darwin64-arm64, macos-14) (push) Waiting to run
Build and test GAM / build (aarch64, build, 9, darwin64-arm64, macos-15) (push) Waiting to run
Build and test GAM / build (x86_64, build, 1, linux-x86_64, ubuntu-22.04) (push) Waiting to run
Build and test GAM / build (x86_64, build, 2, linux-x86_64, ubuntu-24.04) (push) Waiting to run
Build and test GAM / build (x86_64, build, 5, linux-x86_64, ubuntu-22.04, yes) (push) Waiting to run
Build and test GAM / build (x86_64, build, 7, darwin64-x86_64, macos-13) (push) Waiting to run
Build and test GAM / build (x86_64, test, 11, ubuntu-24.04, 3.10) (push) Waiting to run
Build and test GAM / build (x86_64, test, 12, ubuntu-24.04, 3.11) (push) Waiting to run
Build and test GAM / build (x86_64, test, 13, ubuntu-24.04, 3.12) (push) Waiting to run
Build and test GAM / merge (push) Blocked by required conditions
Build and test GAM / publish (push) Blocked by required conditions
CodeQL / Analyze (python) (push) Waiting to run
Check for Google Root CA Updates / check-apis (push) Waiting to run
This commit is contained in:
@@ -4017,16 +4017,19 @@ gam print cigroup-members [todrive <ToDriveAttribute>*]
|
|||||||
[types <CIGroupMemberTypeList>]
|
[types <CIGroupMemberTypeList>]
|
||||||
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||||
<CIGroupMembersFieldName>* [fields <CIGroupMembersFieldNameList>]
|
<CIGroupMembersFieldName>* [fields <CIGroupMembersFieldNameList>]
|
||||||
[(recursive [noduplicates])includederivedmembership] [nogroupeemail]
|
[minimal|basic|full]
|
||||||
|
[(recursive [noduplicates]) | includederivedmembership] [nogroupemail]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
gam show cigroup-members
|
gam show cigroup-members
|
||||||
[(cimember|ciowner <UserItem>)|(cigroup <GroupItem>)|(select <GroupEntity>)]
|
[(cimember|ciowner <UserItem>)|(cigroup <GroupItem>)|(select <GroupEntity>)]
|
||||||
[showownedby <UserItem>]
|
[showownedby <UserItem>]
|
||||||
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
[emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||||
[descriptionmatchpattern [not] <RegularExpression>]
|
[descriptionmatchpattern [not] <RegularExpression>]
|
||||||
[roles <GroupRoleList>] [members] [managers] [owners] [depth <Number>]
|
[roles <GroupRoleList>] [members] [managers] [owners]
|
||||||
[types <CIGroupMemberTypeList>]
|
[types <CIGroupMemberTypeList>]
|
||||||
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
[memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||||
|
[minimal|basic|full]
|
||||||
|
[(depth <Number>) | includederivedmembership]
|
||||||
|
|
||||||
# Cloud Identity Devices
|
# Cloud Identity Devices
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,15 @@
|
|||||||
|
7.04.03
|
||||||
|
|
||||||
|
Added option `minimal|basic|full` to `gam print cigroup-members`:
|
||||||
|
* `minimal` - Fields displayed: group, id, role, email
|
||||||
|
* `basic` - Fields displayed: group, type, id, role, email
|
||||||
|
* `full` - Fields displayed: group, type, id, role, email, createTime, updateTime; this is the default
|
||||||
|
|
||||||
|
Added option `minimal|basic|full` to `gam show cigroup-members`:
|
||||||
|
* `minimal` - Fields displayed: role, email
|
||||||
|
* `basic` - Fields displayed: type, role, email
|
||||||
|
* `full` - Fields displayed: type, role, email, createTime, updateTime; this is the default
|
||||||
|
|
||||||
7.04.02
|
7.04.02
|
||||||
|
|
||||||
Improved output formatting for the following commands:
|
Improved output formatting for the following commands:
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
||||||
__version__ = '7.04.02'
|
__version__ = '7.04.03'
|
||||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||||
|
|
||||||
#pylint: disable=wrong-import-position
|
#pylint: disable=wrong-import-position
|
||||||
@@ -5981,6 +5981,8 @@ def getCIGroupTransitiveMemberRoleFixType(groupName, tmember):
|
|||||||
member['type'] = Ent.TYPE_USER if not tid.endswith('.iam.gserviceaccount.com') else Ent.TYPE_SERVICE_ACCOUNT
|
member['type'] = Ent.TYPE_USER if not tid.endswith('.iam.gserviceaccount.com') else Ent.TYPE_SERVICE_ACCOUNT
|
||||||
elif ttype == 'groups':
|
elif ttype == 'groups':
|
||||||
member['type'] = Ent.TYPE_GROUP
|
member['type'] = Ent.TYPE_GROUP
|
||||||
|
elif tid.startswith('cbcm-browser.'):
|
||||||
|
member['type'] = Ent.TYPE_CBCM_BROWSER
|
||||||
else:
|
else:
|
||||||
member['type'] = Ent.TYPE_OTHER
|
member['type'] = Ent.TYPE_OTHER
|
||||||
else:
|
else:
|
||||||
@@ -33959,6 +33961,8 @@ def infoGroupMembers(entityList, ciGroupsAPI=False):
|
|||||||
printKeyValueList(['type', result['type']])
|
printKeyValueList(['type', result['type']])
|
||||||
for field in ['createTime', 'updateTime']:
|
for field in ['createTime', 'updateTime']:
|
||||||
printKeyValueList([field, formatLocalTime(result[field])])
|
printKeyValueList([field, formatLocalTime(result[field])])
|
||||||
|
if 'deliverySetting' in result:
|
||||||
|
printKeyValueList(['deliverySetting', result['deliverySetting']])
|
||||||
Ind.Decrement()
|
Ind.Decrement()
|
||||||
except (GAPI.groupNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis, GAPI.invalid, GAPI.forbidden) as e:
|
except (GAPI.groupNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis, GAPI.invalid, GAPI.forbidden) as e:
|
||||||
entityActionFailedWarning([entityType, groupKey], str(e), j, jcount)
|
entityActionFailedWarning([entityType, groupKey], str(e), j, jcount)
|
||||||
@@ -36121,17 +36125,10 @@ def getCIGroupTransitiveMembers(ci, groupName, membersList, i, count):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, count,
|
def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, count,
|
||||||
memberOptions, memberDisplayOptions, level, typesSet, listView='FULL', groupEmail=None):
|
memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs):
|
||||||
if groupEmail:
|
nameToPrint = groupEmail if groupEmail else groupName
|
||||||
nameToPrint = groupEmail
|
|
||||||
else:
|
|
||||||
nameToPrint = groupName
|
|
||||||
printGettingAllEntityItemsForWhom(memberRoles if memberRoles else Ent.ROLE_MANAGER_MEMBER_OWNER, nameToPrint, i, count)
|
printGettingAllEntityItemsForWhom(memberRoles if memberRoles else Ent.ROLE_MANAGER_MEMBER_OWNER, nameToPrint, i, count)
|
||||||
validRoles = _getCIRoleVerification(memberRoles)
|
validRoles = _getCIRoleVerification(memberRoles)
|
||||||
if listView == 'BASIC':
|
|
||||||
pageSize = GC.Values[GC.MEMBER_MAX_RESULTS_CI_BASIC]
|
|
||||||
else:
|
|
||||||
pageSize = GC.Values[GC.MEMBER_MAX_RESULTS_CI_FULL]
|
|
||||||
if memberOptions[MEMBEROPTION_INCLUDEDERIVEDMEMBERSHIP]:
|
if memberOptions[MEMBEROPTION_INCLUDEDERIVEDMEMBERSHIP]:
|
||||||
groupMembers = []
|
groupMembers = []
|
||||||
if not getCIGroupTransitiveMembers(ci, groupName, groupMembers, i, count):
|
if not getCIGroupTransitiveMembers(ci, groupName, groupMembers, i, count):
|
||||||
@@ -36145,12 +36142,11 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|||||||
groupMembers = callGAPIpages(ci.groups().memberships(), 'list', 'memberships',
|
groupMembers = callGAPIpages(ci.groups().memberships(), 'list', 'memberships',
|
||||||
pageMessage=getPageMessageForWhom(),
|
pageMessage=getPageMessageForWhom(),
|
||||||
throwReasons=GAPI.CIGROUP_LIST_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
throwReasons=GAPI.CIGROUP_LIST_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
||||||
parent=groupName, view=listView,
|
parent=groupName, **kwargs)
|
||||||
fields='nextPageToken,memberships(*)', pageSize=pageSize)
|
|
||||||
except (GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis,
|
except (GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis,
|
||||||
GAPI.forbidden, GAPI.badRequest, GAPI.invalid, GAPI.invalidArgument, GAPI.systemError,
|
GAPI.forbidden, GAPI.badRequest, GAPI.invalid, GAPI.invalidArgument, GAPI.systemError,
|
||||||
GAPI.permissionDenied, GAPI.serviceNotAvailable):
|
GAPI.permissionDenied, GAPI.serviceNotAvailable):
|
||||||
entityUnknownWarning(Ent.CLOUD_IDENTITY_GROUP, groupName, i, count)
|
entityUnknownWarning(Ent.CLOUD_IDENTITY_GROUP, nameToPrint, i, count)
|
||||||
return
|
return
|
||||||
checkCategory = memberDisplayOptions['showCategory']
|
checkCategory = memberDisplayOptions['showCategory']
|
||||||
if not memberOptions[MEMBEROPTION_RECURSIVE]:
|
if not memberOptions[MEMBEROPTION_RECURSIVE]:
|
||||||
@@ -36184,7 +36180,7 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|||||||
memberName not in membersSet):
|
memberName not in membersSet):
|
||||||
membersSet.add(memberName)
|
membersSet.add(memberName)
|
||||||
member['level'] = level
|
member['level'] = level
|
||||||
member['subgroup'] = groupName
|
member['subgroup'] = nameToPrint
|
||||||
membersList.append(member)
|
membersList.append(member)
|
||||||
else:
|
else:
|
||||||
if memberName not in membersSet:
|
if memberName not in membersSet:
|
||||||
@@ -36193,37 +36189,40 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|||||||
checkCIMemberMatch(member, memberOptions) and
|
checkCIMemberMatch(member, memberOptions) and
|
||||||
(not checkCategory or _checkCIMemberCategory(member, memberDisplayOptions))):
|
(not checkCategory or _checkCIMemberCategory(member, memberDisplayOptions))):
|
||||||
member['level'] = level
|
member['level'] = level
|
||||||
member['subgroup'] = groupName
|
member['subgroup'] = nameToPrint
|
||||||
membersList.append(member)
|
membersList.append(member)
|
||||||
_, gname = member['name'].rsplit('/', 1)
|
_, gname = member['name'].rsplit('/', 1)
|
||||||
groupMemberList.append(f'groups/{gname}')
|
groupMemberList.append((f'groups/{gname}', memberName))
|
||||||
for member in groupMemberList:
|
for member in groupMemberList:
|
||||||
getCIGroupMembers(ci, member, memberRoles, membersList, membersSet, i, count,
|
getCIGroupMembers(ci, member[0], memberRoles, membersList, membersSet, i, count,
|
||||||
memberOptions, memberDisplayOptions, level+1, typesSet)
|
memberOptions, memberDisplayOptions, level+1, typesSet, member[1], kwargs)
|
||||||
else:
|
else:
|
||||||
for member in groupMembers:
|
for member in groupMembers:
|
||||||
getCIGroupMemberRoleFixType(member)
|
getCIGroupMemberRoleFixType(member)
|
||||||
|
memberName = member.get('preferredMemberKey', {}).get('id', '')
|
||||||
if member['type'] != Ent.TYPE_GROUP:
|
if member['type'] != Ent.TYPE_GROUP:
|
||||||
if (member['type'] in typesSet and
|
if (member['type'] in typesSet and
|
||||||
checkCIMemberMatch(member, memberOptions) and
|
checkCIMemberMatch(member, memberOptions) and
|
||||||
_checkMemberRole(member, validRoles) and
|
_checkMemberRole(member, validRoles) and
|
||||||
(not checkCategory or _checkCIMemberCategory(member, memberDisplayOptions))):
|
(not checkCategory or _checkCIMemberCategory(member, memberDisplayOptions))):
|
||||||
member['level'] = level
|
member['level'] = level
|
||||||
member['subgroup'] = groupName
|
member['subgroup'] = nameToPrint
|
||||||
membersList.append(member)
|
membersList.append(member)
|
||||||
else:
|
else:
|
||||||
if (member['type'] in typesSet and
|
if (member['type'] in typesSet and
|
||||||
checkCIMemberMatch(member, memberOptions) and
|
checkCIMemberMatch(member, memberOptions) and
|
||||||
(not checkCategory or _checkCIMemberCategory(member, memberDisplayOptions))):
|
(not checkCategory or _checkCIMemberCategory(member, memberDisplayOptions))):
|
||||||
member['level'] = level
|
member['level'] = level
|
||||||
member['subgroup'] = groupName
|
member['subgroup'] = nameToPrint
|
||||||
membersList.append(member)
|
membersList.append(member)
|
||||||
_, gname = member['name'].rsplit('/', 1)
|
_, gname = member['name'].rsplit('/', 1)
|
||||||
getCIGroupMembers(ci, f'groups/{gname}', memberRoles, membersList, membersSet, i, count,
|
getCIGroupMembers(ci, f'groups/{gname}', memberRoles, membersList, membersSet, i, count,
|
||||||
memberOptions, memberDisplayOptions, level+1, typesSet)
|
memberOptions, memberDisplayOptions, level+1, typesSet, memberName, kwargs)
|
||||||
|
|
||||||
CIGROUPMEMBERS_FIELDS_CHOICE_MAP = {
|
CIGROUPMEMBERS_FIELDS_CHOICE_MAP = {
|
||||||
'createtime': 'createTime',
|
'createtime': 'createTime',
|
||||||
|
'delivery': 'deliverySetting',
|
||||||
|
'deliverysettings': 'deliverySetting',
|
||||||
'expiretime': 'expireTime',
|
'expiretime': 'expireTime',
|
||||||
'id': 'name',
|
'id': 'name',
|
||||||
'memberkey': 'preferredMemberKey',
|
'memberkey': 'preferredMemberKey',
|
||||||
@@ -36244,6 +36243,16 @@ CIGROUPMEMBERS_SORT_FIELDS = [
|
|||||||
]
|
]
|
||||||
CIGROUPMEMBERS_TIME_OBJECTS = {'createTime', 'updateTime', 'expireTime'}
|
CIGROUPMEMBERS_TIME_OBJECTS = {'createTime', 'updateTime', 'expireTime'}
|
||||||
|
|
||||||
|
def _getCIListGroupMembersArgs(listView):
|
||||||
|
if listView == 'full':
|
||||||
|
return {'view': 'FULL', 'pageSize': GC.Values[GC.MEMBER_MAX_RESULTS_CI_FULL],
|
||||||
|
'fields': 'nextPageToken,memberships(*)'}
|
||||||
|
if listView == 'basic':
|
||||||
|
return {'view': 'FULL', 'pageSize': GC.Values[GC.MEMBER_MAX_RESULTS_CI_FULL],
|
||||||
|
'fields': 'nextPageToken,memberships(name,preferredMemberKey,roles,type)'}
|
||||||
|
return {'view': 'BASIC', 'pageSize': GC.Values[GC.MEMBER_MAX_RESULTS_CI_BASIC],
|
||||||
|
'fields': 'nextPageToken,memberships(*)'}
|
||||||
|
|
||||||
# gam print cigroup-members [todrive <ToDriveAttribute>*]
|
# gam print cigroup-members [todrive <ToDriveAttribute>*]
|
||||||
# [(cimember|ciowner <UserItem>)|(cigroup <GroupItem>)|(select <GroupEntity>)]
|
# [(cimember|ciowner <UserItem>)|(cigroup <GroupItem>)|(select <GroupEntity>)]
|
||||||
# [showownedby <UserItem>]
|
# [showownedby <UserItem>]
|
||||||
@@ -36253,6 +36262,7 @@ CIGROUPMEMBERS_TIME_OBJECTS = {'createTime', 'updateTime', 'expireTime'}
|
|||||||
# [types <CIGroupMemberTypeList>]
|
# [types <CIGroupMemberTypeList>]
|
||||||
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||||
# <CIGroupMembersFieldName>* [fields <CIGroupMembersFieldNameList>]
|
# <CIGroupMembersFieldName>* [fields <CIGroupMembersFieldNameList>]
|
||||||
|
# [minimal|basic|full]
|
||||||
# [(recursive [noduplicates])|includederivedmembership] [nogroupeemail]
|
# [(recursive [noduplicates])|includederivedmembership] [nogroupeemail]
|
||||||
# [formatjson [quotechar <Character>]]
|
# [formatjson [quotechar <Character>]]
|
||||||
def doPrintCIGroupMembers():
|
def doPrintCIGroupMembers():
|
||||||
@@ -36270,7 +36280,7 @@ def doPrintCIGroupMembers():
|
|||||||
rolesSet = set()
|
rolesSet = set()
|
||||||
typesSet = set()
|
typesSet = set()
|
||||||
matchPatterns = {}
|
matchPatterns = {}
|
||||||
listView = 'FULL'
|
listView = 'full'
|
||||||
while Cmd.ArgumentsRemaining():
|
while Cmd.ArgumentsRemaining():
|
||||||
myarg = getArgument()
|
myarg = getArgument()
|
||||||
if myarg == 'todrive':
|
if myarg == 'todrive':
|
||||||
@@ -36311,10 +36321,12 @@ def doPrintCIGroupMembers():
|
|||||||
memberOptions[MEMBEROPTION_RECURSIVE] = False
|
memberOptions[MEMBEROPTION_RECURSIVE] = False
|
||||||
elif myarg == 'nogroupemail':
|
elif myarg == 'nogroupemail':
|
||||||
groupColumn = False
|
groupColumn = False
|
||||||
elif myarg == 'basic':
|
elif myarg in {'minimal', 'basic', 'full'}:
|
||||||
listView = 'BASIC'
|
listView = myarg
|
||||||
else:
|
else:
|
||||||
FJQC.GetFormatJSONQuoteChar(myarg, False)
|
FJQC.GetFormatJSONQuoteChar(myarg, False)
|
||||||
|
if listView == 'minimal' and memberOptions[MEMBEROPTION_RECURSIVE]:
|
||||||
|
usageErrorExit(Msg.ARE_MUTUALLY_EXCLUSIVE.format('minimal', 'recursive'))
|
||||||
if not typesSet:
|
if not typesSet:
|
||||||
typesSet = {Ent.TYPE_USER} if memberOptions[MEMBEROPTION_RECURSIVE] else ALL_CIGROUP_MEMBER_TYPES
|
typesSet = {Ent.TYPE_USER} if memberOptions[MEMBEROPTION_RECURSIVE] else ALL_CIGROUP_MEMBER_TYPES
|
||||||
fields = ','.join(set(groupFieldsLists['ci']))
|
fields = ','.join(set(groupFieldsLists['ci']))
|
||||||
@@ -36341,6 +36353,7 @@ def doPrintCIGroupMembers():
|
|||||||
if showOwnedBy:
|
if showOwnedBy:
|
||||||
getRolesSet.add(Ent.ROLE_OWNER)
|
getRolesSet.add(Ent.ROLE_OWNER)
|
||||||
getRoles = ','.join(sorted(getRolesSet))
|
getRoles = ','.join(sorted(getRolesSet))
|
||||||
|
kwargs = _getCIListGroupMembersArgs(listView)
|
||||||
level = 0
|
level = 0
|
||||||
i = 0
|
i = 0
|
||||||
count = len(entityList)
|
count = len(entityList)
|
||||||
@@ -36367,7 +36380,7 @@ def doPrintCIGroupMembers():
|
|||||||
membersList = []
|
membersList = []
|
||||||
membersSet = set()
|
membersSet = set()
|
||||||
getCIGroupMembers(ci, groupEntity['name'], getRoles, membersList, membersSet, i, count,
|
getCIGroupMembers(ci, groupEntity['name'], getRoles, membersList, membersSet, i, count,
|
||||||
memberOptions, memberDisplayOptions, level, typesSet, listView, groupEmail)
|
memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs)
|
||||||
if showOwnedBy and not checkCIGroupShowOwnedBy(showOwnedBy, membersList):
|
if showOwnedBy and not checkCIGroupShowOwnedBy(showOwnedBy, membersList):
|
||||||
continue
|
continue
|
||||||
for member in membersList:
|
for member in membersList:
|
||||||
@@ -36385,6 +36398,8 @@ def doPrintCIGroupMembers():
|
|||||||
row['subgroup'] = member['subgroup']
|
row['subgroup'] = member['subgroup']
|
||||||
if memberDisplayOptions['showCategory']:
|
if memberDisplayOptions['showCategory']:
|
||||||
row['category'] = member['category']
|
row['category'] = member['category']
|
||||||
|
if listView == 'minimal':
|
||||||
|
dmember.pop('type', None)
|
||||||
mapCIGroupMemberFieldNames(dmember)
|
mapCIGroupMemberFieldNames(dmember)
|
||||||
if not FJQC.formatJSON:
|
if not FJQC.formatJSON:
|
||||||
csvPF.WriteRowTitles(flattenJSON(dmember, flattened=row, timeObjects=CIGROUPMEMBERS_TIME_OBJECTS))
|
csvPF.WriteRowTitles(flattenJSON(dmember, flattened=row, timeObjects=CIGROUPMEMBERS_TIME_OBJECTS))
|
||||||
@@ -36414,17 +36429,19 @@ def doPrintCIGroupMembers():
|
|||||||
# [showownedby <UserItem>]
|
# [showownedby <UserItem>]
|
||||||
# [emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
# [emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
||||||
# [descriptionmatchpattern [not] <RegularExpression>]
|
# [descriptionmatchpattern [not] <RegularExpression>]
|
||||||
# [roles <GroupRoleList>] [members] [managers] [owners] [depth <Number>]
|
# [roles <GroupRoleList>] [members] [managers] [owners]
|
||||||
# [internal] [internaldomains <DomainList>] [external]
|
# [internal] [internaldomains <DomainList>] [external]
|
||||||
# [types <CIGroupMemberTypeList>]
|
# [types <CIGroupMemberTypeList>]
|
||||||
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
||||||
# [includederivedmembership]
|
# [minimal|basic|full]
|
||||||
|
# [(depth <Number>) | includederivedmembership]
|
||||||
def doShowCIGroupMembers():
|
def doShowCIGroupMembers():
|
||||||
def _roleOrder(key):
|
def _roleOrder(key):
|
||||||
return {Ent.ROLE_OWNER: 0, Ent.ROLE_MANAGER: 1, Ent.ROLE_MEMBER: 2}.get(key, 3)
|
return {Ent.ROLE_OWNER: 0, Ent.ROLE_MANAGER: 1, Ent.ROLE_MEMBER: 2}.get(key, 3)
|
||||||
|
|
||||||
def _typeOrder(key):
|
def _typeOrder(key):
|
||||||
return {Ent.TYPE_CUSTOMER: 0, Ent.TYPE_USER: 1, Ent.TYPE_GROUP: 2, Ent.TYPE_EXTERNAL: 3}.get(key, 4)
|
return {Ent.TYPE_CUSTOMER: 0, Ent.TYPE_USER: 1, Ent.TYPE_GROUP: 2,
|
||||||
|
Ent.TYPE_CBCM_BROWSER: 3, Ent.TYPE_OTHER: 4, Ent.TYPE_EXTERNAL: 5}.get(key, 6)
|
||||||
|
|
||||||
def _showGroup(groupName, groupEmail, depth):
|
def _showGroup(groupName, groupEmail, depth):
|
||||||
if includeDerivedMembership:
|
if includeDerivedMembership:
|
||||||
@@ -36435,8 +36452,7 @@ def doShowCIGroupMembers():
|
|||||||
try:
|
try:
|
||||||
membersList = callGAPIpages(ci.groups().memberships(), 'list', 'memberships',
|
membersList = callGAPIpages(ci.groups().memberships(), 'list', 'memberships',
|
||||||
throwReasons=GAPI.CIGROUP_LIST_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
throwReasons=GAPI.CIGROUP_LIST_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
||||||
parent=groupName, view='FULL',
|
parent=groupName, **kwargs)
|
||||||
fields='nextPageToken,memberships(*)', pageSize=GC.Values[GC.MEMBER_MAX_RESULTS])
|
|
||||||
for member in membersList:
|
for member in membersList:
|
||||||
getCIGroupMemberRoleFixType(member)
|
getCIGroupMemberRoleFixType(member)
|
||||||
except (GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis,
|
except (GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis,
|
||||||
@@ -36457,7 +36473,10 @@ def doShowCIGroupMembers():
|
|||||||
if (_checkMemberRole(member, rolesSet) and
|
if (_checkMemberRole(member, rolesSet) and
|
||||||
member['type'] in typesSet and
|
member['type'] in typesSet and
|
||||||
checkCIMemberMatch(member, memberOptions)):
|
checkCIMemberMatch(member, memberOptions)):
|
||||||
memberDetails = f'{member.get("role", Ent.ROLE_MEMBER)}, {member["type"]}, {member["preferredMemberKey"]["id"]}'
|
if listView != 'minimal':
|
||||||
|
memberDetails = f'{member.get("role", Ent.ROLE_MEMBER)}, {member["type"]}, {member["preferredMemberKey"]["id"]}'
|
||||||
|
else:
|
||||||
|
memberDetails = f'{member.get("role", Ent.ROLE_MEMBER)}, {member["preferredMemberKey"]["id"]}'
|
||||||
if checkCategory:
|
if checkCategory:
|
||||||
memberDetails += f', {member["category"]}'
|
memberDetails += f', {member["category"]}'
|
||||||
for field in ['createTime', 'updateTime', 'expireTime']:
|
for field in ['createTime', 'updateTime', 'expireTime']:
|
||||||
@@ -36482,6 +36501,7 @@ def doShowCIGroupMembers():
|
|||||||
matchPatterns = {}
|
matchPatterns = {}
|
||||||
maxdepth = -1
|
maxdepth = -1
|
||||||
includeDerivedMembership = False
|
includeDerivedMembership = False
|
||||||
|
listView = 'full'
|
||||||
while Cmd.ArgumentsRemaining():
|
while Cmd.ArgumentsRemaining():
|
||||||
myarg = getArgument()
|
myarg = getArgument()
|
||||||
if myarg == 'showownedby':
|
if myarg == 'showownedby':
|
||||||
@@ -36512,6 +36532,8 @@ def doShowCIGroupMembers():
|
|||||||
maxdepth = getInteger(minVal=-1)
|
maxdepth = getInteger(minVal=-1)
|
||||||
elif myarg == 'includederivedmembership':
|
elif myarg == 'includederivedmembership':
|
||||||
includeDerivedMembership = True
|
includeDerivedMembership = True
|
||||||
|
elif myarg in {'minimal', 'basic', 'full'}:
|
||||||
|
listView = myarg
|
||||||
else:
|
else:
|
||||||
unknownArgumentExit()
|
unknownArgumentExit()
|
||||||
if not rolesSet:
|
if not rolesSet:
|
||||||
@@ -36521,6 +36543,7 @@ def doShowCIGroupMembers():
|
|||||||
checkCategory = memberDisplayOptions['showCategory']
|
checkCategory = memberDisplayOptions['showCategory']
|
||||||
fields = ','.join(set(groupFieldsLists['ci']))
|
fields = ','.join(set(groupFieldsLists['ci']))
|
||||||
entityList = getCIGroupMembersEntityList(ci, entityList, query, subTitle, matchPatterns, groupFieldsLists['ci'], None)
|
entityList = getCIGroupMembersEntityList(ci, entityList, query, subTitle, matchPatterns, groupFieldsLists['ci'], None)
|
||||||
|
kwargs = _getCIListGroupMembersArgs(listView)
|
||||||
i = 0
|
i = 0
|
||||||
count = len(entityList)
|
count = len(entityList)
|
||||||
for group in entityList:
|
for group in entityList:
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ LICENSE_SKUS = 'license_skus'
|
|||||||
# When retrieving lists of Google Group members from API, how many should be retrieved in each chunk
|
# When retrieving lists of Google Group members from API, how many should be retrieved in each chunk
|
||||||
MEMBER_MAX_RESULTS = 'member_max_results'
|
MEMBER_MAX_RESULTS = 'member_max_results'
|
||||||
# CI API Group members max page size when view=BASIC
|
# CI API Group members max page size when view=BASIC
|
||||||
MEMBER_MAX_RESULTS_CI_BASIC = 'member.max_results_ci_basic'
|
MEMBER_MAX_RESULTS_CI_BASIC = 'member_max_results_ci_basic'
|
||||||
# CI API Group members max page size when view=FULL
|
# CI API Group members max page size when view=FULL
|
||||||
MEMBER_MAX_RESULTS_CI_FULL = 'member_max_results_ci_full'
|
MEMBER_MAX_RESULTS_CI_FULL = 'member_max_results_ci_full'
|
||||||
# When deleting or modifying Gmail messages, how many should be processed in each batch
|
# When deleting or modifying Gmail messages, how many should be processed in each batch
|
||||||
|
|||||||
Reference in New Issue
Block a user