ms_rest_azure 0.10.8 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4619807ebd53301967ee5d9845dc6ad192c2ae3b
4
- data.tar.gz: ba39d3b5cbe1a768a381d5887480eeff79d05176
3
+ metadata.gz: 9d37dfda37f047cab1ca8ede97a21b4b6e948cca
4
+ data.tar.gz: be8a83887c0f8e6d1a9bb532db78af7844e1639b
5
5
  SHA512:
6
- metadata.gz: 227a68ad8c21f67cf8166b80491d6daffbfa008bea6064b0dc2e5e98e0235e5c6e60585ae6e7482a6a23babf8f7ab3a1144df99d08c28f8f9a92dc5ce4660c86
7
- data.tar.gz: e160286a220dc64118709fb10a24c369821cf8c2c896e9a5abbb0de05953dc18a9f656df99ba3883237ebff7955dde766ac41e3b0428c630ddcfb7b41f1a49e4
6
+ metadata.gz: 7a64ed4cdf61a5d096afa34373487c64a39b10f2a1d4b0a407b052a2446df05d656da0b2749202b8dbc35448269690c90ff14774527a01f4d3145028f83afdd1
7
+ data.tar.gz: 683983a519bc16e11f76f275fcab91190567bb56987ee50f9b48e8ef6e2ff78c3905297b1be82648b237ee01861145998c98fdc5f2c4db5415ae66235a160dc4
@@ -1,3 +1,7 @@
1
+ ##2018.07.31 ms_rest_azure version 0.11.0
2
+ * Added USER_DEFINED_IMDS_MAX_RETRY_TIME to msi_token_provider. Refer [PR #1539](https://github.com/Azure/azure-sdk-for-ruby/pull/1539) and [Issue #1344](https://github.com/Azure/azure-sdk-for-ruby/issues/1344) for further details.
3
+ * Modified Long Running Operation Logic to make final calls based on Final State Via value. Refer [PR #1537](https://github.com/Azure/azure-sdk-for-ruby/pull/1537) for further details.
4
+
1
5
  ##2018.06.08 ms_rest_azure version 0.10.8
2
6
  * Added case insensitive comparison to Operation status.
3
7
 
@@ -10,6 +10,7 @@ require 'ms_rest_azure/azure_operation_error.rb'
10
10
  require 'ms_rest_azure/azure_operation_response.rb'
11
11
  require 'ms_rest_azure/azure_service_client.rb'
12
12
  require 'ms_rest_azure/cloud_error_data.rb'
13
+ require 'ms_rest_azure/final_state_via.rb'
13
14
  require 'ms_rest_azure/credentials/application_token_provider.rb'
14
15
  require 'ms_rest_azure/credentials/cognitive_services_credentials.rb'
15
16
  require 'ms_rest_azure/credentials/topic_credentials.rb'
@@ -30,10 +30,11 @@ module MsRestAzure
30
30
  # Retrieves the result of 'POST','DELETE','PUT' or 'PATCH' operation. Performs polling of required.
31
31
  # @param azure_response [MsRestAzure::AzureOperationResponse] response from Azure service.
32
32
  # @param custom_deserialization_block [Proc] custom logic for response deserialization.
33
+ # @param final_state_via [MsRestAzure::FinalStateVia] Final State via value
33
34
  #
34
35
  # @return [MsRest::HttpOperationResponse] the response.
35
36
  #
36
- def get_long_running_operation_result(azure_response, custom_deserialization_block)
37
+ def get_long_running_operation_result(azure_response, custom_deserialization_block, final_state_via = FinalStateVia::DEFAULT)
37
38
  check_for_status_code_failure(azure_response)
38
39
 
39
40
  http_method = azure_response.request.method
@@ -47,13 +48,22 @@ module MsRestAzure
47
48
  if !polling_state.azure_async_operation_header_link.nil?
48
49
  update_state_from_azure_async_operation_header(polling_state.get_request(headers: request.headers, base_uri: request.base_uri, user_agent_extended: user_agent_extended), polling_state)
49
50
  elsif !polling_state.location_header_link.nil?
50
- update_state_from_location_header(polling_state.get_request(headers: request.headers, base_uri: request.base_uri, user_agent_extended: user_agent_extended), polling_state, custom_deserialization_block)
51
+ update_state_from_location_header(polling_state.get_request(headers: request.headers, base_uri: request.base_uri, user_agent_extended: user_agent_extended), polling_state, custom_deserialization_block, final_state_via)
51
52
  elsif http_method === :put
52
53
  get_request = MsRest::HttpOperationRequest.new(request.base_uri, request.build_path.to_s, :get, {query_params: request.query_params, headers: request.headers, user_agent_extended: user_agent_extended})
53
54
  update_state_from_get_resource_operation(get_request, polling_state, custom_deserialization_block)
54
55
  else
55
56
  task.shutdown
56
- fail AzureOperationError, 'Location header is missing from long running operation'
57
+ if final_state_via == FinalStateVia::LOCATION
58
+ if !polling_state.response.body.to_s.empty?
59
+ body = JSON.load(polling_state.response.body)
60
+ polling_state.resource = custom_deserialization_block.call(body)
61
+ else
62
+ fail AzureOperationError, 'Location header is missing from long running operation'
63
+ end
64
+ else
65
+ fail AzureOperationError, 'Location header is missing from long running operation'
66
+ end
57
67
  end
58
68
 
59
69
  if AsyncOperationStatus.is_terminal_status(polling_state.status)
@@ -83,6 +93,12 @@ module MsRestAzure
83
93
  update_state_from_get_resource_operation(get_request, polling_state, custom_deserialization_block)
84
94
  end
85
95
 
96
+ if final_state_via == FinalStateVia::LOCATION
97
+ if((http_method === :post || http_method === :delete) && !polling_state.location_header_link.nil?)
98
+ update_state_from_location_header(polling_state.get_request(headers: request.headers, base_uri: request.base_uri, user_agent_extended: user_agent_extended), polling_state, custom_deserialization_block, final_state_via)
99
+ end
100
+ end
101
+
86
102
  # Process long-running POST/DELETE operation with schema defined on success status codes
87
103
  if (http_method === :post || http_method === :delete) && custom_deserialization_block && polling_state.response
88
104
  unless polling_state.response.body.to_s.empty?
@@ -152,8 +168,9 @@ module MsRestAzure
152
168
  # @param request [MsRest::HttpOperationRequest] The url retrieve data from.
153
169
  # @param polling_state [MsRestAzure::PollingState] polling state to update.
154
170
  # @param custom_deserialization_block [Proc] custom deserialization method for parsing response.
171
+ # @param final_state_via [MsRestAzure::FinalStateVia] Final State via value
155
172
  #
156
- def update_state_from_location_header(request, polling_state, custom_deserialization_block)
173
+ def update_state_from_location_header(request, polling_state, custom_deserialization_block, final_state_via = FinalStateVia::DEFAULT)
157
174
  result = get_async_with_custom_deserialization(request, custom_deserialization_block)
158
175
 
159
176
  polling_state.update_response(result.response)
@@ -173,6 +190,8 @@ module MsRestAzure
173
190
 
174
191
  polling_state.error_data = error_data
175
192
  polling_state.resource = result.body
193
+ elsif final_state_via == FinalStateVia::LOCATION && status_code === 404 && http_method === :delete && !polling_state.azure_async_operation_header_link.nil? && !polling_state.location_header_link.nil?
194
+ polling_state.status = AsyncOperationStatus::SUCCESS_STATUS
176
195
  else
177
196
  fail AzureOperationError, "The response from long running operation does not have a valid status code. Method: #{http_method}, Status Code: #{status_code}"
178
197
  end
@@ -106,13 +106,15 @@ module MsRestAzure
106
106
  retry_value = 1
107
107
  max_retry = 20
108
108
  response = nil
109
+ user_defined_time_limit = ENV['USER_DEFINED_IMDS_MAX_RETRY_TIME'].nil? ? 104900:ENV['USER_DEFINED_IMDS_MAX_RETRY_TIME']
110
+ total_wait = 0
109
111
 
110
112
  slots = []
111
113
  (0..max_retry-1).each do |i|
112
114
  slots << (100 * ((2 << i) - 1) /1000.to_f)
113
115
  end
114
116
 
115
- while retry_value <= max_retry
117
+ while retry_value <= max_retry && total_wait < user_defined_time_limit
116
118
  response = connection.get do |request|
117
119
  request.headers['Metadata'] = 'true'
118
120
  request.headers['User-Agent'] = "Azure-SDK-For-Ruby/ms_rest_azure/#{MsRestAzure::VERSION}"
@@ -127,7 +129,9 @@ module MsRestAzure
127
129
  if (retry_value > max_retry)
128
130
  break
129
131
  end
132
+ wait = wait > user_defined_time_limit ? user_defined_time_limit : wait
130
133
  sleep(wait)
134
+ total_wait += wait
131
135
  elsif response.status != 200
132
136
  fail AzureOperationError, "Couldn't acquire access token from Managed Service Identity, please verify your tenant id, port and settings"
133
137
  else
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+ # Copyright (c) Microsoft Corporation. All rights reserved.
3
+ # Licensed under the MIT License. See License.txt in the project root for license information.
4
+
5
+ module MsRestAzure
6
+ #
7
+ # Class which represents a final state via of Azure long running operation.
8
+ #
9
+ class FinalStateVia
10
+ NONE = -1
11
+ DEFAULT = 0
12
+ AZURE_ASYNC_OPERATION = 0
13
+ LOCATION = 1
14
+ ORIGINAL_URI = 2
15
+ end
16
+ end
@@ -3,5 +3,5 @@
3
3
  # Licensed under the MIT License. See License.txt in the project root for license information.
4
4
 
5
5
  module MsRestAzure
6
- VERSION = '0.10.8'
6
+ VERSION = '0.11.0'
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ms_rest_azure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.8
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Microsoft Corporation
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-08 00:00:00.000000000 Z
11
+ date: 2018-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -131,6 +131,7 @@ files:
131
131
  - lib/ms_rest_azure/credentials/cognitive_services_credentials.rb
132
132
  - lib/ms_rest_azure/credentials/msi_token_provider.rb
133
133
  - lib/ms_rest_azure/credentials/topic_credentials.rb
134
+ - lib/ms_rest_azure/final_state_via.rb
134
135
  - lib/ms_rest_azure/polling_state.rb
135
136
  - lib/ms_rest_azure/serialization.rb
136
137
  - lib/ms_rest_azure/version.rb
@@ -142,7 +143,7 @@ metadata:
142
143
  changelog_uri: https://github.com/Azure/azure-sdk-for-ruby/blob/master/runtime/ms_rest_azure/CHANGELOG.md
143
144
  documentation_uri: https://azure.microsoft.com/en-us/develop/ruby/
144
145
  homepage_uri: https://aka.ms/azure-sdk-for-ruby
145
- source_code_uri: https://github.com/Azure/azure-sdk-for-ruby/tree/ms_rest_azure-v0.10.8
146
+ source_code_uri: https://github.com/Azure/azure-sdk-for-ruby/tree/ms_rest_azure-v0.11.0
146
147
  post_install_message:
147
148
  rdoc_options: []
148
149
  require_paths: