mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-25 03:41:25 -07:00
support lro in azure_rm_resource (#49919)
This commit is contained in:
parent
e09196f760
commit
de3d188cdd
4 changed files with 93 additions and 10 deletions
|
@ -2,15 +2,23 @@
|
|||
#
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
from ansible.module_utils.ansible_release import __version__ as ANSIBLE_VERSION
|
||||
|
||||
try:
|
||||
from msrestazure.azure_exceptions import CloudError
|
||||
from msrestazure.azure_configuration import AzureConfiguration
|
||||
from msrest.service_client import ServiceClient
|
||||
from msrest.pipeline import ClientRawResponse
|
||||
from msrest.polling import LROPoller
|
||||
from msrestazure.polling.arm_polling import ARMPolling
|
||||
import uuid
|
||||
import json
|
||||
except ImportError:
|
||||
# This is handled in azure_rm_common
|
||||
AzureConfiguration = object
|
||||
|
||||
ANSIBLE_USER_AGENT = 'Ansible/{0}'.format(ANSIBLE_VERSION)
|
||||
|
||||
|
||||
class GenericRestClientConfiguration(AzureConfiguration):
|
||||
|
||||
|
@ -25,8 +33,7 @@ class GenericRestClientConfiguration(AzureConfiguration):
|
|||
|
||||
super(GenericRestClientConfiguration, self).__init__(base_url)
|
||||
|
||||
self.add_user_agent('genericrestclient/1.0')
|
||||
self.add_user_agent('Azure-SDK-For-Python')
|
||||
self.add_user_agent(ANSIBLE_USER_AGENT)
|
||||
|
||||
self.credentials = credentials
|
||||
self.subscription_id = subscription_id
|
||||
|
@ -39,12 +46,17 @@ class GenericRestClient(object):
|
|||
self._client = ServiceClient(self.config.credentials, self.config)
|
||||
self.models = None
|
||||
|
||||
def query(self, url, method, query_parameters, header_parameters, body, expected_status_codes):
|
||||
def query(self, url, method, query_parameters, header_parameters, body, expected_status_codes, polling_timeout, polling_interval):
|
||||
# Construct and send request
|
||||
operation_config = {}
|
||||
|
||||
request = None
|
||||
|
||||
if header_parameters is None:
|
||||
header_parameters = {}
|
||||
|
||||
header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
|
||||
|
||||
if method == 'GET':
|
||||
request = self._client.get(url, query_parameters)
|
||||
elif method == 'PUT':
|
||||
|
@ -66,5 +78,20 @@ class GenericRestClient(object):
|
|||
exp = CloudError(response)
|
||||
exp.request_id = response.headers.get('x-ms-request-id')
|
||||
raise exp
|
||||
elif response.status_code == 202 and polling_timeout > 0:
|
||||
def get_long_running_output(response):
|
||||
return response
|
||||
poller = LROPoller(self._client,
|
||||
ClientRawResponse(None, response),
|
||||
get_long_running_output,
|
||||
ARMPolling(polling_interval, **operation_config))
|
||||
response = self.get_poller_result(poller, polling_timeout)
|
||||
|
||||
return response
|
||||
|
||||
def get_poller_result(self, poller, timeout):
|
||||
try:
|
||||
poller.wait(timeout=timeout)
|
||||
return poller.result()
|
||||
except Exception as exc:
|
||||
raise
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue