From 99d30418796ce5b7f753d05461f7ec74ea762be0 Mon Sep 17 00:00:00 2001 From: Kevin Jakubczak Date: Tue, 16 Jan 2024 19:44:42 -0500 Subject: [PATCH 1/4] Fixes #1408 --- plugins/module_utils/azure_rm_common.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/module_utils/azure_rm_common.py b/plugins/module_utils/azure_rm_common.py index 588d4beac..f4a252dd4 100644 --- a/plugins/module_utils/azure_rm_common.py +++ b/plugins/module_utils/azure_rm_common.py @@ -1491,7 +1491,9 @@ def __init__(self, auth_source=None, profile=None, subscription_id=None, client_ authority=self._adfs_authority_url) elif self.credentials.get('ad_user') is not None and self.credentials.get('password') is not None: - client_id = self.credentials.get('client_id', '04b07795-8ddb-461a-bbee-02f9e1bf7b46') + client_id = self.credentialss.get('client_id') + if client_id is None: + client_id = '04b07795-8ddb-461a-bbee-02f9e1bf7b46' self.azure_credential_track2 = user_password.UsernamePasswordCredential(username=self.credentials['ad_user'], password=self.credentials['password'], tenant_id=self.credentials.get('tenant', 'organizations'), From eba642b7c26bc4c71668d394a1a05a2278a0e2da Mon Sep 17 00:00:00 2001 From: Kevin Jakubczak Date: Tue, 23 Jan 2024 15:22:12 -0500 Subject: [PATCH 2/4] Add app_display_name option and fix bug that doesn't fetch all applications from tenant. --- .../modules/azure_rm_adapplication_info.py | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/plugins/modules/azure_rm_adapplication_info.py b/plugins/modules/azure_rm_adapplication_info.py index c89151486..dc07c6282 100644 --- a/plugins/modules/azure_rm_adapplication_info.py +++ b/plugins/modules/azure_rm_adapplication_info.py @@ -26,11 +26,15 @@ type: str object_id: description: - - It's application's object ID. + - The application's object ID. type: str identifier_uri: description: - - It's identifier_uri's object ID. + - The identifier_uri's object ID. + type: str + app_display_name: + description: + - The applications' Name. type: str extends_documentation_fragment: @@ -55,6 +59,10 @@ - name: get ad app info ---- by identifier uri azure_rm_adapplication_info: identifier_uri: "{{ identifier_uri }}" + +- name: get ad app info ---- by display name + azure_rm_adapplication_info: + app_display_name: "{{ display_name }}" ''' RETURN = ''' @@ -119,9 +127,11 @@ def __init__(self): self.module_arg_spec = dict( app_id=dict(type='str'), object_id=dict(type='str'), - identifier_uri=dict(type='str') + identifier_uri=dict(type='str'), + app_display_name=dict(type='str') ) self.app_id = None + self.app_display_name = None self.object_id = None self.identifier_uri = None self.results = dict(changed=False) @@ -147,9 +157,10 @@ def exec_module(self, **kwargs): sub_filters.append("identifierUris/any(s:s eq '{0}')".format(self.identifier_uri)) if self.app_id: sub_filters.append("appId eq '{0}'".format(self.app_id)) - + if self.app_display_name: + sub_filters.append("displayName eq '{0}'".format(self.app_display_name)) apps = asyncio.get_event_loop().run_until_complete(self.get_applications(sub_filters)) - applications = list(apps.value) + applications = list(apps) self.results['applications'] = [self.to_dict(app) for app in applications] except APIError as e: if e.response_status_code != 404: @@ -179,9 +190,25 @@ async def get_applications(self, sub_filters): filter=(' and '.join(sub_filters)), ), ) - return await self._client.applications.get(request_configuration=request_configuration) + applications = await self._client.applications.get(request_configuration=request_configuration) + return applications.value else: - return await self._client.applications.get() + applications_list = [] + applications = await self._client.applications.get() + for app in applications.value: + applications_list.append(app) + + if applications.odata_next_link: + next_link = applications.odata_next_link + else: + next_link = None + + while next_link: + applications = await self._client.applications.with_url(next_link).get() + next_link = applications.odata_next_link + for app in applications.value: + applications_list.append(app) + return applications_list def main(): From f77dc8dd103793010800f9bc3dc59a06bdeafc30 Mon Sep 17 00:00:00 2001 From: Kevin Jakubczak Date: Tue, 23 Jan 2024 15:22:44 -0500 Subject: [PATCH 3/4] Update adapplication module test to test for adapplication_info module search by display_name --- .../targets/azure_rm_adapplication/tasks/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/integration/targets/azure_rm_adapplication/tasks/main.yml b/tests/integration/targets/azure_rm_adapplication/tasks/main.yml index bb6a1ddce..23f4bb475 100644 --- a/tests/integration/targets/azure_rm_adapplication/tasks/main.yml +++ b/tests/integration/targets/azure_rm_adapplication/tasks/main.yml @@ -53,6 +53,11 @@ app_id: "{{ create_output.app_id }}" register: output +- name: Get ad app info by display name + azure_rm_adapplication_info: + object_id: "{{ create_output.app_display_name }}" + register: output + - name: Assert the application facts ansible.builtin.assert: that: From 80023260a295cfae49a42b08a5cebfcf0c96424b Mon Sep 17 00:00:00 2001 From: Kevin Jakubczak Date: Thu, 25 Jan 2024 08:54:50 -0500 Subject: [PATCH 4/4] Fix typo line 1525 --- plugins/module_utils/azure_rm_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/module_utils/azure_rm_common.py b/plugins/module_utils/azure_rm_common.py index 0b60ecd49..1d12caa0b 100644 --- a/plugins/module_utils/azure_rm_common.py +++ b/plugins/module_utils/azure_rm_common.py @@ -1522,7 +1522,7 @@ def __init__(self, auth_source=None, profile=None, subscription_id=None, client_ authority=self._adfs_authority_url) elif self.credentials.get('ad_user') is not None and self.credentials.get('password') is not None: - client_id = self.credentialss.get('client_id') + client_id = self.credentials.get('client_id') if client_id is None: client_id = '04b07795-8ddb-461a-bbee-02f9e1bf7b46' self.azure_credential_track2 = user_password.UsernamePasswordCredential(username=self.credentials['ad_user'],