Class: OneviewSDK::API200::ServerProfile
- Defined in:
- lib/oneview-sdk/resource/api200/server_profile.rb
Overview
Server profile resource implementation
Direct Known Subclasses
OneviewSDK::API300::C7000::ServerProfile, OneviewSDK::API300::Synergy::ServerProfile
Constant Summary collapse
- BASE_URI =
'/rest/server-profiles'.freeze
- UNIQUE_IDENTIFIERS =
%w(name uri associatedServer serialNumber serverHardwareUri).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, find_with_pagination, 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.
21 22 23 24 25 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 21 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
301 302 303 304 305 306 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 301 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
315 316 317 318 319 320 321 322 323 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 315 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
331 332 333 334 335 336 337 338 339 340 341 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 331 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
355 356 357 358 359 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 355 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
367 368 369 370 371 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 367 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
379 380 381 382 383 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 379 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
167 168 169 170 171 172 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 167 def add_connection(network, = {}) self['connections'] = [] unless self['connections'] ['id'] ||= 0 unless [:id] # 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
196 197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 196 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
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 248 249 250 251 252 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 221 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
124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 124 def get_available_hardware ensure_client raise IncompleteResource, 'Must set @data[\'serverHardwareTypeUri\']' unless @data['serverHardwareTypeUri'] raise 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
116 117 118 119 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 116 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.
57 58 59 60 61 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 57 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.
65 66 67 68 69 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 65 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
106 107 108 109 110 111 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 106 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.
82 83 84 85 86 87 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 82 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
177 178 179 180 181 182 183 184 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 177 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
257 258 259 260 261 262 263 264 265 266 267 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 257 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
50 51 52 53 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 50 def set_enclosure(enclosure) self['enclosureUri'] = enclosure['uri'] if enclosure['uri'] || enclosure.retrieve! raise "Resource #{enclosure['name']} could not be found!" unless enclosure['uri'] end |
#set_enclosure_group(enclosure_group) ⇒ Object
Sets the Enclosure Group for the resource
43 44 45 46 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 43 def set_enclosure_group(enclosure_group) self['enclosureGroupUri'] = enclosure_group['uri'] if enclosure_group['uri'] || enclosure_group.retrieve! raise "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
280 281 282 283 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 280 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
29 30 31 32 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 29 def set_server_hardware(server_hardware) self['serverHardwareUri'] = server_hardware['uri'] if server_hardware['uri'] || server_hardware.retrieve! raise "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
36 37 38 39 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 36 def set_server_hardware_type(server_hardware_type) self['serverHardwareTypeUri'] = server_hardware_type['uri'] if server_hardware_type['uri'] || server_hardware_type.retrieve! raise "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.
90 91 92 93 94 95 96 97 98 99 |
# File 'lib/oneview-sdk/resource/api200/server_profile.rb', line 90 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 |