ibm_power_hmc 0.14.0 → 0.16.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/README.md +1 -1
- data/lib/ibm_power_hmc/connection.rb +59 -39
- data/lib/ibm_power_hmc/parser.rb +26 -6
- data/lib/ibm_power_hmc/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: faeaaee474f96b0beb9747a2d346110a1321e9060b2b196770598f1bccfd85a8
|
4
|
+
data.tar.gz: 3af51fcdb06f722a95e44bcea28f8ed4f4fef9cdfd9e1332063c3bf288a00c61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1756c8a220a30ba88da0cd0d518a681657f9d08a231c11715e461d0fe5be1c171b17e98bb290fd29f9cdb551da48cdfc699707147abded7cfa204dcde26067be
|
7
|
+
data.tar.gz: 8906b25b90865262000331f4c371b546cac852eeb14714e8c75b0e7ae937422d441a1c920687d4e8913dad088a9eadbbbb7a5d740fceccd57f9733e9112ce2bc
|
data/README.md
CHANGED
@@ -45,7 +45,7 @@ puts hmc.version
|
|
45
45
|
Retrieving managed systems that are powered on:
|
46
46
|
|
47
47
|
```ruby
|
48
|
-
hc.managed_systems("State
|
48
|
+
hc.managed_systems("State==operating")
|
49
49
|
```
|
50
50
|
|
51
51
|
Listing the logical partitions and virtual I/O servers of each managed system:
|
@@ -10,7 +10,7 @@ module IbmPowerHmc
|
|
10
10
|
# HMC REST Client connection.
|
11
11
|
class Connection
|
12
12
|
##
|
13
|
-
# @!method initialize(host:, password:, username: "hscroot", port: 12_443, validate_ssl: true)
|
13
|
+
# @!method initialize(host:, password:, username: "hscroot", port: 12_443, validate_ssl: true, timeout: 60)
|
14
14
|
# Create a new HMC connection.
|
15
15
|
#
|
16
16
|
# @param host [String] Hostname of the HMC.
|
@@ -18,6 +18,7 @@ module IbmPowerHmc
|
|
18
18
|
# @param username [String] User name.
|
19
19
|
# @param port [Integer] TCP port number.
|
20
20
|
# @param validate_ssl [Boolean] Verify SSL certificates.
|
21
|
+
# @param timeout [Integer] The default HTTP timeout in seconds.
|
21
22
|
def initialize(host:, password:, username: "hscroot", port: 12_443, validate_ssl: true, timeout: 60)
|
22
23
|
@hostname = "#{host}:#{port}"
|
23
24
|
@username = username
|
@@ -90,6 +91,29 @@ module IbmPowerHmc
|
|
90
91
|
FeedParser.new(response.body).objects(:ManagedSystem)
|
91
92
|
end
|
92
93
|
|
94
|
+
##
|
95
|
+
# @!method managed_systems_quick
|
96
|
+
# Retrieve the list of systems managed by the HMC (using Quick API).
|
97
|
+
# @return [Array<Hash>] The list of managed systems.
|
98
|
+
def managed_systems_quick
|
99
|
+
method_url = "/rest/api/uom/ManagedSystem/quick/All"
|
100
|
+
response = request(:get, method_url)
|
101
|
+
JSON.parse(response.body)
|
102
|
+
end
|
103
|
+
|
104
|
+
##
|
105
|
+
# @!method managed_system_quick(sys_uuid, property = nil)
|
106
|
+
# Retrieve information about a managed system (using Quick API).
|
107
|
+
# @param sys_uuid [String] The UUID of the managed system.
|
108
|
+
# @param property [String] The quick property name (optional).
|
109
|
+
# @return [Hash] The managed system.
|
110
|
+
def managed_system_quick(sys_uuid, property = nil)
|
111
|
+
method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/quick"
|
112
|
+
method_url += "/#{property}" unless property.nil?
|
113
|
+
response = request(:get, method_url)
|
114
|
+
JSON.parse(response.body)
|
115
|
+
end
|
116
|
+
|
93
117
|
##
|
94
118
|
# @!method managed_system(lpar_uuid, sys_uuid = nil, group_name = nil)
|
95
119
|
# Retrieve information about a managed system.
|
@@ -159,8 +183,9 @@ module IbmPowerHmc
|
|
159
183
|
# @param lpar_uuid [String] The UUID of the logical partition.
|
160
184
|
# @param new_name [String] The new name of the logical partition.
|
161
185
|
def rename_lpar(lpar_uuid, new_name)
|
162
|
-
|
163
|
-
|
186
|
+
modify_object do
|
187
|
+
lpar(lpar_uuid).tap { |lpar| lpar.name = new_name }
|
188
|
+
end
|
164
189
|
end
|
165
190
|
|
166
191
|
##
|
@@ -613,14 +638,21 @@ module IbmPowerHmc
|
|
613
638
|
end
|
614
639
|
|
615
640
|
##
|
616
|
-
# @!method
|
617
|
-
#
|
641
|
+
# @!method template_modify(template_uuid, changes)
|
642
|
+
# Modify a template.
|
618
643
|
# @param template_uuid [String] UUID of the partition template to modify.
|
619
644
|
# @param changes [Hash] Hash of changes to make.
|
620
|
-
# @return [IbmPowerHmc::PartitionTemplate] The partition template.
|
621
645
|
def template_modify(template_uuid, changes)
|
622
646
|
method_url = "/rest/api/templates/PartitionTemplate/#{template_uuid}"
|
623
|
-
|
647
|
+
|
648
|
+
# Templates have no href so need to use modify_object_url.
|
649
|
+
modify_object_url(method_url) do
|
650
|
+
template(template_uuid).tap do |obj|
|
651
|
+
changes.each do |key, value|
|
652
|
+
obj.send("#{key}=", value)
|
653
|
+
end
|
654
|
+
end
|
655
|
+
end
|
624
656
|
end
|
625
657
|
|
626
658
|
##
|
@@ -759,18 +791,20 @@ module IbmPowerHmc
|
|
759
791
|
end
|
760
792
|
|
761
793
|
##
|
762
|
-
# @!method next_events(
|
794
|
+
# @!method next_events(timeout = -1)
|
763
795
|
# Retrieve a list of events that occured since last call.
|
764
|
-
# @param
|
796
|
+
# @param timeout [Integer] The number of seconds to wait if no event is available.
|
797
|
+
# Specify -1 to wait indefinitely.
|
765
798
|
# @return [Array<IbmPowerHmc::Event>] The list of events.
|
766
|
-
def next_events(
|
799
|
+
def next_events(timeout = -1)
|
767
800
|
method_url = "/rest/api/uom/Event"
|
801
|
+
method_url += "?timeout=#{timeout}" if timeout >= 0
|
768
802
|
|
769
803
|
response = nil
|
770
804
|
loop do
|
771
805
|
response = request(:get, method_url)
|
772
|
-
#
|
773
|
-
break if response.code != 204 ||
|
806
|
+
# The HMC waits "timeout" seconds (10 if not specified) before returning 204.
|
807
|
+
break if response.code != 204 || timeout >= 0
|
774
808
|
end
|
775
809
|
FeedParser.new(response.body).objects(:Event).map do |e|
|
776
810
|
data = e.data.split("/") unless e.data.nil?
|
@@ -876,26 +910,26 @@ module IbmPowerHmc
|
|
876
910
|
end
|
877
911
|
end
|
878
912
|
|
879
|
-
|
880
|
-
|
881
|
-
# @!method modify_object(method_url, headers = {}, attempts = 5)
|
882
|
-
# Modify an object at a specified URI.
|
883
|
-
# @param method_url [String] The URL of the object to modify.
|
913
|
+
# @!method modify_object(headers = {}, attempts = 5)
|
914
|
+
# Post an IbmPowerHmc::AbstractRest object iteratively using ETag.
|
884
915
|
# @param headers [Hash] HTTP headers.
|
885
916
|
# @param attempts [Integer] Maximum number of retries.
|
886
|
-
# @
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
917
|
+
# @yieldreturn [IbmPowerHmc::AbstractRest] The object to modify.
|
918
|
+
def modify_object(headers = {}, attempts = 5, &block)
|
919
|
+
modify_object_url(nil, headers, attempts, &block)
|
920
|
+
end
|
921
|
+
|
922
|
+
private
|
892
923
|
|
893
|
-
|
924
|
+
def modify_object_url(method_url = nil, headers = {}, attempts = 5)
|
925
|
+
while attempts > 0
|
926
|
+
obj = yield
|
927
|
+
raise "object has no href" if method_url.nil? && (!obj.kind_of?(AbstractRest) || obj.href.nil?)
|
894
928
|
|
895
929
|
# Use ETag to ensure object has not changed.
|
896
930
|
headers = headers.merge("If-Match" => obj.etag, :content_type => obj.content_type)
|
897
931
|
begin
|
898
|
-
request(:post, method_url, headers, obj.xml.to_s)
|
932
|
+
request(:post, method_url.nil? ? obj.href.path : method_url, headers, obj.xml.to_s)
|
899
933
|
break
|
900
934
|
rescue HttpError => e
|
901
935
|
attempts -= 1
|
@@ -905,20 +939,6 @@ module IbmPowerHmc
|
|
905
939
|
end
|
906
940
|
end
|
907
941
|
|
908
|
-
# @!method modify_object_attributes(method_url, changes, headers = {}, attempts = 5)
|
909
|
-
# Modify an object at a specified URI.
|
910
|
-
# @param method_url [String] The URL of the object to modify.
|
911
|
-
# @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.
|
912
|
-
# @param headers [Hash] HTTP headers.
|
913
|
-
# @param attempts [Integer] Maximum number of retries.
|
914
|
-
def modify_object_attributes(method_url, changes, headers = {}, attempts = 5)
|
915
|
-
modify_object(method_url, headers, attempts) do |obj|
|
916
|
-
changes.each do |key, value|
|
917
|
-
obj.send("#{key}=", value)
|
918
|
-
end
|
919
|
-
end
|
920
|
-
end
|
921
|
-
|
922
942
|
##
|
923
943
|
# @!method network_adapter(vm_type, lpar_uuid, netadap_uuid)
|
924
944
|
# Retrieve one or all virtual ethernet network adapters attached to a Logical Partition or a Virtual I/O Server.
|
data/lib/ibm_power_hmc/parser.rb
CHANGED
@@ -159,12 +159,11 @@ module IbmPowerHmc
|
|
159
159
|
end
|
160
160
|
|
161
161
|
def collection_of(name, type)
|
162
|
-
objtype = Module.const_get("IbmPowerHmc::#{type}")
|
163
162
|
xml.get_elements([name, type].compact.join("/")).map do |elem|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
163
|
+
Module.const_get("IbmPowerHmc::#{elem.name}").new(elem)
|
164
|
+
rescue NameError
|
165
|
+
nil
|
166
|
+
end.compact
|
168
167
|
end
|
169
168
|
end
|
170
169
|
|
@@ -221,11 +220,23 @@ module IbmPowerHmc
|
|
221
220
|
ATTRS = {
|
222
221
|
:name => "ManagementConsoleName",
|
223
222
|
:build_level => "VersionInfo/BuildLevel",
|
223
|
+
:maint_level => "VersionInfo/Maintenance",
|
224
|
+
:sp_name => "VersionInfo/ServicePackName",
|
224
225
|
:version => "BaseVersion",
|
225
226
|
:ssh_pubkey => "PublicSSHKeyValue",
|
226
227
|
:uvmid => "UVMID",
|
227
228
|
:tz => "CurrentTimezone",
|
228
|
-
:uptime => "ManagementConsoleUpTime"
|
229
|
+
:uptime => "ManagementConsoleUpTime",
|
230
|
+
:uom_version => "UserObjectModelVersion/MinorVersion",
|
231
|
+
:uom_schema => "UserObjectModelVersion/SchemaNamespace",
|
232
|
+
:templates_version => "TemplateObjectModelVersion/MinorVersion",
|
233
|
+
:templates_schema => "TemplateObjectModelVersion/SchemaNamespace",
|
234
|
+
:web_version => "WebObjectModelVersion/MinorVersion",
|
235
|
+
:web_schema => "WebObjectModelVersion/SchemaNamespace",
|
236
|
+
:session_timeout => "SessionTimeout",
|
237
|
+
:web_access => "RemoteWebAccess",
|
238
|
+
:ssh_access => "RemoteCommandAccess",
|
239
|
+
:vterm_access => "RemoteVirtualTerminalAccess"
|
229
240
|
}.freeze
|
230
241
|
|
231
242
|
def time
|
@@ -320,6 +331,10 @@ module IbmPowerHmc
|
|
320
331
|
}.freeze
|
321
332
|
end
|
322
333
|
|
334
|
+
class HostChannelAdapter < IOAdapter; end
|
335
|
+
class PhysicalFibreChannelAdapter < IOAdapter; end
|
336
|
+
class SRIOVAdapter < IOAdapter; end
|
337
|
+
|
323
338
|
# Common class for LPAR and VIOS
|
324
339
|
class BasePartition < AbstractRest
|
325
340
|
ATTRS = {
|
@@ -360,6 +375,10 @@ module IbmPowerHmc
|
|
360
375
|
def sriov_elp_uuids
|
361
376
|
uuids_from_links("SRIOVEthernetLogicalPorts")
|
362
377
|
end
|
378
|
+
|
379
|
+
def io_adapters
|
380
|
+
collection_of("PartitionIOConfiguration/ProfileIOSlots/ProfileIOSlot/AssociatedIOSlot/RelatedIOAdapter", "*[1]")
|
381
|
+
end
|
363
382
|
end
|
364
383
|
|
365
384
|
# Logical Partition information
|
@@ -927,6 +946,7 @@ module IbmPowerHmc
|
|
927
946
|
:name => "partitionTemplateName",
|
928
947
|
:description => "description",
|
929
948
|
:lpar_name => "logicalPartitionConfig/partitionName",
|
949
|
+
:lpar_type => "logicalPartitionConfig/partitionType",
|
930
950
|
:lpar_id => "logicalPartitionConfig/partitionId",
|
931
951
|
:os => "logicalPartitionConfig/osVersion",
|
932
952
|
:memory => "logicalPartitionConfig/memoryConfiguration/currMemory",
|
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.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- IBM Power
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|