ibm_power_hmc 0.10.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 +0 -0
- data/Rakefile +0 -0
- data/ibm_power_hmc.gemspec +0 -0
- data/lib/ibm_power_hmc/connection.rb +111 -5
- data/lib/ibm_power_hmc/job.rb +15 -4
- data/lib/ibm_power_hmc/parser.rb +113 -10
- 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: 669594ada9babea18977e0e3870c6ea0e27305cd74660dbe2d3bbc70551ed4b4
|
4
|
+
data.tar.gz: 76304c4b431924825adfc32dc14ff31c0951f0c6aae294010331c82a54ca384d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 620c2c717f08248e38b1fec9ddec4dc4bea48537ba59a2ad5071cb16b04c93a35fdd05be492eb62de0c67b170881c3c0e7fe57bedfd7c91e92069ac51961bc06
|
7
|
+
data.tar.gz: c79795ef430594a26709e8eb71f96ffca4689cf1e362ff7b8531e15e36d9e2fd73c396387a11634c6eea7f29d2bbc82267f952053a3fe40a0a909f36107a3451
|
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
File without changes
|
data/Rakefile
CHANGED
File without changes
|
data/ibm_power_hmc.gemspec
CHANGED
File without changes
|
@@ -157,7 +157,7 @@ module IbmPowerHmc
|
|
157
157
|
# @param new_name [String] The new name of the logical partition.
|
158
158
|
def rename_lpar(lpar_uuid, new_name)
|
159
159
|
method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}"
|
160
|
-
|
160
|
+
modify_object_attributes(method_url, {:name => new_name})
|
161
161
|
end
|
162
162
|
|
163
163
|
##
|
@@ -388,9 +388,10 @@ module IbmPowerHmc
|
|
388
388
|
##
|
389
389
|
# @!method templates_summary
|
390
390
|
# Retrieve the list of partition template summaries.
|
391
|
+
# @param draft [Boolean] Retrieve draft templates as well
|
391
392
|
# @return [Array<IbmPowerHmc::PartitionTemplateSummary>] The list of partition template summaries.
|
392
|
-
def templates_summary
|
393
|
-
method_url = "/rest/api/templates/PartitionTemplate"
|
393
|
+
def templates_summary(draft = false)
|
394
|
+
method_url = "/rest/api/templates/PartitionTemplate#{'?draft=false' unless draft}"
|
394
395
|
response = request(:get, method_url)
|
395
396
|
FeedParser.new(response.body).objects(:PartitionTemplateSummary)
|
396
397
|
end
|
@@ -398,9 +399,10 @@ module IbmPowerHmc
|
|
398
399
|
##
|
399
400
|
# @!method templates
|
400
401
|
# Retrieve the list of partition templates.
|
402
|
+
# @param draft [Boolean] Retrieve draft templates as well
|
401
403
|
# @return [Array<IbmPowerHmc::PartitionTemplate>] The list of partition templates.
|
402
|
-
def templates
|
403
|
-
method_url = "/rest/api/templates/PartitionTemplate?detail=full"
|
404
|
+
def templates(draft = false)
|
405
|
+
method_url = "/rest/api/templates/PartitionTemplate?detail=full#{'&draft=false' unless draft}"
|
404
406
|
response = request(:get, method_url)
|
405
407
|
FeedParser.new(response.body).objects(:PartitionTemplate)
|
406
408
|
end
|
@@ -439,6 +441,94 @@ module IbmPowerHmc
|
|
439
441
|
job
|
440
442
|
end
|
441
443
|
|
444
|
+
##
|
445
|
+
# @!method template_check(template_uuid, target_sys_uuid, sync = true)
|
446
|
+
# Start Template Check job (first of three steps to deploy an LPAR from a Template).
|
447
|
+
# @param template_uuid [String] The UUID of the Template to deploy an LPAR from.
|
448
|
+
# @param target_sys_uuid [String] The UUID of the Managed System to deploy the LPAR on.
|
449
|
+
# @param sync [Boolean] Start the job and wait for its completion.
|
450
|
+
# @return [IbmPowerHmc::HmcJob] The HMC job.
|
451
|
+
def template_check(template_uuid, target_sys_uuid, sync = true)
|
452
|
+
# Need to include session token in payload so make sure we are logged in
|
453
|
+
logon if @api_session_token.nil?
|
454
|
+
method_url = "/rest/api/templates/PartitionTemplate/#{template_uuid}/do/check"
|
455
|
+
params = {
|
456
|
+
"TargetUuid" => target_sys_uuid,
|
457
|
+
"K_X_API_SESSION_MEMENTO" => @api_session_token
|
458
|
+
}
|
459
|
+
job = HmcJob.new(self, method_url, "Check", "PartitionTemplate", params)
|
460
|
+
job.run if sync
|
461
|
+
job
|
462
|
+
end
|
463
|
+
|
464
|
+
##
|
465
|
+
# @!method template_transform(draft_template_uuid, target_sys_uuid, sync = true)
|
466
|
+
# Start Template Transform job (second of three steps to deploy an LPAR from a Template).
|
467
|
+
# @param draft_template_uuid [String] The UUID of the Draft Template created by the Template Check job.
|
468
|
+
# @param target_sys_uuid [String] The UUID of the Managed System to deploy the LPAR on.
|
469
|
+
# @param sync [Boolean] Start the job and wait for its completion.
|
470
|
+
# @return [IbmPowerHmc::HmcJob] The HMC job.
|
471
|
+
def template_transform(draft_template_uuid, target_sys_uuid, sync = true)
|
472
|
+
# Need to include session token in payload so make sure we are logged in
|
473
|
+
logon if @api_session_token.nil?
|
474
|
+
method_url = "/rest/api/templates/PartitionTemplate/#{draft_template_uuid}/do/transform"
|
475
|
+
params = {
|
476
|
+
"TargetUuid" => target_sys_uuid,
|
477
|
+
"K_X_API_SESSION_MEMENTO" => @api_session_token
|
478
|
+
}
|
479
|
+
job = HmcJob.new(self, method_url, "Transform", "PartitionTemplate", params)
|
480
|
+
job.run if sync
|
481
|
+
job
|
482
|
+
end
|
483
|
+
|
484
|
+
##
|
485
|
+
# @!method template_deploy(draft_template_uuid, target_sys_uuid, sync = true)
|
486
|
+
# Start Template Deploy job (last of three steps to deploy an LPAR from a Template).
|
487
|
+
# @param draft_template_uuid [String] The UUID of the Draft Template created by the Template Check job.
|
488
|
+
# @param target_sys_uuid [String] The UUID of the Managed System to deploy the LPAR on.
|
489
|
+
# @param sync [Boolean] Start the job and wait for its completion.
|
490
|
+
# @return [IbmPowerHmc::HmcJob] The HMC job.
|
491
|
+
def template_deploy(draft_template_uuid, target_sys_uuid, sync = true)
|
492
|
+
# Need to include session token in payload so make sure we are logged in
|
493
|
+
logon if @api_session_token.nil?
|
494
|
+
method_url = "/rest/api/templates/PartitionTemplate/#{draft_template_uuid}/do/deploy"
|
495
|
+
params = {
|
496
|
+
"TargetUuid" => target_sys_uuid,
|
497
|
+
"TemplateUuid" => draft_template_uuid,
|
498
|
+
"K_X_API_SESSION_MEMENTO" => @api_session_token
|
499
|
+
}
|
500
|
+
job = HmcJob.new(self, method_url, "Deploy", "PartitionTemplate", params)
|
501
|
+
job.run if sync
|
502
|
+
job
|
503
|
+
end
|
504
|
+
|
505
|
+
##
|
506
|
+
# @!method template_provision(template_uuid, target_sys_uuid, changes)
|
507
|
+
# Deploy Logical Partition from a Template (performs Check, Transform and Deploy steps in a single method).
|
508
|
+
# @param template_uuid [String] The UUID of the Template to deploy an LPAR from.
|
509
|
+
# @param target_sys_uuid [String] The UUID of the Managed System to deploy the LPAR on.
|
510
|
+
# @param changes [Hash] Modifications to apply to the Template before deploying Logical Partition.
|
511
|
+
# @return [String] The UUID of the deployed Logical Partition.
|
512
|
+
def template_provision(template_uuid, target_sys_uuid, changes)
|
513
|
+
# Need to include session token in payload so make sure we are logged in
|
514
|
+
logon if @api_session_token.nil?
|
515
|
+
draft_uuid = template_check(template_uuid, target_sys_uuid).results["TEMPLATE_UUID"]
|
516
|
+
template_transform(draft_uuid, target_sys_uuid)
|
517
|
+
template_modify(draft_uuid, changes)
|
518
|
+
template_deploy(draft_uuid, target_sys_uuid).results["PartitionUuid"]
|
519
|
+
end
|
520
|
+
|
521
|
+
##
|
522
|
+
# @!method template(template_uuid, changes)
|
523
|
+
# modify_object_attributes wrapper for templates.
|
524
|
+
# @param template_uuid [String] UUID of the partition template to modify.
|
525
|
+
# @param changes [Hash] Hash of changes to make.
|
526
|
+
# @return [IbmPowerHmc::PartitionTemplate] The partition template.
|
527
|
+
def template_modify(template_uuid, changes)
|
528
|
+
method_url = "/rest/api/templates/PartitionTemplate/#{template_uuid}"
|
529
|
+
modify_object_attributes(method_url, changes)
|
530
|
+
end
|
531
|
+
|
442
532
|
##
|
443
533
|
# @!method poweron_lpar(lpar_uuid, params = {}, sync = true)
|
444
534
|
# Power on a logical partition.
|
@@ -701,6 +791,22 @@ module IbmPowerHmc
|
|
701
791
|
end
|
702
792
|
end
|
703
793
|
|
794
|
+
# @!method modify_object_attributes(method_url, headers = {}, attempts = 5)
|
795
|
+
# Modify an object at a specified URI.
|
796
|
+
# @param method_url [String] The URL of the object to modify.
|
797
|
+
# @param changes [Hash] Hash of changes to make. Key is the attribute modify/create (as defined in the AbstractNonRest subclass). A value of nil removes the attribute.
|
798
|
+
# @param headers [Hash] HTTP headers.
|
799
|
+
# @param attempts [Integer] Maximum number of retries.
|
800
|
+
# @yield [obj] The object to modify.
|
801
|
+
# @yieldparam obj [IbmPowerHmc::AbstractRest] The object to modify.
|
802
|
+
def modify_object_attributes(method_url, changes, headers = {}, attempts = 5)
|
803
|
+
modify_object(method_url, headers, attempts) do |obj|
|
804
|
+
changes.each do |key, value|
|
805
|
+
obj.send("#{key}=", value)
|
806
|
+
end
|
807
|
+
end
|
808
|
+
end
|
809
|
+
|
704
810
|
##
|
705
811
|
# @!method network_adapter(vm_type, lpar_uuid, netadap_uuid)
|
706
812
|
# Retrieve one or all virtual ethernet network adapters attached to a Logical Partition or a Virtual I/O Server.
|
data/lib/ibm_power_hmc/job.rb
CHANGED
@@ -5,6 +5,16 @@ module IbmPowerHmc
|
|
5
5
|
# HMC Job for long running operations.
|
6
6
|
class HmcJob
|
7
7
|
class JobNotStarted < StandardError; end
|
8
|
+
class JobFailed < StandardError
|
9
|
+
def initialize(job)
|
10
|
+
super
|
11
|
+
@job = job
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
"id=\"#{@job.id}\" operation=\"#{@job.group}/#{@job.operation}\" status=\"#{@job.status}\" message=\"#{@job.message}\" exception_text=\"#{@job.results['ExceptionText']}\""
|
16
|
+
end
|
17
|
+
end
|
8
18
|
|
9
19
|
##
|
10
20
|
# @!method initialize(conn, method_url, operation, group, params = {})
|
@@ -52,7 +62,7 @@ module IbmPowerHmc
|
|
52
62
|
end
|
53
63
|
|
54
64
|
# @return [Hash] The job results returned by the HMC.
|
55
|
-
attr_reader :results
|
65
|
+
attr_reader :results, :last_status
|
56
66
|
|
57
67
|
##
|
58
68
|
# @!method status
|
@@ -65,9 +75,9 @@ module IbmPowerHmc
|
|
65
75
|
:content_type => "application/vnd.ibm.powervm.web+xml; type=JobRequest"
|
66
76
|
}
|
67
77
|
response = @conn.request(:get, @href, headers)
|
68
|
-
|
69
|
-
@results =
|
70
|
-
|
78
|
+
@last_status = Parser.new(response.body).object(:JobResponse)
|
79
|
+
@results = @last_status.results
|
80
|
+
@last_status.status
|
71
81
|
end
|
72
82
|
|
73
83
|
##
|
@@ -99,6 +109,7 @@ module IbmPowerHmc
|
|
99
109
|
def run(timeout = 120, poll_interval = 0)
|
100
110
|
start
|
101
111
|
wait(timeout, poll_interval)
|
112
|
+
raise JobFailed.new(@last_status) unless @last_status.status.eql?("COMPLETED_OK")
|
102
113
|
ensure
|
103
114
|
delete if defined?(@href)
|
104
115
|
end
|
data/lib/ibm_power_hmc/parser.rb
CHANGED
@@ -95,10 +95,35 @@ module IbmPowerHmc
|
|
95
95
|
def define_attr(varname, xpath)
|
96
96
|
value = singleton(xpath)
|
97
97
|
self.class.__send__(:attr_reader, varname)
|
98
|
+
self.class.__send__(:define_method, "#{varname}=") do |v|
|
99
|
+
if v.nil?
|
100
|
+
xml.elements.delete(xpath)
|
101
|
+
else
|
102
|
+
create_element(xpath) if xml.elements[xpath].nil?
|
103
|
+
xml.elements[xpath].text = v
|
104
|
+
end
|
105
|
+
instance_variable_set("@#{varname}", v)
|
106
|
+
end
|
98
107
|
instance_variable_set("@#{varname}", value)
|
99
108
|
end
|
100
109
|
private :define_attr
|
101
110
|
|
111
|
+
##
|
112
|
+
# @!method create_element(xpath)
|
113
|
+
# Create a new XML element.
|
114
|
+
# @param xpath [String] The XPath of the XML element to create.
|
115
|
+
def create_element(xpath)
|
116
|
+
cur = xml
|
117
|
+
xpath.split("/").each do |el|
|
118
|
+
p = cur.elements[el]
|
119
|
+
if p.nil?
|
120
|
+
cur = cur.add_element(el)
|
121
|
+
else
|
122
|
+
cur = p
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
102
127
|
##
|
103
128
|
# @!method singleton(xpath, attr = nil)
|
104
129
|
# Get the text (or the value of a specified attribute) of an XML element.
|
@@ -327,13 +352,6 @@ module IbmPowerHmc
|
|
327
352
|
def sriov_elp_uuids
|
328
353
|
uuids_from_links("SRIOVEthernetLogicalPorts")
|
329
354
|
end
|
330
|
-
|
331
|
-
# Setters
|
332
|
-
|
333
|
-
def name=(name)
|
334
|
-
xml.elements[ATTRS[:name]].text = name
|
335
|
-
@name = name
|
336
|
-
end
|
337
355
|
end
|
338
356
|
|
339
357
|
# Logical Partition information
|
@@ -882,6 +900,8 @@ module IbmPowerHmc
|
|
882
900
|
ATTRS = {
|
883
901
|
:name => "partitionTemplateName",
|
884
902
|
:description => "description",
|
903
|
+
:lpar_name => "logicalPartitionConfig/partitionName",
|
904
|
+
:lpar_id => "logicalPartitionConfig/partitionId",
|
885
905
|
:os => "logicalPartitionConfig/osVersion",
|
886
906
|
:memory => "logicalPartitionConfig/memoryConfiguration/currMemory",
|
887
907
|
:dedicated => "logicalPartitionConfig/processorConfiguration/hasDedicatedProcessors",
|
@@ -890,6 +910,87 @@ module IbmPowerHmc
|
|
890
910
|
:proc_units => "logicalPartitionConfig/processorConfiguration/sharedProcessorConfiguration/desiredProcessingUnits",
|
891
911
|
:procs => "logicalPartitionConfig/processorConfiguration/dedicatedProcessorConfiguration/desiredProcessors"
|
892
912
|
}.freeze
|
913
|
+
|
914
|
+
def vscsi
|
915
|
+
REXML::XPath.match(xml, 'logicalPartitionConfig/virtualSCSIClientAdapters/VirtualSCSIClientAdapter').map do |adap|
|
916
|
+
{
|
917
|
+
:vios => adap.elements['connectingPartitionName']&.text,
|
918
|
+
:physvol => adap.elements['associatedPhysicalVolume/PhysicalVolume/name']&.text,
|
919
|
+
}
|
920
|
+
end
|
921
|
+
end
|
922
|
+
|
923
|
+
def vscsi=(list = [])
|
924
|
+
adaps = REXML::Element.new('virtualSCSIClientAdapters')
|
925
|
+
adaps.add_attribute('schemaVersion', 'V1_5_0')
|
926
|
+
list.each do |vlan|
|
927
|
+
adaps.add_element('VirtualSCSIClientAdapter', {'schemaVersion' => 'V1_5_0'}).tap do |v|
|
928
|
+
v.add_element('associatedLogicalUnits', {'schemaVersion' => 'V1_5_0'})
|
929
|
+
v.add_element('associatedPhysicalVolume', {'schemaVersion' => 'V1_5_0'}).tap do |e|
|
930
|
+
e.add_element('PhysicalVolume', {'schemaVersion' => 'V1_5_0'}).add_element('name').text = vlan[:physvol] if vlan[:physvol]
|
931
|
+
end
|
932
|
+
v.add_element('connectingPartitionName').text = vlan[:vios]
|
933
|
+
v.add_element('AssociatedTargetDevices', {'schemaVersion' => 'V1_5_0'})
|
934
|
+
v.add_element('associatedVirtualOpticalMedia', {'schemaVersion' => 'V1_5_0'})
|
935
|
+
end
|
936
|
+
end
|
937
|
+
if xml.elements['logicalPartitionConfig/virtualSCSIClientAdapters']
|
938
|
+
xml.elements['logicalPartitionConfig/virtualSCSIClientAdapters'] = adaps
|
939
|
+
else
|
940
|
+
xml.elements['logicalPartitionConfig'].add_element(adaps)
|
941
|
+
end
|
942
|
+
end
|
943
|
+
|
944
|
+
def vfc
|
945
|
+
REXML::XPath.match(xml, 'logicalPartitionConfig/virtualFibreChannelClientAdapters/VirtualFibreChannelClientAdapter').map do |adap|
|
946
|
+
{
|
947
|
+
:vios => adap.elements['connectingPartitionName']&.text,
|
948
|
+
:port => adap.elements['portName']&.text
|
949
|
+
}
|
950
|
+
end
|
951
|
+
end
|
952
|
+
|
953
|
+
def vfc=(list = [])
|
954
|
+
adaps = REXML::Element.new('virtualFibreChannelClientAdapters')
|
955
|
+
adaps.add_attribute('schemaVersion', 'V1_5_0')
|
956
|
+
list.each do |vlan|
|
957
|
+
adaps.add_element('VirtualFibreChannelClientAdapter', {'schemaVersion' => 'V1_5_0'}).tap do |v|
|
958
|
+
v.add_element('connectingPartitionName').text = vlan[:vios]
|
959
|
+
v.add_element('portName').text = vlan[:port]
|
960
|
+
end
|
961
|
+
end
|
962
|
+
if xml.elements['logicalPartitionConfig/virtualFibreChannelClientAdapters']
|
963
|
+
xml.elements['logicalPartitionConfig/virtualFibreChannelClientAdapters'] = adaps
|
964
|
+
else
|
965
|
+
xml.elements['logicalPartitionConfig'].add_element(adaps)
|
966
|
+
end
|
967
|
+
end
|
968
|
+
|
969
|
+
def vlans
|
970
|
+
REXML::XPath.match(xml, 'logicalPartitionConfig/clientNetworkAdapters/ClientNetworkAdapter/clientVirtualNetworks/ClientVirtualNetwork').map do |vlan|
|
971
|
+
{
|
972
|
+
:name => vlan.elements['name']&.text,
|
973
|
+
:vlan_id => vlan.elements['vlanId']&.text,
|
974
|
+
:switch => vlan.elements['associatedSwitchName']&.text
|
975
|
+
}
|
976
|
+
end
|
977
|
+
end
|
978
|
+
|
979
|
+
def vlans=(list = [])
|
980
|
+
adaps = REXML::Element.new('clientNetworkAdapters')
|
981
|
+
adaps.add_attribute('schemaVersion', 'V1_5_0')
|
982
|
+
list.each do |vlan|
|
983
|
+
adaps.add_element('ClientNetworkAdapter', {'schemaVersion' => 'V1_5_0'}).
|
984
|
+
add_element('clientVirtualNetworks', {'schemaVersion' => 'V1_5_0'}).
|
985
|
+
add_element('ClientVirtualNetwork', {'schemaVersion' => 'V1_5_0'}).
|
986
|
+
tap do |v|
|
987
|
+
v.add_element('name').text = vlan[:name]
|
988
|
+
v.add_element('vlanId').text = vlan[:vlan_id]
|
989
|
+
v.add_element('associatedSwitchName').text = vlan[:switch]
|
990
|
+
end
|
991
|
+
end
|
992
|
+
xml.elements['logicalPartitionConfig/clientNetworkAdapters'] = adaps
|
993
|
+
end
|
893
994
|
end
|
894
995
|
|
895
996
|
# HMC Event
|
@@ -917,9 +1018,11 @@ module IbmPowerHmc
|
|
917
1018
|
# Job Response
|
918
1019
|
class JobResponse < AbstractRest
|
919
1020
|
ATTRS = {
|
920
|
-
:id
|
921
|
-
:status
|
922
|
-
:
|
1021
|
+
:id => "JobID",
|
1022
|
+
:status => "Status",
|
1023
|
+
:operation => "JobRequestInstance/RequestedOperation/OperationName",
|
1024
|
+
:group => "JobRequestInstance/RequestedOperation/GroupName",
|
1025
|
+
:message => "ResponseException/Message"
|
923
1026
|
}.freeze
|
924
1027
|
|
925
1028
|
def results
|
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.11.0
|
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: 2022-
|
11
|
+
date: 2022-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.3'
|
41
41
|
description: A Ruby gem for interacting with the IBM Hardware Management Console (HMC).
|
42
|
-
email:
|
42
|
+
email:
|
43
43
|
executables: []
|
44
44
|
extensions: []
|
45
45
|
extra_rdoc_files: []
|
@@ -69,7 +69,7 @@ metadata:
|
|
69
69
|
homepage_uri: http://github.com/IBM/ibm_power_hmc_sdk_ruby
|
70
70
|
source_code_uri: http://github.com/IBM/ibm_power_hmc_sdk_ruby
|
71
71
|
changelog_uri: http://github.com/IBM/ibm_power_hmc_sdk_ruby/blob/master/CHANGELOG.md
|
72
|
-
post_install_message:
|
72
|
+
post_install_message:
|
73
73
|
rdoc_options: []
|
74
74
|
require_paths:
|
75
75
|
- lib
|
@@ -84,8 +84,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0'
|
86
86
|
requirements: []
|
87
|
-
rubygems_version: 3.1.
|
88
|
-
signing_key:
|
87
|
+
rubygems_version: 3.1.4
|
88
|
+
signing_key:
|
89
89
|
specification_version: 4
|
90
90
|
summary: IBM Power HMC Ruby gem.
|
91
91
|
test_files: []
|