From dda1c7e0bce656f4acfa652e54ea17f8b47f98f8 Mon Sep 17 00:00:00 2001 From: kmcdonough Date: Thu, 15 Feb 2024 15:16:47 -0500 Subject: [PATCH 1/3] Fix: parse paginated replies for users and groups --- plugins/modules/azure_rm_adgroup_info.py | 18 ++++++++++++------ plugins/modules/azure_rm_aduser_info.py | 16 +++++++++++++--- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/plugins/modules/azure_rm_adgroup_info.py b/plugins/modules/azure_rm_adgroup_info.py index 0bf9c92f0..8c6996f9c 100644 --- a/plugins/modules/azure_rm_adgroup_info.py +++ b/plugins/modules/azure_rm_adgroup_info.py @@ -311,6 +311,7 @@ async def get_group(self, group_id): return await self._client.groups.by_group_id(group_id).get() async def get_group_list(self, filter=None): + kwargs = {} if filter: request_configuration = GroupsRequestBuilder.GroupsRequestBuilderGetRequestConfiguration( query_parameters=GroupsRequestBuilder.GroupsRequestBuilderGetQueryParameters( @@ -318,12 +319,17 @@ async def get_group_list(self, filter=None): filter=filter, ), ) - groups = await self._client.groups.get(request_configuration=request_configuration) - else: - groups = await self._client.groups.get() - - if groups and groups.value: - return groups.value + kwargs["request_configuration"] = request_configuration + + groups = [] + # paginated response can be quite large + response = await self._client.groups.get(**kwargs) + if response: + groups += response.value + while response is not None and response.odata_next_link is not None: + response = self._client.groups.with_url(response.odata_next_link).get(**kwargs) + if response: + groups += response.value return [] diff --git a/plugins/modules/azure_rm_aduser_info.py b/plugins/modules/azure_rm_aduser_info.py index 5942c241b..27097590a 100644 --- a/plugins/modules/azure_rm_aduser_info.py +++ b/plugins/modules/azure_rm_aduser_info.py @@ -216,8 +216,8 @@ def exec_module(self, **kwargs): users = asyncio.get_event_loop().run_until_complete(self.get_users_by_filter(self.odata_filter)) ad_users = list(users.value) elif self.all: - users = asyncio.get_event_loop().run_until_complete(self.get_users()) - ad_users = list(users.value) + # this returns as a list, since we parse multiple pages + ad_users = asyncio.get_event_loop().run_until_complete(self.get_users()) self.results['ad_users'] = [self.to_dict(user) for user in ad_users] @@ -251,7 +251,17 @@ async def get_users(self): select=["accountEnabled", "displayName", "mail", "mailNickname", "id", "userPrincipalName", "userType"] ), ) - return await self._client.users.get(request_configuration=request_configuration) + users = [] + # paginated response can be quite large + response = await self._client.users.get(request_configuration=request_configuration) + if response: + users += response.value + while response is not None and response.odata_next_link is not None: + response = self._client.users.with_url(response.odata_next_link).get(request_configuration=request_configuration) + if response: + users += response.value + + return users async def get_users_by_filter(self, filter): return await self._client.users.get( From 0725704d06b90f6ca492849832665ecd4530eca8 Mon Sep 17 00:00:00 2001 From: kmcdonough Date: Thu, 15 Feb 2024 15:26:45 -0500 Subject: [PATCH 2/3] Fix: await --- plugins/modules/azure_rm_adgroup_info.py | 2 +- plugins/modules/azure_rm_aduser_info.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/modules/azure_rm_adgroup_info.py b/plugins/modules/azure_rm_adgroup_info.py index 8c6996f9c..8f9571712 100644 --- a/plugins/modules/azure_rm_adgroup_info.py +++ b/plugins/modules/azure_rm_adgroup_info.py @@ -327,7 +327,7 @@ async def get_group_list(self, filter=None): if response: groups += response.value while response is not None and response.odata_next_link is not None: - response = self._client.groups.with_url(response.odata_next_link).get(**kwargs) + response = await self._client.groups.with_url(response.odata_next_link).get(**kwargs) if response: groups += response.value diff --git a/plugins/modules/azure_rm_aduser_info.py b/plugins/modules/azure_rm_aduser_info.py index 27097590a..297653e0e 100644 --- a/plugins/modules/azure_rm_aduser_info.py +++ b/plugins/modules/azure_rm_aduser_info.py @@ -257,7 +257,7 @@ async def get_users(self): if response: users += response.value while response is not None and response.odata_next_link is not None: - response = self._client.users.with_url(response.odata_next_link).get(request_configuration=request_configuration) + response = await self._client.users.with_url(response.odata_next_link).get(request_configuration=request_configuration) if response: users += response.value From d4289c051739b443b2d446776ee7ce45f94bd62f Mon Sep 17 00:00:00 2001 From: kmcdonough Date: Thu, 15 Feb 2024 15:36:49 -0500 Subject: [PATCH 3/3] wrong var return --- plugins/modules/azure_rm_adgroup_info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/modules/azure_rm_adgroup_info.py b/plugins/modules/azure_rm_adgroup_info.py index 8f9571712..05ff8c1ca 100644 --- a/plugins/modules/azure_rm_adgroup_info.py +++ b/plugins/modules/azure_rm_adgroup_info.py @@ -331,7 +331,7 @@ async def get_group_list(self, filter=None): if response: groups += response.value - return [] + return groups async def get_group_owners(self, group_id): request_configuration = GroupsRequestBuilder.GroupsRequestBuilderGetRequestConfiguration(