Class: OneviewSDK::ServerProfile
- Defined in:
- lib/oneview-sdk/resource/server_profile.rb
Overview
Server profile resource implementation
Constant Summary collapse
- BASE_URI =
'/rest/server-profiles'.freeze
Instance Attribute Summary
Attributes inherited from Resource
#api_version, #client, #data, #logger
Helpers collapse
-
#add_connection(network, connection_options = {}) ⇒ Object
Adds a connection entry to Server profile template.
-
#add_volume_attachment(volume, attachment_options = {}) ⇒ Object
Adds volume attachment entry with associated Volume in Server profile.
-
#create_volume_with_attachment(storage_pool, volume_options, attachment_options = {}) ⇒ Object
Adds volume attachment entry and creates a new Volume associated in the Server profile.
-
#get_available_hardware ⇒ Array<OneviewSDK::ServerHardware>
Gets available server hardware.
-
#get_available_networks ⇒ Hash
Gets all the available Ethernet and FC Networks, and Network Sets.
-
#get_server_hardware ⇒ OneviewSDK::ServerHardware?
Gets attached ServerHardware for the profile.
-
#remove_connection(connection_name) ⇒ Object
Removes a connection entry in Server profile template.
-
#remove_volume_attachment(id) ⇒ Object
Removes a volume attachment entry in the Server profile.
-
#set_firmware_driver(firmware, firmware_options = {}) ⇒ Object
Sets the Firmware Driver for the server profile.
Class Method Summary collapse
-
.get_available_networks(client, query) ⇒ Hash
Gets all the available ethernet and fc networks, and network sets.
-
.get_available_servers(client, query = nil) ⇒ Hash
Gets the available servers based on the query parameters.
-
.get_available_storage_system(client, query = nil) ⇒ Object
Gets the available storage systems based on the query parameters.
-
.get_available_storage_systems(client, query = nil) ⇒ Object
Gets the available storage systems based on the query parameters.
-
.get_available_targets(client, query = nil) ⇒ Object
Get the available targets based on the query parameters.
-
.get_profile_ports(client, query = nil) ⇒ Object
Gets all the available ethernet and fc networks.
Instance Method Summary collapse
-
#get_compliance_preview ⇒ Hash
Gets the preview of manual and automatic updates required to make the server profile consistent with its template.
-
#get_messages ⇒ Hash
Retrieves the error or status messages associated with the specified profile.
-
#get_transformation(query = nil) ⇒ Hash
Transforms an existing profile by supplying a new server hardware type and/or enclosure group.
-
#initialize(client, params = {}, api_ver = nil) ⇒ ServerProfile
constructor
A new instance of ServerProfile.
-
#set_enclosure(enclosure) ⇒ Object
Sets the Enclosure Group for the resource.
-
#set_enclosure_group(enclosure_group) ⇒ Object
Sets the Enclosure Group for the resource.
-
#set_server_hardware(server_hardware) ⇒ Object
Sets the Server Hardware for the resource.
-
#set_server_hardware_type(server_hardware_type) ⇒ Object
Sets the Server Hardware Type for the resource.
-
#update_from_template ⇒ Object
Updates the server profile from the server profile template.
Methods inherited from Resource
#==, #[], #[]=, build_query, #create, #create!, #delete, #each, #eql?, #exists?, find_by, from_file, get_all, #like?, #refresh, #retrieve!, schema, #schema, #set, #set_all, #to_file, #update
Constructor Details
#initialize(client, params = {}, api_ver = nil) ⇒ ServerProfile
Returns a new instance of ServerProfile.
17 18 19 20 21 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 17 def initialize(client, params = {}, api_ver = nil) super # Default values @data['type'] ||= 'ServerProfileV5' end |
Class Method Details
.get_available_networks(client, query) ⇒ Hash
Gets all the available ethernet and fc networks, and network sets
296 297 298 299 300 301 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 296 def self.get_available_networks(client, query) query_uri = build_query(query) if query response = client.rest_get("#{BASE_URI}/available-networks#{query_uri}") body = client.response_handler(response) body.select { |k, _v| %w(ethernetNetworks networkSets fcNetworks).include?(k) } end |
.get_available_servers(client, query = nil) ⇒ Hash
Gets the available servers based on the query parameters
310 311 312 313 314 315 316 317 318 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 310 def self.get_available_servers(client, query = nil) if query query_uri = build_query(query) # profileUri attribute is not following the standards in OneView query_uri.sub!('serverProfileUri', 'profileUri') end response = client.rest_get("#{BASE_URI}/available-servers#{query_uri}") client.response_handler(response) end |
.get_available_storage_system(client, query = nil) ⇒ Object
Gets the available storage systems based on the query parameters
326 327 328 329 330 331 332 333 334 335 336 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 326 def self.get_available_storage_system(client, query = nil) # For storage_system the query requires the ID instead the URI if query && query['storage_system'] query['storage_system'].retrieve! unless query['storage_system']['uri'] query['storage_system_id'] = query['storage_system']['uri'].split('/').last query.delete('storage_system') end query_uri = build_query(query) if query response = client.rest_get("#{BASE_URI}/available-storage-system#{query_uri}") client.response_handler(response) end |
.get_available_storage_systems(client, query = nil) ⇒ Object
Gets the available storage systems based on the query parameters
350 351 352 353 354 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 350 def self.get_available_storage_systems(client, query = nil) query_uri = build_query(query) if query response = client.rest_get("#{BASE_URI}/available-storage-systems#{query_uri}") client.response_handler(response) end |
.get_available_targets(client, query = nil) ⇒ Object
Get the available targets based on the query parameters
362 363 364 365 366 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 362 def self.get_available_targets(client, query = nil) query_uri = build_query(query) if query response = client.rest_get("#{BASE_URI}/available-targets#{query_uri}") client.response_handler(response) end |
.get_profile_ports(client, query = nil) ⇒ Object
Gets all the available ethernet and fc networks
374 375 376 377 378 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 374 def self.get_profile_ports(client, query = nil) query_uri = build_query(query) if query response = client.rest_get("#{BASE_URI}/profile-ports#{query_uri}") client.response_handler(response) end |
Instance Method Details
#add_connection(network, connection_options = {}) ⇒ Object
Adds a connection entry to Server profile template
162 163 164 165 166 167 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 162 def add_connection(network, = {}) self['connections'] = [] unless self['connections'] ['id'] = 0 # Letting OneView treat the ID registering ['networkUri'] = network['uri'] if network['uri'] || network.retrieve! self['connections'] << end |
#add_volume_attachment(volume, attachment_options = {}) ⇒ Object
Adds volume attachment entry with associated Volume in Server profile
191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 191 def (volume, = {}) self['sanStorage'] ||= {} self['sanStorage']['volumeAttachments'] ||= [] ['id'] ||= 0 volume.retrieve! unless volume['uri'] || volume['storagePoolUri'] || volume['storageSystemUri'] ['volumeUri'] = volume['uri'] ['volumeStoragePoolUri'] = volume['storagePoolUri'] ['volumeStorageSystemUri'] = volume['storageSystemUri'] self['sanStorage']['volumeAttachments'] << end |
#create_volume_with_attachment(storage_pool, volume_options, attachment_options = {}) ⇒ Object
Adds volume attachment entry and creates a new Volume associated in the Server profile
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 216 def (storage_pool, , = {}) self['sanStorage'] ||= {} self['sanStorage']['volumeAttachments'] ||= [] ['id'] ||= 0 # Removing provisioningParameters and adding them to the top level hash provision_param = .delete('provisioningParameters') || .delete(:provisioningParameters) provision_param.each do |k, v| [k] = v end # Each provisioningParameter has the prefix 'volume' attached to its name in the original options # Also, it needs to respect the lower camel case .each do |k, v| ["volume#{k.to_s[0].capitalize}#{k.to_s[1, k.to_s.length - 1]}"] = v end ['volumeStoragePoolUri'] = storage_pool['uri'] if storage_pool['uri'] || storage_pool.retrieve! # Since the volume is being created in this method, it needs to be nil ['volumeUri'] = nil ['volumeStorageSystemUri'] = nil # volumeProvisionedCapacityBytes is not following the same pattern in Volume ['volumeProvisionedCapacityBytes'] ||= .delete('volumeRequestedCapacity') # Defaults ['permanent'] ||= true ['lunType'] ||= 'Auto' ['lun'] ||= nil ['storagePaths'] ||= [] self['sanStorage']['volumeAttachments'] << end |
#get_available_hardware ⇒ Array<OneviewSDK::ServerHardware>
Gets available server hardware
120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 120 def get_available_hardware ensure_client fail IncompleteResource, 'Must set @data[\'serverHardwareTypeUri\']' unless @data['serverHardwareTypeUri'] fail IncompleteResource, 'Must set @data[\'enclosureGroupUri\']' unless @data['enclosureGroupUri'] params = { state: 'NoProfileApplied', serverHardwareTypeUri: @data['serverHardwareTypeUri'], serverGroupUri: @data['enclosureGroupUri'] } OneviewSDK::ServerHardware.find_by(@client, params) rescue StandardError => e raise IncompleteResource, "Failed to get available hardware. Message: #{e.}" end |
#get_available_networks ⇒ Hash
Gets all the available Ethernet and FC Networks, and Network Sets
112 113 114 115 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 112 def get_available_networks query = { enclosure_group_uri: @data['enclosureGroupUri'], server_hardware_type_uri: @data['serverHardwareTypeUri'] } self.class.get_available_networks(@client, query) end |
#get_compliance_preview ⇒ Hash
Gets the preview of manual and automatic updates required to make the server profile consistent with its template.
53 54 55 56 57 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 53 def get_compliance_preview ensure_client & ensure_uri response = @client.rest_get("#{self['uri']}/compliance-preview") @client.response_handler(response) end |
#get_messages ⇒ Hash
Retrieves the error or status messages associated with the specified profile.
61 62 63 64 65 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 61 def ensure_client & ensure_uri response = @client.rest_get("#{self['uri']}/messages") @client.response_handler(response) end |
#get_server_hardware ⇒ OneviewSDK::ServerHardware?
Gets attached ServerHardware for the profile
102 103 104 105 106 107 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 102 def get_server_hardware return nil unless self['serverHardwareUri'] sh = OneviewSDK::ServerHardware.new(@client, uri: self['serverHardwareUri']) sh.retrieve! sh end |
#get_transformation(query = nil) ⇒ Hash
Transforms an existing profile by supplying a new server hardware type and/or enclosure group.
A profile will be returned with a new configuration based on the capabilities of the supplied
server hardware type and/or enclosure group. All deployed connections will have their port assignment
set to 'Auto'. Re-selection of the server hardware may also be required. The new profile can subsequently
be used for the PUT https://{appl}/rest/server- profiles/{id} API but is not guaranteed to pass
validation. Any incompatibilities will be flagged when the transformed server profile is submitted.
78 79 80 81 82 83 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 78 def get_transformation(query = nil) ensure_client & ensure_uri query_uri = OneviewSDK::Resource.build_query(query) if query response = @client.rest_get("#{self['uri']}/transformation#{query_uri}") @client.response_handler(response) end |
#remove_connection(connection_name) ⇒ Object
Removes a connection entry in Server profile template
172 173 174 175 176 177 178 179 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 172 def remove_connection(connection_name) desired_connection = nil return desired_connection unless self['connections'] self['connections'].each do |con| desired_connection = self['connections'].delete(con) if con['name'] == connection_name end desired_connection end |
#remove_volume_attachment(id) ⇒ Object
Removes a volume attachment entry in the Server profile
252 253 254 255 256 257 258 259 260 261 262 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 252 def (id) self['sanStorage'] ||= {} self['sanStorage']['volumeAttachments'] ||= [] return if self['sanStorage'].empty? || self['sanStorage']['volumeAttachments'].empty? = nil self['sanStorage']['volumeAttachments'].each do |entry| = self['sanStorage']['volumeAttachments'].delete(entry) if entry['id'] == id end end |
#set_enclosure(enclosure) ⇒ Object
Sets the Enclosure Group for the resource
46 47 48 49 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 46 def set_enclosure(enclosure) self['enclosureUri'] = enclosure['uri'] if enclosure['uri'] || enclosure.retrieve! fail "Resource #{enclosure['name']} could not be found!" unless enclosure['uri'] end |
#set_enclosure_group(enclosure_group) ⇒ Object
Sets the Enclosure Group for the resource
39 40 41 42 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 39 def set_enclosure_group(enclosure_group) self['enclosureGroupUri'] = enclosure_group['uri'] if enclosure_group['uri'] || enclosure_group.retrieve! fail "Resource #{enclosure_group['name']} could not be found!" unless enclosure_group['uri'] end |
#set_firmware_driver(firmware, firmware_options = {}) ⇒ Object
Sets the Firmware Driver for the server profile
275 276 277 278 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 275 def set_firmware_driver(firmware, = {}) ['firmwareBaselineUri'] = firmware['uri'] if firmware['uri'] || firmware.retrieve! self['firmware'] = end |
#set_server_hardware(server_hardware) ⇒ Object
Sets the Server Hardware for the resource
25 26 27 28 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 25 def set_server_hardware(server_hardware) self['serverHardwareUri'] = server_hardware['uri'] if server_hardware['uri'] || server_hardware.retrieve! fail "Resource #{server_hardware['name']} could not be found!" unless server_hardware['uri'] end |
#set_server_hardware_type(server_hardware_type) ⇒ Object
Sets the Server Hardware Type for the resource
32 33 34 35 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 32 def set_server_hardware_type(server_hardware_type) self['serverHardwareTypeUri'] = server_hardware_type['uri'] if server_hardware_type['uri'] || server_hardware_type.retrieve! fail "Resource #{server_hardware_type['name']} could not be found!" unless server_hardware_type['uri'] end |
#update_from_template ⇒ Object
Updates the server profile from the server profile template.
86 87 88 89 90 91 92 93 94 95 |
# File 'lib/oneview-sdk/resource/server_profile.rb', line 86 def update_from_template ensure_client & ensure_uri patch_operation = { 'op' => 'replace', 'path' => '/templateCompliance', 'value' => 'Compliant' } = { 'If-Match' => self['eTag'], 'body' => [patch_operation] } response = @client.rest_patch(self['uri'], ) @client.response_handler(response) end |