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.
Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +50 -0
  3. data/README.md +61 -15
  4. data/Rakefile +39 -1
  5. data/lib/oneview-sdk.rb +38 -3
  6. data/lib/oneview-sdk/cli.rb +85 -30
  7. data/lib/oneview-sdk/client.rb +21 -18
  8. data/lib/oneview-sdk/config_loader.rb +1 -1
  9. data/lib/oneview-sdk/resource.rb +44 -36
  10. data/lib/oneview-sdk/resource/api200.rb +34 -0
  11. data/lib/oneview-sdk/resource/api200/connection_template.rb +52 -0
  12. data/lib/oneview-sdk/resource/api200/datacenter.rb +81 -0
  13. data/lib/oneview-sdk/resource/api200/enclosure.rb +203 -0
  14. data/lib/oneview-sdk/resource/api200/enclosure_group.rb +86 -0
  15. data/lib/oneview-sdk/resource/api200/ethernet_network.rb +60 -0
  16. data/lib/oneview-sdk/resource/api200/fabric.rb +45 -0
  17. data/lib/oneview-sdk/resource/api200/fc_network.rb +34 -0
  18. data/lib/oneview-sdk/resource/api200/fcoe_network.rb +32 -0
  19. data/lib/oneview-sdk/resource/api200/firmware_bundle.rb +56 -0
  20. data/lib/oneview-sdk/resource/{fcoe_network.rb → api200/firmware_driver.rb} +21 -12
  21. data/lib/oneview-sdk/resource/api200/interconnect.rb +112 -0
  22. data/lib/oneview-sdk/resource/api200/lig_uplink_set.rb +84 -0
  23. data/lib/oneview-sdk/resource/api200/logical_downlink.rb +57 -0
  24. data/lib/oneview-sdk/resource/api200/logical_enclosure.rb +88 -0
  25. data/lib/oneview-sdk/resource/api200/logical_interconnect.rb +251 -0
  26. data/lib/oneview-sdk/resource/api200/logical_interconnect_group.rb +116 -0
  27. data/lib/oneview-sdk/resource/api200/logical_switch.rb +188 -0
  28. data/lib/oneview-sdk/resource/api200/logical_switch_group.rb +70 -0
  29. data/lib/oneview-sdk/resource/api200/managed_san.rb +83 -0
  30. data/lib/oneview-sdk/resource/api200/network_set.rb +68 -0
  31. data/lib/oneview-sdk/resource/api200/power_device.rb +178 -0
  32. data/lib/oneview-sdk/resource/api200/rack.rb +88 -0
  33. data/lib/oneview-sdk/resource/api200/resource.rb +18 -0
  34. data/lib/oneview-sdk/resource/api200/san_manager.rb +92 -0
  35. data/lib/oneview-sdk/resource/api200/server_hardware.rb +244 -0
  36. data/lib/oneview-sdk/resource/api200/server_hardware_type.rb +61 -0
  37. data/lib/oneview-sdk/resource/api200/server_profile.rb +385 -0
  38. data/lib/oneview-sdk/resource/api200/server_profile_template.rb +217 -0
  39. data/lib/oneview-sdk/resource/api200/storage_pool.rb +92 -0
  40. data/lib/oneview-sdk/resource/api200/storage_system.rb +157 -0
  41. data/lib/oneview-sdk/resource/api200/switch.rb +91 -0
  42. data/lib/oneview-sdk/resource/api200/unmanaged_device.rb +59 -0
  43. data/lib/oneview-sdk/resource/api200/uplink_set.rb +83 -0
  44. data/lib/oneview-sdk/resource/api200/volume.rb +192 -0
  45. data/lib/oneview-sdk/resource/api200/volume_attachment.rb +83 -0
  46. data/lib/oneview-sdk/resource/api200/volume_snapshot.rb +50 -0
  47. data/lib/oneview-sdk/resource/api200/volume_template.rb +99 -0
  48. data/lib/oneview-sdk/resource/api300.rb +66 -0
  49. data/lib/oneview-sdk/resource/api300/c7000.rb +27 -0
  50. data/lib/oneview-sdk/resource/api300/c7000/connection_template.rb +30 -0
  51. data/lib/oneview-sdk/resource/api300/c7000/datacenter.rb +22 -0
  52. data/lib/oneview-sdk/resource/api300/c7000/enclosure.rb +48 -0
  53. data/lib/oneview-sdk/resource/api300/c7000/enclosure_group.rb +37 -0
  54. data/lib/oneview-sdk/resource/api300/c7000/ethernet_network.rb +35 -0
  55. data/lib/oneview-sdk/resource/api300/c7000/fabric.rb +22 -0
  56. data/lib/oneview-sdk/resource/api300/c7000/fc_network.rb +37 -0
  57. data/lib/oneview-sdk/resource/api300/c7000/fcoe_network.rb +35 -0
  58. data/lib/oneview-sdk/resource/api300/c7000/firmware_bundle.rb +21 -0
  59. data/lib/oneview-sdk/resource/api300/c7000/firmware_driver.rb +22 -0
  60. data/lib/oneview-sdk/resource/api300/c7000/interconnect.rb +21 -0
  61. data/lib/oneview-sdk/resource/api300/c7000/lig_uplink_set.rb +21 -0
  62. data/lib/oneview-sdk/resource/api300/c7000/logical_downlink.rb +34 -0
  63. data/lib/oneview-sdk/resource/api300/c7000/logical_enclosure.rb +35 -0
  64. data/lib/oneview-sdk/resource/api300/c7000/logical_interconnect.rb +21 -0
  65. data/lib/oneview-sdk/resource/api300/c7000/logical_interconnect_group.rb +33 -0
  66. data/lib/oneview-sdk/resource/api300/c7000/logical_switch.rb +51 -0
  67. data/lib/oneview-sdk/resource/api300/c7000/logical_switch_group.rb +33 -0
  68. data/lib/oneview-sdk/resource/api300/c7000/managed_san.rb +36 -0
  69. data/lib/oneview-sdk/resource/api300/c7000/network_set.rb +37 -0
  70. data/lib/oneview-sdk/resource/api300/c7000/power_device.rb +21 -0
  71. data/lib/oneview-sdk/resource/api300/c7000/rack.rb +22 -0
  72. data/lib/oneview-sdk/resource/api300/c7000/resource.rb +21 -0
  73. data/lib/oneview-sdk/resource/api300/c7000/san_manager.rb +22 -0
  74. data/lib/oneview-sdk/resource/api300/c7000/server_hardware.rb +93 -0
  75. data/lib/oneview-sdk/resource/api300/c7000/server_hardware_type.rb +21 -0
  76. data/lib/oneview-sdk/resource/api300/c7000/server_profile.rb +33 -0
  77. data/lib/oneview-sdk/resource/api300/c7000/server_profile_template.rb +50 -0
  78. data/lib/oneview-sdk/resource/api300/c7000/storage_pool.rb +29 -0
  79. data/lib/oneview-sdk/resource/api300/c7000/storage_system.rb +21 -0
  80. data/lib/oneview-sdk/resource/api300/c7000/switch.rb +31 -0
  81. data/lib/oneview-sdk/resource/api300/c7000/unmanaged_device.rb +21 -0
  82. data/lib/oneview-sdk/resource/api300/c7000/uplink_set.rb +21 -0
  83. data/lib/oneview-sdk/resource/api300/c7000/volume.rb +22 -0
  84. data/lib/oneview-sdk/resource/api300/c7000/volume_attachment.rb +21 -0
  85. data/lib/oneview-sdk/resource/api300/c7000/volume_snapshot.rb +21 -0
  86. data/lib/oneview-sdk/resource/api300/c7000/volume_template.rb +32 -0
  87. data/lib/oneview-sdk/resource/api300/synergy.rb +27 -0
  88. data/lib/oneview-sdk/resource/api300/synergy/connection_template.rb +30 -0
  89. data/lib/oneview-sdk/resource/api300/synergy/datacenter.rb +22 -0
  90. data/lib/oneview-sdk/resource/api300/synergy/drive_enclosure.rb +71 -0
  91. data/lib/oneview-sdk/resource/api300/synergy/enclosure.rb +110 -0
  92. data/lib/oneview-sdk/resource/api300/synergy/enclosure_group.rb +43 -0
  93. data/lib/oneview-sdk/resource/api300/synergy/ethernet_network.rb +35 -0
  94. data/lib/oneview-sdk/resource/api300/synergy/fabric.rb +46 -0
  95. data/lib/oneview-sdk/resource/api300/synergy/fc_network.rb +37 -0
  96. data/lib/oneview-sdk/resource/api300/synergy/fcoe_network.rb +35 -0
  97. data/lib/oneview-sdk/resource/api300/synergy/firmware_bundle.rb +21 -0
  98. data/lib/oneview-sdk/resource/api300/synergy/firmware_driver.rb +22 -0
  99. data/lib/oneview-sdk/resource/api300/synergy/interconnect.rb +43 -0
  100. data/lib/oneview-sdk/resource/api300/synergy/lig_uplink_set.rb +21 -0
  101. data/lib/oneview-sdk/resource/api300/synergy/logical_downlink.rb +34 -0
  102. data/lib/oneview-sdk/resource/api300/synergy/logical_enclosure.rb +59 -0
  103. data/lib/oneview-sdk/resource/api300/synergy/logical_interconnect.rb +21 -0
  104. data/lib/oneview-sdk/resource/api300/synergy/logical_interconnect_group.rb +119 -0
  105. data/lib/oneview-sdk/resource/api300/synergy/logical_switch.rb +33 -0
  106. data/lib/oneview-sdk/resource/api300/synergy/logical_switch_group.rb +45 -0
  107. data/lib/oneview-sdk/resource/{firmware_driver.rb → api300/synergy/managed_san.rb} +7 -17
  108. data/lib/oneview-sdk/resource/api300/synergy/network_set.rb +37 -0
  109. data/lib/oneview-sdk/resource/api300/synergy/power_device.rb +21 -0
  110. data/lib/oneview-sdk/resource/api300/synergy/rack.rb +22 -0
  111. data/lib/oneview-sdk/resource/api300/synergy/resource.rb +21 -0
  112. data/lib/oneview-sdk/resource/api300/synergy/san_manager.rb +22 -0
  113. data/lib/oneview-sdk/resource/api300/synergy/sas_interconnect.rb +87 -0
  114. data/lib/oneview-sdk/resource/api300/synergy/sas_logical_interconnect.rb +110 -0
  115. data/lib/oneview-sdk/resource/api300/synergy/sas_logical_interconnect_group.rb +87 -0
  116. data/lib/oneview-sdk/resource/api300/synergy/server_hardware.rb +30 -0
  117. data/lib/oneview-sdk/resource/api300/synergy/server_hardware_type.rb +21 -0
  118. data/lib/oneview-sdk/resource/api300/synergy/server_profile.rb +78 -0
  119. data/lib/oneview-sdk/resource/api300/synergy/server_profile_template.rb +34 -0
  120. data/lib/oneview-sdk/resource/api300/synergy/storage_pool.rb +22 -0
  121. data/lib/oneview-sdk/resource/api300/synergy/storage_system.rb +21 -0
  122. data/lib/oneview-sdk/resource/api300/synergy/switch.rb +37 -0
  123. data/lib/oneview-sdk/resource/api300/synergy/unmanaged_device.rb +21 -0
  124. data/lib/oneview-sdk/resource/api300/synergy/uplink_set.rb +21 -0
  125. data/lib/oneview-sdk/resource/api300/synergy/volume.rb +22 -0
  126. data/lib/oneview-sdk/resource/api300/synergy/volume_attachment.rb +21 -0
  127. data/lib/oneview-sdk/resource/api300/synergy/volume_snapshot.rb +21 -0
  128. data/lib/oneview-sdk/resource/api300/synergy/volume_template.rb +32 -0
  129. data/lib/oneview-sdk/rest.rb +7 -10
  130. data/lib/oneview-sdk/ssl_helper.rb +3 -3
  131. data/lib/oneview-sdk/version.rb +1 -1
  132. data/oneview-sdk.gemspec +5 -5
  133. metadata +126 -47
  134. data/.gitattributes +0 -2
  135. data/.gitignore +0 -29
  136. data/.rubocop.yml +0 -80
  137. data/.travis.yml +0 -12
  138. data/lib/oneview-sdk/resource/connection_template.rb +0 -48
  139. data/lib/oneview-sdk/resource/datacenter.rb +0 -77
  140. data/lib/oneview-sdk/resource/enclosure.rb +0 -191
  141. data/lib/oneview-sdk/resource/enclosure_group.rb +0 -82
  142. data/lib/oneview-sdk/resource/ethernet_network.rb +0 -56
  143. data/lib/oneview-sdk/resource/fabric.rb +0 -41
  144. data/lib/oneview-sdk/resource/fc_network.rb +0 -30
  145. data/lib/oneview-sdk/resource/firmware_bundle.rb +0 -50
  146. data/lib/oneview-sdk/resource/interconnect.rb +0 -107
  147. data/lib/oneview-sdk/resource/lig_uplink_set.rb +0 -80
  148. data/lib/oneview-sdk/resource/logical_downlink.rb +0 -53
  149. data/lib/oneview-sdk/resource/logical_enclosure.rb +0 -86
  150. data/lib/oneview-sdk/resource/logical_interconnect.rb +0 -247
  151. data/lib/oneview-sdk/resource/logical_interconnect_group.rb +0 -112
  152. data/lib/oneview-sdk/resource/logical_switch.rb +0 -184
  153. data/lib/oneview-sdk/resource/logical_switch_group.rb +0 -66
  154. data/lib/oneview-sdk/resource/managed_san.rb +0 -79
  155. data/lib/oneview-sdk/resource/network_set.rb +0 -64
  156. data/lib/oneview-sdk/resource/power_device.rb +0 -174
  157. data/lib/oneview-sdk/resource/rack.rb +0 -83
  158. data/lib/oneview-sdk/resource/san_manager.rb +0 -88
  159. data/lib/oneview-sdk/resource/server_hardware.rb +0 -209
  160. data/lib/oneview-sdk/resource/server_hardware_type.rb +0 -58
  161. data/lib/oneview-sdk/resource/server_profile.rb +0 -380
  162. data/lib/oneview-sdk/resource/server_profile_template.rb +0 -213
  163. data/lib/oneview-sdk/resource/storage_pool.rb +0 -63
  164. data/lib/oneview-sdk/resource/storage_system.rb +0 -113
  165. data/lib/oneview-sdk/resource/switch.rb +0 -86
  166. data/lib/oneview-sdk/resource/unmanaged_device.rb +0 -55
  167. data/lib/oneview-sdk/resource/uplink_set.rb +0 -79
  168. data/lib/oneview-sdk/resource/volume.rb +0 -188
  169. data/lib/oneview-sdk/resource/volume_attachment.rb +0 -79
  170. data/lib/oneview-sdk/resource/volume_snapshot.rb +0 -46
  171. data/lib/oneview-sdk/resource/volume_template.rb +0 -95
@@ -0,0 +1,244 @@
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
+ # Server hardware resource implementation
17
+ class ServerHardware < Resource
18
+ BASE_URI = '/rest/server-hardware'.freeze
19
+ UNIQUE_IDENTIFIERS = %w(name uri serialNumber virtualSerialNumber serverProfileUri).freeze
20
+
21
+ # Remove resource from OneView
22
+ # @return [true] if resource was removed successfully
23
+ alias remove delete
24
+
25
+ # Create a resource object, associate it with a client, and set its properties.
26
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
27
+ # @param [Hash] params The options for this resource (key-value pairs)
28
+ # @param [Integer] api_ver The api version to use when interracting with this resource.
29
+ def initialize(client, params = {}, api_ver = nil)
30
+ super
31
+ # Default values
32
+ @data['type'] ||= 'server-hardware-4'
33
+ end
34
+
35
+ # Retrieve resource details based on this resource's name or URI.
36
+ # @note one of the UNIQUE_IDENTIFIERS must be specified in the resource
37
+ # @return [Boolean] Whether or not retrieve was successful
38
+ def retrieve!
39
+ hostname = @data['hostname'] || @data['mpHostInfo']['mpHostName'] rescue nil
40
+ if hostname
41
+ results = self.class.find_by(@client, 'mpHostInfo' => { 'mpHostName' => hostname })
42
+ if results.size == 1
43
+ set_all(results[0].data)
44
+ return true
45
+ end
46
+ end
47
+ super
48
+ rescue IncompleteResource => e
49
+ raise e unless hostname
50
+ false
51
+ end
52
+
53
+ # Check if a resource exists
54
+ # @note one of the UNIQUE_IDENTIFIERS must be specified in the resource
55
+ # @return [Boolean] Whether or not resource exists
56
+ def exists?
57
+ hostname = @data['hostname'] || @data['mpHostInfo']['mpHostName'] rescue nil
58
+ return true if hostname && self.class.find_by(@client, 'mpHostInfo' => { 'mpHostName' => hostname }).size == 1
59
+ super
60
+ rescue IncompleteResource => e
61
+ raise e unless hostname
62
+ false
63
+ end
64
+
65
+ # Method is not available
66
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
67
+ def create
68
+ unavailable_method
69
+ end
70
+
71
+ # Method is not available
72
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
73
+ def delete
74
+ unavailable_method
75
+ end
76
+
77
+ # Adds the resource on OneView using the current data
78
+ # @raise [OneviewSDK::IncompleteResource] if the client is not set or required attributes are missing
79
+ # @return [OneviewSDK::ServerHardware] self
80
+ def add
81
+ ensure_client
82
+ required_attributes = %w(hostname username password licensingIntent)
83
+ required_attributes.each { |k| raise IncompleteResource, "Missing required attribute: '#{k}'" unless @data.key?(k) }
84
+
85
+ optional_attrs = %w(configurationState force restore)
86
+ temp_data = @data.select { |k, _v| required_attributes.include?(k) || optional_attrs.include?(k) }
87
+ response = @client.rest_post(self.class::BASE_URI, { 'body' => temp_data }, @api_version)
88
+ body = @client.response_handler(response)
89
+ set_all(body)
90
+ %w(username password hostname).each { |k| @data.delete(k) } # These are no longer needed
91
+ self
92
+ end
93
+
94
+ # Method is not available
95
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
96
+ def update(*)
97
+ unavailable_method
98
+ end
99
+
100
+ # Power on the server hardware
101
+ # @param [Boolean] force Use 'PressAndHold' action?
102
+ # @return [Boolean] Returns whether or not the server was powered on
103
+ def power_on(force = false)
104
+ set_power_state('on', force)
105
+ end
106
+
107
+ # Power off the server hardware
108
+ # @param [Boolean] force Use 'PressAndHold' action?
109
+ # @return [Boolean] Returns whether or not the server was powered off
110
+ def power_off(force = false)
111
+ set_power_state('off', force)
112
+ end
113
+
114
+ # Gets a list of BIOS/UEFI values on the physical server
115
+ # @return [Hash] List with BIOS/UEFI settings
116
+ def get_bios
117
+ response = @client.rest_get(@data['uri'] + '/bios')
118
+ @client.response_handler(response)
119
+ end
120
+
121
+ # Gets a url to the iLO web interface
122
+ # @return [Hash] url
123
+ def get_ilo_sso_url
124
+ response = @client.rest_get(@data['uri'] + '/iloSsoUrl')
125
+ @client.response_handler(response)
126
+ end
127
+
128
+ # Gets a Single Sign-On session for the Java Applet console
129
+ # @return [Hash] url
130
+ def get_java_remote_sso_url
131
+ response = @client.rest_get(@data['uri'] + '/javaRemoteConsoleUrl')
132
+ @client.response_handler(response)
133
+ end
134
+
135
+ # Gets a url to the iLO web interface
136
+ # @return [Hash] url
137
+ def get_remote_console_url
138
+ response = @client.rest_get(@data['uri'] + '/remoteConsoleUrl')
139
+ @client.response_handler(response)
140
+ end
141
+
142
+ # Refreshes the enclosure along with all of its components
143
+ # @param [String] state NotRefreshing, RefreshFailed, RefreshPending, Refreshing
144
+ # @param [Hash] options Optional force fields for refreshing the enclosure
145
+ def set_refresh_state(state, options = {})
146
+ ensure_client && ensure_uri
147
+ s = state.to_s rescue state
148
+ requestBody = {
149
+ 'body' => {
150
+ refreshState: s
151
+ }
152
+ }
153
+ requestBody['body'].merge(options)
154
+ response = @client.rest_put(@data['uri'] + '/refreshState', requestBody, @api_version)
155
+ new_data = @client.response_handler(response)
156
+ set_all(new_data)
157
+ end
158
+
159
+ # Updates the iLO firmware on a physical server to a minimum iLO firmware required by OneView
160
+ def update_ilo_firmware
161
+ response = @client.rest_put(@data['uri'] + '/mpFirmwareVersion')
162
+ @client.response_handler(response)
163
+ end
164
+
165
+ # Gets the settings that describe the environmental configuration
166
+ def environmental_configuration
167
+ ensure_client && ensure_uri
168
+ response = @client.rest_get(@data['uri'] + '/environmentalConfiguration', @api_version)
169
+ @client.response_handler(response)
170
+ end
171
+
172
+ # Retrieves historical utilization
173
+ # @param [Hash] queryParameters query parameters (ie :startDate, :endDate, :fields, :view, etc.)
174
+ # @option queryParameters [Array] :fields
175
+ # @option queryParameters [Time, Date, String] :startDate
176
+ # @option queryParameters [Time, Date, String] :endDate
177
+ def utilization(queryParameters = {})
178
+ ensure_client && ensure_uri
179
+ uri = "#{@data['uri']}/utilization?"
180
+
181
+ queryParameters[:endDate] = convert_time(queryParameters[:endDate])
182
+ queryParameters[:startDate] = convert_time(queryParameters[:startDate])
183
+
184
+ queryParameters.each do |key, value|
185
+ next if value.nil?
186
+ uri += case key.to_sym
187
+ when :fields
188
+ "fields=#{value.join(',')}"
189
+ when :startDate, :endDate
190
+ "filter=#{key}=#{value}"
191
+ else
192
+ "#{key}=#{value}"
193
+ end
194
+ uri += '&'
195
+ end
196
+ uri.chop! # Get rid of trailing '&' or '?'
197
+ response = @client.rest_get(uri, @api_version)
198
+ @client.response_handler(response)
199
+ end
200
+
201
+ private
202
+
203
+ # Converts Date, Time, or String objects to iso8601 string
204
+ def convert_time(t)
205
+ case t
206
+ when nil then nil
207
+ when Date then t.to_time.utc.iso8601(3)
208
+ when Time then t.utc.iso8601(3)
209
+ when String then Time.parse(t).utc.iso8601(3)
210
+ else raise InvalidResource, "Invalid time format '#{t.class}'. Valid options are Time, Date, or String"
211
+ end
212
+ rescue StandardError => e
213
+ raise InvalidResource, "Failed to parse time value '#{t}'. #{e.message}"
214
+ end
215
+
216
+ # Set power state. Takes into consideration the current state and does the right thing
217
+ def set_power_state(state, force)
218
+ refresh
219
+ return true if @data['powerState'].downcase == state
220
+ @logger.debug "Powering #{state} server hardware '#{@data['name']}'. Current state: '#{@data['powerState']}'"
221
+
222
+ action = 'PressAndHold' if force
223
+ action ||= case @data['powerState'].downcase
224
+ when 'poweringon', 'poweringoff' # Wait
225
+ sleep 5
226
+ return set_power_state(state, force)
227
+ when 'resetting'
228
+ if state == 'on' # Wait
229
+ sleep 5
230
+ return set_power_state(state, force)
231
+ end
232
+ 'PressAndHold'
233
+ when 'unknown' then state == 'on' ? 'ColdBoot' : 'PressAndHold'
234
+ else 'MomentaryPress'
235
+ end
236
+ options = { 'body' => { powerState: state.capitalize, powerControl: action } }
237
+ response = @client.rest_put("#{@data['uri']}/powerState", options)
238
+ body = @client.response_handler(response)
239
+ set_all(body)
240
+ true
241
+ end
242
+ end
243
+ end
244
+ end
@@ -0,0 +1,61 @@
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
+ # Server hardware type resource implementation
17
+ class ServerHardwareType < Resource
18
+ BASE_URI = '/rest/server-hardware-types'.freeze
19
+
20
+ # Remove resource from OneView
21
+ # @return [true] if resource was removed successfully
22
+ alias remove delete
23
+
24
+ # Create a resource object, associate it with a client, and set its properties.
25
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
26
+ # @param [Hash] params The options for this resource (key-value pairs)
27
+ # @param [Integer] api_ver The api version to use when interracting with this resource.
28
+ def initialize(client, params = {}, api_ver = nil)
29
+ super
30
+ # Default values
31
+ @data['type'] ||= 'server-hardware-type-4'
32
+ end
33
+
34
+ # Method is not available
35
+ # @raise [OneviewSDK::MethodUnavailable] method is not available
36
+ def create
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
+ # Update resource attributes
47
+ # @param [Hash] attributes attributes to be updated
48
+ # @option attributes [String] :name server hardware type name
49
+ # @option attributes [String] :description server hardware type description
50
+ # @return [OneviewSDK::ServerHardwareType] self
51
+ def update(attributes = {})
52
+ set_all(attributes)
53
+ ensure_client && ensure_uri
54
+ data = @data.select { |k, _v| %w(name description).include?(k) }
55
+ response = @client.rest_put(@data['uri'], { 'body' => data }, @api_version)
56
+ @client.response_handler(response)
57
+ self
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,385 @@
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
+ # Server profile resource implementation
17
+ class ServerProfile < Resource
18
+ BASE_URI = '/rest/server-profiles'.freeze
19
+ UNIQUE_IDENTIFIERS = %w(name uri associatedServer serialNumber serverHardwareUri).freeze
20
+
21
+ def initialize(client, params = {}, api_ver = nil)
22
+ super
23
+ # Default values
24
+ @data['type'] ||= 'ServerProfileV5'
25
+ end
26
+
27
+ # Sets the Server Hardware for the resource
28
+ # @param [OneviewSDK::ServerHardware] server_hardware Server Hardware resource
29
+ def set_server_hardware(server_hardware)
30
+ self['serverHardwareUri'] = server_hardware['uri'] if server_hardware['uri'] || server_hardware.retrieve!
31
+ raise "Resource #{server_hardware['name']} could not be found!" unless server_hardware['uri']
32
+ end
33
+
34
+ # Sets the Server Hardware Type for the resource
35
+ # @param [OneviewSDK::ServerHardwareType] server_hardware_type Type of the desired Server Hardware
36
+ def set_server_hardware_type(server_hardware_type)
37
+ self['serverHardwareTypeUri'] = server_hardware_type['uri'] if server_hardware_type['uri'] || server_hardware_type.retrieve!
38
+ raise "Resource #{server_hardware_type['name']} could not be found!" unless server_hardware_type['uri']
39
+ end
40
+
41
+ # Sets the Enclosure Group for the resource
42
+ # @param [OneviewSDK::EnclosureGroup] enclosure_group Enclosure Group that the Server is a member
43
+ def set_enclosure_group(enclosure_group)
44
+ self['enclosureGroupUri'] = enclosure_group['uri'] if enclosure_group['uri'] || enclosure_group.retrieve!
45
+ raise "Resource #{enclosure_group['name']} could not be found!" unless enclosure_group['uri']
46
+ end
47
+
48
+ # Sets the Enclosure Group for the resource
49
+ # @param [OneviewSDK::Enclosure] enclosure Enclosure that the Server is a member
50
+ def set_enclosure(enclosure)
51
+ self['enclosureUri'] = enclosure['uri'] if enclosure['uri'] || enclosure.retrieve!
52
+ raise "Resource #{enclosure['name']} could not be found!" unless enclosure['uri']
53
+ end
54
+
55
+ # Gets the preview of manual and automatic updates required to make the server profile consistent with its template.
56
+ # @return [Hash] Hash containing the required information
57
+ def get_compliance_preview
58
+ ensure_client & ensure_uri
59
+ response = @client.rest_get("#{self['uri']}/compliance-preview")
60
+ @client.response_handler(response)
61
+ end
62
+
63
+ # Retrieves the error or status messages associated with the specified profile.
64
+ # @return [Hash] Hash containing the required information
65
+ def get_messages
66
+ ensure_client & ensure_uri
67
+ response = @client.rest_get("#{self['uri']}/messages")
68
+ @client.response_handler(response)
69
+ end
70
+
71
+ # Transforms an existing profile by supplying a new server hardware type and/or enclosure group.
72
+ # A profile will be returned with a new configuration based on the capabilities of the supplied
73
+ # server hardware type and/or enclosure group. All deployed connections will have their port assignment
74
+ # set to 'Auto'. Re-selection of the server hardware may also be required. The new profile can subsequently
75
+ # be used for the PUT https://{appl}/rest/server- profiles/{id} API but is not guaranteed to pass
76
+ # validation. Any incompatibilities will be flagged when the transformed server profile is submitted.
77
+ # @param [Hash<String,Object>] query Query parameters
78
+ # @option query [OneviewSDK::EnclosureGroup] 'enclosure_group' Enclosure Group associated with the resource
79
+ # @option query [OneviewSDK::ServerHardware] 'server_hardware' The server hardware associated with the resource
80
+ # @option query [OneviewSDK::ServerHardwareType] 'server_hardware_type' The server hardware type associated with the resource
81
+ # @return [Hash] Hash containing the required information
82
+ def get_transformation(query = nil)
83
+ ensure_client & ensure_uri
84
+ query_uri = OneviewSDK::Resource.build_query(query) if query
85
+ response = @client.rest_get("#{self['uri']}/transformation#{query_uri}")
86
+ @client.response_handler(response)
87
+ end
88
+
89
+ # Updates the server profile from the server profile template.
90
+ def update_from_template
91
+ ensure_client & ensure_uri
92
+ patch_operation = { 'op' => 'replace', 'path' => '/templateCompliance', 'value' => 'Compliant' }
93
+ patch_options = {
94
+ 'If-Match' => self['eTag'],
95
+ 'body' => [patch_operation]
96
+ }
97
+ response = @client.rest_patch(self['uri'], patch_options)
98
+ @client.response_handler(response)
99
+ end
100
+
101
+ # @!group Helpers
102
+
103
+ # Gets attached ServerHardware for the profile
104
+ # @return [OneviewSDK::ServerHardware] if hardware is attached
105
+ # @return [nil] if no hardware is attached
106
+ def get_server_hardware
107
+ return nil unless self['serverHardwareUri']
108
+ sh = OneviewSDK::ServerHardware.new(@client, uri: self['serverHardwareUri'])
109
+ sh.retrieve!
110
+ sh
111
+ end
112
+
113
+ # Gets all the available Ethernet and FC Networks, and Network Sets
114
+ # @return [Hash]
115
+ # A hash containing the lists of Ethernet Networks and FC Networks
116
+ def get_available_networks
117
+ query = { enclosure_group_uri: @data['enclosureGroupUri'], server_hardware_type_uri: @data['serverHardwareTypeUri'] }
118
+ self.class.get_available_networks(@client, query)
119
+ end
120
+
121
+ # Gets available server hardware
122
+ # @return [Array<OneviewSDK::ServerHardware>] Array of ServerHardware resources that matches this
123
+ # profile's server hardware type and enclosure group and who's state is 'NoProfileApplied'
124
+ def get_available_hardware
125
+ ensure_client
126
+ raise IncompleteResource, 'Must set @data[\'serverHardwareTypeUri\']' unless @data['serverHardwareTypeUri']
127
+ raise IncompleteResource, 'Must set @data[\'enclosureGroupUri\']' unless @data['enclosureGroupUri']
128
+ params = {
129
+ state: 'NoProfileApplied',
130
+ serverHardwareTypeUri: @data['serverHardwareTypeUri'],
131
+ serverGroupUri: @data['enclosureGroupUri']
132
+ }
133
+ OneviewSDK::ServerHardware.find_by(@client, params)
134
+ rescue StandardError => e
135
+ raise IncompleteResource, "Failed to get available hardware. Message: #{e.message}"
136
+ end
137
+
138
+ # Adds a connection entry to Server profile template
139
+ # @param [OneviewSDK::EthernetNetwork,OneviewSDK::FCNetwork] network Network associated with the connection
140
+ # @param [Hash<String,String>] connection_options Hash containing the configuration of the connection
141
+ # @option connection_options [Integer] 'allocatedMbps' The transmit throughput (mbps) currently allocated to
142
+ # this connection. When Fibre Channel connections are set to Auto for requested bandwidth, the value can be set to -2000
143
+ # to indicate that the actual value is unknown until OneView is able to negotiate the actual speed.
144
+ # @option connection_options [Integer] 'allocatedVFs' The number of virtual functions allocated to this connection. This value will be null.
145
+ # @option connection_options [Hash] 'boot' indicates that the server will attempt to boot from this connection.
146
+ # This object can only be specified if "boot.manageBoot" is set to 'true'
147
+ # @option connection_options [String] 'deploymentStatus' The deployment status of the connection.
148
+ # The value can be 'Undefined', 'Reserved', or 'Deployed'.
149
+ # @option connection_options [String] 'functionType' Type of function required for the connection.
150
+ # functionType cannot be modified after the connection is created.
151
+ # @option connection_options [String] 'mac' The MAC address that is currently programmed on the FlexNic.
152
+ # @option connection_options [String] 'macType' Specifies the type of MAC address to be programmed into the IO Devices.
153
+ # The value can be 'Virtual', 'Physical' or 'UserDefined'.
154
+ # @option connection_options [String] 'maximumMbps' Maximum transmit throughput (mbps) allowed on this connection.
155
+ # The value is limited by the maximum throughput of the network link and maximumBandwidth of the selected network (networkUri).
156
+ # For Fibre Channel connections, the value is limited to the same value as the allocatedMbps.
157
+ # @option connection_options [String] 'name' A string used to identify the respective connection.
158
+ # The connection name is case insensitive, limited to 63 characters and must be unique within the profile.
159
+ # @option connection_options [String] 'portId' Identifies the port (FlexNIC) used for this connection.
160
+ # @option connection_options [String] 'requestedMbps' The transmit throughput (mbps) that should be allocated to this connection.
161
+ # @option connection_options [String] 'requestedVFs' This value can be "Auto" or 0.
162
+ # @option connection_options [String] 'wwnn' The node WWN address that is currently programmed on the FlexNic.
163
+ # @option connection_options [String] 'wwpn' The port WWN address that is currently programmed on the FlexNic.
164
+ # @option connection_options [String] 'wwpnType' Specifies the type of WWN address to be porgrammed on the FlexNIC.
165
+ # The value can be 'Virtual', 'Physical' or 'UserDefined'.
166
+ def add_connection(network, connection_options = {})
167
+ self['connections'] = [] unless self['connections']
168
+ connection_options['id'] = 0 # Letting OneView treat the ID registering
169
+ connection_options['networkUri'] = network['uri'] if network['uri'] || network.retrieve!
170
+ self['connections'] << connection_options
171
+ end
172
+
173
+ # Removes a connection entry in Server profile template
174
+ # @param [String] connection_name Name of the connection
175
+ # @return Returns the connection hash if found, otherwise returns nil
176
+ def remove_connection(connection_name)
177
+ desired_connection = nil
178
+ return desired_connection unless self['connections']
179
+ self['connections'].each do |con|
180
+ desired_connection = self['connections'].delete(con) if con['name'] == connection_name
181
+ end
182
+ desired_connection
183
+ end
184
+
185
+ # Adds volume attachment entry with associated Volume in Server profile
186
+ # @param [OneviewSDK::Volume] volume Volume Resource to add an attachment
187
+ # @param [Hash] attachment_options Options of the new attachment
188
+ # @option attachment_options [Fixnum] 'id' The ID of the attached storage volume. Do not use it if you want it to be created automatically.
189
+ # @option attachment_options [String] 'lun' The logical unit number.
190
+ # @option attachment_options [String] 'lunType' The logical unit number type: Auto or Manual.
191
+ # @option attachment_options [Boolean] 'permanent' Required. If true, indicates that the volume will persist when the profile is deleted.
192
+ # If false, then the volume will be deleted when the profile is deleted.
193
+ # @option attachment_options [Array] 'storagePaths' A list of host-to-target path associations.
194
+ # @return Returns the connection hash if found, otherwise returns nil
195
+ def add_volume_attachment(volume, attachment_options = {})
196
+ self['sanStorage'] ||= {}
197
+ self['sanStorage']['volumeAttachments'] ||= []
198
+ attachment_options['id'] ||= 0
199
+
200
+ volume.retrieve! unless volume['uri'] || volume['storagePoolUri'] || volume['storageSystemUri']
201
+ attachment_options['volumeUri'] = volume['uri']
202
+ attachment_options['volumeStoragePoolUri'] = volume['storagePoolUri']
203
+ attachment_options['volumeStorageSystemUri'] = volume['storageSystemUri']
204
+
205
+ self['sanStorage']['volumeAttachments'] << attachment_options
206
+ end
207
+
208
+ # Adds volume attachment entry and creates a new Volume associated in the Server profile
209
+ # @param [OneviewSDK::Volume] volume Volume Resource to add an attachment
210
+ # @param [Hash] volume_options Options to create a new Volume.
211
+ # Please refer to OneviewSDK::Volume documentation for the data necessary to create a new Volume.
212
+ # @param [Hash] attachment_options Options of the new attachment
213
+ # @option attachment_options [Fixnum] 'id' The ID of the attached storage volume. Do not use it if you want it to be created automatically.
214
+ # @option attachment_options [String] 'lun' The logical unit number.
215
+ # @option attachment_options [String] 'lunType' The logical unit number type: Auto or Manual.
216
+ # @option attachment_options [Boolean] 'permanent' Required. If true, indicates that the volume will persist when the profile is deleted.
217
+ # If false, then the volume will be deleted when the profile is deleted.
218
+ # @option attachment_options [Array] 'storagePaths' A list of host-to-target path associations.
219
+ # @return Returns the connection hash if found, otherwise returns nil
220
+ def create_volume_with_attachment(storage_pool, volume_options, attachment_options = {})
221
+ self['sanStorage'] ||= {}
222
+ self['sanStorage']['volumeAttachments'] ||= []
223
+ attachment_options['id'] ||= 0
224
+ # Removing provisioningParameters and adding them to the top level hash
225
+ provision_param = volume_options.delete('provisioningParameters') || volume_options.delete(:provisioningParameters)
226
+ provision_param.each do |k, v|
227
+ volume_options[k] = v
228
+ end
229
+ # Each provisioningParameter has the prefix 'volume' attached to its name in the original options
230
+ # Also, it needs to respect the lower camel case
231
+ volume_options.each do |k, v|
232
+ attachment_options["volume#{k.to_s[0].capitalize}#{k.to_s[1, k.to_s.length - 1]}"] = v
233
+ end
234
+
235
+ attachment_options['volumeStoragePoolUri'] = storage_pool['uri'] if storage_pool['uri'] || storage_pool.retrieve!
236
+
237
+ # Since the volume is being created in this method, it needs to be nil
238
+ attachment_options['volumeUri'] = nil
239
+ attachment_options['volumeStorageSystemUri'] = nil
240
+
241
+ # volumeProvisionedCapacityBytes is not following the same pattern in Volume
242
+ attachment_options['volumeProvisionedCapacityBytes'] ||= attachment_options.delete('volumeRequestedCapacity')
243
+
244
+ # Defaults
245
+ attachment_options['permanent'] ||= true
246
+ attachment_options['lunType'] ||= 'Auto'
247
+ attachment_options['lun'] ||= nil
248
+ attachment_options['storagePaths'] ||= []
249
+
250
+ self['sanStorage']['volumeAttachments'] << attachment_options
251
+ end
252
+
253
+ # Removes a volume attachment entry in the Server profile
254
+ # @param [Fixnum] id ID number of the attachment entry
255
+ # @return Returns the volume hash if found, otherwise returns nil
256
+ def remove_volume_attachment(id)
257
+ self['sanStorage'] ||= {}
258
+ self['sanStorage']['volumeAttachments'] ||= []
259
+ return if self['sanStorage'].empty? || self['sanStorage']['volumeAttachments'].empty?
260
+
261
+ volume_attachment = nil
262
+ self['sanStorage']['volumeAttachments'].each do |entry|
263
+ volume_attachment = self['sanStorage']['volumeAttachments'].delete(entry) if entry['id'] == id
264
+ end
265
+ volume_attachment
266
+ end
267
+
268
+ # Sets the Firmware Driver for the server profile
269
+ # @param [OneviewSDK::FirmwareDriver] firmware Firmware Driver to be associated with the resource
270
+ # @param [Hash<String,Object>] firmware_options Firmware Driver options
271
+ # @option firmware_options [Boolean] 'manageFirmware' Indicates that the server firmware is configured using the server profile.
272
+ # Value can be 'true' or 'false'.
273
+ # @option firmware_options [Boolean] 'forceInstallFirmware' Force installation of firmware even if same or newer version is installed.
274
+ # Downgrading the firmware can result in the installation of unsupported firmware and cause server hardware to cease operation.
275
+ # Value can be 'true' or 'false'.
276
+ # @option firmware_options [String] 'firmwareInstallType' Specifies the way a Service Pack for ProLiant (SPP) is installed.
277
+ # This field is used if the 'manageFirmware' field is true.
278
+ # Values are 'FirmwareAndOSDrivers', 'FirmwareOnly', and 'FirmwareOnlyOfflineMode'.
279
+ def set_firmware_driver(firmware, firmware_options = {})
280
+ firmware_options['firmwareBaselineUri'] = firmware['uri'] if firmware['uri'] || firmware.retrieve!
281
+ self['firmware'] = firmware_options
282
+ end
283
+
284
+ # @!endgroup
285
+
286
+ # Gets all the available ethernet and fc networks, and network sets
287
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
288
+ # @param [Hash<String,Object>] query Query parameters
289
+ # @option query [OneviewSDK::EnclosureGroup] 'enclosure_group' Enclosure Group associated with the resource
290
+ # @option query [String] 'function_type' The FunctionType (Ethernet or FibreChannel) to filter the list of networks returned
291
+ # @option query [OneviewSDK::ServerHardware] 'server_hardware' The server hardware associated with the resource
292
+ # @option query [OneviewSDK::ServerHardwareType] 'server_hardware_type' The server hardware type associated with the resource
293
+ # @option query [String] 'view' Name of a predefined view to return a specific subset of the attributes of the resource or collection
294
+ # @return [Hash]
295
+ # A hash containing the lists of Ethernet and FC Networks, and Network Sets
296
+ # Options:
297
+ # * [String] 'ethernetNetworks' The list of Ethernet Networks
298
+ # * [String] 'fcNetworks' The list of FC Networks
299
+ # * [String] 'networkSets' The list of Networks Sets
300
+ def self.get_available_networks(client, query)
301
+ query_uri = build_query(query) if query
302
+ response = client.rest_get("#{BASE_URI}/available-networks#{query_uri}")
303
+ body = client.response_handler(response)
304
+ body.select { |k, _v| %w(ethernetNetworks networkSets fcNetworks).include?(k) }
305
+ end
306
+
307
+ # Gets the available servers based on the query parameters
308
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
309
+ # @param [Hash<String,Object>] query Query parameters
310
+ # @option query [OneviewSDK::EnclosureGroup] 'enclosure_group' Enclosure Group associated with the resource
311
+ # @option query [OneviewSDK::ServerProfile] 'server_profile' The server profile associated with the resource
312
+ # @option query [OneviewSDK::ServerHardwareType] 'server_hardware_type' The server hardware type associated with the resource
313
+ # @return [Hash] Hash containing all the available server information
314
+ def self.get_available_servers(client, query = nil)
315
+ if query
316
+ query_uri = build_query(query)
317
+ # profileUri attribute is not following the standards in OneView
318
+ query_uri.sub!('serverProfileUri', 'profileUri')
319
+ end
320
+ response = client.rest_get("#{BASE_URI}/available-servers#{query_uri}")
321
+ client.response_handler(response)
322
+ end
323
+
324
+ # Gets the available storage systems based on the query parameters
325
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
326
+ # @param [Hash<String,Object>] query Query parameters
327
+ # @option query [OneviewSDK::EnclosureGroup] 'enclosure_group' Enclosure Group associated with the resource
328
+ # @option query [OneviewSDK::ServerHardwareType] 'server_hardware_type' The server hardware type associated with the resource
329
+ # @option query [OneviewSDK::StorageSystem] 'storage_system' The Storage System the resources are associated with
330
+ def self.get_available_storage_system(client, query = nil)
331
+ # For storage_system the query requires the ID instead the URI
332
+ if query && query['storage_system']
333
+ query['storage_system'].retrieve! unless query['storage_system']['uri']
334
+ query['storage_system_id'] = query['storage_system']['uri'].split('/').last
335
+ query.delete('storage_system')
336
+ end
337
+ query_uri = build_query(query) if query
338
+ response = client.rest_get("#{BASE_URI}/available-storage-system#{query_uri}")
339
+ client.response_handler(response)
340
+ end
341
+
342
+ # Gets the available storage systems based on the query parameters
343
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
344
+ # @param [Hash<String,Object>] query Query parameters
345
+ # @option query [OneviewSDK::EnclosureGroup] 'enclosure_group' The enclosure group associated with the resource
346
+ # @option query [OneviewSDK::ServerHardwareType] 'server_hardware_type' The server hardware type associated with the resource
347
+ # @option query [Array<String>] 'filter' A general filter/query string to narrow the list of items returned.
348
+ # The default is no filter - all resources are returned.
349
+ # @option query [Integer] 'start' The first item to return, using 0-based indexing.
350
+ # If not specified, the default is 0 - start with the first available item.
351
+ # @option query [Integer] 'count' The sort order of the returned data set.
352
+ # By default, the sort order is based on create time, with the oldest entry first.
353
+ # @option query [String] 'sort' The number of resources to return. A count of -1 requests all the items.
354
+ def self.get_available_storage_systems(client, query = nil)
355
+ query_uri = build_query(query) if query
356
+ response = client.rest_get("#{BASE_URI}/available-storage-systems#{query_uri}")
357
+ client.response_handler(response)
358
+ end
359
+
360
+ # Get the available targets based on the query parameters
361
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
362
+ # @param [Hash<String,Object>] query Query parameters
363
+ # @option query [OneviewSDK::EnclosureGroup] 'enclosure_group' Enclosure Group associated with the resource
364
+ # @option query [OneviewSDK::ServerProfile] 'server_profile' The server profile associated with the resource
365
+ # @option query [OneviewSDK::ServerHardwareType] 'server_hardware_type' The server hardware type associated with the resource
366
+ def self.get_available_targets(client, query = nil)
367
+ query_uri = build_query(query) if query
368
+ response = client.rest_get("#{BASE_URI}/available-targets#{query_uri}")
369
+ client.response_handler(response)
370
+ end
371
+
372
+ # Gets all the available ethernet and fc networks
373
+ # @param [OneviewSDK::Client] client The client object for the OneView appliance
374
+ # @param [Hash<String,Object>] query Query parameters
375
+ # @option query [OneviewSDK::EnclosureGroup] 'enclosure_group' Enclosure Group associated with the resource
376
+ # @option query [OneviewSDK::ServerHardware] 'server_hardware' The server hardware associated with the resource
377
+ # @option query [OneviewSDK::ServerHardwareType] 'server_hardware_type' The server hardware type associated with the resource
378
+ def self.get_profile_ports(client, query = nil)
379
+ query_uri = build_query(query) if query
380
+ response = client.rest_get("#{BASE_URI}/profile-ports#{query_uri}")
381
+ client.response_handler(response)
382
+ end
383
+ end
384
+ end
385
+ end