1# coding=utf-8
2# --------------------------------------------------------------------------
3# Copyright (c) Microsoft Corporation. All rights reserved.
4# Licensed under the MIT License. See License.txt in the project root for license information.
5# Code generated by Microsoft (R) AutoRest Code Generator.
6# Changes may cause incorrect behavior and will be lost if the code is regenerated.
7# --------------------------------------------------------------------------
8
9import datetime
10from typing import Dict, List, Optional, Union
11
12from azure.core.exceptions import HttpResponseError
13import msrest.serialization
14
15from ._storage_management_client_enums import *
16
17
18class AccountSasParameters(msrest.serialization.Model):
19    """The parameters to list SAS credentials of a storage account.
20
21    All required parameters must be populated in order to send to Azure.
22
23    :param services: Required. The signed services accessible with the account SAS. Possible values
24     include: Blob (b), Queue (q), Table (t), File (f). Possible values include: "b", "q", "t", "f".
25    :type services: str or ~azure.mgmt.storage.v2020_08_01_preview.models.Services
26    :param resource_types: Required. The signed resource types that are accessible with the account
27     SAS. Service (s): Access to service-level APIs; Container (c): Access to container-level APIs;
28     Object (o): Access to object-level APIs for blobs, queue messages, table entities, and files.
29     Possible values include: "s", "c", "o".
30    :type resource_types: str or ~azure.mgmt.storage.v2020_08_01_preview.models.SignedResourceTypes
31    :param permissions: Required. The signed permissions for the account SAS. Possible values
32     include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process
33     (p). Possible values include: "r", "d", "w", "l", "a", "c", "u", "p".
34    :type permissions: str or ~azure.mgmt.storage.v2020_08_01_preview.models.Permissions
35    :param ip_address_or_range: An IP address or a range of IP addresses from which to accept
36     requests.
37    :type ip_address_or_range: str
38    :param protocols: The protocol permitted for a request made with the account SAS. Possible
39     values include: "https,http", "https".
40    :type protocols: str or ~azure.mgmt.storage.v2020_08_01_preview.models.HttpProtocol
41    :param shared_access_start_time: The time at which the SAS becomes valid.
42    :type shared_access_start_time: ~datetime.datetime
43    :param shared_access_expiry_time: Required. The time at which the shared access signature
44     becomes invalid.
45    :type shared_access_expiry_time: ~datetime.datetime
46    :param key_to_sign: The key to sign the account SAS token with.
47    :type key_to_sign: str
48    """
49
50    _validation = {
51        'services': {'required': True},
52        'resource_types': {'required': True},
53        'permissions': {'required': True},
54        'shared_access_expiry_time': {'required': True},
55    }
56
57    _attribute_map = {
58        'services': {'key': 'signedServices', 'type': 'str'},
59        'resource_types': {'key': 'signedResourceTypes', 'type': 'str'},
60        'permissions': {'key': 'signedPermission', 'type': 'str'},
61        'ip_address_or_range': {'key': 'signedIp', 'type': 'str'},
62        'protocols': {'key': 'signedProtocol', 'type': 'str'},
63        'shared_access_start_time': {'key': 'signedStart', 'type': 'iso-8601'},
64        'shared_access_expiry_time': {'key': 'signedExpiry', 'type': 'iso-8601'},
65        'key_to_sign': {'key': 'keyToSign', 'type': 'str'},
66    }
67
68    def __init__(
69        self,
70        *,
71        services: Union[str, "Services"],
72        resource_types: Union[str, "SignedResourceTypes"],
73        permissions: Union[str, "Permissions"],
74        shared_access_expiry_time: datetime.datetime,
75        ip_address_or_range: Optional[str] = None,
76        protocols: Optional[Union[str, "HttpProtocol"]] = None,
77        shared_access_start_time: Optional[datetime.datetime] = None,
78        key_to_sign: Optional[str] = None,
79        **kwargs
80    ):
81        super(AccountSasParameters, self).__init__(**kwargs)
82        self.services = services
83        self.resource_types = resource_types
84        self.permissions = permissions
85        self.ip_address_or_range = ip_address_or_range
86        self.protocols = protocols
87        self.shared_access_start_time = shared_access_start_time
88        self.shared_access_expiry_time = shared_access_expiry_time
89        self.key_to_sign = key_to_sign
90
91
92class ActiveDirectoryProperties(msrest.serialization.Model):
93    """Settings properties for Active Directory (AD).
94
95    All required parameters must be populated in order to send to Azure.
96
97    :param domain_name: Required. Specifies the primary domain that the AD DNS server is
98     authoritative for.
99    :type domain_name: str
100    :param net_bios_domain_name: Required. Specifies the NetBIOS domain name.
101    :type net_bios_domain_name: str
102    :param forest_name: Required. Specifies the Active Directory forest to get.
103    :type forest_name: str
104    :param domain_guid: Required. Specifies the domain GUID.
105    :type domain_guid: str
106    :param domain_sid: Required. Specifies the security identifier (SID).
107    :type domain_sid: str
108    :param azure_storage_sid: Required. Specifies the security identifier (SID) for Azure Storage.
109    :type azure_storage_sid: str
110    """
111
112    _validation = {
113        'domain_name': {'required': True},
114        'net_bios_domain_name': {'required': True},
115        'forest_name': {'required': True},
116        'domain_guid': {'required': True},
117        'domain_sid': {'required': True},
118        'azure_storage_sid': {'required': True},
119    }
120
121    _attribute_map = {
122        'domain_name': {'key': 'domainName', 'type': 'str'},
123        'net_bios_domain_name': {'key': 'netBiosDomainName', 'type': 'str'},
124        'forest_name': {'key': 'forestName', 'type': 'str'},
125        'domain_guid': {'key': 'domainGuid', 'type': 'str'},
126        'domain_sid': {'key': 'domainSid', 'type': 'str'},
127        'azure_storage_sid': {'key': 'azureStorageSid', 'type': 'str'},
128    }
129
130    def __init__(
131        self,
132        *,
133        domain_name: str,
134        net_bios_domain_name: str,
135        forest_name: str,
136        domain_guid: str,
137        domain_sid: str,
138        azure_storage_sid: str,
139        **kwargs
140    ):
141        super(ActiveDirectoryProperties, self).__init__(**kwargs)
142        self.domain_name = domain_name
143        self.net_bios_domain_name = net_bios_domain_name
144        self.forest_name = forest_name
145        self.domain_guid = domain_guid
146        self.domain_sid = domain_sid
147        self.azure_storage_sid = azure_storage_sid
148
149
150class Resource(msrest.serialization.Model):
151    """Common fields that are returned in the response for all Azure Resource Manager resources.
152
153    Variables are only populated by the server, and will be ignored when sending a request.
154
155    :ivar id: Fully qualified resource ID for the resource. Ex -
156     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
157    :vartype id: str
158    :ivar name: The name of the resource.
159    :vartype name: str
160    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
161     "Microsoft.Storage/storageAccounts".
162    :vartype type: str
163    """
164
165    _validation = {
166        'id': {'readonly': True},
167        'name': {'readonly': True},
168        'type': {'readonly': True},
169    }
170
171    _attribute_map = {
172        'id': {'key': 'id', 'type': 'str'},
173        'name': {'key': 'name', 'type': 'str'},
174        'type': {'key': 'type', 'type': 'str'},
175    }
176
177    def __init__(
178        self,
179        **kwargs
180    ):
181        super(Resource, self).__init__(**kwargs)
182        self.id = None
183        self.name = None
184        self.type = None
185
186
187class AzureEntityResource(Resource):
188    """The resource model definition for an Azure Resource Manager resource with an etag.
189
190    Variables are only populated by the server, and will be ignored when sending a request.
191
192    :ivar id: Fully qualified resource ID for the resource. Ex -
193     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
194    :vartype id: str
195    :ivar name: The name of the resource.
196    :vartype name: str
197    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
198     "Microsoft.Storage/storageAccounts".
199    :vartype type: str
200    :ivar etag: Resource Etag.
201    :vartype etag: str
202    """
203
204    _validation = {
205        'id': {'readonly': True},
206        'name': {'readonly': True},
207        'type': {'readonly': True},
208        'etag': {'readonly': True},
209    }
210
211    _attribute_map = {
212        'id': {'key': 'id', 'type': 'str'},
213        'name': {'key': 'name', 'type': 'str'},
214        'type': {'key': 'type', 'type': 'str'},
215        'etag': {'key': 'etag', 'type': 'str'},
216    }
217
218    def __init__(
219        self,
220        **kwargs
221    ):
222        super(AzureEntityResource, self).__init__(**kwargs)
223        self.etag = None
224
225
226class AzureFilesIdentityBasedAuthentication(msrest.serialization.Model):
227    """Settings for Azure Files identity based authentication.
228
229    All required parameters must be populated in order to send to Azure.
230
231    :param directory_service_options: Required. Indicates the directory service used. Possible
232     values include: "None", "AADDS", "AD".
233    :type directory_service_options: str or
234     ~azure.mgmt.storage.v2020_08_01_preview.models.DirectoryServiceOptions
235    :param active_directory_properties: Required if choose AD.
236    :type active_directory_properties:
237     ~azure.mgmt.storage.v2020_08_01_preview.models.ActiveDirectoryProperties
238    """
239
240    _validation = {
241        'directory_service_options': {'required': True},
242    }
243
244    _attribute_map = {
245        'directory_service_options': {'key': 'directoryServiceOptions', 'type': 'str'},
246        'active_directory_properties': {'key': 'activeDirectoryProperties', 'type': 'ActiveDirectoryProperties'},
247    }
248
249    def __init__(
250        self,
251        *,
252        directory_service_options: Union[str, "DirectoryServiceOptions"],
253        active_directory_properties: Optional["ActiveDirectoryProperties"] = None,
254        **kwargs
255    ):
256        super(AzureFilesIdentityBasedAuthentication, self).__init__(**kwargs)
257        self.directory_service_options = directory_service_options
258        self.active_directory_properties = active_directory_properties
259
260
261class BlobContainer(AzureEntityResource):
262    """Properties of the blob container, including Id, resource name, resource type, Etag.
263
264    Variables are only populated by the server, and will be ignored when sending a request.
265
266    :ivar id: Fully qualified resource ID for the resource. Ex -
267     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
268    :vartype id: str
269    :ivar name: The name of the resource.
270    :vartype name: str
271    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
272     "Microsoft.Storage/storageAccounts".
273    :vartype type: str
274    :ivar etag: Resource Etag.
275    :vartype etag: str
276    :ivar version: The version of the deleted blob container.
277    :vartype version: str
278    :ivar deleted: Indicates whether the blob container was deleted.
279    :vartype deleted: bool
280    :ivar deleted_time: Blob container deletion time.
281    :vartype deleted_time: ~datetime.datetime
282    :ivar remaining_retention_days: Remaining retention days for soft deleted blob container.
283    :vartype remaining_retention_days: int
284    :param default_encryption_scope: Default the container to use specified encryption scope for
285     all writes.
286    :type default_encryption_scope: str
287    :param deny_encryption_scope_override: Block override of encryption scope from the container
288     default.
289    :type deny_encryption_scope_override: bool
290    :param public_access: Specifies whether data in the container may be accessed publicly and the
291     level of access. Possible values include: "Container", "Blob", "None".
292    :type public_access: str or ~azure.mgmt.storage.v2020_08_01_preview.models.PublicAccess
293    :ivar last_modified_time: Returns the date and time the container was last modified.
294    :vartype last_modified_time: ~datetime.datetime
295    :ivar lease_status: The lease status of the container. Possible values include: "Locked",
296     "Unlocked".
297    :vartype lease_status: str or ~azure.mgmt.storage.v2020_08_01_preview.models.LeaseStatus
298    :ivar lease_state: Lease state of the container. Possible values include: "Available",
299     "Leased", "Expired", "Breaking", "Broken".
300    :vartype lease_state: str or ~azure.mgmt.storage.v2020_08_01_preview.models.LeaseState
301    :ivar lease_duration: Specifies whether the lease on a container is of infinite or fixed
302     duration, only when the container is leased. Possible values include: "Infinite", "Fixed".
303    :vartype lease_duration: str or ~azure.mgmt.storage.v2020_08_01_preview.models.LeaseDuration
304    :param metadata: A name-value pair to associate with the container as metadata.
305    :type metadata: dict[str, str]
306    :ivar immutability_policy: The ImmutabilityPolicy property of the container.
307    :vartype immutability_policy:
308     ~azure.mgmt.storage.v2020_08_01_preview.models.ImmutabilityPolicyProperties
309    :ivar legal_hold: The LegalHold property of the container.
310    :vartype legal_hold: ~azure.mgmt.storage.v2020_08_01_preview.models.LegalHoldProperties
311    :ivar has_legal_hold: The hasLegalHold public property is set to true by SRP if there are at
312     least one existing tag. The hasLegalHold public property is set to false by SRP if all existing
313     legal hold tags are cleared out. There can be a maximum of 1000 blob containers with
314     hasLegalHold=true for a given account.
315    :vartype has_legal_hold: bool
316    :ivar has_immutability_policy: The hasImmutabilityPolicy public property is set to true by SRP
317     if ImmutabilityPolicy has been created for this container. The hasImmutabilityPolicy public
318     property is set to false by SRP if ImmutabilityPolicy has not been created for this container.
319    :vartype has_immutability_policy: bool
320    """
321
322    _validation = {
323        'id': {'readonly': True},
324        'name': {'readonly': True},
325        'type': {'readonly': True},
326        'etag': {'readonly': True},
327        'version': {'readonly': True},
328        'deleted': {'readonly': True},
329        'deleted_time': {'readonly': True},
330        'remaining_retention_days': {'readonly': True},
331        'last_modified_time': {'readonly': True},
332        'lease_status': {'readonly': True},
333        'lease_state': {'readonly': True},
334        'lease_duration': {'readonly': True},
335        'immutability_policy': {'readonly': True},
336        'legal_hold': {'readonly': True},
337        'has_legal_hold': {'readonly': True},
338        'has_immutability_policy': {'readonly': True},
339    }
340
341    _attribute_map = {
342        'id': {'key': 'id', 'type': 'str'},
343        'name': {'key': 'name', 'type': 'str'},
344        'type': {'key': 'type', 'type': 'str'},
345        'etag': {'key': 'etag', 'type': 'str'},
346        'version': {'key': 'properties.version', 'type': 'str'},
347        'deleted': {'key': 'properties.deleted', 'type': 'bool'},
348        'deleted_time': {'key': 'properties.deletedTime', 'type': 'iso-8601'},
349        'remaining_retention_days': {'key': 'properties.remainingRetentionDays', 'type': 'int'},
350        'default_encryption_scope': {'key': 'properties.defaultEncryptionScope', 'type': 'str'},
351        'deny_encryption_scope_override': {'key': 'properties.denyEncryptionScopeOverride', 'type': 'bool'},
352        'public_access': {'key': 'properties.publicAccess', 'type': 'str'},
353        'last_modified_time': {'key': 'properties.lastModifiedTime', 'type': 'iso-8601'},
354        'lease_status': {'key': 'properties.leaseStatus', 'type': 'str'},
355        'lease_state': {'key': 'properties.leaseState', 'type': 'str'},
356        'lease_duration': {'key': 'properties.leaseDuration', 'type': 'str'},
357        'metadata': {'key': 'properties.metadata', 'type': '{str}'},
358        'immutability_policy': {'key': 'properties.immutabilityPolicy', 'type': 'ImmutabilityPolicyProperties'},
359        'legal_hold': {'key': 'properties.legalHold', 'type': 'LegalHoldProperties'},
360        'has_legal_hold': {'key': 'properties.hasLegalHold', 'type': 'bool'},
361        'has_immutability_policy': {'key': 'properties.hasImmutabilityPolicy', 'type': 'bool'},
362    }
363
364    def __init__(
365        self,
366        *,
367        default_encryption_scope: Optional[str] = None,
368        deny_encryption_scope_override: Optional[bool] = None,
369        public_access: Optional[Union[str, "PublicAccess"]] = None,
370        metadata: Optional[Dict[str, str]] = None,
371        **kwargs
372    ):
373        super(BlobContainer, self).__init__(**kwargs)
374        self.version = None
375        self.deleted = None
376        self.deleted_time = None
377        self.remaining_retention_days = None
378        self.default_encryption_scope = default_encryption_scope
379        self.deny_encryption_scope_override = deny_encryption_scope_override
380        self.public_access = public_access
381        self.last_modified_time = None
382        self.lease_status = None
383        self.lease_state = None
384        self.lease_duration = None
385        self.metadata = metadata
386        self.immutability_policy = None
387        self.legal_hold = None
388        self.has_legal_hold = None
389        self.has_immutability_policy = None
390
391
392class BlobInventoryPolicy(Resource):
393    """The storage account blob inventory policy.
394
395    Variables are only populated by the server, and will be ignored when sending a request.
396
397    :ivar id: Fully qualified resource ID for the resource. Ex -
398     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
399    :vartype id: str
400    :ivar name: The name of the resource.
401    :vartype name: str
402    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
403     "Microsoft.Storage/storageAccounts".
404    :vartype type: str
405    :ivar system_data: Metadata pertaining to creation and last modification of the resource.
406    :vartype system_data: ~azure.mgmt.storage.v2020_08_01_preview.models.SystemData
407    :ivar last_modified_time: Returns the last modified date and time of the blob inventory policy.
408    :vartype last_modified_time: ~datetime.datetime
409    :param policy: The storage account blob inventory policy object. It is composed of policy
410     rules.
411    :type policy: ~azure.mgmt.storage.v2020_08_01_preview.models.BlobInventoryPolicySchema
412    """
413
414    _validation = {
415        'id': {'readonly': True},
416        'name': {'readonly': True},
417        'type': {'readonly': True},
418        'system_data': {'readonly': True},
419        'last_modified_time': {'readonly': True},
420    }
421
422    _attribute_map = {
423        'id': {'key': 'id', 'type': 'str'},
424        'name': {'key': 'name', 'type': 'str'},
425        'type': {'key': 'type', 'type': 'str'},
426        'system_data': {'key': 'systemData', 'type': 'SystemData'},
427        'last_modified_time': {'key': 'properties.lastModifiedTime', 'type': 'iso-8601'},
428        'policy': {'key': 'properties.policy', 'type': 'BlobInventoryPolicySchema'},
429    }
430
431    def __init__(
432        self,
433        *,
434        policy: Optional["BlobInventoryPolicySchema"] = None,
435        **kwargs
436    ):
437        super(BlobInventoryPolicy, self).__init__(**kwargs)
438        self.system_data = None
439        self.last_modified_time = None
440        self.policy = policy
441
442
443class BlobInventoryPolicyDefinition(msrest.serialization.Model):
444    """An object that defines the blob inventory rule. Each definition consists of a set of filters.
445
446    All required parameters must be populated in order to send to Azure.
447
448    :param filters: Required. An object that defines the filter set.
449    :type filters: ~azure.mgmt.storage.v2020_08_01_preview.models.BlobInventoryPolicyFilter
450    """
451
452    _validation = {
453        'filters': {'required': True},
454    }
455
456    _attribute_map = {
457        'filters': {'key': 'filters', 'type': 'BlobInventoryPolicyFilter'},
458    }
459
460    def __init__(
461        self,
462        *,
463        filters: "BlobInventoryPolicyFilter",
464        **kwargs
465    ):
466        super(BlobInventoryPolicyDefinition, self).__init__(**kwargs)
467        self.filters = filters
468
469
470class BlobInventoryPolicyFilter(msrest.serialization.Model):
471    """An object that defines the blob inventory rule filter conditions.
472
473    All required parameters must be populated in order to send to Azure.
474
475    :param prefix_match: An array of strings for blob prefixes to be matched.
476    :type prefix_match: list[str]
477    :param blob_types: Required. An array of predefined enum values. Valid values include
478     blockBlob, appendBlob, pageBlob. Hns accounts does not support pageBlobs.
479    :type blob_types: list[str]
480    :param include_blob_versions: Includes blob versions in blob inventory when value set to true.
481    :type include_blob_versions: bool
482    :param include_snapshots: Includes blob snapshots in blob inventory when value set to true.
483    :type include_snapshots: bool
484    """
485
486    _validation = {
487        'blob_types': {'required': True},
488    }
489
490    _attribute_map = {
491        'prefix_match': {'key': 'prefixMatch', 'type': '[str]'},
492        'blob_types': {'key': 'blobTypes', 'type': '[str]'},
493        'include_blob_versions': {'key': 'includeBlobVersions', 'type': 'bool'},
494        'include_snapshots': {'key': 'includeSnapshots', 'type': 'bool'},
495    }
496
497    def __init__(
498        self,
499        *,
500        blob_types: List[str],
501        prefix_match: Optional[List[str]] = None,
502        include_blob_versions: Optional[bool] = None,
503        include_snapshots: Optional[bool] = None,
504        **kwargs
505    ):
506        super(BlobInventoryPolicyFilter, self).__init__(**kwargs)
507        self.prefix_match = prefix_match
508        self.blob_types = blob_types
509        self.include_blob_versions = include_blob_versions
510        self.include_snapshots = include_snapshots
511
512
513class BlobInventoryPolicyRule(msrest.serialization.Model):
514    """An object that wraps the blob inventory rule. Each rule is uniquely defined by name.
515
516    All required parameters must be populated in order to send to Azure.
517
518    :param enabled: Required. Rule is enabled when set to true.
519    :type enabled: bool
520    :param name: Required. A rule name can contain any combination of alpha numeric characters.
521     Rule name is case-sensitive. It must be unique within a policy.
522    :type name: str
523    :param definition: Required. An object that defines the blob inventory policy rule.
524    :type definition: ~azure.mgmt.storage.v2020_08_01_preview.models.BlobInventoryPolicyDefinition
525    """
526
527    _validation = {
528        'enabled': {'required': True},
529        'name': {'required': True},
530        'definition': {'required': True},
531    }
532
533    _attribute_map = {
534        'enabled': {'key': 'enabled', 'type': 'bool'},
535        'name': {'key': 'name', 'type': 'str'},
536        'definition': {'key': 'definition', 'type': 'BlobInventoryPolicyDefinition'},
537    }
538
539    def __init__(
540        self,
541        *,
542        enabled: bool,
543        name: str,
544        definition: "BlobInventoryPolicyDefinition",
545        **kwargs
546    ):
547        super(BlobInventoryPolicyRule, self).__init__(**kwargs)
548        self.enabled = enabled
549        self.name = name
550        self.definition = definition
551
552
553class BlobInventoryPolicySchema(msrest.serialization.Model):
554    """The storage account blob inventory policy rules.
555
556    All required parameters must be populated in order to send to Azure.
557
558    :param enabled: Required. Policy is enabled if set to true.
559    :type enabled: bool
560    :param destination: Required. Container name where blob inventory files are stored. Must be
561     pre-created.
562    :type destination: str
563    :param type: Required. The valid value is Inventory. Possible values include: "Inventory".
564    :type type: str or ~azure.mgmt.storage.v2020_08_01_preview.models.InventoryRuleType
565    :param rules: Required. The storage account blob inventory policy rules. The rule is applied
566     when it is enabled.
567    :type rules: list[~azure.mgmt.storage.v2020_08_01_preview.models.BlobInventoryPolicyRule]
568    """
569
570    _validation = {
571        'enabled': {'required': True},
572        'destination': {'required': True},
573        'type': {'required': True},
574        'rules': {'required': True},
575    }
576
577    _attribute_map = {
578        'enabled': {'key': 'enabled', 'type': 'bool'},
579        'destination': {'key': 'destination', 'type': 'str'},
580        'type': {'key': 'type', 'type': 'str'},
581        'rules': {'key': 'rules', 'type': '[BlobInventoryPolicyRule]'},
582    }
583
584    def __init__(
585        self,
586        *,
587        enabled: bool,
588        destination: str,
589        type: Union[str, "InventoryRuleType"],
590        rules: List["BlobInventoryPolicyRule"],
591        **kwargs
592    ):
593        super(BlobInventoryPolicySchema, self).__init__(**kwargs)
594        self.enabled = enabled
595        self.destination = destination
596        self.type = type
597        self.rules = rules
598
599
600class BlobRestoreParameters(msrest.serialization.Model):
601    """Blob restore parameters.
602
603    All required parameters must be populated in order to send to Azure.
604
605    :param time_to_restore: Required. Restore blob to the specified time.
606    :type time_to_restore: ~datetime.datetime
607    :param blob_ranges: Required. Blob ranges to restore.
608    :type blob_ranges: list[~azure.mgmt.storage.v2020_08_01_preview.models.BlobRestoreRange]
609    """
610
611    _validation = {
612        'time_to_restore': {'required': True},
613        'blob_ranges': {'required': True},
614    }
615
616    _attribute_map = {
617        'time_to_restore': {'key': 'timeToRestore', 'type': 'iso-8601'},
618        'blob_ranges': {'key': 'blobRanges', 'type': '[BlobRestoreRange]'},
619    }
620
621    def __init__(
622        self,
623        *,
624        time_to_restore: datetime.datetime,
625        blob_ranges: List["BlobRestoreRange"],
626        **kwargs
627    ):
628        super(BlobRestoreParameters, self).__init__(**kwargs)
629        self.time_to_restore = time_to_restore
630        self.blob_ranges = blob_ranges
631
632
633class BlobRestoreRange(msrest.serialization.Model):
634    """Blob range.
635
636    All required parameters must be populated in order to send to Azure.
637
638    :param start_range: Required. Blob start range. This is inclusive. Empty means account start.
639    :type start_range: str
640    :param end_range: Required. Blob end range. This is exclusive. Empty means account end.
641    :type end_range: str
642    """
643
644    _validation = {
645        'start_range': {'required': True},
646        'end_range': {'required': True},
647    }
648
649    _attribute_map = {
650        'start_range': {'key': 'startRange', 'type': 'str'},
651        'end_range': {'key': 'endRange', 'type': 'str'},
652    }
653
654    def __init__(
655        self,
656        *,
657        start_range: str,
658        end_range: str,
659        **kwargs
660    ):
661        super(BlobRestoreRange, self).__init__(**kwargs)
662        self.start_range = start_range
663        self.end_range = end_range
664
665
666class BlobRestoreStatus(msrest.serialization.Model):
667    """Blob restore status.
668
669    Variables are only populated by the server, and will be ignored when sending a request.
670
671    :ivar status: The status of blob restore progress. Possible values are: - InProgress: Indicates
672     that blob restore is ongoing. - Complete: Indicates that blob restore has been completed
673     successfully. - Failed: Indicates that blob restore is failed. Possible values include:
674     "InProgress", "Complete", "Failed".
675    :vartype status: str or
676     ~azure.mgmt.storage.v2020_08_01_preview.models.BlobRestoreProgressStatus
677    :ivar failure_reason: Failure reason when blob restore is failed.
678    :vartype failure_reason: str
679    :ivar restore_id: Id for tracking blob restore request.
680    :vartype restore_id: str
681    :ivar parameters: Blob restore request parameters.
682    :vartype parameters: ~azure.mgmt.storage.v2020_08_01_preview.models.BlobRestoreParameters
683    """
684
685    _validation = {
686        'status': {'readonly': True},
687        'failure_reason': {'readonly': True},
688        'restore_id': {'readonly': True},
689        'parameters': {'readonly': True},
690    }
691
692    _attribute_map = {
693        'status': {'key': 'status', 'type': 'str'},
694        'failure_reason': {'key': 'failureReason', 'type': 'str'},
695        'restore_id': {'key': 'restoreId', 'type': 'str'},
696        'parameters': {'key': 'parameters', 'type': 'BlobRestoreParameters'},
697    }
698
699    def __init__(
700        self,
701        **kwargs
702    ):
703        super(BlobRestoreStatus, self).__init__(**kwargs)
704        self.status = None
705        self.failure_reason = None
706        self.restore_id = None
707        self.parameters = None
708
709
710class BlobServiceItems(msrest.serialization.Model):
711    """BlobServiceItems.
712
713    Variables are only populated by the server, and will be ignored when sending a request.
714
715    :ivar value: List of blob services returned.
716    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.BlobServiceProperties]
717    """
718
719    _validation = {
720        'value': {'readonly': True},
721    }
722
723    _attribute_map = {
724        'value': {'key': 'value', 'type': '[BlobServiceProperties]'},
725    }
726
727    def __init__(
728        self,
729        **kwargs
730    ):
731        super(BlobServiceItems, self).__init__(**kwargs)
732        self.value = None
733
734
735class BlobServiceProperties(Resource):
736    """The properties of a storage account’s Blob service.
737
738    Variables are only populated by the server, and will be ignored when sending a request.
739
740    :ivar id: Fully qualified resource ID for the resource. Ex -
741     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
742    :vartype id: str
743    :ivar name: The name of the resource.
744    :vartype name: str
745    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
746     "Microsoft.Storage/storageAccounts".
747    :vartype type: str
748    :ivar sku: Sku name and tier.
749    :vartype sku: ~azure.mgmt.storage.v2020_08_01_preview.models.Sku
750    :param cors: Specifies CORS rules for the Blob service. You can include up to five CorsRule
751     elements in the request. If no CorsRule elements are included in the request body, all CORS
752     rules will be deleted, and CORS will be disabled for the Blob service.
753    :type cors: ~azure.mgmt.storage.v2020_08_01_preview.models.CorsRules
754    :param default_service_version: DefaultServiceVersion indicates the default version to use for
755     requests to the Blob service if an incoming request’s version is not specified. Possible values
756     include version 2008-10-27 and all more recent versions.
757    :type default_service_version: str
758    :param delete_retention_policy: The blob service properties for blob soft delete.
759    :type delete_retention_policy:
760     ~azure.mgmt.storage.v2020_08_01_preview.models.DeleteRetentionPolicy
761    :param is_versioning_enabled: Versioning is enabled if set to true.
762    :type is_versioning_enabled: bool
763    :param automatic_snapshot_policy_enabled: Deprecated in favor of isVersioningEnabled property.
764    :type automatic_snapshot_policy_enabled: bool
765    :param change_feed: The blob service properties for change feed events.
766    :type change_feed: ~azure.mgmt.storage.v2020_08_01_preview.models.ChangeFeed
767    :param restore_policy: The blob service properties for blob restore policy.
768    :type restore_policy: ~azure.mgmt.storage.v2020_08_01_preview.models.RestorePolicyProperties
769    :param container_delete_retention_policy: The blob service properties for container soft
770     delete.
771    :type container_delete_retention_policy:
772     ~azure.mgmt.storage.v2020_08_01_preview.models.DeleteRetentionPolicy
773    :param last_access_time_tracking_policy: The blob service property to configure last access
774     time based tracking policy.
775    :type last_access_time_tracking_policy:
776     ~azure.mgmt.storage.v2020_08_01_preview.models.LastAccessTimeTrackingPolicy
777    """
778
779    _validation = {
780        'id': {'readonly': True},
781        'name': {'readonly': True},
782        'type': {'readonly': True},
783        'sku': {'readonly': True},
784    }
785
786    _attribute_map = {
787        'id': {'key': 'id', 'type': 'str'},
788        'name': {'key': 'name', 'type': 'str'},
789        'type': {'key': 'type', 'type': 'str'},
790        'sku': {'key': 'sku', 'type': 'Sku'},
791        'cors': {'key': 'properties.cors', 'type': 'CorsRules'},
792        'default_service_version': {'key': 'properties.defaultServiceVersion', 'type': 'str'},
793        'delete_retention_policy': {'key': 'properties.deleteRetentionPolicy', 'type': 'DeleteRetentionPolicy'},
794        'is_versioning_enabled': {'key': 'properties.isVersioningEnabled', 'type': 'bool'},
795        'automatic_snapshot_policy_enabled': {'key': 'properties.automaticSnapshotPolicyEnabled', 'type': 'bool'},
796        'change_feed': {'key': 'properties.changeFeed', 'type': 'ChangeFeed'},
797        'restore_policy': {'key': 'properties.restorePolicy', 'type': 'RestorePolicyProperties'},
798        'container_delete_retention_policy': {'key': 'properties.containerDeleteRetentionPolicy', 'type': 'DeleteRetentionPolicy'},
799        'last_access_time_tracking_policy': {'key': 'properties.lastAccessTimeTrackingPolicy', 'type': 'LastAccessTimeTrackingPolicy'},
800    }
801
802    def __init__(
803        self,
804        *,
805        cors: Optional["CorsRules"] = None,
806        default_service_version: Optional[str] = None,
807        delete_retention_policy: Optional["DeleteRetentionPolicy"] = None,
808        is_versioning_enabled: Optional[bool] = None,
809        automatic_snapshot_policy_enabled: Optional[bool] = None,
810        change_feed: Optional["ChangeFeed"] = None,
811        restore_policy: Optional["RestorePolicyProperties"] = None,
812        container_delete_retention_policy: Optional["DeleteRetentionPolicy"] = None,
813        last_access_time_tracking_policy: Optional["LastAccessTimeTrackingPolicy"] = None,
814        **kwargs
815    ):
816        super(BlobServiceProperties, self).__init__(**kwargs)
817        self.sku = None
818        self.cors = cors
819        self.default_service_version = default_service_version
820        self.delete_retention_policy = delete_retention_policy
821        self.is_versioning_enabled = is_versioning_enabled
822        self.automatic_snapshot_policy_enabled = automatic_snapshot_policy_enabled
823        self.change_feed = change_feed
824        self.restore_policy = restore_policy
825        self.container_delete_retention_policy = container_delete_retention_policy
826        self.last_access_time_tracking_policy = last_access_time_tracking_policy
827
828
829class ChangeFeed(msrest.serialization.Model):
830    """The blob service properties for change feed events.
831
832    :param enabled: Indicates whether change feed event logging is enabled for the Blob service.
833    :type enabled: bool
834    :param retention_in_days: Indicates the duration of changeFeed retention in days. Minimum value
835     is 1 day and maximum value is 146000 days (400 years). A null value indicates an infinite
836     retention of the change feed.
837    :type retention_in_days: int
838    """
839
840    _validation = {
841        'retention_in_days': {'maximum': 146000, 'minimum': 1},
842    }
843
844    _attribute_map = {
845        'enabled': {'key': 'enabled', 'type': 'bool'},
846        'retention_in_days': {'key': 'retentionInDays', 'type': 'int'},
847    }
848
849    def __init__(
850        self,
851        *,
852        enabled: Optional[bool] = None,
853        retention_in_days: Optional[int] = None,
854        **kwargs
855    ):
856        super(ChangeFeed, self).__init__(**kwargs)
857        self.enabled = enabled
858        self.retention_in_days = retention_in_days
859
860
861class CheckNameAvailabilityResult(msrest.serialization.Model):
862    """The CheckNameAvailability operation response.
863
864    Variables are only populated by the server, and will be ignored when sending a request.
865
866    :ivar name_available: Gets a boolean value that indicates whether the name is available for you
867     to use. If true, the name is available. If false, the name has already been taken or is invalid
868     and cannot be used.
869    :vartype name_available: bool
870    :ivar reason: Gets the reason that a storage account name could not be used. The Reason element
871     is only returned if NameAvailable is false. Possible values include: "AccountNameInvalid",
872     "AlreadyExists".
873    :vartype reason: str or ~azure.mgmt.storage.v2020_08_01_preview.models.Reason
874    :ivar message: Gets an error message explaining the Reason value in more detail.
875    :vartype message: str
876    """
877
878    _validation = {
879        'name_available': {'readonly': True},
880        'reason': {'readonly': True},
881        'message': {'readonly': True},
882    }
883
884    _attribute_map = {
885        'name_available': {'key': 'nameAvailable', 'type': 'bool'},
886        'reason': {'key': 'reason', 'type': 'str'},
887        'message': {'key': 'message', 'type': 'str'},
888    }
889
890    def __init__(
891        self,
892        **kwargs
893    ):
894        super(CheckNameAvailabilityResult, self).__init__(**kwargs)
895        self.name_available = None
896        self.reason = None
897        self.message = None
898
899
900class CloudErrorBody(msrest.serialization.Model):
901    """An error response from the Storage service.
902
903    :param code: An identifier for the error. Codes are invariant and are intended to be consumed
904     programmatically.
905    :type code: str
906    :param message: A message describing the error, intended to be suitable for display in a user
907     interface.
908    :type message: str
909    :param target: The target of the particular error. For example, the name of the property in
910     error.
911    :type target: str
912    :param details: A list of additional details about the error.
913    :type details: list[~azure.mgmt.storage.v2020_08_01_preview.models.CloudErrorBody]
914    """
915
916    _attribute_map = {
917        'code': {'key': 'code', 'type': 'str'},
918        'message': {'key': 'message', 'type': 'str'},
919        'target': {'key': 'target', 'type': 'str'},
920        'details': {'key': 'details', 'type': '[CloudErrorBody]'},
921    }
922
923    def __init__(
924        self,
925        *,
926        code: Optional[str] = None,
927        message: Optional[str] = None,
928        target: Optional[str] = None,
929        details: Optional[List["CloudErrorBody"]] = None,
930        **kwargs
931    ):
932        super(CloudErrorBody, self).__init__(**kwargs)
933        self.code = code
934        self.message = message
935        self.target = target
936        self.details = details
937
938
939class CorsRule(msrest.serialization.Model):
940    """Specifies a CORS rule for the Blob service.
941
942    All required parameters must be populated in order to send to Azure.
943
944    :param allowed_origins: Required. Required if CorsRule element is present. A list of origin
945     domains that will be allowed via CORS, or "*" to allow all domains.
946    :type allowed_origins: list[str]
947    :param allowed_methods: Required. Required if CorsRule element is present. A list of HTTP
948     methods that are allowed to be executed by the origin.
949    :type allowed_methods: list[str or
950     ~azure.mgmt.storage.v2020_08_01_preview.models.CorsRuleAllowedMethodsItem]
951    :param max_age_in_seconds: Required. Required if CorsRule element is present. The number of
952     seconds that the client/browser should cache a preflight response.
953    :type max_age_in_seconds: int
954    :param exposed_headers: Required. Required if CorsRule element is present. A list of response
955     headers to expose to CORS clients.
956    :type exposed_headers: list[str]
957    :param allowed_headers: Required. Required if CorsRule element is present. A list of headers
958     allowed to be part of the cross-origin request.
959    :type allowed_headers: list[str]
960    """
961
962    _validation = {
963        'allowed_origins': {'required': True},
964        'allowed_methods': {'required': True},
965        'max_age_in_seconds': {'required': True},
966        'exposed_headers': {'required': True},
967        'allowed_headers': {'required': True},
968    }
969
970    _attribute_map = {
971        'allowed_origins': {'key': 'allowedOrigins', 'type': '[str]'},
972        'allowed_methods': {'key': 'allowedMethods', 'type': '[str]'},
973        'max_age_in_seconds': {'key': 'maxAgeInSeconds', 'type': 'int'},
974        'exposed_headers': {'key': 'exposedHeaders', 'type': '[str]'},
975        'allowed_headers': {'key': 'allowedHeaders', 'type': '[str]'},
976    }
977
978    def __init__(
979        self,
980        *,
981        allowed_origins: List[str],
982        allowed_methods: List[Union[str, "CorsRuleAllowedMethodsItem"]],
983        max_age_in_seconds: int,
984        exposed_headers: List[str],
985        allowed_headers: List[str],
986        **kwargs
987    ):
988        super(CorsRule, self).__init__(**kwargs)
989        self.allowed_origins = allowed_origins
990        self.allowed_methods = allowed_methods
991        self.max_age_in_seconds = max_age_in_seconds
992        self.exposed_headers = exposed_headers
993        self.allowed_headers = allowed_headers
994
995
996class CorsRules(msrest.serialization.Model):
997    """Sets the CORS rules. You can include up to five CorsRule elements in the request.
998
999    :param cors_rules: The List of CORS rules. You can include up to five CorsRule elements in the
1000     request.
1001    :type cors_rules: list[~azure.mgmt.storage.v2020_08_01_preview.models.CorsRule]
1002    """
1003
1004    _attribute_map = {
1005        'cors_rules': {'key': 'corsRules', 'type': '[CorsRule]'},
1006    }
1007
1008    def __init__(
1009        self,
1010        *,
1011        cors_rules: Optional[List["CorsRule"]] = None,
1012        **kwargs
1013    ):
1014        super(CorsRules, self).__init__(**kwargs)
1015        self.cors_rules = cors_rules
1016
1017
1018class CustomDomain(msrest.serialization.Model):
1019    """The custom domain assigned to this storage account. This can be set via Update.
1020
1021    All required parameters must be populated in order to send to Azure.
1022
1023    :param name: Required. Gets or sets the custom domain name assigned to the storage account.
1024     Name is the CNAME source.
1025    :type name: str
1026    :param use_sub_domain_name: Indicates whether indirect CName validation is enabled. Default
1027     value is false. This should only be set on updates.
1028    :type use_sub_domain_name: bool
1029    """
1030
1031    _validation = {
1032        'name': {'required': True},
1033    }
1034
1035    _attribute_map = {
1036        'name': {'key': 'name', 'type': 'str'},
1037        'use_sub_domain_name': {'key': 'useSubDomainName', 'type': 'bool'},
1038    }
1039
1040    def __init__(
1041        self,
1042        *,
1043        name: str,
1044        use_sub_domain_name: Optional[bool] = None,
1045        **kwargs
1046    ):
1047        super(CustomDomain, self).__init__(**kwargs)
1048        self.name = name
1049        self.use_sub_domain_name = use_sub_domain_name
1050
1051
1052class DateAfterCreation(msrest.serialization.Model):
1053    """Object to define the number of days after creation.
1054
1055    All required parameters must be populated in order to send to Azure.
1056
1057    :param days_after_creation_greater_than: Required. Value indicating the age in days after
1058     creation.
1059    :type days_after_creation_greater_than: float
1060    """
1061
1062    _validation = {
1063        'days_after_creation_greater_than': {'required': True, 'minimum': 0, 'multiple': 1},
1064    }
1065
1066    _attribute_map = {
1067        'days_after_creation_greater_than': {'key': 'daysAfterCreationGreaterThan', 'type': 'float'},
1068    }
1069
1070    def __init__(
1071        self,
1072        *,
1073        days_after_creation_greater_than: float,
1074        **kwargs
1075    ):
1076        super(DateAfterCreation, self).__init__(**kwargs)
1077        self.days_after_creation_greater_than = days_after_creation_greater_than
1078
1079
1080class DateAfterModification(msrest.serialization.Model):
1081    """Object to define the number of days after object last modification Or last access. Properties daysAfterModificationGreaterThan and daysAfterLastAccessTimeGreaterThan are mutually exclusive.
1082
1083    :param days_after_modification_greater_than: Value indicating the age in days after last
1084     modification.
1085    :type days_after_modification_greater_than: float
1086    :param days_after_last_access_time_greater_than: Value indicating the age in days after last
1087     blob access. This property can only be used in conjunction with last access time tracking
1088     policy.
1089    :type days_after_last_access_time_greater_than: float
1090    """
1091
1092    _validation = {
1093        'days_after_modification_greater_than': {'minimum': 0, 'multiple': 1},
1094        'days_after_last_access_time_greater_than': {'minimum': 0, 'multiple': 1},
1095    }
1096
1097    _attribute_map = {
1098        'days_after_modification_greater_than': {'key': 'daysAfterModificationGreaterThan', 'type': 'float'},
1099        'days_after_last_access_time_greater_than': {'key': 'daysAfterLastAccessTimeGreaterThan', 'type': 'float'},
1100    }
1101
1102    def __init__(
1103        self,
1104        *,
1105        days_after_modification_greater_than: Optional[float] = None,
1106        days_after_last_access_time_greater_than: Optional[float] = None,
1107        **kwargs
1108    ):
1109        super(DateAfterModification, self).__init__(**kwargs)
1110        self.days_after_modification_greater_than = days_after_modification_greater_than
1111        self.days_after_last_access_time_greater_than = days_after_last_access_time_greater_than
1112
1113
1114class ProxyResource(Resource):
1115    """The resource model definition for a Azure Resource Manager proxy resource. It will not have tags and a location.
1116
1117    Variables are only populated by the server, and will be ignored when sending a request.
1118
1119    :ivar id: Fully qualified resource ID for the resource. Ex -
1120     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
1121    :vartype id: str
1122    :ivar name: The name of the resource.
1123    :vartype name: str
1124    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
1125     "Microsoft.Storage/storageAccounts".
1126    :vartype type: str
1127    """
1128
1129    _validation = {
1130        'id': {'readonly': True},
1131        'name': {'readonly': True},
1132        'type': {'readonly': True},
1133    }
1134
1135    _attribute_map = {
1136        'id': {'key': 'id', 'type': 'str'},
1137        'name': {'key': 'name', 'type': 'str'},
1138        'type': {'key': 'type', 'type': 'str'},
1139    }
1140
1141    def __init__(
1142        self,
1143        **kwargs
1144    ):
1145        super(ProxyResource, self).__init__(**kwargs)
1146
1147
1148class DeletedAccount(ProxyResource):
1149    """Deleted storage account.
1150
1151    Variables are only populated by the server, and will be ignored when sending a request.
1152
1153    :ivar id: Fully qualified resource ID for the resource. Ex -
1154     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
1155    :vartype id: str
1156    :ivar name: The name of the resource.
1157    :vartype name: str
1158    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
1159     "Microsoft.Storage/storageAccounts".
1160    :vartype type: str
1161    :ivar storage_account_resource_id: Full resource id of the original storage account.
1162    :vartype storage_account_resource_id: str
1163    :ivar location: Location of the deleted account.
1164    :vartype location: str
1165    :ivar restore_reference: Can be used to attempt recovering this deleted account via
1166     PutStorageAccount API.
1167    :vartype restore_reference: str
1168    :ivar creation_time: Creation time of the deleted account.
1169    :vartype creation_time: str
1170    :ivar deletion_time: Deletion time of the deleted account.
1171    :vartype deletion_time: str
1172    """
1173
1174    _validation = {
1175        'id': {'readonly': True},
1176        'name': {'readonly': True},
1177        'type': {'readonly': True},
1178        'storage_account_resource_id': {'readonly': True},
1179        'location': {'readonly': True},
1180        'restore_reference': {'readonly': True},
1181        'creation_time': {'readonly': True},
1182        'deletion_time': {'readonly': True},
1183    }
1184
1185    _attribute_map = {
1186        'id': {'key': 'id', 'type': 'str'},
1187        'name': {'key': 'name', 'type': 'str'},
1188        'type': {'key': 'type', 'type': 'str'},
1189        'storage_account_resource_id': {'key': 'properties.storageAccountResourceId', 'type': 'str'},
1190        'location': {'key': 'properties.location', 'type': 'str'},
1191        'restore_reference': {'key': 'properties.restoreReference', 'type': 'str'},
1192        'creation_time': {'key': 'properties.creationTime', 'type': 'str'},
1193        'deletion_time': {'key': 'properties.deletionTime', 'type': 'str'},
1194    }
1195
1196    def __init__(
1197        self,
1198        **kwargs
1199    ):
1200        super(DeletedAccount, self).__init__(**kwargs)
1201        self.storage_account_resource_id = None
1202        self.location = None
1203        self.restore_reference = None
1204        self.creation_time = None
1205        self.deletion_time = None
1206
1207
1208class DeletedAccountListResult(msrest.serialization.Model):
1209    """The response from the List Deleted Accounts operation.
1210
1211    Variables are only populated by the server, and will be ignored when sending a request.
1212
1213    :ivar value: Gets the list of deleted accounts and their properties.
1214    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.DeletedAccount]
1215    :ivar next_link: Request URL that can be used to query next page of deleted accounts. Returned
1216     when total number of requested deleted accounts exceed maximum page size.
1217    :vartype next_link: str
1218    """
1219
1220    _validation = {
1221        'value': {'readonly': True},
1222        'next_link': {'readonly': True},
1223    }
1224
1225    _attribute_map = {
1226        'value': {'key': 'value', 'type': '[DeletedAccount]'},
1227        'next_link': {'key': 'nextLink', 'type': 'str'},
1228    }
1229
1230    def __init__(
1231        self,
1232        **kwargs
1233    ):
1234        super(DeletedAccountListResult, self).__init__(**kwargs)
1235        self.value = None
1236        self.next_link = None
1237
1238
1239class DeletedShare(msrest.serialization.Model):
1240    """The deleted share to be restored.
1241
1242    All required parameters must be populated in order to send to Azure.
1243
1244    :param deleted_share_name: Required. Required. Identify the name of the deleted share that will
1245     be restored.
1246    :type deleted_share_name: str
1247    :param deleted_share_version: Required. Required. Identify the version of the deleted share
1248     that will be restored.
1249    :type deleted_share_version: str
1250    """
1251
1252    _validation = {
1253        'deleted_share_name': {'required': True},
1254        'deleted_share_version': {'required': True},
1255    }
1256
1257    _attribute_map = {
1258        'deleted_share_name': {'key': 'deletedShareName', 'type': 'str'},
1259        'deleted_share_version': {'key': 'deletedShareVersion', 'type': 'str'},
1260    }
1261
1262    def __init__(
1263        self,
1264        *,
1265        deleted_share_name: str,
1266        deleted_share_version: str,
1267        **kwargs
1268    ):
1269        super(DeletedShare, self).__init__(**kwargs)
1270        self.deleted_share_name = deleted_share_name
1271        self.deleted_share_version = deleted_share_version
1272
1273
1274class DeleteRetentionPolicy(msrest.serialization.Model):
1275    """The service properties for soft delete.
1276
1277    :param enabled: Indicates whether DeleteRetentionPolicy is enabled.
1278    :type enabled: bool
1279    :param days: Indicates the number of days that the deleted item should be retained. The minimum
1280     specified value can be 1 and the maximum value can be 365.
1281    :type days: int
1282    """
1283
1284    _validation = {
1285        'days': {'maximum': 365, 'minimum': 1},
1286    }
1287
1288    _attribute_map = {
1289        'enabled': {'key': 'enabled', 'type': 'bool'},
1290        'days': {'key': 'days', 'type': 'int'},
1291    }
1292
1293    def __init__(
1294        self,
1295        *,
1296        enabled: Optional[bool] = None,
1297        days: Optional[int] = None,
1298        **kwargs
1299    ):
1300        super(DeleteRetentionPolicy, self).__init__(**kwargs)
1301        self.enabled = enabled
1302        self.days = days
1303
1304
1305class Dimension(msrest.serialization.Model):
1306    """Dimension of blobs, possibly be blob type or access tier.
1307
1308    :param name: Display name of dimension.
1309    :type name: str
1310    :param display_name: Display name of dimension.
1311    :type display_name: str
1312    """
1313
1314    _attribute_map = {
1315        'name': {'key': 'name', 'type': 'str'},
1316        'display_name': {'key': 'displayName', 'type': 'str'},
1317    }
1318
1319    def __init__(
1320        self,
1321        *,
1322        name: Optional[str] = None,
1323        display_name: Optional[str] = None,
1324        **kwargs
1325    ):
1326        super(Dimension, self).__init__(**kwargs)
1327        self.name = name
1328        self.display_name = display_name
1329
1330
1331class Encryption(msrest.serialization.Model):
1332    """The encryption settings on the storage account.
1333
1334    All required parameters must be populated in order to send to Azure.
1335
1336    :param services: List of services which support encryption.
1337    :type services: ~azure.mgmt.storage.v2020_08_01_preview.models.EncryptionServices
1338    :param key_source: Required. The encryption keySource (provider). Possible values
1339     (case-insensitive):  Microsoft.Storage, Microsoft.Keyvault. Possible values include:
1340     "Microsoft.Storage", "Microsoft.Keyvault". Default value: "Microsoft.Storage".
1341    :type key_source: str or ~azure.mgmt.storage.v2020_08_01_preview.models.KeySource
1342    :param require_infrastructure_encryption: A boolean indicating whether or not the service
1343     applies a secondary layer of encryption with platform managed keys for data at rest.
1344    :type require_infrastructure_encryption: bool
1345    :param key_vault_properties: Properties provided by key vault.
1346    :type key_vault_properties: ~azure.mgmt.storage.v2020_08_01_preview.models.KeyVaultProperties
1347    """
1348
1349    _validation = {
1350        'key_source': {'required': True},
1351    }
1352
1353    _attribute_map = {
1354        'services': {'key': 'services', 'type': 'EncryptionServices'},
1355        'key_source': {'key': 'keySource', 'type': 'str'},
1356        'require_infrastructure_encryption': {'key': 'requireInfrastructureEncryption', 'type': 'bool'},
1357        'key_vault_properties': {'key': 'keyvaultproperties', 'type': 'KeyVaultProperties'},
1358    }
1359
1360    def __init__(
1361        self,
1362        *,
1363        key_source: Union[str, "KeySource"] = "Microsoft.Storage",
1364        services: Optional["EncryptionServices"] = None,
1365        require_infrastructure_encryption: Optional[bool] = None,
1366        key_vault_properties: Optional["KeyVaultProperties"] = None,
1367        **kwargs
1368    ):
1369        super(Encryption, self).__init__(**kwargs)
1370        self.services = services
1371        self.key_source = key_source
1372        self.require_infrastructure_encryption = require_infrastructure_encryption
1373        self.key_vault_properties = key_vault_properties
1374
1375
1376class EncryptionScope(Resource):
1377    """The Encryption Scope resource.
1378
1379    Variables are only populated by the server, and will be ignored when sending a request.
1380
1381    :ivar id: Fully qualified resource ID for the resource. Ex -
1382     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
1383    :vartype id: str
1384    :ivar name: The name of the resource.
1385    :vartype name: str
1386    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
1387     "Microsoft.Storage/storageAccounts".
1388    :vartype type: str
1389    :param source: The provider for the encryption scope. Possible values (case-insensitive):
1390     Microsoft.Storage, Microsoft.KeyVault. Possible values include: "Microsoft.Storage",
1391     "Microsoft.KeyVault".
1392    :type source: str or ~azure.mgmt.storage.v2020_08_01_preview.models.EncryptionScopeSource
1393    :param state: The state of the encryption scope. Possible values (case-insensitive):  Enabled,
1394     Disabled. Possible values include: "Enabled", "Disabled".
1395    :type state: str or ~azure.mgmt.storage.v2020_08_01_preview.models.EncryptionScopeState
1396    :ivar creation_time: Gets the creation date and time of the encryption scope in UTC.
1397    :vartype creation_time: ~datetime.datetime
1398    :ivar last_modified_time: Gets the last modification date and time of the encryption scope in
1399     UTC.
1400    :vartype last_modified_time: ~datetime.datetime
1401    :param key_vault_properties: The key vault properties for the encryption scope. This is a
1402     required field if encryption scope 'source' attribute is set to 'Microsoft.KeyVault'.
1403    :type key_vault_properties:
1404     ~azure.mgmt.storage.v2020_08_01_preview.models.EncryptionScopeKeyVaultProperties
1405    """
1406
1407    _validation = {
1408        'id': {'readonly': True},
1409        'name': {'readonly': True},
1410        'type': {'readonly': True},
1411        'creation_time': {'readonly': True},
1412        'last_modified_time': {'readonly': True},
1413    }
1414
1415    _attribute_map = {
1416        'id': {'key': 'id', 'type': 'str'},
1417        'name': {'key': 'name', 'type': 'str'},
1418        'type': {'key': 'type', 'type': 'str'},
1419        'source': {'key': 'properties.source', 'type': 'str'},
1420        'state': {'key': 'properties.state', 'type': 'str'},
1421        'creation_time': {'key': 'properties.creationTime', 'type': 'iso-8601'},
1422        'last_modified_time': {'key': 'properties.lastModifiedTime', 'type': 'iso-8601'},
1423        'key_vault_properties': {'key': 'properties.keyVaultProperties', 'type': 'EncryptionScopeKeyVaultProperties'},
1424    }
1425
1426    def __init__(
1427        self,
1428        *,
1429        source: Optional[Union[str, "EncryptionScopeSource"]] = None,
1430        state: Optional[Union[str, "EncryptionScopeState"]] = None,
1431        key_vault_properties: Optional["EncryptionScopeKeyVaultProperties"] = None,
1432        **kwargs
1433    ):
1434        super(EncryptionScope, self).__init__(**kwargs)
1435        self.source = source
1436        self.state = state
1437        self.creation_time = None
1438        self.last_modified_time = None
1439        self.key_vault_properties = key_vault_properties
1440
1441
1442class EncryptionScopeKeyVaultProperties(msrest.serialization.Model):
1443    """The key vault properties for the encryption scope. This is a required field if encryption scope 'source' attribute is set to 'Microsoft.KeyVault'.
1444
1445    :param key_uri: The object identifier for a key vault key object. When applied, the encryption
1446     scope will use the key referenced by the identifier to enable customer-managed key support on
1447     this encryption scope.
1448    :type key_uri: str
1449    """
1450
1451    _attribute_map = {
1452        'key_uri': {'key': 'keyUri', 'type': 'str'},
1453    }
1454
1455    def __init__(
1456        self,
1457        *,
1458        key_uri: Optional[str] = None,
1459        **kwargs
1460    ):
1461        super(EncryptionScopeKeyVaultProperties, self).__init__(**kwargs)
1462        self.key_uri = key_uri
1463
1464
1465class EncryptionScopeListResult(msrest.serialization.Model):
1466    """List of encryption scopes requested, and if paging is required, a URL to the next page of encryption scopes.
1467
1468    Variables are only populated by the server, and will be ignored when sending a request.
1469
1470    :ivar value: List of encryption scopes requested.
1471    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.EncryptionScope]
1472    :ivar next_link: Request URL that can be used to query next page of encryption scopes. Returned
1473     when total number of requested encryption scopes exceeds the maximum page size.
1474    :vartype next_link: str
1475    """
1476
1477    _validation = {
1478        'value': {'readonly': True},
1479        'next_link': {'readonly': True},
1480    }
1481
1482    _attribute_map = {
1483        'value': {'key': 'value', 'type': '[EncryptionScope]'},
1484        'next_link': {'key': 'nextLink', 'type': 'str'},
1485    }
1486
1487    def __init__(
1488        self,
1489        **kwargs
1490    ):
1491        super(EncryptionScopeListResult, self).__init__(**kwargs)
1492        self.value = None
1493        self.next_link = None
1494
1495
1496class EncryptionService(msrest.serialization.Model):
1497    """A service that allows server-side encryption to be used.
1498
1499    Variables are only populated by the server, and will be ignored when sending a request.
1500
1501    :param enabled: A boolean indicating whether or not the service encrypts the data as it is
1502     stored.
1503    :type enabled: bool
1504    :ivar last_enabled_time: Gets a rough estimate of the date/time when the encryption was last
1505     enabled by the user. Only returned when encryption is enabled. There might be some unencrypted
1506     blobs which were written after this time, as it is just a rough estimate.
1507    :vartype last_enabled_time: ~datetime.datetime
1508    :param key_type: Encryption key type to be used for the encryption service. 'Account' key type
1509     implies that an account-scoped encryption key will be used. 'Service' key type implies that a
1510     default service key is used. Possible values include: "Service", "Account".
1511    :type key_type: str or ~azure.mgmt.storage.v2020_08_01_preview.models.KeyType
1512    """
1513
1514    _validation = {
1515        'last_enabled_time': {'readonly': True},
1516    }
1517
1518    _attribute_map = {
1519        'enabled': {'key': 'enabled', 'type': 'bool'},
1520        'last_enabled_time': {'key': 'lastEnabledTime', 'type': 'iso-8601'},
1521        'key_type': {'key': 'keyType', 'type': 'str'},
1522    }
1523
1524    def __init__(
1525        self,
1526        *,
1527        enabled: Optional[bool] = None,
1528        key_type: Optional[Union[str, "KeyType"]] = None,
1529        **kwargs
1530    ):
1531        super(EncryptionService, self).__init__(**kwargs)
1532        self.enabled = enabled
1533        self.last_enabled_time = None
1534        self.key_type = key_type
1535
1536
1537class EncryptionServices(msrest.serialization.Model):
1538    """A list of services that support encryption.
1539
1540    :param blob: The encryption function of the blob storage service.
1541    :type blob: ~azure.mgmt.storage.v2020_08_01_preview.models.EncryptionService
1542    :param file: The encryption function of the file storage service.
1543    :type file: ~azure.mgmt.storage.v2020_08_01_preview.models.EncryptionService
1544    :param table: The encryption function of the table storage service.
1545    :type table: ~azure.mgmt.storage.v2020_08_01_preview.models.EncryptionService
1546    :param queue: The encryption function of the queue storage service.
1547    :type queue: ~azure.mgmt.storage.v2020_08_01_preview.models.EncryptionService
1548    """
1549
1550    _attribute_map = {
1551        'blob': {'key': 'blob', 'type': 'EncryptionService'},
1552        'file': {'key': 'file', 'type': 'EncryptionService'},
1553        'table': {'key': 'table', 'type': 'EncryptionService'},
1554        'queue': {'key': 'queue', 'type': 'EncryptionService'},
1555    }
1556
1557    def __init__(
1558        self,
1559        *,
1560        blob: Optional["EncryptionService"] = None,
1561        file: Optional["EncryptionService"] = None,
1562        table: Optional["EncryptionService"] = None,
1563        queue: Optional["EncryptionService"] = None,
1564        **kwargs
1565    ):
1566        super(EncryptionServices, self).__init__(**kwargs)
1567        self.blob = blob
1568        self.file = file
1569        self.table = table
1570        self.queue = queue
1571
1572
1573class Endpoints(msrest.serialization.Model):
1574    """The URIs that are used to perform a retrieval of a public blob, queue, table, web or dfs object.
1575
1576    Variables are only populated by the server, and will be ignored when sending a request.
1577
1578    :ivar blob: Gets the blob endpoint.
1579    :vartype blob: str
1580    :ivar queue: Gets the queue endpoint.
1581    :vartype queue: str
1582    :ivar table: Gets the table endpoint.
1583    :vartype table: str
1584    :ivar file: Gets the file endpoint.
1585    :vartype file: str
1586    :ivar web: Gets the web endpoint.
1587    :vartype web: str
1588    :ivar dfs: Gets the dfs endpoint.
1589    :vartype dfs: str
1590    :param microsoft_endpoints: Gets the microsoft routing storage endpoints.
1591    :type microsoft_endpoints:
1592     ~azure.mgmt.storage.v2020_08_01_preview.models.StorageAccountMicrosoftEndpoints
1593    :param internet_endpoints: Gets the internet routing storage endpoints.
1594    :type internet_endpoints:
1595     ~azure.mgmt.storage.v2020_08_01_preview.models.StorageAccountInternetEndpoints
1596    """
1597
1598    _validation = {
1599        'blob': {'readonly': True},
1600        'queue': {'readonly': True},
1601        'table': {'readonly': True},
1602        'file': {'readonly': True},
1603        'web': {'readonly': True},
1604        'dfs': {'readonly': True},
1605    }
1606
1607    _attribute_map = {
1608        'blob': {'key': 'blob', 'type': 'str'},
1609        'queue': {'key': 'queue', 'type': 'str'},
1610        'table': {'key': 'table', 'type': 'str'},
1611        'file': {'key': 'file', 'type': 'str'},
1612        'web': {'key': 'web', 'type': 'str'},
1613        'dfs': {'key': 'dfs', 'type': 'str'},
1614        'microsoft_endpoints': {'key': 'microsoftEndpoints', 'type': 'StorageAccountMicrosoftEndpoints'},
1615        'internet_endpoints': {'key': 'internetEndpoints', 'type': 'StorageAccountInternetEndpoints'},
1616    }
1617
1618    def __init__(
1619        self,
1620        *,
1621        microsoft_endpoints: Optional["StorageAccountMicrosoftEndpoints"] = None,
1622        internet_endpoints: Optional["StorageAccountInternetEndpoints"] = None,
1623        **kwargs
1624    ):
1625        super(Endpoints, self).__init__(**kwargs)
1626        self.blob = None
1627        self.queue = None
1628        self.table = None
1629        self.file = None
1630        self.web = None
1631        self.dfs = None
1632        self.microsoft_endpoints = microsoft_endpoints
1633        self.internet_endpoints = internet_endpoints
1634
1635
1636class ErrorResponse(msrest.serialization.Model):
1637    """An error response from the storage resource provider.
1638
1639    :param error: Azure Storage Resource Provider error response body.
1640    :type error: ~azure.mgmt.storage.v2020_08_01_preview.models.ErrorResponseBody
1641    """
1642
1643    _attribute_map = {
1644        'error': {'key': 'error', 'type': 'ErrorResponseBody'},
1645    }
1646
1647    def __init__(
1648        self,
1649        *,
1650        error: Optional["ErrorResponseBody"] = None,
1651        **kwargs
1652    ):
1653        super(ErrorResponse, self).__init__(**kwargs)
1654        self.error = error
1655
1656
1657class ErrorResponseBody(msrest.serialization.Model):
1658    """Error response body contract.
1659
1660    :param code: An identifier for the error. Codes are invariant and are intended to be consumed
1661     programmatically.
1662    :type code: str
1663    :param message: A message describing the error, intended to be suitable for display in a user
1664     interface.
1665    :type message: str
1666    """
1667
1668    _attribute_map = {
1669        'code': {'key': 'code', 'type': 'str'},
1670        'message': {'key': 'message', 'type': 'str'},
1671    }
1672
1673    def __init__(
1674        self,
1675        *,
1676        code: Optional[str] = None,
1677        message: Optional[str] = None,
1678        **kwargs
1679    ):
1680        super(ErrorResponseBody, self).__init__(**kwargs)
1681        self.code = code
1682        self.message = message
1683
1684
1685class ExtendedLocation(msrest.serialization.Model):
1686    """The complex type of the extended location.
1687
1688    :param name: The name of the extended location.
1689    :type name: str
1690    :param type: The type of the extended location. Possible values include: "EdgeZone".
1691    :type type: str or ~azure.mgmt.storage.v2020_08_01_preview.models.ExtendedLocationTypes
1692    """
1693
1694    _attribute_map = {
1695        'name': {'key': 'name', 'type': 'str'},
1696        'type': {'key': 'type', 'type': 'str'},
1697    }
1698
1699    def __init__(
1700        self,
1701        *,
1702        name: Optional[str] = None,
1703        type: Optional[Union[str, "ExtendedLocationTypes"]] = None,
1704        **kwargs
1705    ):
1706        super(ExtendedLocation, self).__init__(**kwargs)
1707        self.name = name
1708        self.type = type
1709
1710
1711class FileServiceItems(msrest.serialization.Model):
1712    """FileServiceItems.
1713
1714    Variables are only populated by the server, and will be ignored when sending a request.
1715
1716    :ivar value: List of file services returned.
1717    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.FileServiceProperties]
1718    """
1719
1720    _validation = {
1721        'value': {'readonly': True},
1722    }
1723
1724    _attribute_map = {
1725        'value': {'key': 'value', 'type': '[FileServiceProperties]'},
1726    }
1727
1728    def __init__(
1729        self,
1730        **kwargs
1731    ):
1732        super(FileServiceItems, self).__init__(**kwargs)
1733        self.value = None
1734
1735
1736class FileServiceProperties(Resource):
1737    """The properties of File services in storage account.
1738
1739    Variables are only populated by the server, and will be ignored when sending a request.
1740
1741    :ivar id: Fully qualified resource ID for the resource. Ex -
1742     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
1743    :vartype id: str
1744    :ivar name: The name of the resource.
1745    :vartype name: str
1746    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
1747     "Microsoft.Storage/storageAccounts".
1748    :vartype type: str
1749    :ivar sku: Sku name and tier.
1750    :vartype sku: ~azure.mgmt.storage.v2020_08_01_preview.models.Sku
1751    :param cors: Specifies CORS rules for the File service. You can include up to five CorsRule
1752     elements in the request. If no CorsRule elements are included in the request body, all CORS
1753     rules will be deleted, and CORS will be disabled for the File service.
1754    :type cors: ~azure.mgmt.storage.v2020_08_01_preview.models.CorsRules
1755    :param share_delete_retention_policy: The file service properties for share soft delete.
1756    :type share_delete_retention_policy:
1757     ~azure.mgmt.storage.v2020_08_01_preview.models.DeleteRetentionPolicy
1758    :param protocol_settings: Protocol settings for file service.
1759    :type protocol_settings: ~azure.mgmt.storage.v2020_08_01_preview.models.ProtocolSettings
1760    """
1761
1762    _validation = {
1763        'id': {'readonly': True},
1764        'name': {'readonly': True},
1765        'type': {'readonly': True},
1766        'sku': {'readonly': True},
1767    }
1768
1769    _attribute_map = {
1770        'id': {'key': 'id', 'type': 'str'},
1771        'name': {'key': 'name', 'type': 'str'},
1772        'type': {'key': 'type', 'type': 'str'},
1773        'sku': {'key': 'sku', 'type': 'Sku'},
1774        'cors': {'key': 'properties.cors', 'type': 'CorsRules'},
1775        'share_delete_retention_policy': {'key': 'properties.shareDeleteRetentionPolicy', 'type': 'DeleteRetentionPolicy'},
1776        'protocol_settings': {'key': 'properties.protocolSettings', 'type': 'ProtocolSettings'},
1777    }
1778
1779    def __init__(
1780        self,
1781        *,
1782        cors: Optional["CorsRules"] = None,
1783        share_delete_retention_policy: Optional["DeleteRetentionPolicy"] = None,
1784        protocol_settings: Optional["ProtocolSettings"] = None,
1785        **kwargs
1786    ):
1787        super(FileServiceProperties, self).__init__(**kwargs)
1788        self.sku = None
1789        self.cors = cors
1790        self.share_delete_retention_policy = share_delete_retention_policy
1791        self.protocol_settings = protocol_settings
1792
1793
1794class FileShare(AzureEntityResource):
1795    """Properties of the file share, including Id, resource name, resource type, Etag.
1796
1797    Variables are only populated by the server, and will be ignored when sending a request.
1798
1799    :ivar id: Fully qualified resource ID for the resource. Ex -
1800     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
1801    :vartype id: str
1802    :ivar name: The name of the resource.
1803    :vartype name: str
1804    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
1805     "Microsoft.Storage/storageAccounts".
1806    :vartype type: str
1807    :ivar etag: Resource Etag.
1808    :vartype etag: str
1809    :ivar last_modified_time: Returns the date and time the share was last modified.
1810    :vartype last_modified_time: ~datetime.datetime
1811    :param metadata: A name-value pair to associate with the share as metadata.
1812    :type metadata: dict[str, str]
1813    :param share_quota: The maximum size of the share, in gigabytes. Must be greater than 0, and
1814     less than or equal to 5TB (5120). For Large File Shares, the maximum size is 102400.
1815    :type share_quota: int
1816    :param enabled_protocols: The authentication protocol that is used for the file share. Can only
1817     be specified when creating a share. Possible values include: "SMB", "NFS".
1818    :type enabled_protocols: str or ~azure.mgmt.storage.v2020_08_01_preview.models.EnabledProtocols
1819    :param root_squash: The property is for NFS share only. The default is NoRootSquash. Possible
1820     values include: "NoRootSquash", "RootSquash", "AllSquash".
1821    :type root_squash: str or ~azure.mgmt.storage.v2020_08_01_preview.models.RootSquashType
1822    :ivar version: The version of the share.
1823    :vartype version: str
1824    :ivar deleted: Indicates whether the share was deleted.
1825    :vartype deleted: bool
1826    :ivar deleted_time: The deleted time if the share was deleted.
1827    :vartype deleted_time: ~datetime.datetime
1828    :ivar remaining_retention_days: Remaining retention days for share that was soft deleted.
1829    :vartype remaining_retention_days: int
1830    :param access_tier: Access tier for specific share. GpV2 account can choose between
1831     TransactionOptimized (default), Hot, and Cool. FileStorage account can choose Premium. Possible
1832     values include: "TransactionOptimized", "Hot", "Cool", "Premium".
1833    :type access_tier: str or ~azure.mgmt.storage.v2020_08_01_preview.models.ShareAccessTier
1834    :ivar access_tier_change_time: Indicates the last modification time for share access tier.
1835    :vartype access_tier_change_time: ~datetime.datetime
1836    :ivar access_tier_status: Indicates if there is a pending transition for access tier.
1837    :vartype access_tier_status: str
1838    :ivar share_usage_bytes: The approximate size of the data stored on the share. Note that this
1839     value may not include all recently created or recently resized files.
1840    :vartype share_usage_bytes: long
1841    :ivar snapshot_time: Creation time of share snapshot returned in the response of list shares
1842     with expand param "snapshots".
1843    :vartype snapshot_time: ~datetime.datetime
1844    """
1845
1846    _validation = {
1847        'id': {'readonly': True},
1848        'name': {'readonly': True},
1849        'type': {'readonly': True},
1850        'etag': {'readonly': True},
1851        'last_modified_time': {'readonly': True},
1852        'share_quota': {'maximum': 102400, 'minimum': 1},
1853        'version': {'readonly': True},
1854        'deleted': {'readonly': True},
1855        'deleted_time': {'readonly': True},
1856        'remaining_retention_days': {'readonly': True},
1857        'access_tier_change_time': {'readonly': True},
1858        'access_tier_status': {'readonly': True},
1859        'share_usage_bytes': {'readonly': True},
1860        'snapshot_time': {'readonly': True},
1861    }
1862
1863    _attribute_map = {
1864        'id': {'key': 'id', 'type': 'str'},
1865        'name': {'key': 'name', 'type': 'str'},
1866        'type': {'key': 'type', 'type': 'str'},
1867        'etag': {'key': 'etag', 'type': 'str'},
1868        'last_modified_time': {'key': 'properties.lastModifiedTime', 'type': 'iso-8601'},
1869        'metadata': {'key': 'properties.metadata', 'type': '{str}'},
1870        'share_quota': {'key': 'properties.shareQuota', 'type': 'int'},
1871        'enabled_protocols': {'key': 'properties.enabledProtocols', 'type': 'str'},
1872        'root_squash': {'key': 'properties.rootSquash', 'type': 'str'},
1873        'version': {'key': 'properties.version', 'type': 'str'},
1874        'deleted': {'key': 'properties.deleted', 'type': 'bool'},
1875        'deleted_time': {'key': 'properties.deletedTime', 'type': 'iso-8601'},
1876        'remaining_retention_days': {'key': 'properties.remainingRetentionDays', 'type': 'int'},
1877        'access_tier': {'key': 'properties.accessTier', 'type': 'str'},
1878        'access_tier_change_time': {'key': 'properties.accessTierChangeTime', 'type': 'iso-8601'},
1879        'access_tier_status': {'key': 'properties.accessTierStatus', 'type': 'str'},
1880        'share_usage_bytes': {'key': 'properties.shareUsageBytes', 'type': 'long'},
1881        'snapshot_time': {'key': 'properties.snapshotTime', 'type': 'iso-8601'},
1882    }
1883
1884    def __init__(
1885        self,
1886        *,
1887        metadata: Optional[Dict[str, str]] = None,
1888        share_quota: Optional[int] = None,
1889        enabled_protocols: Optional[Union[str, "EnabledProtocols"]] = None,
1890        root_squash: Optional[Union[str, "RootSquashType"]] = None,
1891        access_tier: Optional[Union[str, "ShareAccessTier"]] = None,
1892        **kwargs
1893    ):
1894        super(FileShare, self).__init__(**kwargs)
1895        self.last_modified_time = None
1896        self.metadata = metadata
1897        self.share_quota = share_quota
1898        self.enabled_protocols = enabled_protocols
1899        self.root_squash = root_squash
1900        self.version = None
1901        self.deleted = None
1902        self.deleted_time = None
1903        self.remaining_retention_days = None
1904        self.access_tier = access_tier
1905        self.access_tier_change_time = None
1906        self.access_tier_status = None
1907        self.share_usage_bytes = None
1908        self.snapshot_time = None
1909
1910
1911class FileShareItem(AzureEntityResource):
1912    """The file share properties be listed out.
1913
1914    Variables are only populated by the server, and will be ignored when sending a request.
1915
1916    :ivar id: Fully qualified resource ID for the resource. Ex -
1917     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
1918    :vartype id: str
1919    :ivar name: The name of the resource.
1920    :vartype name: str
1921    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
1922     "Microsoft.Storage/storageAccounts".
1923    :vartype type: str
1924    :ivar etag: Resource Etag.
1925    :vartype etag: str
1926    :ivar last_modified_time: Returns the date and time the share was last modified.
1927    :vartype last_modified_time: ~datetime.datetime
1928    :param metadata: A name-value pair to associate with the share as metadata.
1929    :type metadata: dict[str, str]
1930    :param share_quota: The maximum size of the share, in gigabytes. Must be greater than 0, and
1931     less than or equal to 5TB (5120). For Large File Shares, the maximum size is 102400.
1932    :type share_quota: int
1933    :param enabled_protocols: The authentication protocol that is used for the file share. Can only
1934     be specified when creating a share. Possible values include: "SMB", "NFS".
1935    :type enabled_protocols: str or ~azure.mgmt.storage.v2020_08_01_preview.models.EnabledProtocols
1936    :param root_squash: The property is for NFS share only. The default is NoRootSquash. Possible
1937     values include: "NoRootSquash", "RootSquash", "AllSquash".
1938    :type root_squash: str or ~azure.mgmt.storage.v2020_08_01_preview.models.RootSquashType
1939    :ivar version: The version of the share.
1940    :vartype version: str
1941    :ivar deleted: Indicates whether the share was deleted.
1942    :vartype deleted: bool
1943    :ivar deleted_time: The deleted time if the share was deleted.
1944    :vartype deleted_time: ~datetime.datetime
1945    :ivar remaining_retention_days: Remaining retention days for share that was soft deleted.
1946    :vartype remaining_retention_days: int
1947    :param access_tier: Access tier for specific share. GpV2 account can choose between
1948     TransactionOptimized (default), Hot, and Cool. FileStorage account can choose Premium. Possible
1949     values include: "TransactionOptimized", "Hot", "Cool", "Premium".
1950    :type access_tier: str or ~azure.mgmt.storage.v2020_08_01_preview.models.ShareAccessTier
1951    :ivar access_tier_change_time: Indicates the last modification time for share access tier.
1952    :vartype access_tier_change_time: ~datetime.datetime
1953    :ivar access_tier_status: Indicates if there is a pending transition for access tier.
1954    :vartype access_tier_status: str
1955    :ivar share_usage_bytes: The approximate size of the data stored on the share. Note that this
1956     value may not include all recently created or recently resized files.
1957    :vartype share_usage_bytes: long
1958    :ivar snapshot_time: Creation time of share snapshot returned in the response of list shares
1959     with expand param "snapshots".
1960    :vartype snapshot_time: ~datetime.datetime
1961    """
1962
1963    _validation = {
1964        'id': {'readonly': True},
1965        'name': {'readonly': True},
1966        'type': {'readonly': True},
1967        'etag': {'readonly': True},
1968        'last_modified_time': {'readonly': True},
1969        'share_quota': {'maximum': 102400, 'minimum': 1},
1970        'version': {'readonly': True},
1971        'deleted': {'readonly': True},
1972        'deleted_time': {'readonly': True},
1973        'remaining_retention_days': {'readonly': True},
1974        'access_tier_change_time': {'readonly': True},
1975        'access_tier_status': {'readonly': True},
1976        'share_usage_bytes': {'readonly': True},
1977        'snapshot_time': {'readonly': True},
1978    }
1979
1980    _attribute_map = {
1981        'id': {'key': 'id', 'type': 'str'},
1982        'name': {'key': 'name', 'type': 'str'},
1983        'type': {'key': 'type', 'type': 'str'},
1984        'etag': {'key': 'etag', 'type': 'str'},
1985        'last_modified_time': {'key': 'properties.lastModifiedTime', 'type': 'iso-8601'},
1986        'metadata': {'key': 'properties.metadata', 'type': '{str}'},
1987        'share_quota': {'key': 'properties.shareQuota', 'type': 'int'},
1988        'enabled_protocols': {'key': 'properties.enabledProtocols', 'type': 'str'},
1989        'root_squash': {'key': 'properties.rootSquash', 'type': 'str'},
1990        'version': {'key': 'properties.version', 'type': 'str'},
1991        'deleted': {'key': 'properties.deleted', 'type': 'bool'},
1992        'deleted_time': {'key': 'properties.deletedTime', 'type': 'iso-8601'},
1993        'remaining_retention_days': {'key': 'properties.remainingRetentionDays', 'type': 'int'},
1994        'access_tier': {'key': 'properties.accessTier', 'type': 'str'},
1995        'access_tier_change_time': {'key': 'properties.accessTierChangeTime', 'type': 'iso-8601'},
1996        'access_tier_status': {'key': 'properties.accessTierStatus', 'type': 'str'},
1997        'share_usage_bytes': {'key': 'properties.shareUsageBytes', 'type': 'long'},
1998        'snapshot_time': {'key': 'properties.snapshotTime', 'type': 'iso-8601'},
1999    }
2000
2001    def __init__(
2002        self,
2003        *,
2004        metadata: Optional[Dict[str, str]] = None,
2005        share_quota: Optional[int] = None,
2006        enabled_protocols: Optional[Union[str, "EnabledProtocols"]] = None,
2007        root_squash: Optional[Union[str, "RootSquashType"]] = None,
2008        access_tier: Optional[Union[str, "ShareAccessTier"]] = None,
2009        **kwargs
2010    ):
2011        super(FileShareItem, self).__init__(**kwargs)
2012        self.last_modified_time = None
2013        self.metadata = metadata
2014        self.share_quota = share_quota
2015        self.enabled_protocols = enabled_protocols
2016        self.root_squash = root_squash
2017        self.version = None
2018        self.deleted = None
2019        self.deleted_time = None
2020        self.remaining_retention_days = None
2021        self.access_tier = access_tier
2022        self.access_tier_change_time = None
2023        self.access_tier_status = None
2024        self.share_usage_bytes = None
2025        self.snapshot_time = None
2026
2027
2028class FileShareItems(msrest.serialization.Model):
2029    """Response schema. Contains list of shares returned, and if paging is requested or required, a URL to next page of shares.
2030
2031    Variables are only populated by the server, and will be ignored when sending a request.
2032
2033    :ivar value: List of file shares returned.
2034    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.FileShareItem]
2035    :ivar next_link: Request URL that can be used to query next page of shares. Returned when total
2036     number of requested shares exceed maximum page size.
2037    :vartype next_link: str
2038    """
2039
2040    _validation = {
2041        'value': {'readonly': True},
2042        'next_link': {'readonly': True},
2043    }
2044
2045    _attribute_map = {
2046        'value': {'key': 'value', 'type': '[FileShareItem]'},
2047        'next_link': {'key': 'nextLink', 'type': 'str'},
2048    }
2049
2050    def __init__(
2051        self,
2052        **kwargs
2053    ):
2054        super(FileShareItems, self).__init__(**kwargs)
2055        self.value = None
2056        self.next_link = None
2057
2058
2059class GeoReplicationStats(msrest.serialization.Model):
2060    """Statistics related to replication for storage account's Blob, Table, Queue and File services. It is only available when geo-redundant replication is enabled for the storage account.
2061
2062    Variables are only populated by the server, and will be ignored when sending a request.
2063
2064    :ivar status: The status of the secondary location. Possible values are: - Live: Indicates that
2065     the secondary location is active and operational. - Bootstrap: Indicates initial
2066     synchronization from the primary location to the secondary location is in progress.This
2067     typically occurs when replication is first enabled. - Unavailable: Indicates that the secondary
2068     location is temporarily unavailable. Possible values include: "Live", "Bootstrap",
2069     "Unavailable".
2070    :vartype status: str or ~azure.mgmt.storage.v2020_08_01_preview.models.GeoReplicationStatus
2071    :ivar last_sync_time: All primary writes preceding this UTC date/time value are guaranteed to
2072     be available for read operations. Primary writes following this point in time may or may not be
2073     available for reads. Element may be default value if value of LastSyncTime is not available,
2074     this can happen if secondary is offline or we are in bootstrap.
2075    :vartype last_sync_time: ~datetime.datetime
2076    :ivar can_failover: A boolean flag which indicates whether or not account failover is supported
2077     for the account.
2078    :vartype can_failover: bool
2079    """
2080
2081    _validation = {
2082        'status': {'readonly': True},
2083        'last_sync_time': {'readonly': True},
2084        'can_failover': {'readonly': True},
2085    }
2086
2087    _attribute_map = {
2088        'status': {'key': 'status', 'type': 'str'},
2089        'last_sync_time': {'key': 'lastSyncTime', 'type': 'iso-8601'},
2090        'can_failover': {'key': 'canFailover', 'type': 'bool'},
2091    }
2092
2093    def __init__(
2094        self,
2095        **kwargs
2096    ):
2097        super(GeoReplicationStats, self).__init__(**kwargs)
2098        self.status = None
2099        self.last_sync_time = None
2100        self.can_failover = None
2101
2102
2103class Identity(msrest.serialization.Model):
2104    """Identity for the resource.
2105
2106    Variables are only populated by the server, and will be ignored when sending a request.
2107
2108    All required parameters must be populated in order to send to Azure.
2109
2110    :ivar principal_id: The principal ID of resource identity.
2111    :vartype principal_id: str
2112    :ivar tenant_id: The tenant ID of resource.
2113    :vartype tenant_id: str
2114    :ivar type: The identity type. Has constant value: "SystemAssigned".
2115    :vartype type: str
2116    """
2117
2118    _validation = {
2119        'principal_id': {'readonly': True},
2120        'tenant_id': {'readonly': True},
2121        'type': {'required': True, 'constant': True},
2122    }
2123
2124    _attribute_map = {
2125        'principal_id': {'key': 'principalId', 'type': 'str'},
2126        'tenant_id': {'key': 'tenantId', 'type': 'str'},
2127        'type': {'key': 'type', 'type': 'str'},
2128    }
2129
2130    type = "SystemAssigned"
2131
2132    def __init__(
2133        self,
2134        **kwargs
2135    ):
2136        super(Identity, self).__init__(**kwargs)
2137        self.principal_id = None
2138        self.tenant_id = None
2139
2140
2141class ImmutabilityPolicy(AzureEntityResource):
2142    """The ImmutabilityPolicy property of a blob container, including Id, resource name, resource type, Etag.
2143
2144    Variables are only populated by the server, and will be ignored when sending a request.
2145
2146    :ivar id: Fully qualified resource ID for the resource. Ex -
2147     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
2148    :vartype id: str
2149    :ivar name: The name of the resource.
2150    :vartype name: str
2151    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
2152     "Microsoft.Storage/storageAccounts".
2153    :vartype type: str
2154    :ivar etag: Resource Etag.
2155    :vartype etag: str
2156    :param immutability_period_since_creation_in_days: The immutability period for the blobs in the
2157     container since the policy creation, in days.
2158    :type immutability_period_since_creation_in_days: int
2159    :ivar state: The ImmutabilityPolicy state of a blob container, possible values include: Locked
2160     and Unlocked. Possible values include: "Locked", "Unlocked".
2161    :vartype state: str or ~azure.mgmt.storage.v2020_08_01_preview.models.ImmutabilityPolicyState
2162    :param allow_protected_append_writes: This property can only be changed for unlocked time-based
2163     retention policies. When enabled, new blocks can be written to an append blob while maintaining
2164     immutability protection and compliance. Only new blocks can be added and any existing blocks
2165     cannot be modified or deleted. This property cannot be changed with ExtendImmutabilityPolicy
2166     API.
2167    :type allow_protected_append_writes: bool
2168    """
2169
2170    _validation = {
2171        'id': {'readonly': True},
2172        'name': {'readonly': True},
2173        'type': {'readonly': True},
2174        'etag': {'readonly': True},
2175        'state': {'readonly': True},
2176    }
2177
2178    _attribute_map = {
2179        'id': {'key': 'id', 'type': 'str'},
2180        'name': {'key': 'name', 'type': 'str'},
2181        'type': {'key': 'type', 'type': 'str'},
2182        'etag': {'key': 'etag', 'type': 'str'},
2183        'immutability_period_since_creation_in_days': {'key': 'properties.immutabilityPeriodSinceCreationInDays', 'type': 'int'},
2184        'state': {'key': 'properties.state', 'type': 'str'},
2185        'allow_protected_append_writes': {'key': 'properties.allowProtectedAppendWrites', 'type': 'bool'},
2186    }
2187
2188    def __init__(
2189        self,
2190        *,
2191        immutability_period_since_creation_in_days: Optional[int] = None,
2192        allow_protected_append_writes: Optional[bool] = None,
2193        **kwargs
2194    ):
2195        super(ImmutabilityPolicy, self).__init__(**kwargs)
2196        self.immutability_period_since_creation_in_days = immutability_period_since_creation_in_days
2197        self.state = None
2198        self.allow_protected_append_writes = allow_protected_append_writes
2199
2200
2201class ImmutabilityPolicyProperties(msrest.serialization.Model):
2202    """The properties of an ImmutabilityPolicy of a blob container.
2203
2204    Variables are only populated by the server, and will be ignored when sending a request.
2205
2206    :ivar etag: ImmutabilityPolicy Etag.
2207    :vartype etag: str
2208    :ivar update_history: The ImmutabilityPolicy update history of the blob container.
2209    :vartype update_history:
2210     list[~azure.mgmt.storage.v2020_08_01_preview.models.UpdateHistoryProperty]
2211    :param immutability_period_since_creation_in_days: The immutability period for the blobs in the
2212     container since the policy creation, in days.
2213    :type immutability_period_since_creation_in_days: int
2214    :ivar state: The ImmutabilityPolicy state of a blob container, possible values include: Locked
2215     and Unlocked. Possible values include: "Locked", "Unlocked".
2216    :vartype state: str or ~azure.mgmt.storage.v2020_08_01_preview.models.ImmutabilityPolicyState
2217    :param allow_protected_append_writes: This property can only be changed for unlocked time-based
2218     retention policies. When enabled, new blocks can be written to an append blob while maintaining
2219     immutability protection and compliance. Only new blocks can be added and any existing blocks
2220     cannot be modified or deleted. This property cannot be changed with ExtendImmutabilityPolicy
2221     API.
2222    :type allow_protected_append_writes: bool
2223    """
2224
2225    _validation = {
2226        'etag': {'readonly': True},
2227        'update_history': {'readonly': True},
2228        'state': {'readonly': True},
2229    }
2230
2231    _attribute_map = {
2232        'etag': {'key': 'etag', 'type': 'str'},
2233        'update_history': {'key': 'updateHistory', 'type': '[UpdateHistoryProperty]'},
2234        'immutability_period_since_creation_in_days': {'key': 'properties.immutabilityPeriodSinceCreationInDays', 'type': 'int'},
2235        'state': {'key': 'properties.state', 'type': 'str'},
2236        'allow_protected_append_writes': {'key': 'properties.allowProtectedAppendWrites', 'type': 'bool'},
2237    }
2238
2239    def __init__(
2240        self,
2241        *,
2242        immutability_period_since_creation_in_days: Optional[int] = None,
2243        allow_protected_append_writes: Optional[bool] = None,
2244        **kwargs
2245    ):
2246        super(ImmutabilityPolicyProperties, self).__init__(**kwargs)
2247        self.etag = None
2248        self.update_history = None
2249        self.immutability_period_since_creation_in_days = immutability_period_since_creation_in_days
2250        self.state = None
2251        self.allow_protected_append_writes = allow_protected_append_writes
2252
2253
2254class IPRule(msrest.serialization.Model):
2255    """IP rule with specific IP or IP range in CIDR format.
2256
2257    All required parameters must be populated in order to send to Azure.
2258
2259    :param ip_address_or_range: Required. Specifies the IP or IP range in CIDR format. Only IPV4
2260     address is allowed.
2261    :type ip_address_or_range: str
2262    :param action: The action of IP ACL rule. The only acceptable values to pass in are None and
2263     "Allow". The default value is None.
2264    :type action: str
2265    """
2266
2267    _validation = {
2268        'ip_address_or_range': {'required': True},
2269    }
2270
2271    _attribute_map = {
2272        'ip_address_or_range': {'key': 'value', 'type': 'str'},
2273        'action': {'key': 'action', 'type': 'str'},
2274    }
2275
2276    def __init__(
2277        self,
2278        *,
2279        ip_address_or_range: str,
2280        action: Optional[str] = None,
2281        **kwargs
2282    ):
2283        super(IPRule, self).__init__(**kwargs)
2284        self.ip_address_or_range = ip_address_or_range
2285        self.action = action
2286
2287
2288class KeyVaultProperties(msrest.serialization.Model):
2289    """Properties of key vault.
2290
2291    Variables are only populated by the server, and will be ignored when sending a request.
2292
2293    :param key_name: The name of KeyVault key.
2294    :type key_name: str
2295    :param key_version: The version of KeyVault key.
2296    :type key_version: str
2297    :param key_vault_uri: The Uri of KeyVault.
2298    :type key_vault_uri: str
2299    :ivar current_versioned_key_identifier: The object identifier of the current versioned Key
2300     Vault Key in use.
2301    :vartype current_versioned_key_identifier: str
2302    :ivar last_key_rotation_timestamp: Timestamp of last rotation of the Key Vault Key.
2303    :vartype last_key_rotation_timestamp: ~datetime.datetime
2304    """
2305
2306    _validation = {
2307        'current_versioned_key_identifier': {'readonly': True},
2308        'last_key_rotation_timestamp': {'readonly': True},
2309    }
2310
2311    _attribute_map = {
2312        'key_name': {'key': 'keyname', 'type': 'str'},
2313        'key_version': {'key': 'keyversion', 'type': 'str'},
2314        'key_vault_uri': {'key': 'keyvaulturi', 'type': 'str'},
2315        'current_versioned_key_identifier': {'key': 'currentVersionedKeyIdentifier', 'type': 'str'},
2316        'last_key_rotation_timestamp': {'key': 'lastKeyRotationTimestamp', 'type': 'iso-8601'},
2317    }
2318
2319    def __init__(
2320        self,
2321        *,
2322        key_name: Optional[str] = None,
2323        key_version: Optional[str] = None,
2324        key_vault_uri: Optional[str] = None,
2325        **kwargs
2326    ):
2327        super(KeyVaultProperties, self).__init__(**kwargs)
2328        self.key_name = key_name
2329        self.key_version = key_version
2330        self.key_vault_uri = key_vault_uri
2331        self.current_versioned_key_identifier = None
2332        self.last_key_rotation_timestamp = None
2333
2334
2335class LastAccessTimeTrackingPolicy(msrest.serialization.Model):
2336    """The blob service properties for Last access time based tracking policy.
2337
2338    All required parameters must be populated in order to send to Azure.
2339
2340    :param enable: Required. When set to true last access time based tracking is enabled.
2341    :type enable: bool
2342    :param name: Name of the policy. The valid value is AccessTimeTracking. This field is currently
2343     read only. Possible values include: "AccessTimeTracking".
2344    :type name: str or ~azure.mgmt.storage.v2020_08_01_preview.models.Name
2345    :param tracking_granularity_in_days: The field specifies blob object tracking granularity in
2346     days, typically how often the blob object should be tracked.This field is currently read only
2347     with value as 1.
2348    :type tracking_granularity_in_days: int
2349    :param blob_type: An array of predefined supported blob types. Only blockBlob is the supported
2350     value. This field is currently read only.
2351    :type blob_type: list[str]
2352    """
2353
2354    _validation = {
2355        'enable': {'required': True},
2356    }
2357
2358    _attribute_map = {
2359        'enable': {'key': 'enable', 'type': 'bool'},
2360        'name': {'key': 'name', 'type': 'str'},
2361        'tracking_granularity_in_days': {'key': 'trackingGranularityInDays', 'type': 'int'},
2362        'blob_type': {'key': 'blobType', 'type': '[str]'},
2363    }
2364
2365    def __init__(
2366        self,
2367        *,
2368        enable: bool,
2369        name: Optional[Union[str, "Name"]] = None,
2370        tracking_granularity_in_days: Optional[int] = None,
2371        blob_type: Optional[List[str]] = None,
2372        **kwargs
2373    ):
2374        super(LastAccessTimeTrackingPolicy, self).__init__(**kwargs)
2375        self.enable = enable
2376        self.name = name
2377        self.tracking_granularity_in_days = tracking_granularity_in_days
2378        self.blob_type = blob_type
2379
2380
2381class LeaseContainerRequest(msrest.serialization.Model):
2382    """Lease Container request schema.
2383
2384    All required parameters must be populated in order to send to Azure.
2385
2386    :param action: Required. Specifies the lease action. Can be one of the available actions.
2387     Possible values include: "Acquire", "Renew", "Change", "Release", "Break".
2388    :type action: str or ~azure.mgmt.storage.v2020_08_01_preview.models.LeaseContainerRequestAction
2389    :param lease_id: Identifies the lease. Can be specified in any valid GUID string format.
2390    :type lease_id: str
2391    :param break_period: Optional. For a break action, proposed duration the lease should continue
2392     before it is broken, in seconds, between 0 and 60.
2393    :type break_period: int
2394    :param lease_duration: Required for acquire. Specifies the duration of the lease, in seconds,
2395     or negative one (-1) for a lease that never expires.
2396    :type lease_duration: int
2397    :param proposed_lease_id: Optional for acquire, required for change. Proposed lease ID, in a
2398     GUID string format.
2399    :type proposed_lease_id: str
2400    """
2401
2402    _validation = {
2403        'action': {'required': True},
2404    }
2405
2406    _attribute_map = {
2407        'action': {'key': 'action', 'type': 'str'},
2408        'lease_id': {'key': 'leaseId', 'type': 'str'},
2409        'break_period': {'key': 'breakPeriod', 'type': 'int'},
2410        'lease_duration': {'key': 'leaseDuration', 'type': 'int'},
2411        'proposed_lease_id': {'key': 'proposedLeaseId', 'type': 'str'},
2412    }
2413
2414    def __init__(
2415        self,
2416        *,
2417        action: Union[str, "LeaseContainerRequestAction"],
2418        lease_id: Optional[str] = None,
2419        break_period: Optional[int] = None,
2420        lease_duration: Optional[int] = None,
2421        proposed_lease_id: Optional[str] = None,
2422        **kwargs
2423    ):
2424        super(LeaseContainerRequest, self).__init__(**kwargs)
2425        self.action = action
2426        self.lease_id = lease_id
2427        self.break_period = break_period
2428        self.lease_duration = lease_duration
2429        self.proposed_lease_id = proposed_lease_id
2430
2431
2432class LeaseContainerResponse(msrest.serialization.Model):
2433    """Lease Container response schema.
2434
2435    :param lease_id: Returned unique lease ID that must be included with any request to delete the
2436     container, or to renew, change, or release the lease.
2437    :type lease_id: str
2438    :param lease_time_seconds: Approximate time remaining in the lease period, in seconds.
2439    :type lease_time_seconds: str
2440    """
2441
2442    _attribute_map = {
2443        'lease_id': {'key': 'leaseId', 'type': 'str'},
2444        'lease_time_seconds': {'key': 'leaseTimeSeconds', 'type': 'str'},
2445    }
2446
2447    def __init__(
2448        self,
2449        *,
2450        lease_id: Optional[str] = None,
2451        lease_time_seconds: Optional[str] = None,
2452        **kwargs
2453    ):
2454        super(LeaseContainerResponse, self).__init__(**kwargs)
2455        self.lease_id = lease_id
2456        self.lease_time_seconds = lease_time_seconds
2457
2458
2459class LegalHold(msrest.serialization.Model):
2460    """The LegalHold property of a blob container.
2461
2462    Variables are only populated by the server, and will be ignored when sending a request.
2463
2464    All required parameters must be populated in order to send to Azure.
2465
2466    :ivar has_legal_hold: The hasLegalHold public property is set to true by SRP if there are at
2467     least one existing tag. The hasLegalHold public property is set to false by SRP if all existing
2468     legal hold tags are cleared out. There can be a maximum of 1000 blob containers with
2469     hasLegalHold=true for a given account.
2470    :vartype has_legal_hold: bool
2471    :param tags: Required. A set of tags. Each tag should be 3 to 23 alphanumeric characters and is
2472     normalized to lower case at SRP.
2473    :type tags: list[str]
2474    """
2475
2476    _validation = {
2477        'has_legal_hold': {'readonly': True},
2478        'tags': {'required': True},
2479    }
2480
2481    _attribute_map = {
2482        'has_legal_hold': {'key': 'hasLegalHold', 'type': 'bool'},
2483        'tags': {'key': 'tags', 'type': '[str]'},
2484    }
2485
2486    def __init__(
2487        self,
2488        *,
2489        tags: List[str],
2490        **kwargs
2491    ):
2492        super(LegalHold, self).__init__(**kwargs)
2493        self.has_legal_hold = None
2494        self.tags = tags
2495
2496
2497class LegalHoldProperties(msrest.serialization.Model):
2498    """The LegalHold property of a blob container.
2499
2500    Variables are only populated by the server, and will be ignored when sending a request.
2501
2502    :ivar has_legal_hold: The hasLegalHold public property is set to true by SRP if there are at
2503     least one existing tag. The hasLegalHold public property is set to false by SRP if all existing
2504     legal hold tags are cleared out. There can be a maximum of 1000 blob containers with
2505     hasLegalHold=true for a given account.
2506    :vartype has_legal_hold: bool
2507    :param tags: A set of tags. The list of LegalHold tags of a blob container.
2508    :type tags: list[~azure.mgmt.storage.v2020_08_01_preview.models.TagProperty]
2509    """
2510
2511    _validation = {
2512        'has_legal_hold': {'readonly': True},
2513    }
2514
2515    _attribute_map = {
2516        'has_legal_hold': {'key': 'hasLegalHold', 'type': 'bool'},
2517        'tags': {'key': 'tags', 'type': '[TagProperty]'},
2518    }
2519
2520    def __init__(
2521        self,
2522        *,
2523        tags: Optional[List["TagProperty"]] = None,
2524        **kwargs
2525    ):
2526        super(LegalHoldProperties, self).__init__(**kwargs)
2527        self.has_legal_hold = None
2528        self.tags = tags
2529
2530
2531class ListAccountSasResponse(msrest.serialization.Model):
2532    """The List SAS credentials operation response.
2533
2534    Variables are only populated by the server, and will be ignored when sending a request.
2535
2536    :ivar account_sas_token: List SAS credentials of storage account.
2537    :vartype account_sas_token: str
2538    """
2539
2540    _validation = {
2541        'account_sas_token': {'readonly': True},
2542    }
2543
2544    _attribute_map = {
2545        'account_sas_token': {'key': 'accountSasToken', 'type': 'str'},
2546    }
2547
2548    def __init__(
2549        self,
2550        **kwargs
2551    ):
2552        super(ListAccountSasResponse, self).__init__(**kwargs)
2553        self.account_sas_token = None
2554
2555
2556class ListBlobInventoryPolicy(msrest.serialization.Model):
2557    """List of blob inventory policies returned.
2558
2559    Variables are only populated by the server, and will be ignored when sending a request.
2560
2561    :ivar value: List of blob inventory policies.
2562    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.BlobInventoryPolicy]
2563    """
2564
2565    _validation = {
2566        'value': {'readonly': True},
2567    }
2568
2569    _attribute_map = {
2570        'value': {'key': 'value', 'type': '[BlobInventoryPolicy]'},
2571    }
2572
2573    def __init__(
2574        self,
2575        **kwargs
2576    ):
2577        super(ListBlobInventoryPolicy, self).__init__(**kwargs)
2578        self.value = None
2579
2580
2581class ListContainerItem(AzureEntityResource):
2582    """The blob container properties be listed out.
2583
2584    Variables are only populated by the server, and will be ignored when sending a request.
2585
2586    :ivar id: Fully qualified resource ID for the resource. Ex -
2587     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
2588    :vartype id: str
2589    :ivar name: The name of the resource.
2590    :vartype name: str
2591    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
2592     "Microsoft.Storage/storageAccounts".
2593    :vartype type: str
2594    :ivar etag: Resource Etag.
2595    :vartype etag: str
2596    :ivar version: The version of the deleted blob container.
2597    :vartype version: str
2598    :ivar deleted: Indicates whether the blob container was deleted.
2599    :vartype deleted: bool
2600    :ivar deleted_time: Blob container deletion time.
2601    :vartype deleted_time: ~datetime.datetime
2602    :ivar remaining_retention_days: Remaining retention days for soft deleted blob container.
2603    :vartype remaining_retention_days: int
2604    :param default_encryption_scope: Default the container to use specified encryption scope for
2605     all writes.
2606    :type default_encryption_scope: str
2607    :param deny_encryption_scope_override: Block override of encryption scope from the container
2608     default.
2609    :type deny_encryption_scope_override: bool
2610    :param public_access: Specifies whether data in the container may be accessed publicly and the
2611     level of access. Possible values include: "Container", "Blob", "None".
2612    :type public_access: str or ~azure.mgmt.storage.v2020_08_01_preview.models.PublicAccess
2613    :ivar last_modified_time: Returns the date and time the container was last modified.
2614    :vartype last_modified_time: ~datetime.datetime
2615    :ivar lease_status: The lease status of the container. Possible values include: "Locked",
2616     "Unlocked".
2617    :vartype lease_status: str or ~azure.mgmt.storage.v2020_08_01_preview.models.LeaseStatus
2618    :ivar lease_state: Lease state of the container. Possible values include: "Available",
2619     "Leased", "Expired", "Breaking", "Broken".
2620    :vartype lease_state: str or ~azure.mgmt.storage.v2020_08_01_preview.models.LeaseState
2621    :ivar lease_duration: Specifies whether the lease on a container is of infinite or fixed
2622     duration, only when the container is leased. Possible values include: "Infinite", "Fixed".
2623    :vartype lease_duration: str or ~azure.mgmt.storage.v2020_08_01_preview.models.LeaseDuration
2624    :param metadata: A name-value pair to associate with the container as metadata.
2625    :type metadata: dict[str, str]
2626    :ivar immutability_policy: The ImmutabilityPolicy property of the container.
2627    :vartype immutability_policy:
2628     ~azure.mgmt.storage.v2020_08_01_preview.models.ImmutabilityPolicyProperties
2629    :ivar legal_hold: The LegalHold property of the container.
2630    :vartype legal_hold: ~azure.mgmt.storage.v2020_08_01_preview.models.LegalHoldProperties
2631    :ivar has_legal_hold: The hasLegalHold public property is set to true by SRP if there are at
2632     least one existing tag. The hasLegalHold public property is set to false by SRP if all existing
2633     legal hold tags are cleared out. There can be a maximum of 1000 blob containers with
2634     hasLegalHold=true for a given account.
2635    :vartype has_legal_hold: bool
2636    :ivar has_immutability_policy: The hasImmutabilityPolicy public property is set to true by SRP
2637     if ImmutabilityPolicy has been created for this container. The hasImmutabilityPolicy public
2638     property is set to false by SRP if ImmutabilityPolicy has not been created for this container.
2639    :vartype has_immutability_policy: bool
2640    """
2641
2642    _validation = {
2643        'id': {'readonly': True},
2644        'name': {'readonly': True},
2645        'type': {'readonly': True},
2646        'etag': {'readonly': True},
2647        'version': {'readonly': True},
2648        'deleted': {'readonly': True},
2649        'deleted_time': {'readonly': True},
2650        'remaining_retention_days': {'readonly': True},
2651        'last_modified_time': {'readonly': True},
2652        'lease_status': {'readonly': True},
2653        'lease_state': {'readonly': True},
2654        'lease_duration': {'readonly': True},
2655        'immutability_policy': {'readonly': True},
2656        'legal_hold': {'readonly': True},
2657        'has_legal_hold': {'readonly': True},
2658        'has_immutability_policy': {'readonly': True},
2659    }
2660
2661    _attribute_map = {
2662        'id': {'key': 'id', 'type': 'str'},
2663        'name': {'key': 'name', 'type': 'str'},
2664        'type': {'key': 'type', 'type': 'str'},
2665        'etag': {'key': 'etag', 'type': 'str'},
2666        'version': {'key': 'properties.version', 'type': 'str'},
2667        'deleted': {'key': 'properties.deleted', 'type': 'bool'},
2668        'deleted_time': {'key': 'properties.deletedTime', 'type': 'iso-8601'},
2669        'remaining_retention_days': {'key': 'properties.remainingRetentionDays', 'type': 'int'},
2670        'default_encryption_scope': {'key': 'properties.defaultEncryptionScope', 'type': 'str'},
2671        'deny_encryption_scope_override': {'key': 'properties.denyEncryptionScopeOverride', 'type': 'bool'},
2672        'public_access': {'key': 'properties.publicAccess', 'type': 'str'},
2673        'last_modified_time': {'key': 'properties.lastModifiedTime', 'type': 'iso-8601'},
2674        'lease_status': {'key': 'properties.leaseStatus', 'type': 'str'},
2675        'lease_state': {'key': 'properties.leaseState', 'type': 'str'},
2676        'lease_duration': {'key': 'properties.leaseDuration', 'type': 'str'},
2677        'metadata': {'key': 'properties.metadata', 'type': '{str}'},
2678        'immutability_policy': {'key': 'properties.immutabilityPolicy', 'type': 'ImmutabilityPolicyProperties'},
2679        'legal_hold': {'key': 'properties.legalHold', 'type': 'LegalHoldProperties'},
2680        'has_legal_hold': {'key': 'properties.hasLegalHold', 'type': 'bool'},
2681        'has_immutability_policy': {'key': 'properties.hasImmutabilityPolicy', 'type': 'bool'},
2682    }
2683
2684    def __init__(
2685        self,
2686        *,
2687        default_encryption_scope: Optional[str] = None,
2688        deny_encryption_scope_override: Optional[bool] = None,
2689        public_access: Optional[Union[str, "PublicAccess"]] = None,
2690        metadata: Optional[Dict[str, str]] = None,
2691        **kwargs
2692    ):
2693        super(ListContainerItem, self).__init__(**kwargs)
2694        self.version = None
2695        self.deleted = None
2696        self.deleted_time = None
2697        self.remaining_retention_days = None
2698        self.default_encryption_scope = default_encryption_scope
2699        self.deny_encryption_scope_override = deny_encryption_scope_override
2700        self.public_access = public_access
2701        self.last_modified_time = None
2702        self.lease_status = None
2703        self.lease_state = None
2704        self.lease_duration = None
2705        self.metadata = metadata
2706        self.immutability_policy = None
2707        self.legal_hold = None
2708        self.has_legal_hold = None
2709        self.has_immutability_policy = None
2710
2711
2712class ListContainerItems(msrest.serialization.Model):
2713    """Response schema. Contains list of blobs returned, and if paging is requested or required, a URL to next page of containers.
2714
2715    Variables are only populated by the server, and will be ignored when sending a request.
2716
2717    :ivar value: List of blobs containers returned.
2718    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.ListContainerItem]
2719    :ivar next_link: Request URL that can be used to query next page of containers. Returned when
2720     total number of requested containers exceed maximum page size.
2721    :vartype next_link: str
2722    """
2723
2724    _validation = {
2725        'value': {'readonly': True},
2726        'next_link': {'readonly': True},
2727    }
2728
2729    _attribute_map = {
2730        'value': {'key': 'value', 'type': '[ListContainerItem]'},
2731        'next_link': {'key': 'nextLink', 'type': 'str'},
2732    }
2733
2734    def __init__(
2735        self,
2736        **kwargs
2737    ):
2738        super(ListContainerItems, self).__init__(**kwargs)
2739        self.value = None
2740        self.next_link = None
2741
2742
2743class ListQueue(Resource):
2744    """ListQueue.
2745
2746    Variables are only populated by the server, and will be ignored when sending a request.
2747
2748    :ivar id: Fully qualified resource ID for the resource. Ex -
2749     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
2750    :vartype id: str
2751    :ivar name: The name of the resource.
2752    :vartype name: str
2753    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
2754     "Microsoft.Storage/storageAccounts".
2755    :vartype type: str
2756    :param metadata: A name-value pair that represents queue metadata.
2757    :type metadata: dict[str, str]
2758    """
2759
2760    _validation = {
2761        'id': {'readonly': True},
2762        'name': {'readonly': True},
2763        'type': {'readonly': True},
2764    }
2765
2766    _attribute_map = {
2767        'id': {'key': 'id', 'type': 'str'},
2768        'name': {'key': 'name', 'type': 'str'},
2769        'type': {'key': 'type', 'type': 'str'},
2770        'metadata': {'key': 'properties.metadata', 'type': '{str}'},
2771    }
2772
2773    def __init__(
2774        self,
2775        *,
2776        metadata: Optional[Dict[str, str]] = None,
2777        **kwargs
2778    ):
2779        super(ListQueue, self).__init__(**kwargs)
2780        self.metadata = metadata
2781
2782
2783class ListQueueResource(msrest.serialization.Model):
2784    """Response schema. Contains list of queues returned.
2785
2786    Variables are only populated by the server, and will be ignored when sending a request.
2787
2788    :ivar value: List of queues returned.
2789    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.ListQueue]
2790    :ivar next_link: Request URL that can be used to list next page of queues.
2791    :vartype next_link: str
2792    """
2793
2794    _validation = {
2795        'value': {'readonly': True},
2796        'next_link': {'readonly': True},
2797    }
2798
2799    _attribute_map = {
2800        'value': {'key': 'value', 'type': '[ListQueue]'},
2801        'next_link': {'key': 'nextLink', 'type': 'str'},
2802    }
2803
2804    def __init__(
2805        self,
2806        **kwargs
2807    ):
2808        super(ListQueueResource, self).__init__(**kwargs)
2809        self.value = None
2810        self.next_link = None
2811
2812
2813class ListQueueServices(msrest.serialization.Model):
2814    """ListQueueServices.
2815
2816    Variables are only populated by the server, and will be ignored when sending a request.
2817
2818    :ivar value: List of queue services returned.
2819    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.QueueServiceProperties]
2820    """
2821
2822    _validation = {
2823        'value': {'readonly': True},
2824    }
2825
2826    _attribute_map = {
2827        'value': {'key': 'value', 'type': '[QueueServiceProperties]'},
2828    }
2829
2830    def __init__(
2831        self,
2832        **kwargs
2833    ):
2834        super(ListQueueServices, self).__init__(**kwargs)
2835        self.value = None
2836
2837
2838class ListServiceSasResponse(msrest.serialization.Model):
2839    """The List service SAS credentials operation response.
2840
2841    Variables are only populated by the server, and will be ignored when sending a request.
2842
2843    :ivar service_sas_token: List service SAS credentials of specific resource.
2844    :vartype service_sas_token: str
2845    """
2846
2847    _validation = {
2848        'service_sas_token': {'readonly': True},
2849    }
2850
2851    _attribute_map = {
2852        'service_sas_token': {'key': 'serviceSasToken', 'type': 'str'},
2853    }
2854
2855    def __init__(
2856        self,
2857        **kwargs
2858    ):
2859        super(ListServiceSasResponse, self).__init__(**kwargs)
2860        self.service_sas_token = None
2861
2862
2863class ListTableResource(msrest.serialization.Model):
2864    """Response schema. Contains list of tables returned.
2865
2866    Variables are only populated by the server, and will be ignored when sending a request.
2867
2868    :ivar value: List of tables returned.
2869    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.Table]
2870    :ivar next_link: Request URL that can be used to query next page of tables.
2871    :vartype next_link: str
2872    """
2873
2874    _validation = {
2875        'value': {'readonly': True},
2876        'next_link': {'readonly': True},
2877    }
2878
2879    _attribute_map = {
2880        'value': {'key': 'value', 'type': '[Table]'},
2881        'next_link': {'key': 'nextLink', 'type': 'str'},
2882    }
2883
2884    def __init__(
2885        self,
2886        **kwargs
2887    ):
2888        super(ListTableResource, self).__init__(**kwargs)
2889        self.value = None
2890        self.next_link = None
2891
2892
2893class ListTableServices(msrest.serialization.Model):
2894    """ListTableServices.
2895
2896    Variables are only populated by the server, and will be ignored when sending a request.
2897
2898    :ivar value: List of table services returned.
2899    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.TableServiceProperties]
2900    """
2901
2902    _validation = {
2903        'value': {'readonly': True},
2904    }
2905
2906    _attribute_map = {
2907        'value': {'key': 'value', 'type': '[TableServiceProperties]'},
2908    }
2909
2910    def __init__(
2911        self,
2912        **kwargs
2913    ):
2914        super(ListTableServices, self).__init__(**kwargs)
2915        self.value = None
2916
2917
2918class ManagementPolicy(Resource):
2919    """The Get Storage Account ManagementPolicies operation response.
2920
2921    Variables are only populated by the server, and will be ignored when sending a request.
2922
2923    :ivar id: Fully qualified resource ID for the resource. Ex -
2924     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
2925    :vartype id: str
2926    :ivar name: The name of the resource.
2927    :vartype name: str
2928    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
2929     "Microsoft.Storage/storageAccounts".
2930    :vartype type: str
2931    :ivar last_modified_time: Returns the date and time the ManagementPolicies was last modified.
2932    :vartype last_modified_time: ~datetime.datetime
2933    :param policy: The Storage Account ManagementPolicy, in JSON format. See more details in:
2934     https://docs.microsoft.com/en-us/azure/storage/common/storage-lifecycle-managment-concepts.
2935    :type policy: ~azure.mgmt.storage.v2020_08_01_preview.models.ManagementPolicySchema
2936    """
2937
2938    _validation = {
2939        'id': {'readonly': True},
2940        'name': {'readonly': True},
2941        'type': {'readonly': True},
2942        'last_modified_time': {'readonly': True},
2943    }
2944
2945    _attribute_map = {
2946        'id': {'key': 'id', 'type': 'str'},
2947        'name': {'key': 'name', 'type': 'str'},
2948        'type': {'key': 'type', 'type': 'str'},
2949        'last_modified_time': {'key': 'properties.lastModifiedTime', 'type': 'iso-8601'},
2950        'policy': {'key': 'properties.policy', 'type': 'ManagementPolicySchema'},
2951    }
2952
2953    def __init__(
2954        self,
2955        *,
2956        policy: Optional["ManagementPolicySchema"] = None,
2957        **kwargs
2958    ):
2959        super(ManagementPolicy, self).__init__(**kwargs)
2960        self.last_modified_time = None
2961        self.policy = policy
2962
2963
2964class ManagementPolicyAction(msrest.serialization.Model):
2965    """Actions are applied to the filtered blobs when the execution condition is met.
2966
2967    :param base_blob: The management policy action for base blob.
2968    :type base_blob: ~azure.mgmt.storage.v2020_08_01_preview.models.ManagementPolicyBaseBlob
2969    :param snapshot: The management policy action for snapshot.
2970    :type snapshot: ~azure.mgmt.storage.v2020_08_01_preview.models.ManagementPolicySnapShot
2971    :param version: The management policy action for version.
2972    :type version: ~azure.mgmt.storage.v2020_08_01_preview.models.ManagementPolicyVersion
2973    """
2974
2975    _attribute_map = {
2976        'base_blob': {'key': 'baseBlob', 'type': 'ManagementPolicyBaseBlob'},
2977        'snapshot': {'key': 'snapshot', 'type': 'ManagementPolicySnapShot'},
2978        'version': {'key': 'version', 'type': 'ManagementPolicyVersion'},
2979    }
2980
2981    def __init__(
2982        self,
2983        *,
2984        base_blob: Optional["ManagementPolicyBaseBlob"] = None,
2985        snapshot: Optional["ManagementPolicySnapShot"] = None,
2986        version: Optional["ManagementPolicyVersion"] = None,
2987        **kwargs
2988    ):
2989        super(ManagementPolicyAction, self).__init__(**kwargs)
2990        self.base_blob = base_blob
2991        self.snapshot = snapshot
2992        self.version = version
2993
2994
2995class ManagementPolicyBaseBlob(msrest.serialization.Model):
2996    """Management policy action for base blob.
2997
2998    :param tier_to_cool: The function to tier blobs to cool storage. Support blobs currently at Hot
2999     tier.
3000    :type tier_to_cool: ~azure.mgmt.storage.v2020_08_01_preview.models.DateAfterModification
3001    :param tier_to_archive: The function to tier blobs to archive storage. Support blobs currently
3002     at Hot or Cool tier.
3003    :type tier_to_archive: ~azure.mgmt.storage.v2020_08_01_preview.models.DateAfterModification
3004    :param delete: The function to delete the blob.
3005    :type delete: ~azure.mgmt.storage.v2020_08_01_preview.models.DateAfterModification
3006    :param enable_auto_tier_to_hot_from_cool: This property enables auto tiering of a blob from
3007     cool to hot on a blob access. This property requires
3008     tierToCool.daysAfterLastAccessTimeGreaterThan.
3009    :type enable_auto_tier_to_hot_from_cool: bool
3010    """
3011
3012    _attribute_map = {
3013        'tier_to_cool': {'key': 'tierToCool', 'type': 'DateAfterModification'},
3014        'tier_to_archive': {'key': 'tierToArchive', 'type': 'DateAfterModification'},
3015        'delete': {'key': 'delete', 'type': 'DateAfterModification'},
3016        'enable_auto_tier_to_hot_from_cool': {'key': 'enableAutoTierToHotFromCool', 'type': 'bool'},
3017    }
3018
3019    def __init__(
3020        self,
3021        *,
3022        tier_to_cool: Optional["DateAfterModification"] = None,
3023        tier_to_archive: Optional["DateAfterModification"] = None,
3024        delete: Optional["DateAfterModification"] = None,
3025        enable_auto_tier_to_hot_from_cool: Optional[bool] = None,
3026        **kwargs
3027    ):
3028        super(ManagementPolicyBaseBlob, self).__init__(**kwargs)
3029        self.tier_to_cool = tier_to_cool
3030        self.tier_to_archive = tier_to_archive
3031        self.delete = delete
3032        self.enable_auto_tier_to_hot_from_cool = enable_auto_tier_to_hot_from_cool
3033
3034
3035class ManagementPolicyDefinition(msrest.serialization.Model):
3036    """An object that defines the Lifecycle rule. Each definition is made up with a filters set and an actions set.
3037
3038    All required parameters must be populated in order to send to Azure.
3039
3040    :param actions: Required. An object that defines the action set.
3041    :type actions: ~azure.mgmt.storage.v2020_08_01_preview.models.ManagementPolicyAction
3042    :param filters: An object that defines the filter set.
3043    :type filters: ~azure.mgmt.storage.v2020_08_01_preview.models.ManagementPolicyFilter
3044    """
3045
3046    _validation = {
3047        'actions': {'required': True},
3048    }
3049
3050    _attribute_map = {
3051        'actions': {'key': 'actions', 'type': 'ManagementPolicyAction'},
3052        'filters': {'key': 'filters', 'type': 'ManagementPolicyFilter'},
3053    }
3054
3055    def __init__(
3056        self,
3057        *,
3058        actions: "ManagementPolicyAction",
3059        filters: Optional["ManagementPolicyFilter"] = None,
3060        **kwargs
3061    ):
3062        super(ManagementPolicyDefinition, self).__init__(**kwargs)
3063        self.actions = actions
3064        self.filters = filters
3065
3066
3067class ManagementPolicyFilter(msrest.serialization.Model):
3068    """Filters limit rule actions to a subset of blobs within the storage account. If multiple filters are defined, a logical AND is performed on all filters.
3069
3070    All required parameters must be populated in order to send to Azure.
3071
3072    :param prefix_match: An array of strings for prefixes to be match.
3073    :type prefix_match: list[str]
3074    :param blob_types: Required. An array of predefined enum values. Currently blockBlob supports
3075     all tiering and delete actions. Only delete actions are supported for appendBlob.
3076    :type blob_types: list[str]
3077    :param blob_index_match: An array of blob index tag based filters, there can be at most 10 tag
3078     filters.
3079    :type blob_index_match: list[~azure.mgmt.storage.v2020_08_01_preview.models.TagFilter]
3080    """
3081
3082    _validation = {
3083        'blob_types': {'required': True},
3084    }
3085
3086    _attribute_map = {
3087        'prefix_match': {'key': 'prefixMatch', 'type': '[str]'},
3088        'blob_types': {'key': 'blobTypes', 'type': '[str]'},
3089        'blob_index_match': {'key': 'blobIndexMatch', 'type': '[TagFilter]'},
3090    }
3091
3092    def __init__(
3093        self,
3094        *,
3095        blob_types: List[str],
3096        prefix_match: Optional[List[str]] = None,
3097        blob_index_match: Optional[List["TagFilter"]] = None,
3098        **kwargs
3099    ):
3100        super(ManagementPolicyFilter, self).__init__(**kwargs)
3101        self.prefix_match = prefix_match
3102        self.blob_types = blob_types
3103        self.blob_index_match = blob_index_match
3104
3105
3106class ManagementPolicyRule(msrest.serialization.Model):
3107    """An object that wraps the Lifecycle rule. Each rule is uniquely defined by name.
3108
3109    All required parameters must be populated in order to send to Azure.
3110
3111    :param enabled: Rule is enabled if set to true.
3112    :type enabled: bool
3113    :param name: Required. A rule name can contain any combination of alpha numeric characters.
3114     Rule name is case-sensitive. It must be unique within a policy.
3115    :type name: str
3116    :param type: Required. The valid value is Lifecycle. Possible values include: "Lifecycle".
3117    :type type: str or ~azure.mgmt.storage.v2020_08_01_preview.models.RuleType
3118    :param definition: Required. An object that defines the Lifecycle rule.
3119    :type definition: ~azure.mgmt.storage.v2020_08_01_preview.models.ManagementPolicyDefinition
3120    """
3121
3122    _validation = {
3123        'name': {'required': True},
3124        'type': {'required': True},
3125        'definition': {'required': True},
3126    }
3127
3128    _attribute_map = {
3129        'enabled': {'key': 'enabled', 'type': 'bool'},
3130        'name': {'key': 'name', 'type': 'str'},
3131        'type': {'key': 'type', 'type': 'str'},
3132        'definition': {'key': 'definition', 'type': 'ManagementPolicyDefinition'},
3133    }
3134
3135    def __init__(
3136        self,
3137        *,
3138        name: str,
3139        type: Union[str, "RuleType"],
3140        definition: "ManagementPolicyDefinition",
3141        enabled: Optional[bool] = None,
3142        **kwargs
3143    ):
3144        super(ManagementPolicyRule, self).__init__(**kwargs)
3145        self.enabled = enabled
3146        self.name = name
3147        self.type = type
3148        self.definition = definition
3149
3150
3151class ManagementPolicySchema(msrest.serialization.Model):
3152    """The Storage Account ManagementPolicies Rules. See more details in: https://docs.microsoft.com/en-us/azure/storage/common/storage-lifecycle-managment-concepts.
3153
3154    All required parameters must be populated in order to send to Azure.
3155
3156    :param rules: Required. The Storage Account ManagementPolicies Rules. See more details in:
3157     https://docs.microsoft.com/en-us/azure/storage/common/storage-lifecycle-managment-concepts.
3158    :type rules: list[~azure.mgmt.storage.v2020_08_01_preview.models.ManagementPolicyRule]
3159    """
3160
3161    _validation = {
3162        'rules': {'required': True},
3163    }
3164
3165    _attribute_map = {
3166        'rules': {'key': 'rules', 'type': '[ManagementPolicyRule]'},
3167    }
3168
3169    def __init__(
3170        self,
3171        *,
3172        rules: List["ManagementPolicyRule"],
3173        **kwargs
3174    ):
3175        super(ManagementPolicySchema, self).__init__(**kwargs)
3176        self.rules = rules
3177
3178
3179class ManagementPolicySnapShot(msrest.serialization.Model):
3180    """Management policy action for snapshot.
3181
3182    :param tier_to_cool: The function to tier blob snapshot to cool storage. Support blob snapshot
3183     currently at Hot tier.
3184    :type tier_to_cool: ~azure.mgmt.storage.v2020_08_01_preview.models.DateAfterCreation
3185    :param tier_to_archive: The function to tier blob snapshot to archive storage. Support blob
3186     snapshot currently at Hot or Cool tier.
3187    :type tier_to_archive: ~azure.mgmt.storage.v2020_08_01_preview.models.DateAfterCreation
3188    :param delete: The function to delete the blob snapshot.
3189    :type delete: ~azure.mgmt.storage.v2020_08_01_preview.models.DateAfterCreation
3190    """
3191
3192    _attribute_map = {
3193        'tier_to_cool': {'key': 'tierToCool', 'type': 'DateAfterCreation'},
3194        'tier_to_archive': {'key': 'tierToArchive', 'type': 'DateAfterCreation'},
3195        'delete': {'key': 'delete', 'type': 'DateAfterCreation'},
3196    }
3197
3198    def __init__(
3199        self,
3200        *,
3201        tier_to_cool: Optional["DateAfterCreation"] = None,
3202        tier_to_archive: Optional["DateAfterCreation"] = None,
3203        delete: Optional["DateAfterCreation"] = None,
3204        **kwargs
3205    ):
3206        super(ManagementPolicySnapShot, self).__init__(**kwargs)
3207        self.tier_to_cool = tier_to_cool
3208        self.tier_to_archive = tier_to_archive
3209        self.delete = delete
3210
3211
3212class ManagementPolicyVersion(msrest.serialization.Model):
3213    """Management policy action for blob version.
3214
3215    :param tier_to_cool: The function to tier blob version to cool storage. Support blob version
3216     currently at Hot tier.
3217    :type tier_to_cool: ~azure.mgmt.storage.v2020_08_01_preview.models.DateAfterCreation
3218    :param tier_to_archive: The function to tier blob version to archive storage. Support blob
3219     version currently at Hot or Cool tier.
3220    :type tier_to_archive: ~azure.mgmt.storage.v2020_08_01_preview.models.DateAfterCreation
3221    :param delete: The function to delete the blob version.
3222    :type delete: ~azure.mgmt.storage.v2020_08_01_preview.models.DateAfterCreation
3223    """
3224
3225    _attribute_map = {
3226        'tier_to_cool': {'key': 'tierToCool', 'type': 'DateAfterCreation'},
3227        'tier_to_archive': {'key': 'tierToArchive', 'type': 'DateAfterCreation'},
3228        'delete': {'key': 'delete', 'type': 'DateAfterCreation'},
3229    }
3230
3231    def __init__(
3232        self,
3233        *,
3234        tier_to_cool: Optional["DateAfterCreation"] = None,
3235        tier_to_archive: Optional["DateAfterCreation"] = None,
3236        delete: Optional["DateAfterCreation"] = None,
3237        **kwargs
3238    ):
3239        super(ManagementPolicyVersion, self).__init__(**kwargs)
3240        self.tier_to_cool = tier_to_cool
3241        self.tier_to_archive = tier_to_archive
3242        self.delete = delete
3243
3244
3245class MetricSpecification(msrest.serialization.Model):
3246    """Metric specification of operation.
3247
3248    :param name: Name of metric specification.
3249    :type name: str
3250    :param display_name: Display name of metric specification.
3251    :type display_name: str
3252    :param display_description: Display description of metric specification.
3253    :type display_description: str
3254    :param unit: Unit could be Bytes or Count.
3255    :type unit: str
3256    :param dimensions: Dimensions of blobs, including blob type and access tier.
3257    :type dimensions: list[~azure.mgmt.storage.v2020_08_01_preview.models.Dimension]
3258    :param aggregation_type: Aggregation type could be Average.
3259    :type aggregation_type: str
3260    :param fill_gap_with_zero: The property to decide fill gap with zero or not.
3261    :type fill_gap_with_zero: bool
3262    :param category: The category this metric specification belong to, could be Capacity.
3263    :type category: str
3264    :param resource_id_dimension_name_override: Account Resource Id.
3265    :type resource_id_dimension_name_override: str
3266    """
3267
3268    _attribute_map = {
3269        'name': {'key': 'name', 'type': 'str'},
3270        'display_name': {'key': 'displayName', 'type': 'str'},
3271        'display_description': {'key': 'displayDescription', 'type': 'str'},
3272        'unit': {'key': 'unit', 'type': 'str'},
3273        'dimensions': {'key': 'dimensions', 'type': '[Dimension]'},
3274        'aggregation_type': {'key': 'aggregationType', 'type': 'str'},
3275        'fill_gap_with_zero': {'key': 'fillGapWithZero', 'type': 'bool'},
3276        'category': {'key': 'category', 'type': 'str'},
3277        'resource_id_dimension_name_override': {'key': 'resourceIdDimensionNameOverride', 'type': 'str'},
3278    }
3279
3280    def __init__(
3281        self,
3282        *,
3283        name: Optional[str] = None,
3284        display_name: Optional[str] = None,
3285        display_description: Optional[str] = None,
3286        unit: Optional[str] = None,
3287        dimensions: Optional[List["Dimension"]] = None,
3288        aggregation_type: Optional[str] = None,
3289        fill_gap_with_zero: Optional[bool] = None,
3290        category: Optional[str] = None,
3291        resource_id_dimension_name_override: Optional[str] = None,
3292        **kwargs
3293    ):
3294        super(MetricSpecification, self).__init__(**kwargs)
3295        self.name = name
3296        self.display_name = display_name
3297        self.display_description = display_description
3298        self.unit = unit
3299        self.dimensions = dimensions
3300        self.aggregation_type = aggregation_type
3301        self.fill_gap_with_zero = fill_gap_with_zero
3302        self.category = category
3303        self.resource_id_dimension_name_override = resource_id_dimension_name_override
3304
3305
3306class Multichannel(msrest.serialization.Model):
3307    """Multichannel setting. Applies to Premium FileStorage only.
3308
3309    :param enabled: Indicates whether multichannel is enabled.
3310    :type enabled: bool
3311    """
3312
3313    _attribute_map = {
3314        'enabled': {'key': 'enabled', 'type': 'bool'},
3315    }
3316
3317    def __init__(
3318        self,
3319        *,
3320        enabled: Optional[bool] = None,
3321        **kwargs
3322    ):
3323        super(Multichannel, self).__init__(**kwargs)
3324        self.enabled = enabled
3325
3326
3327class NetworkRuleSet(msrest.serialization.Model):
3328    """Network rule set.
3329
3330    All required parameters must be populated in order to send to Azure.
3331
3332    :param bypass: Specifies whether traffic is bypassed for Logging/Metrics/AzureServices.
3333     Possible values are any combination of Logging|Metrics|AzureServices (For example, "Logging,
3334     Metrics"), or None to bypass none of those traffics. Possible values include: "None",
3335     "Logging", "Metrics", "AzureServices". Default value: "AzureServices".
3336    :type bypass: str or ~azure.mgmt.storage.v2020_08_01_preview.models.Bypass
3337    :param resource_access_rules:
3338    :type resource_access_rules:
3339     list[~azure.mgmt.storage.v2020_08_01_preview.models.ResourceAccessRule]
3340    :param virtual_network_rules: Sets the virtual network rules.
3341    :type virtual_network_rules:
3342     list[~azure.mgmt.storage.v2020_08_01_preview.models.VirtualNetworkRule]
3343    :param ip_rules: Sets the IP ACL rules.
3344    :type ip_rules: list[~azure.mgmt.storage.v2020_08_01_preview.models.IPRule]
3345    :param default_action: Required. Specifies the default action of allow or deny when no other
3346     rules match. Possible values include: "Allow", "Deny". Default value: "Allow".
3347    :type default_action: str or ~azure.mgmt.storage.v2020_08_01_preview.models.DefaultAction
3348    """
3349
3350    _validation = {
3351        'default_action': {'required': True},
3352    }
3353
3354    _attribute_map = {
3355        'bypass': {'key': 'bypass', 'type': 'str'},
3356        'resource_access_rules': {'key': 'resourceAccessRules', 'type': '[ResourceAccessRule]'},
3357        'virtual_network_rules': {'key': 'virtualNetworkRules', 'type': '[VirtualNetworkRule]'},
3358        'ip_rules': {'key': 'ipRules', 'type': '[IPRule]'},
3359        'default_action': {'key': 'defaultAction', 'type': 'str'},
3360    }
3361
3362    def __init__(
3363        self,
3364        *,
3365        default_action: Union[str, "DefaultAction"] = "Allow",
3366        bypass: Optional[Union[str, "Bypass"]] = "AzureServices",
3367        resource_access_rules: Optional[List["ResourceAccessRule"]] = None,
3368        virtual_network_rules: Optional[List["VirtualNetworkRule"]] = None,
3369        ip_rules: Optional[List["IPRule"]] = None,
3370        **kwargs
3371    ):
3372        super(NetworkRuleSet, self).__init__(**kwargs)
3373        self.bypass = bypass
3374        self.resource_access_rules = resource_access_rules
3375        self.virtual_network_rules = virtual_network_rules
3376        self.ip_rules = ip_rules
3377        self.default_action = default_action
3378
3379
3380class ObjectReplicationPolicies(msrest.serialization.Model):
3381    """List storage account object replication policies.
3382
3383    :param value: The replication policy between two storage accounts.
3384    :type value: list[~azure.mgmt.storage.v2020_08_01_preview.models.ObjectReplicationPolicy]
3385    """
3386
3387    _attribute_map = {
3388        'value': {'key': 'value', 'type': '[ObjectReplicationPolicy]'},
3389    }
3390
3391    def __init__(
3392        self,
3393        *,
3394        value: Optional[List["ObjectReplicationPolicy"]] = None,
3395        **kwargs
3396    ):
3397        super(ObjectReplicationPolicies, self).__init__(**kwargs)
3398        self.value = value
3399
3400
3401class ObjectReplicationPolicy(Resource):
3402    """The replication policy between two storage accounts. Multiple rules can be defined in one policy.
3403
3404    Variables are only populated by the server, and will be ignored when sending a request.
3405
3406    :ivar id: Fully qualified resource ID for the resource. Ex -
3407     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
3408    :vartype id: str
3409    :ivar name: The name of the resource.
3410    :vartype name: str
3411    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
3412     "Microsoft.Storage/storageAccounts".
3413    :vartype type: str
3414    :ivar policy_id: A unique id for object replication policy.
3415    :vartype policy_id: str
3416    :ivar enabled_time: Indicates when the policy is enabled on the source account.
3417    :vartype enabled_time: ~datetime.datetime
3418    :param source_account: Required. Source account name.
3419    :type source_account: str
3420    :param destination_account: Required. Destination account name.
3421    :type destination_account: str
3422    :param rules: The storage account object replication rules.
3423    :type rules: list[~azure.mgmt.storage.v2020_08_01_preview.models.ObjectReplicationPolicyRule]
3424    """
3425
3426    _validation = {
3427        'id': {'readonly': True},
3428        'name': {'readonly': True},
3429        'type': {'readonly': True},
3430        'policy_id': {'readonly': True},
3431        'enabled_time': {'readonly': True},
3432    }
3433
3434    _attribute_map = {
3435        'id': {'key': 'id', 'type': 'str'},
3436        'name': {'key': 'name', 'type': 'str'},
3437        'type': {'key': 'type', 'type': 'str'},
3438        'policy_id': {'key': 'properties.policyId', 'type': 'str'},
3439        'enabled_time': {'key': 'properties.enabledTime', 'type': 'iso-8601'},
3440        'source_account': {'key': 'properties.sourceAccount', 'type': 'str'},
3441        'destination_account': {'key': 'properties.destinationAccount', 'type': 'str'},
3442        'rules': {'key': 'properties.rules', 'type': '[ObjectReplicationPolicyRule]'},
3443    }
3444
3445    def __init__(
3446        self,
3447        *,
3448        source_account: Optional[str] = None,
3449        destination_account: Optional[str] = None,
3450        rules: Optional[List["ObjectReplicationPolicyRule"]] = None,
3451        **kwargs
3452    ):
3453        super(ObjectReplicationPolicy, self).__init__(**kwargs)
3454        self.policy_id = None
3455        self.enabled_time = None
3456        self.source_account = source_account
3457        self.destination_account = destination_account
3458        self.rules = rules
3459
3460
3461class ObjectReplicationPolicyFilter(msrest.serialization.Model):
3462    """Filters limit replication to a subset of blobs within the storage account. A logical OR is performed on values in the filter. If multiple filters are defined, a logical AND is performed on all filters.
3463
3464    :param prefix_match: Optional. Filters the results to replicate only blobs whose names begin
3465     with the specified prefix.
3466    :type prefix_match: list[str]
3467    :param min_creation_time: Blobs created after the time will be replicated to the destination.
3468     It must be in datetime format 'yyyy-MM-ddTHH:mm:ssZ'. Example: 2020-02-19T16:05:00Z.
3469    :type min_creation_time: str
3470    """
3471
3472    _attribute_map = {
3473        'prefix_match': {'key': 'prefixMatch', 'type': '[str]'},
3474        'min_creation_time': {'key': 'minCreationTime', 'type': 'str'},
3475    }
3476
3477    def __init__(
3478        self,
3479        *,
3480        prefix_match: Optional[List[str]] = None,
3481        min_creation_time: Optional[str] = None,
3482        **kwargs
3483    ):
3484        super(ObjectReplicationPolicyFilter, self).__init__(**kwargs)
3485        self.prefix_match = prefix_match
3486        self.min_creation_time = min_creation_time
3487
3488
3489class ObjectReplicationPolicyRule(msrest.serialization.Model):
3490    """The replication policy rule between two containers.
3491
3492    All required parameters must be populated in order to send to Azure.
3493
3494    :param rule_id: Rule Id is auto-generated for each new rule on destination account. It is
3495     required for put policy on source account.
3496    :type rule_id: str
3497    :param source_container: Required. Required. Source container name.
3498    :type source_container: str
3499    :param destination_container: Required. Required. Destination container name.
3500    :type destination_container: str
3501    :param filters: Optional. An object that defines the filter set.
3502    :type filters: ~azure.mgmt.storage.v2020_08_01_preview.models.ObjectReplicationPolicyFilter
3503    """
3504
3505    _validation = {
3506        'source_container': {'required': True},
3507        'destination_container': {'required': True},
3508    }
3509
3510    _attribute_map = {
3511        'rule_id': {'key': 'ruleId', 'type': 'str'},
3512        'source_container': {'key': 'sourceContainer', 'type': 'str'},
3513        'destination_container': {'key': 'destinationContainer', 'type': 'str'},
3514        'filters': {'key': 'filters', 'type': 'ObjectReplicationPolicyFilter'},
3515    }
3516
3517    def __init__(
3518        self,
3519        *,
3520        source_container: str,
3521        destination_container: str,
3522        rule_id: Optional[str] = None,
3523        filters: Optional["ObjectReplicationPolicyFilter"] = None,
3524        **kwargs
3525    ):
3526        super(ObjectReplicationPolicyRule, self).__init__(**kwargs)
3527        self.rule_id = rule_id
3528        self.source_container = source_container
3529        self.destination_container = destination_container
3530        self.filters = filters
3531
3532
3533class Operation(msrest.serialization.Model):
3534    """Storage REST API operation definition.
3535
3536    :param name: Operation name: {provider}/{resource}/{operation}.
3537    :type name: str
3538    :param display: Display metadata associated with the operation.
3539    :type display: ~azure.mgmt.storage.v2020_08_01_preview.models.OperationDisplay
3540    :param origin: The origin of operations.
3541    :type origin: str
3542    :param service_specification: One property of operation, include metric specifications.
3543    :type service_specification:
3544     ~azure.mgmt.storage.v2020_08_01_preview.models.ServiceSpecification
3545    """
3546
3547    _attribute_map = {
3548        'name': {'key': 'name', 'type': 'str'},
3549        'display': {'key': 'display', 'type': 'OperationDisplay'},
3550        'origin': {'key': 'origin', 'type': 'str'},
3551        'service_specification': {'key': 'properties.serviceSpecification', 'type': 'ServiceSpecification'},
3552    }
3553
3554    def __init__(
3555        self,
3556        *,
3557        name: Optional[str] = None,
3558        display: Optional["OperationDisplay"] = None,
3559        origin: Optional[str] = None,
3560        service_specification: Optional["ServiceSpecification"] = None,
3561        **kwargs
3562    ):
3563        super(Operation, self).__init__(**kwargs)
3564        self.name = name
3565        self.display = display
3566        self.origin = origin
3567        self.service_specification = service_specification
3568
3569
3570class OperationDisplay(msrest.serialization.Model):
3571    """Display metadata associated with the operation.
3572
3573    :param provider: Service provider: Microsoft Storage.
3574    :type provider: str
3575    :param resource: Resource on which the operation is performed etc.
3576    :type resource: str
3577    :param operation: Type of operation: get, read, delete, etc.
3578    :type operation: str
3579    :param description: Description of the operation.
3580    :type description: str
3581    """
3582
3583    _attribute_map = {
3584        'provider': {'key': 'provider', 'type': 'str'},
3585        'resource': {'key': 'resource', 'type': 'str'},
3586        'operation': {'key': 'operation', 'type': 'str'},
3587        'description': {'key': 'description', 'type': 'str'},
3588    }
3589
3590    def __init__(
3591        self,
3592        *,
3593        provider: Optional[str] = None,
3594        resource: Optional[str] = None,
3595        operation: Optional[str] = None,
3596        description: Optional[str] = None,
3597        **kwargs
3598    ):
3599        super(OperationDisplay, self).__init__(**kwargs)
3600        self.provider = provider
3601        self.resource = resource
3602        self.operation = operation
3603        self.description = description
3604
3605
3606class OperationListResult(msrest.serialization.Model):
3607    """Result of the request to list Storage operations. It contains a list of operations and a URL link to get the next set of results.
3608
3609    :param value: List of Storage operations supported by the Storage resource provider.
3610    :type value: list[~azure.mgmt.storage.v2020_08_01_preview.models.Operation]
3611    """
3612
3613    _attribute_map = {
3614        'value': {'key': 'value', 'type': '[Operation]'},
3615    }
3616
3617    def __init__(
3618        self,
3619        *,
3620        value: Optional[List["Operation"]] = None,
3621        **kwargs
3622    ):
3623        super(OperationListResult, self).__init__(**kwargs)
3624        self.value = value
3625
3626
3627class PrivateEndpoint(msrest.serialization.Model):
3628    """The Private Endpoint resource.
3629
3630    Variables are only populated by the server, and will be ignored when sending a request.
3631
3632    :ivar id: The ARM identifier for Private Endpoint.
3633    :vartype id: str
3634    """
3635
3636    _validation = {
3637        'id': {'readonly': True},
3638    }
3639
3640    _attribute_map = {
3641        'id': {'key': 'id', 'type': 'str'},
3642    }
3643
3644    def __init__(
3645        self,
3646        **kwargs
3647    ):
3648        super(PrivateEndpoint, self).__init__(**kwargs)
3649        self.id = None
3650
3651
3652class PrivateEndpointConnection(Resource):
3653    """The Private Endpoint Connection resource.
3654
3655    Variables are only populated by the server, and will be ignored when sending a request.
3656
3657    :ivar id: Fully qualified resource ID for the resource. Ex -
3658     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
3659    :vartype id: str
3660    :ivar name: The name of the resource.
3661    :vartype name: str
3662    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
3663     "Microsoft.Storage/storageAccounts".
3664    :vartype type: str
3665    :param private_endpoint: The resource of private end point.
3666    :type private_endpoint: ~azure.mgmt.storage.v2020_08_01_preview.models.PrivateEndpoint
3667    :param private_link_service_connection_state: A collection of information about the state of
3668     the connection between service consumer and provider.
3669    :type private_link_service_connection_state:
3670     ~azure.mgmt.storage.v2020_08_01_preview.models.PrivateLinkServiceConnectionState
3671    :ivar provisioning_state: The provisioning state of the private endpoint connection resource.
3672     Possible values include: "Succeeded", "Creating", "Deleting", "Failed".
3673    :vartype provisioning_state: str or
3674     ~azure.mgmt.storage.v2020_08_01_preview.models.PrivateEndpointConnectionProvisioningState
3675    """
3676
3677    _validation = {
3678        'id': {'readonly': True},
3679        'name': {'readonly': True},
3680        'type': {'readonly': True},
3681        'provisioning_state': {'readonly': True},
3682    }
3683
3684    _attribute_map = {
3685        'id': {'key': 'id', 'type': 'str'},
3686        'name': {'key': 'name', 'type': 'str'},
3687        'type': {'key': 'type', 'type': 'str'},
3688        'private_endpoint': {'key': 'properties.privateEndpoint', 'type': 'PrivateEndpoint'},
3689        'private_link_service_connection_state': {'key': 'properties.privateLinkServiceConnectionState', 'type': 'PrivateLinkServiceConnectionState'},
3690        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3691    }
3692
3693    def __init__(
3694        self,
3695        *,
3696        private_endpoint: Optional["PrivateEndpoint"] = None,
3697        private_link_service_connection_state: Optional["PrivateLinkServiceConnectionState"] = None,
3698        **kwargs
3699    ):
3700        super(PrivateEndpointConnection, self).__init__(**kwargs)
3701        self.private_endpoint = private_endpoint
3702        self.private_link_service_connection_state = private_link_service_connection_state
3703        self.provisioning_state = None
3704
3705
3706class PrivateEndpointConnectionListResult(msrest.serialization.Model):
3707    """List of private endpoint connection associated with the specified storage account.
3708
3709    :param value: Array of private endpoint connections.
3710    :type value: list[~azure.mgmt.storage.v2020_08_01_preview.models.PrivateEndpointConnection]
3711    """
3712
3713    _attribute_map = {
3714        'value': {'key': 'value', 'type': '[PrivateEndpointConnection]'},
3715    }
3716
3717    def __init__(
3718        self,
3719        *,
3720        value: Optional[List["PrivateEndpointConnection"]] = None,
3721        **kwargs
3722    ):
3723        super(PrivateEndpointConnectionListResult, self).__init__(**kwargs)
3724        self.value = value
3725
3726
3727class PrivateLinkResource(Resource):
3728    """A private link resource.
3729
3730    Variables are only populated by the server, and will be ignored when sending a request.
3731
3732    :ivar id: Fully qualified resource ID for the resource. Ex -
3733     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
3734    :vartype id: str
3735    :ivar name: The name of the resource.
3736    :vartype name: str
3737    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
3738     "Microsoft.Storage/storageAccounts".
3739    :vartype type: str
3740    :ivar group_id: The private link resource group id.
3741    :vartype group_id: str
3742    :ivar required_members: The private link resource required member names.
3743    :vartype required_members: list[str]
3744    :param required_zone_names: The private link resource Private link DNS zone name.
3745    :type required_zone_names: list[str]
3746    """
3747
3748    _validation = {
3749        'id': {'readonly': True},
3750        'name': {'readonly': True},
3751        'type': {'readonly': True},
3752        'group_id': {'readonly': True},
3753        'required_members': {'readonly': True},
3754    }
3755
3756    _attribute_map = {
3757        'id': {'key': 'id', 'type': 'str'},
3758        'name': {'key': 'name', 'type': 'str'},
3759        'type': {'key': 'type', 'type': 'str'},
3760        'group_id': {'key': 'properties.groupId', 'type': 'str'},
3761        'required_members': {'key': 'properties.requiredMembers', 'type': '[str]'},
3762        'required_zone_names': {'key': 'properties.requiredZoneNames', 'type': '[str]'},
3763    }
3764
3765    def __init__(
3766        self,
3767        *,
3768        required_zone_names: Optional[List[str]] = None,
3769        **kwargs
3770    ):
3771        super(PrivateLinkResource, self).__init__(**kwargs)
3772        self.group_id = None
3773        self.required_members = None
3774        self.required_zone_names = required_zone_names
3775
3776
3777class PrivateLinkResourceListResult(msrest.serialization.Model):
3778    """A list of private link resources.
3779
3780    :param value: Array of private link resources.
3781    :type value: list[~azure.mgmt.storage.v2020_08_01_preview.models.PrivateLinkResource]
3782    """
3783
3784    _attribute_map = {
3785        'value': {'key': 'value', 'type': '[PrivateLinkResource]'},
3786    }
3787
3788    def __init__(
3789        self,
3790        *,
3791        value: Optional[List["PrivateLinkResource"]] = None,
3792        **kwargs
3793    ):
3794        super(PrivateLinkResourceListResult, self).__init__(**kwargs)
3795        self.value = value
3796
3797
3798class PrivateLinkServiceConnectionState(msrest.serialization.Model):
3799    """A collection of information about the state of the connection between service consumer and provider.
3800
3801    :param status: Indicates whether the connection has been Approved/Rejected/Removed by the owner
3802     of the service. Possible values include: "Pending", "Approved", "Rejected".
3803    :type status: str or
3804     ~azure.mgmt.storage.v2020_08_01_preview.models.PrivateEndpointServiceConnectionStatus
3805    :param description: The reason for approval/rejection of the connection.
3806    :type description: str
3807    :param action_required: A message indicating if changes on the service provider require any
3808     updates on the consumer.
3809    :type action_required: str
3810    """
3811
3812    _attribute_map = {
3813        'status': {'key': 'status', 'type': 'str'},
3814        'description': {'key': 'description', 'type': 'str'},
3815        'action_required': {'key': 'actionRequired', 'type': 'str'},
3816    }
3817
3818    def __init__(
3819        self,
3820        *,
3821        status: Optional[Union[str, "PrivateEndpointServiceConnectionStatus"]] = None,
3822        description: Optional[str] = None,
3823        action_required: Optional[str] = None,
3824        **kwargs
3825    ):
3826        super(PrivateLinkServiceConnectionState, self).__init__(**kwargs)
3827        self.status = status
3828        self.description = description
3829        self.action_required = action_required
3830
3831
3832class ProtocolSettings(msrest.serialization.Model):
3833    """Protocol settings for file service.
3834
3835    :param smb: Setting for SMB protocol.
3836    :type smb: ~azure.mgmt.storage.v2020_08_01_preview.models.SmbSetting
3837    """
3838
3839    _attribute_map = {
3840        'smb': {'key': 'smb', 'type': 'SmbSetting'},
3841    }
3842
3843    def __init__(
3844        self,
3845        *,
3846        smb: Optional["SmbSetting"] = None,
3847        **kwargs
3848    ):
3849        super(ProtocolSettings, self).__init__(**kwargs)
3850        self.smb = smb
3851
3852
3853class QueueServiceProperties(Resource):
3854    """The properties of a storage account’s Queue service.
3855
3856    Variables are only populated by the server, and will be ignored when sending a request.
3857
3858    :ivar id: Fully qualified resource ID for the resource. Ex -
3859     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
3860    :vartype id: str
3861    :ivar name: The name of the resource.
3862    :vartype name: str
3863    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
3864     "Microsoft.Storage/storageAccounts".
3865    :vartype type: str
3866    :param cors: Specifies CORS rules for the Queue service. You can include up to five CorsRule
3867     elements in the request. If no CorsRule elements are included in the request body, all CORS
3868     rules will be deleted, and CORS will be disabled for the Queue service.
3869    :type cors: ~azure.mgmt.storage.v2020_08_01_preview.models.CorsRules
3870    """
3871
3872    _validation = {
3873        'id': {'readonly': True},
3874        'name': {'readonly': True},
3875        'type': {'readonly': True},
3876    }
3877
3878    _attribute_map = {
3879        'id': {'key': 'id', 'type': 'str'},
3880        'name': {'key': 'name', 'type': 'str'},
3881        'type': {'key': 'type', 'type': 'str'},
3882        'cors': {'key': 'properties.cors', 'type': 'CorsRules'},
3883    }
3884
3885    def __init__(
3886        self,
3887        *,
3888        cors: Optional["CorsRules"] = None,
3889        **kwargs
3890    ):
3891        super(QueueServiceProperties, self).__init__(**kwargs)
3892        self.cors = cors
3893
3894
3895class ResourceAccessRule(msrest.serialization.Model):
3896    """Resource Access Rule.
3897
3898    :param tenant_id: Tenant Id.
3899    :type tenant_id: str
3900    :param resource_id: Resource Id.
3901    :type resource_id: str
3902    """
3903
3904    _attribute_map = {
3905        'tenant_id': {'key': 'tenantId', 'type': 'str'},
3906        'resource_id': {'key': 'resourceId', 'type': 'str'},
3907    }
3908
3909    def __init__(
3910        self,
3911        *,
3912        tenant_id: Optional[str] = None,
3913        resource_id: Optional[str] = None,
3914        **kwargs
3915    ):
3916        super(ResourceAccessRule, self).__init__(**kwargs)
3917        self.tenant_id = tenant_id
3918        self.resource_id = resource_id
3919
3920
3921class RestorePolicyProperties(msrest.serialization.Model):
3922    """The blob service properties for blob restore policy.
3923
3924    Variables are only populated by the server, and will be ignored when sending a request.
3925
3926    All required parameters must be populated in order to send to Azure.
3927
3928    :param enabled: Required. Blob restore is enabled if set to true.
3929    :type enabled: bool
3930    :param days: how long this blob can be restored. It should be great than zero and less than
3931     DeleteRetentionPolicy.days.
3932    :type days: int
3933    :ivar last_enabled_time: Deprecated in favor of minRestoreTime property.
3934    :vartype last_enabled_time: ~datetime.datetime
3935    :ivar min_restore_time: Returns the minimum date and time that the restore can be started.
3936    :vartype min_restore_time: ~datetime.datetime
3937    """
3938
3939    _validation = {
3940        'enabled': {'required': True},
3941        'days': {'maximum': 365, 'minimum': 1},
3942        'last_enabled_time': {'readonly': True},
3943        'min_restore_time': {'readonly': True},
3944    }
3945
3946    _attribute_map = {
3947        'enabled': {'key': 'enabled', 'type': 'bool'},
3948        'days': {'key': 'days', 'type': 'int'},
3949        'last_enabled_time': {'key': 'lastEnabledTime', 'type': 'iso-8601'},
3950        'min_restore_time': {'key': 'minRestoreTime', 'type': 'iso-8601'},
3951    }
3952
3953    def __init__(
3954        self,
3955        *,
3956        enabled: bool,
3957        days: Optional[int] = None,
3958        **kwargs
3959    ):
3960        super(RestorePolicyProperties, self).__init__(**kwargs)
3961        self.enabled = enabled
3962        self.days = days
3963        self.last_enabled_time = None
3964        self.min_restore_time = None
3965
3966
3967class Restriction(msrest.serialization.Model):
3968    """The restriction because of which SKU cannot be used.
3969
3970    Variables are only populated by the server, and will be ignored when sending a request.
3971
3972    :ivar type: The type of restrictions. As of now only possible value for this is location.
3973    :vartype type: str
3974    :ivar values: The value of restrictions. If the restriction type is set to location. This would
3975     be different locations where the SKU is restricted.
3976    :vartype values: list[str]
3977    :param reason_code: The reason for the restriction. As of now this can be "QuotaId" or
3978     "NotAvailableForSubscription". Quota Id is set when the SKU has requiredQuotas parameter as the
3979     subscription does not belong to that quota. The "NotAvailableForSubscription" is related to
3980     capacity at DC. Possible values include: "QuotaId", "NotAvailableForSubscription".
3981    :type reason_code: str or ~azure.mgmt.storage.v2020_08_01_preview.models.ReasonCode
3982    """
3983
3984    _validation = {
3985        'type': {'readonly': True},
3986        'values': {'readonly': True},
3987    }
3988
3989    _attribute_map = {
3990        'type': {'key': 'type', 'type': 'str'},
3991        'values': {'key': 'values', 'type': '[str]'},
3992        'reason_code': {'key': 'reasonCode', 'type': 'str'},
3993    }
3994
3995    def __init__(
3996        self,
3997        *,
3998        reason_code: Optional[Union[str, "ReasonCode"]] = None,
3999        **kwargs
4000    ):
4001        super(Restriction, self).__init__(**kwargs)
4002        self.type = None
4003        self.values = None
4004        self.reason_code = reason_code
4005
4006
4007class RoutingPreference(msrest.serialization.Model):
4008    """Routing preference defines the type of network, either microsoft or internet routing to be used to deliver the user data, the default option is microsoft routing.
4009
4010    :param routing_choice: Routing Choice defines the kind of network routing opted by the user.
4011     Possible values include: "MicrosoftRouting", "InternetRouting".
4012    :type routing_choice: str or ~azure.mgmt.storage.v2020_08_01_preview.models.RoutingChoice
4013    :param publish_microsoft_endpoints: A boolean flag which indicates whether microsoft routing
4014     storage endpoints are to be published.
4015    :type publish_microsoft_endpoints: bool
4016    :param publish_internet_endpoints: A boolean flag which indicates whether internet routing
4017     storage endpoints are to be published.
4018    :type publish_internet_endpoints: bool
4019    """
4020
4021    _attribute_map = {
4022        'routing_choice': {'key': 'routingChoice', 'type': 'str'},
4023        'publish_microsoft_endpoints': {'key': 'publishMicrosoftEndpoints', 'type': 'bool'},
4024        'publish_internet_endpoints': {'key': 'publishInternetEndpoints', 'type': 'bool'},
4025    }
4026
4027    def __init__(
4028        self,
4029        *,
4030        routing_choice: Optional[Union[str, "RoutingChoice"]] = None,
4031        publish_microsoft_endpoints: Optional[bool] = None,
4032        publish_internet_endpoints: Optional[bool] = None,
4033        **kwargs
4034    ):
4035        super(RoutingPreference, self).__init__(**kwargs)
4036        self.routing_choice = routing_choice
4037        self.publish_microsoft_endpoints = publish_microsoft_endpoints
4038        self.publish_internet_endpoints = publish_internet_endpoints
4039
4040
4041class ServiceSasParameters(msrest.serialization.Model):
4042    """The parameters to list service SAS credentials of a specific resource.
4043
4044    All required parameters must be populated in order to send to Azure.
4045
4046    :param canonicalized_resource: Required. The canonical path to the signed resource.
4047    :type canonicalized_resource: str
4048    :param resource: The signed services accessible with the service SAS. Possible values include:
4049     Blob (b), Container (c), File (f), Share (s). Possible values include: "b", "c", "f", "s".
4050    :type resource: str or ~azure.mgmt.storage.v2020_08_01_preview.models.SignedResource
4051    :param permissions: The signed permissions for the service SAS. Possible values include: Read
4052     (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p). Possible
4053     values include: "r", "d", "w", "l", "a", "c", "u", "p".
4054    :type permissions: str or ~azure.mgmt.storage.v2020_08_01_preview.models.Permissions
4055    :param ip_address_or_range: An IP address or a range of IP addresses from which to accept
4056     requests.
4057    :type ip_address_or_range: str
4058    :param protocols: The protocol permitted for a request made with the account SAS. Possible
4059     values include: "https,http", "https".
4060    :type protocols: str or ~azure.mgmt.storage.v2020_08_01_preview.models.HttpProtocol
4061    :param shared_access_start_time: The time at which the SAS becomes valid.
4062    :type shared_access_start_time: ~datetime.datetime
4063    :param shared_access_expiry_time: The time at which the shared access signature becomes
4064     invalid.
4065    :type shared_access_expiry_time: ~datetime.datetime
4066    :param identifier: A unique value up to 64 characters in length that correlates to an access
4067     policy specified for the container, queue, or table.
4068    :type identifier: str
4069    :param partition_key_start: The start of partition key.
4070    :type partition_key_start: str
4071    :param partition_key_end: The end of partition key.
4072    :type partition_key_end: str
4073    :param row_key_start: The start of row key.
4074    :type row_key_start: str
4075    :param row_key_end: The end of row key.
4076    :type row_key_end: str
4077    :param key_to_sign: The key to sign the account SAS token with.
4078    :type key_to_sign: str
4079    :param cache_control: The response header override for cache control.
4080    :type cache_control: str
4081    :param content_disposition: The response header override for content disposition.
4082    :type content_disposition: str
4083    :param content_encoding: The response header override for content encoding.
4084    :type content_encoding: str
4085    :param content_language: The response header override for content language.
4086    :type content_language: str
4087    :param content_type: The response header override for content type.
4088    :type content_type: str
4089    """
4090
4091    _validation = {
4092        'canonicalized_resource': {'required': True},
4093        'identifier': {'max_length': 64, 'min_length': 0},
4094    }
4095
4096    _attribute_map = {
4097        'canonicalized_resource': {'key': 'canonicalizedResource', 'type': 'str'},
4098        'resource': {'key': 'signedResource', 'type': 'str'},
4099        'permissions': {'key': 'signedPermission', 'type': 'str'},
4100        'ip_address_or_range': {'key': 'signedIp', 'type': 'str'},
4101        'protocols': {'key': 'signedProtocol', 'type': 'str'},
4102        'shared_access_start_time': {'key': 'signedStart', 'type': 'iso-8601'},
4103        'shared_access_expiry_time': {'key': 'signedExpiry', 'type': 'iso-8601'},
4104        'identifier': {'key': 'signedIdentifier', 'type': 'str'},
4105        'partition_key_start': {'key': 'startPk', 'type': 'str'},
4106        'partition_key_end': {'key': 'endPk', 'type': 'str'},
4107        'row_key_start': {'key': 'startRk', 'type': 'str'},
4108        'row_key_end': {'key': 'endRk', 'type': 'str'},
4109        'key_to_sign': {'key': 'keyToSign', 'type': 'str'},
4110        'cache_control': {'key': 'rscc', 'type': 'str'},
4111        'content_disposition': {'key': 'rscd', 'type': 'str'},
4112        'content_encoding': {'key': 'rsce', 'type': 'str'},
4113        'content_language': {'key': 'rscl', 'type': 'str'},
4114        'content_type': {'key': 'rsct', 'type': 'str'},
4115    }
4116
4117    def __init__(
4118        self,
4119        *,
4120        canonicalized_resource: str,
4121        resource: Optional[Union[str, "SignedResource"]] = None,
4122        permissions: Optional[Union[str, "Permissions"]] = None,
4123        ip_address_or_range: Optional[str] = None,
4124        protocols: Optional[Union[str, "HttpProtocol"]] = None,
4125        shared_access_start_time: Optional[datetime.datetime] = None,
4126        shared_access_expiry_time: Optional[datetime.datetime] = None,
4127        identifier: Optional[str] = None,
4128        partition_key_start: Optional[str] = None,
4129        partition_key_end: Optional[str] = None,
4130        row_key_start: Optional[str] = None,
4131        row_key_end: Optional[str] = None,
4132        key_to_sign: Optional[str] = None,
4133        cache_control: Optional[str] = None,
4134        content_disposition: Optional[str] = None,
4135        content_encoding: Optional[str] = None,
4136        content_language: Optional[str] = None,
4137        content_type: Optional[str] = None,
4138        **kwargs
4139    ):
4140        super(ServiceSasParameters, self).__init__(**kwargs)
4141        self.canonicalized_resource = canonicalized_resource
4142        self.resource = resource
4143        self.permissions = permissions
4144        self.ip_address_or_range = ip_address_or_range
4145        self.protocols = protocols
4146        self.shared_access_start_time = shared_access_start_time
4147        self.shared_access_expiry_time = shared_access_expiry_time
4148        self.identifier = identifier
4149        self.partition_key_start = partition_key_start
4150        self.partition_key_end = partition_key_end
4151        self.row_key_start = row_key_start
4152        self.row_key_end = row_key_end
4153        self.key_to_sign = key_to_sign
4154        self.cache_control = cache_control
4155        self.content_disposition = content_disposition
4156        self.content_encoding = content_encoding
4157        self.content_language = content_language
4158        self.content_type = content_type
4159
4160
4161class ServiceSpecification(msrest.serialization.Model):
4162    """One property of operation, include metric specifications.
4163
4164    :param metric_specifications: Metric specifications of operation.
4165    :type metric_specifications:
4166     list[~azure.mgmt.storage.v2020_08_01_preview.models.MetricSpecification]
4167    """
4168
4169    _attribute_map = {
4170        'metric_specifications': {'key': 'metricSpecifications', 'type': '[MetricSpecification]'},
4171    }
4172
4173    def __init__(
4174        self,
4175        *,
4176        metric_specifications: Optional[List["MetricSpecification"]] = None,
4177        **kwargs
4178    ):
4179        super(ServiceSpecification, self).__init__(**kwargs)
4180        self.metric_specifications = metric_specifications
4181
4182
4183class Sku(msrest.serialization.Model):
4184    """The SKU of the storage account.
4185
4186    Variables are only populated by the server, and will be ignored when sending a request.
4187
4188    All required parameters must be populated in order to send to Azure.
4189
4190    :param name: Required. The SKU name. Required for account creation; optional for update. Note
4191     that in older versions, SKU name was called accountType. Possible values include:
4192     "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS",
4193     "Standard_GZRS", "Standard_RAGZRS".
4194    :type name: str or ~azure.mgmt.storage.v2020_08_01_preview.models.SkuName
4195    :ivar tier: The SKU tier. This is based on the SKU name. Possible values include: "Standard",
4196     "Premium".
4197    :vartype tier: str or ~azure.mgmt.storage.v2020_08_01_preview.models.SkuTier
4198    """
4199
4200    _validation = {
4201        'name': {'required': True},
4202        'tier': {'readonly': True},
4203    }
4204
4205    _attribute_map = {
4206        'name': {'key': 'name', 'type': 'str'},
4207        'tier': {'key': 'tier', 'type': 'str'},
4208    }
4209
4210    def __init__(
4211        self,
4212        *,
4213        name: Union[str, "SkuName"],
4214        **kwargs
4215    ):
4216        super(Sku, self).__init__(**kwargs)
4217        self.name = name
4218        self.tier = None
4219
4220
4221class SKUCapability(msrest.serialization.Model):
4222    """The capability information in the specified SKU, including file encryption, network ACLs, change notification, etc.
4223
4224    Variables are only populated by the server, and will be ignored when sending a request.
4225
4226    :ivar name: The name of capability, The capability information in the specified SKU, including
4227     file encryption, network ACLs, change notification, etc.
4228    :vartype name: str
4229    :ivar value: A string value to indicate states of given capability. Possibly 'true' or 'false'.
4230    :vartype value: str
4231    """
4232
4233    _validation = {
4234        'name': {'readonly': True},
4235        'value': {'readonly': True},
4236    }
4237
4238    _attribute_map = {
4239        'name': {'key': 'name', 'type': 'str'},
4240        'value': {'key': 'value', 'type': 'str'},
4241    }
4242
4243    def __init__(
4244        self,
4245        **kwargs
4246    ):
4247        super(SKUCapability, self).__init__(**kwargs)
4248        self.name = None
4249        self.value = None
4250
4251
4252class SkuInformation(msrest.serialization.Model):
4253    """Storage SKU and its properties.
4254
4255    Variables are only populated by the server, and will be ignored when sending a request.
4256
4257    All required parameters must be populated in order to send to Azure.
4258
4259    :param name: Required. The SKU name. Required for account creation; optional for update. Note
4260     that in older versions, SKU name was called accountType. Possible values include:
4261     "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS", "Premium_ZRS",
4262     "Standard_GZRS", "Standard_RAGZRS".
4263    :type name: str or ~azure.mgmt.storage.v2020_08_01_preview.models.SkuName
4264    :ivar tier: The SKU tier. This is based on the SKU name. Possible values include: "Standard",
4265     "Premium".
4266    :vartype tier: str or ~azure.mgmt.storage.v2020_08_01_preview.models.SkuTier
4267    :ivar resource_type: The type of the resource, usually it is 'storageAccounts'.
4268    :vartype resource_type: str
4269    :ivar kind: Indicates the type of storage account. Possible values include: "Storage",
4270     "StorageV2", "BlobStorage", "FileStorage", "BlockBlobStorage".
4271    :vartype kind: str or ~azure.mgmt.storage.v2020_08_01_preview.models.Kind
4272    :ivar locations: The set of locations that the SKU is available. This will be supported and
4273     registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.).
4274    :vartype locations: list[str]
4275    :ivar capabilities: The capability information in the specified SKU, including file encryption,
4276     network ACLs, change notification, etc.
4277    :vartype capabilities: list[~azure.mgmt.storage.v2020_08_01_preview.models.SKUCapability]
4278    :param restrictions: The restrictions because of which SKU cannot be used. This is empty if
4279     there are no restrictions.
4280    :type restrictions: list[~azure.mgmt.storage.v2020_08_01_preview.models.Restriction]
4281    """
4282
4283    _validation = {
4284        'name': {'required': True},
4285        'tier': {'readonly': True},
4286        'resource_type': {'readonly': True},
4287        'kind': {'readonly': True},
4288        'locations': {'readonly': True},
4289        'capabilities': {'readonly': True},
4290    }
4291
4292    _attribute_map = {
4293        'name': {'key': 'name', 'type': 'str'},
4294        'tier': {'key': 'tier', 'type': 'str'},
4295        'resource_type': {'key': 'resourceType', 'type': 'str'},
4296        'kind': {'key': 'kind', 'type': 'str'},
4297        'locations': {'key': 'locations', 'type': '[str]'},
4298        'capabilities': {'key': 'capabilities', 'type': '[SKUCapability]'},
4299        'restrictions': {'key': 'restrictions', 'type': '[Restriction]'},
4300    }
4301
4302    def __init__(
4303        self,
4304        *,
4305        name: Union[str, "SkuName"],
4306        restrictions: Optional[List["Restriction"]] = None,
4307        **kwargs
4308    ):
4309        super(SkuInformation, self).__init__(**kwargs)
4310        self.name = name
4311        self.tier = None
4312        self.resource_type = None
4313        self.kind = None
4314        self.locations = None
4315        self.capabilities = None
4316        self.restrictions = restrictions
4317
4318
4319class SmbSetting(msrest.serialization.Model):
4320    """Setting for SMB protocol.
4321
4322    :param multichannel: Multichannel setting. Applies to Premium FileStorage only.
4323    :type multichannel: ~azure.mgmt.storage.v2020_08_01_preview.models.Multichannel
4324    """
4325
4326    _attribute_map = {
4327        'multichannel': {'key': 'multichannel', 'type': 'Multichannel'},
4328    }
4329
4330    def __init__(
4331        self,
4332        *,
4333        multichannel: Optional["Multichannel"] = None,
4334        **kwargs
4335    ):
4336        super(SmbSetting, self).__init__(**kwargs)
4337        self.multichannel = multichannel
4338
4339
4340class TrackedResource(Resource):
4341    """The resource model definition for an Azure Resource Manager tracked top level resource which has 'tags' and a 'location'.
4342
4343    Variables are only populated by the server, and will be ignored when sending a request.
4344
4345    All required parameters must be populated in order to send to Azure.
4346
4347    :ivar id: Fully qualified resource ID for the resource. Ex -
4348     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
4349    :vartype id: str
4350    :ivar name: The name of the resource.
4351    :vartype name: str
4352    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
4353     "Microsoft.Storage/storageAccounts".
4354    :vartype type: str
4355    :param tags: A set of tags. Resource tags.
4356    :type tags: dict[str, str]
4357    :param location: Required. The geo-location where the resource lives.
4358    :type location: str
4359    """
4360
4361    _validation = {
4362        'id': {'readonly': True},
4363        'name': {'readonly': True},
4364        'type': {'readonly': True},
4365        'location': {'required': True},
4366    }
4367
4368    _attribute_map = {
4369        'id': {'key': 'id', 'type': 'str'},
4370        'name': {'key': 'name', 'type': 'str'},
4371        'type': {'key': 'type', 'type': 'str'},
4372        'tags': {'key': 'tags', 'type': '{str}'},
4373        'location': {'key': 'location', 'type': 'str'},
4374    }
4375
4376    def __init__(
4377        self,
4378        *,
4379        location: str,
4380        tags: Optional[Dict[str, str]] = None,
4381        **kwargs
4382    ):
4383        super(TrackedResource, self).__init__(**kwargs)
4384        self.tags = tags
4385        self.location = location
4386
4387
4388class StorageAccount(TrackedResource):
4389    """The storage account.
4390
4391    Variables are only populated by the server, and will be ignored when sending a request.
4392
4393    All required parameters must be populated in order to send to Azure.
4394
4395    :ivar id: Fully qualified resource ID for the resource. Ex -
4396     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
4397    :vartype id: str
4398    :ivar name: The name of the resource.
4399    :vartype name: str
4400    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
4401     "Microsoft.Storage/storageAccounts".
4402    :vartype type: str
4403    :param tags: A set of tags. Resource tags.
4404    :type tags: dict[str, str]
4405    :param location: Required. The geo-location where the resource lives.
4406    :type location: str
4407    :ivar sku: Gets the SKU.
4408    :vartype sku: ~azure.mgmt.storage.v2020_08_01_preview.models.Sku
4409    :ivar kind: Gets the Kind. Possible values include: "Storage", "StorageV2", "BlobStorage",
4410     "FileStorage", "BlockBlobStorage".
4411    :vartype kind: str or ~azure.mgmt.storage.v2020_08_01_preview.models.Kind
4412    :param identity: The identity of the resource.
4413    :type identity: ~azure.mgmt.storage.v2020_08_01_preview.models.Identity
4414    :param extended_location: The extendedLocation of the resource.
4415    :type extended_location: ~azure.mgmt.storage.v2020_08_01_preview.models.ExtendedLocation
4416    :ivar provisioning_state: Gets the status of the storage account at the time the operation was
4417     called. Possible values include: "Creating", "ResolvingDNS", "Succeeded".
4418    :vartype provisioning_state: str or
4419     ~azure.mgmt.storage.v2020_08_01_preview.models.ProvisioningState
4420    :ivar primary_endpoints: Gets the URLs that are used to perform a retrieval of a public blob,
4421     queue, or table object. Note that Standard_ZRS and Premium_LRS accounts only return the blob
4422     endpoint.
4423    :vartype primary_endpoints: ~azure.mgmt.storage.v2020_08_01_preview.models.Endpoints
4424    :ivar primary_location: Gets the location of the primary data center for the storage account.
4425    :vartype primary_location: str
4426    :ivar status_of_primary: Gets the status indicating whether the primary location of the storage
4427     account is available or unavailable. Possible values include: "available", "unavailable".
4428    :vartype status_of_primary: str or ~azure.mgmt.storage.v2020_08_01_preview.models.AccountStatus
4429    :ivar last_geo_failover_time: Gets the timestamp of the most recent instance of a failover to
4430     the secondary location. Only the most recent timestamp is retained. This element is not
4431     returned if there has never been a failover instance. Only available if the accountType is
4432     Standard_GRS or Standard_RAGRS.
4433    :vartype last_geo_failover_time: ~datetime.datetime
4434    :ivar secondary_location: Gets the location of the geo-replicated secondary for the storage
4435     account. Only available if the accountType is Standard_GRS or Standard_RAGRS.
4436    :vartype secondary_location: str
4437    :ivar status_of_secondary: Gets the status indicating whether the secondary location of the
4438     storage account is available or unavailable. Only available if the SKU name is Standard_GRS or
4439     Standard_RAGRS. Possible values include: "available", "unavailable".
4440    :vartype status_of_secondary: str or
4441     ~azure.mgmt.storage.v2020_08_01_preview.models.AccountStatus
4442    :ivar creation_time: Gets the creation date and time of the storage account in UTC.
4443    :vartype creation_time: ~datetime.datetime
4444    :ivar custom_domain: Gets the custom domain the user assigned to this storage account.
4445    :vartype custom_domain: ~azure.mgmt.storage.v2020_08_01_preview.models.CustomDomain
4446    :ivar secondary_endpoints: Gets the URLs that are used to perform a retrieval of a public blob,
4447     queue, or table object from the secondary location of the storage account. Only available if
4448     the SKU name is Standard_RAGRS.
4449    :vartype secondary_endpoints: ~azure.mgmt.storage.v2020_08_01_preview.models.Endpoints
4450    :ivar encryption: Gets the encryption settings on the account. If unspecified, the account is
4451     unencrypted.
4452    :vartype encryption: ~azure.mgmt.storage.v2020_08_01_preview.models.Encryption
4453    :ivar access_tier: Required for storage accounts where kind = BlobStorage. The access tier used
4454     for billing. Possible values include: "Hot", "Cool".
4455    :vartype access_tier: str or ~azure.mgmt.storage.v2020_08_01_preview.models.AccessTier
4456    :param azure_files_identity_based_authentication: Provides the identity based authentication
4457     settings for Azure Files.
4458    :type azure_files_identity_based_authentication:
4459     ~azure.mgmt.storage.v2020_08_01_preview.models.AzureFilesIdentityBasedAuthentication
4460    :param enable_https_traffic_only: Allows https traffic only to storage service if sets to true.
4461    :type enable_https_traffic_only: bool
4462    :ivar network_rule_set: Network rule set.
4463    :vartype network_rule_set: ~azure.mgmt.storage.v2020_08_01_preview.models.NetworkRuleSet
4464    :param is_hns_enabled: Account HierarchicalNamespace enabled if sets to true.
4465    :type is_hns_enabled: bool
4466    :ivar geo_replication_stats: Geo Replication Stats.
4467    :vartype geo_replication_stats:
4468     ~azure.mgmt.storage.v2020_08_01_preview.models.GeoReplicationStats
4469    :ivar failover_in_progress: If the failover is in progress, the value will be true, otherwise,
4470     it will be null.
4471    :vartype failover_in_progress: bool
4472    :param large_file_shares_state: Allow large file shares if sets to Enabled. It cannot be
4473     disabled once it is enabled. Possible values include: "Disabled", "Enabled".
4474    :type large_file_shares_state: str or
4475     ~azure.mgmt.storage.v2020_08_01_preview.models.LargeFileSharesState
4476    :ivar private_endpoint_connections: List of private endpoint connection associated with the
4477     specified storage account.
4478    :vartype private_endpoint_connections:
4479     list[~azure.mgmt.storage.v2020_08_01_preview.models.PrivateEndpointConnection]
4480    :param routing_preference: Maintains information about the network routing choice opted by the
4481     user for data transfer.
4482    :type routing_preference: ~azure.mgmt.storage.v2020_08_01_preview.models.RoutingPreference
4483    :ivar blob_restore_status: Blob restore status.
4484    :vartype blob_restore_status: ~azure.mgmt.storage.v2020_08_01_preview.models.BlobRestoreStatus
4485    :param allow_blob_public_access: Allow or disallow public access to all blobs or containers in
4486     the storage account. The default interpretation is true for this property.
4487    :type allow_blob_public_access: bool
4488    :param minimum_tls_version: Set the minimum TLS version to be permitted on requests to storage.
4489     The default interpretation is TLS 1.0 for this property. Possible values include: "TLS1_0",
4490     "TLS1_1", "TLS1_2".
4491    :type minimum_tls_version: str or
4492     ~azure.mgmt.storage.v2020_08_01_preview.models.MinimumTlsVersion
4493    :param allow_shared_key_access: Indicates whether the storage account permits requests to be
4494     authorized with the account access key via Shared Key. If false, then all requests, including
4495     shared access signatures, must be authorized with Azure Active Directory (Azure AD). The
4496     default value is null, which is equivalent to true.
4497    :type allow_shared_key_access: bool
4498    """
4499
4500    _validation = {
4501        'id': {'readonly': True},
4502        'name': {'readonly': True},
4503        'type': {'readonly': True},
4504        'location': {'required': True},
4505        'sku': {'readonly': True},
4506        'kind': {'readonly': True},
4507        'provisioning_state': {'readonly': True},
4508        'primary_endpoints': {'readonly': True},
4509        'primary_location': {'readonly': True},
4510        'status_of_primary': {'readonly': True},
4511        'last_geo_failover_time': {'readonly': True},
4512        'secondary_location': {'readonly': True},
4513        'status_of_secondary': {'readonly': True},
4514        'creation_time': {'readonly': True},
4515        'custom_domain': {'readonly': True},
4516        'secondary_endpoints': {'readonly': True},
4517        'encryption': {'readonly': True},
4518        'access_tier': {'readonly': True},
4519        'network_rule_set': {'readonly': True},
4520        'geo_replication_stats': {'readonly': True},
4521        'failover_in_progress': {'readonly': True},
4522        'private_endpoint_connections': {'readonly': True},
4523        'blob_restore_status': {'readonly': True},
4524    }
4525
4526    _attribute_map = {
4527        'id': {'key': 'id', 'type': 'str'},
4528        'name': {'key': 'name', 'type': 'str'},
4529        'type': {'key': 'type', 'type': 'str'},
4530        'tags': {'key': 'tags', 'type': '{str}'},
4531        'location': {'key': 'location', 'type': 'str'},
4532        'sku': {'key': 'sku', 'type': 'Sku'},
4533        'kind': {'key': 'kind', 'type': 'str'},
4534        'identity': {'key': 'identity', 'type': 'Identity'},
4535        'extended_location': {'key': 'extendedLocation', 'type': 'ExtendedLocation'},
4536        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
4537        'primary_endpoints': {'key': 'properties.primaryEndpoints', 'type': 'Endpoints'},
4538        'primary_location': {'key': 'properties.primaryLocation', 'type': 'str'},
4539        'status_of_primary': {'key': 'properties.statusOfPrimary', 'type': 'str'},
4540        'last_geo_failover_time': {'key': 'properties.lastGeoFailoverTime', 'type': 'iso-8601'},
4541        'secondary_location': {'key': 'properties.secondaryLocation', 'type': 'str'},
4542        'status_of_secondary': {'key': 'properties.statusOfSecondary', 'type': 'str'},
4543        'creation_time': {'key': 'properties.creationTime', 'type': 'iso-8601'},
4544        'custom_domain': {'key': 'properties.customDomain', 'type': 'CustomDomain'},
4545        'secondary_endpoints': {'key': 'properties.secondaryEndpoints', 'type': 'Endpoints'},
4546        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
4547        'access_tier': {'key': 'properties.accessTier', 'type': 'str'},
4548        'azure_files_identity_based_authentication': {'key': 'properties.azureFilesIdentityBasedAuthentication', 'type': 'AzureFilesIdentityBasedAuthentication'},
4549        'enable_https_traffic_only': {'key': 'properties.supportsHttpsTrafficOnly', 'type': 'bool'},
4550        'network_rule_set': {'key': 'properties.networkAcls', 'type': 'NetworkRuleSet'},
4551        'is_hns_enabled': {'key': 'properties.isHnsEnabled', 'type': 'bool'},
4552        'geo_replication_stats': {'key': 'properties.geoReplicationStats', 'type': 'GeoReplicationStats'},
4553        'failover_in_progress': {'key': 'properties.failoverInProgress', 'type': 'bool'},
4554        'large_file_shares_state': {'key': 'properties.largeFileSharesState', 'type': 'str'},
4555        'private_endpoint_connections': {'key': 'properties.privateEndpointConnections', 'type': '[PrivateEndpointConnection]'},
4556        'routing_preference': {'key': 'properties.routingPreference', 'type': 'RoutingPreference'},
4557        'blob_restore_status': {'key': 'properties.blobRestoreStatus', 'type': 'BlobRestoreStatus'},
4558        'allow_blob_public_access': {'key': 'properties.allowBlobPublicAccess', 'type': 'bool'},
4559        'minimum_tls_version': {'key': 'properties.minimumTlsVersion', 'type': 'str'},
4560        'allow_shared_key_access': {'key': 'properties.allowSharedKeyAccess', 'type': 'bool'},
4561    }
4562
4563    def __init__(
4564        self,
4565        *,
4566        location: str,
4567        tags: Optional[Dict[str, str]] = None,
4568        identity: Optional["Identity"] = None,
4569        extended_location: Optional["ExtendedLocation"] = None,
4570        azure_files_identity_based_authentication: Optional["AzureFilesIdentityBasedAuthentication"] = None,
4571        enable_https_traffic_only: Optional[bool] = None,
4572        is_hns_enabled: Optional[bool] = None,
4573        large_file_shares_state: Optional[Union[str, "LargeFileSharesState"]] = None,
4574        routing_preference: Optional["RoutingPreference"] = None,
4575        allow_blob_public_access: Optional[bool] = None,
4576        minimum_tls_version: Optional[Union[str, "MinimumTlsVersion"]] = None,
4577        allow_shared_key_access: Optional[bool] = None,
4578        **kwargs
4579    ):
4580        super(StorageAccount, self).__init__(tags=tags, location=location, **kwargs)
4581        self.sku = None
4582        self.kind = None
4583        self.identity = identity
4584        self.extended_location = extended_location
4585        self.provisioning_state = None
4586        self.primary_endpoints = None
4587        self.primary_location = None
4588        self.status_of_primary = None
4589        self.last_geo_failover_time = None
4590        self.secondary_location = None
4591        self.status_of_secondary = None
4592        self.creation_time = None
4593        self.custom_domain = None
4594        self.secondary_endpoints = None
4595        self.encryption = None
4596        self.access_tier = None
4597        self.azure_files_identity_based_authentication = azure_files_identity_based_authentication
4598        self.enable_https_traffic_only = enable_https_traffic_only
4599        self.network_rule_set = None
4600        self.is_hns_enabled = is_hns_enabled
4601        self.geo_replication_stats = None
4602        self.failover_in_progress = None
4603        self.large_file_shares_state = large_file_shares_state
4604        self.private_endpoint_connections = None
4605        self.routing_preference = routing_preference
4606        self.blob_restore_status = None
4607        self.allow_blob_public_access = allow_blob_public_access
4608        self.minimum_tls_version = minimum_tls_version
4609        self.allow_shared_key_access = allow_shared_key_access
4610
4611
4612class StorageAccountCheckNameAvailabilityParameters(msrest.serialization.Model):
4613    """The parameters used to check the availability of the storage account name.
4614
4615    Variables are only populated by the server, and will be ignored when sending a request.
4616
4617    All required parameters must be populated in order to send to Azure.
4618
4619    :param name: Required. The storage account name.
4620    :type name: str
4621    :ivar type: The type of resource, Microsoft.Storage/storageAccounts. Has constant value:
4622     "Microsoft.Storage/storageAccounts".
4623    :vartype type: str
4624    """
4625
4626    _validation = {
4627        'name': {'required': True},
4628        'type': {'required': True, 'constant': True},
4629    }
4630
4631    _attribute_map = {
4632        'name': {'key': 'name', 'type': 'str'},
4633        'type': {'key': 'type', 'type': 'str'},
4634    }
4635
4636    type = "Microsoft.Storage/storageAccounts"
4637
4638    def __init__(
4639        self,
4640        *,
4641        name: str,
4642        **kwargs
4643    ):
4644        super(StorageAccountCheckNameAvailabilityParameters, self).__init__(**kwargs)
4645        self.name = name
4646
4647
4648class StorageAccountCreateParameters(msrest.serialization.Model):
4649    """The parameters used when creating a storage account.
4650
4651    All required parameters must be populated in order to send to Azure.
4652
4653    :param sku: Required. Required. Gets or sets the SKU name.
4654    :type sku: ~azure.mgmt.storage.v2020_08_01_preview.models.Sku
4655    :param kind: Required. Required. Indicates the type of storage account. Possible values
4656     include: "Storage", "StorageV2", "BlobStorage", "FileStorage", "BlockBlobStorage".
4657    :type kind: str or ~azure.mgmt.storage.v2020_08_01_preview.models.Kind
4658    :param location: Required. Required. Gets or sets the location of the resource. This will be
4659     one of the supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia,
4660     etc.). The geo region of a resource cannot be changed once it is created, but if an identical
4661     geo region is specified on update, the request will succeed.
4662    :type location: str
4663    :param extended_location: Optional. Set the extended location of the resource. If not set, the
4664     storage account will be created in Azure main region. Otherwise it will be created in the
4665     specified extended location.
4666    :type extended_location: ~azure.mgmt.storage.v2020_08_01_preview.models.ExtendedLocation
4667    :param tags: A set of tags. Gets or sets a list of key value pairs that describe the resource.
4668     These tags can be used for viewing and grouping this resource (across resource groups). A
4669     maximum of 15 tags can be provided for a resource. Each tag must have a key with a length no
4670     greater than 128 characters and a value with a length no greater than 256 characters.
4671    :type tags: dict[str, str]
4672    :param identity: The identity of the resource.
4673    :type identity: ~azure.mgmt.storage.v2020_08_01_preview.models.Identity
4674    :param custom_domain: User domain assigned to the storage account. Name is the CNAME source.
4675     Only one custom domain is supported per storage account at this time. To clear the existing
4676     custom domain, use an empty string for the custom domain name property.
4677    :type custom_domain: ~azure.mgmt.storage.v2020_08_01_preview.models.CustomDomain
4678    :param encryption: Not applicable. Azure Storage encryption is enabled for all storage accounts
4679     and cannot be disabled.
4680    :type encryption: ~azure.mgmt.storage.v2020_08_01_preview.models.Encryption
4681    :param network_rule_set: Network rule set.
4682    :type network_rule_set: ~azure.mgmt.storage.v2020_08_01_preview.models.NetworkRuleSet
4683    :param access_tier: Required for storage accounts where kind = BlobStorage. The access tier
4684     used for billing. Possible values include: "Hot", "Cool".
4685    :type access_tier: str or ~azure.mgmt.storage.v2020_08_01_preview.models.AccessTier
4686    :param azure_files_identity_based_authentication: Provides the identity based authentication
4687     settings for Azure Files.
4688    :type azure_files_identity_based_authentication:
4689     ~azure.mgmt.storage.v2020_08_01_preview.models.AzureFilesIdentityBasedAuthentication
4690    :param enable_https_traffic_only: Allows https traffic only to storage service if sets to true.
4691     The default value is true since API version 2019-04-01.
4692    :type enable_https_traffic_only: bool
4693    :param is_hns_enabled: Account HierarchicalNamespace enabled if sets to true.
4694    :type is_hns_enabled: bool
4695    :param large_file_shares_state: Allow large file shares if sets to Enabled. It cannot be
4696     disabled once it is enabled. Possible values include: "Disabled", "Enabled".
4697    :type large_file_shares_state: str or
4698     ~azure.mgmt.storage.v2020_08_01_preview.models.LargeFileSharesState
4699    :param routing_preference: Maintains information about the network routing choice opted by the
4700     user for data transfer.
4701    :type routing_preference: ~azure.mgmt.storage.v2020_08_01_preview.models.RoutingPreference
4702    :param allow_blob_public_access: Allow or disallow public access to all blobs or containers in
4703     the storage account. The default interpretation is true for this property.
4704    :type allow_blob_public_access: bool
4705    :param minimum_tls_version: Set the minimum TLS version to be permitted on requests to storage.
4706     The default interpretation is TLS 1.0 for this property. Possible values include: "TLS1_0",
4707     "TLS1_1", "TLS1_2".
4708    :type minimum_tls_version: str or
4709     ~azure.mgmt.storage.v2020_08_01_preview.models.MinimumTlsVersion
4710    :param allow_shared_key_access: Indicates whether the storage account permits requests to be
4711     authorized with the account access key via Shared Key. If false, then all requests, including
4712     shared access signatures, must be authorized with Azure Active Directory (Azure AD). The
4713     default value is null, which is equivalent to true.
4714    :type allow_shared_key_access: bool
4715    """
4716
4717    _validation = {
4718        'sku': {'required': True},
4719        'kind': {'required': True},
4720        'location': {'required': True},
4721    }
4722
4723    _attribute_map = {
4724        'sku': {'key': 'sku', 'type': 'Sku'},
4725        'kind': {'key': 'kind', 'type': 'str'},
4726        'location': {'key': 'location', 'type': 'str'},
4727        'extended_location': {'key': 'extendedLocation', 'type': 'ExtendedLocation'},
4728        'tags': {'key': 'tags', 'type': '{str}'},
4729        'identity': {'key': 'identity', 'type': 'Identity'},
4730        'custom_domain': {'key': 'properties.customDomain', 'type': 'CustomDomain'},
4731        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
4732        'network_rule_set': {'key': 'properties.networkAcls', 'type': 'NetworkRuleSet'},
4733        'access_tier': {'key': 'properties.accessTier', 'type': 'str'},
4734        'azure_files_identity_based_authentication': {'key': 'properties.azureFilesIdentityBasedAuthentication', 'type': 'AzureFilesIdentityBasedAuthentication'},
4735        'enable_https_traffic_only': {'key': 'properties.supportsHttpsTrafficOnly', 'type': 'bool'},
4736        'is_hns_enabled': {'key': 'properties.isHnsEnabled', 'type': 'bool'},
4737        'large_file_shares_state': {'key': 'properties.largeFileSharesState', 'type': 'str'},
4738        'routing_preference': {'key': 'properties.routingPreference', 'type': 'RoutingPreference'},
4739        'allow_blob_public_access': {'key': 'properties.allowBlobPublicAccess', 'type': 'bool'},
4740        'minimum_tls_version': {'key': 'properties.minimumTlsVersion', 'type': 'str'},
4741        'allow_shared_key_access': {'key': 'properties.allowSharedKeyAccess', 'type': 'bool'},
4742    }
4743
4744    def __init__(
4745        self,
4746        *,
4747        sku: "Sku",
4748        kind: Union[str, "Kind"],
4749        location: str,
4750        extended_location: Optional["ExtendedLocation"] = None,
4751        tags: Optional[Dict[str, str]] = None,
4752        identity: Optional["Identity"] = None,
4753        custom_domain: Optional["CustomDomain"] = None,
4754        encryption: Optional["Encryption"] = None,
4755        network_rule_set: Optional["NetworkRuleSet"] = None,
4756        access_tier: Optional[Union[str, "AccessTier"]] = None,
4757        azure_files_identity_based_authentication: Optional["AzureFilesIdentityBasedAuthentication"] = None,
4758        enable_https_traffic_only: Optional[bool] = None,
4759        is_hns_enabled: Optional[bool] = None,
4760        large_file_shares_state: Optional[Union[str, "LargeFileSharesState"]] = None,
4761        routing_preference: Optional["RoutingPreference"] = None,
4762        allow_blob_public_access: Optional[bool] = None,
4763        minimum_tls_version: Optional[Union[str, "MinimumTlsVersion"]] = None,
4764        allow_shared_key_access: Optional[bool] = None,
4765        **kwargs
4766    ):
4767        super(StorageAccountCreateParameters, self).__init__(**kwargs)
4768        self.sku = sku
4769        self.kind = kind
4770        self.location = location
4771        self.extended_location = extended_location
4772        self.tags = tags
4773        self.identity = identity
4774        self.custom_domain = custom_domain
4775        self.encryption = encryption
4776        self.network_rule_set = network_rule_set
4777        self.access_tier = access_tier
4778        self.azure_files_identity_based_authentication = azure_files_identity_based_authentication
4779        self.enable_https_traffic_only = enable_https_traffic_only
4780        self.is_hns_enabled = is_hns_enabled
4781        self.large_file_shares_state = large_file_shares_state
4782        self.routing_preference = routing_preference
4783        self.allow_blob_public_access = allow_blob_public_access
4784        self.minimum_tls_version = minimum_tls_version
4785        self.allow_shared_key_access = allow_shared_key_access
4786
4787
4788class StorageAccountInternetEndpoints(msrest.serialization.Model):
4789    """The URIs that are used to perform a retrieval of a public blob, file, web or dfs object via a internet routing endpoint.
4790
4791    Variables are only populated by the server, and will be ignored when sending a request.
4792
4793    :ivar blob: Gets the blob endpoint.
4794    :vartype blob: str
4795    :ivar file: Gets the file endpoint.
4796    :vartype file: str
4797    :ivar web: Gets the web endpoint.
4798    :vartype web: str
4799    :ivar dfs: Gets the dfs endpoint.
4800    :vartype dfs: str
4801    """
4802
4803    _validation = {
4804        'blob': {'readonly': True},
4805        'file': {'readonly': True},
4806        'web': {'readonly': True},
4807        'dfs': {'readonly': True},
4808    }
4809
4810    _attribute_map = {
4811        'blob': {'key': 'blob', 'type': 'str'},
4812        'file': {'key': 'file', 'type': 'str'},
4813        'web': {'key': 'web', 'type': 'str'},
4814        'dfs': {'key': 'dfs', 'type': 'str'},
4815    }
4816
4817    def __init__(
4818        self,
4819        **kwargs
4820    ):
4821        super(StorageAccountInternetEndpoints, self).__init__(**kwargs)
4822        self.blob = None
4823        self.file = None
4824        self.web = None
4825        self.dfs = None
4826
4827
4828class StorageAccountKey(msrest.serialization.Model):
4829    """An access key for the storage account.
4830
4831    Variables are only populated by the server, and will be ignored when sending a request.
4832
4833    :ivar key_name: Name of the key.
4834    :vartype key_name: str
4835    :ivar value: Base 64-encoded value of the key.
4836    :vartype value: str
4837    :ivar permissions: Permissions for the key -- read-only or full permissions. Possible values
4838     include: "Read", "Full".
4839    :vartype permissions: str or ~azure.mgmt.storage.v2020_08_01_preview.models.KeyPermission
4840    """
4841
4842    _validation = {
4843        'key_name': {'readonly': True},
4844        'value': {'readonly': True},
4845        'permissions': {'readonly': True},
4846    }
4847
4848    _attribute_map = {
4849        'key_name': {'key': 'keyName', 'type': 'str'},
4850        'value': {'key': 'value', 'type': 'str'},
4851        'permissions': {'key': 'permissions', 'type': 'str'},
4852    }
4853
4854    def __init__(
4855        self,
4856        **kwargs
4857    ):
4858        super(StorageAccountKey, self).__init__(**kwargs)
4859        self.key_name = None
4860        self.value = None
4861        self.permissions = None
4862
4863
4864class StorageAccountListKeysResult(msrest.serialization.Model):
4865    """The response from the ListKeys operation.
4866
4867    Variables are only populated by the server, and will be ignored when sending a request.
4868
4869    :ivar keys: Gets the list of storage account keys and their properties for the specified
4870     storage account.
4871    :vartype keys: list[~azure.mgmt.storage.v2020_08_01_preview.models.StorageAccountKey]
4872    """
4873
4874    _validation = {
4875        'keys': {'readonly': True},
4876    }
4877
4878    _attribute_map = {
4879        'keys': {'key': 'keys', 'type': '[StorageAccountKey]'},
4880    }
4881
4882    def __init__(
4883        self,
4884        **kwargs
4885    ):
4886        super(StorageAccountListKeysResult, self).__init__(**kwargs)
4887        self.keys = None
4888
4889
4890class StorageAccountListResult(msrest.serialization.Model):
4891    """The response from the List Storage Accounts operation.
4892
4893    Variables are only populated by the server, and will be ignored when sending a request.
4894
4895    :ivar value: Gets the list of storage accounts and their properties.
4896    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.StorageAccount]
4897    :ivar next_link: Request URL that can be used to query next page of storage accounts. Returned
4898     when total number of requested storage accounts exceed maximum page size.
4899    :vartype next_link: str
4900    """
4901
4902    _validation = {
4903        'value': {'readonly': True},
4904        'next_link': {'readonly': True},
4905    }
4906
4907    _attribute_map = {
4908        'value': {'key': 'value', 'type': '[StorageAccount]'},
4909        'next_link': {'key': 'nextLink', 'type': 'str'},
4910    }
4911
4912    def __init__(
4913        self,
4914        **kwargs
4915    ):
4916        super(StorageAccountListResult, self).__init__(**kwargs)
4917        self.value = None
4918        self.next_link = None
4919
4920
4921class StorageAccountMicrosoftEndpoints(msrest.serialization.Model):
4922    """The URIs that are used to perform a retrieval of a public blob, queue, table, web or dfs object via a microsoft routing endpoint.
4923
4924    Variables are only populated by the server, and will be ignored when sending a request.
4925
4926    :ivar blob: Gets the blob endpoint.
4927    :vartype blob: str
4928    :ivar queue: Gets the queue endpoint.
4929    :vartype queue: str
4930    :ivar table: Gets the table endpoint.
4931    :vartype table: str
4932    :ivar file: Gets the file endpoint.
4933    :vartype file: str
4934    :ivar web: Gets the web endpoint.
4935    :vartype web: str
4936    :ivar dfs: Gets the dfs endpoint.
4937    :vartype dfs: str
4938    """
4939
4940    _validation = {
4941        'blob': {'readonly': True},
4942        'queue': {'readonly': True},
4943        'table': {'readonly': True},
4944        'file': {'readonly': True},
4945        'web': {'readonly': True},
4946        'dfs': {'readonly': True},
4947    }
4948
4949    _attribute_map = {
4950        'blob': {'key': 'blob', 'type': 'str'},
4951        'queue': {'key': 'queue', 'type': 'str'},
4952        'table': {'key': 'table', 'type': 'str'},
4953        'file': {'key': 'file', 'type': 'str'},
4954        'web': {'key': 'web', 'type': 'str'},
4955        'dfs': {'key': 'dfs', 'type': 'str'},
4956    }
4957
4958    def __init__(
4959        self,
4960        **kwargs
4961    ):
4962        super(StorageAccountMicrosoftEndpoints, self).__init__(**kwargs)
4963        self.blob = None
4964        self.queue = None
4965        self.table = None
4966        self.file = None
4967        self.web = None
4968        self.dfs = None
4969
4970
4971class StorageAccountRegenerateKeyParameters(msrest.serialization.Model):
4972    """The parameters used to regenerate the storage account key.
4973
4974    All required parameters must be populated in order to send to Azure.
4975
4976    :param key_name: Required. The name of storage keys that want to be regenerated, possible
4977     values are key1, key2, kerb1, kerb2.
4978    :type key_name: str
4979    """
4980
4981    _validation = {
4982        'key_name': {'required': True},
4983    }
4984
4985    _attribute_map = {
4986        'key_name': {'key': 'keyName', 'type': 'str'},
4987    }
4988
4989    def __init__(
4990        self,
4991        *,
4992        key_name: str,
4993        **kwargs
4994    ):
4995        super(StorageAccountRegenerateKeyParameters, self).__init__(**kwargs)
4996        self.key_name = key_name
4997
4998
4999class StorageAccountUpdateParameters(msrest.serialization.Model):
5000    """The parameters that can be provided when updating the storage account properties.
5001
5002    :param sku: Gets or sets the SKU name. Note that the SKU name cannot be updated to
5003     Standard_ZRS, Premium_LRS or Premium_ZRS, nor can accounts of those SKU names be updated to any
5004     other value.
5005    :type sku: ~azure.mgmt.storage.v2020_08_01_preview.models.Sku
5006    :param tags: A set of tags. Gets or sets a list of key value pairs that describe the resource.
5007     These tags can be used in viewing and grouping this resource (across resource groups). A
5008     maximum of 15 tags can be provided for a resource. Each tag must have a key no greater in
5009     length than 128 characters and a value no greater in length than 256 characters.
5010    :type tags: dict[str, str]
5011    :param identity: The identity of the resource.
5012    :type identity: ~azure.mgmt.storage.v2020_08_01_preview.models.Identity
5013    :param kind: Optional. Indicates the type of storage account. Currently only StorageV2 value
5014     supported by server. Possible values include: "Storage", "StorageV2", "BlobStorage",
5015     "FileStorage", "BlockBlobStorage".
5016    :type kind: str or ~azure.mgmt.storage.v2020_08_01_preview.models.Kind
5017    :param custom_domain: Custom domain assigned to the storage account by the user. Name is the
5018     CNAME source. Only one custom domain is supported per storage account at this time. To clear
5019     the existing custom domain, use an empty string for the custom domain name property.
5020    :type custom_domain: ~azure.mgmt.storage.v2020_08_01_preview.models.CustomDomain
5021    :param encryption: Provides the encryption settings on the account. The default setting is
5022     unencrypted.
5023    :type encryption: ~azure.mgmt.storage.v2020_08_01_preview.models.Encryption
5024    :param access_tier: Required for storage accounts where kind = BlobStorage. The access tier
5025     used for billing. Possible values include: "Hot", "Cool".
5026    :type access_tier: str or ~azure.mgmt.storage.v2020_08_01_preview.models.AccessTier
5027    :param azure_files_identity_based_authentication: Provides the identity based authentication
5028     settings for Azure Files.
5029    :type azure_files_identity_based_authentication:
5030     ~azure.mgmt.storage.v2020_08_01_preview.models.AzureFilesIdentityBasedAuthentication
5031    :param enable_https_traffic_only: Allows https traffic only to storage service if sets to true.
5032    :type enable_https_traffic_only: bool
5033    :param network_rule_set: Network rule set.
5034    :type network_rule_set: ~azure.mgmt.storage.v2020_08_01_preview.models.NetworkRuleSet
5035    :param large_file_shares_state: Allow large file shares if sets to Enabled. It cannot be
5036     disabled once it is enabled. Possible values include: "Disabled", "Enabled".
5037    :type large_file_shares_state: str or
5038     ~azure.mgmt.storage.v2020_08_01_preview.models.LargeFileSharesState
5039    :param routing_preference: Maintains information about the network routing choice opted by the
5040     user for data transfer.
5041    :type routing_preference: ~azure.mgmt.storage.v2020_08_01_preview.models.RoutingPreference
5042    :param allow_blob_public_access: Allow or disallow public access to all blobs or containers in
5043     the storage account. The default interpretation is true for this property.
5044    :type allow_blob_public_access: bool
5045    :param minimum_tls_version: Set the minimum TLS version to be permitted on requests to storage.
5046     The default interpretation is TLS 1.0 for this property. Possible values include: "TLS1_0",
5047     "TLS1_1", "TLS1_2".
5048    :type minimum_tls_version: str or
5049     ~azure.mgmt.storage.v2020_08_01_preview.models.MinimumTlsVersion
5050    :param allow_shared_key_access: Indicates whether the storage account permits requests to be
5051     authorized with the account access key via Shared Key. If false, then all requests, including
5052     shared access signatures, must be authorized with Azure Active Directory (Azure AD). The
5053     default value is null, which is equivalent to true.
5054    :type allow_shared_key_access: bool
5055    """
5056
5057    _attribute_map = {
5058        'sku': {'key': 'sku', 'type': 'Sku'},
5059        'tags': {'key': 'tags', 'type': '{str}'},
5060        'identity': {'key': 'identity', 'type': 'Identity'},
5061        'kind': {'key': 'kind', 'type': 'str'},
5062        'custom_domain': {'key': 'properties.customDomain', 'type': 'CustomDomain'},
5063        'encryption': {'key': 'properties.encryption', 'type': 'Encryption'},
5064        'access_tier': {'key': 'properties.accessTier', 'type': 'str'},
5065        'azure_files_identity_based_authentication': {'key': 'properties.azureFilesIdentityBasedAuthentication', 'type': 'AzureFilesIdentityBasedAuthentication'},
5066        'enable_https_traffic_only': {'key': 'properties.supportsHttpsTrafficOnly', 'type': 'bool'},
5067        'network_rule_set': {'key': 'properties.networkAcls', 'type': 'NetworkRuleSet'},
5068        'large_file_shares_state': {'key': 'properties.largeFileSharesState', 'type': 'str'},
5069        'routing_preference': {'key': 'properties.routingPreference', 'type': 'RoutingPreference'},
5070        'allow_blob_public_access': {'key': 'properties.allowBlobPublicAccess', 'type': 'bool'},
5071        'minimum_tls_version': {'key': 'properties.minimumTlsVersion', 'type': 'str'},
5072        'allow_shared_key_access': {'key': 'properties.allowSharedKeyAccess', 'type': 'bool'},
5073    }
5074
5075    def __init__(
5076        self,
5077        *,
5078        sku: Optional["Sku"] = None,
5079        tags: Optional[Dict[str, str]] = None,
5080        identity: Optional["Identity"] = None,
5081        kind: Optional[Union[str, "Kind"]] = None,
5082        custom_domain: Optional["CustomDomain"] = None,
5083        encryption: Optional["Encryption"] = None,
5084        access_tier: Optional[Union[str, "AccessTier"]] = None,
5085        azure_files_identity_based_authentication: Optional["AzureFilesIdentityBasedAuthentication"] = None,
5086        enable_https_traffic_only: Optional[bool] = None,
5087        network_rule_set: Optional["NetworkRuleSet"] = None,
5088        large_file_shares_state: Optional[Union[str, "LargeFileSharesState"]] = None,
5089        routing_preference: Optional["RoutingPreference"] = None,
5090        allow_blob_public_access: Optional[bool] = None,
5091        minimum_tls_version: Optional[Union[str, "MinimumTlsVersion"]] = None,
5092        allow_shared_key_access: Optional[bool] = None,
5093        **kwargs
5094    ):
5095        super(StorageAccountUpdateParameters, self).__init__(**kwargs)
5096        self.sku = sku
5097        self.tags = tags
5098        self.identity = identity
5099        self.kind = kind
5100        self.custom_domain = custom_domain
5101        self.encryption = encryption
5102        self.access_tier = access_tier
5103        self.azure_files_identity_based_authentication = azure_files_identity_based_authentication
5104        self.enable_https_traffic_only = enable_https_traffic_only
5105        self.network_rule_set = network_rule_set
5106        self.large_file_shares_state = large_file_shares_state
5107        self.routing_preference = routing_preference
5108        self.allow_blob_public_access = allow_blob_public_access
5109        self.minimum_tls_version = minimum_tls_version
5110        self.allow_shared_key_access = allow_shared_key_access
5111
5112
5113class StorageQueue(Resource):
5114    """StorageQueue.
5115
5116    Variables are only populated by the server, and will be ignored when sending a request.
5117
5118    :ivar id: Fully qualified resource ID for the resource. Ex -
5119     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
5120    :vartype id: str
5121    :ivar name: The name of the resource.
5122    :vartype name: str
5123    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
5124     "Microsoft.Storage/storageAccounts".
5125    :vartype type: str
5126    :param metadata: A name-value pair that represents queue metadata.
5127    :type metadata: dict[str, str]
5128    :ivar approximate_message_count: Integer indicating an approximate number of messages in the
5129     queue. This number is not lower than the actual number of messages in the queue, but could be
5130     higher.
5131    :vartype approximate_message_count: int
5132    """
5133
5134    _validation = {
5135        'id': {'readonly': True},
5136        'name': {'readonly': True},
5137        'type': {'readonly': True},
5138        'approximate_message_count': {'readonly': True},
5139    }
5140
5141    _attribute_map = {
5142        'id': {'key': 'id', 'type': 'str'},
5143        'name': {'key': 'name', 'type': 'str'},
5144        'type': {'key': 'type', 'type': 'str'},
5145        'metadata': {'key': 'properties.metadata', 'type': '{str}'},
5146        'approximate_message_count': {'key': 'properties.approximateMessageCount', 'type': 'int'},
5147    }
5148
5149    def __init__(
5150        self,
5151        *,
5152        metadata: Optional[Dict[str, str]] = None,
5153        **kwargs
5154    ):
5155        super(StorageQueue, self).__init__(**kwargs)
5156        self.metadata = metadata
5157        self.approximate_message_count = None
5158
5159
5160class StorageSkuListResult(msrest.serialization.Model):
5161    """The response from the List Storage SKUs operation.
5162
5163    Variables are only populated by the server, and will be ignored when sending a request.
5164
5165    :ivar value: Get the list result of storage SKUs and their properties.
5166    :vartype value: list[~azure.mgmt.storage.v2020_08_01_preview.models.SkuInformation]
5167    """
5168
5169    _validation = {
5170        'value': {'readonly': True},
5171    }
5172
5173    _attribute_map = {
5174        'value': {'key': 'value', 'type': '[SkuInformation]'},
5175    }
5176
5177    def __init__(
5178        self,
5179        **kwargs
5180    ):
5181        super(StorageSkuListResult, self).__init__(**kwargs)
5182        self.value = None
5183
5184
5185class SystemData(msrest.serialization.Model):
5186    """Metadata pertaining to creation and last modification of the resource.
5187
5188    :param created_by: The identity that created the resource.
5189    :type created_by: str
5190    :param created_by_type: The type of identity that created the resource. Possible values
5191     include: "User", "Application", "ManagedIdentity", "Key".
5192    :type created_by_type: str or ~azure.mgmt.storage.v2020_08_01_preview.models.CreatedByType
5193    :param created_at: The timestamp of resource creation (UTC).
5194    :type created_at: ~datetime.datetime
5195    :param last_modified_by: The identity that last modified the resource.
5196    :type last_modified_by: str
5197    :param last_modified_by_type: The type of identity that last modified the resource. Possible
5198     values include: "User", "Application", "ManagedIdentity", "Key".
5199    :type last_modified_by_type: str or
5200     ~azure.mgmt.storage.v2020_08_01_preview.models.CreatedByType
5201    :param last_modified_at: The timestamp of resource last modification (UTC).
5202    :type last_modified_at: ~datetime.datetime
5203    """
5204
5205    _attribute_map = {
5206        'created_by': {'key': 'createdBy', 'type': 'str'},
5207        'created_by_type': {'key': 'createdByType', 'type': 'str'},
5208        'created_at': {'key': 'createdAt', 'type': 'iso-8601'},
5209        'last_modified_by': {'key': 'lastModifiedBy', 'type': 'str'},
5210        'last_modified_by_type': {'key': 'lastModifiedByType', 'type': 'str'},
5211        'last_modified_at': {'key': 'lastModifiedAt', 'type': 'iso-8601'},
5212    }
5213
5214    def __init__(
5215        self,
5216        *,
5217        created_by: Optional[str] = None,
5218        created_by_type: Optional[Union[str, "CreatedByType"]] = None,
5219        created_at: Optional[datetime.datetime] = None,
5220        last_modified_by: Optional[str] = None,
5221        last_modified_by_type: Optional[Union[str, "CreatedByType"]] = None,
5222        last_modified_at: Optional[datetime.datetime] = None,
5223        **kwargs
5224    ):
5225        super(SystemData, self).__init__(**kwargs)
5226        self.created_by = created_by
5227        self.created_by_type = created_by_type
5228        self.created_at = created_at
5229        self.last_modified_by = last_modified_by
5230        self.last_modified_by_type = last_modified_by_type
5231        self.last_modified_at = last_modified_at
5232
5233
5234class Table(Resource):
5235    """Properties of the table, including Id, resource name, resource type.
5236
5237    Variables are only populated by the server, and will be ignored when sending a request.
5238
5239    :ivar id: Fully qualified resource ID for the resource. Ex -
5240     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
5241    :vartype id: str
5242    :ivar name: The name of the resource.
5243    :vartype name: str
5244    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
5245     "Microsoft.Storage/storageAccounts".
5246    :vartype type: str
5247    :ivar table_name: Table name under the specified account.
5248    :vartype table_name: str
5249    """
5250
5251    _validation = {
5252        'id': {'readonly': True},
5253        'name': {'readonly': True},
5254        'type': {'readonly': True},
5255        'table_name': {'readonly': True},
5256    }
5257
5258    _attribute_map = {
5259        'id': {'key': 'id', 'type': 'str'},
5260        'name': {'key': 'name', 'type': 'str'},
5261        'type': {'key': 'type', 'type': 'str'},
5262        'table_name': {'key': 'properties.tableName', 'type': 'str'},
5263    }
5264
5265    def __init__(
5266        self,
5267        **kwargs
5268    ):
5269        super(Table, self).__init__(**kwargs)
5270        self.table_name = None
5271
5272
5273class TableServiceProperties(Resource):
5274    """The properties of a storage account’s Table service.
5275
5276    Variables are only populated by the server, and will be ignored when sending a request.
5277
5278    :ivar id: Fully qualified resource ID for the resource. Ex -
5279     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
5280    :vartype id: str
5281    :ivar name: The name of the resource.
5282    :vartype name: str
5283    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
5284     "Microsoft.Storage/storageAccounts".
5285    :vartype type: str
5286    :param cors: Specifies CORS rules for the Table service. You can include up to five CorsRule
5287     elements in the request. If no CorsRule elements are included in the request body, all CORS
5288     rules will be deleted, and CORS will be disabled for the Table service.
5289    :type cors: ~azure.mgmt.storage.v2020_08_01_preview.models.CorsRules
5290    """
5291
5292    _validation = {
5293        'id': {'readonly': True},
5294        'name': {'readonly': True},
5295        'type': {'readonly': True},
5296    }
5297
5298    _attribute_map = {
5299        'id': {'key': 'id', 'type': 'str'},
5300        'name': {'key': 'name', 'type': 'str'},
5301        'type': {'key': 'type', 'type': 'str'},
5302        'cors': {'key': 'properties.cors', 'type': 'CorsRules'},
5303    }
5304
5305    def __init__(
5306        self,
5307        *,
5308        cors: Optional["CorsRules"] = None,
5309        **kwargs
5310    ):
5311        super(TableServiceProperties, self).__init__(**kwargs)
5312        self.cors = cors
5313
5314
5315class TagFilter(msrest.serialization.Model):
5316    """Blob index tag based filtering for blob objects.
5317
5318    All required parameters must be populated in order to send to Azure.
5319
5320    :param name: Required. This is the filter tag name, it can have 1 - 128 characters.
5321    :type name: str
5322    :param op: Required. This is the comparison operator which is used for object comparison and
5323     filtering. Only == (equality operator) is currently supported.
5324    :type op: str
5325    :param value: Required. This is the filter tag value field used for tag based filtering, it can
5326     have 0 - 256 characters.
5327    :type value: str
5328    """
5329
5330    _validation = {
5331        'name': {'required': True, 'max_length': 128, 'min_length': 1},
5332        'op': {'required': True},
5333        'value': {'required': True, 'max_length': 256, 'min_length': 0},
5334    }
5335
5336    _attribute_map = {
5337        'name': {'key': 'name', 'type': 'str'},
5338        'op': {'key': 'op', 'type': 'str'},
5339        'value': {'key': 'value', 'type': 'str'},
5340    }
5341
5342    def __init__(
5343        self,
5344        *,
5345        name: str,
5346        op: str,
5347        value: str,
5348        **kwargs
5349    ):
5350        super(TagFilter, self).__init__(**kwargs)
5351        self.name = name
5352        self.op = op
5353        self.value = value
5354
5355
5356class TagProperty(msrest.serialization.Model):
5357    """A tag of the LegalHold of a blob container.
5358
5359    Variables are only populated by the server, and will be ignored when sending a request.
5360
5361    :ivar tag: The tag value.
5362    :vartype tag: str
5363    :ivar timestamp: Returns the date and time the tag was added.
5364    :vartype timestamp: ~datetime.datetime
5365    :ivar object_identifier: Returns the Object ID of the user who added the tag.
5366    :vartype object_identifier: str
5367    :ivar tenant_id: Returns the Tenant ID that issued the token for the user who added the tag.
5368    :vartype tenant_id: str
5369    :ivar upn: Returns the User Principal Name of the user who added the tag.
5370    :vartype upn: str
5371    """
5372
5373    _validation = {
5374        'tag': {'readonly': True},
5375        'timestamp': {'readonly': True},
5376        'object_identifier': {'readonly': True},
5377        'tenant_id': {'readonly': True},
5378        'upn': {'readonly': True},
5379    }
5380
5381    _attribute_map = {
5382        'tag': {'key': 'tag', 'type': 'str'},
5383        'timestamp': {'key': 'timestamp', 'type': 'iso-8601'},
5384        'object_identifier': {'key': 'objectIdentifier', 'type': 'str'},
5385        'tenant_id': {'key': 'tenantId', 'type': 'str'},
5386        'upn': {'key': 'upn', 'type': 'str'},
5387    }
5388
5389    def __init__(
5390        self,
5391        **kwargs
5392    ):
5393        super(TagProperty, self).__init__(**kwargs)
5394        self.tag = None
5395        self.timestamp = None
5396        self.object_identifier = None
5397        self.tenant_id = None
5398        self.upn = None
5399
5400
5401class UpdateHistoryProperty(msrest.serialization.Model):
5402    """An update history of the ImmutabilityPolicy of a blob container.
5403
5404    Variables are only populated by the server, and will be ignored when sending a request.
5405
5406    :ivar update: The ImmutabilityPolicy update type of a blob container, possible values include:
5407     put, lock and extend. Possible values include: "put", "lock", "extend".
5408    :vartype update: str or
5409     ~azure.mgmt.storage.v2020_08_01_preview.models.ImmutabilityPolicyUpdateType
5410    :ivar immutability_period_since_creation_in_days: The immutability period for the blobs in the
5411     container since the policy creation, in days.
5412    :vartype immutability_period_since_creation_in_days: int
5413    :ivar timestamp: Returns the date and time the ImmutabilityPolicy was updated.
5414    :vartype timestamp: ~datetime.datetime
5415    :ivar object_identifier: Returns the Object ID of the user who updated the ImmutabilityPolicy.
5416    :vartype object_identifier: str
5417    :ivar tenant_id: Returns the Tenant ID that issued the token for the user who updated the
5418     ImmutabilityPolicy.
5419    :vartype tenant_id: str
5420    :ivar upn: Returns the User Principal Name of the user who updated the ImmutabilityPolicy.
5421    :vartype upn: str
5422    """
5423
5424    _validation = {
5425        'update': {'readonly': True},
5426        'immutability_period_since_creation_in_days': {'readonly': True},
5427        'timestamp': {'readonly': True},
5428        'object_identifier': {'readonly': True},
5429        'tenant_id': {'readonly': True},
5430        'upn': {'readonly': True},
5431    }
5432
5433    _attribute_map = {
5434        'update': {'key': 'update', 'type': 'str'},
5435        'immutability_period_since_creation_in_days': {'key': 'immutabilityPeriodSinceCreationInDays', 'type': 'int'},
5436        'timestamp': {'key': 'timestamp', 'type': 'iso-8601'},
5437        'object_identifier': {'key': 'objectIdentifier', 'type': 'str'},
5438        'tenant_id': {'key': 'tenantId', 'type': 'str'},
5439        'upn': {'key': 'upn', 'type': 'str'},
5440    }
5441
5442    def __init__(
5443        self,
5444        **kwargs
5445    ):
5446        super(UpdateHistoryProperty, self).__init__(**kwargs)
5447        self.update = None
5448        self.immutability_period_since_creation_in_days = None
5449        self.timestamp = None
5450        self.object_identifier = None
5451        self.tenant_id = None
5452        self.upn = None
5453
5454
5455class Usage(msrest.serialization.Model):
5456    """Describes Storage Resource Usage.
5457
5458    Variables are only populated by the server, and will be ignored when sending a request.
5459
5460    :ivar unit: Gets the unit of measurement. Possible values include: "Count", "Bytes", "Seconds",
5461     "Percent", "CountsPerSecond", "BytesPerSecond".
5462    :vartype unit: str or ~azure.mgmt.storage.v2020_08_01_preview.models.UsageUnit
5463    :ivar current_value: Gets the current count of the allocated resources in the subscription.
5464    :vartype current_value: int
5465    :ivar limit: Gets the maximum count of the resources that can be allocated in the subscription.
5466    :vartype limit: int
5467    :ivar name: Gets the name of the type of usage.
5468    :vartype name: ~azure.mgmt.storage.v2020_08_01_preview.models.UsageName
5469    """
5470
5471    _validation = {
5472        'unit': {'readonly': True},
5473        'current_value': {'readonly': True},
5474        'limit': {'readonly': True},
5475        'name': {'readonly': True},
5476    }
5477
5478    _attribute_map = {
5479        'unit': {'key': 'unit', 'type': 'str'},
5480        'current_value': {'key': 'currentValue', 'type': 'int'},
5481        'limit': {'key': 'limit', 'type': 'int'},
5482        'name': {'key': 'name', 'type': 'UsageName'},
5483    }
5484
5485    def __init__(
5486        self,
5487        **kwargs
5488    ):
5489        super(Usage, self).__init__(**kwargs)
5490        self.unit = None
5491        self.current_value = None
5492        self.limit = None
5493        self.name = None
5494
5495
5496class UsageListResult(msrest.serialization.Model):
5497    """The response from the List Usages operation.
5498
5499    :param value: Gets or sets the list of Storage Resource Usages.
5500    :type value: list[~azure.mgmt.storage.v2020_08_01_preview.models.Usage]
5501    """
5502
5503    _attribute_map = {
5504        'value': {'key': 'value', 'type': '[Usage]'},
5505    }
5506
5507    def __init__(
5508        self,
5509        *,
5510        value: Optional[List["Usage"]] = None,
5511        **kwargs
5512    ):
5513        super(UsageListResult, self).__init__(**kwargs)
5514        self.value = value
5515
5516
5517class UsageName(msrest.serialization.Model):
5518    """The usage names that can be used; currently limited to StorageAccount.
5519
5520    Variables are only populated by the server, and will be ignored when sending a request.
5521
5522    :ivar value: Gets a string describing the resource name.
5523    :vartype value: str
5524    :ivar localized_value: Gets a localized string describing the resource name.
5525    :vartype localized_value: str
5526    """
5527
5528    _validation = {
5529        'value': {'readonly': True},
5530        'localized_value': {'readonly': True},
5531    }
5532
5533    _attribute_map = {
5534        'value': {'key': 'value', 'type': 'str'},
5535        'localized_value': {'key': 'localizedValue', 'type': 'str'},
5536    }
5537
5538    def __init__(
5539        self,
5540        **kwargs
5541    ):
5542        super(UsageName, self).__init__(**kwargs)
5543        self.value = None
5544        self.localized_value = None
5545
5546
5547class VirtualNetworkRule(msrest.serialization.Model):
5548    """Virtual Network rule.
5549
5550    All required parameters must be populated in order to send to Azure.
5551
5552    :param virtual_network_resource_id: Required. Resource ID of a subnet, for example:
5553     /subscriptions/{subscriptionId}/resourceGroups/{groupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}.
5554    :type virtual_network_resource_id: str
5555    :param action: The action of virtual network rule. The only acceptable values to pass in are
5556     None and "Allow". The default value is None.
5557    :type action: str
5558    :param state: Gets the state of virtual network rule. Possible values include: "provisioning",
5559     "deprovisioning", "succeeded", "failed", "networkSourceDeleted".
5560    :type state: str or ~azure.mgmt.storage.v2020_08_01_preview.models.State
5561    """
5562
5563    _validation = {
5564        'virtual_network_resource_id': {'required': True},
5565    }
5566
5567    _attribute_map = {
5568        'virtual_network_resource_id': {'key': 'id', 'type': 'str'},
5569        'action': {'key': 'action', 'type': 'str'},
5570        'state': {'key': 'state', 'type': 'str'},
5571    }
5572
5573    def __init__(
5574        self,
5575        *,
5576        virtual_network_resource_id: str,
5577        action: Optional[str] = None,
5578        state: Optional[Union[str, "State"]] = None,
5579        **kwargs
5580    ):
5581        super(VirtualNetworkRule, self).__init__(**kwargs)
5582        self.virtual_network_resource_id = virtual_network_resource_id
5583        self.action = action
5584        self.state = state
5585