ovirt 0.13.0 → 0.14.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 +19 -4
- data/lib/ovirt/event.rb +1 -1
- data/lib/ovirt/service.rb +20 -4
- data/lib/ovirt/version.rb +1 -1
- data/lib/ovirt/vm.rb +26 -8
- data/spec/service_spec.rb +65 -14
- data/spec/vm_spec.rb +132 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3724f18a89bdd277ad1a7cb8da15f55ef3ae65c3
|
4
|
+
data.tar.gz: a99bfba080edfd9a0413ae5f03a3318df1b27475
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4fd4402bbbe81b263372b324ddbf01ce20a9966b9c14f1732a24a3c4fca74995bdb5bf1263e4bdcca9fdb44f6ed9055357aa8bb6cb762ef4ae9977475b3bec98
|
7
|
+
data.tar.gz: b7441b0506e7b99680bcdbf6f1fa72b3d78c91be9a1b7731b361fc8039bd5684f913f15ddf656d94c687176286abaf5a6026f16a642a3e9c6554b445f1efd569
|
data/lib/ovirt/base.rb
CHANGED
@@ -307,20 +307,21 @@ module Ovirt
|
|
307
307
|
self[:href] || "#{self.class.api_endpoint}/#{self[:id]}"
|
308
308
|
end
|
309
309
|
|
310
|
-
def update!(&block)
|
311
|
-
response = update(&block)
|
310
|
+
def update!(matrix = {}, &block)
|
311
|
+
response = update(matrix, &block)
|
312
312
|
|
313
313
|
obj = self.class.create_from_xml(@service, response)
|
314
314
|
replace(obj)
|
315
315
|
end
|
316
316
|
|
317
|
-
def update
|
317
|
+
def update(matrix = {})
|
318
318
|
builder = Nokogiri::XML::Builder.new do |xml|
|
319
319
|
xml.send(self.class.namespace.last.downcase) { yield xml if block_given? }
|
320
320
|
end
|
321
321
|
data = builder.doc.root.to_xml
|
322
|
+
suffix = build_matrix_suffix(matrix)
|
322
323
|
|
323
|
-
@service.resource_put(api_endpoint, data)
|
324
|
+
@service.resource_put(api_endpoint + suffix, data)
|
324
325
|
end
|
325
326
|
|
326
327
|
def keys
|
@@ -330,5 +331,19 @@ module Ovirt
|
|
330
331
|
def [](key)
|
331
332
|
@attributes[key]
|
332
333
|
end
|
334
|
+
|
335
|
+
private
|
336
|
+
|
337
|
+
#
|
338
|
+
# Builds the string to be added to the request path for the given matrix parameters. For example, if the given
|
339
|
+
# parameters contain the `next_run` key with the value `true` and the `max` key with the value `10`, then the
|
340
|
+
# resulting string will be `;next_run=true;max=10`.
|
341
|
+
#
|
342
|
+
# @param parameters [Hash] A hash containing the names and values of the matrix parameters.
|
343
|
+
# @return [String] The string to add to the request path.
|
344
|
+
#
|
345
|
+
def build_matrix_suffix(parameters)
|
346
|
+
parameters.map { |key, value| value.nil? ? '' : ";#{key}=#{value}" }.join
|
347
|
+
end
|
333
348
|
end
|
334
349
|
end
|
data/lib/ovirt/event.rb
CHANGED
@@ -306,7 +306,7 @@ module Ovirt
|
|
306
306
|
529 => "USER_EJECT_VM_FLOPPY",
|
307
307
|
530 => "HOST_MANUAL_FENCE_FAILED_CALL_FENCE_SPM",
|
308
308
|
531 => "HOST_LOW_MEM",
|
309
|
-
533 => "
|
309
|
+
533 => "VDS_HIGH_NETWORK_USE",
|
310
310
|
555 => "USER_MOVE_TAG",
|
311
311
|
556 => "USER_MOVE_TAG_FAILED",
|
312
312
|
600 => "USER_HOST_MAINTENANCE",
|
data/lib/ovirt/service.rb
CHANGED
@@ -21,6 +21,16 @@ module Ovirt
|
|
21
21
|
'/ovirt-engine/api',
|
22
22
|
].freeze
|
23
23
|
|
24
|
+
# The list of absolute URI paths where the engine SSH public key can be available (this is used only to detect if
|
25
|
+
# the engine is installed or not):
|
26
|
+
CANDIDATE_SSH_PUBLIC_KEY_PATHS = [
|
27
|
+
# This will work for newer versions of the engine, including 3.5, 3.6 and 4.0:
|
28
|
+
'/ovirt-engine/services/pki-resource?resource=engine-certificate&format=OPENSSH-PUBKEY',
|
29
|
+
|
30
|
+
# This will work for older versions of the engine older thatn 3.5:
|
31
|
+
'/engine.ssh.key.txt',
|
32
|
+
].freeze
|
33
|
+
|
24
34
|
attr_accessor :session_id
|
25
35
|
|
26
36
|
def self.name_to_class(name)
|
@@ -217,13 +227,19 @@ module Ovirt
|
|
217
227
|
|
218
228
|
def self.ovirt?(options)
|
219
229
|
options[:username] = options[:password] = "_unused"
|
220
|
-
!new(options).engine_ssh_public_key.
|
221
|
-
rescue RestClient::ResourceNotFound, NoMethodError
|
222
|
-
false
|
230
|
+
!new(options).engine_ssh_public_key.blank?
|
223
231
|
end
|
224
232
|
|
225
233
|
def engine_ssh_public_key
|
226
|
-
|
234
|
+
CANDIDATE_SSH_PUBLIC_KEY_PATHS.each do |path|
|
235
|
+
begin
|
236
|
+
key = RestClient::Resource.new("#{base_uri}#{path}", resource_options).get
|
237
|
+
return key unless key.blank?
|
238
|
+
rescue RestClient::ResourceNotFound, NoMethodError
|
239
|
+
# Do nothing, just try the next candidate.
|
240
|
+
end
|
241
|
+
end
|
242
|
+
nil
|
227
243
|
end
|
228
244
|
|
229
245
|
def paginate_resource_get(path = nil, sort_by = :name, direction = :asc)
|
data/lib/ovirt/version.rb
CHANGED
data/lib/ovirt/vm.rb
CHANGED
@@ -122,18 +122,36 @@ module Ovirt
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
-
|
126
|
-
|
127
|
-
|
125
|
+
#
|
126
|
+
# Updates the memory of the virtual machine.
|
127
|
+
#
|
128
|
+
# @param memory [Integer] The virtual memory assigned to the virtual machine, in bytes. If it is `nil` then
|
129
|
+
# the virtual memory won't be updated.
|
130
|
+
#
|
131
|
+
# @param guaranteed [Integer] The amount of physical memory reserved for the virtual machine, in bytes. If
|
132
|
+
# it is `nil` then the guaranteed memory won't be updated.
|
133
|
+
#
|
134
|
+
# @param matrix [Hash] Optional matrix parameters to pass to the update operation, for example `next_run => true`.
|
135
|
+
#
|
136
|
+
def update_memory(memory, guaranteed, matrix = {})
|
137
|
+
update!(matrix) do |xml|
|
138
|
+
if memory
|
139
|
+
xml.memory memory
|
140
|
+
end
|
141
|
+
if guaranteed
|
142
|
+
xml.memory_policy do
|
143
|
+
xml.guaranteed guaranteed
|
144
|
+
end
|
145
|
+
end
|
128
146
|
end
|
129
147
|
end
|
130
148
|
|
149
|
+
def memory=(value)
|
150
|
+
update_memory(value, nil)
|
151
|
+
end
|
152
|
+
|
131
153
|
def memory_reserve=(value)
|
132
|
-
|
133
|
-
xml.memory_policy do
|
134
|
-
xml.guaranteed(value)
|
135
|
-
end
|
136
|
-
end
|
154
|
+
update_memory(nil, value)
|
137
155
|
end
|
138
156
|
|
139
157
|
def cloud_init=(content)
|
data/spec/service_spec.rb
CHANGED
@@ -147,17 +147,62 @@ EOX
|
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
|
-
context "
|
151
|
-
|
152
|
-
|
153
|
-
|
150
|
+
context "#ssh_public_key" do
|
151
|
+
let(:base_uri) { "https://nobody.com" }
|
152
|
+
let(:old_path) { "/engine.ssh.key.txt" }
|
153
|
+
let(:new_path) { "/ovirt-engine/services/pki-resource?resource=engine-certificate&format=OPENSSH-PUBKEY" }
|
154
|
+
let(:ssh_key) { "ssh-rsa " + ("A" * 372) + " ovirt-engine\n" }
|
155
|
+
|
156
|
+
before do
|
157
|
+
allow(service).to receive(:base_uri).and_return(base_uri)
|
154
158
|
end
|
155
159
|
|
156
|
-
it "
|
157
|
-
|
158
|
-
expect(
|
160
|
+
it "returns valid key for engine older than 3.5" do
|
161
|
+
old_resource = double("RestClient::Resource")
|
162
|
+
expect(old_resource).to receive(:get).and_return(ssh_key)
|
163
|
+
expect(RestClient::Resource).to receive(:new).with("#{base_uri}#{old_path}", anything).and_return(old_resource)
|
164
|
+
|
165
|
+
new_resource = double("RestClient::Resource")
|
166
|
+
expect(new_resource).to receive(:get).and_raise(RestClient::ResourceNotFound)
|
167
|
+
expect(RestClient::Resource).to receive(:new).with("#{base_uri}#{new_path}", anything).and_return(new_resource)
|
168
|
+
|
169
|
+
expect(service.engine_ssh_public_key).to eql(ssh_key)
|
170
|
+
end
|
171
|
+
|
172
|
+
it "returns valid key for engine 3.5 or newer" do
|
173
|
+
new_resource = double("RestClient::Resource")
|
174
|
+
expect(new_resource).to receive(:get).and_return(ssh_key)
|
175
|
+
expect(RestClient::Resource).to receive(:new).with("#{base_uri}#{new_path}", anything).and_return(new_resource)
|
176
|
+
|
177
|
+
expect(service.engine_ssh_public_key).to eql(ssh_key)
|
178
|
+
end
|
179
|
+
|
180
|
+
it "returns nil if there is no engine" do
|
181
|
+
old_resource = double("RestClient::Resource")
|
182
|
+
expect(old_resource).to receive(:get).and_raise(RestClient::ResourceNotFound)
|
183
|
+
expect(RestClient::Resource).to receive(:new).with("#{base_uri}#{old_path}", anything).and_return(old_resource)
|
184
|
+
|
185
|
+
new_resource = double("RestClient::Resource")
|
186
|
+
expect(new_resource).to receive(:get).and_raise(RestClient::ResourceNotFound)
|
187
|
+
expect(RestClient::Resource).to receive(:new).with("#{base_uri}#{new_path}", anything).and_return(new_resource)
|
188
|
+
|
189
|
+
expect(service.engine_ssh_public_key).to be nil
|
190
|
+
end
|
191
|
+
|
192
|
+
it "returns nil when using a wrong REST client method" do
|
193
|
+
old_resource = double("RestClient::Resource")
|
194
|
+
expect(old_resource).to receive(:get).and_raise(NoMethodError)
|
195
|
+
expect(RestClient::Resource).to receive(:new).with("#{base_uri}#{old_path}", anything).and_return(old_resource)
|
196
|
+
|
197
|
+
new_resource = double("RestClient::Resource")
|
198
|
+
expect(new_resource).to receive(:get).and_raise(NoMethodError)
|
199
|
+
expect(RestClient::Resource).to receive(:new).with("#{base_uri}#{new_path}", anything).and_return(new_resource)
|
200
|
+
|
201
|
+
expect(service.engine_ssh_public_key).to be nil
|
159
202
|
end
|
203
|
+
end
|
160
204
|
|
205
|
+
context ".ovirt?" do
|
161
206
|
it "true when key non-empty" do
|
162
207
|
fake_key = "ssh-rsa " + ("A" * 372) + " ovirt-engine\n"
|
163
208
|
expect_any_instance_of(described_class).to receive(:engine_ssh_public_key).and_return(fake_key)
|
@@ -169,6 +214,12 @@ EOX
|
|
169
214
|
expect_any_instance_of(described_class).to receive(:engine_ssh_public_key).and_return(fake_key)
|
170
215
|
expect(described_class.ovirt?(:server => "127.0.0.1")).to be false
|
171
216
|
end
|
217
|
+
|
218
|
+
it "false when key nil" do
|
219
|
+
fake_key = nil
|
220
|
+
expect_any_instance_of(described_class).to receive(:engine_ssh_public_key).and_return(fake_key)
|
221
|
+
expect(described_class.ovirt?(:server => "127.0.0.1")).to be false
|
222
|
+
end
|
172
223
|
end
|
173
224
|
|
174
225
|
context "#base_uri" do
|
@@ -207,24 +258,24 @@ EOX
|
|
207
258
|
end
|
208
259
|
|
209
260
|
context "#api_uri" do
|
210
|
-
|
211
|
-
|
261
|
+
let(:base_uri) { "https://nobody.com" }
|
262
|
+
let(:api_path) { "/ovirt-engine/api" }
|
212
263
|
|
213
264
|
before do
|
214
|
-
expect(service).to receive(:base_uri).and_return(
|
215
|
-
expect(service).to receive(:api_path).and_return(
|
265
|
+
expect(service).to receive(:base_uri).and_return(base_uri)
|
266
|
+
expect(service).to receive(:api_path).and_return(api_path)
|
216
267
|
end
|
217
268
|
|
218
269
|
it "removes slash" do
|
219
|
-
expect(service.api_uri("/vms/123")).to eq("#{
|
270
|
+
expect(service.api_uri("/vms/123")).to eq("#{base_uri}#{api_path}/vms/123")
|
220
271
|
end
|
221
272
|
|
222
273
|
it "removes /api" do
|
223
|
-
expect(service.api_uri("/api/vms/123")).to eq("#{
|
274
|
+
expect(service.api_uri("/api/vms/123")).to eq("#{base_uri}#{api_path}/vms/123")
|
224
275
|
end
|
225
276
|
|
226
277
|
it "removes /ovirt-engine/api" do
|
227
|
-
expect(service.api_uri("/ovirt-engine/api/vms/123")).to eq("#{
|
278
|
+
expect(service.api_uri("/ovirt-engine/api/vms/123")).to eq("#{base_uri}#{api_path}/vms/123")
|
228
279
|
end
|
229
280
|
|
230
281
|
end
|
data/spec/vm_spec.rb
CHANGED
@@ -112,7 +112,7 @@ EOX
|
|
112
112
|
context "#boot_order" do
|
113
113
|
it "with a single string, updates the boot order" do
|
114
114
|
devices = 'hd'
|
115
|
-
expected_data
|
115
|
+
expected_data = <<-EOX.chomp
|
116
116
|
<vm>
|
117
117
|
<os>
|
118
118
|
<boot dev="hd"/>
|
@@ -139,7 +139,7 @@ EOX
|
|
139
139
|
|
140
140
|
it "with an array of strings, updates the boot order" do
|
141
141
|
devices = ['network', 'hd']
|
142
|
-
expected_data
|
142
|
+
expected_data = <<-EOX.chomp
|
143
143
|
<vm>
|
144
144
|
<os>
|
145
145
|
<boot dev="network"/>
|
@@ -167,10 +167,35 @@ EOX
|
|
167
167
|
end
|
168
168
|
end
|
169
169
|
|
170
|
+
context '#memory=' do
|
171
|
+
it 'updates the memory' do
|
172
|
+
memory = 1_073_741_824 # 1.gigabyte
|
173
|
+
expected_data = <<-EOX.chomp
|
174
|
+
<vm>
|
175
|
+
<memory>#{memory}</memory>
|
176
|
+
</vm>
|
177
|
+
EOX
|
178
|
+
|
179
|
+
return_data = <<-EOX.chomp
|
180
|
+
<vm>
|
181
|
+
<os type='dummy'/>
|
182
|
+
<placement_policy>
|
183
|
+
<affinity>dummy</affinity>
|
184
|
+
</placement_policy>
|
185
|
+
</vm>
|
186
|
+
EOX
|
187
|
+
|
188
|
+
expect(service).to receive(:resource_put).once.with(
|
189
|
+
vm.attributes[:href],
|
190
|
+
expected_data).and_return(return_data)
|
191
|
+
vm.memory = memory
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
170
195
|
context "#memory_reserve" do
|
171
196
|
it "updates the memory policy guarantee" do
|
172
197
|
memory_reserve = 1_073_741_824 # 1.gigabyte
|
173
|
-
expected_data
|
198
|
+
expected_data = <<-EOX.chomp
|
174
199
|
<vm>
|
175
200
|
<memory_policy>
|
176
201
|
<guaranteed>#{memory_reserve}</guaranteed>
|
@@ -194,6 +219,110 @@ EOX
|
|
194
219
|
end
|
195
220
|
end
|
196
221
|
|
222
|
+
context '#update_memory' do
|
223
|
+
it 'updates only "memory" if "guaranteed" is nil' do
|
224
|
+
memory = 1_073_741_824 # 1.gigabyte
|
225
|
+
guaranteed = nil
|
226
|
+
expected_data = <<-EOX.chomp
|
227
|
+
<vm>
|
228
|
+
<memory>#{memory}</memory>
|
229
|
+
</vm>
|
230
|
+
EOX
|
231
|
+
|
232
|
+
return_data = <<-EOX.chomp
|
233
|
+
<vm>
|
234
|
+
<os type='dummy'/>
|
235
|
+
<placement_policy>
|
236
|
+
<affinity>dummy</affinity>
|
237
|
+
</placement_policy>
|
238
|
+
</vm>
|
239
|
+
EOX
|
240
|
+
|
241
|
+
expect(service).to receive(:resource_put).once.with(
|
242
|
+
vm.attributes[:href],
|
243
|
+
expected_data).and_return(return_data)
|
244
|
+
vm.update_memory(memory, guaranteed)
|
245
|
+
end
|
246
|
+
|
247
|
+
it 'updates only "guaranteed" if "memory" is nil' do
|
248
|
+
memory = nil
|
249
|
+
guaranteed = 1_073_741_824 # 1.gigabyte
|
250
|
+
expected_data = <<-EOX.chomp
|
251
|
+
<vm>
|
252
|
+
<memory_policy>
|
253
|
+
<guaranteed>#{guaranteed}</guaranteed>
|
254
|
+
</memory_policy>
|
255
|
+
</vm>
|
256
|
+
EOX
|
257
|
+
|
258
|
+
return_data = <<-EOX.chomp
|
259
|
+
<vm>
|
260
|
+
<os type='dummy'/>
|
261
|
+
<placement_policy>
|
262
|
+
<affinity>dummy</affinity>
|
263
|
+
</placement_policy>
|
264
|
+
</vm>
|
265
|
+
EOX
|
266
|
+
|
267
|
+
expect(service).to receive(:resource_put).once.with(
|
268
|
+
vm.attributes[:href],
|
269
|
+
expected_data).and_return(return_data)
|
270
|
+
vm.update_memory(memory, guaranteed)
|
271
|
+
end
|
272
|
+
|
273
|
+
it 'updates both if both are not nil' do
|
274
|
+
memory = 1_073_741_824 # 1.gigabyte
|
275
|
+
guaranteed = 1_073_741_824 # 1.gigabyte
|
276
|
+
expected_data = <<-EOX.chomp
|
277
|
+
<vm>
|
278
|
+
<memory>#{memory}</memory>
|
279
|
+
<memory_policy>
|
280
|
+
<guaranteed>#{guaranteed}</guaranteed>
|
281
|
+
</memory_policy>
|
282
|
+
</vm>
|
283
|
+
EOX
|
284
|
+
|
285
|
+
return_data = <<-EOX.chomp
|
286
|
+
<vm>
|
287
|
+
<os type='dummy'/>
|
288
|
+
<placement_policy>
|
289
|
+
<affinity>dummy</affinity>
|
290
|
+
</placement_policy>
|
291
|
+
</vm>
|
292
|
+
EOX
|
293
|
+
|
294
|
+
expect(service).to receive(:resource_put).once.with(
|
295
|
+
vm.attributes[:href],
|
296
|
+
expected_data).and_return(return_data)
|
297
|
+
vm.update_memory(memory, guaranteed)
|
298
|
+
end
|
299
|
+
|
300
|
+
it 'adds the "next_run=true" matrix parameter correctly' do
|
301
|
+
memory = 1_073_741_824 # 1.gigabyte
|
302
|
+
guaranteed = nil
|
303
|
+
expected_data = <<-EOX.chomp
|
304
|
+
<vm>
|
305
|
+
<memory>#{memory}</memory>
|
306
|
+
</vm>
|
307
|
+
EOX
|
308
|
+
|
309
|
+
return_data = <<-EOX.chomp
|
310
|
+
<vm>
|
311
|
+
<os type='dummy'/>
|
312
|
+
<placement_policy>
|
313
|
+
<affinity>dummy</affinity>
|
314
|
+
</placement_policy>
|
315
|
+
</vm>
|
316
|
+
</vm>
|
317
|
+
EOX
|
318
|
+
|
319
|
+
expect(service).to receive(:resource_put).once.with(
|
320
|
+
vm.attributes[:href] + ';next_run=true',
|
321
|
+
expected_data).and_return(return_data)
|
322
|
+
vm.update_memory(memory, guaranteed, :next_run => true)
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
197
326
|
context "#stop" do
|
198
327
|
it "should raise Ovirt::VmIsNotRunning if the VM is not running" do
|
199
328
|
return_data = <<-EOX.chomp
|
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.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Frey
|
@@ -25,7 +25,7 @@ authors:
|
|
25
25
|
autorequire:
|
26
26
|
bindir: bin
|
27
27
|
cert_chain: []
|
28
|
-
date: 2016-
|
28
|
+
date: 2016-11-21 00:00:00.000000000 Z
|
29
29
|
dependencies:
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: activesupport
|