ibm_power_hmc 0.23.1 → 0.25.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 664a0abb7f7694b46dfc2b6df5bd77d4302dc95388a31b39700cee8c2f8aa577
4
- data.tar.gz: aa33a336fb9acb8f5b638d3e0d141a39700b6557c055aa21e03d3caa74a4e06f
3
+ metadata.gz: b15e5d3ed25c9329a63b1655da54869b5f0a979f7775149209648d86a0fa67ad
4
+ data.tar.gz: c1c78e4c661ef6c90ea743245b3e5c29777e7ab51e276a088ca9206d814b99ce
5
5
  SHA512:
6
- metadata.gz: fccd5b4c9a95d02e36e06fe171f9f6f62aef3632f4698c0954bb05d31ce0d7c8e815cd5d280d9f397da2d7962223dd46e7b1813a64afd71f3c5685ef00f6fea0
7
- data.tar.gz: '011009cf620e6d618c936f69e4593a7369e3c7cb11e70c20778c7422806386995b62f20cf4d5141c07b6ec725df7aacc599f2bd52b508e7b41281d5830d91c70'
6
+ metadata.gz: 379f4c199e6c5a818617608060d98fe75413856b588760a6c0a2a946002858d7df52ce2b86ba54a4af9a2de3b61391828d3fbca4457dae93319c37cc2813bec9
7
+ data.tar.gz: 5299f74322afac43f91af2a131b5fb1521fc0f3ca3ed87106405006ef181eaa9d776b80e1501f13dabdbdee9630ba3868a47b0839ba88458f88b2782ed43623b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## v0.25.0
2
+ * Add `vios_uuid` as alias to `lpar_uuid` for VFC schema definition
3
+ * Add `lpar_delete_vios_mappings` util method
4
+ * Add option to `lpar_delete` to delete associated VIOS VSCSI/VFC mappings
5
+ ## v0.24.0
6
+ * Add schema methods to modify VSCSI and VFC mappings
7
+ * Add schema definition for IOSlot
8
+ * Add schema definition for IORDevice
1
9
  ## v0.23.0
2
10
  * Enhance schema definition for physical fibre channel adapters
3
11
  ## v0.22.0
@@ -119,20 +119,6 @@ module IbmPowerHmc
119
119
  job
120
120
  end
121
121
 
122
- ##
123
- # @!method template_provision(template_uuid, target_sys_uuid, changes)
124
- # Deploy Logical Partition from a Template (performs Check, Transform and Deploy steps in a single method).
125
- # @param template_uuid [String] The UUID of the Template to deploy an LPAR from.
126
- # @param target_sys_uuid [String] The UUID of the Managed System to deploy the LPAR on.
127
- # @param changes [Hash] Modifications to apply to the Template before deploying Logical Partition.
128
- # @return [String] The UUID of the deployed Logical Partition.
129
- def template_provision(template_uuid, target_sys_uuid, changes)
130
- draft_uuid = template_check(template_uuid, target_sys_uuid).results["TEMPLATE_UUID"]
131
- template_transform(draft_uuid, target_sys_uuid)
132
- template_modify(draft_uuid, changes)
133
- template_deploy(draft_uuid, target_sys_uuid).results["PartitionUuid"]
134
- end
135
-
136
122
  ##
137
123
  # @!method template_modify(template_uuid, changes)
138
124
  # Modify a template.
@@ -168,11 +168,15 @@ module IbmPowerHmc
168
168
  end
169
169
 
170
170
  ##
171
- # @!method lpar_delete(lpar_uuid)
171
+ # @!method lpar_delete(lpar_uuid, delete_vios_mappings: false)
172
172
  # Delete a logical partition.
173
173
  # @param lpar_uuid [String] The UUID of the logical partition to delete.
174
- def lpar_delete(lpar_uuid)
174
+ # @param delete_vios_mappings [Boolean] Delete associated VIOS VFC and VSCSI server adapters.
175
+ def lpar_delete(lpar_uuid, delete_vios_mappings: false)
175
176
  method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}"
177
+
178
+ lpar_delete_vios_mappings(lpar_uuid) if delete_vios_mappings
179
+
176
180
  request(:delete, method_url)
177
181
  # Returns HTTP 204 if ok
178
182
  end
@@ -94,10 +94,15 @@ module IbmPowerHmc
94
94
  uuids_from_links("AssociatedVirtualIOServers")
95
95
  end
96
96
 
97
+ # Deprecated: use io_slots.io_adapter
97
98
  def io_adapters
98
99
  collection_of("AssociatedSystemIOConfiguration/IOSlots/IOSlot/RelatedIOAdapter", "IOAdapter")
99
100
  end
100
101
 
102
+ def io_slots
103
+ collection_of("AssociatedSystemIOConfiguration/IOSlots", "IOSlot")
104
+ end
105
+
101
106
  def vswitches_uuids
102
107
  uuids_from_links("AssociatedSystemIOConfiguration/AssociatedSystemVirtualNetwork/VirtualSwitches")
103
108
  end
@@ -107,6 +112,73 @@ module IbmPowerHmc
107
112
  end
108
113
  end
109
114
 
115
+ # I/O Slot information
116
+ class IOSlot < AbstractNonRest
117
+ ATTRS = {
118
+ :description => "Description",
119
+ :lpar_id => "PartitionID",
120
+ :lpar_name => "PartitionName",
121
+ :lpar_type => "PartitionType",
122
+ :pci_class => "PCIClass",
123
+ :pci_dev => "PCIDeviceID",
124
+ :pci_subsys_dev => "PCISubsystemDeviceID",
125
+ :pci_man => "PCIManufacturerID",
126
+ :pci_rev => "PCIRevisionID",
127
+ :pci_vendor => "PCIVendorID",
128
+ :pci_subsys_vendor => "PCISubsystemVendorID",
129
+ :dr_name => "SlotDynamicReconfigurationConnectorName",
130
+ :physloc => "SlotPhysicalLocationCode",
131
+ :sriov_capable_dev => "SRIOVCapableDevice",
132
+ :sriov_capable => "SRIOVCapableSlot",
133
+ :vpd_model => "VitalProductDataModel",
134
+ :vpd_serial => "VitalProductDataSerialNumber",
135
+ :vpd_stale => "VitalProductDataStale",
136
+ :vpd_type => "VitalProductDataType"
137
+ }.freeze
138
+
139
+ def io_adapter
140
+ elem = xml.elements["RelatedIOAdapter/*[1]"]
141
+ Module.const_get("IbmPowerHmc::#{elem.name}").new(elem) unless elem.nil?
142
+ rescue NameError
143
+ nil
144
+ end
145
+
146
+ def features
147
+ xml.get_elements("FeatureCodes").map do |elem|
148
+ elem.text&.strip
149
+ end.compact
150
+ end
151
+
152
+ def ior_devices
153
+ collection_of("IORDevices", "IORDevice")
154
+ end
155
+ end
156
+
157
+ # I/O Device information
158
+ class IORDevice < AbstractNonRest
159
+ ATTRS = {
160
+ :parent => "ParentName",
161
+ :pci_dev => "PCIDeviceId",
162
+ :pci_vendor => "PCIVendorId",
163
+ :pci_subsys_dev => "PCISubsystemDeviceId",
164
+ :pci_subsys_vendor => "PCISubsystemVendorId",
165
+ :pci_rev => "PCIRevisionId",
166
+ :pci_class => "PCIClassCode",
167
+ :type => "DeviceType",
168
+ :serial => "SerialNumber",
169
+ :fru_number => "FruNumber",
170
+ :part_number => "PartNumber",
171
+ :ccin => "CCIN",
172
+ :size => "Size",
173
+ :location => "LocationCode",
174
+ :ucode_version => "MicroCodeVersion",
175
+ :wwpn => "WWPN",
176
+ :wwnn => "WWNN",
177
+ :macaddr => "MacAddressValue",
178
+ :description => "Description"
179
+ }.freeze
180
+ end
181
+
110
182
  # I/O Adapter information
111
183
  class IOAdapter < AbstractNonRest
112
184
  ATTRS = {
@@ -211,10 +283,17 @@ module IbmPowerHmc
211
283
  end.compact
212
284
  end
213
285
 
286
+ # Deprecated: use io_slots.io_adapter
214
287
  def io_adapters
215
288
  collection_of("PartitionIOConfiguration/ProfileIOSlots/ProfileIOSlot/AssociatedIOSlot/RelatedIOAdapter", "*[1]")
216
289
  end
217
290
 
291
+ def io_slots
292
+ xml.get_elements("PartitionIOConfiguration/ProfileIOSlots/ProfileIOSlot/AssociatedIOSlot").map do |elem|
293
+ IOSlot.new(elem)
294
+ end.compact
295
+ end
296
+
218
297
  def shared_processor_pool_uuid
219
298
  href = singleton("ProcessorPool", "href")
220
299
  uuid_from_href(href) unless href.nil?
@@ -278,10 +357,39 @@ module IbmPowerHmc
278
357
  collection_of("VirtualSCSIMappings", "VirtualSCSIMapping")
279
358
  end
280
359
 
360
+ # Remove VSCSI mapping (vhostX) from XML
361
+ def vscsi_mapping_delete!(location)
362
+ vscsi_mappings.each do |mapping|
363
+ mapping.xml.parent.delete(mapping.xml) if mapping.server&.location == location
364
+ end
365
+ end
366
+
367
+ # Remove VSCSI target (vtscsiX) from XML
368
+ def vscsi_mapping_unmap!(target)
369
+ mapping = vscsi_mappings.find { |m| m.device&.target == target }
370
+ mapping.xml.parent.delete(mapping.xml) unless mapping.nil?
371
+ end
372
+
281
373
  def vfc_mappings
282
374
  collection_of("VirtualFibreChannelMappings", "VirtualFibreChannelMapping")
283
375
  end
284
376
 
377
+ # Remove VFC mapping (vfchostX) from XML
378
+ def vfc_mapping_delete!(location)
379
+ mapping = vfc_mappings.find { |m| m.server&.location == location }
380
+ mapping.xml.parent.delete(mapping.xml) unless mapping.nil?
381
+ end
382
+
383
+ # Remove FC adapter mapping (fcsX) from XML
384
+ def vfc_mapping_unmap!(location)
385
+ mapping = vfc_mappings.find { |m| m.port && m.server&.location == location }
386
+ return if mapping.nil?
387
+
388
+ mapping.port.xml.parent.delete(mapping.port.xml)
389
+ mapping.server.map_port = nil
390
+ mapping.server.xml.delete(mapping.server.port.xml) unless mapping.server.port.nil?
391
+ end
392
+
285
393
  def seas
286
394
  collection_of("SharedEthernetAdapters", "SharedEthernetAdapter")
287
395
  end
@@ -735,6 +843,8 @@ module IbmPowerHmc
735
843
 
736
844
  # VFC client information
737
845
  class VirtualFibreChannelClientAdapter < VirtualFibreChannelAdapter
846
+ alias vios_uuid lpar_uuid
847
+
738
848
  def nport_loggedin
739
849
  collection_of("NportLoggedInStatus", "VirtualFibreChannelNPortLoginStatus")
740
850
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IbmPowerHmc
4
+ class Connection
5
+ ##
6
+ # @!method lpar_delete_vios_mappings(lpar_uuid)
7
+ # Delete VIOS VSCSI and VFC mappings associated to a given logical partition.
8
+ # @param lpar_uuid [String] The logical partition UUID.
9
+ def lpar_delete_vios_mappings(lpar_uuid)
10
+ vscsi_client_adapter(lpar_uuid).concat(vfc_client_adapter(lpar_uuid)).group_by(&:vios_uuid).each do |vios_uuid, adapters|
11
+ modify_object do
12
+ vios(vios_uuid, nil, "ViosSCSIMapping,ViosFCMapping").tap do |vios|
13
+ adapters.collect(&:server).each do |server|
14
+ case server
15
+ when VirtualSCSIServerAdapter
16
+ vios.vscsi_mapping_delete!(server.location)
17
+ when VirtualFibreChannelServerAdapter
18
+ vios.vfc_mapping_delete!(server.location)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ ##
27
+ # @!method template_provision(template_uuid, target_sys_uuid, changes)
28
+ # Deploy Logical Partition from a Template (performs Check, Transform and Deploy steps in a single method).
29
+ # @param template_uuid [String] The UUID of the Template to deploy an LPAR from.
30
+ # @param target_sys_uuid [String] The UUID of the Managed System to deploy the LPAR on.
31
+ # @param changes [Hash] Modifications to apply to the Template before deploying Logical Partition.
32
+ # @return [String] The UUID of the deployed Logical Partition.
33
+ def template_provision(template_uuid, target_sys_uuid, changes)
34
+ draft_uuid = template_check(template_uuid, target_sys_uuid).results["TEMPLATE_UUID"]
35
+ template_transform(draft_uuid, target_sys_uuid)
36
+ template_modify(draft_uuid, changes)
37
+ template_deploy(draft_uuid, target_sys_uuid).results["PartitionUuid"]
38
+ end
39
+ end
40
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IbmPowerHmc
4
- VERSION = "0.23.1"
4
+ VERSION = "0.25.0"
5
5
  end
data/lib/ibm_power_hmc.rb CHANGED
@@ -19,4 +19,5 @@ module IbmPowerHmc
19
19
  require_relative "./ibm_power_hmc/schema/sem"
20
20
  require_relative "./ibm_power_hmc/schema/templates"
21
21
  require_relative "./ibm_power_hmc/schema/uom"
22
+ require_relative "./ibm_power_hmc/utils"
22
23
  end
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.23.1
4
+ version: 0.25.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-23 00:00:00.000000000 Z
11
+ date: 2022-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -68,6 +68,7 @@ files:
68
68
  - lib/ibm_power_hmc/schema/sem.rb
69
69
  - lib/ibm_power_hmc/schema/templates.rb
70
70
  - lib/ibm_power_hmc/schema/uom.rb
71
+ - lib/ibm_power_hmc/utils.rb
71
72
  - lib/ibm_power_hmc/version.rb
72
73
  homepage: http://github.com/IBM/ibm_power_hmc_sdk_ruby
73
74
  licenses: