softlayer_api 3.0.0 → 3.0.1
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/examples/order_virtual_server.rb +1 -1
- data/lib/softlayer/Account.rb +85 -13
- data/lib/softlayer/AccountPassword.rb +356 -0
- data/lib/softlayer/BareMetalServer.rb +21 -13
- data/lib/softlayer/BareMetalServerOrder_Package.rb +30 -13
- data/lib/softlayer/Config.rb +6 -1
- data/lib/softlayer/ImageTemplate.rb +15 -5
- data/lib/softlayer/NetworkMessageDelivery.rb +130 -0
- data/lib/softlayer/NetworkService.rb +95 -0
- data/lib/softlayer/NetworkStorage.rb +340 -0
- data/lib/softlayer/NetworkStorageAllowedHost.rb +77 -0
- data/lib/softlayer/NetworkStorageCredential.rb +204 -0
- data/lib/softlayer/NetworkStorageGroup.rb +159 -0
- data/lib/softlayer/ProductItemCategory.rb +16 -11
- data/lib/softlayer/ProductPackage.rb +7 -2
- data/lib/softlayer/Server.rb +14 -0
- data/lib/softlayer/Service.rb +3 -17
- data/lib/softlayer/Software.rb +368 -0
- data/lib/softlayer/SoftwarePassword.rb +612 -0
- data/lib/softlayer/UserCustomer.rb +144 -0
- data/lib/softlayer/UserCustomerExternalBinding.rb +97 -0
- data/lib/softlayer/VirtualDiskImage.rb +181 -0
- data/lib/softlayer/VirtualDiskImageSoftware.rb +51 -0
- data/lib/softlayer/VirtualServer.rb +2 -2
- data/lib/softlayer/VirtualServerOrder_Package.rb +161 -0
- data/lib/softlayer/base.rb +1 -1
- data/lib/softlayer_api.rb +14 -0
- metadata +33 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 498eb5e1ea2559ee02a3d3f471515c5233c665ee
|
4
|
+
data.tar.gz: 9957ced500d1790af7e1dcc312b2deec1cad2390
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 160b9c1883f81422a9d94fbd4a413a89d5d2c8173683d739223897323e2d72f68becd9f1121e8f9f2ae2cfda9447f4b7d22d9c7750f81643b5ff79c831e69ad9
|
7
|
+
data.tar.gz: 5dc081303ba4b1e7abbf3177059b20547471bbf986a1afd1ebd2210fbf2f5b93b7dd78664c110c794060b1751b05b183e0827df6d7c4b832e83948c894df49ee
|
@@ -47,7 +47,7 @@ begin
|
|
47
47
|
|
48
48
|
# The list will look something like ["ams01", "dal01", "dal05",...
|
49
49
|
# Let's put our server in the 'dal05' (Dallas 5) datacenter
|
50
|
-
server_order.datacenter = 'dal05'
|
50
|
+
server_order.datacenter = SoftLayer::Datacenter.datacenter_named 'dal05', client
|
51
51
|
|
52
52
|
# The order must know how many computing cores we want in our virtual
|
53
53
|
# server. Again we can ask the class for options. The result will
|
data/lib/softlayer/Account.rb
CHANGED
@@ -80,23 +80,21 @@ module SoftLayer
|
|
80
80
|
end
|
81
81
|
|
82
82
|
##
|
83
|
-
#
|
84
|
-
#
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
sl_dynamic_attr :virtual_servers do |virtual_servers|
|
89
|
-
virtual_servers.should_update? do
|
90
|
-
@last_virtual_server_update ||= Time.at(0)
|
91
|
-
(Time.now - @last_virtual_server_update) > 5 * 60 # update every 5 minutes
|
83
|
+
# Retrieve an account's master EVault user. This is only used when an account
|
84
|
+
# has an EVault service.
|
85
|
+
sl_dynamic_attr :evault_master_users do |evault_users|
|
86
|
+
evault_users.should_update? do
|
87
|
+
@evault_master_users == nil
|
92
88
|
end
|
93
89
|
|
94
|
-
|
95
|
-
|
96
|
-
|
90
|
+
evault_users.to_update do
|
91
|
+
evault_user_passwords = self.service.object_mask(AccountPassword.default_object_mask).getEvaultMasterUsers
|
92
|
+
evault_user_passwords.collect { |evault_user_password| AccountPassword.new(softlayer_client, evault_user_password) unless evault_user_password.empty? }.compact
|
97
93
|
end
|
98
94
|
end
|
99
95
|
|
96
|
+
##
|
97
|
+
# Retrieve an account's image templates
|
100
98
|
sl_dynamic_attr :image_templates do |image_templates|
|
101
99
|
image_templates.should_update? do
|
102
100
|
@last_image_template_update ||= Time.at(0)
|
@@ -109,6 +107,34 @@ module SoftLayer
|
|
109
107
|
end
|
110
108
|
end
|
111
109
|
|
110
|
+
##
|
111
|
+
# Retrieve an account's network message delivery acounts.
|
112
|
+
sl_dynamic_attr :network_message_delivery_accounts do |net_msg_deliv_accts|
|
113
|
+
net_msg_deliv_accts.should_update? do
|
114
|
+
@network_message_delivery_accounts == nil
|
115
|
+
end
|
116
|
+
|
117
|
+
net_msg_deliv_accts.to_update do
|
118
|
+
network_message_delivery_accounts = self.service.object_mask(NetworkMessageDelivery.default_object_mask).getNetworkMessageDeliveryAccounts
|
119
|
+
network_message_delivery_accounts.collect { |net_msg_deliv_acct| NetworkMessageDelivery.new(softlayer_client, net_msg_deliv_acct) unless net_msg_deliv_acct.empty? }.compact
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
##
|
124
|
+
# Retrieve an account's network storage groups.
|
125
|
+
sl_dynamic_attr :network_storage_groups do |net_stor_groups|
|
126
|
+
net_stor_groups.should_update? do
|
127
|
+
@network_storage_groups == nil
|
128
|
+
end
|
129
|
+
|
130
|
+
net_stor_groups.to_update do
|
131
|
+
network_storage_groups = self.service.object_mask(NetworkStorageGroup.default_object_mask).getNetworkStorageGroups
|
132
|
+
network_storage_groups.collect { |net_stor_group| NetworkStorageGroup.new(softlayer_client, net_stor_group) unless net_stor_group.empty? }.compact
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
##
|
137
|
+
# Retrieve an account's open tickets
|
112
138
|
sl_dynamic_attr :open_tickets do |open_tickets|
|
113
139
|
open_tickets.should_update? do
|
114
140
|
@last_open_tickets_update ||= Time.at(0)
|
@@ -122,6 +148,52 @@ module SoftLayer
|
|
122
148
|
end
|
123
149
|
end
|
124
150
|
|
151
|
+
##
|
152
|
+
# Retrieve an account's portal users.
|
153
|
+
sl_dynamic_attr :users do |users|
|
154
|
+
users.should_update? do
|
155
|
+
@users == nil
|
156
|
+
end
|
157
|
+
|
158
|
+
users.to_update do
|
159
|
+
account_users = self.service.object_mask(UserCustomer.default_object_mask).getUsers
|
160
|
+
account_users.collect { |account_user| UserCustomer.new(softlayer_client, account_user) unless account_user.empty? }.compact
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
##
|
165
|
+
# Retrieve an account's virtual disk images
|
166
|
+
sl_dynamic_attr :virtual_disk_images do |virtual_disk_images|
|
167
|
+
virtual_disk_images.should_update? do
|
168
|
+
@last_virtual_disk_images_update ||= Time.at(0)
|
169
|
+
(Time.now - @last_virtual_disk_images_update) > 5 * 60 # update every 5 minutes
|
170
|
+
end
|
171
|
+
|
172
|
+
virtual_disk_images.to_update do
|
173
|
+
@last_virtual_disk_images_update ||= Time.now
|
174
|
+
virtual_disk_images_data = self.service.object_mask(SoftLayer::VirtualDiskImage.default_object_mask).getVirtualDiskImages
|
175
|
+
virtual_disk_images_data.collect { |virtual_disk_image| SoftLayer::VirtualDiskImage.new(softlayer_client, virtual_disk_image) }
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
##
|
180
|
+
# The virtual servers (aka. CCIs or Virtual_Guests) associated with the
|
181
|
+
# account. Unless you force these to update, they will be refreshed every
|
182
|
+
# five minutes.
|
183
|
+
# :call-seq:
|
184
|
+
# virtual_servers(force_update=false)
|
185
|
+
sl_dynamic_attr :virtual_servers do |virtual_servers|
|
186
|
+
virtual_servers.should_update? do
|
187
|
+
@last_virtual_server_update ||= Time.at(0)
|
188
|
+
(Time.now - @last_virtual_server_update) > 5 * 60 # update every 5 minutes
|
189
|
+
end
|
190
|
+
|
191
|
+
virtual_servers.to_update do
|
192
|
+
@last_virtual_server_update = Time.now
|
193
|
+
VirtualServer.find_servers(:client => self.softlayer_client)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
125
197
|
def service
|
126
198
|
softlayer_client[:Account].object_with_id(self.id)
|
127
199
|
end
|
@@ -164,4 +236,4 @@ module SoftLayer
|
|
164
236
|
return self.bare_metal_servers + self.virtual_servers
|
165
237
|
end
|
166
238
|
end
|
167
|
-
end
|
239
|
+
end
|
@@ -0,0 +1,356 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2014 SoftLayer Technologies, Inc. All rights reserved.
|
3
|
+
#
|
4
|
+
# For licensing information see the LICENSE.md file in the project root.
|
5
|
+
#++
|
6
|
+
|
7
|
+
module SoftLayer
|
8
|
+
##
|
9
|
+
# Each SoftLayer AccountPassword instance provides information about
|
10
|
+
# a user's password associated with a SoftLayer Account instance.
|
11
|
+
#
|
12
|
+
# This class roughly corresponds to the entity SoftLayer_Account_Password
|
13
|
+
# in the API.
|
14
|
+
#
|
15
|
+
class AccountPassword < ModelBase
|
16
|
+
include ::SoftLayer::DynamicAttribute
|
17
|
+
|
18
|
+
##
|
19
|
+
# :attr_reader:
|
20
|
+
# A simple description of a username/password combination.
|
21
|
+
sl_attr :notes
|
22
|
+
|
23
|
+
##
|
24
|
+
# :attr_reader:
|
25
|
+
# The password portion of a username/password combination.
|
26
|
+
sl_attr :password
|
27
|
+
|
28
|
+
##
|
29
|
+
# :attr_reader:
|
30
|
+
# The username portion of a username/password combination.
|
31
|
+
sl_attr :username
|
32
|
+
|
33
|
+
##
|
34
|
+
# A description of the use for the account username/password combination.
|
35
|
+
sl_dynamic_attr :description do |resource|
|
36
|
+
resource.should_update? do
|
37
|
+
#only retrieved once per instance
|
38
|
+
@description == nil
|
39
|
+
end
|
40
|
+
|
41
|
+
resource.to_update do
|
42
|
+
type = self.service.getType
|
43
|
+
type['description']
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# Updates the notes for the current account password.
|
49
|
+
#
|
50
|
+
def notes=(notes)
|
51
|
+
self.service.editObject({ "notes" => notes.to_s })
|
52
|
+
self.refresh_details()
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Updates the password for the current account password.
|
57
|
+
#
|
58
|
+
def password=(password)
|
59
|
+
raise ArgumentError, "The new password cannot be nil" unless password
|
60
|
+
raise ArgumentError, "The new password cannot be empty" if password.empty?
|
61
|
+
|
62
|
+
self.service.editObject({ "password" => password.to_s })
|
63
|
+
self.refresh_details()
|
64
|
+
end
|
65
|
+
|
66
|
+
##
|
67
|
+
# Retrieve a list of network storage account passwords from all network storage devices.
|
68
|
+
#
|
69
|
+
# The options parameter should contain:
|
70
|
+
#
|
71
|
+
# <b>+:client+</b> - The client used to connect to the API
|
72
|
+
#
|
73
|
+
# If no client is given, then the routine will try to use Client.default_client
|
74
|
+
# If no client can be found the routine will raise an error.
|
75
|
+
#
|
76
|
+
# 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> (string) - Include network storage account passwords attached to this server type
|
81
|
+
# * <b>+:network_storage_type+</b> (string) - Include network storage account passwords from devices of this storage type
|
82
|
+
# * <b>+:tags+</b> (Array) - Include network storage account passwords from servers matching these tags
|
83
|
+
# * <b>+:username+</b> (string) - Include network storage account passwords with this username only
|
84
|
+
#
|
85
|
+
def self.find_network_storage_account_passwords(options_hash = {})
|
86
|
+
softlayer_client = options_hash[:client] || Client.default_client
|
87
|
+
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
88
|
+
|
89
|
+
if(options_hash.has_key? :network_storage_object_filter)
|
90
|
+
network_storage_object_filter = options_hash[:network_storage_object_filter]
|
91
|
+
raise "Expected an instance of SoftLayer::ObjectFilter" unless network_storage_object_filter.kind_of?(SoftLayer::ObjectFilter)
|
92
|
+
else
|
93
|
+
network_storage_object_filter = ObjectFilter.new()
|
94
|
+
end
|
95
|
+
|
96
|
+
if(options_hash.has_key? :account_password_object_filter)
|
97
|
+
account_password_object_filter = options_hash[:account_password_object_filter]
|
98
|
+
raise "Expected an instance of SoftLayer::ObjectFilter" unless account_password_object_filter.kind_of?(SoftLayer::ObjectFilter)
|
99
|
+
else
|
100
|
+
account_password_object_filter = ObjectFilter.new()
|
101
|
+
end
|
102
|
+
|
103
|
+
if options_hash.has_key?(:network_storage_server_type) && ! [ :hardware, :virtual_server ].include?(options_hash[:network_storage_server_type])
|
104
|
+
raise "Expected one of :hardware or :virtual_server for :network_storage_server_type option in #{__method__}"
|
105
|
+
end
|
106
|
+
|
107
|
+
filter_label = {
|
108
|
+
:evault => "evaultNetworkStorage",
|
109
|
+
:hardware => "hardware",
|
110
|
+
:hub => "hubNetworkStorage",
|
111
|
+
:iscsi => "iscsiNetworkStorage",
|
112
|
+
:lockbox => "lockboxNetworkStorage",
|
113
|
+
:nas => "nasNetworkStorage",
|
114
|
+
:network_storage => "networkStorage",
|
115
|
+
:virtual_server => "virtualGuest"
|
116
|
+
}
|
117
|
+
|
118
|
+
option_to_filter_path = {
|
119
|
+
:account_password => {
|
120
|
+
:username => "accountPassword.username"
|
121
|
+
},
|
122
|
+
:datacenter => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.datacenter.name' ].join },
|
123
|
+
:domain => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.domain' ].join },
|
124
|
+
:hostname => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.hostname' ].join },
|
125
|
+
:tags => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.tagReferences.tag.name' ].join }
|
126
|
+
}
|
127
|
+
|
128
|
+
if options_hash[:network_storage_type]
|
129
|
+
unless filter_label.select{|label,filter| filter.end_with?("Storage")}.keys.include?(options_hash[:network_storage_type])
|
130
|
+
raise "Expected :evault, :hub, :iscsi, :lockbox, :nas or :network_storage for option :network_storage_type in #{__method__}"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
if options_hash[:network_storage_server_type]
|
135
|
+
network_storage_type = options_hash[:network_storage_type] || :network_storage
|
136
|
+
|
137
|
+
[ :datacenter, :domain, :hostname ].each do |option|
|
138
|
+
if options_hash[option]
|
139
|
+
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])
|
141
|
+
end
|
142
|
+
end
|
143
|
+
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
|
+
end
|
156
|
+
|
157
|
+
option_to_filter_path[:account_password].each do |option, filter_path|
|
158
|
+
account_password_object_filter.modify { |filter| filter.accept(filter_path).when_it is(options_hash[option]) } if options_hash[option]
|
159
|
+
end
|
160
|
+
|
161
|
+
account_service = softlayer_client[:Account]
|
162
|
+
account_service = account_service.object_filter(network_storage_object_filter) unless network_storage_object_filter.empty?
|
163
|
+
account_service = account_service.object_mask("mask[id]")
|
164
|
+
|
165
|
+
case options_hash[:network_storage_type]
|
166
|
+
when :evault
|
167
|
+
network_storage_data = account_service.getEvaultNetworkStorage
|
168
|
+
when :hub
|
169
|
+
network_storage_data = account_service.getHubNetworkStorage
|
170
|
+
when :iscsi
|
171
|
+
network_storage_data = account_service.getIscsiNetworkStorage
|
172
|
+
when :lockbox
|
173
|
+
network_storage_data = account_service.getLockboxNetworkStorage
|
174
|
+
when :nas
|
175
|
+
network_storage_data = account_service.getNasNetworkStorage
|
176
|
+
when :network_storage, nil
|
177
|
+
network_storage_data = account_service.getNetworkStorage
|
178
|
+
end
|
179
|
+
|
180
|
+
account_passwords = network_storage_data.collect do |network_storage|
|
181
|
+
network_storage_service = softlayer_client[:Network_Storage].object_with_id(network_storage['id'])
|
182
|
+
network_storage_service = network_storage_service.object_filter(account_password_object_filter) unless account_password_object_filter.empty?
|
183
|
+
network_storage_service = network_storage_service.object_mask(AccountPassword.default_object_mask)
|
184
|
+
network_storage_service = network_storage_service.object_mask(options_hash[:account_password_object_mask]) if options_hash[:account_password_object_mask]
|
185
|
+
|
186
|
+
account_password_data = network_storage_service.getAccountPassword
|
187
|
+
AccountPassword.new(softlayer_client, account_password_data) unless account_password_data.empty?
|
188
|
+
end
|
189
|
+
|
190
|
+
account_passwords.compact
|
191
|
+
end
|
192
|
+
|
193
|
+
##
|
194
|
+
# Retrieve a list of network storage webcc passwords from all network storage devices.
|
195
|
+
#
|
196
|
+
# The options parameter should contain:
|
197
|
+
#
|
198
|
+
# <b>+:client+</b> - The client used to connect to the API
|
199
|
+
#
|
200
|
+
# If no client is given, then the routine will try to use Client.default_client
|
201
|
+
# If no client can be found the routine will raise an error.
|
202
|
+
#
|
203
|
+
# 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> (string) - Include network storage webcc passwords attached to this server type
|
208
|
+
# * <b>+:network_storage_type+</b> (string) - Include network storage webcc passwords from devices of this storage type
|
209
|
+
# * <b>+:tags+</b> (Array) - Include network storage webcc passwords from servers matching these tags
|
210
|
+
# * <b>+:username+</b> (string) - Include network storage webcc passwords with this username only
|
211
|
+
#
|
212
|
+
def self.find_network_storage_webcc_passwords(options_hash = {})
|
213
|
+
softlayer_client = options_hash[:client] || Client.default_client
|
214
|
+
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
215
|
+
|
216
|
+
if(options_hash.has_key? :network_storage_object_filter)
|
217
|
+
network_storage_object_filter = options_hash[:network_storage_object_filter]
|
218
|
+
raise "Expected an instance of SoftLayer::ObjectFilter" unless network_storage_object_filter.kind_of?(SoftLayer::ObjectFilter)
|
219
|
+
else
|
220
|
+
network_storage_object_filter = ObjectFilter.new()
|
221
|
+
end
|
222
|
+
|
223
|
+
if(options_hash.has_key? :webcc_password_object_filter)
|
224
|
+
webcc_password_object_filter = options_hash[:webcc_password_object_filter]
|
225
|
+
raise "Expected an instance of SoftLayer::ObjectFilter" unless webcc_password_object_filter.kind_of?(SoftLayer::ObjectFilter)
|
226
|
+
else
|
227
|
+
webcc_password_object_filter = ObjectFilter.new()
|
228
|
+
end
|
229
|
+
|
230
|
+
if options_hash.has_key?(:network_storage_server_type) && ! [ :hardware, :virtual_server ].include?(options_hash[:network_storage_server_type])
|
231
|
+
raise "Expected one of :hardware or :virtual_server for :network_storage_server_type option in #{__method__}"
|
232
|
+
end
|
233
|
+
|
234
|
+
filter_label = {
|
235
|
+
:evault => "evaultNetworkStorage",
|
236
|
+
:hardware => "hardware",
|
237
|
+
:hub => "hubNetworkStorage",
|
238
|
+
:iscsi => "iscsiNetworkStorage",
|
239
|
+
:lockbox => "lockboxNetworkStorage",
|
240
|
+
:nas => "nasNetworkStorage",
|
241
|
+
:network_storage => "networkStorage",
|
242
|
+
:virtual_server => "virtualGuest"
|
243
|
+
}
|
244
|
+
|
245
|
+
option_to_filter_path = {
|
246
|
+
:datacenter => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.datacenter.name' ].join },
|
247
|
+
:domain => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.domain' ].join },
|
248
|
+
:hostname => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.hostname' ].join },
|
249
|
+
:tags => lambda { |storage_type, server_type| return [ filter_label[storage_type], '.', filter_label[server_type], '.tagReferences.tag.name' ].join },
|
250
|
+
:webcc_password => {
|
251
|
+
:username => "webccAccount.username"
|
252
|
+
}
|
253
|
+
}
|
254
|
+
|
255
|
+
if options_hash[:network_storage_type]
|
256
|
+
unless filter_label.select{|label,filter| filter.end_with?("Storage")}.keys.include?(options_hash[:network_storage_type])
|
257
|
+
raise "Expected :evault, :hub, :iscsi, :lockbox, :nas or :network_storage for option :network_storage_type in #{__method__}"
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
if options_hash[:network_storage_server_type]
|
262
|
+
network_storage_type = options_hash[:network_storage_type] || :network_storage
|
263
|
+
|
264
|
+
[ :datacenter, :domain, :hostname ].each do |option|
|
265
|
+
if options_hash[option]
|
266
|
+
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])
|
268
|
+
end
|
269
|
+
end
|
270
|
+
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
|
+
end
|
283
|
+
|
284
|
+
option_to_filter_path[:webcc_password].each do |option, filter_path|
|
285
|
+
webcc_password_object_filter.modify { |filter| filter.accept(filter_path).when_it is(options_hash[option]) } if options_hash[option]
|
286
|
+
end
|
287
|
+
|
288
|
+
account_service = softlayer_client[:Account]
|
289
|
+
account_service = account_service.object_filter(network_storage_object_filter) unless network_storage_object_filter.empty?
|
290
|
+
account_service = account_service.object_mask("mask[id]")
|
291
|
+
|
292
|
+
case options_hash[:network_storage_type]
|
293
|
+
when :evault
|
294
|
+
network_storage_data = account_service.getEvaultNetworkStorage
|
295
|
+
when :hub
|
296
|
+
network_storage_data = account_service.getHubNetworkStorage
|
297
|
+
when :iscsi
|
298
|
+
network_storage_data = account_service.getIscsiNetworkStorage
|
299
|
+
when :lockbox
|
300
|
+
network_storage_data = account_service.getLockboxNetworkStorage
|
301
|
+
when :nas
|
302
|
+
network_storage_data = account_service.getNasNetworkStorage
|
303
|
+
when :network_storage, nil
|
304
|
+
network_storage_data = account_service.getNetworkStorage
|
305
|
+
end
|
306
|
+
|
307
|
+
webcc_passwords = network_storage_data.collect do |network_storage|
|
308
|
+
network_storage_service = softlayer_client[:Network_Storage].object_with_id(network_storage['id'])
|
309
|
+
network_storage_service = network_storage_service.object_filter(webcc_password_object_filter) unless webcc_password_object_filter.empty?
|
310
|
+
network_storage_service = network_storage_service.object_mask(AccountPassword.default_object_mask)
|
311
|
+
network_storage_service = network_storage_service.object_mask(options_hash[:webcc_password_object_mask]) if options_hash[:webcc_password_object_mask]
|
312
|
+
|
313
|
+
webcc_password_data = network_storage_service.getWebccAccount
|
314
|
+
AccountPassword.new(softlayer_client, webcc_password_data) unless webcc_password_data.empty?
|
315
|
+
end
|
316
|
+
|
317
|
+
webcc_passwords.compact
|
318
|
+
end
|
319
|
+
|
320
|
+
##
|
321
|
+
# Returns the service for interacting with this account password through the network API
|
322
|
+
#
|
323
|
+
def service
|
324
|
+
softlayer_client[:Account_Password].object_with_id(self.id)
|
325
|
+
end
|
326
|
+
|
327
|
+
##
|
328
|
+
# Make an API request to SoftLayer and return the latest properties hash
|
329
|
+
# for this object.
|
330
|
+
#
|
331
|
+
def softlayer_properties(object_mask = nil)
|
332
|
+
my_service = self.service
|
333
|
+
|
334
|
+
if(object_mask)
|
335
|
+
my_service = my_service.object_mask(object_mask)
|
336
|
+
else
|
337
|
+
my_service = my_service.object_mask(self.class.default_object_mask)
|
338
|
+
end
|
339
|
+
|
340
|
+
my_service.getObject()
|
341
|
+
end
|
342
|
+
|
343
|
+
protected
|
344
|
+
|
345
|
+
def self.default_object_mask
|
346
|
+
{
|
347
|
+
"mask(SoftLayer_Account_Password)" => [
|
348
|
+
'id',
|
349
|
+
'notes',
|
350
|
+
'password',
|
351
|
+
'username'
|
352
|
+
]
|
353
|
+
}.to_sl_object_mask
|
354
|
+
end
|
355
|
+
end
|
356
|
+
end #SoftLayer
|