ovirt 0.8.0 → 0.9.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: f0f4293560478cd39aa761c4aaec2b68b4b48fb6
4
- data.tar.gz: ae54f822fcb29c456eb8216b99e49e829eb666b0
3
+ metadata.gz: dc172ac5a494fe8fadb4903ac66e950a17cd9e16
4
+ data.tar.gz: 917e3cd03ddacd7a64e5880e8e7fb063fae59010
5
5
  SHA512:
6
- metadata.gz: b820d2f7680c71664d9f4a066701ec9380c1527903ca747fc98b4e35f1362e3bcb2d19bed15fe58c523009e787e22a5e2526fe63a97e50ea82d16888a6d4e7c6
7
- data.tar.gz: 86fc253644730f32b29bba7b83b8738af5cfac1ec1b7d1389212036467411c17a66007308be2d4f7b2c1c9164951ae4ed8f8b16d74645de889cb68d9585fcbbe
6
+ metadata.gz: 94cba5c058a105783ad3950e5b66215df36b84aef7b1b2b0df5efa1e8c480eaa51a420f9c574f39e27d2f4bea319d2ca593359c4541f229d55d48c9d9edb727d
7
+ data.tar.gz: e436a90440f21749c935a23241c85f9d6d9d2856527830d5e02af1f6d7cc5fe29b273ef5e498cdecb3e4cc2b3665269456447c9a84047876201ec1524b76f9e4
@@ -99,6 +99,10 @@ module Ovirt
99
99
  collect_secondary_items(primary_items, methods[:secondary])
100
100
  end
101
101
 
102
+ def api_path
103
+ @service.api_path
104
+ end
105
+
102
106
  private
103
107
 
104
108
  def standard_collection(uri_suffix, element_name = nil, paginate = false, sort_by = :name, direction = :asc)
data/lib/ovirt/service.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  require 'nokogiri'
2
+ require 'openssl'
3
+ require 'rest-client'
4
+ require 'uri'
2
5
 
3
6
  module Ovirt
4
7
  class Service
@@ -12,6 +15,12 @@ module Ovirt
12
15
  DEFAULT_SCHEME = 'https'.freeze
13
16
  SESSION_ID_KEY = 'JSESSIONID'.freeze
14
17
 
18
+ # The list of absolute URI paths where the API can be available:
19
+ CANDIDATE_API_PATHS = [
20
+ '/api',
21
+ '/ovirt-engine/api',
22
+ ].freeze
23
+
15
24
  attr_accessor :session_id
16
25
 
17
26
  def self.name_to_class(name)
@@ -28,6 +37,7 @@ module Ovirt
28
37
  REQUIRED_OPTIONS.each { |key| raise "No #{key} specified" unless @options.key?(key) }
29
38
  @password = @options.delete(:password)
30
39
  @session_id = @options[:session_id]
40
+ @api_path = @options[:path]
31
41
  end
32
42
 
33
43
  def inspect # just like the default inspect, but WITHOUT @password
@@ -145,8 +155,40 @@ module Ovirt
145
155
  node.xpath('status/state').text
146
156
  end
147
157
 
158
+ # Checks if the API is available in the given candidate path. It does so sending a request without
159
+ # authentication. If the API is available there it will respond with the "WWW-Autenticate" header
160
+ # and with the "RESTAPI" or "ENGINE" realm.
161
+ def probe_api_path(uri, path)
162
+ uri = URI.join(uri, path)
163
+ request = RestClient::Resource.new(uri.to_s, :verify_ssl => OpenSSL::SSL::VERIFY_NONE)
164
+ begin
165
+ request.get
166
+ rescue RestClient::Exception => exception
167
+ response = exception.response
168
+ if response.code == 401
169
+ www_authenticate = response.headers[:www_authenticate]
170
+ if www_authenticate =~ /^Basic realm="?(RESTAPI|ENGINE)"?$/
171
+ return true
172
+ end
173
+ end
174
+ end
175
+ false
176
+ end
177
+
178
+ # Probes all the candidate paths of the API, and returns the first that success. If all probes
179
+ # fail, then the first candidate will be returned.
180
+ def find_api_path(uri)
181
+ CANDIDATE_API_PATHS.detect { |path| probe_api_path(uri, path) } || CANDIDATE_API_PATHS.first
182
+ end
183
+
184
+ # Returns the path of the API, probing it if needed.
185
+ def api_path
186
+ @api_path ||= find_api_path(base_uri)
187
+ end
188
+
148
189
  def api_uri(path = nil)
149
- uri = "#{base_uri}/api"
190
+ # Calculate the complete URI:
191
+ uri = URI.join(base_uri, api_path).to_s
150
192
  unless path.nil?
151
193
  parts = path.to_s.split('/')
152
194
  parts.shift if parts.first == '' # Remove leading slash
@@ -164,7 +206,6 @@ module Ovirt
164
206
  end
165
207
 
166
208
  def engine_ssh_public_key
167
- require "rest-client"
168
209
  RestClient::Resource.new("#{base_uri}/engine.ssh.key.txt", resource_options).get
169
210
  end
170
211
 
@@ -206,7 +247,6 @@ module Ovirt
206
247
  end
207
248
 
208
249
  def create_resource(path = nil)
209
- require "rest-client"
210
250
  RestClient::Resource.new(api_uri(path), resource_options)
211
251
  end
212
252
 
@@ -270,14 +310,16 @@ module Ovirt
270
310
  end
271
311
 
272
312
  def base_uri
273
- require 'uri'
274
313
  uri = URI::Generic.build(:scheme => scheme.to_s, :port => port)
275
314
  uri.hostname = server
276
315
  uri.to_s
277
316
  end
278
317
 
279
318
  def resource_options
280
- headers = merge_headers('Prefer' => 'persistent-auth')
319
+ headers = merge_headers(
320
+ 'Version' => '3',
321
+ 'Prefer' => 'persistent-auth',
322
+ )
281
323
  options = {}
282
324
 
283
325
  if session_id
data/lib/ovirt/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ovirt
2
- VERSION = "0.8.0"
2
+ VERSION = "0.9.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ovirt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Frey
@@ -16,10 +16,11 @@ authors:
16
16
  - Adam Grare
17
17
  - Dávid Halász
18
18
  - pkliczewski
19
+ - Juan Hernandez
19
20
  autorequire:
20
21
  bindir: bin
21
22
  cert_chain: []
22
- date: 2016-04-16 00:00:00.000000000 Z
23
+ date: 2016-04-19 00:00:00.000000000 Z
23
24
  dependencies:
24
25
  - !ruby/object:Gem::Dependency
25
26
  name: bundler
@@ -176,6 +177,7 @@ email:
176
177
  - agrare@redhat.com
177
178
  - dhalasz@redhat.com
178
179
  - piotr.kliczewski@gmail.com
180
+ - juan.hernandez@redhat.com
179
181
  executables: []
180
182
  extensions: []
181
183
  extra_rdoc_files: []