softlayer_api 3.0.2 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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()
|