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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21403d80bc5530202d1f40ceda6e67404de66717
|
4
|
+
data.tar.gz: 8879bb889d5418a4a3f2853d754565e794e3ab41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 584069e9c12b5922e1d7fae1c0004f1deb3f0435401cac9e7bbafd0bb713b7868eeea37c6dcc560a15dc8fb2dca9001d654464cd05bb263d4f181b8d52c1a535
|
7
|
+
data.tar.gz: fe1a472fa84d6e23468ef538a0653623ef37c2a501f5a179b4cf17144aa12288c52e81b3f492d0f354360cec31516536826fd024e01645e38c950e8c56461b2d
|
data/CHANGELOG.textile
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
*3.1.0*
|
2
|
+
* Many SoftLayer Attributes are now shadowed with snake_case names. The old CamelCase versions are deprecated and will be removed in the next major release
|
3
|
+
* New functionality related to network monitoring has been added
|
1
4
|
*3.0*
|
2
5
|
* Substantially rewrote the ObjectFilter class. ObjectFilters used to be hashes which made it easy to manipulate their content incorrectly. The new implementation has a strict interface that makes it harder to manipulate filters incorrectly.
|
3
6
|
* Added a model for Virtual Server Image Templates (SoftLayer::ImageTemplate) - VirtualServerOrder now requires an instance of this class rather than allowing you to provide the global_id of an image
|
data/lib/softlayer/Account.rb
CHANGED
@@ -8,19 +8,43 @@ module SoftLayer
|
|
8
8
|
class Account < SoftLayer::ModelBase
|
9
9
|
include ::SoftLayer::DynamicAttribute
|
10
10
|
|
11
|
+
##
|
12
|
+
# :attr_reader: company_name
|
13
|
+
# The company name of the primary contact
|
14
|
+
sl_attr :company_name, 'companyName'
|
15
|
+
|
11
16
|
##
|
12
17
|
# :attr_reader:
|
13
18
|
# The company name of the primary contact
|
19
|
+
#
|
20
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of company_name
|
21
|
+
# and will be removed in the next major release.
|
14
22
|
sl_attr :companyName
|
15
23
|
|
24
|
+
##
|
25
|
+
# :attr_reader: first_name
|
26
|
+
# The given name name of the primary contact
|
27
|
+
sl_attr :first_name, 'firstName'
|
28
|
+
|
16
29
|
##
|
17
30
|
# :attr_reader:
|
18
31
|
# The given name name of the primary contact
|
32
|
+
#
|
33
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of first_name
|
34
|
+
# and will be removed in the next major release.
|
19
35
|
sl_attr :firstName
|
20
36
|
|
37
|
+
##
|
38
|
+
# :attr_reader: last_name
|
39
|
+
# The surname of the primary contact
|
40
|
+
sl_attr :last_name, 'lastName'
|
41
|
+
|
21
42
|
##
|
22
43
|
# :attr_reader:
|
23
44
|
# The surname of the primary contact
|
45
|
+
#
|
46
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of last_name
|
47
|
+
# and will be removed in the next major release.
|
24
48
|
sl_attr :lastName
|
25
49
|
|
26
50
|
##
|
@@ -51,18 +75,34 @@ module SoftLayer
|
|
51
75
|
# The country stored as part of the primary contact's address
|
52
76
|
sl_attr :country
|
53
77
|
|
78
|
+
##
|
79
|
+
# :attr_reader: postal_code
|
80
|
+
# The postal code (in the US, aka. zip code) of the primary contact's address
|
81
|
+
sl_attr :postal_code, 'postalCode'
|
82
|
+
|
54
83
|
##
|
55
84
|
# :attr_reader:
|
56
85
|
# The postal code (in the US, aka. zip code) of the primary contact's address
|
86
|
+
#
|
87
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of postal_code
|
88
|
+
# and will be removed in the next major release.
|
57
89
|
sl_attr :postalCode
|
58
90
|
|
91
|
+
##
|
92
|
+
# :attr_reader: office_phone
|
93
|
+
# The office phone number listed for the primary contact
|
94
|
+
sl_attr :office_phone, 'officePhone'
|
95
|
+
|
59
96
|
##
|
60
97
|
# :attr_reader:
|
61
|
-
# The office phone
|
98
|
+
# The office phone number listed for the primary contact
|
99
|
+
#
|
100
|
+
# DEPRECATION WARNING: This attribute is deprecated in favor of office_phone
|
101
|
+
# and will be removed in the next major release.
|
62
102
|
sl_attr :officePhone
|
63
103
|
|
64
104
|
##
|
65
|
-
#
|
105
|
+
# Retrieve the Bare Metal Servers (physical hardware) associated with the
|
66
106
|
# account. Unless you force these to update, they will be refreshed every
|
67
107
|
# five minutes.
|
68
108
|
# :call-seq:
|
@@ -82,6 +122,8 @@ module SoftLayer
|
|
82
122
|
##
|
83
123
|
# Retrieve an account's master EVault user. This is only used when an account
|
84
124
|
# has an EVault service.
|
125
|
+
# :call-seq:
|
126
|
+
# evault_master_users(force_update=false)
|
85
127
|
sl_dynamic_attr :evault_master_users do |evault_users|
|
86
128
|
evault_users.should_update? do
|
87
129
|
@evault_master_users == nil
|
@@ -94,7 +136,10 @@ module SoftLayer
|
|
94
136
|
end
|
95
137
|
|
96
138
|
##
|
97
|
-
# Retrieve an account's image templates
|
139
|
+
# Retrieve an account's image templates. Unless you force
|
140
|
+
# these to update, they will be refreshed every five minutes
|
141
|
+
# :call-seq:
|
142
|
+
# image_templates(force_update=false)
|
98
143
|
sl_dynamic_attr :image_templates do |image_templates|
|
99
144
|
image_templates.should_update? do
|
100
145
|
@last_image_template_update ||= Time.at(0)
|
@@ -108,7 +153,9 @@ module SoftLayer
|
|
108
153
|
end
|
109
154
|
|
110
155
|
##
|
111
|
-
# Retrieve an account's network message delivery
|
156
|
+
# Retrieve an account's network message delivery accounts.
|
157
|
+
# :call-seq:
|
158
|
+
# network_message_delivery_accounts(force_update=false)
|
112
159
|
sl_dynamic_attr :network_message_delivery_accounts do |net_msg_deliv_accts|
|
113
160
|
net_msg_deliv_accts.should_update? do
|
114
161
|
@network_message_delivery_accounts == nil
|
@@ -122,6 +169,8 @@ module SoftLayer
|
|
122
169
|
|
123
170
|
##
|
124
171
|
# Retrieve an account's network storage groups.
|
172
|
+
# :call-seq:
|
173
|
+
# network_storage_groups(force_update=false)
|
125
174
|
sl_dynamic_attr :network_storage_groups do |net_stor_groups|
|
126
175
|
net_stor_groups.should_update? do
|
127
176
|
@network_storage_groups == nil
|
@@ -134,7 +183,10 @@ module SoftLayer
|
|
134
183
|
end
|
135
184
|
|
136
185
|
##
|
137
|
-
# Retrieve an account's open tickets
|
186
|
+
# Retrieve an account's open tickets. Unless you force these
|
187
|
+
# to update, they will be refreshed every five minutes
|
188
|
+
# :call-seq:
|
189
|
+
# open_tickets(force_update=false)
|
138
190
|
sl_dynamic_attr :open_tickets do |open_tickets|
|
139
191
|
open_tickets.should_update? do
|
140
192
|
@last_open_tickets_update ||= Time.at(0)
|
@@ -150,6 +202,8 @@ module SoftLayer
|
|
150
202
|
|
151
203
|
##
|
152
204
|
# Retrieve an account's portal users.
|
205
|
+
# :call-seq:
|
206
|
+
# users(force_update=false)
|
153
207
|
sl_dynamic_attr :users do |users|
|
154
208
|
users.should_update? do
|
155
209
|
@users == nil
|
@@ -162,7 +216,10 @@ module SoftLayer
|
|
162
216
|
end
|
163
217
|
|
164
218
|
##
|
165
|
-
# Retrieve an account's virtual disk images
|
219
|
+
# Retrieve an account's virtual disk images. Unless you force
|
220
|
+
# these to update, they will be refreshed every five minutes
|
221
|
+
# :call-seq:
|
222
|
+
# virtual_disk_images(force_update=false)
|
166
223
|
sl_dynamic_attr :virtual_disk_images do |virtual_disk_images|
|
167
224
|
virtual_disk_images.should_update? do
|
168
225
|
@last_virtual_disk_images_update ||= Time.at(0)
|
@@ -177,7 +234,7 @@ module SoftLayer
|
|
177
234
|
end
|
178
235
|
|
179
236
|
##
|
180
|
-
#
|
237
|
+
# Retrieve the virtual servers (aka. CCIs or Virtual_Guests) associated with the
|
181
238
|
# account. Unless you force these to update, they will be refreshed every
|
182
239
|
# five minutes.
|
183
240
|
# :call-seq:
|
@@ -207,6 +264,26 @@ module SoftLayer
|
|
207
264
|
# The IDs of the different segments can be helpful for ordering
|
208
265
|
# firewalls.
|
209
266
|
#
|
267
|
+
def find_vlan_with_number(vlan_number)
|
268
|
+
filter = SoftLayer::ObjectFilter.new() { |filter|
|
269
|
+
filter.accept('networkVlans.vlanNumber').when_it is vlan_number
|
270
|
+
}
|
271
|
+
|
272
|
+
vlan_data = self.service.object_mask("mask[id,vlanNumber,primaryRouter,networkSpace]").object_filter(filter).getNetworkVlans
|
273
|
+
return vlan_data
|
274
|
+
end
|
275
|
+
|
276
|
+
##
|
277
|
+
# Searches the account's list of VLANs for the ones with the given
|
278
|
+
# vlan number. This may return multiple results because a VLAN can
|
279
|
+
# span different routers and you will get a separate segment for
|
280
|
+
# each router.
|
281
|
+
#
|
282
|
+
# The IDs of the different segments can be helpful for ordering
|
283
|
+
# firewalls.
|
284
|
+
#
|
285
|
+
# DEPRECATION WARNING: This method is deprecated in favor of find_vlan_with_number
|
286
|
+
# and will be removed in the next major release.
|
210
287
|
def find_VLAN_with_number(vlan_number)
|
211
288
|
filter = SoftLayer::ObjectFilter.new() { |filter|
|
212
289
|
filter.accept('networkVlans.vlanNumber').when_it is vlan_number
|
@@ -226,7 +303,7 @@ module SoftLayer
|
|
226
303
|
|
227
304
|
account_service = softlayer_client[:Account]
|
228
305
|
network_hash = account_service.getObject()
|
229
|
-
new(softlayer_client, network_hash)
|
306
|
+
Account.new(softlayer_client, network_hash)
|
230
307
|
end
|
231
308
|
|
232
309
|
##
|
@@ -32,6 +32,8 @@ module SoftLayer
|
|
32
32
|
|
33
33
|
##
|
34
34
|
# A description of the use for the account username/password combination.
|
35
|
+
# :call-seq:
|
36
|
+
# description(force_update=false)
|
35
37
|
sl_dynamic_attr :description do |resource|
|
36
38
|
resource.should_update? do
|
37
39
|
#only retrieved once per instance
|
@@ -74,13 +76,21 @@ module SoftLayer
|
|
74
76
|
# If no client can be found the routine will raise an error.
|
75
77
|
#
|
76
78
|
# You may filter the list returned by adding options:
|
77
|
-
# * <b>+:datacenter+</b> (string) - Include network storage account passwords from servers matching this datacenter
|
78
|
-
# * <b>+:domain+</b> (string) - Include network storage account passwords from servers matching this domain
|
79
|
-
# * <b>+:hostname+</b> (string) - Include network storage account passwords from servers matching this hostname
|
80
|
-
# * <b>+:network_storage_server_type+</b> (
|
81
|
-
# * <b>+:network_storage_type+</b> (
|
82
|
-
# * <b>+:tags+</b> (
|
83
|
-
# * <b>+:username+</b> (string) - Include network storage account passwords with this username only
|
79
|
+
# * <b>+:datacenter+</b> (string/array) - Include network storage account passwords from servers matching this datacenter
|
80
|
+
# * <b>+:domain+</b> (string/array) - Include network storage account passwords from servers matching this domain
|
81
|
+
# * <b>+:hostname+</b> (string/array) - Include network storage account passwords from servers matching this hostname
|
82
|
+
# * <b>+:network_storage_server_type+</b> (symbol) - Include network storage account passwords attached to this server type
|
83
|
+
# * <b>+:network_storage_type+</b> (symbol) - Include network storage account passwords from devices of this storage type
|
84
|
+
# * <b>+:tags+</b> (string/array) - Include network storage account passwords from servers matching these tags
|
85
|
+
# * <b>+:username+</b> (string/array) - Include network storage account passwords with this username only
|
86
|
+
#
|
87
|
+
# Additionally you may provide options related to the request itself:
|
88
|
+
# * <b>*:account_password_object_filter*</b> (ObjectFilter) - Include network storage account passwords for account passwords that match the
|
89
|
+
# criteria of this object filter
|
90
|
+
# * <b>*:account_password_object_mask*</b> (string) - The object mask of properties you wish to receive for the items returned.
|
91
|
+
# If not provided, the result will use the default object mask
|
92
|
+
# * <b>*:network_storage_object_filter*</b> (ObjectFilter) - Include network storage account passwords from network storage that matches the
|
93
|
+
# criteria of this object filter
|
84
94
|
#
|
85
95
|
def self.find_network_storage_account_passwords(options_hash = {})
|
86
96
|
softlayer_client = options_hash[:client] || Client.default_client
|
@@ -119,10 +129,12 @@ module SoftLayer
|
|
119
129
|
:account_password => {
|
120
130
|
:username => "accountPassword.username"
|
121
131
|
},
|
122
|
-
:
|
123
|
-
|
124
|
-
|
125
|
-
|
132
|
+
:network_storage => {
|
133
|
+
:datacenter => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.datacenter.name' ].join },
|
134
|
+
:domain => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.domain' ].join },
|
135
|
+
:hostname => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.hostname' ].join },
|
136
|
+
:tags => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.tagReferences.tag.name' ].join }
|
137
|
+
}
|
126
138
|
}
|
127
139
|
|
128
140
|
if options_hash[:network_storage_type]
|
@@ -134,24 +146,13 @@ module SoftLayer
|
|
134
146
|
if options_hash[:network_storage_server_type]
|
135
147
|
network_storage_type = options_hash[:network_storage_type] || :network_storage
|
136
148
|
|
137
|
-
[
|
149
|
+
option_to_filter_path[:network_storage].keys.each do |option|
|
138
150
|
if options_hash[option]
|
139
151
|
network_storage_object_filter.modify do |filter|
|
140
|
-
filter.accept(option_to_filter_path[option].call(network_storage_type, options_hash[:network_storage_server_type])).when_it is(options_hash[option])
|
152
|
+
filter.accept(option_to_filter_path[:network_storage][option].call(network_storage_type, options_hash[:network_storage_server_type])).when_it is(options_hash[option])
|
141
153
|
end
|
142
154
|
end
|
143
155
|
end
|
144
|
-
|
145
|
-
if options_hash[:tags]
|
146
|
-
network_storage_object_filter.set_criteria_for_key_path(option_to_filter_path[:tags].call(network_storage_type, options_hash[:network_storage_server_type]),
|
147
|
-
{
|
148
|
-
'operation' => 'in',
|
149
|
-
'options' => [{
|
150
|
-
'name' => 'data',
|
151
|
-
'value' => options_hash[:tags].collect{ |tag_value| tag_value.to_s }
|
152
|
-
}]
|
153
|
-
})
|
154
|
-
end
|
155
156
|
end
|
156
157
|
|
157
158
|
option_to_filter_path[:account_password].each do |option, filter_path|
|
@@ -201,13 +202,21 @@ module SoftLayer
|
|
201
202
|
# If no client can be found the routine will raise an error.
|
202
203
|
#
|
203
204
|
# You may filter the list returned by adding options:
|
204
|
-
# * <b>+:datacenter+</b> (string) - Include network storage webcc passwords from servers matching this datacenter
|
205
|
-
# * <b>+:domain+</b> (string) - Include network storage webcc passwords from servers matching this domain
|
206
|
-
# * <b>+:hostname+</b> (string) - Include network storage webcc passwords from servers matching this hostname
|
207
|
-
# * <b>+:network_storage_server_type+</b> (
|
208
|
-
# * <b>+:network_storage_type+</b> (
|
209
|
-
# * <b>+:tags+</b> (
|
210
|
-
# * <b>+:username+</b> (string) - Include network storage webcc passwords with this username only
|
205
|
+
# * <b>+:datacenter+</b> (string/array) - Include network storage webcc passwords from servers matching this datacenter
|
206
|
+
# * <b>+:domain+</b> (string/array) - Include network storage webcc passwords from servers matching this domain
|
207
|
+
# * <b>+:hostname+</b> (string/array) - Include network storage webcc passwords from servers matching this hostname
|
208
|
+
# * <b>+:network_storage_server_type+</b> (symbol) - Include network storage webcc passwords attached to this server type
|
209
|
+
# * <b>+:network_storage_type+</b> (symbol) - Include network storage webcc passwords from devices of this storage type
|
210
|
+
# * <b>+:tags+</b> (string/array) - Include network storage webcc passwords from servers matching these tags
|
211
|
+
# * <b>+:username+</b> (string/array) - Include network storage webcc passwords with this username only
|
212
|
+
#
|
213
|
+
# Additionally you may provide options related to the request itself:
|
214
|
+
# * <b>*:network_storage_object_filter*</b> (ObjectFilter) - Include network storage account passwords from network storage that matches the
|
215
|
+
# criteria of this object filter
|
216
|
+
# * <b>*:webcc_password_object_filter*</b> (ObjectFilter) - Include network storage account passwords for webcc passwords that match the
|
217
|
+
# criteria of this object filter
|
218
|
+
# * <b>*:webcc_password_object_mask*</b> (string) - The object mask of properties you wish to receive for the items returned.
|
219
|
+
# If not provided, the result will use the default object mask
|
211
220
|
#
|
212
221
|
def self.find_network_storage_webcc_passwords(options_hash = {})
|
213
222
|
softlayer_client = options_hash[:client] || Client.default_client
|
@@ -243,11 +252,13 @@ module SoftLayer
|
|
243
252
|
}
|
244
253
|
|
245
254
|
option_to_filter_path = {
|
246
|
-
:
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
255
|
+
:network_storage => {
|
256
|
+
:datacenter => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.datacenter.name' ].join },
|
257
|
+
:domain => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.domain' ].join },
|
258
|
+
:hostname => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.hostname' ].join },
|
259
|
+
:tags => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.tagReferences.tag.name' ].join }
|
260
|
+
},
|
261
|
+
:webcc_password => {
|
251
262
|
:username => "webccAccount.username"
|
252
263
|
}
|
253
264
|
}
|
@@ -261,24 +272,13 @@ module SoftLayer
|
|
261
272
|
if options_hash[:network_storage_server_type]
|
262
273
|
network_storage_type = options_hash[:network_storage_type] || :network_storage
|
263
274
|
|
264
|
-
[
|
275
|
+
option_to_filter_path[:network_storage].keys.each do |option|
|
265
276
|
if options_hash[option]
|
266
277
|
network_storage_object_filter.modify do |filter|
|
267
|
-
filter.accept(option_to_filter_path[option].call(network_storage_type, options_hash[:network_storage_server_type])).when_it is(options_hash[option])
|
278
|
+
filter.accept(option_to_filter_path[:network_storage][option].call(network_storage_type, options_hash[:network_storage_server_type])).when_it is(options_hash[option])
|
268
279
|
end
|
269
280
|
end
|
270
281
|
end
|
271
|
-
|
272
|
-
if options_hash[:tags]
|
273
|
-
network_storage_object_filter.set_criteria_for_key_path(option_to_filter_path[:tags].call(network_storage_type, options_hash[:network_storage_server_type]),
|
274
|
-
{
|
275
|
-
'operation' => 'in',
|
276
|
-
'options' => [{
|
277
|
-
'name' => 'data',
|
278
|
-
'value' => options_hash[:tags].collect{ |tag_value| tag_value.to_s }
|
279
|
-
}]
|
280
|
-
})
|
281
|
-
end
|
282
282
|
end
|
283
283
|
|
284
284
|
option_to_filter_path[:webcc_password].each do |option, filter_path|
|
@@ -9,7 +9,7 @@
|
|
9
9
|
module SoftLayer
|
10
10
|
#
|
11
11
|
# This class represents a Bare Metal Server, a hardware server in contrast to a virtual machine,
|
12
|
-
# in the SoftLayer Environment. It corresponds
|
12
|
+
# in the SoftLayer Environment. It corresponds roughly to the +SoftLayer_Hardware+ and
|
13
13
|
# +SoftLayer_Hardware_Server+ services in the SoftLayer API
|
14
14
|
#
|
15
15
|
# http://sldn.softlayer.com/reference/datatypes/SoftLayer_Hardware
|
@@ -23,7 +23,7 @@ module SoftLayer
|
|
23
23
|
# a Bare Metal Instance is physical, hardware server that is is provisioned to
|
24
24
|
# match a profile with characteristics similar to a Virtual Server
|
25
25
|
#
|
26
|
-
# This is an important
|
26
|
+
# This is an important distinction in rare cases, like cancelling the server.
|
27
27
|
#
|
28
28
|
def bare_metal_instance?
|
29
29
|
if has_sl_property?(:bareMetalInstanceFlag)
|
@@ -65,7 +65,7 @@ module SoftLayer
|
|
65
65
|
# Returns the typical Service used to work with this Server
|
66
66
|
# For Bare Metal Servers that is +SoftLayer_Hardware+ though in some special cases
|
67
67
|
# you may have to use +SoftLayer_Hardware_Server+ as a type or service. That
|
68
|
-
# service object is available
|
68
|
+
# service object is available through the hardware_server_service method
|
69
69
|
def service
|
70
70
|
return softlayer_client[:Hardware_Server].object_with_id(self.id)
|
71
71
|
end
|
@@ -146,7 +146,7 @@ module SoftLayer
|
|
146
146
|
end
|
147
147
|
|
148
148
|
##
|
149
|
-
#
|
149
|
+
# Retrieve the bare metal server with the given server ID from the
|
150
150
|
# SoftLayer API
|
151
151
|
#
|
152
152
|
# The options parameter should contain:
|
@@ -155,6 +155,10 @@ module SoftLayer
|
|
155
155
|
#
|
156
156
|
# If no client is given, then the routine will try to use Client.default_client
|
157
157
|
# If no client can be found the routine will raise an error.
|
158
|
+
#
|
159
|
+
# Additionally you may provide options related to the request itself:
|
160
|
+
# * <b>*:object_mask*</b> (string) - The object mask of properties you wish to receive for the items returned.
|
161
|
+
# If not provided, the result will use the default object mask
|
158
162
|
def self.server_with_id(server_id, options = {})
|
159
163
|
softlayer_client = options[:client] || Client.default_client
|
160
164
|
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
@@ -183,20 +187,22 @@ module SoftLayer
|
|
183
187
|
#
|
184
188
|
# You may filter the list returned by adding options:
|
185
189
|
#
|
186
|
-
# * <b>+:tags+</b>
|
187
|
-
# * <b>+:cpus+</b>
|
188
|
-
# * <b>+:memory+</b>
|
189
|
-
# * <b>+:hostname+</b>
|
190
|
-
# * <b>+:domain+</b>
|
191
|
-
# * <b>+:datacenter+</b> (string) - find servers whose data center name matches the query string given (see ObjectFilter::query_to_filter_operation)
|
192
|
-
# * <b>+:nic_speed+</b>
|
193
|
-
# * <b>+:public_ip+</b>
|
194
|
-
# * <b>+:private_ip+</b> (string) - same as :public_ip, but for private IP addresses
|
190
|
+
# * <b>+:tags+</b> (string/array) - an array of strings representing tags to search for on the instances
|
191
|
+
# * <b>+:cpus+</b> (int/array) - return servers with the given number of (virtual) CPUs
|
192
|
+
# * <b>+:memory+</b> (int/array) - return servers with at least the given amount of memory (in Gigabytes)
|
193
|
+
# * <b>+:hostname+</b> (string/array) - return servers whose hostnames match the query string given (see ObjectFilter::query_to_filter_operation)
|
194
|
+
# * <b>+:domain+</b> (string/array) - filter servers to those whose domain matches the query string given (see ObjectFilter::query_to_filter_operation)
|
195
|
+
# * <b>+:datacenter+</b> (string/array) - find servers whose data center name matches the query string given (see ObjectFilter::query_to_filter_operation)
|
196
|
+
# * <b>+:nic_speed+</b> (int/array) - include servers with the given nic speed (in Mbps)
|
197
|
+
# * <b>+:public_ip+</b> (string/array) - return servers whose public IP address matches the query string given (see ObjectFilter::query_to_filter_operation)
|
198
|
+
# * <b>+:private_ip+</b> (string/array) - same as :public_ip, but for private IP addresses
|
195
199
|
#
|
196
200
|
# Additionally you may provide options related to the request itself:
|
197
|
-
#
|
198
|
-
#
|
199
|
-
# * <b>+:
|
201
|
+
# * <b>*:object_filter*</b> (ObjectFilter) - Include hardware servers for servers that matche the
|
202
|
+
# criteria of this object filter
|
203
|
+
# * <b>+:object_mask+</b> (string, hash, or array) - The object mask of properties you wish to receive for the items returned.
|
204
|
+
# If not provided, the result will use the default object mask
|
205
|
+
# * <b>+:result_limit+</b> (hash with :limit, and :offset keys) - Limit the scope of results returned.
|
200
206
|
#
|
201
207
|
def self.find_servers(options_hash = {})
|
202
208
|
softlayer_client = options_hash[:client] || Client.default_client
|
@@ -210,14 +216,15 @@ module SoftLayer
|
|
210
216
|
end
|
211
217
|
|
212
218
|
option_to_filter_path = {
|
213
|
-
:cpus
|
214
|
-
:memory
|
215
|
-
:hostname
|
216
|
-
:domain
|
219
|
+
:cpus => "hardware.processorPhysicalCoreAmount",
|
220
|
+
:memory => "hardware.memoryCapacity",
|
221
|
+
:hostname => "hardware.hostname",
|
222
|
+
:domain => "hardware.domain",
|
217
223
|
:datacenter => "hardware.datacenter.name",
|
218
|
-
:nic_speed
|
219
|
-
:public_ip
|
220
|
-
:private_ip => "hardware.primaryBackendIpAddress"
|
224
|
+
:nic_speed => "hardware.networkComponents.maxSpeed",
|
225
|
+
:public_ip => "hardware.primaryIpAddress",
|
226
|
+
:private_ip => "hardware.primaryBackendIpAddress",
|
227
|
+
:tags => "hardware.tagReferences.tag.name"
|
221
228
|
}
|
222
229
|
|
223
230
|
# For each of the options in the option_to_filter_path map, if the options hash includes
|
@@ -227,30 +234,13 @@ module SoftLayer
|
|
227
234
|
object_filter.modify { |filter| filter.accept(filter_path).when_it is(options_hash[option])} if options_hash[option]
|
228
235
|
end
|
229
236
|
|
230
|
-
# Tags get a much more complex object filter operation so we handle them separately
|
231
|
-
if options_hash.has_key?(:tags)
|
232
|
-
object_filter.set_criteria_for_key_path("hardware.tagReferences.tag.name", {
|
233
|
-
'operation' => 'in',
|
234
|
-
'options' => [{
|
235
|
-
'name' => 'data',
|
236
|
-
'value' => options_hash[:tags].collect{ |tag_value| tag_value.to_s }
|
237
|
-
}]
|
238
|
-
} );
|
239
|
-
end
|
240
|
-
|
241
237
|
account_service = softlayer_client[:Account]
|
242
238
|
account_service = account_service.object_filter(object_filter) unless object_filter.empty?
|
243
239
|
account_service = account_service.object_mask(default_object_mask.to_sl_object_mask)
|
240
|
+
account_service = account_service.object_mask(options_hash[:object_mask]) if options_hash[:object_mask]
|
244
241
|
|
245
|
-
if
|
246
|
-
account_service = account_service.
|
247
|
-
end
|
248
|
-
|
249
|
-
if options_hash.has_key?(:result_limit)
|
250
|
-
offset = options[:result_limit][:offset]
|
251
|
-
limit = options[:result_limit][:limit]
|
252
|
-
|
253
|
-
account_service = account_service.result_limit(offset, limit)
|
242
|
+
if options_hash[:result_limit] && options_hash[:result_limit][:offset] && options_hash[:result_limit][:limit]
|
243
|
+
account_service = account_service.result_limit(options_hash[:result_limit][:offset], options_hash[:result_limit][:limit])
|
254
244
|
end
|
255
245
|
|
256
246
|
bare_metal_data = account_service.getHardware()
|