ibm_power_hmc 0.6.0 → 0.8.2
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 +0 -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 +161 -10
- data/lib/ibm_power_hmc/job.rb +8 -9
- data/lib/ibm_power_hmc/parser.rb +501 -19
- data/lib/ibm_power_hmc/pcm.rb +0 -0
- data/lib/ibm_power_hmc/version.rb +1 -1
- data/lib/ibm_power_hmc.rb +0 -0
- 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: c623fd45cb85f923d0790b547880961e484577caf9e04b2a12faf31d89b6d73b
|
4
|
+
data.tar.gz: 644e6b64a701b460a42af2cc9b1eae2975166ed34e9656ae8f7279f7738f5f3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33f6075119a6babfc364dd5aff3fb3bf892ce76a27aae925d387807d46e554193cd71262c050d91128935d4b8e61e77183f6a4492dcfd7ecb4015ec6d3c128f0
|
7
|
+
data.tar.gz: 7548dbcefd537dd37bdcdde5b7d95184e06374972a46a88b108a576e85c34da9dce71e5daa09b0fae2c2f4808fd63688f6aca9a3fc07aa7ef79e65b1c523c72b
|
data/.gitignore
CHANGED
File without changes
|
data/.rubocop.yml
CHANGED
File without changes
|
data/.rubocop_local.yml
CHANGED
File without changes
|
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
|
@@ -266,18 +266,18 @@ module IbmPowerHmc
|
|
266
266
|
# @!method sriov_elp_lpar(lpar_uuid, sriov_elp_uuid = nil)
|
267
267
|
# Retrieve one or all SR-IOV ethernet logical ports attached to a logical partition.
|
268
268
|
# @param lpar_uuid [String] UUID of the logical partition.
|
269
|
-
# @param
|
270
|
-
# @return [Array<IbmPowerHmc::
|
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
271
|
def sriov_elp_lpar(lpar_uuid, sriov_elp_uuid = nil)
|
272
272
|
sriov_ethernet_port("LogicalPartition", lpar_uuid, sriov_elp_uuid)
|
273
273
|
end
|
274
274
|
|
275
275
|
##
|
276
|
-
# @!method network_adapter_vios(vios_uuid,
|
276
|
+
# @!method network_adapter_vios(vios_uuid, sriov_elp_uuid = nil)
|
277
277
|
# Retrieve one or all SR-IOV ethernet logical ports attached to a Virtual I/O Server.
|
278
278
|
# @param vios_uuid [String] UUID of the Virtual I/O Server.
|
279
|
-
# @param
|
280
|
-
# @return [Array<IbmPowerHmc::
|
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
281
|
def sriov_elp_vios(vios_uuid, sriov_elp_uuid = nil)
|
282
282
|
sriov_ethernet_port("VirtualIOServer", vios_uuid, sriov_elp_uuid)
|
283
283
|
end
|
@@ -286,8 +286,8 @@ module IbmPowerHmc
|
|
286
286
|
# @!method vnic_dedicated(lpar_uuid, vnic_uuid = nil)
|
287
287
|
# Retrieve one or all dedicated virtual network interface controller (vNIC) attached to a logical partition.
|
288
288
|
# @param lpar_uuid [String] UUID of the logical partition.
|
289
|
-
# @param
|
290
|
-
# @return [Array<IbmPowerHmc::
|
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
291
|
def vnic_dedicated(lpar_uuid, vnic_uuid = nil)
|
292
292
|
if vnic_uuid.nil?
|
293
293
|
method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}/VirtualNICDedicated"
|
@@ -300,6 +300,133 @@ module IbmPowerHmc
|
|
300
300
|
end
|
301
301
|
end
|
302
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 templates
|
388
|
+
# Retrieve the list of partition templates.
|
389
|
+
# @return [Array<IbmPowerHmc::PartitionTemplate>] The list of partition templates.
|
390
|
+
def templates
|
391
|
+
method_url = "/rest/api/templates/PartitionTemplate?detail=full"
|
392
|
+
response = request(:get, method_url)
|
393
|
+
FeedParser.new(response.body).objects(:PartitionTemplate)
|
394
|
+
end
|
395
|
+
|
396
|
+
##
|
397
|
+
# @!method template(template_uuid)
|
398
|
+
# Retrieve details for a particular partition template.
|
399
|
+
# @param template_uuid [String] UUID of the partition template.
|
400
|
+
# @return [IbmPowerHmc::PartitionTemplate] The partition template.
|
401
|
+
def template(template_uuid)
|
402
|
+
method_url = "/rest/api/templates/PartitionTemplate/#{template_uuid}"
|
403
|
+
response = request(:get, method_url)
|
404
|
+
Parser.new(response.body).object(:PartitionTemplate)
|
405
|
+
end
|
406
|
+
|
407
|
+
##
|
408
|
+
# @!method capture_lpar(lpar_uuid, sys_uuid, template_name, sync = true)
|
409
|
+
# Capture partition configuration as template.
|
410
|
+
# @param lpar_uuid [String] The UUID of the logical partition.
|
411
|
+
# @param sys_uuid [String] The UUID of the managed system.
|
412
|
+
# @param template_name [String] The name to be given for the new template.
|
413
|
+
# @param sync [Boolean] Start the job and wait for its completion.
|
414
|
+
# @return [IbmPowerHmc::HmcJob] The HMC job.
|
415
|
+
def capture_lpar(lpar_uuid, sys_uuid, template_name, sync = true)
|
416
|
+
# Need to include session token in payload so make sure we are logged in
|
417
|
+
logon if @api_session_token.nil?
|
418
|
+
method_url = "/rest/api/templates/PartitionTemplate/do/capture"
|
419
|
+
params = {
|
420
|
+
"TargetUuid" => lpar_uuid,
|
421
|
+
"NewTemplateName" => template_name,
|
422
|
+
"ManagedSystemUuid" => sys_uuid,
|
423
|
+
"K_X_API_SESSION_MEMENTO" => @api_session_token
|
424
|
+
}
|
425
|
+
job = HmcJob.new(self, method_url, "Capture", "PartitionTemplate", params)
|
426
|
+
job.run if sync
|
427
|
+
job
|
428
|
+
end
|
429
|
+
|
303
430
|
##
|
304
431
|
# @!method poweron_lpar(lpar_uuid, params = {}, sync = true)
|
305
432
|
# Power on a logical partition.
|
@@ -432,7 +559,31 @@ module IbmPowerHmc
|
|
432
559
|
# No need to sleep as the HMC already waits a bit before returning 204
|
433
560
|
break if response.code != 204 || !wait
|
434
561
|
end
|
435
|
-
FeedParser.new(response.body).objects(:Event)
|
562
|
+
FeedParser.new(response.body).objects(:Event).map do |e|
|
563
|
+
data = e.data.split("/") unless e.data.nil?
|
564
|
+
if !data.nil? && data.length >= 2 && data[-2].eql?("UserTask")
|
565
|
+
e.usertask = usertask(data.last)
|
566
|
+
end
|
567
|
+
e
|
568
|
+
end.compact
|
569
|
+
end
|
570
|
+
|
571
|
+
##
|
572
|
+
# @!method usertask(uuid = true)
|
573
|
+
# Retrieve details of an event of type "user task".
|
574
|
+
# @param uuid [String] UUID of user task.
|
575
|
+
# @return [Hash] Hash of user task attributes.
|
576
|
+
def usertask(uuid)
|
577
|
+
method_url = "/rest/api/ui/UserTask/#{uuid}"
|
578
|
+
response = request(:get, method_url)
|
579
|
+
j = JSON.parse(response.body)
|
580
|
+
if j['status'].eql?("Completed")
|
581
|
+
case j['key']
|
582
|
+
when "TEMPLATE_PARTITION_SAVE", "TEMPLATE_PARTITION_SAVE_AS", "TEMPLATE_PARTITION_CAPTURE"
|
583
|
+
j['template_uuid'] = templates_summary.find { |t| t.name.eql?(j['labelParams'].first) }&.uuid
|
584
|
+
end
|
585
|
+
end
|
586
|
+
j
|
436
587
|
end
|
437
588
|
|
438
589
|
##
|
@@ -562,8 +713,8 @@ module IbmPowerHmc
|
|
562
713
|
# Retrieve one or all SR-IOV Ethernet loical ports attached to a Logical Partition or a Virtual I/O Server.
|
563
714
|
# @param vm_type [String] "LogicalPartition" or "VirtualIOServer".
|
564
715
|
# @param lpar_uuid [String] UUID of the Logical Partition or the Virtual I/O Server.
|
565
|
-
# @param
|
566
|
-
# @return [Array<IbmPowerHmc::
|
716
|
+
# @param sriov_elp_uuid [String] UUID of the port to match (returns all ports if nil).
|
717
|
+
# @return [Array<IbmPowerHmc::SRIOVEthernetLogicalPort>, IbmPowerHmc::SRIOVEthernetLogicalPort] The list of ports.
|
567
718
|
def sriov_ethernet_port(vm_type, lpar_uuid, sriov_elp_uuid)
|
568
719
|
if sriov_elp_uuid.nil?
|
569
720
|
method_url = "/rest/api/uom/#{vm_type}/#{lpar_uuid}/SRIOVEthernetLogicalPort"
|
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
|
data/lib/ibm_power_hmc/parser.rb
CHANGED
@@ -74,9 +74,6 @@ module IbmPowerHmc
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
-
private_constant :Parser
|
78
|
-
private_constant :FeedParser
|
79
|
-
|
80
77
|
##
|
81
78
|
# HMC generic K2 non-REST object.
|
82
79
|
# @abstract
|
@@ -116,15 +113,34 @@ module IbmPowerHmc
|
|
116
113
|
attr.nil? ? elem.text&.strip : elem.attributes[attr]
|
117
114
|
end
|
118
115
|
|
119
|
-
def
|
116
|
+
def to_s
|
117
|
+
str = +"#{self.class.name}:\n"
|
118
|
+
self.class::ATTRS.each do |varname, _|
|
119
|
+
value = instance_variable_get("@#{varname}")
|
120
|
+
value = value.nil? ? "null" : "'#{value}'"
|
121
|
+
str << " #{varname}: #{value}\n"
|
122
|
+
end
|
123
|
+
str
|
124
|
+
end
|
125
|
+
|
126
|
+
def uuid_from_href(href, index = -1)
|
120
127
|
URI(href).path.split('/')[index]
|
121
128
|
end
|
122
129
|
|
123
130
|
def uuids_from_links(elem, index = -1)
|
124
131
|
xml.get_elements("#{elem}/link[@href]").map do |link|
|
125
|
-
|
132
|
+
uuid_from_href(link.attributes["href"], index)
|
126
133
|
end.compact
|
127
134
|
end
|
135
|
+
|
136
|
+
def collection_of(name, type)
|
137
|
+
objtype = Module.const_get("IbmPowerHmc::#{type}")
|
138
|
+
xml.get_elements("#{name}/#{type}").map do |elem|
|
139
|
+
objtype.new(elem)
|
140
|
+
end
|
141
|
+
rescue
|
142
|
+
[]
|
143
|
+
end
|
128
144
|
end
|
129
145
|
|
130
146
|
##
|
@@ -151,6 +167,12 @@ module IbmPowerHmc
|
|
151
167
|
attr_reader :uuid, :published, :href, :etag, :content_type
|
152
168
|
|
153
169
|
def initialize(entry)
|
170
|
+
if entry.name != "entry"
|
171
|
+
# We are inlined.
|
172
|
+
super(entry)
|
173
|
+
return
|
174
|
+
end
|
175
|
+
|
154
176
|
@uuid = entry.elements["id"]&.text
|
155
177
|
@published = Time.xmlschema(entry.elements["published"]&.text)
|
156
178
|
link = entry.elements["link[@rel='SELF']"]
|
@@ -160,6 +182,13 @@ module IbmPowerHmc
|
|
160
182
|
@content_type = content.attributes["type"]
|
161
183
|
super(content.elements.first)
|
162
184
|
end
|
185
|
+
|
186
|
+
def to_s
|
187
|
+
str = super
|
188
|
+
str << " uuid: '#{uuid}'\n" if defined?(@uuid)
|
189
|
+
str << " published: '#{published}'\n" if defined?(@published)
|
190
|
+
str
|
191
|
+
end
|
163
192
|
end
|
164
193
|
|
165
194
|
# HMC information
|
@@ -167,12 +196,19 @@ module IbmPowerHmc
|
|
167
196
|
ATTRS = {
|
168
197
|
:name => "ManagementConsoleName",
|
169
198
|
:build_level => "VersionInfo/BuildLevel",
|
170
|
-
:version => "BaseVersion"
|
199
|
+
:version => "BaseVersion",
|
200
|
+
:ssh_pubkey => "PublicSSHKeyValue"
|
171
201
|
}.freeze
|
172
202
|
|
173
203
|
def managed_systems_uuids
|
174
204
|
uuids_from_links("ManagedSystems")
|
175
205
|
end
|
206
|
+
|
207
|
+
def ssh_authkeys
|
208
|
+
xml.get_elements("AuthorizedKeysValue/AuthorizedKey").map do |elem|
|
209
|
+
elem.text&.strip
|
210
|
+
end.compact
|
211
|
+
end
|
176
212
|
end
|
177
213
|
|
178
214
|
# Managed System information
|
@@ -189,9 +225,17 @@ module IbmPowerHmc
|
|
189
225
|
:avail_cpus => "AssociatedSystemProcessorConfiguration/CurrentAvailableSystemProcessorUnits",
|
190
226
|
:mtype => "MachineTypeModelAndSerialNumber/MachineType",
|
191
227
|
:model => "MachineTypeModelAndSerialNumber/Model",
|
192
|
-
:serial => "MachineTypeModelAndSerialNumber/SerialNumber"
|
228
|
+
:serial => "MachineTypeModelAndSerialNumber/SerialNumber",
|
229
|
+
:vtpm_version => "AssociatedSystemSecurity/VirtualTrustedPlatformModuleVersion",
|
230
|
+
:vtpm_lpars => "AssociatedSystemSecurity/AvailableVirtualTrustedPlatformModulePartitions"
|
193
231
|
}.freeze
|
194
232
|
|
233
|
+
def cpu_compat_modes
|
234
|
+
xml.get_elements("AssociatedSystemProcessorConfiguration/SupportedPartitionProcessorCompatibilityModes").map do |elem|
|
235
|
+
elem.text&.strip
|
236
|
+
end.compact
|
237
|
+
end
|
238
|
+
|
195
239
|
def lpars_uuids
|
196
240
|
uuids_from_links("AssociatedLogicalPartitions")
|
197
241
|
end
|
@@ -200,6 +244,10 @@ module IbmPowerHmc
|
|
200
244
|
uuids_from_links("AssociatedVirtualIOServers")
|
201
245
|
end
|
202
246
|
|
247
|
+
def io_adapters
|
248
|
+
collection_of("AssociatedSystemIOConfiguration/IOSlots/IOSlot/RelatedIOAdapter", "IOAdapter")
|
249
|
+
end
|
250
|
+
|
203
251
|
def vswitches_uuids
|
204
252
|
uuids_from_links("AssociatedSystemIOConfiguration/AssociatedSystemVirtualNetwork/VirtualSwitches")
|
205
253
|
end
|
@@ -209,6 +257,18 @@ module IbmPowerHmc
|
|
209
257
|
end
|
210
258
|
end
|
211
259
|
|
260
|
+
# I/O Adapter information
|
261
|
+
class IOAdapter < AbstractNonRest
|
262
|
+
ATTRS = {
|
263
|
+
:id => "AdapterID",
|
264
|
+
:description => "Description",
|
265
|
+
:name => "DeviceName",
|
266
|
+
:type => "DeviceType",
|
267
|
+
:dr_name => "DynamicReconfigurationConnectorName",
|
268
|
+
:udid => "UniqueDeviceID"
|
269
|
+
}.freeze
|
270
|
+
end
|
271
|
+
|
212
272
|
# Common class for LPAR and VIOS
|
213
273
|
class BasePartition < AbstractRest
|
214
274
|
ATTRS = {
|
@@ -217,7 +277,8 @@ module IbmPowerHmc
|
|
217
277
|
:state => "PartitionState",
|
218
278
|
:type => "PartitionType",
|
219
279
|
:memory => "PartitionMemoryConfiguration/CurrentMemory",
|
220
|
-
:dedicated => "PartitionProcessorConfiguration/
|
280
|
+
:dedicated => "PartitionProcessorConfiguration/CurrentHasDedicatedProcessors",
|
281
|
+
:sharing_mode => "PartitionProcessorConfiguration/CurrentSharingMode",
|
221
282
|
:rmc_state => "ResourceMonitoringControlState",
|
222
283
|
:rmc_ipaddr => "ResourceMonitoringIPAddress",
|
223
284
|
:os => "OperatingSystemVersion",
|
@@ -228,18 +289,24 @@ module IbmPowerHmc
|
|
228
289
|
}.freeze
|
229
290
|
|
230
291
|
def sys_uuid
|
231
|
-
|
232
|
-
|
292
|
+
href = singleton("AssociatedManagedSystem", "href")
|
293
|
+
uuid_from_href(href) unless href.nil?
|
233
294
|
end
|
234
295
|
|
235
296
|
def net_adap_uuids
|
236
297
|
uuids_from_links("ClientNetworkAdapters")
|
237
298
|
end
|
238
299
|
|
300
|
+
def lhea_ports
|
301
|
+
collection_of("HostEthernetAdapterLogicalPorts", "HostEthernetAdapterLogicalPort")
|
302
|
+
end
|
303
|
+
|
239
304
|
def sriov_elp_uuids
|
240
305
|
uuids_from_links("SRIOVEthernetLogicalPorts")
|
241
306
|
end
|
242
307
|
|
308
|
+
# Setters
|
309
|
+
|
243
310
|
def name=(name)
|
244
311
|
xml.elements[ATTRS[:name]].text = name
|
245
312
|
@name = name
|
@@ -251,17 +318,91 @@ module IbmPowerHmc
|
|
251
318
|
def vnic_dedicated_uuids
|
252
319
|
uuids_from_links("DedicatedVirtualNICs")
|
253
320
|
end
|
321
|
+
|
322
|
+
def vscsi_client_uuids
|
323
|
+
uuids_from_links("VirtualSCSIClientAdapters")
|
324
|
+
end
|
325
|
+
|
326
|
+
def vfc_client_uuids
|
327
|
+
uuids_from_links("VirtualFibreChannelClientAdapters")
|
328
|
+
end
|
254
329
|
end
|
255
330
|
|
256
331
|
# VIOS information
|
257
332
|
class VirtualIOServer < BasePartition
|
333
|
+
def pvs
|
334
|
+
collection_of("PhysicalVolumes", "PhysicalVolume")
|
335
|
+
end
|
336
|
+
|
337
|
+
def rep
|
338
|
+
elem = xml.elements["MediaRepositories/VirtualMediaRepository"]
|
339
|
+
VirtualMediaRepository.new(elem) unless elem.nil?
|
340
|
+
end
|
341
|
+
|
342
|
+
def vscsi_mappings
|
343
|
+
collection_of("VirtualSCSIMappings", "VirtualSCSIMapping")
|
344
|
+
end
|
345
|
+
|
346
|
+
def vfc_mappings
|
347
|
+
collection_of("VirtualFibreChannelMappings", "VirtualFibreChannelMapping")
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
# Empty parent class to match K2 schema definition
|
352
|
+
class VirtualSCSIStorage < AbstractNonRest; end
|
353
|
+
|
354
|
+
# Physical Volume information
|
355
|
+
class PhysicalVolume < VirtualSCSIStorage
|
356
|
+
ATTRS = {
|
357
|
+
:location => "LocationCode",
|
358
|
+
:description => "Description",
|
359
|
+
:is_available => "AvailableForUsage",
|
360
|
+
:capacity => "VolumeCapacity",
|
361
|
+
:name => "VolumeName",
|
362
|
+
:is_fc => "IsFibreChannelBacked",
|
363
|
+
:udid => "VolumeUniqueID"
|
364
|
+
}.freeze
|
365
|
+
end
|
366
|
+
|
367
|
+
# Logical Volume information
|
368
|
+
class VirtualDisk < VirtualSCSIStorage
|
369
|
+
ATTRS = {
|
370
|
+
:name => "DiskName",
|
371
|
+
:label => "DiskLabel",
|
372
|
+
:capacity => "DiskCapacity", # In GiB
|
373
|
+
:psize => "PartitionSize",
|
374
|
+
:vg => "VolumeGroup",
|
375
|
+
:udid => "UniqueDeviceID"
|
376
|
+
}.freeze
|
377
|
+
end
|
378
|
+
|
379
|
+
# Virtual CD-ROM information
|
380
|
+
class VirtualOpticalMedia < VirtualSCSIStorage
|
381
|
+
ATTRS = {
|
382
|
+
:name => "MediaName",
|
383
|
+
:udid => "MediaUDID",
|
384
|
+
:mount_opts => "MountType",
|
385
|
+
:size => "Size" # in GiB
|
386
|
+
}.freeze
|
387
|
+
end
|
388
|
+
|
389
|
+
# Virtual Media Repository information
|
390
|
+
class VirtualMediaRepository < AbstractNonRest
|
391
|
+
ATTRS = {
|
392
|
+
:name => "RepositoryName",
|
393
|
+
:size => "RepositorySize" # in GiB
|
394
|
+
}.freeze
|
395
|
+
|
396
|
+
def vopts
|
397
|
+
collection_of("OpticalMedia", "VirtualOpticalMedia")
|
398
|
+
end
|
258
399
|
end
|
259
400
|
|
260
401
|
# Virtual Switch information
|
261
402
|
class VirtualSwitch < AbstractRest
|
262
403
|
ATTRS = {
|
263
404
|
:id => "SwitchID",
|
264
|
-
:mode => "SwitchMode",
|
405
|
+
:mode => "SwitchMode", # "VEB", "VEPA"
|
265
406
|
:name => "SwitchName"
|
266
407
|
}.freeze
|
267
408
|
|
@@ -285,7 +426,7 @@ module IbmPowerHmc
|
|
285
426
|
|
286
427
|
def vswitch_uuid
|
287
428
|
href = singleton("AssociatedSwitch", "href")
|
288
|
-
|
429
|
+
uuid_from_href(href) unless href.nil?
|
289
430
|
end
|
290
431
|
|
291
432
|
def lpars_uuids
|
@@ -324,23 +465,364 @@ module IbmPowerHmc
|
|
324
465
|
end
|
325
466
|
end
|
326
467
|
|
327
|
-
|
328
|
-
|
468
|
+
# LP-HEA information
|
469
|
+
class EthernetBackingDevice < IOAdapter; end
|
470
|
+
class HostEthernetAdapterLogicalPort < EthernetBackingDevice
|
471
|
+
ATTRS = ATTRS.merge({
|
329
472
|
:macaddr => "MACAddress",
|
330
|
-
:
|
473
|
+
:port_id => "LogicalPortID",
|
474
|
+
:state => "PortState",
|
475
|
+
:location => "HEALogicalPortPhysicalLocation"
|
476
|
+
}.freeze)
|
477
|
+
end
|
478
|
+
|
479
|
+
# Virtual NIC dedicated information
|
480
|
+
class VirtualNICDedicated < VirtualIOAdapter
|
481
|
+
ATTRS = ATTRS.merge({
|
482
|
+
:location => "DynamicReconfigurationConnectorName", # overrides VirtualIOAdapter
|
483
|
+
:macaddr => "Details/MACAddress",
|
484
|
+
:os_devname => "Details/OSDeviceName",
|
485
|
+
:port_vlan_id => "Details/PortVLANID"
|
486
|
+
}.freeze)
|
487
|
+
end
|
488
|
+
|
489
|
+
# SR-IOV Configured Logical Port information
|
490
|
+
class SRIOVConfiguredLogicalPort < AbstractRest
|
491
|
+
ATTRS = {
|
492
|
+
:port_id => "LogicalPortID",
|
493
|
+
:port_vlan_id => "PortVLANID",
|
494
|
+
:location => "LocationCode",
|
495
|
+
:dr_name => "DynamicReconfigurationConnectorName",
|
496
|
+
:devname => "DeviceName",
|
497
|
+
:capacity => "ConfiguredCapacity"
|
498
|
+
}.freeze
|
499
|
+
|
500
|
+
def lpars_uuids
|
501
|
+
uuids_from_links("AssociatedLogicalPartitions")
|
502
|
+
end
|
503
|
+
end
|
504
|
+
|
505
|
+
# SR-IOV Ethernet Logical Port information
|
506
|
+
class SRIOVEthernetLogicalPort < SRIOVConfiguredLogicalPort
|
507
|
+
ATTRS = ATTRS.merge({
|
508
|
+
:macaddr => "MACAddress"
|
509
|
+
}.freeze)
|
510
|
+
end
|
511
|
+
|
512
|
+
# Virtual SCSI mapping information
|
513
|
+
class VirtualSCSIMapping < AbstractNonRest
|
514
|
+
def lpar_uuid
|
515
|
+
href = singleton("AssociatedLogicalPartition", "href")
|
516
|
+
uuid_from_href(href) unless href.nil?
|
517
|
+
end
|
518
|
+
|
519
|
+
def client
|
520
|
+
elem = xml.elements["ClientAdapter"]
|
521
|
+
VirtualSCSIClientAdapter.new(elem) unless elem.nil?
|
522
|
+
end
|
523
|
+
|
524
|
+
def server
|
525
|
+
elem = xml.elements["ServerAdapter"]
|
526
|
+
VirtualSCSIServerAdapter.new(elem) unless elem.nil?
|
527
|
+
end
|
528
|
+
|
529
|
+
def storage
|
530
|
+
# Possible storage types are:
|
531
|
+
# LogicalUnit, PhysicalVolume, VirtualDisk, VirtualOpticalMedia
|
532
|
+
elem = xml.elements["Storage/*[1]"]
|
533
|
+
Module.const_get("IbmPowerHmc::#{elem.name}").new(elem) unless elem.nil?
|
534
|
+
end
|
535
|
+
|
536
|
+
def device
|
537
|
+
# Possible backing device types are:
|
538
|
+
# LogicalVolumeVirtualTargetDevice, PhysicalVolumeVirtualTargetDevice,
|
539
|
+
# SharedStoragePoolLogicalUnitVirtualTargetDevice, VirtualOpticalTargetDevice
|
540
|
+
elem = xml.elements["TargetDevice/*[1]"]
|
541
|
+
Module.const_get("IbmPowerHmc::#{elem.name}").new(elem) unless elem.nil?
|
542
|
+
end
|
543
|
+
end
|
544
|
+
|
545
|
+
# Virtual SCSI adapter (common class for Client and Server)
|
546
|
+
class VirtualSCSIAdapter < VirtualIOAdapter
|
547
|
+
ATTRS = ATTRS.merge({
|
548
|
+
:name => "AdapterName",
|
549
|
+
:backdev => "BackingDeviceName",
|
550
|
+
:remote_backdev => "RemoteBackingDeviceName",
|
551
|
+
:remote_lpar_id => "RemoteLogicalPartitionID",
|
552
|
+
:remote_slot => "RemoteSlotNumber",
|
553
|
+
:server_location => "ServerLocationCode",
|
554
|
+
:udid => "UniqueDeviceID"
|
555
|
+
}.freeze)
|
556
|
+
end
|
557
|
+
|
558
|
+
# Virtual SCSI client adapter information
|
559
|
+
class VirtualSCSIClientAdapter < VirtualSCSIAdapter
|
560
|
+
def server
|
561
|
+
elem = xml.elements["ServerAdapter"]
|
562
|
+
VirtualSCSIServerAdapter.new(elem) unless elem.nil?
|
563
|
+
end
|
564
|
+
|
565
|
+
def vios_uuid
|
566
|
+
href = singleton("ConnectingPartition", "href")
|
567
|
+
uuid_from_href(href) unless href.nil?
|
568
|
+
end
|
569
|
+
end
|
570
|
+
|
571
|
+
# Virtual SCSI server adapter information
|
572
|
+
class VirtualSCSIServerAdapter < VirtualSCSIAdapter; end
|
573
|
+
|
574
|
+
# Virtual target device information
|
575
|
+
class VirtualTargetDevice < AbstractNonRest
|
576
|
+
ATTRS = {
|
577
|
+
:lun => "LogicalUnitAddress",
|
578
|
+
:parent => "ParentName",
|
579
|
+
:target => "TargetName",
|
580
|
+
:udid => "UniqueDeviceID"
|
581
|
+
}.freeze
|
582
|
+
end
|
583
|
+
|
584
|
+
# LV backing device information
|
585
|
+
class LogicalVolumeVirtualTargetDevice < VirtualTargetDevice; end
|
586
|
+
|
587
|
+
# PV backing device information
|
588
|
+
class PhysicalVolumeVirtualTargetDevice < VirtualTargetDevice; end
|
589
|
+
|
590
|
+
# LU backing device information
|
591
|
+
class SharedStoragePoolLogicalUnitVirtualTargetDevice < VirtualTargetDevice
|
592
|
+
ATTRS = ATTRS.merge({
|
593
|
+
:cluster_id => "ClusterID",
|
594
|
+
:path => "PathName",
|
595
|
+
:raid_level => "RAIDLevel"
|
596
|
+
}.freeze)
|
597
|
+
end
|
598
|
+
|
599
|
+
# Virtual CD backing device information
|
600
|
+
class VirtualOpticalTargetDevice < VirtualTargetDevice
|
601
|
+
def media
|
602
|
+
elem = xml.elements["VirtualOpticalMedia"]
|
603
|
+
VirtualOpticalMedia.new(elem) unless elem.nil?
|
604
|
+
end
|
605
|
+
end
|
606
|
+
|
607
|
+
# VFC mapping information
|
608
|
+
class VirtualFibreChannelMapping < AbstractNonRest
|
609
|
+
def lpar_uuid
|
610
|
+
href = singleton("AssociatedLogicalPartition", "href")
|
611
|
+
uuid_from_href(href) unless href.nil?
|
612
|
+
end
|
613
|
+
|
614
|
+
def client
|
615
|
+
elem = xml.elements["ClientAdapter"]
|
616
|
+
VirtualFibreChannelClientAdapter.new(elem) unless elem.nil?
|
617
|
+
end
|
618
|
+
|
619
|
+
def server
|
620
|
+
elem = xml.elements["ServerAdapter"]
|
621
|
+
VirtualFibreChannelServerAdapter.new(elem) unless elem.nil?
|
622
|
+
end
|
623
|
+
|
624
|
+
def port
|
625
|
+
elem = xml.elements["Port"]
|
626
|
+
PhysicalFibreChannelPort.new(elem) unless elem.nil?
|
627
|
+
end
|
628
|
+
end
|
629
|
+
|
630
|
+
# VFC adapter information
|
631
|
+
class VirtualFibreChannelAdapter < VirtualIOAdapter
|
632
|
+
ATTRS = ATTRS.merge({
|
633
|
+
:name => "AdapterName",
|
634
|
+
:lpar_id => "ConnectingPartitionID",
|
635
|
+
:slot => "ConnectingVirtualSlotNumber",
|
636
|
+
:udid => "UniqueDeviceID"
|
637
|
+
}.freeze)
|
638
|
+
|
639
|
+
def lpar_uuid
|
640
|
+
href = singleton("ConnectingPartition", "href")
|
641
|
+
uuid_from_href(href) unless href.nil?
|
642
|
+
end
|
643
|
+
end
|
644
|
+
|
645
|
+
# VFC client information
|
646
|
+
class VirtualFibreChannelClientAdapter < VirtualFibreChannelAdapter
|
647
|
+
def nport_loggedin
|
648
|
+
collection_of("NportLoggedInStatus", "VirtualFibreChannelNPortLoginStatus")
|
649
|
+
end
|
650
|
+
|
651
|
+
def server
|
652
|
+
elem = xml.elements["ServerAdapter"]
|
653
|
+
VirtualFibreChannelServerAdapter.new(elem) unless elem.nil?
|
654
|
+
end
|
655
|
+
|
656
|
+
def wwpns
|
657
|
+
singleton("WWPNs")&.split
|
658
|
+
end
|
659
|
+
|
660
|
+
def os_disks
|
661
|
+
xml.get_elements("OperatingSystemDisks/OperatingSystemDisk/Name").map do |elem|
|
662
|
+
elem.text&.strip
|
663
|
+
end.compact
|
664
|
+
end
|
665
|
+
end
|
666
|
+
|
667
|
+
# VFC port status
|
668
|
+
class VirtualFibreChannelNPortLoginStatus < AbstractNonRest
|
669
|
+
ATTRS = {
|
670
|
+
:wwpn => "WWPN",
|
671
|
+
:wwpn_status => "WWPNStatus",
|
672
|
+
:loggedin_by => "LoggedInBy",
|
673
|
+
:reason => "StatusReason"
|
674
|
+
}.freeze
|
675
|
+
end
|
676
|
+
|
677
|
+
# VFC server information
|
678
|
+
class VirtualFibreChannelServerAdapter < VirtualFibreChannelAdapter
|
679
|
+
ATTRS = ATTRS.merge({
|
680
|
+
:map_port => "MapPort"
|
681
|
+
}.freeze)
|
682
|
+
|
683
|
+
def port
|
684
|
+
elem = xml.elements["PhysicalPort"]
|
685
|
+
PhysicalFibreChannelPort.new(elem) unless elem.nil?
|
686
|
+
end
|
687
|
+
end
|
688
|
+
|
689
|
+
# FC port information
|
690
|
+
class PhysicalFibreChannelPort < AbstractNonRest
|
691
|
+
ATTRS = {
|
692
|
+
:location => "LocationCode",
|
693
|
+
:name => "PortName",
|
694
|
+
:udid => "UniqueDeviceID",
|
695
|
+
:wwpn => "WWPN",
|
696
|
+
:wwnn => "WWNN",
|
697
|
+
:avail_ports => "AvailablePorts",
|
698
|
+
:total_ports => "TotalPorts"
|
699
|
+
}.freeze
|
700
|
+
|
701
|
+
def pvs
|
702
|
+
collection_of("PhysicalVolumes", "PhysicalVolume")
|
703
|
+
end
|
704
|
+
end
|
705
|
+
|
706
|
+
# Cluster information
|
707
|
+
class Cluster < AbstractRest
|
708
|
+
ATTRS = {
|
709
|
+
:name => "ClusterName",
|
710
|
+
:id => "ClusterID",
|
711
|
+
:tier_capable => "ClusterCapabilities/IsTierCapable"
|
712
|
+
}.freeze
|
713
|
+
|
714
|
+
def repopvs
|
715
|
+
collection_of("RepositoryDisk", "PhysicalVolume")
|
716
|
+
end
|
717
|
+
|
718
|
+
def ssp_uuid
|
719
|
+
href = singleton("ClusterSharedStoragePool", "href")
|
720
|
+
uuid_from_href(href) unless href.nil?
|
721
|
+
end
|
722
|
+
|
723
|
+
def nodes
|
724
|
+
collection_of("Node", "Node")
|
725
|
+
end
|
726
|
+
end
|
727
|
+
|
728
|
+
# Cluster node information
|
729
|
+
class Node < AbstractNonRest
|
730
|
+
ATTRS = {
|
731
|
+
:hostname => "HostName",
|
732
|
+
:lpar_id => "PartitionID",
|
733
|
+
:state => "State",
|
734
|
+
:ioslevel => "VirtualIOServerLevel"
|
735
|
+
}.freeze
|
736
|
+
|
737
|
+
def vios_uuid
|
738
|
+
href = singleton("VirtualIOServer", "href")
|
739
|
+
uuid_from_href(href) unless href.nil?
|
740
|
+
end
|
741
|
+
end
|
742
|
+
|
743
|
+
# SSP information
|
744
|
+
class SharedStoragePool < AbstractRest
|
745
|
+
ATTRS = {
|
746
|
+
:id => "SharedStoragePoolID",
|
747
|
+
:name => "StoragePoolName",
|
748
|
+
:udid => "UniqueDeviceID",
|
749
|
+
:capacity => "Capacity",
|
750
|
+
:free_space => "FreeSpace",
|
751
|
+
:overcommit => "OverCommitSpace",
|
752
|
+
:total_lu_size => "TotalLogicalUnitSize",
|
753
|
+
:alert_threshold => "AlertThreshold"
|
754
|
+
}.freeze
|
755
|
+
|
756
|
+
def cluster_uuid
|
757
|
+
href = singleton("AssociatedCluster", "href")
|
758
|
+
uuid_from_href(href) unless href.nil?
|
759
|
+
end
|
760
|
+
|
761
|
+
def pvs
|
762
|
+
collection_of("PhysicalVolumes", "PhysicalVolume")
|
763
|
+
end
|
764
|
+
|
765
|
+
def tiers_uuids
|
766
|
+
uuids_from_links("AssociatedTiers")
|
767
|
+
end
|
768
|
+
|
769
|
+
def lus
|
770
|
+
collection_of("LogicalUnits", "LogicalUnit")
|
771
|
+
end
|
772
|
+
end
|
773
|
+
|
774
|
+
# SSP tier information
|
775
|
+
class Tier < AbstractRest
|
776
|
+
ATTRS = {
|
777
|
+
:name => "Name",
|
778
|
+
:udid => "UniqueDeviceID",
|
779
|
+
:type => "Type",
|
780
|
+
:capacity => "Capacity",
|
781
|
+
:total_lu_size => "TotalLogicalUnitSize",
|
782
|
+
:is_default => "IsDefault",
|
783
|
+
:free_space => "FreeSpace"
|
784
|
+
}.freeze
|
785
|
+
|
786
|
+
def ssp_uuid
|
787
|
+
href = singleton("AssociatedSharedStoragePool", "href")
|
788
|
+
uuid_from_href(href) unless href.nil?
|
789
|
+
end
|
790
|
+
|
791
|
+
def lus_uuids
|
792
|
+
uuids_from_links("AssociatedLogicalUnits")
|
793
|
+
end
|
794
|
+
end
|
795
|
+
|
796
|
+
# SSP LU information
|
797
|
+
class LogicalUnit < VirtualSCSIStorage
|
798
|
+
ATTRS = {
|
799
|
+
:name => "UnitName",
|
800
|
+
:capacity => "UnitCapacity",
|
801
|
+
:udid => "UniqueDeviceID",
|
802
|
+
:thin => "ThinDevice",
|
803
|
+
:type => "LogicalUnitType",
|
804
|
+
:in_use => "InUse"
|
805
|
+
}.freeze
|
806
|
+
end
|
807
|
+
|
808
|
+
class PartitionTemplateSummary < AbstractRest
|
809
|
+
ATTRS = {
|
810
|
+
:name => "partitionTemplateName"
|
331
811
|
}.freeze
|
332
812
|
end
|
333
813
|
|
334
|
-
class
|
814
|
+
class PartitionTemplate < AbstractRest
|
335
815
|
ATTRS = {
|
336
|
-
:
|
337
|
-
:
|
338
|
-
:
|
816
|
+
:name => "partitionTemplateName",
|
817
|
+
:description => "description",
|
818
|
+
:os => "logicalPartitionConfig/osVersion",
|
819
|
+
:memory => "logicalPartitionConfig/memoryConfiguration/currMemory"
|
339
820
|
}.freeze
|
340
821
|
end
|
341
822
|
|
342
823
|
# HMC Event
|
343
824
|
class Event < AbstractRest
|
825
|
+
attr_accessor :usertask
|
344
826
|
ATTRS = {
|
345
827
|
:id => "EventID",
|
346
828
|
:type => "EventType",
|
data/lib/ibm_power_hmc/pcm.rb
CHANGED
File without changes
|
data/lib/ibm_power_hmc.rb
CHANGED
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibm_power_hmc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- IBM Power
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.1'
|
27
27
|
description: A Ruby gem for interacting with the IBM Hardware Management Console (HMC).
|
28
|
-
email:
|
28
|
+
email:
|
29
29
|
executables: []
|
30
30
|
extensions: []
|
31
31
|
extra_rdoc_files: []
|
@@ -55,7 +55,7 @@ metadata:
|
|
55
55
|
homepage_uri: http://github.com/IBM/ibm_power_hmc_sdk_ruby
|
56
56
|
source_code_uri: http://github.com/IBM/ibm_power_hmc_sdk_ruby
|
57
57
|
changelog_uri: http://github.com/IBM/ibm_power_hmc_sdk_ruby/blob/master/CHANGELOG.md
|
58
|
-
post_install_message:
|
58
|
+
post_install_message:
|
59
59
|
rdoc_options: []
|
60
60
|
require_paths:
|
61
61
|
- lib
|
@@ -70,8 +70,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '0'
|
72
72
|
requirements: []
|
73
|
-
rubygems_version: 3.1.
|
74
|
-
signing_key:
|
73
|
+
rubygems_version: 3.1.2
|
74
|
+
signing_key:
|
75
75
|
specification_version: 4
|
76
76
|
summary: IBM Power HMC Ruby gem.
|
77
77
|
test_files: []
|