Class: Azure::BaseManagement::ManagementHttpRequest
- Inherits:
-
HttpRequest
- Object
- HttpRequest
- Azure::BaseManagement::ManagementHttpRequest
- 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.
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
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/azure/base_management/management_http_request.rb', line 33 def initialize(method, path, body = nil) super @warn = false content_length = body ? body.bytesize.to_s : '0' @headers = { 'x-ms-version' => '2014-04-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.
24 25 26 |
# File 'lib/azure/base_management/management_http_request.rb', line 24 def cert @cert end |
#key ⇒ Object
Returns the value of attribute key.
24 25 26 |
# File 'lib/azure/base_management/management_http_request.rb', line 24 def key @key end |
#uri ⇒ Object
Returns the value of attribute uri.
24 25 26 |
# File 'lib/azure/base_management/management_http_request.rb', line 24 def uri @uri end |
#warn ⇒ Object
Returns the value of attribute warn.
24 25 26 |
# File 'lib/azure/base_management/management_http_request.rb', line 24 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
50 51 52 53 54 55 56 57 |
# File 'lib/azure/base_management/management_http_request.rb', line 50 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/windowsazure/ee460783.aspx
Print Error or Success of Operation.
100 101 102 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 |
# File 'lib/azure/base_management/management_http_request.rb', line 100 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') Loggerx. "#{error_code}: #{error_msg}" else Loggerx.success "#{status.downcase} (#{status_code})" end return else sleep(5) end end end |
#http_setup(host_uri = nil) ⇒ Object
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/azure/base_management/management_http_request.rb', line 148 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
136 137 138 139 140 141 142 |
# File 'lib/azure/base_management/management_http_request.rb', line 136 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
144 145 146 |
# File 'lib/azure/base_management/management_http_request.rb', line 144 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
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/azure/base_management/management_http_request.rb', line 66 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' 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 warn && !response.success? # Loggerx.warn ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content elsif response.body if ret_val.at_css('Error Code') && ret_val.at_css('Error Message') Loggerx.error_with_exit ret_val.at_css('Error Code').content + ' : ' + ret_val.at_css('Error Message').content else Loggerx. "http error: #{response.status_code}" end else Loggerx. "http error: #{response.status_code}" end end |