From 9413a6c3f1ae3e3d822eaee5b30c0066a7d05828 Mon Sep 17 00:00:00 2001 From: Zim Kalinowski Date: Mon, 11 Mar 2019 15:13:41 +0800 Subject: [PATCH] proper approach to query paged resources (#53500) * proper approach to query paged resources * fixed pep8 * removed unnecessary check --- .../cloud/azure/azure_rm_resource_facts.py | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/lib/ansible/modules/cloud/azure/azure_rm_resource_facts.py b/lib/ansible/modules/cloud/azure/azure_rm_resource_facts.py index 61e1851157..82ec43f931 100644 --- a/lib/ansible/modules/cloud/azure/azure_rm_resource_facts.py +++ b/lib/ansible/modules/cloud/azure/azure_rm_resource_facts.py @@ -183,18 +183,25 @@ class AzureRMResourceFacts(AzureRMModuleBase): header_parameters = {} header_parameters['Content-Type'] = 'application/json; charset=utf-8' + skiptoken = None - response = self.mgmt_client.query(self.url, "GET", query_parameters, header_parameters, None, [200, 404], 0, 0) - - try: - response = json.loads(response.text) - if response is list: - self.results['response'] = response - else: - self.results['response'] = [response] - except Exception: - self.results['response'] = [] + while True: + if skiptoken: + query_parameters['skiptoken'] = skiptoken + response = self.mgmt_client.query(self.url, "GET", query_parameters, header_parameters, None, [200, 404], 0, 0) + try: + response = json.loads(response.text) + if isinstance(response, dict): + if response.get('value'): + self.results['response'] = self.results['response'] + response['value'] + skiptoken = response.get('nextLink') + else: + self.results['response'] = self.results['response'] + [response] + except Exception: + self.results['response'] = [] + if not skiptoken: + break return self.results