Class: AzureAPI::Rest

Inherits:
Object
  • Object
show all
Defined in:
lib/azure/service_management/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/service_management/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, content_type = nil) ⇒ Object



52
53
54
55
56
57
58
59
60
# File 'lib/azure/service_management/rest.rb', line 52

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

#http_setup(uri) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/azure/service_management/rest.rb', line 74

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, content_type = nil) ⇒ Object



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

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

#query_for_completionObject



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/azure/service_management/rest.rb', line 62

def query_for_completion()
  uri = URI.parse("#{@host_name}/#{@subscription_id}/operations/#{@last_request_id}")
  scheme = !uri.scheme ? "https://" : ""
  request_url = "#{scheme}#{@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, content_type) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/azure/service_management/rest.rb', line 93

def request_setup(uri, verb, body, content_type)
  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' && content_type.nil?
  request["x-ms-version"] = "2014-05-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



112
113
114
115
116
117
118
119
120
121
# File 'lib/azure/service_management/rest.rb', line 112

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