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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.textile +3 -0
  3. data/lib/softlayer/Account.rb +85 -8
  4. data/lib/softlayer/AccountPassword.rb +49 -49
  5. data/lib/softlayer/BareMetalServer.rb +33 -43
  6. data/lib/softlayer/BareMetalServerOrder.rb +17 -8
  7. data/lib/softlayer/BareMetalServerOrder_Package.rb +25 -7
  8. data/lib/softlayer/Client.rb +7 -7
  9. data/lib/softlayer/Config.rb +105 -49
  10. data/lib/softlayer/Datacenter.rb +10 -2
  11. data/lib/softlayer/DynamicAttribute.rb +1 -1
  12. data/lib/softlayer/ImageTemplate.rb +44 -61
  13. data/lib/softlayer/ModelBase.rb +2 -2
  14. data/lib/softlayer/NetworkComponent.rb +25 -3
  15. data/lib/softlayer/NetworkMessageDelivery.rb +25 -5
  16. data/lib/softlayer/NetworkMonitor.rb +333 -0
  17. data/lib/softlayer/NetworkService.rb +6 -4
  18. data/lib/softlayer/NetworkStorage.rb +42 -29
  19. data/lib/softlayer/NetworkStorageAllowedHost.rb +9 -3
  20. data/lib/softlayer/NetworkStorageCredential.rb +44 -29
  21. data/lib/softlayer/NetworkStorageGroup.rb +42 -10
  22. data/lib/softlayer/ObjectFilter.rb +54 -4
  23. data/lib/softlayer/ObjectMaskParser.rb +1 -1
  24. data/lib/softlayer/ProductItemCategory.rb +34 -5
  25. data/lib/softlayer/ProductPackage.rb +11 -7
  26. data/lib/softlayer/Server.rb +77 -5
  27. data/lib/softlayer/ServerFirewall.rb +12 -11
  28. data/lib/softlayer/Service.rb +1 -1
  29. data/lib/softlayer/Software.rb +35 -50
  30. data/lib/softlayer/SoftwarePassword.rb +92 -107
  31. data/lib/softlayer/Ticket.rb +37 -28
  32. data/lib/softlayer/UserCustomer.rb +56 -13
  33. data/lib/softlayer/UserCustomerExternalBinding.rb +18 -5
  34. data/lib/softlayer/VLANFirewall.rb +40 -9
  35. data/lib/softlayer/VLANFirewallOrder.rb +1 -1
  36. data/lib/softlayer/VirtualDiskImage.rb +38 -10
  37. data/lib/softlayer/VirtualServer.rb +75 -48
  38. data/lib/softlayer/VirtualServerOrder.rb +15 -8
  39. data/lib/softlayer/VirtualServerOrder_Package.rb +25 -7
  40. data/lib/softlayer/VirtualServerUpgradeOrder.rb +1 -1
  41. data/lib/softlayer/base.rb +1 -1
  42. data/lib/softlayer/object_mask_helpers.rb +1 -1
  43. data/lib/softlayer_api.rb +2 -0
  44. metadata +4 -3
@@ -21,22 +21,24 @@ module SoftLayer
21
21
  sl_attr :name
22
22
 
23
23
  ##
24
- # :attr_reader:
24
+ # :attr_reader: private_ip
25
25
  # The backend IP address for this resource
26
26
  sl_attr :private_ip, 'backendIpAddress'
27
27
 
28
28
  ##
29
- # :attr_reader:
29
+ # :attr_reader: public_ip
30
30
  # The frontend IP address for this resource
31
31
  sl_attr :public_ip, 'frontendIpAddress'
32
32
 
33
33
  ##
34
- # :attr_reader:
34
+ # :attr_reader: ssh_username
35
35
  # The ssh username of for this resource
36
36
  sl_attr :ssh_username, 'sshUsername'
37
37
 
38
38
  ##
39
- # Returns the datacenter that this network service resource is available in
39
+ # Retrieve the datacenter that this network service resource is available in
40
+ # :call-seq:
41
+ # datacenter(force_update=false)
40
42
  sl_dynamic_attr :datacenter do |resource|
41
43
  resource.should_update? do
42
44
  #only retrieved once per instance
@@ -16,13 +16,20 @@ module SoftLayer
16
16
  include ::SoftLayer::DynamicAttribute
17
17
 
18
18
  ##
19
- # :attr_reader:
19
+ # :attr_reader: capacity
20
20
  # A Storage account's capacity, measured in gigabytes.
21
21
  sl_attr :capacity, 'capacityGb'
22
22
 
23
23
  ##
24
- # :attr_reader:
24
+ # :attr_reader: created_at
25
+ # The date a network storage volume was created.
26
+ sl_attr :created_at, 'createDate'
27
+
28
+ ##
29
+ # :attr_reader: created
25
30
  # The date a network storage volume 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
  ##
@@ -38,12 +45,12 @@ module SoftLayer
38
45
  sl_attr :password
39
46
 
40
47
  ##
41
- # :attr_reader:
48
+ # :attr_reader: type
42
49
  # A Storage account's type.
43
50
  sl_attr :type, 'nasType'
44
51
 
45
52
  ##
46
- # :attr_reader:
53
+ # :attr_reader: upgradable
47
54
  # This flag indicates whether this storage type is upgradable or not.
48
55
  sl_attr :upgradable, 'upgradableFlag'
49
56
 
@@ -55,7 +62,9 @@ module SoftLayer
55
62
  sl_attr :username
56
63
 
57
64
  ##
58
- # Other usernames and passwords associated with a Storage volume.
65
+ # Retrieve other usernames and passwords associated with a Storage volume.
66
+ # :call-seq:
67
+ # account_password(force_update=false)
59
68
  sl_dynamic_attr :account_password do |resource|
60
69
  resource.should_update? do
61
70
  #only retrieved once per instance
@@ -70,6 +79,8 @@ module SoftLayer
70
79
 
71
80
  ##
72
81
  # A Storage volume's access credentials.
82
+ # :call-seq:
83
+ # credentials(force_update=false)
73
84
  sl_dynamic_attr :credentials do |resource|
74
85
  resource.should_update? do
75
86
  #only retrieved once per instance
@@ -83,6 +94,8 @@ module SoftLayer
83
94
 
84
95
  ##
85
96
  # The network resource a Storage service is connected to.
97
+ # :call-seq:
98
+ # service_resource(force_update=false)
86
99
  sl_dynamic_attr :service_resource do |resource|
87
100
  resource.should_update? do
88
101
  #only retrieved once per instance
@@ -183,13 +196,20 @@ module SoftLayer
183
196
  # If no client can be found the routine will raise an error.
184
197
  #
185
198
  # You may filter the list returned by adding options:
186
- # * <b>+:datacenter+</b> (string) - Include network storage associated with servers matching this datacenter
187
- # * <b>+:domain+</b> (string) - Include network storage associated with servers matching this domain
188
- # * <b>+:hostname+</b> (string) - Include network storage associated with servers matching this hostname
189
- # * <b>+:network_storage_server_type+</b> (string) - Include network storage associated with this server type
190
- # * <b>+:network_storage_type+</b> (string) - Include network storage from devices of this storage type
191
- # * <b>+:service+</b> (string) - Include network storage from devices with this service fqdn
192
- # * <b>+:tags+</b> (Array) - Include network storage associated with servers matching these tags
199
+ # * <b>+:datacenter+</b> (string/array) - Include network storage associated with servers matching this datacenter
200
+ # * <b>+:domain+</b> (string/array) - Include network storage associated with servers matching this domain
201
+ # * <b>+:hostname+</b> (string/array) - Include network storage associated with servers matching this hostname
202
+ # * <b>+:network_storage_server_type+</b> (symbol) - Include network storage associated with this server type
203
+ # * <b>+:network_storage_type+</b> (symbol) - Include network storage from devices of this storage type
204
+ # * <b>+:service+</b> (string/array) - Include network storage from devices with this service fqdn
205
+ # * <b>+:tags+</b> (string/array) - Include network storage associated with servers matching these tags
206
+ #
207
+ # Additionally you may provide options related to the request itself:
208
+ # * <b>*:network_storage_object_mask*</b> (string) - The object mask of properties you wish to receive for the items returned.
209
+ # If not provided, the result will use the default object mask
210
+ # * <b>*:network_storage_object_filter*</b> (ObjectFilter) - Include network storage credentials from network storage that matches the
211
+ # criteria of this object filter
212
+ # * <b>+:result_limit+</b> (hash with :limit, and :offset keys) - Limit the scope of results returned.
193
213
  #
194
214
  def self.find_network_storage(options_hash = {})
195
215
  softlayer_client = options_hash[:client] || Client.default_client
@@ -218,11 +238,11 @@ module SoftLayer
218
238
  }
219
239
 
220
240
  option_to_filter_path = {
221
- :datacenter => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.datacenter.name' ].join },
222
- :domain => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.domain' ].join },
223
- :hostname => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.hostname' ].join },
224
- :service => lambda { |storage_type| return [ filter_label[storage_type], '.serviceResource.backendIpAddress' ].join },
225
- :tags => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.tagReferences.tag.name' ].join },
241
+ :datacenter => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.datacenter.name' ].join },
242
+ :domain => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.domain' ].join },
243
+ :hostname => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.hostname' ].join },
244
+ :service => lambda { |storage_type| return [ filter_label[storage_type], '.serviceResource.backendIpAddress' ].join },
245
+ :tags => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.tagReferences.tag.name' ].join },
226
246
  }
227
247
 
228
248
  if options_hash[:network_storage_type]
@@ -240,24 +260,13 @@ module SoftLayer
240
260
  end
241
261
 
242
262
  if options_hash[:network_storage_server_type]
243
- [ :datacenter, :domain, :hostname ].each do |option|
263
+ [ :datacenter, :domain, :hostname, :tags ].each do |option|
244
264
  if options_hash[option]
245
265
  network_storage_object_filter.modify do |filter|
246
266
  filter.accept(option_to_filter_path[option].call(network_storage_type, options_hash[:network_storage_server_type])).when_it is(options_hash[option])
247
267
  end
248
268
  end
249
269
  end
250
-
251
- if options_hash[:tags]
252
- network_storage_object_filter.set_criteria_for_key_path(option_to_filter_path[:tags].call(network_storage_type, options_hash[:network_storage_server_type]),
253
- {
254
- 'operation' => 'in',
255
- 'options' => [{
256
- 'name' => 'data',
257
- 'value' => options_hash[:tags].collect{ |tag_value| tag_value.to_s }
258
- }]
259
- })
260
- end
261
270
  end
262
271
 
263
272
  account_service = softlayer_client[:Account]
@@ -265,6 +274,10 @@ module SoftLayer
265
274
  account_service = account_service.object_mask(NetworkStorage.default_object_mask)
266
275
  account_service = account_service.object_mask(options_hash[:network_storage_object_mask]) if options_hash[:network_storage_object_mask]
267
276
 
277
+ if options_hash[:result_limit] && options_hash[:result_limit][:offset] && options_hash[:result_limit][:limit]
278
+ account_service = account_service.result_limit(options_hash[:result_limit][:offset], options_hash[:result_limit][:limit])
279
+ end
280
+
268
281
  case options_hash[:network_storage_type]
269
282
  when :evault
270
283
  network_storage_data = account_service.getEvaultNetworkStorage
@@ -15,7 +15,9 @@ module SoftLayer
15
15
  sl_attr :name
16
16
 
17
17
  ##
18
- # The NetworkStorageGroup instances assigned to this host
18
+ # Retrieve the NetworkStorageGroup instances assigned to this host
19
+ # :call-seq:
20
+ # assigned_groups(force_update=false)
19
21
  sl_dynamic_attr :assigned_groups do |resource|
20
22
  resource.should_update? do
21
23
  #only retrieved once per instance
@@ -29,7 +31,9 @@ module SoftLayer
29
31
  end
30
32
 
31
33
  ##
32
- # The NetworkStorage instances assigned to this host
34
+ # Retrieve the NetworkStorage instances assigned to this host
35
+ # :call-seq:
36
+ # assigned_volumes(force_update=false)
33
37
  sl_dynamic_attr :assigned_volumes do |resource|
34
38
  resource.should_update? do
35
39
  #only retrieved once per instance
@@ -43,7 +47,9 @@ module SoftLayer
43
47
  end
44
48
 
45
49
  ##
46
- # The NetworkStorageCredential instance used to access NetworkStorage for this host
50
+ # Retrieve the NetworkStorageCredential instance used to access NetworkStorage for this host
51
+ # :call-seq:
52
+ # credential(force_update=false)
47
53
  sl_dynamic_attr :credential do |resource|
48
54
  resource.should_update? do
49
55
  #only retrieved once per instance
@@ -17,13 +17,27 @@ module SoftLayer
17
17
  include ::SoftLayer::DynamicAttribute
18
18
 
19
19
  ##
20
- # :attr_reader:
20
+ # :attr_reader: created_at
21
+ # This is the data that the record was created in the table.
22
+ sl_attr :created_at, 'createDate'
23
+
24
+ ##
25
+ # :attr_reader: created
21
26
  # This is the data that the record was created in the table.
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
+ # This is the date that the record was last updated in the table.
34
+ sl_attr :modified_at, 'modifyDate'
35
+
36
+ ##
37
+ # :attr_reader: modified
26
38
  # This is the date that the record was last updated in the table.
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
  ##
@@ -61,14 +75,22 @@ module SoftLayer
61
75
  # If no client can be found the routine will raise an error.
62
76
  #
63
77
  # You may filter the list returned by adding options:
64
- # * <b>+:datacenter+</b> (string) - Include network storage account passwords associated with servers matching this datacenter
65
- # * <b>+:domain+</b> (string) - Include network storage account passwords associated with servers matching this domain
66
- # * <b>+:hostname+</b> (string) - Include network storage account passwords associated with servers matching this hostname
67
- # * <b>+:network_storage_server_type+</b> (string) - Include network storage account passwords associated with services of this server type
68
- # * <b>+:network_storage_type+</b> (string) - Include network storage account passwords from devices of this storage type
69
- # * <b>+:service+</b> (string) - Include network storage account passwords from devices with this service fqdn
70
- # * <b>+:tags+</b> (Array) - Include network storage account passwords associated with servers matching these tags
71
- # * <b>+:username+</b> (string) - Include network storage account passwords with this username only
78
+ # * <b>+:datacenter+</b> (string/array) - Include network storage credentials associated with servers matching this datacenter
79
+ # * <b>+:domain+</b> (string/array) - Include network storage credentials associated with servers matching this domain
80
+ # * <b>+:hostname+</b> (string/array) - Include network storage credentials associated with servers matching this hostname
81
+ # * <b>+:network_storage_server_type+</b> (symbol) - Include network storage credentials associated with services of this server type
82
+ # * <b>+:network_storage_type+</b> (symbol) - Include network storage credentials from devices of this storage type
83
+ # * <b>+:service+</b> (string/array) - Include network storage credentials from devices with this service fqdn
84
+ # * <b>+:tags+</b> (string/array) - Include network storage credentials associated with servers matching these tags
85
+ # * <b>+:username+</b> (string/array) - Include network storage credentials with this username only
86
+ #
87
+ # Additionally you may provide options related to the request itself:
88
+ # * <b>*:network_storage_credential_object_filter*</b> (ObjectFilter) - Include network storage credentials that match the
89
+ # criteria of this object filter
90
+ # * <b>*:network_storage_credential_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 credentials from network storage that matches the
93
+ # criteria of this object filter
72
94
  #
73
95
  def self.find_network_storage_credentials(options_hash = {})
74
96
  softlayer_client = options_hash[:client] || Client.default_client
@@ -104,11 +126,13 @@ module SoftLayer
104
126
  }
105
127
 
106
128
  option_to_filter_path = {
107
- :datacenter => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.datacenter.name' ].join },
108
- :domain => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.domain' ].join },
109
- :hostname => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.hostname' ].join },
110
- :service => lambda { |storage_type| return [ filter_label[storage_type], '.serviceResource.backendIpAddress' ].join },
111
- :tags => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.tagReferences.tag.name' ].join },
129
+ :network_storage => {
130
+ :datacenter => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.datacenter.name' ].join },
131
+ :domain => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.domain' ].join },
132
+ :hostname => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.hostname' ].join },
133
+ :service => lambda { |storage_type| return [ filter_label[storage_type], '.serviceResource.backendIpAddress' ].join },
134
+ :tags => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.tagReferences.tag.name' ].join }
135
+ },
112
136
  :network_storage_credential => {
113
137
  :username => "credentials.username"
114
138
  }
@@ -124,29 +148,20 @@ module SoftLayer
124
148
 
125
149
  if options_hash[:service]
126
150
  network_storage_object_filter.modify do |filter|
127
- filter.accept(option_to_filter_path[:service].call(network_storage_type)).when_it is(options_hash[:service])
151
+ filter.accept(option_to_filter_path[:network_storage][:service].call(network_storage_type)).when_it is(options_hash[:service])
128
152
  end
129
153
  end
130
154
 
131
155
  if options_hash[:network_storage_server_type]
132
- [ :datacenter, :domain, :hostname ].each do |option|
156
+ option_to_filter_path[:network_storage].keys.each do |option|
157
+ next if option == :service
158
+
133
159
  if options_hash[option]
134
160
  network_storage_object_filter.modify do |filter|
135
- filter.accept(option_to_filter_path[option].call(network_storage_type, options_hash[:network_storage_server_type])).when_it is(options_hash[option])
161
+ 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])
136
162
  end
137
163
  end
138
164
  end
139
-
140
- if options_hash[:tags]
141
- network_storage_object_filter.set_criteria_for_key_path(option_to_filter_path[:tags].call(network_storage_type, options_hash[:network_storage_server_type]),
142
- {
143
- 'operation' => 'in',
144
- 'options' => [{
145
- 'name' => 'data',
146
- 'value' => options_hash[:tags].collect{ |tag_value| tag_value.to_s }
147
- }]
148
- })
149
- end
150
165
  end
151
166
 
152
167
  option_to_filter_path[:network_storage_credential].each do |option, filter_path|
@@ -15,17 +15,33 @@ module SoftLayer
15
15
  sl_attr :alias
16
16
 
17
17
  ##
18
- # :attr_reader:
18
+ # :attr_reader: created_at
19
+ # The date this group was created.
20
+ sl_attr :created_at, 'createDate'
21
+
22
+ ##
23
+ # :attr_reader: created
19
24
  # The date this group was created.
25
+ # DEPRECATION WARNING: This attribute is deprecated in favor of created_at
26
+ # and will be removed in the next major release.
20
27
  sl_attr :created, 'createDate'
21
28
 
22
29
  ##
23
- # :attr_reader:
30
+ # :attr_reader: modified_at
31
+ # The date this group was modified.
32
+ sl_attr :modified_at, 'modifyDate'
33
+
34
+ ##
35
+ # :attr_reader: modified
24
36
  # The date this group was modified.
37
+ # DEPRECATION WARNING: This attribute is deprecated in favor of modified_at
38
+ # and will be removed in the next major release.
25
39
  sl_attr :modified, 'modifyDate'
26
40
 
27
41
  ##
28
- # The SoftLayer_Account which owns this group.
42
+ # Retrieve the SoftLayer_Account which owns this group.
43
+ # :call-seq:
44
+ # account(force_update=false)
29
45
  sl_dynamic_attr :account do |resource|
30
46
  resource.should_update? do
31
47
  #only retrieved once per instance
@@ -39,7 +55,9 @@ module SoftLayer
39
55
  end
40
56
 
41
57
  ##
42
- # The allowed hosts list for this group.
58
+ # Retrieve the allowed hosts list for this group.
59
+ # :call-seq:
60
+ # allowed_hosts(force_update=false)
43
61
  sl_dynamic_attr :allowed_hosts do |resource|
44
62
  resource.should_update? do
45
63
  #only retrieved once per instance
@@ -53,7 +71,9 @@ module SoftLayer
53
71
  end
54
72
 
55
73
  ##
56
- # The network storage volumes this group is attached to.
74
+ # Retrieve the network storage volumes this group is attached to.
75
+ # :call-seq:
76
+ # attached_volumes(force_update=false)
57
77
  sl_dynamic_attr :attached_volumes do |resource|
58
78
  resource.should_update? do
59
79
  #only retrieved once per instance
@@ -67,7 +87,9 @@ module SoftLayer
67
87
  end
68
88
 
69
89
  ##
70
- # The IP address for for SoftLayer_Network_Storage_Allowed_Host objects within this group.
90
+ # Retrieve the IP address for for SoftLayer_Network_Storage_Allowed_Host objects within this group.
91
+ # :call-seq:
92
+ # ip_address(force_update=false)
71
93
  sl_dynamic_attr :ip_address do |resource|
72
94
  resource.should_update? do
73
95
  #only retrieved once per instance
@@ -81,7 +103,10 @@ module SoftLayer
81
103
  end
82
104
 
83
105
  ##
84
- # The description of theSoftLayer_Network_Storage_OS_Type Operating System designation that this group was created for.
106
+ # Retrieve the description of the SoftLayer_Network_Storage_OS_Type
107
+ # Operating System designation that this group was created for.
108
+ # :call-seq:
109
+ # os_description(force_update=false)
85
110
  sl_dynamic_attr :os_description do |resource|
86
111
  resource.should_update? do
87
112
  #only retrieved once per instance
@@ -95,7 +120,10 @@ module SoftLayer
95
120
  end
96
121
 
97
122
  ##
98
- # The name of theSoftLayer_Network_Storage_OS_Type Operating System designation that this group was created for.
123
+ # Retrieve the name of the SoftLayer_Network_Storage_OS_Type
124
+ # Operating System designation that this group was created for.
125
+ # :call-seq:
126
+ # os_name(force_update=false)
99
127
  sl_dynamic_attr :os_name do |resource|
100
128
  resource.should_update? do
101
129
  #only retrieved once per instance
@@ -109,7 +137,9 @@ module SoftLayer
109
137
  end
110
138
 
111
139
  ##
112
- # The network resource this group is created on.
140
+ # Retrieve the network resource this group is created on.
141
+ # :call-seq:
142
+ # service_resource(force_update=false)
113
143
  sl_dynamic_attr :service_resource do |resource|
114
144
  resource.should_update? do
115
145
  #only retrieved once per instance
@@ -123,7 +153,9 @@ module SoftLayer
123
153
  end
124
154
 
125
155
  ##
126
- # The name of the SoftLayer_Network_Storage_Group_Type which describes this group.
156
+ # Retrieve the name of the SoftLayer_Network_Storage_Group_Type which describes this group.
157
+ # :call-seq:
158
+ # type(force_update=false)
127
159
  sl_dynamic_attr :type do |resource|
128
160
  resource.should_update? do
129
161
  #only retrieved once per instance
@@ -115,7 +115,7 @@ module SoftLayer
115
115
  # The ObjectFilterDefinitionContext defines a bunch of methods
116
116
  # that allow the property conditions of an object filter to
117
117
  # be defined in a "pretty" way. Each method returns a block
118
- # (a lambda, a proc) that, when called and pased the tail property
118
+ # (a lambda, a proc) that, when called and passed the tail property
119
119
  # of a property chain will generate a fragment of an object filter
120
120
  # asking that that property match the given conditions.
121
121
  #
@@ -125,14 +125,16 @@ module SoftLayer
125
125
  module ObjectFilterDefinitionContext
126
126
  # Matches when the value in the field is exactly equal to the
127
127
  # given value. This is a case-sensitive match
128
+ # If value is Enumerable, it is equivalent to calling is_contained_by
128
129
  def self.is(value)
129
- { 'operation' => value }
130
+ value.kind_of?(Enumerable) ? is_contained_by(value) : { 'operation' => value }
130
131
  end
131
132
 
132
133
  # Matches is the value in the field does not exactly equal
133
134
  # the value passed in.
135
+ # If value is Enumerable, it is equivalent to calling is_not_contained_by
134
136
  def self.is_not(value)
135
- filter_criteria('!=', value)
137
+ value.kind_of?(Enumerable) ? is_not_contained_by(value) : filter_criteria('!=', value)
136
138
  end
137
139
 
138
140
  # Matches when the value is found within the field
@@ -153,11 +155,59 @@ module SoftLayer
153
155
  filter_criteria('$=', value)
154
156
  end
155
157
 
156
- # Maches the given value in a case-insensitive way
158
+ # Matches the given value in a case-insensitive way
157
159
  def self.matches_ignoring_case(value)
158
160
  filter_criteria('_=', value)
159
161
  end
160
162
 
163
+ # Matches when the key path value is a date between the start and end dates provided
164
+ # Dates should be strings in '%m/%d/%Y %T' format or Date/DateTime instances
165
+ def self.is_between_dates(start_date, end_date)
166
+ {
167
+ 'operation' => 'betweenDate',
168
+ 'options' => [
169
+ {
170
+ 'name' => 'startDate',
171
+ 'value' => [ start_date.kind_of?(Date) ? start_date.strftime('%m/%d/%Y %T') : DateTime.strptime(start_date.to_s, '%m/%d/%Y %T').strftime('%m/%d/%Y %T') ]
172
+ },
173
+ {
174
+ 'name' => 'endDate',
175
+ 'value' => [ end_date.kind_of?(Date) ? end_date.strftime('%m/%d/%Y %T') : DateTime.strptime(end_date.to_s, '%m/%d/%Y %T').strftime('%m/%d/%Y %T') ]
176
+ }
177
+ ]
178
+ }
179
+ end
180
+
181
+ # Matches when key path value is equal to one of the given values in the Enumerable
182
+ def self.is_contained_by(value)
183
+ raise "Expected an Enumerable value with a list of acceptable values that can be converted to strings" unless value.kind_of?(Enumerable)
184
+
185
+ {
186
+ 'operation' => 'in',
187
+ 'options' => [
188
+ {
189
+ 'name' => 'data',
190
+ 'value' => value.collect { |enum_val| enum_val.to_s }
191
+ }
192
+ ]
193
+ }
194
+ end
195
+
196
+ # Matches when key path value is not equal to one of the given values in the Enumerable
197
+ def self.is_not_contained_by(value)
198
+ raise "Expected an Enumerable value with a list of acceptable values that can be converted to strings" unless value.kind_of?(Enumerable)
199
+
200
+ {
201
+ 'operation' => 'not in',
202
+ 'options' => [
203
+ {
204
+ 'name' => 'data',
205
+ 'value' => value.collect { |enum_val| enum_val.to_s }
206
+ }
207
+ ]
208
+ }
209
+ end
210
+
161
211
  # Matches when the value in the field is greater than the given value
162
212
  def self.is_greater_than(value)
163
213
  filter_criteria('>', value)