Class: AzureAPI::Rest

Inherits:
Object
  • Object
show all
Defined in:
lib/azure/rest.rb

Instance Method Summary collapse

Constructor Details

#initialize(params) ⇒ Rest

Returns a new instance of Rest.



25
26
27
28
29
30
# File 'lib/azure/rest.rb', line 25

def initialize(params)
  @subscription_id = params[:azure_subscription_id]
  @pem_file = params[:azure_mgmt_cert]
  @host_name = params[:azure_api_host_name]
  @verify_ssl = params[:verify_ssl_cert]
end

Instance Method Details

#http_query(request_url, verb, body, params) ⇒ Object



50
51
52
53
54
55
56
57
58
# File 'lib/azure/rest.rb', line 50

def http_query(request_url, verb, body, params)
  uri = URI.parse(request_url)
  uri.query = params
  http = http_setup(uri)
  request = request_setup(uri, verb, body)
  response = http.request(request)
  @last_request_id = response['x-ms-request-id']
  response
end

#http_setup(uri) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/azure/rest.rb', line 70

def http_setup(uri)
  http = Net::HTTP.new(uri.host, uri.port)
  store = OpenSSL::X509::Store.new
  store.set_default_paths
  http.cert_store = store
  if @verify_ssl
    http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  else
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
  http.use_ssl = true
  begin
    http.cert = OpenSSL::X509::Certificate.new(@pem_file)
  rescue OpenSSL::X509::CertificateError => err
    raise "Invalid Azure Certificate pem file. Error: #{err}"
  end
    http.key = OpenSSL::PKey::RSA.new(@pem_file)
  http
end

#query_azure(service_name, verb = 'get', body = '', params = '', services = true) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/azure/rest.rb', line 32

def query_azure(service_name,
                verb = 'get',
                body = '',
                params = '',
                services = true)
  svc_str = services ? '/services' : ''
  request_url =
    "https://#{@host_name}/#{@subscription_id}#{svc_str}/#{service_name}"
  print '.'
  response = http_query(request_url, verb, body, params)
  if response.code.to_i == 307
    Chef::Log.debug "Redirect to #{response['Location']}"
    response = http_query(response['Location'], verb, body, params)
  end
  @last_request_id = response['x-ms-request-id']
  response
end

#query_for_completionObject



60
61
62
63
64
65
66
67
68
# File 'lib/azure/rest.rb', line 60

def query_for_completion()
  request_url = "https://#{@host_name}/#{@subscription_id}/operations/#{@last_request_id}"
  response = http_query(request_url, 'get', '', '')
  if response.code.to_i == 307
    Chef::Log.debug "Redirect to #{response['Location']}"
    response = http_query(response['Location'], 'get', '', '')
  end
  response
end

#request_setup(uri, verb, body) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/azure/rest.rb', line 89

def request_setup(uri, verb, body)
  if verb == 'get'
    request = Net::HTTP::Get.new(uri.request_uri)
  elsif verb == 'post'
    request = Net::HTTP::Post.new(uri.request_uri)
  elsif verb == 'delete'
    request = Net::HTTP::Delete.new(uri.request_uri)
  elsif verb == 'put'
    request = Net::HTTP::Put.new(uri.request_uri)
  end
  text = verb == 'put'
  request["x-ms-version"] = "2013-08-01"
  request["content-type"] = text ? "text/plain" : "application/xml"
  request["accept"] = "application/xml"
  request["accept-charset"] = "utf-8"
  request.body = body
  request
end

#showResponse(response) ⇒ Object



107
108
109
110
111
112
113
114
115
116
# File 'lib/azure/rest.rb', line 107

def showResponse(response)
  puts "=== response body ==="
  puts response.body
  puts "=== response.code ==="
  puts response.code
  puts "=== response.inspect ==="
  puts response.inspect
  puts "=== all of the headers ==="
  puts response.each_header { |h, j| puts h.inspect + ' : ' + j.inspect}
end