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
@@ -14,15 +14,29 @@ module SoftLayer
|
|
14
14
|
#
|
15
15
|
class SoftwarePassword < ModelBase
|
16
16
|
include ::SoftLayer::DynamicAttribute
|
17
|
+
|
18
|
+
##
|
19
|
+
# :attr_reader: created_at
|
20
|
+
# The date this username/password pair was created.
|
21
|
+
sl_attr :created_at, 'createDate'
|
17
22
|
|
18
23
|
##
|
19
|
-
# :attr_reader:
|
24
|
+
# :attr_reader: created
|
20
25
|
# The date this username/password pair was created.
|
26
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of created_at
|
27
|
+
# and will be removed in the next major release.
|
21
28
|
sl_attr :created, 'createDate'
|
22
29
|
|
23
30
|
##
|
24
|
-
# :attr_reader:
|
31
|
+
# :attr_reader: modified_at
|
25
32
|
# The date of the last modification to this username/password pair.
|
33
|
+
sl_attr :modified_at, 'modifyDate'
|
34
|
+
|
35
|
+
##
|
36
|
+
# :attr_reader: modified
|
37
|
+
# The date of the last modification to this username/password pair.
|
38
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of modified_at
|
39
|
+
# and will be removed in the next major release.
|
26
40
|
sl_attr :modified, 'modifyDate'
|
27
41
|
|
28
42
|
##
|
@@ -65,10 +79,17 @@ module SoftLayer
|
|
65
79
|
# If no client can be found the routine will raise an error.
|
66
80
|
#
|
67
81
|
# You may filter the list returned by adding options:
|
68
|
-
# * <b>+:datacenter+</b>
|
69
|
-
# * <b>+:name+</b>
|
70
|
-
# * <b>+:tags+</b>
|
71
|
-
# * <b>+:username+</b>
|
82
|
+
# * <b>+:datacenter+</b> (string/array) - Include software passwords from application delivery controllers matching this datacenter
|
83
|
+
# * <b>+:name+</b> (string/array) - Include software passwords from application delivery controllers that matches this name
|
84
|
+
# * <b>+:tags+</b> (string/array - Include software passwords from application delivery controllers that matches these tags
|
85
|
+
# * <b>+:username+</b> (string/array) - Include software passwords that match this username
|
86
|
+
#
|
87
|
+
# Additionally you may provide options related to the request itself:
|
88
|
+
# * <b>*:application_delivery_controller_object_filter*</b> (ObjectFilter) - Include software passwords from application delivery controllers
|
89
|
+
# that matches the criteria of this object filter
|
90
|
+
# * <b>*:software_password_object_filter*</b> (ObjectFilter) - Include software passwords that match the criteria of this object filter
|
91
|
+
# * <b>*:software_password_object_mask*</b> (string) - The object mask of properties you wish to receive for the items returned.
|
92
|
+
# If not provided, the result will use the default object mask
|
72
93
|
#
|
73
94
|
def self.find_passwords_for_application_delivery_controllers(options_hash = {})
|
74
95
|
softlayer_client = options_hash[:client] || Client.default_client
|
@@ -89,34 +110,27 @@ module SoftLayer
|
|
89
110
|
end
|
90
111
|
|
91
112
|
option_to_filter_path = {
|
92
|
-
:
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
113
|
+
:app_deliv_controller => {
|
114
|
+
:advanced_mode => "applicationDeliveryControllers.advancedModeFlag",
|
115
|
+
:datacenter => "applicationDeliveryControllers.datacenter.name",
|
116
|
+
:name => "applicationDeliveryControllers.name",
|
117
|
+
:tags => "applicationDeliveryControllers.tagReferences.tag.name"
|
118
|
+
},
|
119
|
+
:software_password => {
|
97
120
|
:username => "password.username"
|
98
121
|
}
|
99
122
|
}
|
100
123
|
|
101
|
-
application_delivery_controller_object_filter.modify { |filter| filter.accept(option_to_filter_path[:advanced_mode]).when_it is(true) }
|
124
|
+
application_delivery_controller_object_filter.modify { |filter| filter.accept(option_to_filter_path[:app_deliv_controller][:advanced_mode]).when_it is(true) }
|
125
|
+
|
126
|
+
option_to_filter_path[:app_deliv_controller].each do |option, filter_path|
|
127
|
+
next if option == :advanced_mode
|
102
128
|
|
103
|
-
[ :datacenter, :name ].each do |option|
|
104
129
|
if options_hash[option]
|
105
|
-
application_delivery_controller_object_filter.modify { |filter| filter.accept(
|
130
|
+
application_delivery_controller_object_filter.modify { |filter| filter.accept(filter_path).when_it is(options_hash[option]) }
|
106
131
|
end
|
107
132
|
end
|
108
133
|
|
109
|
-
if options_hash[:tags]
|
110
|
-
application_delivery_controller_object_filter.set_criteria_for_key_path(option_to_filter_path[:tags],
|
111
|
-
{
|
112
|
-
'operation' => 'in',
|
113
|
-
'options' => [{
|
114
|
-
'name' => 'data',
|
115
|
-
'value' => options_hash[:tags].collect{ |tag_value| tag_value.to_s }
|
116
|
-
}]
|
117
|
-
})
|
118
|
-
end
|
119
|
-
|
120
134
|
option_to_filter_path[:software_password].each do |option, filter_path|
|
121
135
|
software_password_object_filter.modify { |filter| filter.accept(filter_path).when_it is(options_hash[option]) } if options_hash[option]
|
122
136
|
end
|
@@ -150,15 +164,24 @@ module SoftLayer
|
|
150
164
|
# If no client can be found the routine will raise an error.
|
151
165
|
#
|
152
166
|
# You may filter the list returned by adding options:
|
153
|
-
# * <b>+:datacenter+</b> (string) - Include software passwords from vlan firewalls matching this datacenter
|
154
|
-
# * <b>+:
|
155
|
-
# * <b>+:vlan_numbers+</b> (
|
156
|
-
# * <b>+:vlan_space+</b> (symbol)
|
157
|
-
# * <b>+:vlan_tags+</b> (
|
158
|
-
# * <b>+:vlan_fw_fqdn+</b> (string) - Include software passwords from vlan firewalls that match this fqdn
|
159
|
-
# * <b>+:vlan_fw_tags+</b> (
|
160
|
-
# * <b>+:vlan_fw_type+</b> (string) - Include software passwords from vlan firewalls that match this type
|
161
|
-
# * <b>+:username+</b> (string) - Include software passwords that match this username
|
167
|
+
# * <b>+:datacenter+</b> (string/array) - Include software passwords from vlan firewalls matching this datacenter
|
168
|
+
# * <b>+:vlan_names+</b> (string/array) - Include software passwords from vlans that matches these names
|
169
|
+
# * <b>+:vlan_numbers+</b> (string/array) - Include software passwords from vlans that matches these numbers
|
170
|
+
# * <b>+:vlan_space+</b> (symbol) - Include software passwords from vlans that match this space
|
171
|
+
# * <b>+:vlan_tags+</b> (string/array) - Include software passwords from vlans that matches these tags
|
172
|
+
# * <b>+:vlan_fw_fqdn+</b> (string/array) - Include software passwords from vlan firewalls that match this fqdn
|
173
|
+
# * <b>+:vlan_fw_tags+</b> (string/array) - Include software passwords from vlan firewalls that matches these tags
|
174
|
+
# * <b>+:vlan_fw_type+</b> (string/array) - Include software passwords from vlan firewalls that match this type
|
175
|
+
# * <b>+:username+</b> (string/array) - Include software passwords that match this username
|
176
|
+
#
|
177
|
+
# Additionally you may provide options related to the request itself:
|
178
|
+
# * <b>*:software_password_object_filter*</b> (ObjectFilter) - Include software passwords that match the criteria of this object filter
|
179
|
+
# * <b>*:software_password_object_mask*</b> (string) - The object mask of properties you wish to receive for the items returned.
|
180
|
+
# If not provided, the result will use the default object mask
|
181
|
+
# * <b>*:vlan_firewall_object_filter*</b> (ObjectFilter) - Include software passwords from vlan firewalls that match the
|
182
|
+
# criteria of this object filter
|
183
|
+
# * <b>*:vlan_object_filter*</b> (ObjectFilter) - Include software passwords from vlan firewalls whose vlans match the
|
184
|
+
# criteria of this object filter
|
162
185
|
#
|
163
186
|
def self.find_passwords_for_vlan_firewalls(options_hash = {})
|
164
187
|
softlayer_client = options_hash[:client] || Client.default_client
|
@@ -195,16 +218,18 @@ module SoftLayer
|
|
195
218
|
:software_password => {
|
196
219
|
:username => "managementCredentials.username"
|
197
220
|
},
|
198
|
-
:
|
199
|
-
|
200
|
-
|
201
|
-
|
221
|
+
:vlan => {
|
222
|
+
:vlan_dedicated_fw => lambda { |vlan_space| return [ filter_label[vlan_space], '.', 'dedicatedFirewallFlag' ].join },
|
223
|
+
:vlan_names => lambda { |vlan_space| return [ filter_label[vlan_space], '.', 'name' ].join },
|
224
|
+
:vlan_numbers => lambda { |vlan_space| return [ filter_label[vlan_space], '.', 'vlanNumber' ].join },
|
225
|
+
:vlan_tags => lambda { |vlan_space| return [ filter_label[vlan_space], '.', 'tagReferences.tag.name' ].join }
|
226
|
+
},
|
202
227
|
:vlan_firewall => {
|
203
228
|
:vlan_fw_datacenter => "networkVlanFirewall.datacenter.name",
|
204
229
|
:vlan_fw_fqdn => "networkVlanFirewall.fullyQualifiedDomainName",
|
230
|
+
:vlan_fw_tags => "networkVlanFirewall.tagReferences.tag.name",
|
205
231
|
:vlan_fw_type => "networkVlanFirewall.firewallType"
|
206
|
-
}
|
207
|
-
:vlan_fw_tags => "networkVlanFirewall.tagReferences.tag.name"
|
232
|
+
}
|
208
233
|
}
|
209
234
|
|
210
235
|
if options_hash[:vlan_space] && ! filter_label.keys.include?(options_hash[:vlan_space])
|
@@ -217,19 +242,11 @@ module SoftLayer
|
|
217
242
|
|
218
243
|
vlan_space = options_hash[:vlan_space] || :all
|
219
244
|
|
220
|
-
|
221
|
-
|
245
|
+
option_to_filter_path[:vlan].keys.each do |option|
|
246
|
+
vlan_object_filter.modify { |filter| filter.accept(option_to_filter_path[:vlan][option].call(vlan_space)).when_it is(1) } if option == :vlan_dedicated_fw
|
222
247
|
|
223
|
-
|
224
|
-
|
225
|
-
vlan_object_filter.set_criteria_for_key_path(option_to_filter_path[option].call(vlan_space),
|
226
|
-
{
|
227
|
-
'operation' => 'in',
|
228
|
-
'options' => [{
|
229
|
-
'name' => 'data',
|
230
|
-
'value' => options_hash[option].collect{ |tag_value| tag_value.to_s }
|
231
|
-
}]
|
232
|
-
})
|
248
|
+
if options_hash[option] && option != :vlan_dedicated_fw
|
249
|
+
vlan_object_filter.modify { |filter| filter.accept(option_to_filter_path[:vlan][option].call(vlan_space)).when_it is(options_hash[option]) }
|
233
250
|
end
|
234
251
|
end
|
235
252
|
|
@@ -237,17 +254,6 @@ module SoftLayer
|
|
237
254
|
vlan_firewall_object_filter.modify { |filter| filter.accept(filter_path).when_it is(options_hash[option]) } if options_hash[option]
|
238
255
|
end
|
239
256
|
|
240
|
-
if options_hash[:vlan_fw_tags]
|
241
|
-
vlan_firewall_object_filter.set_criteria_for_key_path(option_to_filter_path[:vlan_fw_tags],
|
242
|
-
{
|
243
|
-
'operation' => 'in',
|
244
|
-
'options' => [{
|
245
|
-
'name' => 'data',
|
246
|
-
'value' => options_hash[:vlan_fw_tags].collect{ |tag_value| tag_value.to_s }
|
247
|
-
}]
|
248
|
-
})
|
249
|
-
end
|
250
|
-
|
251
257
|
account_service = softlayer_client[:Account]
|
252
258
|
account_service = account_service.object_filter(vlan_object_filter) unless vlan_object_filter.empty?
|
253
259
|
account_service = account_service.object_mask("mask[id]")
|
@@ -293,14 +299,14 @@ module SoftLayer
|
|
293
299
|
# If no client can be found the routine will raise an error.
|
294
300
|
#
|
295
301
|
# You may filter the list returned by adding options:
|
296
|
-
# * <b>+:datacenter+</b> (string) - Include software passwords from software on hardware matching this datacenter
|
297
|
-
# * <b>+:description+</b> (string) - Include software passwords from software that matches this description
|
298
|
-
# * <b>+:domain+</b> (string) - Include software passwords from software on hardware matching this domain
|
299
|
-
# * <b>+:hardware_type+</b> (
|
300
|
-
# * <b>+:hostname+</b> (string) - Include software passwords from software on hardware matching this hostname
|
301
|
-
# * <b>+:manufacturer+</b> (string) - Include software passwords from software that matches this manufacturer
|
302
|
-
# * <b>+:name+</b> (string) - Include software passwords from software that matches this name
|
303
|
-
# * <b>+:username+</b> (string) - Include software passwords for username matching this username
|
302
|
+
# * <b>+:datacenter+</b> (string/array) - Include software passwords from software on hardware matching this datacenter
|
303
|
+
# * <b>+:description+</b> (string/array) - Include software passwords from software that matches this description
|
304
|
+
# * <b>+:domain+</b> (string/array) - Include software passwords from software on hardware matching this domain
|
305
|
+
# * <b>+:hardware_type+</b> (symbol) - Include software passwords from software on hardware matching this hardware type
|
306
|
+
# * <b>+:hostname+</b> (string/array) - Include software passwords from software on hardware matching this hostname
|
307
|
+
# * <b>+:manufacturer+</b> (string/array) - Include software passwords from software that matches this manufacturer
|
308
|
+
# * <b>+:name+</b> (string/array) - Include software passwords from software that matches this name
|
309
|
+
# * <b>+:username+</b> (string/array) - Include software passwords for username matching this username
|
304
310
|
#
|
305
311
|
# You may use the following properties to provide hardware or software object filter instances:
|
306
312
|
# * <b>+:hardware_object_filter+</b> (ObjectFilter) - Include software passwords from software on hardware that matches the criteria of this object filter
|
@@ -341,10 +347,12 @@ module SoftLayer
|
|
341
347
|
}
|
342
348
|
|
343
349
|
option_to_filter_path = {
|
344
|
-
:
|
345
|
-
|
346
|
-
|
347
|
-
|
350
|
+
:hardware => {
|
351
|
+
:datacenter => lambda { |hardware_type| return [ filter_label[hardware_type], '.datacenter.name' ].join },
|
352
|
+
:domain => lambda { |hardware_type| return [ filter_label[hardware_type], '.domain' ].join },
|
353
|
+
:hostname => lambda { |hardware_type| return [ filter_label[hardware_type], '.hostname' ].join },
|
354
|
+
:tags => lambda { |hardware_type| return [ filter_label[hardware_type], '.tagReferences.tag.name' ].join }
|
355
|
+
},
|
348
356
|
:software => {
|
349
357
|
:description => "softwareComponents.softwareDescription.longDescription",
|
350
358
|
:manufacturer => "softwareComponents.softwareDescription.manufacturer",
|
@@ -362,23 +370,12 @@ module SoftLayer
|
|
362
370
|
end
|
363
371
|
end
|
364
372
|
|
365
|
-
[
|
373
|
+
option_to_filter_path[:hardware].keys.each do |option|
|
366
374
|
if options_hash[option]
|
367
|
-
hardware_object_filter.modify { |filter| filter.accept(option_to_filter_path[option].call(options_hash[:hardware_type] || :hardware)).when_it is(options_hash[option]) }
|
375
|
+
hardware_object_filter.modify { |filter| filter.accept(option_to_filter_path[:hardware][option].call(options_hash[:hardware_type] || :hardware)).when_it is(options_hash[option]) }
|
368
376
|
end
|
369
377
|
end
|
370
378
|
|
371
|
-
if options_hash[:tags]
|
372
|
-
hardware_object_filter.set_criteria_for_key_path(option_to_filter_path[:tags].call(options_hash[:hardware_type] || :hardware),
|
373
|
-
{
|
374
|
-
'operation' => 'in',
|
375
|
-
'options' => [{
|
376
|
-
'name' => 'data',
|
377
|
-
'value' => options_hash[:tags].collect{ |tag_value| tag_value.to_s }
|
378
|
-
}]
|
379
|
-
})
|
380
|
-
end
|
381
|
-
|
382
379
|
option_to_filter_path[:software].each do |option, filter_path|
|
383
380
|
software_object_filter.modify { |filter| filter.accept(filter_path).when_it is(options_hash[option]) } if options_hash[option]
|
384
381
|
end
|
@@ -436,13 +433,13 @@ module SoftLayer
|
|
436
433
|
# If no client can be found the routine will raise an error.
|
437
434
|
#
|
438
435
|
# You may filter the list returned by adding options:
|
439
|
-
# * <b>+:datacenter+</b> (string) - Include software passwords from software on virtual servers matching this datacenter
|
440
|
-
# * <b>+:description+</b> (string) - Include software passwords from software that matches this description
|
441
|
-
# * <b>+:domain+</b> (string) - Include software passwords from software on virtual servers matching this domain
|
442
|
-
# * <b>+:hostname+</b> (string) - Include software passwords from software on virtual servers matching this hostname
|
443
|
-
# * <b>+:manufacturer+</b> (string) - Include software passwords from software that matches this manufacturer
|
444
|
-
# * <b>+:name+</b> (string) - Include software passwords from software that matches this name
|
445
|
-
# * <b>+:username+</b> (string) - Include software passwords for username matching this username
|
436
|
+
# * <b>+:datacenter+</b> (string/array) - Include software passwords from software on virtual servers matching this datacenter
|
437
|
+
# * <b>+:description+</b> (string/array) - Include software passwords from software that matches this description
|
438
|
+
# * <b>+:domain+</b> (string/array) - Include software passwords from software on virtual servers matching this domain
|
439
|
+
# * <b>+:hostname+</b> (string/array) - Include software passwords from software on virtual servers matching this hostname
|
440
|
+
# * <b>+:manufacturer+</b> (string/array) - Include software passwords from software that matches this manufacturer
|
441
|
+
# * <b>+:name+</b> (string/array) - Include software passwords from software that matches this name
|
442
|
+
# * <b>+:username+</b> (string/array) - Include software passwords for username matching this username
|
446
443
|
#
|
447
444
|
# You may use the following properties to provide virtual server or software object filter instances:
|
448
445
|
# * <b>+:virtual_server_object_filter+</b> (ObjectFilter) - Include software passwords from software on virtual servers that matches the criteria of this object filter
|
@@ -493,19 +490,7 @@ module SoftLayer
|
|
493
490
|
}
|
494
491
|
}
|
495
492
|
|
496
|
-
if options_hash[:tags]
|
497
|
-
virtual_server_object_filter.set_criteria_for_key_path(option_to_filter_path[:virtual_server][:tags],
|
498
|
-
{
|
499
|
-
'operation' => 'in',
|
500
|
-
'options' => [{
|
501
|
-
'name' => 'data',
|
502
|
-
'value' => options_hash[:tags].collect{ |tag_value| tag_value.to_s }
|
503
|
-
}]
|
504
|
-
})
|
505
|
-
end
|
506
|
-
|
507
493
|
option_to_filter_path[:virtual_server].each do |option, filter_path|
|
508
|
-
next if option == :tags
|
509
494
|
virtual_server_object_filter.modify { |filter| filter.accept(filter_path).when_it is(options_hash[option]) } if options_hash[option]
|
510
495
|
end
|
511
496
|
|
data/lib/softlayer/Ticket.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
#++
|
6
6
|
|
7
7
|
module SoftLayer
|
8
|
-
|
8
|
+
class Ticket < SoftLayer::ModelBase
|
9
9
|
|
10
10
|
##
|
11
11
|
# :attr_reader:
|
@@ -17,9 +17,17 @@ module SoftLayer
|
|
17
17
|
# The ticket system maintains a fixed set of subjects for tickets that are used to ensure tickets make it to the right folks quickly
|
18
18
|
sl_attr :subject
|
19
19
|
|
20
|
+
##
|
21
|
+
# :attr_reader: last_edited_at
|
22
|
+
# The date the ticket was last updated.
|
23
|
+
sl_attr :last_edited_at, 'lastEditDate'
|
24
|
+
|
20
25
|
##
|
21
26
|
# :attr_reader:
|
22
27
|
# The date the ticket was last updated.
|
28
|
+
#
|
29
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of last_edited_at
|
30
|
+
# and will be removed in the next major release.
|
23
31
|
sl_attr :lastEditDate
|
24
32
|
|
25
33
|
##
|
@@ -35,12 +43,12 @@ module SoftLayer
|
|
35
43
|
self['serverAdministrationFlag'] != 0
|
36
44
|
end
|
37
45
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
46
|
+
##
|
47
|
+
# Add an update to this ticket.
|
48
|
+
#
|
49
|
+
def update(body = nil)
|
50
|
+
self.service.edit(self.softlayer_hash, body)
|
51
|
+
end
|
44
52
|
|
45
53
|
##
|
46
54
|
# Override of service from ModelBase. Returns the SoftLayer_Ticket service
|
@@ -52,7 +60,7 @@ module SoftLayer
|
|
52
60
|
##
|
53
61
|
# Override from model base. Requests new details about the ticket
|
54
62
|
# from the server.
|
55
|
-
|
63
|
+
def softlayer_properties(object_mask = nil)
|
56
64
|
my_service = self.service
|
57
65
|
|
58
66
|
if(object_mask)
|
@@ -62,12 +70,12 @@ module SoftLayer
|
|
62
70
|
end
|
63
71
|
|
64
72
|
my_service.getObject()
|
65
|
-
|
73
|
+
end
|
66
74
|
|
67
75
|
##
|
68
76
|
# Returns the default object mask,as a hash, that is used when
|
69
77
|
# retrieving ticket information from the SoftLayer server.
|
70
|
-
|
78
|
+
def self.default_object_mask
|
71
79
|
{
|
72
80
|
"mask" => [
|
73
81
|
'id', # This is an internal ticket ID, not the one usually seen in the portal
|
@@ -84,23 +92,23 @@ module SoftLayer
|
|
84
92
|
'serverAdministrationFlag', # This comes in from the server as an integer :-(
|
85
93
|
]
|
86
94
|
}.to_sl_object_mask
|
87
|
-
|
95
|
+
end
|
88
96
|
|
89
97
|
##
|
90
98
|
# Queries the SoftLayer API to retrieve a list of the valid
|
91
99
|
# ticket subjects.
|
92
|
-
|
93
|
-
|
100
|
+
def self.ticket_subjects(client = nil)
|
101
|
+
@ticket_subjects ||= nil
|
94
102
|
|
95
|
-
|
103
|
+
if !@ticket_subjects
|
96
104
|
softlayer_client = client || Client.default_client
|
97
105
|
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
98
106
|
|
99
|
-
|
100
|
-
|
107
|
+
@ticket_subjects = softlayer_client[:Ticket_Subject].getAllObjects();
|
108
|
+
end
|
101
109
|
|
102
|
-
|
103
|
-
|
110
|
+
@ticket_subjects
|
111
|
+
end
|
104
112
|
|
105
113
|
##
|
106
114
|
# Find the ticket with the given ID and return it
|
@@ -112,19 +120,20 @@ module SoftLayer
|
|
112
120
|
# If a client is not provided then the routine will search Client::default_client
|
113
121
|
# If Client::default_client is also nil the routine will raise an error.
|
114
122
|
#
|
115
|
-
|
123
|
+
# Additionally you may provide options related to the request itself:
|
124
|
+
# * <b>*:object_mask*</b> (string) - The object mask of properties you wish to receive for the items returned.
|
125
|
+
# If not provided, the result will use the default object mask
|
126
|
+
def self.ticket_with_id(ticket_id, options = {})
|
116
127
|
softlayer_client = options[:client] || Client.default_client
|
117
128
|
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
118
129
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
object_mask = default_object_mask.to_sl_object_mask
|
123
|
-
end
|
130
|
+
ticket_service = softlayer_client[:Ticket].object_with_id(ticket_id)
|
131
|
+
ticket_service = ticket_service.object_mask(default_object_mask.to_sl_object_mask)
|
132
|
+
ticket_service = ticket_service.object_mask(options[:object_mask]) if options[:object_mask]
|
124
133
|
|
125
|
-
ticket_data
|
134
|
+
ticket_data = ticket_service.getObject()
|
126
135
|
|
127
|
-
return new(softlayer_client, ticket_data)
|
136
|
+
return Ticket.new(softlayer_client, ticket_data)
|
128
137
|
end
|
129
138
|
|
130
139
|
##
|
@@ -167,5 +176,5 @@ module SoftLayer
|
|
167
176
|
ticket_data = softlayer_client[:Ticket].createStandardTicket(new_ticket, body)
|
168
177
|
return new(softlayer_client, ticket_data)
|
169
178
|
end
|
170
|
-
|
171
|
-
end
|
179
|
+
end
|
180
|
+
end
|
@@ -16,17 +16,24 @@ module SoftLayer
|
|
16
16
|
include ::SoftLayer::DynamicAttribute
|
17
17
|
|
18
18
|
##
|
19
|
-
# :attr_reader:
|
19
|
+
# :attr_reader: alternate_phone
|
20
20
|
# A portal user's secondary phone number.
|
21
21
|
sl_attr :alternate_phone, 'alternatePhone'
|
22
22
|
|
23
23
|
##
|
24
|
-
# :attr_reader:
|
24
|
+
# :attr_reader: created_at
|
25
25
|
# The date a portal user's record was created.
|
26
|
+
sl_attr :created_at, 'createDate'
|
27
|
+
|
28
|
+
##
|
29
|
+
# :attr_reader: created
|
30
|
+
# The date a portal user's record was created.
|
31
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of created_at
|
32
|
+
# and will be removed in the next major release.
|
26
33
|
sl_attr :created, 'createDate'
|
27
34
|
|
28
35
|
##
|
29
|
-
# :attr_reader:
|
36
|
+
# :attr_reader: display_name
|
30
37
|
# The portal user's display name.
|
31
38
|
sl_attr :display_name, 'displayName'
|
32
39
|
|
@@ -36,32 +43,39 @@ module SoftLayer
|
|
36
43
|
sl_attr :email
|
37
44
|
|
38
45
|
##
|
39
|
-
# :attr_reader:
|
46
|
+
# :attr_reader: first_name
|
40
47
|
# A portal user's first name.
|
41
48
|
sl_attr :first_name, 'firstName'
|
42
49
|
|
43
50
|
##
|
44
|
-
# :attr_reader:
|
51
|
+
# :attr_reader: last_name
|
45
52
|
# A portal user's last name.
|
46
53
|
sl_attr :last_name, 'lastName'
|
47
54
|
|
48
55
|
##
|
49
|
-
# :attr_reader:
|
56
|
+
# :attr_reader: modified_at
|
57
|
+
# The date a portal user's record was last modified.
|
58
|
+
sl_attr :modified_at, 'modifyDate'
|
59
|
+
|
60
|
+
##
|
61
|
+
# :attr_reader: modified
|
50
62
|
# The date a portal user's record was last modified.
|
63
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of modified_at
|
64
|
+
# and will be removed in the next major release.
|
51
65
|
sl_attr :modified, 'modifyDate'
|
52
66
|
|
53
67
|
##
|
54
|
-
# :attr_reader:
|
68
|
+
# :attr_reader: office_phone
|
55
69
|
# A portal user's office phone number.
|
56
70
|
sl_attr :office_phone, 'officePhone'
|
57
71
|
|
58
72
|
##
|
59
|
-
# :attr_reader:
|
73
|
+
# :attr_reader: password_expires
|
60
74
|
# The expiration date for the user's password.
|
61
75
|
sl_attr :password_expires, 'passwordExpireDate'
|
62
76
|
|
63
77
|
##
|
64
|
-
# :attr_reader:
|
78
|
+
# :attr_reader: status_changed
|
65
79
|
# The date a portal users record's last status change.
|
66
80
|
sl_attr :status_changed, 'statusDate'
|
67
81
|
|
@@ -71,8 +85,10 @@ module SoftLayer
|
|
71
85
|
sl_attr :username
|
72
86
|
|
73
87
|
##
|
74
|
-
#
|
88
|
+
# Retrieve a portal user's additional email addresses.
|
75
89
|
# These email addresses are contacted when updates are made to support tickets.
|
90
|
+
# :call-seq:
|
91
|
+
# additional_emails(force_update=false)
|
76
92
|
sl_dynamic_attr :additional_emails do |resource|
|
77
93
|
resource.should_update? do
|
78
94
|
#only retrieved once per instance
|
@@ -86,8 +102,10 @@ module SoftLayer
|
|
86
102
|
end
|
87
103
|
|
88
104
|
##
|
89
|
-
#
|
105
|
+
# Retrieve a portal user's API Authentication keys.
|
90
106
|
# There is a max limit of two API keys per user.
|
107
|
+
# :call-seq:
|
108
|
+
# api_authentication_keys(force_update=false)
|
91
109
|
sl_dynamic_attr :api_authentication_keys do |resource|
|
92
110
|
resource.should_update? do
|
93
111
|
#only retrieved once per instance
|
@@ -100,7 +118,9 @@ module SoftLayer
|
|
100
118
|
end
|
101
119
|
|
102
120
|
##
|
103
|
-
#
|
121
|
+
# Retrieve the external authentication bindings that link an external identifier to a SoftLayer user.
|
122
|
+
# :call-seq:
|
123
|
+
# external_bindings(force_update=false)
|
104
124
|
sl_dynamic_attr :external_bindings do |resource|
|
105
125
|
resource.should_update? do
|
106
126
|
#only retrieved once per instance
|
@@ -109,7 +129,30 @@ module SoftLayer
|
|
109
129
|
|
110
130
|
resource.to_update do
|
111
131
|
external_bindings = self.service.object_mask(UserCustomerExternalBinding.default_object_mask).getExternalBindings
|
112
|
-
external_bindings.collect { |external_binding| UserCustomerExternalBinding.new(
|
132
|
+
external_bindings.collect { |external_binding| UserCustomerExternalBinding.new(softlayer_client, external_binding) }
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
##
|
137
|
+
# Retrieve the user customer associated with the specified username
|
138
|
+
#
|
139
|
+
def self.user_customer_with_username(username, client = nil)
|
140
|
+
softlayer_client = client || Client.default_client
|
141
|
+
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
142
|
+
raise "#{__method__} requires a user customer username but none was given" if !username || username.empty?
|
143
|
+
|
144
|
+
user_customer_object_filter = ObjectFilter.new()
|
145
|
+
|
146
|
+
user_customer_object_filter.modify { |filter| filter.accept('users.username').when_it is(username) }
|
147
|
+
|
148
|
+
account_service = Account.account_for_client(softlayer_client).service
|
149
|
+
account_service = account_service.object_filter(user_customer_object_filter)
|
150
|
+
account_service = account_service.object_mask(UserCustomer.default_object_mask)
|
151
|
+
|
152
|
+
user_customer_data = account_service.getUsers
|
153
|
+
|
154
|
+
if user_customer_data.length == 1
|
155
|
+
UserCustomer.new(softlayer_client, user_customer_data.first)
|
113
156
|
end
|
114
157
|
end
|
115
158
|
|