Class: Azure::BaseManagement::ManagementHttpRequest
- Inherits:
-
HttpRequest
- Object
- HttpRequest
- Azure::BaseManagement::ManagementHttpRequest
- Includes:
- Core::Utility
- Defined in:
- lib/azure/base_management/management_http_request.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#cert ⇒ Object
Returns the value of attribute cert.
-
#key ⇒ Object
Returns the value of attribute key.
-
#uri ⇒ Object
Returns the value of attribute uri.
-
#warn ⇒ Object
Returns the value of attribute warn.
Instance Method Summary collapse
-
#call ⇒ Object
Public: Sends a request to HTTP server and returns a HttpResponse.
-
#check_completion(request_id) ⇒ Object
Public: Gets the status of the specified operation and determines whether the operation has succeeded, failed, or is still in progress.
- #http_setup(host_uri = nil) ⇒ Object
-
#initialize(method, path, body = nil) ⇒ ManagementHttpRequest
constructor
Public: Creates the ManagementHttpRequest.
- #rebuild_request(response) ⇒ Object
- #redirected?(response) ⇒ Boolean
-
#wait_for_completion(response) ⇒ Object
Public: Wait for HTTP request completion.
Methods included from Core::Utility
#enable_winrm?, #export_der, #export_fingerprint, #get_certificate, #initialize_external_logger, #locate_file, #random_string, #xml_content
Constructor Details
#initialize(method, path, body = nil) ⇒ ManagementHttpRequest
Public: Creates the ManagementHttpRequest
method - Symbol. The HTTP method to use (:get, :post, :put, :del, etc…) path - URI. The URI of the HTTP endpoint to query body - IO or String. The request body (optional) key - String. The request key cert - String. The request certificate
34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/azure/base_management/management_http_request.rb', line 34 def initialize(method, path, body = nil) super @warn = false content_length = body ? body.bytesize.to_s : '0' @headers.update({ 'x-ms-version' => '2014-06-01', 'Content-Type' => 'application/xml', 'Content-Length' => content_length }) @uri = URI.parse(Azure.config.management_endpoint + Azure.config.subscription_id + path) @key = Azure.config.http_private_key @cert = Azure.config.http_certificate_key end |
Instance Attribute Details
#cert ⇒ Object
Returns the value of attribute cert.
25 26 27 |
# File 'lib/azure/base_management/management_http_request.rb', line 25 def cert @cert end |
#key ⇒ Object
Returns the value of attribute key.
25 26 27 |
# File 'lib/azure/base_management/management_http_request.rb', line 25 def key @key end |
#uri ⇒ Object
Returns the value of attribute uri.
25 26 27 |
# File 'lib/azure/base_management/management_http_request.rb', line 25 def uri @uri end |
#warn ⇒ Object
Returns the value of attribute warn.
25 26 27 |
# File 'lib/azure/base_management/management_http_request.rb', line 25 def warn @warn end |
Instance Method Details
#call ⇒ Object
Public: Sends a request to HTTP server and returns a HttpResponse
Returns a Nokogiri::XML instance of HttpResponse body
51 52 53 54 55 56 57 58 |
# File 'lib/azure/base_management/management_http_request.rb', line 51 def call request = http_request_class.new(uri.request_uri, headers) request.body = body if body http = http_setup # http.set_debug_output($stdout) response = wait_for_completion(HttpResponse.new(http.request(request))) Nokogiri::XML response.body unless response.nil? end |
#check_completion(request_id) ⇒ Object
Public: Gets the status of the specified operation and determines whether the operation has succeeded, failed, or is still in progress.
Attributes
-
request_id
- String. x-ms-request-id response header of request
See: msdn.microsoft.com/en-us/library/azure/ee460783.aspx
Print Error or Success of Operation.
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/azure/base_management/management_http_request.rb', line 103 def check_completion(request_id) request_path = "/#{Azure.config.subscription_id}/operations/#{request_id}" http = http_setup headers['Content-Length'] = '0' @method = :get done = false while not done print '# ' request = http_request_class.new(request_path, headers) response = HttpResponse.new(http.request(request)) ret_val = Nokogiri::XML response.body status = xml_content(ret_val, 'Operation Status') status_code = response.status_code.to_i if status != 'InProgress' done = true end if redirected? response host_uri = URI.parse(response.headers['location']) http = http_setup(host_uri) done = false end if done if status.downcase != 'succeeded' error_code = xml_content(ret_val, 'Operation Error Code') error_msg = xml_content(ret_val, 'Operation Error Message') Azure::Loggerx. "#{error_code}: #{error_msg}" else Azure::Loggerx.success "#{status.downcase} (#{status_code})" end return else sleep(5) end end end |
#http_setup(host_uri = nil) ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/azure/base_management/management_http_request.rb', line 151 def http_setup(host_uri = nil) @uri = host_uri if host_uri http = nil if ENV['HTTP_PROXY'] || ENV['HTTPS_PROXY'] if ENV['HTTP_PROXY'] proxy_uri = URI.parse(ENV['HTTP_PROXY']) else proxy_uri = URI.parse(ENV['HTTPS_PROXY']) end http = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port).new(uri.host, uri.port) else http = Net::HTTP.new(uri.host, uri.port) end if uri.scheme.downcase == 'https' http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE http.cert = cert http.key = key end http end |
#rebuild_request(response) ⇒ Object
139 140 141 142 143 144 145 |
# File 'lib/azure/base_management/management_http_request.rb', line 139 def rebuild_request(response) host_uri = URI.parse(response.headers['location']) request = http_request_class.new(host_uri.request_uri, headers) request.body = body if body http = http_setup(host_uri) wait_for_completion(HttpResponse.new(http.request(request))) end |
#redirected?(response) ⇒ Boolean
147 148 149 |
# File 'lib/azure/base_management/management_http_request.rb', line 147 def redirected?(response) (response.status_code.to_i == 307) end |
#wait_for_completion(response) ⇒ Object
Public: Wait for HTTP request completion.
Attributes
-
response
- Azure::Core::Http::HttpResponse. HttpResponse Response
Print Error or Success of HttpRequest
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/azure/base_management/management_http_request.rb', line 67 def wait_for_completion(response) ret_val = Nokogiri::XML response.body if ret_val.at_css('Error Code') && ret_val.at_css('Error Code').content == 'AuthenticationFailed' Azure::Loggerx.error_with_exit ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content end if response.status_code.to_i == 200 || response.status_code.to_i == 201 return response elsif redirected? response rebuild_request response elsif response.status_code.to_i > 201 && response.status_code.to_i <= 299 check_completion(response.headers['x-ms-request-id']) elsif response.status_code.to_i == 307 @uri = URI::parse (response.headers['location']) call elsif warn && !response.success? elsif response.body if ret_val.at_css('Error Code') && ret_val.at_css('Error Message') Azure::Loggerx.error_with_exit ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content else Azure::Loggerx. "http error: #{response.status_code}" end else Azure::Loggerx. "http error: #{response.status_code}" end end |