From ae188aae792bb86e46e738ea64e49ec9f169543c Mon Sep 17 00:00:00 2001 From: adxsdknet <39844661+adxsdknet@users.noreply.github.com> Date: Mon, 1 Apr 2019 11:14:27 -0700 Subject: [PATCH] .NET SDK Resource Provider:'Storage' (#5612) REST Spec PR 'https://github.com/Azure/azure-rest-api-specs/pull/5480' REST Spec PR Author 'huizlAzure' REST Spec PR Last commit --- .../Generated/BlobContainersOperations.cs | 278 ++++++++++++++++++ .../BlobContainersOperationsExtensions.cs | 68 +++++ .../Generated/IBlobContainersOperations.cs | 40 +++ .../Generated/Models/LeaseContainerRequest.cs | 113 +++++++ .../Models/LeaseContainerResponse.cs | 65 ++++ 5 files changed, 564 insertions(+) create mode 100644 src/SDKs/Storage/Management.Storage/Generated/Models/LeaseContainerRequest.cs create mode 100644 src/SDKs/Storage/Management.Storage/Generated/Models/LeaseContainerResponse.cs diff --git a/src/SDKs/Storage/Management.Storage/Generated/BlobContainersOperations.cs b/src/SDKs/Storage/Management.Storage/Generated/BlobContainersOperations.cs index bcbfdba0a7dd2..09afa7200b37e 100644 --- a/src/SDKs/Storage/Management.Storage/Generated/BlobContainersOperations.cs +++ b/src/SDKs/Storage/Management.Storage/Generated/BlobContainersOperations.cs @@ -3452,5 +3452,283 @@ internal BlobContainersOperations(StorageManagementClient client) return _result; } + /// + /// The Lease Container operation establishes and manages a lock on a container + /// for delete operations. The lock duration can be 15 to 60 seconds, or can be + /// infinite. + /// + /// + /// The name of the resource group within the user's subscription. The name is + /// case insensitive. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and use + /// numbers and lower-case letters only. + /// + /// + /// The name of the blob container within the specified storage account. Blob + /// container names must be between 3 and 63 characters in length and use + /// numbers, lower-case letters and dash (-) only. Every dash (-) character + /// must be immediately preceded and followed by a letter or number. + /// + /// + /// Lease Container request body. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> LeaseWithHttpMessagesAsync(string resourceGroupName, string accountName, string containerName, LeaseContainerRequest parameters = default(LeaseContainerRequest), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (resourceGroupName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (resourceGroupName.Length > 90) + { + throw new ValidationException(ValidationRules.MaxLength, "resourceGroupName", 90); + } + if (resourceGroupName.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "resourceGroupName", 1); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._\\(\\)]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._\\(\\)]+$"); + } + } + if (accountName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "accountName"); + } + if (accountName != null) + { + if (accountName.Length > 24) + { + throw new ValidationException(ValidationRules.MaxLength, "accountName", 24); + } + if (accountName.Length < 3) + { + throw new ValidationException(ValidationRules.MinLength, "accountName", 3); + } + } + if (containerName == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "containerName"); + } + if (containerName != null) + { + if (containerName.Length > 63) + { + throw new ValidationException(ValidationRules.MaxLength, "containerName", 63); + } + if (containerName.Length < 3) + { + throw new ValidationException(ValidationRules.MinLength, "containerName", 3); + } + } + if (Client.ApiVersion == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (Client.ApiVersion != null) + { + if (Client.ApiVersion.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "Client.ApiVersion", 1); + } + } + if (Client.SubscriptionId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + if (Client.SubscriptionId != null) + { + if (Client.SubscriptionId.Length < 1) + { + throw new ValidationException(ValidationRules.MinLength, "Client.SubscriptionId", 1); + } + } + if (parameters != null) + { + parameters.Validate(); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("accountName", accountName); + tracingParameters.Add("containerName", containerName); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Lease", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/blobServices/default/containers/{containerName}/lease").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{accountName}", System.Uri.EscapeDataString(accountName)); + _url = _url.Replace("{containerName}", System.Uri.EscapeDataString(containerName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Client.SubscriptionId)); + List _queryParameters = new List(); + if (Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("POST"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (Client.GenerateClientRequestId != null && Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", Client.AcceptLanguage); + } + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + if(parameters != null) + { + _requestContent = Rest.Serialization.SafeJsonConvert.SerializeObject(parameters, Client.SerializationSettings); + _httpRequest.Content = new StringContent(_requestContent, System.Text.Encoding.UTF8); + _httpRequest.Content.Headers.ContentType =System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); + } + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + CloudError _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new CloudException(_errorBody.Message); + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + } } diff --git a/src/SDKs/Storage/Management.Storage/Generated/BlobContainersOperationsExtensions.cs b/src/SDKs/Storage/Management.Storage/Generated/BlobContainersOperationsExtensions.cs index c9f2d37144894..7edfc8b65155a 100644 --- a/src/SDKs/Storage/Management.Storage/Generated/BlobContainersOperationsExtensions.cs +++ b/src/SDKs/Storage/Management.Storage/Generated/BlobContainersOperationsExtensions.cs @@ -854,5 +854,73 @@ public static ImmutabilityPolicy ExtendImmutabilityPolicy(this IBlobContainersOp } } + /// + /// The Lease Container operation establishes and manages a lock on a container + /// for delete operations. The lock duration can be 15 to 60 seconds, or can be + /// infinite. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. The name is + /// case insensitive. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and use + /// numbers and lower-case letters only. + /// + /// + /// The name of the blob container within the specified storage account. Blob + /// container names must be between 3 and 63 characters in length and use + /// numbers, lower-case letters and dash (-) only. Every dash (-) character + /// must be immediately preceded and followed by a letter or number. + /// + /// + /// Lease Container request body. + /// + public static LeaseContainerResponse Lease(this IBlobContainersOperations operations, string resourceGroupName, string accountName, string containerName, LeaseContainerRequest parameters = default(LeaseContainerRequest)) + { + return operations.LeaseAsync(resourceGroupName, accountName, containerName, parameters).GetAwaiter().GetResult(); + } + + /// + /// The Lease Container operation establishes and manages a lock on a container + /// for delete operations. The lock duration can be 15 to 60 seconds, or can be + /// infinite. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. The name is + /// case insensitive. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and use + /// numbers and lower-case letters only. + /// + /// + /// The name of the blob container within the specified storage account. Blob + /// container names must be between 3 and 63 characters in length and use + /// numbers, lower-case letters and dash (-) only. Every dash (-) character + /// must be immediately preceded and followed by a letter or number. + /// + /// + /// Lease Container request body. + /// + /// + /// The cancellation token. + /// + public static async Task LeaseAsync(this IBlobContainersOperations operations, string resourceGroupName, string accountName, string containerName, LeaseContainerRequest parameters = default(LeaseContainerRequest), CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.LeaseWithHttpMessagesAsync(resourceGroupName, accountName, containerName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + } } diff --git a/src/SDKs/Storage/Management.Storage/Generated/IBlobContainersOperations.cs b/src/SDKs/Storage/Management.Storage/Generated/IBlobContainersOperations.cs index da6a2bc8f96e1..24909e1cd1ddd 100644 --- a/src/SDKs/Storage/Management.Storage/Generated/IBlobContainersOperations.cs +++ b/src/SDKs/Storage/Management.Storage/Generated/IBlobContainersOperations.cs @@ -515,5 +515,45 @@ public partial interface IBlobContainersOperations /// Thrown when a required parameter is null /// Task> ExtendImmutabilityPolicyWithHttpMessagesAsync(string resourceGroupName, string accountName, string containerName, string ifMatch, int immutabilityPeriodSinceCreationInDays, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// The Lease Container operation establishes and manages a lock on a + /// container for delete operations. The lock duration can be 15 to 60 + /// seconds, or can be infinite. + /// + /// + /// The name of the resource group within the user's subscription. The + /// name is case insensitive. + /// + /// + /// The name of the storage account within the specified resource + /// group. Storage account names must be between 3 and 24 characters in + /// length and use numbers and lower-case letters only. + /// + /// + /// The name of the blob container within the specified storage + /// account. Blob container names must be between 3 and 63 characters + /// in length and use numbers, lower-case letters and dash (-) only. + /// Every dash (-) character must be immediately preceded and followed + /// by a letter or number. + /// + /// + /// Lease Container request body. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task> LeaseWithHttpMessagesAsync(string resourceGroupName, string accountName, string containerName, LeaseContainerRequest parameters = default(LeaseContainerRequest), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); } } diff --git a/src/SDKs/Storage/Management.Storage/Generated/Models/LeaseContainerRequest.cs b/src/SDKs/Storage/Management.Storage/Generated/Models/LeaseContainerRequest.cs new file mode 100644 index 0000000000000..3388537e82042 --- /dev/null +++ b/src/SDKs/Storage/Management.Storage/Generated/Models/LeaseContainerRequest.cs @@ -0,0 +1,113 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.Storage.Models +{ + using Microsoft.Rest; + using Newtonsoft.Json; + using System.Linq; + + /// + /// Lease Container request schema. + /// + public partial class LeaseContainerRequest + { + /// + /// Initializes a new instance of the LeaseContainerRequest class. + /// + public LeaseContainerRequest() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the LeaseContainerRequest class. + /// + /// Specifies the lease action. Can be one of the + /// available actions. Possible values include: 'Acquire', 'Renew', + /// 'Change', 'Release', 'Break' + /// Identifies the lease. Can be specified in any + /// valid GUID string format. + /// Optional. For a break action, proposed + /// duration the lease should continue before it is broken, in seconds, + /// between 0 and 60. + /// Required for acquire. Specifies the + /// duration of the lease, in seconds, or negative one (-1) for a lease + /// that never expires. + /// Optional for acquire, required for + /// change. Proposed lease ID, in a GUID string format. + public LeaseContainerRequest(string action, string leaseId = default(string), int? breakPeriod = default(int?), int? leaseDuration = default(int?), string proposedLeaseId = default(string)) + { + Action = action; + LeaseId = leaseId; + BreakPeriod = breakPeriod; + LeaseDuration = leaseDuration; + ProposedLeaseId = proposedLeaseId; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets specifies the lease action. Can be one of the + /// available actions. Possible values include: 'Acquire', 'Renew', + /// 'Change', 'Release', 'Break' + /// + [JsonProperty(PropertyName = "Action")] + public string Action { get; set; } + + /// + /// Gets or sets identifies the lease. Can be specified in any valid + /// GUID string format. + /// + [JsonProperty(PropertyName = "LeaseId")] + public string LeaseId { get; set; } + + /// + /// Gets or sets optional. For a break action, proposed duration the + /// lease should continue before it is broken, in seconds, between 0 + /// and 60. + /// + [JsonProperty(PropertyName = "BreakPeriod")] + public int? BreakPeriod { get; set; } + + /// + /// Gets or sets required for acquire. Specifies the duration of the + /// lease, in seconds, or negative one (-1) for a lease that never + /// expires. + /// + [JsonProperty(PropertyName = "LeaseDuration")] + public int? LeaseDuration { get; set; } + + /// + /// Gets or sets optional for acquire, required for change. Proposed + /// lease ID, in a GUID string format. + /// + [JsonProperty(PropertyName = "ProposedLeaseId")] + public string ProposedLeaseId { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Action == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "Action"); + } + } + } +} diff --git a/src/SDKs/Storage/Management.Storage/Generated/Models/LeaseContainerResponse.cs b/src/SDKs/Storage/Management.Storage/Generated/Models/LeaseContainerResponse.cs new file mode 100644 index 0000000000000..d27d66745d2d3 --- /dev/null +++ b/src/SDKs/Storage/Management.Storage/Generated/Models/LeaseContainerResponse.cs @@ -0,0 +1,65 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.Management.Storage.Models +{ + using Newtonsoft.Json; + using System.Linq; + + /// + /// Lease Container response schema. + /// + public partial class LeaseContainerResponse + { + /// + /// Initializes a new instance of the LeaseContainerResponse class. + /// + public LeaseContainerResponse() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the LeaseContainerResponse class. + /// + /// Returned unique lease ID that must be + /// included with any request to delete the container, or to renew, + /// change, or release the lease. + /// Approximate time remaining in the + /// lease period, in seconds. + public LeaseContainerResponse(string leaseId = default(string), string leaseTimeSeconds = default(string)) + { + LeaseId = leaseId; + LeaseTimeSeconds = leaseTimeSeconds; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets returned unique lease ID that must be included with + /// any request to delete the container, or to renew, change, or + /// release the lease. + /// + [JsonProperty(PropertyName = "LeaseId")] + public string LeaseId { get; set; } + + /// + /// Gets or sets approximate time remaining in the lease period, in + /// seconds. + /// + [JsonProperty(PropertyName = "LeaseTimeSeconds")] + public string LeaseTimeSeconds { get; set; } + + } +}