Class: OneviewSDK::Client

Inherits:
Object
  • Object
show all
Includes:
Rest
Defined in:
lib/oneview-sdk/client.rb

Overview

The client defines the connection to the OneView server and handles communication with it.

Constant Summary collapse

DEFAULT_API_VERSION =
200

Constants included from Rest

Rest::RESPONSE_CODE_ACCEPTED, Rest::RESPONSE_CODE_BAD_REQUEST, Rest::RESPONSE_CODE_CREATED, Rest::RESPONSE_CODE_NOT_FOUND, Rest::RESPONSE_CODE_NO_CONTENT, Rest::RESPONSE_CODE_OK, Rest::RESPONSE_CODE_UNAUTHORIZED

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Rest

#response_handler, #rest_api, #rest_delete, #rest_get, #rest_patch, #rest_post, #rest_put

Constructor Details

#initialize(options = {}) ⇒ Client

Creates client object, establish connection, and set up logging and api version.

Parameters:

  • options (Hash) (defaults to: {})

    the options to configure the client

Options Hash (options):

  • :logger (Logger) — default: Logger.new(STDOUT)

    Logger object to use. Must implement debug(String), info(String), warn(String), error(String), & level=

  • :log_level (Symbol) — default: :info

    Log level. Logger must define a constant with this name. ie Logger::INFO

  • :print_wait_dots (Boolean) — default: false

    When true, prints status dots while waiting on the tasks to complete.

  • :url (String)

    URL of OneView appliance

  • :user (String) — default: 'Administrator'

    The username to use for authentication with the OneView appliance

  • :password (String) — default: ENV['ONEVIEWSDK_PASSWORD']

    The password to use for authentication with OneView appliance

  • :token (String) — default: ENV['ONEVIEWSDK_TOKEN']

    The token to use for authentication with OneView appliance Use the token or the username and password (not both). The token has precedence.

  • :api_version (Integer) — default: 200

    This is the API version to use by default for requests

  • :ssl_enabled (Boolean) — default: true

    Use ssl for requests? Respects ENV

  • :timeout (Integer) — default: nil

    Override the default request timeout value



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/oneview-sdk/client.rb', line 41

def initialize(options = {})
  options = Hash[options.map { |k, v| [k.to_sym, v] }] # Convert string hash keys to symbols
  @logger = options[:logger] || Logger.new(STDOUT)
  [:debug, :info, :warn, :error, :level=].each { |m| fail InvalidClient, "Logger must respond to #{m} method " unless @logger.respond_to?(m) }
  @log_level = options[:log_level] || :info
  @logger.level = @logger.class.const_get(@log_level.upcase) rescue @log_level
  @print_wait_dots = options.fetch(:print_wait_dots, false)
  @url = options[:url] || ENV['ONEVIEWSDK_URL']
  fail InvalidClient, 'Must set the url option' unless @url
  @max_api_version = appliance_api_version
  if options[:api_version] && options[:api_version].to_i > @max_api_version
    logger.warn "API version #{options[:api_version]} is greater than the appliance API version (#{@max_api_version})"
  end
  @api_version = options[:api_version] || [DEFAULT_API_VERSION, @max_api_version].min
  @ssl_enabled = true
  if ENV.key?('ONEVIEWSDK_SSL_ENABLED')
    if %w(true false 1 0).include?(ENV['ONEVIEWSDK_SSL_ENABLED'])
      @ssl_enabled = ! %w(false 0).include?(ENV['ONEVIEWSDK_SSL_ENABLED'])
    else
      @logger.warn "Unrecognized ssl_enabled value '#{ENV['ONEVIEWSDK_SSL_ENABLED']}'. Valid options are 'true' & 'false'"
    end
  end
  @ssl_enabled = options[:ssl_enabled] unless options[:ssl_enabled].nil?
  @timeout = options[:timeout] unless options[:timeout].nil?
  @cert_store = OneviewSDK::SSLHelper.load_trusted_certs if @ssl_enabled
  @token = options[:token] || ENV['ONEVIEWSDK_TOKEN']
  return if @token
  @logger.warn 'User option not set. Using default (Administrator)' unless options[:user] || ENV['ONEVIEWSDK_USER']
  @user = options[:user] || ENV['ONEVIEWSDK_USER'] || 'Administrator'
  @password = options[:password] || ENV['ONEVIEWSDK_PASSWORD']
  fail InvalidClient, 'Must set user & password options or token option' unless @password
  @token = 
end

Instance Attribute Details

#api_versionObject

Returns the value of attribute api_version.



23
24
25
# File 'lib/oneview-sdk/client.rb', line 23

def api_version
  @api_version
end

#cert_storeObject

Returns the value of attribute cert_store.



23
24
25
# File 'lib/oneview-sdk/client.rb', line 23

def cert_store
  @cert_store
end

#log_levelObject

Returns the value of attribute log_level.



23
24
25
# File 'lib/oneview-sdk/client.rb', line 23

def log_level
  @log_level
end

#loggerObject

Returns the value of attribute logger.



23
24
25
# File 'lib/oneview-sdk/client.rb', line 23

def logger
  @logger
end

#max_api_versionObject (readonly)

Returns the value of attribute max_api_version.



22
23
24
# File 'lib/oneview-sdk/client.rb', line 22

def max_api_version
  @max_api_version
end

#passwordObject (readonly)

Returns the value of attribute password.



22
23
24
# File 'lib/oneview-sdk/client.rb', line 22

def password
  @password
end

Returns the value of attribute print_wait_dots.



23
24
25
# File 'lib/oneview-sdk/client.rb', line 23

def print_wait_dots
  @print_wait_dots
end

#ssl_enabledObject

Returns the value of attribute ssl_enabled.



23
24
25
# File 'lib/oneview-sdk/client.rb', line 23

def ssl_enabled
  @ssl_enabled
end

#timeoutObject

Returns the value of attribute timeout.



23
24
25
# File 'lib/oneview-sdk/client.rb', line 23

def timeout
  @timeout
end

#tokenObject (readonly)

Returns the value of attribute token.



22
23
24
# File 'lib/oneview-sdk/client.rb', line 22

def token
  @token
end

#urlObject (readonly)

Returns the value of attribute url.



22
23
24
# File 'lib/oneview-sdk/client.rb', line 22

def url
  @url
end

#userObject (readonly)

Returns the value of attribute user.



22
23
24
# File 'lib/oneview-sdk/client.rb', line 22

def user
  @user
end

Instance Method Details

#create(resource) ⇒ Object

Tells OneView to create the resource using the current attribute data

Parameters:

  • resource (Resource)

    the object to create



77
78
79
80
# File 'lib/oneview-sdk/client.rb', line 77

def create(resource)
  resource.client = self
  resource.create
end

#delete(resource) ⇒ Object

Deletes this object from OneView

Parameters:

  • resource (Resource)

    the object to delete



98
99
100
101
# File 'lib/oneview-sdk/client.rb', line 98

def delete(resource)
  resource.client = self
  resource.delete
end

#get_all(type) ⇒ Array<Resource>

Get array of all resources of a specified type

Examples:

Get all Ethernet Networks

networks = @client.get_all('EthernetNetworks')

Parameters:

  • type (String)

    Resource type

Returns:



108
109
110
111
112
# File 'lib/oneview-sdk/client.rb', line 108

def get_all(type)
  OneviewSDK.resource_named(type).get_all(self)
rescue StandardError
  raise TypeError, "Invalid resource type '#{type}'"
end

#refresh(resource) ⇒ Object

Updates this object using the data that exists on OneView

Parameters:

  • resource (Resource)

    the object to refresh



91
92
93
94
# File 'lib/oneview-sdk/client.rb', line 91

def refresh(resource)
  resource.client = self
  resource.refresh
end

#update(resource, attributes = {}) ⇒ Object

Sets the attribute data, and then saves to OneView

Parameters:

  • resource (Resource)

    the object to update



84
85
86
87
# File 'lib/oneview-sdk/client.rb', line 84

def update(resource, attributes = {})
  resource.client = self
  resource.update(attributes)
end

#wait_for(task_uri) ⇒ Hash

Wait for a task to complete

Parameters:

  • task_uri (String)

Returns:

  • (Hash)

    if the task completed successfully, return the task details

Raises:



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/oneview-sdk/client.rb', line 118

def wait_for(task_uri)
  fail ArgumentError, 'Must specify a task_uri!' if task_uri.nil? || task_uri.empty?
  loop do
    task_uri.gsub!(%r{/https:(.*)\/rest/}, '/rest')
    task = rest_get(task_uri)
    body = JSON.parse(task.body)
    case body['taskState'].downcase
    when 'completed'
      return body
    when 'warning'
      @logger.warn "Task ended with warning status. Details: #{JSON.pretty_generate(body['taskErrors']) rescue body}"
      return body
    when 'error', 'killed', 'terminated'
      msg = "Task ended with bad state: '#{body['taskState']}'.\nResponse: "
      msg += body['taskErrors'] ? JSON.pretty_generate(body['taskErrors']) : JSON.pretty_generate(body)
      fail TaskError, msg
    else
      print '.' if @print_wait_dots
      sleep 10
    end
  end
end