ibm_power_hmc 0.3.0 → 0.7.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/.gitignore +0 -0
- data/.rubocop.yml +0 -0
- data/.rubocop_local.yml +2 -0
- data/CHANGELOG.md +0 -0
- data/Gemfile +0 -0
- data/LICENSE +0 -0
- data/README.md +5 -5
- data/Rakefile +0 -0
- data/ibm_power_hmc.gemspec +0 -0
- data/lib/ibm_power_hmc/connection.rb +296 -24
- data/lib/ibm_power_hmc/job.rb +8 -9
- data/lib/ibm_power_hmc/parser.rb +703 -41
- data/lib/ibm_power_hmc/pcm.rb +0 -0
- data/lib/ibm_power_hmc/version.rb +1 -1
- data/lib/ibm_power_hmc.rb +4 -4
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 128d1d4297c8885e438de247ccf25a143c856a3cdff5e2894f49c0541b475a6e
|
4
|
+
data.tar.gz: ee5304a78bf10231755750641b3ea5fc11064bea52753db4c8c42456461bbd3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7924966345897965a3789b26ef307ae3df5e5dccbdf316e0d59ed665d57a2ceaaf51128f225cd08a2544b6c77d54ae634b5f75d25bfa766c3672480f01fc72da
|
7
|
+
data.tar.gz: '078600454867693aaf410ca0a898eb5464f24b4dd40db56c61caa5145fbc54685f0819f576862f6065649f4a2d46dab2d5f838938b207fc376e563cfc724c56f'
|
data/.gitignore
CHANGED
File without changes
|
data/.rubocop.yml
CHANGED
File without changes
|
data/.rubocop_local.yml
CHANGED
data/CHANGELOG.md
CHANGED
File without changes
|
data/Gemfile
CHANGED
File without changes
|
data/LICENSE
CHANGED
File without changes
|
data/README.md
CHANGED
@@ -52,9 +52,9 @@ Listing the logical partitions and virtual I/O servers of each managed system:
|
|
52
52
|
|
53
53
|
```ruby
|
54
54
|
hc.managed_systems.each do |sys|
|
55
|
-
puts sys
|
56
|
-
|
57
|
-
|
55
|
+
puts sys.name
|
56
|
+
hc.lpars(sys.uuid).each { |lpar| puts lpar.name }
|
57
|
+
hc.vioses(sys.uuid).each { |vios| puts vios.name }
|
58
58
|
end
|
59
59
|
```
|
60
60
|
|
@@ -73,9 +73,9 @@ hc.poweroff_lpar(lpar_uuid, { "operation" => "shutdown" })
|
|
73
73
|
Processing events:
|
74
74
|
|
75
75
|
```ruby
|
76
|
-
loop
|
76
|
+
loop do
|
77
77
|
hc.next_events.each do |event|
|
78
|
-
puts event
|
78
|
+
puts event.type
|
79
79
|
end
|
80
80
|
end
|
81
81
|
```
|
data/Rakefile
CHANGED
File without changes
|
data/ibm_power_hmc.gemspec
CHANGED
File without changes
|
@@ -8,15 +8,15 @@ module IbmPowerHmc
|
|
8
8
|
# HMC REST Client connection.
|
9
9
|
class Connection
|
10
10
|
##
|
11
|
-
# @!method initialize(host:, username: "hscroot",
|
11
|
+
# @!method initialize(host:, password:, username: "hscroot", port: 12_443, validate_ssl: true)
|
12
12
|
# Create a new HMC connection.
|
13
13
|
#
|
14
14
|
# @param host [String] Hostname of the HMC.
|
15
|
-
# @param username [String] User name.
|
16
15
|
# @param password [String] Password.
|
16
|
+
# @param username [String] User name.
|
17
17
|
# @param port [Integer] TCP port number.
|
18
18
|
# @param validate_ssl [Boolean] Verify SSL certificates.
|
19
|
-
def initialize(host:, username: "hscroot",
|
19
|
+
def initialize(host:, password:, username: "hscroot", port: 12_443, validate_ssl: true)
|
20
20
|
@hostname = "#{host}:#{port}"
|
21
21
|
@username = username
|
22
22
|
@password = password
|
@@ -151,18 +151,13 @@ module IbmPowerHmc
|
|
151
151
|
end
|
152
152
|
|
153
153
|
##
|
154
|
-
# @!method rename_lpar(lpar_uuid,
|
154
|
+
# @!method rename_lpar(lpar_uuid, new_name)
|
155
155
|
# Rename a logical partition.
|
156
156
|
# @param lpar_uuid [String] The UUID of the logical partition.
|
157
|
-
# @param
|
158
|
-
def rename_lpar(lpar_uuid,
|
157
|
+
# @param new_name [String] The new name of the logical partition.
|
158
|
+
def rename_lpar(lpar_uuid, new_name)
|
159
159
|
method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}"
|
160
|
-
|
161
|
-
:content_type => "application/vnd.ibm.powervm.uom+xml; type=LogicalPartition",
|
162
|
-
}
|
163
|
-
modify_object(method_url, headers) do |lpar|
|
164
|
-
lpar.xml.elements["PartitionName"].text = newname
|
165
|
-
end
|
160
|
+
modify_object(method_url) { |lpar| lpar.name = new_name }
|
166
161
|
end
|
167
162
|
|
168
163
|
##
|
@@ -201,6 +196,227 @@ module IbmPowerHmc
|
|
201
196
|
Parser.new(response.body).object(:VirtualIOServer)
|
202
197
|
end
|
203
198
|
|
199
|
+
##
|
200
|
+
# @!method virtual_switches(sys_uuid)
|
201
|
+
# Retrieve the list of virtual switches from a specified managed system.
|
202
|
+
# @param sys_uuid [String] The UUID of the managed system.
|
203
|
+
# @return [Array<IbmPowerHmc::VirtualSwitch>] The list of virtual switches.
|
204
|
+
def virtual_switches(sys_uuid)
|
205
|
+
method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/VirtualSwitch"
|
206
|
+
response = request(:get, method_url)
|
207
|
+
FeedParser.new(response.body).objects(:VirtualSwitch)
|
208
|
+
end
|
209
|
+
|
210
|
+
##
|
211
|
+
# @!method virtual_switch(vswitch_uuid, sys_uuid)
|
212
|
+
# Retrieve information about a virtual switch.
|
213
|
+
# @param vswitch_uuid [String] The UUID of the virtual switch.
|
214
|
+
# @param sys_uuid [String] The UUID of the managed system.
|
215
|
+
# @return [IbmPowerHmc::VirtualSwitch] The virtual switch.
|
216
|
+
def virtual_switch(vswitch_uuid, sys_uuid)
|
217
|
+
method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/VirtualSwitch/#{vswitch_uuid}"
|
218
|
+
response = request(:get, method_url)
|
219
|
+
Parser.new(response.body).object(:VirtualSwitch)
|
220
|
+
end
|
221
|
+
|
222
|
+
##
|
223
|
+
# @!method virtual_networks(sys_uuid)
|
224
|
+
# Retrieve the list of virtual networks from a specified managed system.
|
225
|
+
# @param sys_uuid [String] The UUID of the managed system.
|
226
|
+
# @return [Array<IbmPowerHmc::VirtualNetwork>] The list of virtual networks.
|
227
|
+
def virtual_networks(sys_uuid)
|
228
|
+
method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/VirtualNetwork"
|
229
|
+
response = request(:get, method_url)
|
230
|
+
FeedParser.new(response.body).objects(:VirtualNetwork)
|
231
|
+
end
|
232
|
+
|
233
|
+
##
|
234
|
+
# @!method virtual_network(vnet_uuid, sys_uuid)
|
235
|
+
# Retrieve information about a virtual network.
|
236
|
+
# @param vnet_uuid [String] The UUID of the virtual network.
|
237
|
+
# @param sys_uuid [String] The UUID of the managed system.
|
238
|
+
# @return [IbmPowerHmc::VirtualNetwork] The virtual network.
|
239
|
+
def virtual_network(vnet_uuid, sys_uuid)
|
240
|
+
method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/VirtualNetwork/#{vnet_uuid}"
|
241
|
+
response = request(:get, method_url)
|
242
|
+
Parser.new(response.body).object(:VirtualNetwork)
|
243
|
+
end
|
244
|
+
|
245
|
+
##
|
246
|
+
# @!method network_adapter_lpar(lpar_uuid, netadap_uuid = nil)
|
247
|
+
# Retrieve one or all virtual ethernet network adapters attached to a logical partition.
|
248
|
+
# @param lpar_uuid [String] UUID of the logical partition.
|
249
|
+
# @param netadap_uuid [String] UUID of the adapter to match (returns all adapters if omitted).
|
250
|
+
# @return [Array<IbmPowerHmc::ClientNetworkAdapter>, IbmPowerHmc::ClientNetworkAdapter] The list of network adapters.
|
251
|
+
def network_adapter_lpar(lpar_uuid, netadap_uuid = nil)
|
252
|
+
network_adapter("LogicalPartition", lpar_uuid, netadap_uuid)
|
253
|
+
end
|
254
|
+
|
255
|
+
##
|
256
|
+
# @!method network_adapter_vios(vios_uuid, netadap_uuid = nil)
|
257
|
+
# Retrieve one or all virtual ethernet network adapters attached to a Virtual I/O Server.
|
258
|
+
# @param vios_uuid [String] UUID of the Virtual I/O Server.
|
259
|
+
# @param netadap_uuid [String] UUID of the adapter to match (returns all adapters if omitted).
|
260
|
+
# @return [Array<IbmPowerHmc::ClientNetworkAdapter>, IbmPowerHmc::ClientNetworkAdapter] The list of network adapters.
|
261
|
+
def network_adapter_vios(vios_uuid, netadap_uuid = nil)
|
262
|
+
network_adapter("VirtualIOServer", vios_uuid, netadap_uuid)
|
263
|
+
end
|
264
|
+
|
265
|
+
##
|
266
|
+
# @!method sriov_elp_lpar(lpar_uuid, sriov_elp_uuid = nil)
|
267
|
+
# Retrieve one or all SR-IOV ethernet logical ports attached to a logical partition.
|
268
|
+
# @param lpar_uuid [String] UUID of the logical partition.
|
269
|
+
# @param sriov_elp_uuid [String] UUID of the port to match (returns all ports if omitted).
|
270
|
+
# @return [Array<IbmPowerHmc::SRIOVEthernetLogicalPort>, IbmPowerHmc::SRIOVEthernetLogicalPort] The list of ports.
|
271
|
+
def sriov_elp_lpar(lpar_uuid, sriov_elp_uuid = nil)
|
272
|
+
sriov_ethernet_port("LogicalPartition", lpar_uuid, sriov_elp_uuid)
|
273
|
+
end
|
274
|
+
|
275
|
+
##
|
276
|
+
# @!method network_adapter_vios(vios_uuid, sriov_elp_uuid = nil)
|
277
|
+
# Retrieve one or all SR-IOV ethernet logical ports attached to a Virtual I/O Server.
|
278
|
+
# @param vios_uuid [String] UUID of the Virtual I/O Server.
|
279
|
+
# @param sriov_elp_uuid [String] UUID of the port to match (returns all ports if omitted).
|
280
|
+
# @return [Array<IbmPowerHmc::SRIOVEthernetLogicalPort>, IbmPowerHmc::SRIOVEthernetLogicalPort] The list of ports.
|
281
|
+
def sriov_elp_vios(vios_uuid, sriov_elp_uuid = nil)
|
282
|
+
sriov_ethernet_port("VirtualIOServer", vios_uuid, sriov_elp_uuid)
|
283
|
+
end
|
284
|
+
|
285
|
+
##
|
286
|
+
# @!method vnic_dedicated(lpar_uuid, vnic_uuid = nil)
|
287
|
+
# Retrieve one or all dedicated virtual network interface controller (vNIC) attached to a logical partition.
|
288
|
+
# @param lpar_uuid [String] UUID of the logical partition.
|
289
|
+
# @param vnic_uuid [String] UUID of the vNIC to match (returns all vNICs if omitted).
|
290
|
+
# @return [Array<IbmPowerHmc::VirtualNICDedicated>, IbmPowerHmc::VirtualNICDedicated] The list of vNICs.
|
291
|
+
def vnic_dedicated(lpar_uuid, vnic_uuid = nil)
|
292
|
+
if vnic_uuid.nil?
|
293
|
+
method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}/VirtualNICDedicated"
|
294
|
+
response = request(:get, method_url)
|
295
|
+
FeedParser.new(response.body).objects(:VirtualNICDedicated)
|
296
|
+
else
|
297
|
+
method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}/VirtualNICDedicated/#{vnic_uuid}"
|
298
|
+
response = request(:get, method_url)
|
299
|
+
Parser.new(response.body).object(:VirtualNICDedicated)
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
##
|
304
|
+
# @!method clusters
|
305
|
+
# Retrieve the list of clusters managed by the HMC.
|
306
|
+
# @return [Array<IbmPowerHmc::Cluster>] The list of clusters.
|
307
|
+
def clusters
|
308
|
+
method_url = "/rest/api/uom/Cluster"
|
309
|
+
response = request(:get, method_url)
|
310
|
+
FeedParser.new(response.body).objects(:Cluster)
|
311
|
+
end
|
312
|
+
|
313
|
+
##
|
314
|
+
# @!method cluster(cl_uuid)
|
315
|
+
# Retrieve information about a cluster.
|
316
|
+
# @param cl_uuid [String] The UUID of the cluster.
|
317
|
+
# @return [IbmPowerHmc::Cluster] The cluster.
|
318
|
+
def cluster(cl_uuid)
|
319
|
+
method_url = "/rest/api/uom/Cluster/#{cl_uuid}"
|
320
|
+
response = request(:get, method_url)
|
321
|
+
Parser.new(response.body).object(:Cluster)
|
322
|
+
end
|
323
|
+
|
324
|
+
##
|
325
|
+
# @!method ssps
|
326
|
+
# Retrieve the list of shared storage pools managed by the HMC.
|
327
|
+
# @return [Array<IbmPowerHmc::SharedStoragePool>] The list of shared storage pools.
|
328
|
+
def ssps
|
329
|
+
method_url = "/rest/api/uom/SharedStoragePool"
|
330
|
+
response = request(:get, method_url)
|
331
|
+
FeedParser.new(response.body).objects(:SharedStoragePool)
|
332
|
+
end
|
333
|
+
|
334
|
+
##
|
335
|
+
# @!method ssp(ssp_uuid)
|
336
|
+
# Retrieve information about a shared storage pool.
|
337
|
+
# @param ssp_uuid [String] The UUID of the shared storage pool.
|
338
|
+
# @return [IbmPowerHmc::SharedStoragePool] The shared storage pool.
|
339
|
+
def ssp(ssp_uuid)
|
340
|
+
method_url = "/rest/api/uom/SharedStoragePool/#{ssp_uuid}"
|
341
|
+
response = request(:get, method_url)
|
342
|
+
Parser.new(response.body).object(:SharedStoragePool)
|
343
|
+
end
|
344
|
+
|
345
|
+
##
|
346
|
+
# @!method tiers(group_name = nil)
|
347
|
+
# Retrieve the list of tiers that are part of shared storage pools managed by the HMC.
|
348
|
+
# @param group_name [String] The extended group attributes.
|
349
|
+
# @return [Array<IbmPowerHmc::Tier>] The list of tiers.
|
350
|
+
def tiers(group_name = nil)
|
351
|
+
method_url = "/rest/api/uom/Tier"
|
352
|
+
method_url += "?group=#{group_name}" unless group_name.nil?
|
353
|
+
response = request(:get, method_url)
|
354
|
+
FeedParser.new(response.body).objects(:Tier)
|
355
|
+
end
|
356
|
+
|
357
|
+
##
|
358
|
+
# @!method tier(tier_uuid, ssp_uuid = nil, group_name = nil)
|
359
|
+
# Retrieve information about a tier.
|
360
|
+
# @param tier_uuid [String] The UUID of the tier.
|
361
|
+
# @param ssp_uuid [String] The UUID of the shared storage pool.
|
362
|
+
# @param group_name [String] The extended group attributes.
|
363
|
+
# @return [IbmPowerHmc::Tier] The tier.
|
364
|
+
def tier(tier_uuid, ssp_uuid = nil, group_name = nil)
|
365
|
+
if ssp_uuid.nil?
|
366
|
+
method_url = "/rest/api/uom/Tier/#{tier_uuid}"
|
367
|
+
else
|
368
|
+
method_url = "/rest/api/uom/SharedStoragePool/#{ssp_uuid}/Tier/#{tier_uuid}"
|
369
|
+
end
|
370
|
+
method_url += "?group=#{group_name}" unless group_name.nil?
|
371
|
+
|
372
|
+
response = request(:get, method_url)
|
373
|
+
Parser.new(response.body).object(:Tier)
|
374
|
+
end
|
375
|
+
|
376
|
+
##
|
377
|
+
# @!method templates_summary
|
378
|
+
# Retrieve the list of partition template summaries.
|
379
|
+
# @return [Array<IbmPowerHmc::PartitionTemplateSummary>] The list of partition template summaries.
|
380
|
+
def templates_summary
|
381
|
+
method_url = "/rest/api/templates/PartitionTemplate"
|
382
|
+
response = request(:get, method_url)
|
383
|
+
FeedParser.new(response.body).objects(:PartitionTemplateSummary)
|
384
|
+
end
|
385
|
+
|
386
|
+
##
|
387
|
+
# @!method template(template_uuid)
|
388
|
+
# Retrieve details for a particular partition template.
|
389
|
+
# @param template_uuid [String] UUID of the partition template.
|
390
|
+
# @return [IbmPowerHmc::PartitionTemplate] The partition template.
|
391
|
+
def template(template_uuid)
|
392
|
+
method_url = "/rest/api/templates/PartitionTemplate/#{template_uuid}"
|
393
|
+
response = request(:get, method_url)
|
394
|
+
Parser.new(response.body).object(:PartitionTemplate)
|
395
|
+
end
|
396
|
+
|
397
|
+
##
|
398
|
+
# @!method capture_lpar(lpar_uuid, sys_uuid, template_name, sync = true)
|
399
|
+
# Capture partition configuration as template.
|
400
|
+
# @param lpar_uuid [String] The UUID of the logical partition.
|
401
|
+
# @param sys_uuid [String] The UUID of the managed system.
|
402
|
+
# @param template_name [String] The name to be given for the new template.
|
403
|
+
# @param sync [Boolean] Start the job and wait for its completion.
|
404
|
+
# @return [IbmPowerHmc::HmcJob] The HMC job.
|
405
|
+
def capture_lpar(lpar_uuid, sys_uuid, template_name, sync = true)
|
406
|
+
# Need to include session token in payload so make sure we are logged in
|
407
|
+
logon if @api_session_token.nil?
|
408
|
+
method_url = "/rest/api/templates/PartitionTemplate/do/capture"
|
409
|
+
params = {
|
410
|
+
"TargetUuid" => lpar_uuid,
|
411
|
+
"NewTemplateName" => template_name,
|
412
|
+
"ManagedSystemUuid" => sys_uuid,
|
413
|
+
"K_X_API_SESSION_MEMENTO" => @api_session_token
|
414
|
+
}
|
415
|
+
job = HmcJob.new(self, method_url, "Capture", "PartitionTemplate", params)
|
416
|
+
job.run if sync
|
417
|
+
job
|
418
|
+
end
|
419
|
+
|
204
420
|
##
|
205
421
|
# @!method poweron_lpar(lpar_uuid, params = {}, sync = true)
|
206
422
|
# Power on a logical partition.
|
@@ -219,9 +435,7 @@ module IbmPowerHmc
|
|
219
435
|
##
|
220
436
|
# @!method poweroff_lpar(lpar_uuid, params = {}, sync = true)
|
221
437
|
# Power off a logical partition.
|
222
|
-
# @param
|
223
|
-
# @param params [Hash] Job parameters.
|
224
|
-
# @param sync [Boolean] Start the job and wait for its completion.
|
438
|
+
# @param (see #poweron_lpar)
|
225
439
|
# @return [IbmPowerHmc::HmcJob] The HMC job.
|
226
440
|
def poweroff_lpar(lpar_uuid, params = {}, sync = true)
|
227
441
|
method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}/do/PowerOff"
|
@@ -249,9 +463,7 @@ module IbmPowerHmc
|
|
249
463
|
##
|
250
464
|
# @!method poweroff_vios(vios_uuid, params = {}, sync = true)
|
251
465
|
# Power off a virtual I/O server.
|
252
|
-
# @param
|
253
|
-
# @param params [Hash] Job parameters.
|
254
|
-
# @param sync [Boolean] Start the job and wait for its completion.
|
466
|
+
# @param (see #poweron_vios)
|
255
467
|
# @return [IbmPowerHmc::HmcJob] The HMC job.
|
256
468
|
def poweroff_vios(vios_uuid, params = {}, sync = true)
|
257
469
|
method_url = "/rest/api/uom/VirtualIOServer/#{vios_uuid}/do/PowerOff"
|
@@ -279,9 +491,7 @@ module IbmPowerHmc
|
|
279
491
|
##
|
280
492
|
# @!method poweroff_managed_system(sys_uuid, params = {}, sync = true)
|
281
493
|
# Power off a managed system.
|
282
|
-
# @param
|
283
|
-
# @param params [Hash] Job parameters.
|
284
|
-
# @param sync [Boolean] Start the job and wait for its completion.
|
494
|
+
# @param (see #poweron_managed_system)
|
285
495
|
# @return [IbmPowerHmc::HmcJob] The HMC job.
|
286
496
|
def poweroff_managed_system(sys_uuid, params = {}, sync = true)
|
287
497
|
method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/do/PowerOff"
|
@@ -339,7 +549,24 @@ module IbmPowerHmc
|
|
339
549
|
# No need to sleep as the HMC already waits a bit before returning 204
|
340
550
|
break if response.code != 204 || !wait
|
341
551
|
end
|
342
|
-
FeedParser.new(response.body).objects(:Event)
|
552
|
+
FeedParser.new(response.body).objects(:Event).map do |e|
|
553
|
+
data = e.data.split("/")
|
554
|
+
if data[-2].eql?("UserTask")
|
555
|
+
e.usertask = usertask(data.last)
|
556
|
+
end
|
557
|
+
e
|
558
|
+
end.compact
|
559
|
+
end
|
560
|
+
|
561
|
+
##
|
562
|
+
# @!method usertask(uuid = true)
|
563
|
+
# Retrieve details of an event of type "user task".
|
564
|
+
# @param uuid [String] UUID of user task.
|
565
|
+
# @return [Hash] Hash of user task attributes.
|
566
|
+
def usertask(uuid)
|
567
|
+
method_url = "/rest/api/ui/UserTask/#{uuid}"
|
568
|
+
response = request(:get, method_url)
|
569
|
+
JSON.parse(response.body)
|
343
570
|
end
|
344
571
|
|
345
572
|
##
|
@@ -418,6 +645,13 @@ module IbmPowerHmc
|
|
418
645
|
|
419
646
|
private
|
420
647
|
|
648
|
+
# @!method modify_object(method_url, headers = {}, attempts = 5)
|
649
|
+
# Modify an object at a specified URI.
|
650
|
+
# @param method_url [String] The URL of the object to modify.
|
651
|
+
# @param headers [Hash] HTTP headers.
|
652
|
+
# @param attempts [Integer] Maximum number of retries.
|
653
|
+
# @yield [obj] The object to modify.
|
654
|
+
# @yieldparam obj [IbmPowerHmc::AbstractRest] The object to modify.
|
421
655
|
def modify_object(method_url, headers = {}, attempts = 5)
|
422
656
|
while attempts > 0
|
423
657
|
response = request(:get, method_url)
|
@@ -426,16 +660,54 @@ module IbmPowerHmc
|
|
426
660
|
yield obj
|
427
661
|
|
428
662
|
# Use ETag to ensure object has not changed.
|
429
|
-
headers = headers.merge("If-Match" => obj.etag)
|
663
|
+
headers = headers.merge("If-Match" => obj.etag, :content_type => obj.content_type)
|
430
664
|
begin
|
431
665
|
request(:post, method_url, headers, obj.xml.to_s)
|
432
666
|
break
|
433
667
|
rescue HttpError => e
|
434
668
|
attempts -= 1
|
435
|
-
# Will get 412 ("Precondition Failed" if ETag mismatches
|
669
|
+
# Will get 412 ("Precondition Failed") if ETag mismatches
|
436
670
|
raise if e.status != 412 || attempts == 0
|
437
671
|
end
|
438
672
|
end
|
439
673
|
end
|
674
|
+
|
675
|
+
##
|
676
|
+
# @!method network_adapter(vm_type, lpar_uuid, netadap_uuid)
|
677
|
+
# Retrieve one or all virtual ethernet network adapters attached to a Logical Partition or a Virtual I/O Server.
|
678
|
+
# @param vm_type [String] "LogicalPartition" or "VirtualIOServer".
|
679
|
+
# @param lpar_uuid [String] UUID of the Logical Partition or the Virtual I/O Server.
|
680
|
+
# @param netadap_uuid [String] UUID of the adapter to match (returns all adapters if nil).
|
681
|
+
# @return [Array<IbmPowerHmc::ClientNetworkAdapter>, IbmPowerHmc::ClientNetworkAdapter] The list of network adapters.
|
682
|
+
def network_adapter(vm_type, lpar_uuid, netadap_uuid)
|
683
|
+
if netadap_uuid.nil?
|
684
|
+
method_url = "/rest/api/uom/#{vm_type}/#{lpar_uuid}/ClientNetworkAdapter"
|
685
|
+
response = request(:get, method_url)
|
686
|
+
FeedParser.new(response.body).objects(:ClientNetworkAdapter)
|
687
|
+
else
|
688
|
+
method_url = "/rest/api/uom/#{vm_type}/#{lpar_uuid}/ClientNetworkAdapter/#{netadap_uuid}"
|
689
|
+
response = request(:get, method_url)
|
690
|
+
Parser.new(response.body).object(:ClientNetworkAdapter)
|
691
|
+
end
|
692
|
+
end
|
693
|
+
|
694
|
+
##
|
695
|
+
# @!method sriov_ethernet_port(vm_type, lpar_uuid, sriov_elp_uuid)
|
696
|
+
# Retrieve one or all SR-IOV Ethernet loical ports attached to a Logical Partition or a Virtual I/O Server.
|
697
|
+
# @param vm_type [String] "LogicalPartition" or "VirtualIOServer".
|
698
|
+
# @param lpar_uuid [String] UUID of the Logical Partition or the Virtual I/O Server.
|
699
|
+
# @param sriov_elp_uuid [String] UUID of the port to match (returns all ports if nil).
|
700
|
+
# @return [Array<IbmPowerHmc::SRIOVEthernetLogicalPort>, IbmPowerHmc::SRIOVEthernetLogicalPort] The list of ports.
|
701
|
+
def sriov_ethernet_port(vm_type, lpar_uuid, sriov_elp_uuid)
|
702
|
+
if sriov_elp_uuid.nil?
|
703
|
+
method_url = "/rest/api/uom/#{vm_type}/#{lpar_uuid}/SRIOVEthernetLogicalPort"
|
704
|
+
response = request(:get, method_url)
|
705
|
+
FeedParser.new(response.body).objects(:SRIOVEthernetLogicalPort)
|
706
|
+
else
|
707
|
+
method_url = "/rest/api/uom/#{vm_type}/#{lpar_uuid}/SRIOVEthernetLogicalPort/#{sriov_elp_uuid}"
|
708
|
+
response = request(:get, method_url)
|
709
|
+
Parser.new(response.body).object(:SRIOVEthernetLogicalPort)
|
710
|
+
end
|
711
|
+
end
|
440
712
|
end
|
441
713
|
end
|
data/lib/ibm_power_hmc/job.rb
CHANGED
@@ -26,7 +26,7 @@ module IbmPowerHmc
|
|
26
26
|
##
|
27
27
|
# @!method start
|
28
28
|
# Start the job asynchronously.
|
29
|
-
# @return [String] The
|
29
|
+
# @return [String] The URL of the job.
|
30
30
|
def start
|
31
31
|
headers = {
|
32
32
|
:content_type => "application/vnd.ibm.powervm.web+xml; type=JobRequest"
|
@@ -47,7 +47,8 @@ module IbmPowerHmc
|
|
47
47
|
end
|
48
48
|
response = @conn.request(:put, @method_url, headers, doc.to_s)
|
49
49
|
jobresp = Parser.new(response.body).object(:JobResponse)
|
50
|
-
|
50
|
+
# Save the URL of the job (JobID is not sufficient as not all jobs are in uom).
|
51
|
+
@href = jobresp.href.path
|
51
52
|
end
|
52
53
|
|
53
54
|
# @return [Hash] The job results returned by the HMC.
|
@@ -58,13 +59,12 @@ module IbmPowerHmc
|
|
58
59
|
# Return the status of the job.
|
59
60
|
# @return [String] The status of the job.
|
60
61
|
def status
|
61
|
-
raise JobNotStarted unless defined?(@
|
62
|
+
raise JobNotStarted unless defined?(@href)
|
62
63
|
|
63
|
-
method_url = "/rest/api/uom/jobs/#{@id}"
|
64
64
|
headers = {
|
65
65
|
:content_type => "application/vnd.ibm.powervm.web+xml; type=JobRequest"
|
66
66
|
}
|
67
|
-
response = @conn.request(:get,
|
67
|
+
response = @conn.request(:get, @href, headers)
|
68
68
|
jobresp = Parser.new(response.body).object(:JobResponse)
|
69
69
|
@results = jobresp.results
|
70
70
|
jobresp.status
|
@@ -100,17 +100,16 @@ module IbmPowerHmc
|
|
100
100
|
start
|
101
101
|
wait(timeout, poll_interval)
|
102
102
|
ensure
|
103
|
-
delete if defined?(@
|
103
|
+
delete if defined?(@href)
|
104
104
|
end
|
105
105
|
|
106
106
|
##
|
107
107
|
# @!method delete
|
108
108
|
# Delete the job from the HMC.
|
109
109
|
def delete
|
110
|
-
raise JobNotStarted unless defined?(@
|
110
|
+
raise JobNotStarted unless defined?(@href)
|
111
111
|
|
112
|
-
|
113
|
-
@conn.request(:delete, method_url)
|
112
|
+
@conn.request(:delete, @href)
|
114
113
|
# Returns HTTP 204 if ok
|
115
114
|
end
|
116
115
|
end
|