class OneviewSDK::API200::ServerProfileTemplate

Server profile template resource implementation

Constants

BASE_URI

Public Class Methods

new(client, params = {}, api_ver = nil) click to toggle source

Create a resource object, associate it with a client, and set its properties. @param [OneviewSDK::Client] client The client object for the OneView appliance @param [Hash] params The options for this resource (key-value pairs) @param [Integer] api_ver The api version to use when interracting with this resource.

Calls superclass method OneviewSDK::Resource::new
# File lib/oneview-sdk/resource/api200/server_profile_template.rb, line 24
def initialize(client, params = {}, api_ver = nil)
  super
  # Default values
  @data['type'] ||= 'ServerProfileTemplateV1'
end

Public Instance Methods

add_connection(network, connection_options = {}) click to toggle source

Adds a connection entry to server profile template @param [OneviewSDK::EthernetNetwork,OneviewSDK::FCNetwork] network Network associated with the connection @param [Hash<String,String>] connection_options Hash containing the configuration of the connection @option connection_options [Integer] 'allocatedMbps' The transmit throughput (mbps) currently allocated to

this connection. When Fibre Channel connections are set to Auto for requested bandwidth, the value can be set to -2000
to indicate that the actual value is unknown until OneView is able to negotiate the actual speed.

@option connection_options [Integer] 'allocatedVFs' The number of virtual functions allocated to this connection. This value will be null. @option connection_options [Hash] 'boot' indicates that the server will attempt to boot from this connection.

This object can only be specified if "boot.manageBoot" is set to 'true'

@option connection_options [String] 'deploymentStatus' The deployment status of the connection.

The value can be 'Undefined', 'Reserved', or 'Deployed'.

@option connection_options [String] 'functionType' Type of function required for the connection.

functionType cannot be modified after the connection is created.

@option connection_options [String] 'mac' The MAC address that is currently programmed on the FlexNic. @option connection_options [String] 'macType' Specifies the type of MAC address to be programmed into the IO Devices.

The value can be 'Virtual', 'Physical' or 'UserDefined'.

@option connection_options [String] 'maximumMbps' Maximum transmit throughput (mbps) allowed on this connection.

The value is limited by the maximum throughput of the network link and maximumBandwidth of the selected network (networkUri).
For Fibre Channel connections, the value is limited to the same value as the allocatedMbps.

@option connection_options [String] 'name' A string used to identify the respective connection.

The connection name is case insensitive, limited to 63 characters and must be unique within the profile.

@option connection_options [String] 'portId' Identifies the port (FlexNIC) used for this connection. @option connection_options [String] 'requestedMbps' The transmit throughput (mbps) that should be allocated to this connection. @option connection_options [String] 'requestedVFs' This value can be “Auto” or 0. @option connection_options [String] 'wwnn' The node WWN address that is currently programmed on the FlexNic. @option connection_options [String] 'wwpn' The port WWN address that is currently programmed on the FlexNic. @option connection_options [String] 'wwpnType' Specifies the type of WWN address to be porgrammed on the FlexNIC.

The value can be 'Virtual', 'Physical' or 'UserDefined'.
# File lib/oneview-sdk/resource/api200/server_profile_template.rb, line 88
def add_connection(network, connection_options = {})
  connection_options = Hash[connection_options.map { |k, v| [k.to_s, v] }]
  self['connections'] = [] unless self['connections']
  connection_options['id'] ||= 0
  connection_options['networkUri'] = network['uri'] if network['uri'] || network.retrieve!
  self['connections'] << connection_options
end
add_volume_attachment(volume, attachment_options = {}) click to toggle source

Adds a volume attachment entry with associated volume in server profile template @param [OneviewSDK::Volume] volume Volume Resource to add an attachment @param [Hash] attachment_options Options of the new attachment @option attachment_options [Fixnum] 'id' The ID of the attached storage volume. Do not use it if you want it to be created automatically. @option attachment_options [String] 'lun' The logical unit number. @option attachment_options [String] 'lunType' The logical unit number type: Auto or Manual. @option attachment_options [Boolean] 'permanent' Required. If true, indicates that the volume will persist when the profile is deleted.

If false, then the volume will be deleted when the profile is deleted.

@option attachment_options [Array] 'storagePaths' A list of host-to-target path associations. @raise [OneviewSDK::IncompleteResource] if volume not found @return Returns the connection hash if found, otherwise returns nil

# File lib/oneview-sdk/resource/api200/server_profile_template.rb, line 119
def add_volume_attachment(volume, attachment_options = {})
  raise IncompleteResource, 'Volume not found!' unless volume.retrieve!
  # Convert symbols keys to string
  attachment_options = Hash[attachment_options.map { |k, v| [k.to_s, v] }]
  self['sanStorage'] ||= {}
  self['sanStorage']['volumeAttachments'] ||= []
  self['sanStorage']['manageSanStorage'] ||= true
  attachment_options['id'] ||= 0
  attachment_options['volumeUri'] = volume['uri']
  attachment_options['volumeStoragePoolUri'] = volume['storagePoolUri']
  attachment_options['volumeStorageSystemUri'] = volume['storageSystemUri'] if volume['storageSystemUri']

  self['sanStorage']['volumeAttachments'] << attachment_options
end
create_volume_with_attachment(storage_pool, volume_options, attachment_options = {}) click to toggle source

Adds a volume attachment entry with new volume in Server profile template @param [OneviewSDK::StoragePool] storage_pool StoragePool Resource to add an attachment @param [Hash] volume_options Options to create a new Volume.

Please refer to OneviewSDK::Volume documentation for the data necessary to create a new Volume.

@param [Hash] attachment_options Options of the new attachment @option attachment_options [Fixnum] 'id' The ID of the attached storage volume. Do not use it if you want it to be created automatically. @option attachment_options [String] 'lun' The logical unit number. @option attachment_options [String] 'lunType' The logical unit number type: Auto or Manual. @option attachment_options [Boolean] 'permanent' Required. If true, indicates that the volume will persist when the profile is deleted.

If false, then the volume will be deleted when the profile is deleted.

@option attachment_options [Array] 'storagePaths' A list of host-to-target path associations. @raise [OneviewSDK::IncompleteResource] if storage pool not found @return Returns the connection hash if found, otherwise returns nil

# File lib/oneview-sdk/resource/api200/server_profile_template.rb, line 147
def create_volume_with_attachment(storage_pool, volume_options, attachment_options = {})
  raise IncompleteResource, 'Storage Pool not found!' unless storage_pool.retrieve!
  # Convert symbols keys to string in volume_options and attachment_options
  volume_options = Hash[volume_options.map { |k, v| [k.to_s, v] }]
  attachment_options = Hash[attachment_options.map { |k, v| [k.to_s, v] }]
  self['sanStorage'] ||= {}
  self['sanStorage']['volumeAttachments'] ||= []
  attachment_options['id'] ||= 0
  # Removing provisioningParameters and adding them to the top level hash
  provision_param = volume_options.delete('provisioningParameters') || volume_options.delete(:provisioningParameters)
  provision_param.each do |k, v|
    volume_options[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
  volume_options.each do |k, v|
    attachment_options["volume#{k.to_s[0].capitalize}#{k.to_s[1, k.to_s.length - 1]}"] = v
  end

  attachment_options['volumeStoragePoolUri'] = storage_pool['uri']
  # volumeProvisionedCapacityBytes is not following the same pattern in Volume
  attachment_options['volumeProvisionedCapacityBytes'] ||= attachment_options.delete('volumeRequestedCapacity')

  # Defaults
  attachment_options['volumeUri'] = nil
  attachment_options['volumeStorageSystemUri'] = nil
  attachment_options['permanent'] ||= true
  attachment_options['volumeShareable'] = false

  self['sanStorage']['manageSanStorage'] ||= true
  self['sanStorage']['volumeAttachments'] << attachment_options
end
get_available_hardware() click to toggle source

Gets the available server hardwares @raise [OneviewSDK::IncompleteResource] if serverHardwareTypeUri or enclosureGroupUri is missing @return [Array<OneviewSDK::ServerHardware>] Array of ServerHardware resources that matches this

profile template's server hardware type and enclosure group and who's state is 'NoProfileApplied'
# File lib/oneview-sdk/resource/api200/server_profile_template.rb, line 199
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.message}"
end
new_profile(name = nil) click to toggle source

Creates a ServerProfile using this template @param [String] name Name of new server profile @return [OneviewSDK::ServerProfile] New server profile from template.

Temporary object only; call .create to actually create resource on OneView.
# File lib/oneview-sdk/resource/api200/server_profile_template.rb, line 217
def new_profile(name = nil)
  ensure_client && ensure_uri
  response = @client.rest_get("#{@data['uri']}/new-profile")
  options = @client.response_handler(response)
  profile = OneviewSDK::ServerProfile.new(@client, options)
  profile['name'] = name ? name : "Server_Profile_created_from_#{@data['name']}"
  profile
end
remove_connection(connection_name) click to toggle source

Removes a connection entry in server profile template @param [String] connection_name Name of the connection @return Returns the connection hash if found, otherwise returns nil

# File lib/oneview-sdk/resource/api200/server_profile_template.rb, line 99
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) click to toggle source

Removes a volume attachment entry in Server profile template @param [Fixnum] id ID number of the attachment entry @return Returns the volume hash if found, otherwise returns nil

# File lib/oneview-sdk/resource/api200/server_profile_template.rb, line 183
def remove_volume_attachment(id)
  self['sanStorage'] ||= {}
  self['sanStorage']['volumeAttachments'] ||= []
  return if self['sanStorage'].empty? || self['sanStorage']['volumeAttachments'].empty?

  volume_attachment = nil
  self['sanStorage']['volumeAttachments'].each do |entry|
    volume_attachment = self['sanStorage']['volumeAttachments'].delete(entry) if entry['id'] == id
  end
  volume_attachment
end
set_enclosure_group(enclosure_group) click to toggle source

Sets the enclosure group for the server profile template @param [OneviewSDK::EnclosureGroup] enclosure_group Enclosure Group that the Server is a member

# File lib/oneview-sdk/resource/api200/server_profile_template.rb, line 39
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 = {}) click to toggle source

Sets the firmware driver for the current server profile template @param [OneviewSDK::FirmwareDriver] firmware Firmware Driver to be associated with the resource @param [Hash<String,Object>] firmware_options Firmware Driver options @option firmware_options [Boolean] 'manageFirmware' Indicates that the server firmware is configured using the server profile.

Value can be 'true' or 'false'.

@option firmware_options [Boolean] 'forceInstallFirmware' Force installation of firmware even if same or newer version is installed.

Downgrading the firmware can result in the installation of unsupported firmware and cause server hardware to cease operation.
Value can be 'true' or 'false'.

@option firmware_options [String] 'firmwareInstallType' Specifies the way a Service Pack for ProLiant (SPP) is installed.

This field is used if the 'manageFirmware' field is true.
Values are 'FirmwareAndOSDrivers', 'FirmwareOnly', and 'FirmwareOnlyOfflineMode'.
# File lib/oneview-sdk/resource/api200/server_profile_template.rb, line 55
def set_firmware_driver(firmware, firmware_options = {})
  firmware_options['firmwareBaselineUri'] = firmware['uri'] if firmware['uri'] || firmware.retrieve!
  self['firmware'] = firmware_options
end
set_server_hardware_type(server_hardware_type) click to toggle source

Sets the Server Hardware Type for the Server Profile Template @param [OneviewSDK::ServerHardwareType] server_hardware_type Type of the desired Server Hardware

# File lib/oneview-sdk/resource/api200/server_profile_template.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!
  raise "Resource #{server_hardware_type['name']} could not be found!" unless server_hardware_type['uri']
end