Skip to content

Commit

Permalink
Generated from 1f26996e492bf786c2acd06e0a4e46159c52df70 (#3792)
Browse files Browse the repository at this point in the history
Adds storage account quick failover API
  • Loading branch information
AutorestCI authored Nov 14, 2018
1 parent 7344d6d commit b673676
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ class StorageAccount(TrackedResource):
:param is_hns_enabled: Account HierarchicalNamespace enabled if sets to
true.
:type is_hns_enabled: bool
:ivar failover_in_progress: If the failover is in progress, the value will
be true, otherwise, it will be null.
:vartype failover_in_progress: bool
"""

_validation = {
Expand All @@ -127,6 +130,7 @@ class StorageAccount(TrackedResource):
'encryption': {'readonly': True},
'access_tier': {'readonly': True},
'network_rule_set': {'readonly': True},
'failover_in_progress': {'readonly': True},
}

_attribute_map = {
Expand Down Expand Up @@ -154,6 +158,7 @@ class StorageAccount(TrackedResource):
'enable_https_traffic_only': {'key': 'properties.supportsHttpsTrafficOnly', 'type': 'bool'},
'network_rule_set': {'key': 'properties.networkAcls', 'type': 'NetworkRuleSet'},
'is_hns_enabled': {'key': 'properties.isHnsEnabled', 'type': 'bool'},
'failover_in_progress': {'key': 'properties.failoverInProgress', 'type': 'bool'},
}

def __init__(self, **kwargs):
Expand All @@ -177,3 +182,4 @@ def __init__(self, **kwargs):
self.enable_https_traffic_only = kwargs.get('enable_https_traffic_only', None)
self.network_rule_set = None
self.is_hns_enabled = kwargs.get('is_hns_enabled', None)
self.failover_in_progress = None
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ class StorageAccount(TrackedResource):
:param is_hns_enabled: Account HierarchicalNamespace enabled if sets to
true.
:type is_hns_enabled: bool
:ivar failover_in_progress: If the failover is in progress, the value will
be true, otherwise, it will be null.
:vartype failover_in_progress: bool
"""

_validation = {
Expand All @@ -127,6 +130,7 @@ class StorageAccount(TrackedResource):
'encryption': {'readonly': True},
'access_tier': {'readonly': True},
'network_rule_set': {'readonly': True},
'failover_in_progress': {'readonly': True},
}

_attribute_map = {
Expand Down Expand Up @@ -154,6 +158,7 @@ class StorageAccount(TrackedResource):
'enable_https_traffic_only': {'key': 'properties.supportsHttpsTrafficOnly', 'type': 'bool'},
'network_rule_set': {'key': 'properties.networkAcls', 'type': 'NetworkRuleSet'},
'is_hns_enabled': {'key': 'properties.isHnsEnabled', 'type': 'bool'},
'failover_in_progress': {'key': 'properties.failoverInProgress', 'type': 'bool'},
}

def __init__(self, *, location: str, tags=None, identity=None, enable_azure_files_aad_integration: bool=None, enable_https_traffic_only: bool=None, is_hns_enabled: bool=None, **kwargs) -> None:
Expand All @@ -177,3 +182,4 @@ def __init__(self, *, location: str, tags=None, identity=None, enable_azure_file
self.enable_https_traffic_only = enable_https_traffic_only
self.network_rule_set = None
self.is_hns_enabled = is_hns_enabled
self.failover_in_progress = None
Original file line number Diff line number Diff line change
Expand Up @@ -840,3 +840,88 @@ def list_service_sas(

return deserialized
list_service_sas.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListServiceSas'}


def _failover_initial(
self, resource_group_name, account_name, custom_headers=None, raw=False, **operation_config):
# Construct URL
url = self.failover.metadata['url']
path_format_arguments = {
'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'),
'accountName': self._serialize.url("account_name", account_name, 'str', max_length=24, min_length=3),
'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', min_length=1)
}
url = self._client.format_url(url, **path_format_arguments)

# Construct parameters
query_parameters = {}
query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str', min_length=1)

# Construct headers
header_parameters = {}
if self.config.generate_client_request_id:
header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
if custom_headers:
header_parameters.update(custom_headers)
if self.config.accept_language is not None:
header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str')

# Construct and send request
request = self._client.post(url, query_parameters, header_parameters)
response = self._client.send(request, stream=False, **operation_config)

if response.status_code not in [200, 202]:
exp = CloudError(response)
exp.request_id = response.headers.get('x-ms-request-id')
raise exp

if raw:
client_raw_response = ClientRawResponse(None, response)
return client_raw_response

def failover(
self, resource_group_name, account_name, custom_headers=None, raw=False, polling=True, **operation_config):
"""Failover request can be triggered for a storage account in case of
availability issues. The failover occurs from the storage account's
primary cluster to secondary cluster for RA-GRS accounts. The secondary
cluster will become primary after failover.
:param resource_group_name: The name of the resource group within the
user's subscription. The name is case insensitive.
:type resource_group_name: str
:param account_name: The name of the storage account within the
specified resource group. Storage account names must be between 3 and
24 characters in length and use numbers and lower-case letters only.
:type account_name: str
:param dict custom_headers: headers that will be added to the request
:param bool raw: The poller return type is ClientRawResponse, the
direct response alongside the deserialized response
:param polling: True for ARMPolling, False for no polling, or a
polling object for personal polling strategy
:return: An instance of LROPoller that returns None or
ClientRawResponse<None> if raw==True
:rtype: ~msrestazure.azure_operation.AzureOperationPoller[None] or
~msrestazure.azure_operation.AzureOperationPoller[~msrest.pipeline.ClientRawResponse[None]]
:raises: :class:`CloudError<msrestazure.azure_exceptions.CloudError>`
"""
raw_result = self._failover_initial(
resource_group_name=resource_group_name,
account_name=account_name,
custom_headers=custom_headers,
raw=True,
**operation_config
)

def get_long_running_output(response):
if raw:
client_raw_response = ClientRawResponse(None, response)
return client_raw_response

lro_delay = operation_config.get(
'long_running_operation_timeout',
self.config.long_running_operation_timeout)
if polling is True: polling_method = ARMPolling(lro_delay, lro_options={'final-state-via': 'location'}, **operation_config)
elif polling is False: polling_method = NoPolling()
else: polling_method = polling
return LROPoller(self._client, raw_result, get_long_running_output, polling_method)
failover.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/failover'}

0 comments on commit b673676

Please sign in to comment.