ibm_power_hmc 0.11.0 → 0.12.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/.rubocop_local.yml +0 -2
- data/lib/ibm_power_hmc/connection.rb +32 -15
- data/lib/ibm_power_hmc/job.rb +2 -1
- data/lib/ibm_power_hmc/parser.rb +20 -13
- data/lib/ibm_power_hmc/pcm.rb +1 -1
- 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: e162db8e4002c4b1fbee71faceaa8c4a859f5e7e92e33e4cbbdb59862da9cde6
|
4
|
+
data.tar.gz: 97bc18d7e606bddd79f6ed83b9f2f5b562f5121c433d613085e7da5e695f71df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a36c85b010b6e67bd91e67fa380c4edb6cc27a34aee732237b5c95eaee2f6a983ee1c461bc6ab5830d4952743360f848a1228f85121f9ac8cf150b194440dac
|
7
|
+
data.tar.gz: 741c9dedab5f6bd5fd7af0038e8bdab555c6b71274f3cecded7aaf4cabb21371b744e3fd355140e61bc9c7a36128a473a81fffd6983662d2def0c0e22ac1fcc5
|
data/.rubocop_local.yml
CHANGED
@@ -161,15 +161,17 @@ module IbmPowerHmc
|
|
161
161
|
end
|
162
162
|
|
163
163
|
##
|
164
|
-
# @!method vioses(sys_uuid = nil, search = {})
|
164
|
+
# @!method vioses(sys_uuid = nil, search = {}, permissive = true)
|
165
165
|
# Retrieve the list of virtual I/O servers managed by the HMC.
|
166
166
|
# @param sys_uuid [String] The UUID of the managed system.
|
167
167
|
# @param search [Hash] The optional property name and value to match.
|
168
|
+
# @param permissive [Boolean] Skip virtual I/O servers that have error conditions.
|
168
169
|
# @return [Array<IbmPowerHmc::VirtualIOServer>] The list of virtual I/O servers.
|
169
|
-
def vioses(sys_uuid = nil, search = {})
|
170
|
+
def vioses(sys_uuid = nil, search = {}, permissive = true)
|
170
171
|
if sys_uuid.nil?
|
171
172
|
method_url = "/rest/api/uom/VirtualIOServer"
|
172
173
|
search.each { |key, value| method_url += "/search/(#{key}==#{value})" }
|
174
|
+
method_url += "?ignoreError=true" if permissive
|
173
175
|
else
|
174
176
|
method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/VirtualIOServer"
|
175
177
|
end
|
@@ -386,7 +388,7 @@ module IbmPowerHmc
|
|
386
388
|
end
|
387
389
|
|
388
390
|
##
|
389
|
-
# @!method templates_summary
|
391
|
+
# @!method templates_summary(draft = false)
|
390
392
|
# Retrieve the list of partition template summaries.
|
391
393
|
# @param draft [Boolean] Retrieve draft templates as well
|
392
394
|
# @return [Array<IbmPowerHmc::PartitionTemplateSummary>] The list of partition template summaries.
|
@@ -397,7 +399,7 @@ module IbmPowerHmc
|
|
397
399
|
end
|
398
400
|
|
399
401
|
##
|
400
|
-
# @!method templates
|
402
|
+
# @!method templates(draft = false)
|
401
403
|
# Retrieve the list of partition templates.
|
402
404
|
# @param draft [Boolean] Retrieve draft templates as well
|
403
405
|
# @return [Array<IbmPowerHmc::PartitionTemplate>] The list of partition templates.
|
@@ -510,8 +512,6 @@ module IbmPowerHmc
|
|
510
512
|
# @param changes [Hash] Modifications to apply to the Template before deploying Logical Partition.
|
511
513
|
# @return [String] The UUID of the deployed Logical Partition.
|
512
514
|
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
515
|
draft_uuid = template_check(template_uuid, target_sys_uuid).results["TEMPLATE_UUID"]
|
516
516
|
template_transform(draft_uuid, target_sys_uuid)
|
517
517
|
template_modify(draft_uuid, changes)
|
@@ -529,6 +529,23 @@ module IbmPowerHmc
|
|
529
529
|
modify_object_attributes(method_url, changes)
|
530
530
|
end
|
531
531
|
|
532
|
+
##
|
533
|
+
# @!method template_copy(template_uuid, new_name)
|
534
|
+
# Copy existing template to a new one.
|
535
|
+
# @param template_uuid [String] UUID of the partition template to copy.
|
536
|
+
# @param new_name [String] Name of the new template.
|
537
|
+
# @return [IbmPowerHmc::PartitionTemplate] The new partition template.
|
538
|
+
def template_copy(template_uuid, new_name)
|
539
|
+
method_url = "/rest/api/templates/PartitionTemplate"
|
540
|
+
headers = {
|
541
|
+
:content_type => "application/vnd.ibm.powervm.templates+xml;type=PartitionTemplate"
|
542
|
+
}
|
543
|
+
original = template(template_uuid)
|
544
|
+
original.name = new_name
|
545
|
+
response = request(:put, method_url, headers, original.xml.to_s)
|
546
|
+
Parser.new(response.body).object(:PartitionTemplate)
|
547
|
+
end
|
548
|
+
|
532
549
|
##
|
533
550
|
# @!method poweron_lpar(lpar_uuid, params = {}, sync = true)
|
534
551
|
# Power on a logical partition.
|
@@ -712,13 +729,15 @@ module IbmPowerHmc
|
|
712
729
|
@status = err.http_code
|
713
730
|
@message = err.message
|
714
731
|
|
715
|
-
# Try to parse body as an HttpErrorResponse
|
732
|
+
# Try to parse body as an HttpErrorResponse.
|
716
733
|
unless err.response.nil?
|
717
|
-
|
718
|
-
|
734
|
+
begin
|
735
|
+
resp = Parser.new(err.response.body).object(:HttpErrorResponse)
|
719
736
|
@uri = resp.uri
|
720
737
|
@reason = resp.reason
|
721
738
|
@message = resp.message
|
739
|
+
rescue
|
740
|
+
# not an XML body
|
722
741
|
end
|
723
742
|
end
|
724
743
|
end
|
@@ -751,9 +770,9 @@ module IbmPowerHmc
|
|
751
770
|
:headers => headers
|
752
771
|
)
|
753
772
|
rescue RestClient::Exception => e
|
754
|
-
# Do not retry on failed logon attempts
|
773
|
+
# Do not retry on failed logon attempts.
|
755
774
|
if e.http_code == 401 && @api_session_token != "" && !reauth
|
756
|
-
# Try to reauth
|
775
|
+
# Try to reauth.
|
757
776
|
reauth = true
|
758
777
|
logon
|
759
778
|
retry
|
@@ -785,20 +804,18 @@ module IbmPowerHmc
|
|
785
804
|
break
|
786
805
|
rescue HttpError => e
|
787
806
|
attempts -= 1
|
788
|
-
# Will get 412 ("Precondition Failed") if ETag mismatches
|
807
|
+
# Will get 412 ("Precondition Failed") if ETag mismatches.
|
789
808
|
raise if e.status != 412 || attempts == 0
|
790
809
|
end
|
791
810
|
end
|
792
811
|
end
|
793
812
|
|
794
|
-
# @!method modify_object_attributes(method_url, headers = {}, attempts = 5)
|
813
|
+
# @!method modify_object_attributes(method_url, changes, headers = {}, attempts = 5)
|
795
814
|
# Modify an object at a specified URI.
|
796
815
|
# @param method_url [String] The URL of the object to modify.
|
797
816
|
# @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
817
|
# @param headers [Hash] HTTP headers.
|
799
818
|
# @param attempts [Integer] Maximum number of retries.
|
800
|
-
# @yield [obj] The object to modify.
|
801
|
-
# @yieldparam obj [IbmPowerHmc::AbstractRest] The object to modify.
|
802
819
|
def modify_object_attributes(method_url, changes, headers = {}, attempts = 5)
|
803
820
|
modify_object(method_url, headers, attempts) do |obj|
|
804
821
|
changes.each do |key, value|
|
data/lib/ibm_power_hmc/job.rb
CHANGED
@@ -5,6 +5,7 @@ module IbmPowerHmc
|
|
5
5
|
# HMC Job for long running operations.
|
6
6
|
class HmcJob
|
7
7
|
class JobNotStarted < StandardError; end
|
8
|
+
|
8
9
|
class JobFailed < StandardError
|
9
10
|
def initialize(job)
|
10
11
|
super
|
@@ -109,7 +110,7 @@ module IbmPowerHmc
|
|
109
110
|
def run(timeout = 120, poll_interval = 0)
|
110
111
|
start
|
111
112
|
wait(timeout, poll_interval)
|
112
|
-
raise JobFailed.new(@last_status) unless @last_status.status.eql?("COMPLETED_OK")
|
113
|
+
raise JobFailed.new(@last_status), "Job failed" unless @last_status.status.eql?("COMPLETED_OK")
|
113
114
|
ensure
|
114
115
|
delete if defined?(@href)
|
115
116
|
end
|
data/lib/ibm_power_hmc/parser.rb
CHANGED
@@ -223,9 +223,15 @@ module IbmPowerHmc
|
|
223
223
|
:build_level => "VersionInfo/BuildLevel",
|
224
224
|
:version => "BaseVersion",
|
225
225
|
:ssh_pubkey => "PublicSSHKeyValue",
|
226
|
-
:uvmid => "UVMID"
|
226
|
+
:uvmid => "UVMID",
|
227
|
+
:tz => "CurrentTimezone",
|
228
|
+
:uptime => "ManagementConsoleUpTime"
|
227
229
|
}.freeze
|
228
230
|
|
231
|
+
def time
|
232
|
+
Time.at(0, singleton("ManagementConsoleTime").to_i, :millisecond).utc
|
233
|
+
end
|
234
|
+
|
229
235
|
def managed_systems_uuids
|
230
236
|
uuids_from_links("ManagedSystems")
|
231
237
|
end
|
@@ -419,7 +425,7 @@ module IbmPowerHmc
|
|
419
425
|
:location => "LocationCode",
|
420
426
|
:description => "Description",
|
421
427
|
:is_available => "AvailableForUsage",
|
422
|
-
:capacity => "VolumeCapacity",
|
428
|
+
:capacity => "VolumeCapacity", # in MiB
|
423
429
|
:name => "VolumeName",
|
424
430
|
:is_fc => "IsFibreChannelBacked",
|
425
431
|
:udid => "VolumeUniqueID"
|
@@ -431,7 +437,7 @@ module IbmPowerHmc
|
|
431
437
|
ATTRS = {
|
432
438
|
:name => "DiskName",
|
433
439
|
:label => "DiskLabel",
|
434
|
-
:capacity => "DiskCapacity", #
|
440
|
+
:capacity => "DiskCapacity", # in GiB
|
435
441
|
:psize => "PartitionSize",
|
436
442
|
:vg => "VolumeGroup",
|
437
443
|
:udid => "UniqueDeviceID"
|
@@ -923,13 +929,13 @@ module IbmPowerHmc
|
|
923
929
|
def vscsi=(list = [])
|
924
930
|
adaps = REXML::Element.new('virtualSCSIClientAdapters')
|
925
931
|
adaps.add_attribute('schemaVersion', 'V1_5_0')
|
926
|
-
list.each do |
|
932
|
+
list.each do |vscsi|
|
927
933
|
adaps.add_element('VirtualSCSIClientAdapter', {'schemaVersion' => 'V1_5_0'}).tap do |v|
|
928
934
|
v.add_element('associatedLogicalUnits', {'schemaVersion' => 'V1_5_0'})
|
929
935
|
v.add_element('associatedPhysicalVolume', {'schemaVersion' => 'V1_5_0'}).tap do |e|
|
930
|
-
e.add_element('PhysicalVolume', {'schemaVersion' => 'V1_5_0'}).add_element('name').text =
|
936
|
+
e.add_element('PhysicalVolume', {'schemaVersion' => 'V1_5_0'}).add_element('name').text = vscsi[:physvol] if vscsi[:physvol]
|
931
937
|
end
|
932
|
-
v.add_element('connectingPartitionName').text =
|
938
|
+
v.add_element('connectingPartitionName').text = vscsi[:vios]
|
933
939
|
v.add_element('AssociatedTargetDevices', {'schemaVersion' => 'V1_5_0'})
|
934
940
|
v.add_element('associatedVirtualOpticalMedia', {'schemaVersion' => 'V1_5_0'})
|
935
941
|
end
|
@@ -953,10 +959,10 @@ module IbmPowerHmc
|
|
953
959
|
def vfc=(list = [])
|
954
960
|
adaps = REXML::Element.new('virtualFibreChannelClientAdapters')
|
955
961
|
adaps.add_attribute('schemaVersion', 'V1_5_0')
|
956
|
-
list.each do |
|
962
|
+
list.each do |vfc|
|
957
963
|
adaps.add_element('VirtualFibreChannelClientAdapter', {'schemaVersion' => 'V1_5_0'}).tap do |v|
|
958
|
-
v.add_element('connectingPartitionName').text =
|
959
|
-
v.add_element('portName').text =
|
964
|
+
v.add_element('connectingPartitionName').text = vfc[:vios]
|
965
|
+
v.add_element('portName').text = vfc[:port]
|
960
966
|
end
|
961
967
|
end
|
962
968
|
if xml.elements['logicalPartitionConfig/virtualFibreChannelClientAdapters']
|
@@ -980,10 +986,10 @@ module IbmPowerHmc
|
|
980
986
|
adaps = REXML::Element.new('clientNetworkAdapters')
|
981
987
|
adaps.add_attribute('schemaVersion', 'V1_5_0')
|
982
988
|
list.each do |vlan|
|
983
|
-
adaps.add_element('ClientNetworkAdapter', {'schemaVersion' => 'V1_5_0'})
|
984
|
-
|
985
|
-
|
986
|
-
|
989
|
+
adaps.add_element('ClientNetworkAdapter', {'schemaVersion' => 'V1_5_0'})
|
990
|
+
.add_element('clientVirtualNetworks', {'schemaVersion' => 'V1_5_0'})
|
991
|
+
.add_element('ClientVirtualNetwork', {'schemaVersion' => 'V1_5_0'})
|
992
|
+
.tap do |v|
|
987
993
|
v.add_element('name').text = vlan[:name]
|
988
994
|
v.add_element('vlanId').text = vlan[:vlan_id]
|
989
995
|
v.add_element('associatedSwitchName').text = vlan[:switch]
|
@@ -1036,6 +1042,7 @@ module IbmPowerHmc
|
|
1036
1042
|
end
|
1037
1043
|
end
|
1038
1044
|
|
1045
|
+
# Performance and Capacity Monitoring preferences
|
1039
1046
|
class ManagementConsolePcmPreference < AbstractRest
|
1040
1047
|
ATTRS = {
|
1041
1048
|
:max_ltm => "MaximumManagedSystemsForLongTermMonitor",
|
data/lib/ibm_power_hmc/pcm.rb
CHANGED
@@ -17,7 +17,7 @@ module IbmPowerHmc
|
|
17
17
|
end
|
18
18
|
|
19
19
|
##
|
20
|
-
# @!method managed_system_pcm_preferences
|
20
|
+
# @!method managed_system_pcm_preferences(sys_uuid)
|
21
21
|
# Return Performance and Capacity Monitor preferences for a Managed System.
|
22
22
|
# @param sys_uuid [String] The managed system UUID.
|
23
23
|
# @return [IbmPowerHmc::ManagedSystemPcmPreference] The PCM preferences for the Managed System.
|
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.12.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-07-
|
11
|
+
date: 2022-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|