oneview-sdk 2.2.1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +50 -0
- data/README.md +61 -15
- data/Rakefile +39 -1
- data/lib/oneview-sdk.rb +38 -3
- data/lib/oneview-sdk/cli.rb +85 -30
- data/lib/oneview-sdk/client.rb +21 -18
- data/lib/oneview-sdk/config_loader.rb +1 -1
- data/lib/oneview-sdk/resource.rb +44 -36
- data/lib/oneview-sdk/resource/api200.rb +34 -0
- data/lib/oneview-sdk/resource/api200/connection_template.rb +52 -0
- data/lib/oneview-sdk/resource/api200/datacenter.rb +81 -0
- data/lib/oneview-sdk/resource/api200/enclosure.rb +203 -0
- data/lib/oneview-sdk/resource/api200/enclosure_group.rb +86 -0
- data/lib/oneview-sdk/resource/api200/ethernet_network.rb +60 -0
- data/lib/oneview-sdk/resource/api200/fabric.rb +45 -0
- data/lib/oneview-sdk/resource/api200/fc_network.rb +34 -0
- data/lib/oneview-sdk/resource/api200/fcoe_network.rb +32 -0
- data/lib/oneview-sdk/resource/api200/firmware_bundle.rb +56 -0
- data/lib/oneview-sdk/resource/{fcoe_network.rb → api200/firmware_driver.rb} +21 -12
- data/lib/oneview-sdk/resource/api200/interconnect.rb +112 -0
- data/lib/oneview-sdk/resource/api200/lig_uplink_set.rb +84 -0
- data/lib/oneview-sdk/resource/api200/logical_downlink.rb +57 -0
- data/lib/oneview-sdk/resource/api200/logical_enclosure.rb +88 -0
- data/lib/oneview-sdk/resource/api200/logical_interconnect.rb +251 -0
- data/lib/oneview-sdk/resource/api200/logical_interconnect_group.rb +116 -0
- data/lib/oneview-sdk/resource/api200/logical_switch.rb +188 -0
- data/lib/oneview-sdk/resource/api200/logical_switch_group.rb +70 -0
- data/lib/oneview-sdk/resource/api200/managed_san.rb +83 -0
- data/lib/oneview-sdk/resource/api200/network_set.rb +68 -0
- data/lib/oneview-sdk/resource/api200/power_device.rb +178 -0
- data/lib/oneview-sdk/resource/api200/rack.rb +88 -0
- data/lib/oneview-sdk/resource/api200/resource.rb +18 -0
- data/lib/oneview-sdk/resource/api200/san_manager.rb +92 -0
- data/lib/oneview-sdk/resource/api200/server_hardware.rb +244 -0
- data/lib/oneview-sdk/resource/api200/server_hardware_type.rb +61 -0
- data/lib/oneview-sdk/resource/api200/server_profile.rb +385 -0
- data/lib/oneview-sdk/resource/api200/server_profile_template.rb +217 -0
- data/lib/oneview-sdk/resource/api200/storage_pool.rb +92 -0
- data/lib/oneview-sdk/resource/api200/storage_system.rb +157 -0
- data/lib/oneview-sdk/resource/api200/switch.rb +91 -0
- data/lib/oneview-sdk/resource/api200/unmanaged_device.rb +59 -0
- data/lib/oneview-sdk/resource/api200/uplink_set.rb +83 -0
- data/lib/oneview-sdk/resource/api200/volume.rb +192 -0
- data/lib/oneview-sdk/resource/api200/volume_attachment.rb +83 -0
- data/lib/oneview-sdk/resource/api200/volume_snapshot.rb +50 -0
- data/lib/oneview-sdk/resource/api200/volume_template.rb +99 -0
- data/lib/oneview-sdk/resource/api300.rb +66 -0
- data/lib/oneview-sdk/resource/api300/c7000.rb +27 -0
- data/lib/oneview-sdk/resource/api300/c7000/connection_template.rb +30 -0
- data/lib/oneview-sdk/resource/api300/c7000/datacenter.rb +22 -0
- data/lib/oneview-sdk/resource/api300/c7000/enclosure.rb +48 -0
- data/lib/oneview-sdk/resource/api300/c7000/enclosure_group.rb +37 -0
- data/lib/oneview-sdk/resource/api300/c7000/ethernet_network.rb +35 -0
- data/lib/oneview-sdk/resource/api300/c7000/fabric.rb +22 -0
- data/lib/oneview-sdk/resource/api300/c7000/fc_network.rb +37 -0
- data/lib/oneview-sdk/resource/api300/c7000/fcoe_network.rb +35 -0
- data/lib/oneview-sdk/resource/api300/c7000/firmware_bundle.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/firmware_driver.rb +22 -0
- data/lib/oneview-sdk/resource/api300/c7000/interconnect.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/lig_uplink_set.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/logical_downlink.rb +34 -0
- data/lib/oneview-sdk/resource/api300/c7000/logical_enclosure.rb +35 -0
- data/lib/oneview-sdk/resource/api300/c7000/logical_interconnect.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/logical_interconnect_group.rb +33 -0
- data/lib/oneview-sdk/resource/api300/c7000/logical_switch.rb +51 -0
- data/lib/oneview-sdk/resource/api300/c7000/logical_switch_group.rb +33 -0
- data/lib/oneview-sdk/resource/api300/c7000/managed_san.rb +36 -0
- data/lib/oneview-sdk/resource/api300/c7000/network_set.rb +37 -0
- data/lib/oneview-sdk/resource/api300/c7000/power_device.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/rack.rb +22 -0
- data/lib/oneview-sdk/resource/api300/c7000/resource.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/san_manager.rb +22 -0
- data/lib/oneview-sdk/resource/api300/c7000/server_hardware.rb +93 -0
- data/lib/oneview-sdk/resource/api300/c7000/server_hardware_type.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/server_profile.rb +33 -0
- data/lib/oneview-sdk/resource/api300/c7000/server_profile_template.rb +50 -0
- data/lib/oneview-sdk/resource/api300/c7000/storage_pool.rb +29 -0
- data/lib/oneview-sdk/resource/api300/c7000/storage_system.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/switch.rb +31 -0
- data/lib/oneview-sdk/resource/api300/c7000/unmanaged_device.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/uplink_set.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/volume.rb +22 -0
- data/lib/oneview-sdk/resource/api300/c7000/volume_attachment.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/volume_snapshot.rb +21 -0
- data/lib/oneview-sdk/resource/api300/c7000/volume_template.rb +32 -0
- data/lib/oneview-sdk/resource/api300/synergy.rb +27 -0
- data/lib/oneview-sdk/resource/api300/synergy/connection_template.rb +30 -0
- data/lib/oneview-sdk/resource/api300/synergy/datacenter.rb +22 -0
- data/lib/oneview-sdk/resource/api300/synergy/drive_enclosure.rb +71 -0
- data/lib/oneview-sdk/resource/api300/synergy/enclosure.rb +110 -0
- data/lib/oneview-sdk/resource/api300/synergy/enclosure_group.rb +43 -0
- data/lib/oneview-sdk/resource/api300/synergy/ethernet_network.rb +35 -0
- data/lib/oneview-sdk/resource/api300/synergy/fabric.rb +46 -0
- data/lib/oneview-sdk/resource/api300/synergy/fc_network.rb +37 -0
- data/lib/oneview-sdk/resource/api300/synergy/fcoe_network.rb +35 -0
- data/lib/oneview-sdk/resource/api300/synergy/firmware_bundle.rb +21 -0
- data/lib/oneview-sdk/resource/api300/synergy/firmware_driver.rb +22 -0
- data/lib/oneview-sdk/resource/api300/synergy/interconnect.rb +43 -0
- data/lib/oneview-sdk/resource/api300/synergy/lig_uplink_set.rb +21 -0
- data/lib/oneview-sdk/resource/api300/synergy/logical_downlink.rb +34 -0
- data/lib/oneview-sdk/resource/api300/synergy/logical_enclosure.rb +59 -0
- data/lib/oneview-sdk/resource/api300/synergy/logical_interconnect.rb +21 -0
- data/lib/oneview-sdk/resource/api300/synergy/logical_interconnect_group.rb +119 -0
- data/lib/oneview-sdk/resource/api300/synergy/logical_switch.rb +33 -0
- data/lib/oneview-sdk/resource/api300/synergy/logical_switch_group.rb +45 -0
- data/lib/oneview-sdk/resource/{firmware_driver.rb → api300/synergy/managed_san.rb} +7 -17
- data/lib/oneview-sdk/resource/api300/synergy/network_set.rb +37 -0
- data/lib/oneview-sdk/resource/api300/synergy/power_device.rb +21 -0
- data/lib/oneview-sdk/resource/api300/synergy/rack.rb +22 -0
- data/lib/oneview-sdk/resource/api300/synergy/resource.rb +21 -0
- data/lib/oneview-sdk/resource/api300/synergy/san_manager.rb +22 -0
- data/lib/oneview-sdk/resource/api300/synergy/sas_interconnect.rb +87 -0
- data/lib/oneview-sdk/resource/api300/synergy/sas_logical_interconnect.rb +110 -0
- data/lib/oneview-sdk/resource/api300/synergy/sas_logical_interconnect_group.rb +87 -0
- data/lib/oneview-sdk/resource/api300/synergy/server_hardware.rb +30 -0
- data/lib/oneview-sdk/resource/api300/synergy/server_hardware_type.rb +21 -0
- data/lib/oneview-sdk/resource/api300/synergy/server_profile.rb +78 -0
- data/lib/oneview-sdk/resource/api300/synergy/server_profile_template.rb +34 -0
- data/lib/oneview-sdk/resource/api300/synergy/storage_pool.rb +22 -0
- data/lib/oneview-sdk/resource/api300/synergy/storage_system.rb +21 -0
- data/lib/oneview-sdk/resource/api300/synergy/switch.rb +37 -0
- data/lib/oneview-sdk/resource/api300/synergy/unmanaged_device.rb +21 -0
- data/lib/oneview-sdk/resource/api300/synergy/uplink_set.rb +21 -0
- data/lib/oneview-sdk/resource/api300/synergy/volume.rb +22 -0
- data/lib/oneview-sdk/resource/api300/synergy/volume_attachment.rb +21 -0
- data/lib/oneview-sdk/resource/api300/synergy/volume_snapshot.rb +21 -0
- data/lib/oneview-sdk/resource/api300/synergy/volume_template.rb +32 -0
- data/lib/oneview-sdk/rest.rb +7 -10
- data/lib/oneview-sdk/ssl_helper.rb +3 -3
- data/lib/oneview-sdk/version.rb +1 -1
- data/oneview-sdk.gemspec +5 -5
- metadata +126 -47
- data/.gitattributes +0 -2
- data/.gitignore +0 -29
- data/.rubocop.yml +0 -80
- data/.travis.yml +0 -12
- data/lib/oneview-sdk/resource/connection_template.rb +0 -48
- data/lib/oneview-sdk/resource/datacenter.rb +0 -77
- data/lib/oneview-sdk/resource/enclosure.rb +0 -191
- data/lib/oneview-sdk/resource/enclosure_group.rb +0 -82
- data/lib/oneview-sdk/resource/ethernet_network.rb +0 -56
- data/lib/oneview-sdk/resource/fabric.rb +0 -41
- data/lib/oneview-sdk/resource/fc_network.rb +0 -30
- data/lib/oneview-sdk/resource/firmware_bundle.rb +0 -50
- data/lib/oneview-sdk/resource/interconnect.rb +0 -107
- data/lib/oneview-sdk/resource/lig_uplink_set.rb +0 -80
- data/lib/oneview-sdk/resource/logical_downlink.rb +0 -53
- data/lib/oneview-sdk/resource/logical_enclosure.rb +0 -86
- data/lib/oneview-sdk/resource/logical_interconnect.rb +0 -247
- data/lib/oneview-sdk/resource/logical_interconnect_group.rb +0 -112
- data/lib/oneview-sdk/resource/logical_switch.rb +0 -184
- data/lib/oneview-sdk/resource/logical_switch_group.rb +0 -66
- data/lib/oneview-sdk/resource/managed_san.rb +0 -79
- data/lib/oneview-sdk/resource/network_set.rb +0 -64
- data/lib/oneview-sdk/resource/power_device.rb +0 -174
- data/lib/oneview-sdk/resource/rack.rb +0 -83
- data/lib/oneview-sdk/resource/san_manager.rb +0 -88
- data/lib/oneview-sdk/resource/server_hardware.rb +0 -209
- data/lib/oneview-sdk/resource/server_hardware_type.rb +0 -58
- data/lib/oneview-sdk/resource/server_profile.rb +0 -380
- data/lib/oneview-sdk/resource/server_profile_template.rb +0 -213
- data/lib/oneview-sdk/resource/storage_pool.rb +0 -63
- data/lib/oneview-sdk/resource/storage_system.rb +0 -113
- data/lib/oneview-sdk/resource/switch.rb +0 -86
- data/lib/oneview-sdk/resource/unmanaged_device.rb +0 -55
- data/lib/oneview-sdk/resource/uplink_set.rb +0 -79
- data/lib/oneview-sdk/resource/volume.rb +0 -188
- data/lib/oneview-sdk/resource/volume_attachment.rb +0 -79
- data/lib/oneview-sdk/resource/volume_snapshot.rb +0 -46
- data/lib/oneview-sdk/resource/volume_template.rb +0 -95
data/lib/oneview-sdk/client.rb
CHANGED
@@ -17,8 +17,6 @@ require_relative 'ssl_helper'
|
|
17
17
|
module OneviewSDK
|
18
18
|
# The client defines the connection to the OneView server and handles communication with it.
|
19
19
|
class Client
|
20
|
-
DEFAULT_API_VERSION = 200
|
21
|
-
|
22
20
|
attr_reader :url, :user, :token, :password, :max_api_version
|
23
21
|
attr_accessor :ssl_enabled, :api_version, :logger, :log_level, :cert_store, :print_wait_dots, :timeout
|
24
22
|
|
@@ -40,22 +38,25 @@ module OneviewSDK
|
|
40
38
|
# @option options [Integer] :timeout (nil) Override the default request timeout value
|
41
39
|
def initialize(options = {})
|
42
40
|
options = Hash[options.map { |k, v| [k.to_sym, v] }] # Convert string hash keys to symbols
|
41
|
+
STDOUT.sync = true
|
43
42
|
@logger = options[:logger] || Logger.new(STDOUT)
|
44
|
-
[:debug, :info, :warn, :error, :level=].each { |m|
|
43
|
+
[:debug, :info, :warn, :error, :level=].each { |m| raise InvalidClient, "Logger must respond to #{m} method " unless @logger.respond_to?(m) }
|
45
44
|
@log_level = options[:log_level] || :info
|
46
45
|
@logger.level = @logger.class.const_get(@log_level.upcase) rescue @log_level
|
47
46
|
@print_wait_dots = options.fetch(:print_wait_dots, false)
|
48
47
|
@url = options[:url] || ENV['ONEVIEWSDK_URL']
|
49
|
-
|
48
|
+
raise InvalidClient, 'Must set the url option' unless @url
|
50
49
|
@max_api_version = appliance_api_version
|
51
50
|
if options[:api_version] && options[:api_version].to_i > @max_api_version
|
52
51
|
logger.warn "API version #{options[:api_version]} is greater than the appliance API version (#{@max_api_version})"
|
53
52
|
end
|
54
|
-
@api_version = options[:api_version] || [DEFAULT_API_VERSION, @max_api_version].min
|
53
|
+
@api_version = options[:api_version] || [OneviewSDK::DEFAULT_API_VERSION, @max_api_version].min
|
54
|
+
# Set the default OneviewSDK module API version
|
55
|
+
OneviewSDK.api_version = @api_version unless OneviewSDK.api_version_updated? || !OneviewSDK::SUPPORTED_API_VERSIONS.include?(@api_version)
|
55
56
|
@ssl_enabled = true
|
56
57
|
if ENV.key?('ONEVIEWSDK_SSL_ENABLED')
|
57
58
|
if %w(true false 1 0).include?(ENV['ONEVIEWSDK_SSL_ENABLED'])
|
58
|
-
@ssl_enabled =
|
59
|
+
@ssl_enabled = !%w(false 0).include?(ENV['ONEVIEWSDK_SSL_ENABLED'])
|
59
60
|
else
|
60
61
|
@logger.warn "Unrecognized ssl_enabled value '#{ENV['ONEVIEWSDK_SSL_ENABLED']}'. Valid options are 'true' & 'false'"
|
61
62
|
end
|
@@ -68,7 +69,7 @@ module OneviewSDK
|
|
68
69
|
@logger.warn 'User option not set. Using default (Administrator)' unless options[:user] || ENV['ONEVIEWSDK_USER']
|
69
70
|
@user = options[:user] || ENV['ONEVIEWSDK_USER'] || 'Administrator'
|
70
71
|
@password = options[:password] || ENV['ONEVIEWSDK_PASSWORD']
|
71
|
-
|
72
|
+
raise InvalidClient, 'Must set user & password options or token option' unless @password
|
72
73
|
@token = login
|
73
74
|
end
|
74
75
|
|
@@ -102,13 +103,15 @@ module OneviewSDK
|
|
102
103
|
|
103
104
|
# Get array of all resources of a specified type
|
104
105
|
# @param [String] type Resource type
|
106
|
+
# @param [Integer] api_ver API module version to fetch resources from
|
105
107
|
# @return [Array<Resource>] Results
|
106
108
|
# @example Get all Ethernet Networks
|
107
109
|
# networks = @client.get_all('EthernetNetworks')
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
raise TypeError, "Invalid resource type '#{type}'"
|
110
|
+
# @raise [TypeError] if the type is invalid
|
111
|
+
def get_all(type, api_ver = @api_version)
|
112
|
+
klass = OneviewSDK.resource_named(type, api_ver)
|
113
|
+
raise TypeError, "Invalid resource type '#{type}'. OneviewSDK::API#{api_ver} does not contain a class like it." unless klass
|
114
|
+
klass.get_all(self)
|
112
115
|
end
|
113
116
|
|
114
117
|
# Wait for a task to complete
|
@@ -116,9 +119,9 @@ module OneviewSDK
|
|
116
119
|
# @raise [OneviewSDK::TaskError] if the task resulted in an error or early termination.
|
117
120
|
# @return [Hash] if the task completed successfully, return the task details
|
118
121
|
def wait_for(task_uri)
|
119
|
-
|
122
|
+
raise ArgumentError, 'Must specify a task_uri!' if task_uri.nil? || task_uri.empty?
|
120
123
|
loop do
|
121
|
-
task_uri.gsub!(%r{
|
124
|
+
task_uri.gsub!(%r{https:(.*)\/rest}, '/rest')
|
122
125
|
task = rest_get(task_uri)
|
123
126
|
body = JSON.parse(task.body)
|
124
127
|
case body['taskState'].downcase
|
@@ -130,7 +133,7 @@ module OneviewSDK
|
|
130
133
|
when 'error', 'killed', 'terminated'
|
131
134
|
msg = "Task ended with bad state: '#{body['taskState']}'.\nResponse: "
|
132
135
|
msg += body['taskErrors'] ? JSON.pretty_generate(body['taskErrors']) : JSON.pretty_generate(body)
|
133
|
-
|
136
|
+
raise TaskError, msg
|
134
137
|
else
|
135
138
|
print '.' if @print_wait_dots
|
136
139
|
sleep 10
|
@@ -146,12 +149,12 @@ module OneviewSDK
|
|
146
149
|
options = { 'Content-Type' => :none, 'X-API-Version' => :none, 'auth' => :none }
|
147
150
|
response = rest_api(:get, '/rest/version', options)
|
148
151
|
version = response_handler(response)['currentVersion']
|
149
|
-
|
152
|
+
raise ConnectionError, "Couldn't get API version" unless version
|
150
153
|
version = version.to_i if version.class != Fixnum
|
151
154
|
version
|
152
155
|
rescue ConnectionError
|
153
|
-
@logger.warn "Failed to get OneView max api version. Using default (#{DEFAULT_API_VERSION})"
|
154
|
-
DEFAULT_API_VERSION
|
156
|
+
@logger.warn "Failed to get OneView max api version. Using default (#{OneviewSDK::DEFAULT_API_VERSION})"
|
157
|
+
OneviewSDK::DEFAULT_API_VERSION
|
155
158
|
end
|
156
159
|
|
157
160
|
# Log in to OneView appliance and set max_api_version
|
@@ -166,7 +169,7 @@ module OneviewSDK
|
|
166
169
|
response = rest_post('/rest/login-sessions', options)
|
167
170
|
body = response_handler(response)
|
168
171
|
return body['sessionID'] if body['sessionID']
|
169
|
-
|
172
|
+
raise ConnectionError, "\nERROR! Couldn't log into OneView server at #{@url}. Response: #{response}\n#{response.body}"
|
170
173
|
rescue StandardError => e
|
171
174
|
raise e unless retries > 0
|
172
175
|
@logger.debug 'Failed to log in to OneView. Retrying...'
|
data/lib/oneview-sdk/resource.rb
CHANGED
@@ -16,6 +16,7 @@ module OneviewSDK
|
|
16
16
|
# Resource base class that defines all common resource functionality.
|
17
17
|
class Resource
|
18
18
|
BASE_URI = '/rest'.freeze
|
19
|
+
UNIQUE_IDENTIFIERS = %w(name uri).freeze # Ordered list of unique attributes to search by
|
19
20
|
|
20
21
|
attr_accessor \
|
21
22
|
:client,
|
@@ -29,37 +30,43 @@ module OneviewSDK
|
|
29
30
|
# @param [Integer] api_ver The api version to use when interracting with this resource.
|
30
31
|
# Defaults to the client.api_version if it exists, or the OneviewSDK::Client::DEFAULT_API_VERSION.
|
31
32
|
def initialize(client, params = {}, api_ver = nil)
|
32
|
-
|
33
|
+
raise InvalidClient, 'Must specify a valid client' unless client.is_a?(OneviewSDK::Client)
|
33
34
|
@client = client
|
34
35
|
@logger = @client.logger
|
35
36
|
@api_version = api_ver || @client.api_version
|
36
37
|
if @api_version > @client.max_api_version
|
37
|
-
|
38
|
-
|
38
|
+
raise UnsupportedVersion,
|
39
|
+
"#{self.class.name} api_version '#{@api_version}' is greater than the client's max_api_version '#{@client.max_api_version}'"
|
39
40
|
end
|
40
41
|
@data ||= {}
|
41
42
|
set_all(params)
|
42
43
|
end
|
43
44
|
|
44
45
|
# Retrieve resource details based on this resource's name or URI.
|
45
|
-
# @note
|
46
|
+
# @note one of the UNIQUE_IDENTIFIERS, e.g. name or uri, must be specified in the resource
|
46
47
|
# @return [Boolean] Whether or not retrieve was successful
|
47
48
|
def retrieve!
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
retrieval_keys = self.class::UNIQUE_IDENTIFIERS.select { |k| !@data[k].nil? }
|
50
|
+
raise IncompleteResource, "Must set resource #{self.class::UNIQUE_IDENTIFIERS.join(' or ')} before trying to retrieve!" if retrieval_keys.empty?
|
51
|
+
retrieval_keys.each do |k|
|
52
|
+
results = self.class.find_by(@client, k => @data[k])
|
53
|
+
next if results.size != 1
|
54
|
+
set_all(results[0].data)
|
55
|
+
return true
|
56
|
+
end
|
57
|
+
false
|
54
58
|
end
|
55
59
|
|
56
60
|
# Check if a resource exists
|
57
|
-
# @note name or uri must be specified
|
61
|
+
# @note one of the UNIQUE_IDENTIFIERS, e.g. name or uri, must be specified in the resource
|
58
62
|
# @return [Boolean] Whether or not resource exists
|
59
63
|
def exists?
|
60
|
-
|
61
|
-
|
62
|
-
|
64
|
+
retrieval_keys = self.class::UNIQUE_IDENTIFIERS.select { |k| !@data[k].nil? }
|
65
|
+
raise IncompleteResource, "Must set resource #{self.class::UNIQUE_IDENTIFIERS.join(' or ')} before trying to retrieve!" if retrieval_keys.empty?
|
66
|
+
retrieval_keys.each do |k|
|
67
|
+
results = self.class.find_by(@client, k => @data[k])
|
68
|
+
return true if results.size == 1
|
69
|
+
end
|
63
70
|
false
|
64
71
|
end
|
65
72
|
|
@@ -206,7 +213,7 @@ module OneviewSDK
|
|
206
213
|
when :yml, :yaml
|
207
214
|
File.open(file_path, 'w') { |f| f.write(temp_data.to_yaml) }
|
208
215
|
else
|
209
|
-
|
216
|
+
raise InvalidFormat, "Invalid format: #{format}"
|
210
217
|
end
|
211
218
|
true
|
212
219
|
end
|
@@ -235,7 +242,16 @@ module OneviewSDK
|
|
235
242
|
# @return [Resource] New resource created from the file contents
|
236
243
|
def self.from_file(client, file_path)
|
237
244
|
resource = OneviewSDK::Config.load(file_path)
|
238
|
-
|
245
|
+
klass = self
|
246
|
+
if klass == OneviewSDK::Resource && resource['type'] # Use correct resource class by parsing type
|
247
|
+
klass = OneviewSDK # Secondary/temp class/module reference
|
248
|
+
resource['type'].split('::').each do |id|
|
249
|
+
c = klass.const_get(id) rescue nil
|
250
|
+
klass = c if c.is_a?(Class) || c.is_a?(Module)
|
251
|
+
end
|
252
|
+
klass = OneviewSDK::Resource unless klass <= OneviewSDK::Resource
|
253
|
+
end
|
254
|
+
klass.new(client, resource['data'], resource['api_version'])
|
239
255
|
end
|
240
256
|
|
241
257
|
# Make a GET request to the resource uri, and returns an array with results matching the search
|
@@ -296,19 +312,19 @@ module OneviewSDK
|
|
296
312
|
|
297
313
|
# Fail unless @client is set for this resource.
|
298
314
|
def ensure_client
|
299
|
-
|
315
|
+
raise IncompleteResource, 'Please set client attribute before interacting with this resource' unless @client
|
300
316
|
true
|
301
317
|
end
|
302
318
|
|
303
319
|
# Fail unless @data['uri'] is set for this resource.
|
304
320
|
def ensure_uri
|
305
|
-
|
321
|
+
raise IncompleteResource, 'Please set uri attribute before interacting with this resource' unless @data['uri']
|
306
322
|
true
|
307
323
|
end
|
308
324
|
|
309
325
|
# Fail for methods that are not available for one resource
|
310
326
|
def unavailable_method
|
311
|
-
|
327
|
+
raise MethodUnavailable, "The method ##{caller[0][/`.*'/][1..-2]} is unavailable for this resource"
|
312
328
|
end
|
313
329
|
|
314
330
|
private
|
@@ -316,12 +332,12 @@ module OneviewSDK
|
|
316
332
|
# Recursive helper method for like?
|
317
333
|
# Allows comparison of nested hash structures
|
318
334
|
def recursive_like?(other, data = @data)
|
319
|
-
|
335
|
+
raise "Can't compare with object type: #{other.class}! Must respond_to :each" unless other.respond_to?(:each)
|
320
336
|
other.each do |key, val|
|
321
337
|
return false unless data && data.respond_to?(:[])
|
322
338
|
if val.is_a?(Hash)
|
323
339
|
return false unless data.class == Hash && recursive_like?(val, data[key.to_s])
|
324
|
-
elsif val != data[key.to_s]
|
340
|
+
elsif val != data[key.to_s] && val != data[key.to_sym]
|
325
341
|
return false
|
326
342
|
end
|
327
343
|
end
|
@@ -332,22 +348,14 @@ module OneviewSDK
|
|
332
348
|
|
333
349
|
# Get resource class that matches the type given
|
334
350
|
# @param [String] type Name of the desired class type
|
351
|
+
# @param [Fixnum] api_ver API module version to fetch resource from
|
352
|
+
# @param [String] variant API module variant to fetch resource from
|
335
353
|
# @return [Class] Resource class or nil if not found
|
336
|
-
def self.resource_named(type)
|
337
|
-
|
338
|
-
|
339
|
-
OneviewSDK.constants.each do |c|
|
340
|
-
klass = OneviewSDK.const_get(c)
|
341
|
-
next unless klass.is_a?(Class) && klass < OneviewSDK::Resource
|
342
|
-
name = klass.name.split('::').last
|
343
|
-
orig_classes.push(name)
|
344
|
-
classes[name.downcase.delete('_').delete('-')] = klass
|
345
|
-
classes["#{name.downcase.delete('_').delete('-')}s"] = klass
|
354
|
+
def self.resource_named(type, api_ver = @api_version, variant = nil)
|
355
|
+
unless SUPPORTED_API_VERSIONS.include?(api_ver)
|
356
|
+
raise UnsupportedVersion, "API version #{api_ver} is not supported! Try one of: #{SUPPORTED_API_VERSIONS}"
|
346
357
|
end
|
347
|
-
|
348
|
-
|
358
|
+
api_module = OneviewSDK.const_get("API#{api_ver}")
|
359
|
+
variant ? api_module.resource_named(type, variant) : api_module.resource_named(type)
|
349
360
|
end
|
350
361
|
end
|
351
|
-
|
352
|
-
# Load all resources:
|
353
|
-
Dir[File.dirname(__FILE__) + '/resource/*.rb'].each { |file| require file }
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# (c) Copyright 2016 Hewlett Packard Enterprise Development LP
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software distributed
|
8
|
+
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
9
|
+
# CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
|
10
|
+
# language governing permissions and limitations under the License.
|
11
|
+
|
12
|
+
module OneviewSDK
|
13
|
+
# Module for API v200
|
14
|
+
module API200
|
15
|
+
# Get resource class that matches the type given
|
16
|
+
# @param [String] type Name of the desired class type
|
17
|
+
# @param [String] variant There is only 1 variant for this module, so this is not used.
|
18
|
+
# It exists only so that the parameters match API modules that do have multiple variants.
|
19
|
+
# @return [Class] Resource class or nil if not found
|
20
|
+
def self.resource_named(type, _variant = nil)
|
21
|
+
new_type = type.to_s.downcase.gsub(/[ -_]/, '')
|
22
|
+
constants.each do |c|
|
23
|
+
klass = const_get(c)
|
24
|
+
next unless klass.is_a?(Class) && klass < OneviewSDK::Resource
|
25
|
+
name = klass.name.split('::').last.downcase.delete('_').delete('-')
|
26
|
+
return klass if new_type =~ /^#{name}[s]?$/
|
27
|
+
end
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Load all API-specific resources:
|
34
|
+
Dir[File.dirname(__FILE__) + '/api200/*.rb'].each { |file| require file }
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# You may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software distributed
|
8
|
+
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
9
|
+
# CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
|
10
|
+
# language governing permissions and limitations under the License.
|
11
|
+
|
12
|
+
require_relative 'resource'
|
13
|
+
|
14
|
+
module OneviewSDK
|
15
|
+
module API200
|
16
|
+
# Connection template resource implementation
|
17
|
+
class ConnectionTemplate < Resource
|
18
|
+
BASE_URI = '/rest/connection-templates'.freeze
|
19
|
+
|
20
|
+
# Create a resource object, associate it with a client, and set its properties.
|
21
|
+
# @param [OneviewSDK::Client] client The client object for the OneView appliance
|
22
|
+
# @param [Hash] params The options for this resource (key-value pairs)
|
23
|
+
# @param [Integer] api_ver The api version to use when interracting with this resource.
|
24
|
+
def initialize(client, params = {}, api_ver = nil)
|
25
|
+
super
|
26
|
+
# Default values:
|
27
|
+
@data['bandwidth'] ||= {}
|
28
|
+
@data['type'] ||= 'connection-template'
|
29
|
+
end
|
30
|
+
|
31
|
+
# Method is not available
|
32
|
+
# @raise [OneviewSDK::MethodUnavailable] method is not available
|
33
|
+
def create
|
34
|
+
unavailable_method
|
35
|
+
end
|
36
|
+
|
37
|
+
# Method is not available
|
38
|
+
# @raise [OneviewSDK::MethodUnavailable] method is not available
|
39
|
+
def delete
|
40
|
+
unavailable_method
|
41
|
+
end
|
42
|
+
|
43
|
+
# Get the default network connection template
|
44
|
+
# @param [OneviewSDK::Client] client The client object for the OneView appliance
|
45
|
+
# @return [OneviewSDK::ConnectionTemplate] Connection template
|
46
|
+
def self.get_default(client)
|
47
|
+
response = client.rest_get(BASE_URI + '/defaultConnectionTemplate')
|
48
|
+
OneviewSDK::ConnectionTemplate.new(client, client.response_handler(response))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# You may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software distributed
|
8
|
+
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
9
|
+
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
10
|
+
# specific language governing permissions and limitations under the License.
|
11
|
+
|
12
|
+
require_relative 'resource'
|
13
|
+
|
14
|
+
module OneviewSDK
|
15
|
+
module API200
|
16
|
+
# Datacenter resource implementation
|
17
|
+
class Datacenter < Resource
|
18
|
+
BASE_URI = '/rest/datacenters'.freeze
|
19
|
+
|
20
|
+
# Add the resource on OneView using the current data
|
21
|
+
# @note Calls the refresh method to set additional data
|
22
|
+
# @raise [OneviewSDK::IncompleteResource] if the client is not set
|
23
|
+
# @raise [StandardError] if the resource creation fails
|
24
|
+
# @return [OneviewSDK::Datacenter] self
|
25
|
+
alias add create
|
26
|
+
|
27
|
+
# Remove resource from OneView
|
28
|
+
# @return [true] if resource was removed successfully
|
29
|
+
alias remove delete
|
30
|
+
|
31
|
+
# Create a resource object, associate it with a client, and set its properties.
|
32
|
+
# @param [OneviewSDK::Client] client The client object for the OneView appliance
|
33
|
+
# @param [Hash] params The options for this resource (key-value pairs)
|
34
|
+
# @param [Integer] api_ver The api version to use when interracting with this resource.
|
35
|
+
def initialize(client, params = {}, api_ver = nil)
|
36
|
+
super
|
37
|
+
# Default values:
|
38
|
+
@data['contents'] ||= []
|
39
|
+
end
|
40
|
+
|
41
|
+
# Method is not available
|
42
|
+
# @raise [OneviewSDK::MethodUnavailable] method is not available
|
43
|
+
def create
|
44
|
+
unavailable_method
|
45
|
+
end
|
46
|
+
|
47
|
+
# Method is not available
|
48
|
+
# @raise [OneviewSDK::MethodUnavailable] method is not available
|
49
|
+
def delete
|
50
|
+
unavailable_method
|
51
|
+
end
|
52
|
+
|
53
|
+
# Adds an existing rack to the datacenter
|
54
|
+
# @param [OneviewSDK::Rack] rack rack
|
55
|
+
# @param [Decimal] pos_x x position
|
56
|
+
# @param [Decimal] pos_y y position
|
57
|
+
# @param [Decimal] rotation Rotation degrees (0-359) around the center of the resource
|
58
|
+
def add_rack(rack, pos_x, pos_y, rotation = 0)
|
59
|
+
@data['contents'] << {
|
60
|
+
'resourceUri' => rack['uri'],
|
61
|
+
'x' => pos_x,
|
62
|
+
'y' => pos_y,
|
63
|
+
'rotation' => rotation
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
# Removes a rack from the datacenter
|
68
|
+
# @param [OneviewSDK::Rack] rack rack
|
69
|
+
def remove_rack(rack)
|
70
|
+
@data['contents'].reject! { |resource| resource['resourceUri'] == rack['uri'] }
|
71
|
+
end
|
72
|
+
|
73
|
+
# Gets a list of the visual content objects
|
74
|
+
# @return [Hash]
|
75
|
+
def get_visual_content
|
76
|
+
response = @client.rest_get(@data['uri'] + '/visualContent')
|
77
|
+
@client.response_handler(response)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|