softlayer_api 3.0.2 → 3.1.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.textile +3 -0
- data/lib/softlayer/Account.rb +85 -8
- data/lib/softlayer/AccountPassword.rb +49 -49
- data/lib/softlayer/BareMetalServer.rb +33 -43
- data/lib/softlayer/BareMetalServerOrder.rb +17 -8
- data/lib/softlayer/BareMetalServerOrder_Package.rb +25 -7
- data/lib/softlayer/Client.rb +7 -7
- data/lib/softlayer/Config.rb +105 -49
- data/lib/softlayer/Datacenter.rb +10 -2
- data/lib/softlayer/DynamicAttribute.rb +1 -1
- data/lib/softlayer/ImageTemplate.rb +44 -61
- data/lib/softlayer/ModelBase.rb +2 -2
- data/lib/softlayer/NetworkComponent.rb +25 -3
- data/lib/softlayer/NetworkMessageDelivery.rb +25 -5
- data/lib/softlayer/NetworkMonitor.rb +333 -0
- data/lib/softlayer/NetworkService.rb +6 -4
- data/lib/softlayer/NetworkStorage.rb +42 -29
- data/lib/softlayer/NetworkStorageAllowedHost.rb +9 -3
- data/lib/softlayer/NetworkStorageCredential.rb +44 -29
- data/lib/softlayer/NetworkStorageGroup.rb +42 -10
- data/lib/softlayer/ObjectFilter.rb +54 -4
- data/lib/softlayer/ObjectMaskParser.rb +1 -1
- data/lib/softlayer/ProductItemCategory.rb +34 -5
- data/lib/softlayer/ProductPackage.rb +11 -7
- data/lib/softlayer/Server.rb +77 -5
- data/lib/softlayer/ServerFirewall.rb +12 -11
- data/lib/softlayer/Service.rb +1 -1
- data/lib/softlayer/Software.rb +35 -50
- data/lib/softlayer/SoftwarePassword.rb +92 -107
- data/lib/softlayer/Ticket.rb +37 -28
- data/lib/softlayer/UserCustomer.rb +56 -13
- data/lib/softlayer/UserCustomerExternalBinding.rb +18 -5
- data/lib/softlayer/VLANFirewall.rb +40 -9
- data/lib/softlayer/VLANFirewallOrder.rb +1 -1
- data/lib/softlayer/VirtualDiskImage.rb +38 -10
- data/lib/softlayer/VirtualServer.rb +75 -48
- data/lib/softlayer/VirtualServerOrder.rb +15 -8
- data/lib/softlayer/VirtualServerOrder_Package.rb +25 -7
- data/lib/softlayer/VirtualServerUpgradeOrder.rb +1 -1
- data/lib/softlayer/base.rb +1 -1
- data/lib/softlayer/object_mask_helpers.rb +1 -1
- data/lib/softlayer_api.rb +2 -0
- metadata +4 -3
data/lib/softlayer/ModelBase.rb
CHANGED
@@ -69,7 +69,7 @@ module SoftLayer
|
|
69
69
|
##
|
70
70
|
# Returns the value of of the given property as stored in the
|
71
71
|
# softlayer_hash. This gives you access to the low-level, raw
|
72
|
-
# properties that
|
72
|
+
# properties that underlie this model object. The need for this
|
73
73
|
# is not uncommon, but using this method should still be done
|
74
74
|
# with deliberation.
|
75
75
|
def [](softlayer_property)
|
@@ -107,7 +107,7 @@ module SoftLayer
|
|
107
107
|
|
108
108
|
##
|
109
109
|
# Subclasses should implement this method as part of enabling the
|
110
|
-
# refresh_details
|
110
|
+
# refresh_details functionality The implementation should make a request
|
111
111
|
# to the SoftLayer API and retrieve an up-to-date SoftLayer hash
|
112
112
|
# representation of this object. That hash should be the return value
|
113
113
|
# of this routine.
|
@@ -5,10 +5,32 @@
|
|
5
5
|
#++
|
6
6
|
|
7
7
|
module SoftLayer
|
8
|
-
|
8
|
+
class NetworkComponent < SoftLayer::ModelBase
|
9
|
+
##
|
10
|
+
# :attr_reader: max_speed
|
11
|
+
# A network component's maximum allowed speed,
|
12
|
+
sl_attr :max_speed, 'maxSpeed'
|
13
|
+
|
14
|
+
##
|
15
|
+
# :attr_reader:
|
16
|
+
# A network component's maximum allowed speed,
|
17
|
+
#
|
18
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of max_speed
|
19
|
+
# and will be removed in the next major release.
|
20
|
+
sl_attr :maxSpeed
|
21
|
+
|
22
|
+
##
|
23
|
+
# :attr_reader:
|
24
|
+
# A network component's short name.
|
9
25
|
sl_attr :name
|
26
|
+
|
27
|
+
# :attr_reader:
|
28
|
+
# A network component's port number.
|
10
29
|
sl_attr :port
|
30
|
+
|
31
|
+
##
|
32
|
+
# :attr_reader:
|
33
|
+
# A network component's speed, measured in Mbit per second.
|
11
34
|
sl_attr :speed
|
12
|
-
sl_attr :maxSpeed
|
13
35
|
end
|
14
|
-
end
|
36
|
+
end
|
@@ -17,13 +17,27 @@ module SoftLayer
|
|
17
17
|
include ::SoftLayer::DynamicAttribute
|
18
18
|
|
19
19
|
##
|
20
|
-
# :attr_reader:
|
20
|
+
# :attr_reader: created_at
|
21
|
+
# The date this username/password pair was created.
|
22
|
+
sl_attr :created_at, 'createDate'
|
23
|
+
|
24
|
+
##
|
25
|
+
# :attr_reader: created
|
21
26
|
# The date this username/password pair was created.
|
27
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of created_at
|
28
|
+
# and will be removed in the next major release.
|
22
29
|
sl_attr :created, 'createDate'
|
23
30
|
|
24
31
|
##
|
25
|
-
# :attr_reader:
|
32
|
+
# :attr_reader: modified_at
|
33
|
+
# The date of the last modification to this username/password pair.
|
34
|
+
sl_attr :modified_at, 'modifyDate'
|
35
|
+
|
36
|
+
##
|
37
|
+
# :attr_reader: modified
|
26
38
|
# The date of the last modification to this username/password pair.
|
39
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of modified_at
|
40
|
+
# and will be removed in the next major release.
|
27
41
|
sl_attr :modified, 'modifyDate'
|
28
42
|
|
29
43
|
##
|
@@ -37,7 +51,9 @@ module SoftLayer
|
|
37
51
|
sl_attr :username
|
38
52
|
|
39
53
|
##
|
40
|
-
#
|
54
|
+
# Retrieve the message delivery type description of a network message delivery account.
|
55
|
+
# :call-seq:
|
56
|
+
# description(force_update=false)
|
41
57
|
sl_dynamic_attr :description do |resource|
|
42
58
|
resource.should_update? do
|
43
59
|
#only retrieved once per instance
|
@@ -51,7 +67,9 @@ module SoftLayer
|
|
51
67
|
end
|
52
68
|
|
53
69
|
##
|
54
|
-
#
|
70
|
+
# Retrieve the message delivery type name of a network message delivery account.
|
71
|
+
# :call-seq:
|
72
|
+
# name(force_update=false)
|
55
73
|
sl_dynamic_attr :name do |resource|
|
56
74
|
resource.should_update? do
|
57
75
|
#only retrieved once per instance
|
@@ -65,7 +83,9 @@ module SoftLayer
|
|
65
83
|
end
|
66
84
|
|
67
85
|
##
|
68
|
-
#
|
86
|
+
# Retrieve the vendor name for a network message delivery account.
|
87
|
+
# :call-seq:
|
88
|
+
# vendor(force_update=false)
|
69
89
|
sl_dynamic_attr :vendor do |resource|
|
70
90
|
resource.should_update? do
|
71
91
|
#only retrieved once per instance
|
@@ -0,0 +1,333 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2014 SoftLayer Technologies, Inc. All rights reserved.
|
3
|
+
#
|
4
|
+
# For licensing information see the LICENSE.md file in the project root.
|
5
|
+
#++
|
6
|
+
|
7
|
+
module SoftLayer
|
8
|
+
##
|
9
|
+
# This struct represents the network monitor levels of a server.
|
10
|
+
# It is roughly equivalent to SoftLayer data type
|
11
|
+
# SoftLayer_Network_Monitor_Version1_Query_Host_Stratum
|
12
|
+
class NetworkMonitorLevels < Struct.new(:monitor_level, :response_level)
|
13
|
+
def initialize(monitor_levels_data)
|
14
|
+
self.monitor_level = monitor_levels_data['monitorLevel']
|
15
|
+
self.response_level = monitor_levels_data['responseLevel']
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
##
|
20
|
+
# This struct represents a network monitor query result that shows the last
|
21
|
+
# state of the network monitor
|
22
|
+
class NetworkMonitorQueryResult < Struct.new(:finished_at, :responded_in, :response_status)
|
23
|
+
##
|
24
|
+
# This constant is a mapping of network monitor query result statuses to descriptions
|
25
|
+
STATUS_DESCRIPTIONS = {
|
26
|
+
0 => "Down/Critical: Server is down and/or has passed the critical response threshold (extremely long ping response, abnormal behavior, etc.).",
|
27
|
+
1 => "Warning - Server may be recovering from a previous down state, or may have taken too long to respond.",
|
28
|
+
2 => "Up",
|
29
|
+
3 => "Not used",
|
30
|
+
4 => "Unknown - An unknown error has occurred. If the problem persists, contact support.",
|
31
|
+
5 => "Unknown - An unknown error has occurred. If the problem persists, contact support."
|
32
|
+
}
|
33
|
+
|
34
|
+
def initialize(query_result_data)
|
35
|
+
self.finished_at = query_result_data['finishTime']
|
36
|
+
self.responded_in = query_result_data['responseTime']
|
37
|
+
self.response_status = query_result_data['responseStatus']
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# This struct represents a network monitor query type used for creating
|
43
|
+
# new network monitors.
|
44
|
+
class NetworkMonitorQueryType < Struct.new(:argument_description, :description, :id, :monitor_level, :name)
|
45
|
+
def initialize(query_type_data)
|
46
|
+
self.argument_description = query_type_data['arugmentDescription']
|
47
|
+
self.description = query_type_data['description']
|
48
|
+
self.id = query_type_data['monitorLevel']
|
49
|
+
self.name = query_type_data['name']
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# This struct represents a network monitor response type used for configuring
|
55
|
+
# network monitor responses when created.
|
56
|
+
class NetworkMonitorResponseType < Struct.new(:action_description, :id, :level)
|
57
|
+
def initialize(response_type_data)
|
58
|
+
self.action_description = response_type_data['actionDescription']
|
59
|
+
self.id = response_type_data['id']
|
60
|
+
self.level = response_type_data['level']
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
##
|
65
|
+
# Each SoftLayer NetworkMonitor instance provides information about network
|
66
|
+
# monitors configured to check host ping or host ports of servers.
|
67
|
+
#
|
68
|
+
# This class roughly corresponds to the entity SofyLayer_Network_Monitor_Version1_Query_Host
|
69
|
+
# in the API.
|
70
|
+
#
|
71
|
+
class NetworkMonitor < ModelBase
|
72
|
+
include ::SoftLayer::DynamicAttribute
|
73
|
+
|
74
|
+
@@available_query_types = nil
|
75
|
+
@@available_response_types = nil
|
76
|
+
|
77
|
+
##
|
78
|
+
# :attr_reader: argument_value
|
79
|
+
# The argument to be used for this monitor, if necessary. The lowest monitoring levels (like ping)
|
80
|
+
# ignore this setting, but higher levels like HTTP custom use it.
|
81
|
+
sl_attr :argument_value, 'arg1Value'
|
82
|
+
|
83
|
+
##
|
84
|
+
# :attr_reader: ip_address
|
85
|
+
# The IP address to be monitored. Must be attached to the server on this object.
|
86
|
+
sl_attr :ip_address, 'ipAddress'
|
87
|
+
|
88
|
+
##
|
89
|
+
# :attr_reader:
|
90
|
+
# The status of this monitoring instance. Anything other than "ON" means that the monitor has been disabled.
|
91
|
+
sl_attr :status
|
92
|
+
|
93
|
+
##
|
94
|
+
# :attr_reader: wait_cycles
|
95
|
+
# The number of 5-minute cycles to wait before the "responseAction" is taken. If set to 0, the response
|
96
|
+
# action will be taken immediately.
|
97
|
+
sl_attr :wait_cycles, 'waitCycles'
|
98
|
+
|
99
|
+
##
|
100
|
+
# The most recent result for this particular monitoring instance.
|
101
|
+
# :call-seq:
|
102
|
+
# last_query_result(force_update=false)
|
103
|
+
sl_dynamic_attr :last_query_result do |resource|
|
104
|
+
resource.should_update? do
|
105
|
+
#only retrieved once per instance
|
106
|
+
@last_query_result == nil
|
107
|
+
end
|
108
|
+
|
109
|
+
resource.to_update do
|
110
|
+
NetworkMonitorQueryResult.new(self.service.object_mask("mask[finishTime,responseStatus,responseTime]").getLastResult)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
##
|
115
|
+
# The type of monitoring query that is executed when this server is monitored.
|
116
|
+
# :call-seq:
|
117
|
+
# query_type(force_update=false)
|
118
|
+
sl_dynamic_attr :query_type do |resource|
|
119
|
+
resource.should_update? do
|
120
|
+
#only retrieved once per instance
|
121
|
+
@query_type == nil
|
122
|
+
end
|
123
|
+
|
124
|
+
resource.to_update do
|
125
|
+
NetworkMonitorQueryType.new(self.service.getQueryType)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
##
|
130
|
+
# The response action taken when a monitor fails.
|
131
|
+
# :call-seq:
|
132
|
+
# response_type(force_update=false)
|
133
|
+
sl_dynamic_attr :response_type do |resource|
|
134
|
+
resource.should_update? do
|
135
|
+
#only retrieved once per instance
|
136
|
+
@response_type == nil
|
137
|
+
end
|
138
|
+
|
139
|
+
resource.to_update do
|
140
|
+
NetworkMonitorResponseType.new(self.service.getResponseAction)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
##
|
145
|
+
# Add a network monitor for a host ping or port check to a server.
|
146
|
+
#
|
147
|
+
def self.add_network_monitor(server, ip_address, query_type, response_type, wait_cycles = 0, argument_value = nil, options = {})
|
148
|
+
softlayer_client = options[:client] || Client.default_client
|
149
|
+
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
150
|
+
raise "#{__method__} requires a server to monitor but none was given" if !server || !server.kind_of?(Server)
|
151
|
+
raise "#{__method__} requires an IP address to monitor but none was given" if !ip_address || ip_address.empty?
|
152
|
+
raise "#{__method__} requires a query type for the monitor but none was given" if !query_type || !query_type.kind_of?(NetworkMonitorQueryType)
|
153
|
+
raise "#{__method__} requires a response type for the monitor but none was given" if !response_type || !response_type.kind_of?(NetworkMonitorResponseType)
|
154
|
+
|
155
|
+
if available_query_types(:client => softlayer_client, :query_level => server.network_monitor_levels.monitor_level).select{ |query| query.id == query_type.id }.empty?
|
156
|
+
raise "#{__method__} requested monitor query level is not supported for this server"
|
157
|
+
end
|
158
|
+
|
159
|
+
if available_response_types(:client => softlayer_client, :response_level => server.network_monitor_levels.response_level).select{ |response| response.id == response_type.id }.empty?
|
160
|
+
raise "#{__method__} requested monitor response level is not supported for this server"
|
161
|
+
end
|
162
|
+
|
163
|
+
network_monitor_object_filter = ObjectFilter.new()
|
164
|
+
server_id_label = server.kind_of?(VirtualServer) ? 'guestId' : 'hardwareId'
|
165
|
+
|
166
|
+
network_monitor_object_filter.modify { |filter| filter.accept('networkMonitors.arg1Value').when_it is(argument_value.to_s) }
|
167
|
+
network_monitor_object_filter.modify { |filter| filter.accept('networkMonitors.' + server_id_label).when_it is(server.id) }
|
168
|
+
network_monitor_object_filter.modify { |filter| filter.accept('networkMonitors.ipAddress').when_it is(ip_address.to_s) }
|
169
|
+
network_monitor_object_filter.modify { |filter| filter.accept('networkMonitors.queryTypeId').when_it is(query_type.id) }
|
170
|
+
network_monitor_object_filter.modify { |filter| filter.accept('networkMonitors.responseActionId').when_it is(response_type.id) }
|
171
|
+
network_monitor_object_filter.modify { |filter| filter.accept('networkMonitors.waitCycles').when_it is(wait_cycles) }
|
172
|
+
|
173
|
+
if server.service.object_filter(network_monitor_object_filter).getNetworkMonitors.empty?
|
174
|
+
network_monitor = softlayer_client[:Network_Monitor_Version1_Query_Host].createObject({
|
175
|
+
'arg1Value' => argument_value.to_s,
|
176
|
+
server_id_label => server.id,
|
177
|
+
'ipAddress' => ip_address.to_s,
|
178
|
+
'queryTypeId' => query_type.id,
|
179
|
+
'responseActionId' => response_type.id,
|
180
|
+
'waitCycles' => wait_cycles
|
181
|
+
})
|
182
|
+
|
183
|
+
NetworkMonitor.new(softlayer_client, network_monitor)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
##
|
188
|
+
# Add user customers to the list of users notified on monitor failure for the specified server. Accepts a list of UserCustomer
|
189
|
+
# instances or user customer usernames.
|
190
|
+
#
|
191
|
+
def self.add_network_monitor_notification_users(server, user_customers, options = {})
|
192
|
+
softlayer_client = options[:client] || Client.default_client
|
193
|
+
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
194
|
+
raise "#{__method__} requires a server to monitor but none was given" if !server || !server.kind_of?(Server)
|
195
|
+
raise "#{__method__} requires a list user customers but none was given" if !user_customers || user_customers.empty?
|
196
|
+
|
197
|
+
user_customers_data = user_customers.map do |user_customer|
|
198
|
+
raise "#{__method__} requires a user customer but none was given" if !user_customer || (!user_customer.class.method_defined?(:username) && user_customer.empty?)
|
199
|
+
|
200
|
+
user_customer_data = user_customer.class.method_defined?(:username) ? user_customer : UserCustomer.user_customer_with_username(user_customer, softlayer_client)
|
201
|
+
|
202
|
+
raise "#{__method__} user customer with username #{user_customer.inspect} not found" unless user_customer_data
|
203
|
+
|
204
|
+
user_customer_data
|
205
|
+
end
|
206
|
+
|
207
|
+
current_user_customers = server.notified_network_monitor_users.map { |notified_network_monitor_user| notified_network_monitor_user['id'] }
|
208
|
+
|
209
|
+
user_customers_data.delete_if { |user_customer| current_user_customers.include?(user_customer['id']) }
|
210
|
+
|
211
|
+
unless user_customers_data.empty?
|
212
|
+
notification_monitor_user_service = server.kind_of?(VirtualServer) ? :User_Customer_Notification_Virtual_Guest : :User_Customer_Notification_Hardware
|
213
|
+
server_id_label = server.kind_of?(VirtualServer) ? 'guestId' : 'hardwareId'
|
214
|
+
|
215
|
+
user_customer_notifications = user_customers_data.map { |user_customer| { server_id_label => server.id, 'userId' => user_customer['id'] } }
|
216
|
+
|
217
|
+
softlayer_client[notification_monitor_user_service].createObjects(user_customer_notifications)
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
##
|
222
|
+
# Return the list of available query types (optionally limited to a max query level)
|
223
|
+
#
|
224
|
+
def self.available_query_types(options = {})
|
225
|
+
softlayer_client = options[:client] || Client.default_client
|
226
|
+
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
227
|
+
|
228
|
+
unless @@available_query_types
|
229
|
+
available_query_types_data = softlayer_client[:Network_Monitor_Version1_Query_Host_Stratum].getAllQueryTypes
|
230
|
+
@@available_query_types = available_query_types_data.map{ |query_type| NetworkMonitorQueryType.new(query_type) }
|
231
|
+
end
|
232
|
+
|
233
|
+
if options[:query_level]
|
234
|
+
@@available_query_types.select { |query_type| query_type.monitor_level.to_i <= options[:query_level].to_i }
|
235
|
+
else
|
236
|
+
@@available_query_types
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
##
|
241
|
+
# Return the list of available response types (optionally limited to a max response level)
|
242
|
+
#
|
243
|
+
def self.available_response_types(options = {})
|
244
|
+
softlayer_client = options[:client] || Client.default_client
|
245
|
+
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
246
|
+
|
247
|
+
unless @@available_response_types
|
248
|
+
available_response_types_data = softlayer_client[:Network_Monitor_Version1_Query_Host_Stratum].getAllResponseTypes
|
249
|
+
@@available_response_types = available_response_types_data.map { |response_type| NetworkMonitorResponseType.new(response_type) }
|
250
|
+
end
|
251
|
+
|
252
|
+
if options[:response_level]
|
253
|
+
@@available_response_types.select { |response_type| response_type.level.to_i <= options[:response_level].to_i }
|
254
|
+
else
|
255
|
+
@@available_response_types
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
##
|
260
|
+
# Rmove user customers from the list of users notified on monitor failure for the specified server. Accepts a list of UserCustomer
|
261
|
+
# instances or user customer usernames.
|
262
|
+
#
|
263
|
+
def self.remove_network_monitor_notification_users(server, user_customers, options = {})
|
264
|
+
softlayer_client = options[:client] || Client.default_client
|
265
|
+
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
266
|
+
raise "#{__method__} requires a server to monitor but none was given" if !server || !server.kind_of?(Server)
|
267
|
+
raise "#{__method__} requires a list user customers but none was given" if !user_customers || user_customers.empty?
|
268
|
+
|
269
|
+
user_customers_data = user_customers.map do |user_customer|
|
270
|
+
raise "#{__method__} requires a user customer but none was given" if !user_customer || (!user_customer.kind_of?(UserCustomer) && user_customer.empty?)
|
271
|
+
|
272
|
+
user_customer_data = user_customer.kind_of?(UserCustomer) ? user_customer : UserCustomer.user_customer_with_username(user_customer, softlayer_client)
|
273
|
+
|
274
|
+
raise "#{__method__} user customer with username #{user_customer.inspect} not found" unless user_customer_data
|
275
|
+
|
276
|
+
user_customer_data
|
277
|
+
end
|
278
|
+
|
279
|
+
current_user_customers = user_customers_data.map { |user_customer| user_customer['id'] }
|
280
|
+
monitor_user_notification_object_filter = ObjectFilter.new()
|
281
|
+
|
282
|
+
monitor_user_notification_object_filter.modify { |filter| filter.accept('monitoringUserNotification.userId').when_it is(current_user_customers) }
|
283
|
+
|
284
|
+
monitor_user_notification_data = server.service.object_filter(monitor_user_notification_object_filter).object_mask("mask[id]").getMonitoringUserNotification
|
285
|
+
|
286
|
+
unless monitor_user_notification_data.empty?
|
287
|
+
notification_monitor_user_service = server.kind_of?(VirtualServer) ? :User_Customer_Notification_Virtual_Guest : :User_Customer_Notification_Hardware
|
288
|
+
|
289
|
+
softlayer_client[notification_monitor_user_service].deleteObjects(monitor_user_notification_data)
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
##
|
294
|
+
# Removes the list of network monitors from their associated servers. Accpets a list of NetworkMonitor instances or id's.
|
295
|
+
#
|
296
|
+
def self.remove_network_monitors(network_monitors, options = {})
|
297
|
+
softlayer_client = options[:client] || Client.default_client
|
298
|
+
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
299
|
+
|
300
|
+
network_monitors_data = network_monitors.map do |network_monitor|
|
301
|
+
raise "#{__method__} requires a network monitor instance or id but non provided" if !network_monitor || (!network_monitor.kind_of?(NetworkMonitor) && network_monitor.empty?)
|
302
|
+
|
303
|
+
network_monitor.kind_of?(NetworkMonitor) ? { 'id' => network_monitor['id'] } : { 'id' => network_monitor }
|
304
|
+
end
|
305
|
+
|
306
|
+
softlayer_client[:Network_Monitor_Version1_Query_Host].deleteObjects(network_monitors_data)
|
307
|
+
end
|
308
|
+
|
309
|
+
##
|
310
|
+
# Returns the service for interacting with this network monitor component through the network API
|
311
|
+
#
|
312
|
+
def service
|
313
|
+
softlayer_client[:Network_Monitor_Version1_Query_Host].object_with_id(self.id)
|
314
|
+
end
|
315
|
+
|
316
|
+
protected
|
317
|
+
|
318
|
+
def self.default_object_mask
|
319
|
+
{
|
320
|
+
"mask(SoftLayer_Network_Monitor_Version1_Query_Host)" => [
|
321
|
+
'arg1Value',
|
322
|
+
'guestId',
|
323
|
+
'hardwareId',
|
324
|
+
'hostId',
|
325
|
+
'id',
|
326
|
+
'ipAddress',
|
327
|
+
'status',
|
328
|
+
'waitCycles'
|
329
|
+
]
|
330
|
+
}.to_sl_object_mask
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end #SoftLayer
|