oneview-sdk 2.2.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|