oneview-sdk 1.0.0 → 2.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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -0
  3. data/CHANGELOG.md +81 -2
  4. data/README.md +118 -113
  5. data/Rakefile +11 -0
  6. data/lib/oneview-sdk/cli.rb +21 -15
  7. data/lib/oneview-sdk/client.rb +34 -21
  8. data/lib/oneview-sdk/config_loader.rb +12 -1
  9. data/lib/oneview-sdk/exceptions.rb +55 -0
  10. data/lib/oneview-sdk/resource/connection_template.rb +48 -0
  11. data/lib/oneview-sdk/resource/datacenter.rb +77 -0
  12. data/lib/oneview-sdk/resource/enclosure.rb +46 -24
  13. data/lib/oneview-sdk/resource/enclosure_group.rb +20 -36
  14. data/lib/oneview-sdk/resource/ethernet_network.rb +19 -23
  15. data/lib/oneview-sdk/resource/fabric.rb +41 -0
  16. data/lib/oneview-sdk/resource/fc_network.rb +15 -16
  17. data/lib/oneview-sdk/resource/fcoe_network.rb +15 -12
  18. data/lib/oneview-sdk/resource/firmware_bundle.rb +23 -24
  19. data/lib/oneview-sdk/resource/firmware_driver.rb +21 -9
  20. data/lib/oneview-sdk/resource/interconnect.rb +29 -9
  21. data/lib/oneview-sdk/resource/lig_uplink_set.rb +22 -28
  22. data/lib/oneview-sdk/resource/logical_downlink.rb +53 -0
  23. data/lib/oneview-sdk/resource/logical_enclosure.rb +35 -33
  24. data/lib/oneview-sdk/resource/logical_interconnect.rb +29 -65
  25. data/lib/oneview-sdk/resource/logical_interconnect_group.rb +26 -6
  26. data/lib/oneview-sdk/resource/logical_switch.rb +184 -0
  27. data/lib/oneview-sdk/resource/logical_switch_group.rb +66 -0
  28. data/lib/oneview-sdk/resource/managed_san.rb +79 -0
  29. data/lib/oneview-sdk/resource/network_set.rb +64 -0
  30. data/lib/oneview-sdk/resource/power_device.rb +174 -0
  31. data/lib/oneview-sdk/resource/rack.rb +83 -0
  32. data/lib/oneview-sdk/resource/san_manager.rb +88 -0
  33. data/lib/oneview-sdk/resource/server_hardware.rb +139 -18
  34. data/lib/oneview-sdk/resource/server_hardware_type.rb +32 -1
  35. data/lib/oneview-sdk/resource/server_profile.rb +352 -9
  36. data/lib/oneview-sdk/resource/server_profile_template.rb +193 -4
  37. data/lib/oneview-sdk/resource/storage_pool.rb +42 -20
  38. data/lib/oneview-sdk/resource/storage_system.rb +64 -14
  39. data/lib/oneview-sdk/resource/switch.rb +86 -0
  40. data/lib/oneview-sdk/resource/unmanaged_device.rb +55 -0
  41. data/lib/oneview-sdk/resource/uplink_set.rb +24 -64
  42. data/lib/oneview-sdk/resource/volume.rb +29 -29
  43. data/lib/oneview-sdk/resource/volume_attachment.rb +79 -0
  44. data/lib/oneview-sdk/resource/volume_snapshot.rb +20 -1
  45. data/lib/oneview-sdk/resource/volume_template.rb +22 -33
  46. data/lib/oneview-sdk/resource.rb +66 -28
  47. data/lib/oneview-sdk/rest.rb +69 -24
  48. data/lib/oneview-sdk/ssl_helper.rb +20 -9
  49. data/lib/oneview-sdk/version.rb +12 -1
  50. data/lib/oneview-sdk.rb +12 -0
  51. data/oneview-sdk.gemspec +11 -0
  52. metadata +17 -2
@@ -1,41 +1,63 @@
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
+
1
12
  module OneviewSDK
2
13
  # Storage pool resource implementation
3
14
  class StoragePool < Resource
4
15
  BASE_URI = '/rest/storage-pools'.freeze
5
16
 
17
+ # Add the resource on OneView using the current data
18
+ # @note Calls the refresh method to set additional data
19
+ # @raise [OneviewSDK::IncompleteResource] if the client is not set
20
+ # @raise [StandardError] if the resource creation fails
21
+ # @return [OneviewSDK::StoragePool] self
22
+ alias add create
23
+
24
+ # Remove resource from OneView
25
+ # @return [true] if resource was removed successfully
26
+ alias remove delete
27
+
28
+ # Create a resource object, associate it with a client, and set its properties.
29
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
30
+ # @param [Hash] params The options for this resource (key-value pairs)
31
+ # @param [Integer] api_ver The api version to use when interracting with this resource.
6
32
  def initialize(client, params = {}, api_ver = nil)
7
33
  super
8
34
  # Default values:
9
35
  @data['type'] ||= 'StoragePoolV2'
10
36
  end
11
37
 
12
- # @!group Validates
13
-
14
- VALID_REFRESH_STATES = %w(NotRefreshing RefreshFailed RefreshPending Refreshing).freeze
15
- # Validate refreshState
16
- # @param [String] value NotRefreshing, RefreshFailed, RefreshPending, Refreshing
17
- def validate_refreshState(value)
18
- fail 'Invalid refresh state' unless VALID_REFRESH_STATES.include?(value)
19
- end
20
-
21
- VALID_STATUSES = %w(OK Disabled Warning Critical Unknown).freeze
22
- # Validate status
23
- # @param [String] value OK, Disabled, Warning, Critical, Unknown
24
- def validate_status(value)
25
- fail 'Invalid status' unless VALID_STATUSES.include?(value)
38
+ # Method is not available
39
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
40
+ def create
41
+ unavailable_method
26
42
  end
27
43
 
28
- # @!endgroup
29
-
30
- # Set storage system
31
- # @param [StorageSystem] storage_system
32
- def set_storage_system(storage_system)
33
- set('storageSystemUri', storage_system['uri'])
44
+ # Method is not available
45
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
46
+ def delete
47
+ unavailable_method
34
48
  end
35
49
 
50
+ # Method is not available
51
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
36
52
  def update
37
53
  unavailable_method
38
54
  end
39
55
 
56
+ # Sets the storage system
57
+ # @param [OneviewSDK::StorageSystem] storage_system
58
+ def set_storage_system(storage_system)
59
+ fail IncompleteResource, 'Please set the storage system\'s uri attribute!' unless storage_system['uri']
60
+ set('storageSystemUri', storage_system['uri'])
61
+ end
40
62
  end
41
63
  end
@@ -1,15 +1,49 @@
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
+
1
12
  module OneviewSDK
2
13
  # Storage system resource implementation
3
14
  class StorageSystem < Resource
4
15
  BASE_URI = '/rest/storage-systems'.freeze
5
16
 
17
+ # Remove resource from OneView
18
+ # @return [true] if resource was removed successfully
19
+ alias remove delete
20
+
21
+ # Create a resource object, associate it with a client, and set its properties.
22
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
23
+ # @param [Hash] params The options for this resource (key-value pairs)
24
+ # @param [Integer] api_ver The api version to use when interracting with this resource.
6
25
  def initialize(client, params = {}, api_ver = nil)
7
26
  super
8
27
  # Default values:
9
28
  @data['type'] ||= 'StorageSystemV3'
10
29
  end
11
30
 
31
+ # Method is not available
32
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
12
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
+ # Adds the resource to OneView using the current data
44
+ # @note Calls the refresh method to set additional data
45
+ # @return [OneviewSDK::StorageSystem] self
46
+ def add
13
47
  ensure_client
14
48
  task = @client.rest_post(self.class::BASE_URI, { 'body' => self['credentials'] }, @api_version)
15
49
  temp = @data.clone
@@ -21,33 +55,50 @@ module OneviewSDK
21
55
  self
22
56
  end
23
57
 
24
- def retrieve!
25
- if @data['name']
26
- super
27
- else
28
- ip_hostname = self['credentials'][:ip_hostname] || self['credentials']['ip_hostname']
29
- results = self.class.find_by(@client, credentials: { ip_hostname: ip_hostname })
30
- return false unless results.size == 1
31
- set_all(results[0].data)
32
- true
58
+ # Checks if the resource already exists
59
+ # @note name,uri or ip_hostname must be specified inside resource
60
+ # @return [Boolean] Whether or not resource exists
61
+ def exists?
62
+ ip_hostname = self['credentials'][:ip_hostname] || self['credentials']['ip_hostname'] if self['credentials']
63
+ return true if @data['name'] && self.class.find_by(@client, name: @data['name']).size == 1
64
+ return true if @data['uri'] && self.class.find_by(@client, uri: @data['uri']).size == 1
65
+ return true if ip_hostname && self.class.find_by(@client, credentials: { ip_hostname: ip_hostname }).size == 1
66
+ unless @data['name'] || @data['uri'] || ip_hostname
67
+ fail IncompleteResource, 'Must set resource name, uri or ip_hostname before trying to retrieve!'
33
68
  end
69
+ false
70
+ end
71
+
72
+ # Retrieves the resource details based on this resource's name or URI.
73
+ # @note Name,URI or ip_hostname must be specified inside resource
74
+ # @return [Boolean] Whether or not retrieve was successful
75
+ # @raise [OneviewSDK::IncompleteResource] if attributes are not filled
76
+ def retrieve!
77
+ ip_hostname = self['credentials'][:ip_hostname] || self['credentials']['ip_hostname'] if self['credentials']
78
+ return super if @data['name'] || @data['uri']
79
+
80
+ fail IncompleteResource, 'Must set resource name, uri or ip_hostname before trying to retrieve!' unless ip_hostname
81
+ results = self.class.find_by(@client, credentials: { ip_hostname: ip_hostname })
82
+ return false unless results.size == 1
83
+ set_all(results[0].data)
84
+ true
34
85
  end
35
86
 
36
- # Get host types for storage system resource
37
- # @param [Client] client client handle REST calls to OV instance
87
+ # Gets the host types for the storage system resource
88
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
38
89
  # @return [String] response body
39
90
  def self.get_host_types(client)
40
91
  response = client.rest_get(BASE_URI + '/host-types')
41
92
  response.body
42
93
  end
43
94
 
44
- # List of storage pools
95
+ # Lists the storage pools
45
96
  def get_storage_pools
46
97
  response = @client.rest_get(@data['uri'] + '/storage-pools')
47
98
  response.body
48
99
  end
49
100
 
50
- # List of all managed target ports for the specified storage system
101
+ # Lists all managed target ports for the specified storage system,
51
102
  # or only the one specified
52
103
  # @param [String] port Target port
53
104
  def get_managed_ports(port = nil)
@@ -58,6 +109,5 @@ module OneviewSDK
58
109
  end
59
110
  response.body
60
111
  end
61
-
62
112
  end
63
113
  end
@@ -0,0 +1,86 @@
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
+ # Switch resource implementation
14
+ class Switch < Resource
15
+ BASE_URI = '/rest/switches'.freeze
16
+ TYPE_URI = '/rest/switch-types'.freeze
17
+
18
+ # Remove resource from OneView
19
+ # @return [true] if resource was removed successfully
20
+ alias remove delete
21
+
22
+ # Method is not available
23
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
24
+ def create
25
+ unavailable_method
26
+ end
27
+
28
+ # Method is not available
29
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
30
+ def update
31
+ unavailable_method
32
+ end
33
+
34
+ # Method is not available
35
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
36
+ def refresh
37
+ unavailable_method
38
+ end
39
+
40
+ # Method is not available
41
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
42
+ def delete
43
+ unavailable_method
44
+ end
45
+
46
+ # Retrieves the switch types
47
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
48
+ # @return [Array] All the Switch types
49
+ def self.get_types(client)
50
+ response = client.rest_get(TYPE_URI)
51
+ response = client.response_handler(response)
52
+ response['members']
53
+ end
54
+
55
+ # Retrieves the switch type with the name
56
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
57
+ # @param [String] name Switch type name
58
+ # @return [Array] Switch type
59
+ def self.get_type(client, name)
60
+ results = get_types(client)
61
+ results.find { |switch_type| switch_type['name'] == name }
62
+ end
63
+
64
+ # Get statistics for an interconnect, for the specified port or subport
65
+ # @param [String] port_name port to retrieve statistics
66
+ # @param [String] subport_number subport to retrieve statistics
67
+ # @return [Hash] Switch statistics
68
+ def statistics(port_name = nil, subport_number = nil)
69
+ uri = if subport_number
70
+ "#{@data['uri']}/statistics/#{port_name}/subport/#{subport_number}"
71
+ else
72
+ "#{@data['uri']}/statistics/#{port_name}"
73
+ end
74
+ response = @client.rest_get(uri)
75
+ response.body
76
+ end
77
+
78
+ # Get settings that describe the environmental configuration
79
+ # @return [Hash] Configuration parameters
80
+ def environmental_configuration
81
+ ensure_client && ensure_uri
82
+ response = @client.rest_get(@data['uri'] + '/environmentalConfiguration', @api_version)
83
+ @client.response_handler(response)
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,55 @@
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
+ # Storage system resource implementation
14
+ class UnmanagedDevice < Resource
15
+ BASE_URI = '/rest/unmanaged-devices'.freeze
16
+
17
+ # Add the resource on OneView using the current data
18
+ # @note Calls the refresh method to set additional data
19
+ # @raise [OneviewSDK::IncompleteResource] if the client is not set
20
+ # @raise [StandardError] if the resource creation fails
21
+ # @return [OneviewSDK::UnmanagedDevice] self
22
+ alias add create
23
+
24
+ # Remove resource from OneView
25
+ # @return [true] if resource was removed successfully
26
+ alias remove delete
27
+
28
+ # Method is not available
29
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
30
+ def create
31
+ unavailable_method
32
+ end
33
+
34
+ # Method is not available
35
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
36
+ def delete
37
+ unavailable_method
38
+ end
39
+
40
+ # Gets a list of unmanaged devices
41
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
42
+ # @return [Array] list of unmanaged devices
43
+ def self.get_devices(client)
44
+ response = client.rest_get(BASE_URI)
45
+ client.response_handler(response)['members']
46
+ end
47
+
48
+ # Get settings that describe the environmental configuration
49
+ def environmental_configuration
50
+ ensure_client && ensure_uri
51
+ response = @client.rest_get(@data['uri'] + '/environmentalConfiguration')
52
+ @client.response_handler(response)
53
+ end
54
+ end
55
+ end
@@ -1,8 +1,23 @@
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
+
1
12
  module OneviewSDK
2
13
  # Uplink set resource implementation
3
14
  class UplinkSet < Resource
4
15
  BASE_URI = '/rest/uplink-sets'.freeze
5
16
 
17
+ # Create a resource object, associate it with a client, and set its properties.
18
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
19
+ # @param [Hash] params The options for this resource (key-value pairs)
20
+ # @param [Integer] api_ver The api version to use when interracting with this resource.
6
21
  def initialize(client, params = {}, api_ver = nil)
7
22
  super
8
23
  # Default values
@@ -14,61 +29,7 @@ module OneviewSDK
14
29
  @data['type'] ||= 'uplink-setV3'
15
30
  end
16
31
 
17
- # @!group Validates
18
-
19
- VALID_ETHERNET_NETWORK_TYPES = %w(NotApplicable Tagged Tunnel Unknown Untagged).freeze
20
- # Validate ethernetNetworkType
21
- # @param [String] value NotApplicable, Tagged, Tunnel, Unknown, Untagged
22
- def validate_ethernetNetworkType(value)
23
- fail 'Invalid ethernet network type' unless VALID_ETHERNET_NETWORK_TYPES.include?(value)
24
- end
25
-
26
- VALID_LACP_TIMERS = %w(Short Long).freeze
27
- # Validate lacpTimer
28
- # @param [String] value Short, Long
29
- def validate_lacpTimer(value)
30
- return if value.to_s.empty?
31
- fail 'Invalid lacp timer' unless %w(Short Long).include?(value)
32
- end
33
-
34
- VALID_MANUAL_LOGIN_REDISTRIBUTION_STATES = %w(Distributed Distributing DistributionFailed NotSupported Supported).freeze
35
- # Validate manualLoginRedistributionState
36
- # @param [String] value Distributed, Distributing, DistributionFailed, NotSupported, Supported
37
- def validate_manualLoginRedistributionState(value)
38
- fail 'Invalid manual login redistribution state' unless VALID_MANUAL_LOGIN_REDISTRIBUTION_STATES.include?(value)
39
- end
40
-
41
- VALID_NETWORK_TYPES = %w(Ethernet FibreChannel).freeze
42
- # Validate networkType
43
- # @param [String] value Ethernet, FibreChannel
44
- def validate_networkType(value)
45
- fail 'Invalid network type' unless VALID_NETWORK_TYPES.include?(value)
46
- end
47
-
48
- VALID_LOCATION_ENTRIES_TYPES = %w(Bay Enclosure Ip Password Port StackingDomainId StackingMemberId UserId).freeze
49
- # Validate locationEntriesType
50
- # @param [String] value Bay Enclosure Ip Password Port StackingDomainId StackingMemberId UserId
51
- def validate_locationEntriesType(value)
52
- fail 'Invalid location entry type' unless VALID_LOCATION_ENTRIES_TYPES.include?(value)
53
- end
54
-
55
- VALID_REACHABILITIES = ['NotReachable', 'Reachable', 'RedundantlyReachable', 'Unknown', nil].freeze
56
- # Validate ethernetNetworkType request
57
- # @param [String] value NotReachable Reachable RedundantlyReachable Unknown
58
- def validate_reachability(value)
59
- fail 'Invalid reachability' unless VALID_REACHABILITIES.include?(value)
60
- end
61
-
62
- VALID_STATUSES = %w(OK Disabled Warning Critical Unknown).freeze
63
- # Validate ethernetNetworkType request
64
- # @param [String] value OK Disabled Warning Critical Unknown
65
- def validate_status(value)
66
- fail 'Invalid status' unless VALID_STATUSES.include?(value)
67
- end
68
-
69
- # @!endgroup
70
-
71
- # Add portConfigInfos to the array
32
+ # Adds the portConfigInfos to the array
72
33
  # @param [String] portUri
73
34
  # @param [String] speed
74
35
  # @param [Hash] locationEntries
@@ -83,37 +44,36 @@ module OneviewSDK
83
44
  @data['portConfigInfos'] << entry
84
45
  end
85
46
 
86
- # Set logical interconnect uri
47
+ # Sets the logical interconnect uri
87
48
  # @param [OneviewSDK::LogicalInterconnect, Hash] logical_interconnect
88
49
  def set_logical_interconnect(logical_interconnect)
89
50
  uri = logical_interconnect[:uri] || logical_interconnect['uri']
90
- fail 'Invalid object' unless uri
51
+ fail IncompleteResource, 'Invalid object' unless uri
91
52
  @data['logicalInterconnectUri'] = uri
92
53
  end
93
54
 
94
- # Add an uri to networkUris array
55
+ # Adds an ethernet network to the uplink set
95
56
  # @param [OneviewSDK::EthernetNetwork, Hash] network
96
57
  def add_network(network)
97
58
  uri = network[:uri] || network['uri']
98
- fail 'Invalid object' unless uri
59
+ fail IncompleteResource, 'Must set network uri attribute' unless uri
99
60
  @data['networkUris'].push(uri)
100
61
  end
101
62
 
102
- # Add an uri to fcnetworkUris array
63
+ # Adds an fc network to the uplink set
103
64
  # @param [OneviewSDK::FCNetwork, Hash] network must accept hash syntax
104
65
  def add_fcnetwork(network)
105
66
  uri = network[:uri] || network['uri']
106
- fail 'Invalid object' unless uri
67
+ fail IncompleteResource, 'Must set network uri attribute' unless uri
107
68
  @data['fcNetworkUris'].push(uri)
108
69
  end
109
70
 
110
- # Add an uri to fcoenetworkUris array
71
+ # Adds an fcoe network to the uplink set
111
72
  # @param [OneviewSDK::FCoENetwork, Hash] network must accept hash syntax
112
73
  def add_fcoenetwork(network)
113
74
  uri = network[:uri] || network['uri']
114
- fail 'Invalid object' unless uri
75
+ fail IncompleteResource, 'Must set network uri attribute' unless uri
115
76
  @data['fcoeNetworkUris'].push(uri)
116
77
  end
117
-
118
78
  end
119
79
  end
@@ -1,19 +1,19 @@
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
+
1
12
  module OneviewSDK
2
13
  # Volume resource implementation
3
14
  class Volume < Resource
4
15
  BASE_URI = '/rest/storage-volumes'.freeze
5
16
 
6
- # @!group Validates
7
-
8
- VALID_PROVISION_TYPES = %w(Thin Full).freeze
9
- # Validate the type of provisioning
10
- # @param [String] value Must be Thin or Full
11
- def validate_provisionType(value)
12
- fail 'Invalid provision type' unless VALID_PROVISION_TYPES.include?(value)
13
- end
14
-
15
- # @!endgroup
16
-
17
17
  # It's possible to create the volume in 6 different ways:
18
18
  # 1) Common = Storage System + Storage Pool
19
19
  # 2) Template = Storage Volume Template
@@ -22,10 +22,10 @@ module OneviewSDK
22
22
  # 5) Management by name = Storage System + Storage System Volume Name
23
23
  # 6) Snapshot = Snapshot Pool + Storage Pool + Snapshot
24
24
 
25
- # Create the volume
26
- # @note provisioningParameters are required for creation, but not afterwards; after creation, they will be removed.
27
- # @raise [RuntimeError] if the client is not set
28
- # @raise [RuntimeError] if the resource creation fails
25
+ # Creates the volume
26
+ # @note provisioning parameters are required for creation, but not afterwards; after creation, they will be removed.
27
+ # @raise [OneviewSDK::IncompleteResource] if the client is not set
28
+ # @raise [StandardError] if the resource creation fails
29
29
  # @return [Resource] self
30
30
  def create
31
31
  ensure_client
@@ -36,7 +36,7 @@ module OneviewSDK
36
36
  self
37
37
  end
38
38
 
39
- # Delete resource from OneView or from Oneview and storage system
39
+ # Deletes the resource from OneView or from Oneview and storage system
40
40
  # @param [Symbol] flag Delete storage system from Oneview only or in storage system as well
41
41
  # @return [true] if resource was deleted successfully
42
42
  def delete(flag = :all)
@@ -49,7 +49,7 @@ module OneviewSDK
49
49
  response = @client.rest_api(:delete, @data['uri'], {}, @api_version)
50
50
  @client.response_handler(response)
51
51
  else
52
- fail 'Invalid flag value, use :oneview or :all'
52
+ fail InvalidResource, 'Invalid flag value, use :oneview or :all'
53
53
  end
54
54
  true
55
55
  end
@@ -65,10 +65,11 @@ module OneviewSDK
65
65
  # @param [OneviewSDK::StoragePool] storage_pool Storage pool
66
66
  def set_storage_pool(storage_pool)
67
67
  assure_uri(storage_pool)
68
- set('storagePoolUri', storage_pool['uri'])
68
+ self['provisioningParameters'] ||= {}
69
+ self['provisioningParameters']['storagePoolUri'] = storage_pool['uri']
69
70
  end
70
71
 
71
- # Adds storage volume template to the volume
72
+ # Adds the storage volume template to the volume
72
73
  # @param [OneviewSDK::VolumeTemplate] storage_volume_template Storage Volume Template
73
74
  def set_storage_volume_template(storage_volume_template)
74
75
  assure_uri(storage_volume_template)
@@ -82,7 +83,7 @@ module OneviewSDK
82
83
  set('snapshotPoolUri', storage_pool['uri'])
83
84
  end
84
85
 
85
- # Create a snapshot of the volume
86
+ # Creates a snapshot of the volume
86
87
  # @param [String, OneviewSDK::VolumeSnapshot] snapshot String or OneviewSDK::VolumeSnapshot object
87
88
  # @param [String] description Provide a description
88
89
  # @return [true] if snapshot was created successfully
@@ -104,7 +105,7 @@ module OneviewSDK
104
105
  true
105
106
  end
106
107
 
107
- # Delete a snapshot of the volume
108
+ # Deletes a snapshot of the volume
108
109
  # @param [String] name snapshot name
109
110
  # @return [true] if snapshot was created successfully
110
111
  def delete_snapshot(name)
@@ -114,7 +115,7 @@ module OneviewSDK
114
115
  true
115
116
  end
116
117
 
117
- # Retrieve snapshot by name
118
+ # Retrieves a snapshot by name
118
119
  # @param [String] name
119
120
  # @return [Hash] snapshot data
120
121
  def get_snapshot(name)
@@ -124,7 +125,7 @@ module OneviewSDK
124
125
  end
125
126
  end
126
127
 
127
- # Get snapshots of this volume
128
+ # Gets all the snapshots of this volume
128
129
  # @return [Array] Array of snapshots
129
130
  def get_snapshots
130
131
  ensure_uri && ensure_client
@@ -143,8 +144,8 @@ module OneviewSDK
143
144
  results
144
145
  end
145
146
 
146
- # Get all the attachable volumes managed by the appliance
147
- # @param [Client] client The client object for the appliance
147
+ # Gets all the attachable volumes managed by the appliance
148
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
148
149
  # @return [Array<OneviewSDK::Volume>] Array of volumes
149
150
  def self.get_attachable_volumes(client)
150
151
  results = []
@@ -161,14 +162,14 @@ module OneviewSDK
161
162
  end
162
163
 
163
164
  # Gets the list of extra managed storage volume paths
164
- # @param [OneviewSDK::Client] client
165
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
165
166
  # @return response
166
167
  def self.get_extra_managed_volume_paths(client)
167
168
  response = client.rest_get(BASE_URI + '/repair?alertFixType=ExtraManagedStorageVolumePaths')
168
169
  client.response_handler(response)
169
170
  end
170
171
 
171
- # Removes extra presentation from volume
172
+ # Removes extra presentation from the volume
172
173
  # @return response
173
174
  def repair
174
175
  response = client.rest_post(BASE_URI + '/repair', 'body' => { resourceUri: @data['uri'], type: 'ExtraManagedStorageVolumePaths' })
@@ -181,8 +182,7 @@ module OneviewSDK
181
182
  # If not, first it tries to retrieve, and then verify for its existence
182
183
  def assure_uri(resource)
183
184
  resource.retrieve! unless resource['uri']
184
- fail "#{resource.class}: #{resource['name']} not found" unless resource['uri']
185
+ fail IncompleteResource, "#{resource.class}: #{resource['name']} not found" unless resource['uri']
185
186
  end
186
-
187
187
  end
188
188
  end