ovirt 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ovirt/base.rb +3 -6
- data/lib/ovirt/exception.rb +1 -0
- data/lib/ovirt/inventory.rb +22 -9
- data/lib/ovirt/service.rb +25 -4
- data/lib/ovirt/version.rb +1 -1
- data/spec/factories/service.rb +2 -1
- data/spec/service_spec.rb +99 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0f4293560478cd39aa761c4aaec2b68b4b48fb6
|
4
|
+
data.tar.gz: ae54f822fcb29c456eb8216b99e49e829eb666b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b820d2f7680c71664d9f4a066701ec9380c1527903ca747fc98b4e35f1362e3bcb2d19bed15fe58c523009e787e22a5e2526fe63a97e50ea82d16888a6d4e7c6
|
7
|
+
data.tar.gz: 86fc253644730f32b29bba7b83b8738af5cfac1ec1b7d1389212036467411c17a66007308be2d4f7b2c1c9164951ae4ed8f8b16d74645de889cb68d9585fcbbe
|
data/lib/ovirt/base.rb
CHANGED
@@ -165,12 +165,9 @@ module Ovirt
|
|
165
165
|
end
|
166
166
|
|
167
167
|
def self.xml_to_nokogiri(xml)
|
168
|
-
if xml.kind_of?(Nokogiri::XML::Element)
|
169
|
-
|
170
|
-
|
171
|
-
nokogiri = Nokogiri::XML(xml).root
|
172
|
-
end
|
173
|
-
nokogiri
|
168
|
+
return xml if xml.kind_of?(Nokogiri::XML::Element)
|
169
|
+
|
170
|
+
Nokogiri::XML(xml).root
|
174
171
|
end
|
175
172
|
|
176
173
|
def self.href_from_creation_status_link(link)
|
data/lib/ovirt/exception.rb
CHANGED
data/lib/ovirt/inventory.rb
CHANGED
@@ -90,8 +90,13 @@ module Ovirt
|
|
90
90
|
def refresh
|
91
91
|
# TODO: Change to not return native objects to the caller. The caller
|
92
92
|
# should just expect raw data.
|
93
|
-
primary_items =
|
94
|
-
collect_secondary_items(primary_items)
|
93
|
+
primary_items = collect_primary_jobs(primary_item_jobs)
|
94
|
+
collect_secondary_items(primary_items, SECONDARY_ITEMS)
|
95
|
+
end
|
96
|
+
|
97
|
+
def targeted_refresh(methods)
|
98
|
+
primary_items = collect_primary_targeted_jobs(methods[:primary].to_a)
|
99
|
+
collect_secondary_items(primary_items, methods[:secondary])
|
95
100
|
end
|
96
101
|
|
97
102
|
private
|
@@ -130,15 +135,13 @@ module Ovirt
|
|
130
135
|
#
|
131
136
|
# > secondary_item_jobs({:vm, => [v1, v2]})
|
132
137
|
# => [[v1, :disks], [v1, :snapshots], [v1, :nics], [v2, :disks], [v2, :snapshots], [v2, :nics]]
|
133
|
-
def secondary_item_jobs(primary_items)
|
134
|
-
|
138
|
+
def secondary_item_jobs(primary_items, secondary_items)
|
139
|
+
secondary_items.flat_map do |key, methods|
|
135
140
|
primary_items[key].product(methods)
|
136
141
|
end
|
137
142
|
end
|
138
143
|
|
139
|
-
def
|
140
|
-
jobs = primary_item_jobs
|
141
|
-
|
144
|
+
def collect_primary_jobs(jobs)
|
142
145
|
results = collect_in_parallel(jobs) do |_, method|
|
143
146
|
send(method)
|
144
147
|
end
|
@@ -148,8 +151,18 @@ module Ovirt
|
|
148
151
|
end
|
149
152
|
end
|
150
153
|
|
151
|
-
def
|
152
|
-
|
154
|
+
def collect_primary_targeted_jobs(jobs)
|
155
|
+
results = collect_in_parallel(jobs) do |key, ems_ref|
|
156
|
+
get_resource_by_ems_ref(ems_ref, key.to_s)
|
157
|
+
end
|
158
|
+
|
159
|
+
jobs.zip(results).each_with_object({}) do |((key, _), result), hash|
|
160
|
+
hash[key] = result
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def collect_secondary_items(primary_items, secondary_items)
|
165
|
+
jobs = secondary_item_jobs(primary_items, secondary_items)
|
153
166
|
|
154
167
|
results = collect_in_parallel(jobs) do |resource, method|
|
155
168
|
resource.send(method) rescue nil
|
data/lib/ovirt/service.rb
CHANGED
@@ -68,6 +68,24 @@ module Ovirt
|
|
68
68
|
api(true)[:summary] # This is volatile information
|
69
69
|
end
|
70
70
|
|
71
|
+
def ca_certificate
|
72
|
+
@ca_certificate ||= verify_certificate(get_ca_certificate)
|
73
|
+
end
|
74
|
+
|
75
|
+
def verify_certificate(certificate)
|
76
|
+
return if certificate.to_s.strip.empty?
|
77
|
+
|
78
|
+
require 'openssl'
|
79
|
+
OpenSSL::X509::Certificate.new(certificate).to_s
|
80
|
+
rescue OpenSSL::X509::CertificateError
|
81
|
+
end
|
82
|
+
|
83
|
+
def get_ca_certificate
|
84
|
+
require "rest-client"
|
85
|
+
RestClient::Resource.new("#{base_uri}/ca.crt", resource_options).get
|
86
|
+
rescue RestClient::ResourceNotFound
|
87
|
+
end
|
88
|
+
|
71
89
|
def special_objects
|
72
90
|
@special_objects ||= api[:special_objects]
|
73
91
|
end
|
@@ -102,7 +120,8 @@ module Ovirt
|
|
102
120
|
doc = Nokogiri::XML(xml)
|
103
121
|
element_name ||= doc.root.name
|
104
122
|
klass = self.class.name_to_class(element_name)
|
105
|
-
|
123
|
+
objects = doc.xpath("//#{element_name}")
|
124
|
+
objects.collect { |obj| xml_to_object(klass, obj) }
|
106
125
|
end
|
107
126
|
|
108
127
|
def standard_collection(uri_suffix, element_name = nil, paginate = false, sort_by = :name, direction = :asc)
|
@@ -202,8 +221,8 @@ module Ovirt
|
|
202
221
|
case response.code
|
203
222
|
when 200..206
|
204
223
|
parse_normal_response(response, resource)
|
205
|
-
when 400
|
206
|
-
parse_error_response(response)
|
224
|
+
when 400..409
|
225
|
+
parse_error_response(response, resource)
|
207
226
|
else
|
208
227
|
response.return!(request, result, &block)
|
209
228
|
end
|
@@ -230,7 +249,9 @@ module Ovirt
|
|
230
249
|
response
|
231
250
|
end
|
232
251
|
|
233
|
-
def parse_error_response(response)
|
252
|
+
def parse_error_response(response, resource)
|
253
|
+
logger.error "#{self.class.name}#parse_error_response Return from URL: <#{resource.url}> Data:#{response}"
|
254
|
+
raise Ovirt::MissingResourceError if response.code == 404
|
234
255
|
doc = Nokogiri::XML(response)
|
235
256
|
action = doc.xpath("action").first
|
236
257
|
node = action || doc
|
data/lib/ovirt/version.rb
CHANGED
data/spec/factories/service.rb
CHANGED
data/spec/service_spec.rb
CHANGED
@@ -43,11 +43,110 @@ EOX
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
+
describe "#ca_certificate" do
|
47
|
+
let(:letsencrypt_org_certificate) do
|
48
|
+
<<-EOC
|
49
|
+
-----BEGIN CERTIFICATE-----
|
50
|
+
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
|
79
|
+
-----END CERTIFICATE-----
|
80
|
+
EOC
|
81
|
+
end
|
82
|
+
let(:rest_client_resource_double) { double("RestClient::Resource") }
|
83
|
+
let(:service) { build(:service, :server => "test.example.com") }
|
84
|
+
|
85
|
+
before { allow(RestClient::Resource).to receive(:new).and_return(rest_client_resource_double) }
|
86
|
+
|
87
|
+
it 'with a valid certificate' do
|
88
|
+
expect(rest_client_resource_double).to receive(:get).once.and_return(letsencrypt_org_certificate)
|
89
|
+
|
90
|
+
2.times { expect(service.ca_certificate).to eq(letsencrypt_org_certificate) }
|
91
|
+
end
|
92
|
+
|
93
|
+
it "with invalid certificate" do
|
94
|
+
expect(rest_client_resource_double).to receive(:get).and_return("ABCDEFG", " ", nil)
|
95
|
+
|
96
|
+
3.times { expect(service.ca_certificate).to eq(nil) }
|
97
|
+
end
|
98
|
+
|
99
|
+
it "server doesn't respond" do
|
100
|
+
expect(rest_client_resource_double).to receive(:get).and_raise(RestClient::ResourceNotFound)
|
101
|
+
|
102
|
+
expect(service.ca_certificate).to eq(nil)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
46
106
|
it "#resource_get on exception" do
|
47
107
|
allow(service).to receive(:create_resource).and_raise(Exception, "BLAH")
|
48
108
|
expect { service.resource_get('api') }.to raise_error(Exception, "BLAH")
|
49
109
|
end
|
50
110
|
|
111
|
+
context "#get_resource_by_ems_ref" do
|
112
|
+
it "fetches data_center" do
|
113
|
+
return_message = <<-EOX.chomp
|
114
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
115
|
+
<data_center href="/api/datacenters/00000001-0001-0001-0001-0000000000f1" id="00000001-0001-0001-0001-0000000000f1">
|
116
|
+
<name>Default</name>
|
117
|
+
<description>The default Data Center</description>
|
118
|
+
<link href="/api/datacenters/00000001-0001-0001-0001-0000000000f1/storagedomains" rel="storagedomains"/>
|
119
|
+
<link href="/api/datacenters/00000001-0001-0001-0001-0000000000f1/clusters" rel="clusters"/>
|
120
|
+
<link href="/api/datacenters/00000001-0001-0001-0001-0000000000f1/networks" rel="networks"/>
|
121
|
+
<link href="/api/datacenters/00000001-0001-0001-0001-0000000000f1/permissions" rel="permissions"/>
|
122
|
+
<link href="/api/datacenters/00000001-0001-0001-0001-0000000000f1/quotas" rel="quotas"/>
|
123
|
+
<link href="/api/datacenters/00000001-0001-0001-0001-0000000000f1/qoss" rel="qoss"/>
|
124
|
+
<link href="/api/datacenters/00000001-0001-0001-0001-0000000000f1/iscsibonds" rel="iscsibonds"/>
|
125
|
+
<local>false</local>
|
126
|
+
<storage_format>v3</storage_format>
|
127
|
+
<version major="3" minor="6"/>
|
128
|
+
<supported_versions>
|
129
|
+
<version major="3" minor="6"/>
|
130
|
+
</supported_versions>
|
131
|
+
<status>
|
132
|
+
<state>up</state>
|
133
|
+
</status>
|
134
|
+
<mac_pool href="/api/macpools/0000000d-000d-000d-000d-00000000037a" id="0000000d-000d-000d-000d-00000000037a"/>
|
135
|
+
<quota_mode>disabled</quota_mode>
|
136
|
+
</data_center>
|
137
|
+
EOX
|
138
|
+
expect(service).to receive(:resource_get).and_return(return_message)
|
139
|
+
|
140
|
+
data_center = service.get_resource_by_ems_ref("/api/datacenters/00000001-0001-0001-0001-0000000000f1")
|
141
|
+
expect(data_center[0].name).to eq "Default"
|
142
|
+
end
|
143
|
+
|
144
|
+
it "returns 404" do
|
145
|
+
expect(service).to receive(:resource_get).and_raise(Ovirt::MissingResourceError)
|
146
|
+
expect { service.get_resource_by_ems_ref("/api/vms/1234") }.to raise_error(Ovirt::MissingResourceError)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
51
150
|
context ".ovirt?" do
|
52
151
|
it "false when ResourceNotFound" do
|
53
152
|
expect_any_instance_of(described_class).to receive(:engine_ssh_public_key).and_raise(RestClient::ResourceNotFound)
|
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.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Frey
|
@@ -14,10 +14,12 @@ authors:
|
|
14
14
|
- Richard Oliveri
|
15
15
|
- Chris Portman
|
16
16
|
- Adam Grare
|
17
|
+
- Dávid Halász
|
18
|
+
- pkliczewski
|
17
19
|
autorequire:
|
18
20
|
bindir: bin
|
19
21
|
cert_chain: []
|
20
|
-
date: 2016-
|
22
|
+
date: 2016-04-16 00:00:00.000000000 Z
|
21
23
|
dependencies:
|
22
24
|
- !ruby/object:Gem::Dependency
|
23
25
|
name: bundler
|
@@ -163,7 +165,7 @@ description: Ovirt provides a simple Object Oriented interface to the REST API o
|
|
163
165
|
oVirt and RHEV-M servers.
|
164
166
|
email:
|
165
167
|
- fryguy9@gmail.com
|
166
|
-
-
|
168
|
+
- brandondunne@hotmail.com
|
167
169
|
- keenan@thebrocks.net
|
168
170
|
- jrafanie@redhat.com
|
169
171
|
- gblomqui@redhat.com
|
@@ -172,6 +174,8 @@ email:
|
|
172
174
|
- roliveri@redhat.com
|
173
175
|
- chris.portman@optusnet.com.au
|
174
176
|
- agrare@redhat.com
|
177
|
+
- dhalasz@redhat.com
|
178
|
+
- piotr.kliczewski@gmail.com
|
175
179
|
executables: []
|
176
180
|
extensions: []
|
177
181
|
extra_rdoc_files: []
|