softlayer_api 3.0.0 → 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,77 @@
|
|
1
|
+
module SoftLayer
|
2
|
+
##
|
3
|
+
# Each SoftLayer NetworkStorageAllowedHost instance provides information about
|
4
|
+
# a hosts allowed access to a storage product group.
|
5
|
+
#
|
6
|
+
# This class roughly corresponds to the entity SoftLayer_Network_Storage_Allowed_Host
|
7
|
+
# in the API.
|
8
|
+
#
|
9
|
+
class NetworkStorageAllowedHost < ModelBase
|
10
|
+
include ::SoftLayer::DynamicAttribute
|
11
|
+
|
12
|
+
##
|
13
|
+
# :attr_reader:
|
14
|
+
# The name of allowed host, usually an IQN or other identifier
|
15
|
+
sl_attr :name
|
16
|
+
|
17
|
+
##
|
18
|
+
# The NetworkStorageGroup instances assigned to this host
|
19
|
+
sl_dynamic_attr :assigned_groups do |resource|
|
20
|
+
resource.should_update? do
|
21
|
+
#only retrieved once per instance
|
22
|
+
@assigned_groups == nil
|
23
|
+
end
|
24
|
+
|
25
|
+
resource.to_update do
|
26
|
+
assigned_groups = self.service.object_mask(NetworkStorageGroup.default_object_mask).getAssignedGroups
|
27
|
+
assigned_groups.collect { |assigned_group| NetworkStorageGroup.new(softlayer_client, assigned_group) unless assigned_group.empty? }.compact
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# The NetworkStorage instances assigned to this host
|
33
|
+
sl_dynamic_attr :assigned_volumes do |resource|
|
34
|
+
resource.should_update? do
|
35
|
+
#only retrieved once per instance
|
36
|
+
@assigned_volumes == nil
|
37
|
+
end
|
38
|
+
|
39
|
+
resource.to_update do
|
40
|
+
assigned_volumes = self.service.object_mask(NetworkStorage.default_object_mask).getAssignedVolumes
|
41
|
+
assigned_volumes.collect { |assigned_volume| NetworkStorage.new(softlayer_client, assigned_volume) unless assigned_volume.empty? }.compact
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
##
|
46
|
+
# The NetworkStorageCredential instance used to access NetworkStorage for this host
|
47
|
+
sl_dynamic_attr :credential do |resource|
|
48
|
+
resource.should_update? do
|
49
|
+
#only retrieved once per instance
|
50
|
+
@credential == nil
|
51
|
+
end
|
52
|
+
|
53
|
+
resource.to_update do
|
54
|
+
credential = self.service.object_mask(NetworkStorageCredential.default_object_mask).getCredential
|
55
|
+
NetworkStorageCredential.new(softlayer_client, credential) unless credential.empty?
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
##
|
60
|
+
# Returns the service for interacting with this network storage through the network API
|
61
|
+
#
|
62
|
+
def service
|
63
|
+
softlayer_client[:Network_Storage_Allowed_Host].object_with_id(self.id)
|
64
|
+
end
|
65
|
+
|
66
|
+
protected
|
67
|
+
|
68
|
+
def self.default_object_mask
|
69
|
+
{
|
70
|
+
"mask(SoftLayer_Network_Storage_Allowed_Host)" => [
|
71
|
+
'id',
|
72
|
+
'name'
|
73
|
+
]
|
74
|
+
}.to_sl_object_mask
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end #SoftLayer
|
@@ -0,0 +1,204 @@
|
|
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 NetworkStorageCredential instance provides information
|
10
|
+
# on a username/password credential combination used to access a specific
|
11
|
+
# Network Storage.
|
12
|
+
#
|
13
|
+
# This class roughly corresponds to the entity SoftLayer_Network_Storage_Credential
|
14
|
+
# in the API.
|
15
|
+
#
|
16
|
+
class NetworkStorageCredential < ModelBase
|
17
|
+
include ::SoftLayer::DynamicAttribute
|
18
|
+
|
19
|
+
##
|
20
|
+
# :attr_reader:
|
21
|
+
# This is the data that the record was created in the table.
|
22
|
+
sl_attr :created, 'createDate'
|
23
|
+
|
24
|
+
##
|
25
|
+
# :attr_reader:
|
26
|
+
# This is the date that the record was last updated in the table.
|
27
|
+
sl_attr :modified, 'modifyDate'
|
28
|
+
|
29
|
+
##
|
30
|
+
# :attr_reader:
|
31
|
+
# This is the password associated with the volume.
|
32
|
+
sl_attr :password
|
33
|
+
|
34
|
+
##
|
35
|
+
# :attr_reader:
|
36
|
+
# This is the username associated with the volume.
|
37
|
+
sl_attr :username
|
38
|
+
|
39
|
+
##
|
40
|
+
# Returns a description of the Network Storage Credential type
|
41
|
+
#
|
42
|
+
def description
|
43
|
+
self['type']['description']
|
44
|
+
end
|
45
|
+
|
46
|
+
##
|
47
|
+
# Returns the name of the Network Storage Credential type
|
48
|
+
#
|
49
|
+
def name
|
50
|
+
self['type']['name']
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# Retrieve a list of network storage credentials from all network storage devices.
|
55
|
+
#
|
56
|
+
# The options parameter should contain:
|
57
|
+
#
|
58
|
+
# <b>+:client+</b> - The client used to connect to the API
|
59
|
+
#
|
60
|
+
# If no client is given, then the routine will try to use Client.default_client
|
61
|
+
# If no client can be found the routine will raise an error.
|
62
|
+
#
|
63
|
+
# 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
|
72
|
+
#
|
73
|
+
def self.find_network_storage_credentials(options_hash = {})
|
74
|
+
softlayer_client = options_hash[:client] || Client.default_client
|
75
|
+
raise "#{__method__} requires a client but none was given and Client::default_client is not set" if !softlayer_client
|
76
|
+
|
77
|
+
if(options_hash.has_key? :network_storage_object_filter)
|
78
|
+
network_storage_object_filter = options_hash[:network_storage_object_filter]
|
79
|
+
raise "Expected an instance of SoftLayer::ObjectFilter" unless network_storage_object_filter.kind_of?(SoftLayer::ObjectFilter)
|
80
|
+
else
|
81
|
+
network_storage_object_filter = ObjectFilter.new()
|
82
|
+
end
|
83
|
+
|
84
|
+
if(options_hash.has_key? :network_storage_credential_object_filter)
|
85
|
+
network_storage_credential_object_filter = options_hash[:network_storage_credential_object_filter]
|
86
|
+
raise "Expected an instance of SoftLayer::ObjectFilter" unless network_storage_credential_object_filter.kind_of?(SoftLayer::ObjectFilter)
|
87
|
+
else
|
88
|
+
network_storage_credential_object_filter = ObjectFilter.new()
|
89
|
+
end
|
90
|
+
|
91
|
+
if options_hash.has_key?(:network_storage_server_type) && ! [ :hardware, :virtual_server ].include?(options_hash[:network_storage_server_type])
|
92
|
+
raise "Expected one of :hardware or :virtual_server for :network_storage_server_type option in #{__method__}"
|
93
|
+
end
|
94
|
+
|
95
|
+
filter_label = {
|
96
|
+
:evault => "evaultNetworkStorage",
|
97
|
+
:hardware => "hardware",
|
98
|
+
:hub => "hubNetworkStorage",
|
99
|
+
:iscsi => "iscsiNetworkStorage",
|
100
|
+
:lockbox => "lockboxNetworkStorage",
|
101
|
+
:nas => "nasNetworkStorage",
|
102
|
+
:network_storage => "networkStorage",
|
103
|
+
:virtual_server => "virtualGuest"
|
104
|
+
}
|
105
|
+
|
106
|
+
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 },
|
112
|
+
:network_storage_credential => {
|
113
|
+
:username => "credentials.username"
|
114
|
+
}
|
115
|
+
}
|
116
|
+
|
117
|
+
if options_hash[:network_storage_type]
|
118
|
+
unless filter_label.select{|label,filter| filter.end_with?("Storage")}.keys.include?(options_hash[:network_storage_type])
|
119
|
+
raise "Expected :evault, :hub, :iscsi, :lockbox, :nas or :network_storage for option :network_storage_type in #{__method__}"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
network_storage_type = options_hash[:network_storage_type] || :network_storage
|
124
|
+
|
125
|
+
if options_hash[:service]
|
126
|
+
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])
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
if options_hash[:network_storage_server_type]
|
132
|
+
[ :datacenter, :domain, :hostname ].each do |option|
|
133
|
+
if options_hash[option]
|
134
|
+
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])
|
136
|
+
end
|
137
|
+
end
|
138
|
+
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
|
+
end
|
151
|
+
|
152
|
+
option_to_filter_path[:network_storage_credential].each do |option, filter_path|
|
153
|
+
network_storage_credential_object_filter.modify { |filter| filter.accept(filter_path).when_it is(options_hash[option]) } if options_hash[option]
|
154
|
+
end
|
155
|
+
|
156
|
+
account_service = softlayer_client[:Account]
|
157
|
+
account_service = account_service.object_filter(network_storage_object_filter) unless network_storage_object_filter.empty?
|
158
|
+
account_service = account_service.object_mask("mask[id]")
|
159
|
+
|
160
|
+
case options_hash[:network_storage_type]
|
161
|
+
when :evault
|
162
|
+
network_storage_data = account_service.getEvaultNetworkStorage
|
163
|
+
when :hub
|
164
|
+
network_storage_data = account_service.getHubNetworkStorage
|
165
|
+
when :iscsi
|
166
|
+
network_storage_data = account_service.getIscsiNetworkStorage
|
167
|
+
when :lockbox
|
168
|
+
network_storage_data = account_service.getLockboxNetworkStorage
|
169
|
+
when :nas
|
170
|
+
network_storage_data = account_service.getNasNetworkStorage
|
171
|
+
when :network_storage, nil
|
172
|
+
network_storage_data = account_service.getNetworkStorage
|
173
|
+
end
|
174
|
+
|
175
|
+
network_storage_credentials = network_storage_data.collect do |network_storage|
|
176
|
+
network_storage_service = softlayer_client[:Network_Storage].object_with_id(network_storage['id'])
|
177
|
+
network_storage_service = network_storage_service.object_filter(network_storage_credential_object_filter) unless network_storage_credential_object_filter.empty?
|
178
|
+
network_storage_service = network_storage_service.object_mask(NetworkStorageCredential.default_object_mask)
|
179
|
+
network_storage_service = network_storage_service.object_mask(options_hash[:network_storage_credential_object_mask]) if options_hash[:network_storage_credential_object_mask]
|
180
|
+
|
181
|
+
network_storage_credentials_data = network_storage_service.getCredentials
|
182
|
+
network_storage_credentials_data.map { |credential| NetworkStorageCredential.new(softlayer_client, credential) unless credential.empty? }.compact
|
183
|
+
end
|
184
|
+
|
185
|
+
network_storage_credentials.flatten
|
186
|
+
end
|
187
|
+
|
188
|
+
protected
|
189
|
+
|
190
|
+
def self.default_object_mask
|
191
|
+
{
|
192
|
+
"mask(SoftLayer_Network_Storage_Credential)" => [
|
193
|
+
'createDate',
|
194
|
+
'id',
|
195
|
+
'modifyDate',
|
196
|
+
'password',
|
197
|
+
'type.description',
|
198
|
+
'type.name',
|
199
|
+
'username'
|
200
|
+
]
|
201
|
+
}.to_sl_object_mask
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end #SoftLayer
|
@@ -0,0 +1,159 @@
|
|
1
|
+
module SoftLayer
|
2
|
+
##
|
3
|
+
# Each SoftLayer NetworkStorageGroup instance provides information about
|
4
|
+
# a storage product group and hosts allowed access.
|
5
|
+
#
|
6
|
+
# This class roughly corresponds to the entity SoftLayer_Network_Storage_Group
|
7
|
+
# in the API.
|
8
|
+
#
|
9
|
+
class NetworkStorageGroup < ModelBase
|
10
|
+
include ::SoftLayer::DynamicAttribute
|
11
|
+
|
12
|
+
##
|
13
|
+
# :attr_reader:
|
14
|
+
# The friendly name of this group
|
15
|
+
sl_attr :alias
|
16
|
+
|
17
|
+
##
|
18
|
+
# :attr_reader:
|
19
|
+
# The date this group was created.
|
20
|
+
sl_attr :created, 'createDate'
|
21
|
+
|
22
|
+
##
|
23
|
+
# :attr_reader:
|
24
|
+
# The date this group was modified.
|
25
|
+
sl_attr :modified, 'modifyDate'
|
26
|
+
|
27
|
+
##
|
28
|
+
# The SoftLayer_Account which owns this group.
|
29
|
+
sl_dynamic_attr :account do |resource|
|
30
|
+
resource.should_update? do
|
31
|
+
#only retrieved once per instance
|
32
|
+
@account == nil
|
33
|
+
end
|
34
|
+
|
35
|
+
resource.to_update do
|
36
|
+
account = self.service.getAccount
|
37
|
+
Account.new(softlayer_client, account) unless account.empty?
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# The allowed hosts list for this group.
|
43
|
+
sl_dynamic_attr :allowed_hosts do |resource|
|
44
|
+
resource.should_update? do
|
45
|
+
#only retrieved once per instance
|
46
|
+
@allowed_hosts == nil
|
47
|
+
end
|
48
|
+
|
49
|
+
resource.to_update do
|
50
|
+
allowed_hosts = self.service.object_mask(NetworkStorageAllowedHost.default_object_mask).getAllowedHosts
|
51
|
+
allowed_hosts.collect { |allowed_host| NetworkStorageAllowedHost.new(softlayer_client, allowed_host) unless allowed_host.empty? }.compact
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# The network storage volumes this group is attached to.
|
57
|
+
sl_dynamic_attr :attached_volumes do |resource|
|
58
|
+
resource.should_update? do
|
59
|
+
#only retrieved once per instance
|
60
|
+
@attached_volumes == nil
|
61
|
+
end
|
62
|
+
|
63
|
+
resource.to_update do
|
64
|
+
attached_volumes = self.service.object_mask(NetworkStorage.default_object_mask).getAttachedVolumes
|
65
|
+
attached_volumes.collect { |attached_volume| NetworkStorage.new(softlayer_client, attached_volume) unless attached_volume.empty? }.compact
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# The IP address for for SoftLayer_Network_Storage_Allowed_Host objects within this group.
|
71
|
+
sl_dynamic_attr :ip_address do |resource|
|
72
|
+
resource.should_update? do
|
73
|
+
#only retrieved once per instance
|
74
|
+
@ip_address == nil
|
75
|
+
end
|
76
|
+
|
77
|
+
resource.to_update do
|
78
|
+
network_connection_details = self.service.getNetworkConnectionDetails
|
79
|
+
network_connection_details["ipAddress"] unless network_connection_details.empty?
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
##
|
84
|
+
# The description of theSoftLayer_Network_Storage_OS_Type Operating System designation that this group was created for.
|
85
|
+
sl_dynamic_attr :os_description do |resource|
|
86
|
+
resource.should_update? do
|
87
|
+
#only retrieved once per instance
|
88
|
+
@os_description == nil
|
89
|
+
end
|
90
|
+
|
91
|
+
resource.to_update do
|
92
|
+
os_type = self.service.getOsType
|
93
|
+
os_type["description"] unless os_type.empty?
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
##
|
98
|
+
# The name of theSoftLayer_Network_Storage_OS_Type Operating System designation that this group was created for.
|
99
|
+
sl_dynamic_attr :os_name do |resource|
|
100
|
+
resource.should_update? do
|
101
|
+
#only retrieved once per instance
|
102
|
+
@os_name == nil
|
103
|
+
end
|
104
|
+
|
105
|
+
resource.to_update do
|
106
|
+
os_type = self.service.getOsType
|
107
|
+
os_type["name"] unless os_type.empty?
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
##
|
112
|
+
# The network resource this group is created on.
|
113
|
+
sl_dynamic_attr :service_resource do |resource|
|
114
|
+
resource.should_update? do
|
115
|
+
#only retrieved once per instance
|
116
|
+
@service_resource == nil
|
117
|
+
end
|
118
|
+
|
119
|
+
resource.to_update do
|
120
|
+
service_resource = self.service.object_mask(NetworkService.default_object_mask).getServiceResource
|
121
|
+
NetworkService.new(softlayer_client, service_resource) unless service_resource.empty?
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
##
|
126
|
+
# The name of the SoftLayer_Network_Storage_Group_Type which describes this group.
|
127
|
+
sl_dynamic_attr :type do |resource|
|
128
|
+
resource.should_update? do
|
129
|
+
#only retrieved once per instance
|
130
|
+
@type == nil
|
131
|
+
end
|
132
|
+
|
133
|
+
resource.to_update do
|
134
|
+
group_type = self.service.getGroupType
|
135
|
+
group_type["name"]
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
##
|
140
|
+
# Returns the service for interacting with this network storage through the network API
|
141
|
+
#
|
142
|
+
def service
|
143
|
+
softlayer_client[:Network_Storage_Group].object_with_id(self.id)
|
144
|
+
end
|
145
|
+
|
146
|
+
protected
|
147
|
+
|
148
|
+
def self.default_object_mask
|
149
|
+
{
|
150
|
+
"mask(SoftLayer_Network_Storage_Group)" => [
|
151
|
+
'alias',
|
152
|
+
'createDate',
|
153
|
+
'id',
|
154
|
+
'modifyDate'
|
155
|
+
]
|
156
|
+
}.to_sl_object_mask
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end #SoftLayer
|
@@ -10,21 +10,26 @@ module SoftLayer
|
|
10
10
|
# the product order is the price_id, the rest of the information is provided
|
11
11
|
# to make the object friendly to humans who may be searching for the
|
12
12
|
# meaning of a given price_id.
|
13
|
-
class ProductConfigurationOption < Struct.new(:
|
14
|
-
:oneTimeFee, :
|
13
|
+
class ProductConfigurationOption < Struct.new(:capacity, :capacityRestrictionMaximum, :capacityRestrictionMinimum,
|
14
|
+
:capacityRestrictionType, :description, :hourlyRecurringFee, :laborFee, :oneTimeFee, :price_id, :recurringFee,
|
15
|
+
:requiredCoreCount, :setupFee, :units)
|
15
16
|
# Is it evil, or just incongruous to give methods to a struct?
|
16
17
|
|
17
18
|
def initialize(package_item_data, price_item_data)
|
19
|
+
self.capacity = package_item_data['capacity']
|
18
20
|
self.description = package_item_data['description']
|
19
|
-
self.
|
20
|
-
self.units = package_item_data['units']
|
21
|
+
self.units = package_item_data['units']
|
21
22
|
|
22
|
-
self.
|
23
|
-
self.
|
24
|
-
self.
|
25
|
-
self.
|
26
|
-
self.
|
27
|
-
self.
|
23
|
+
self.capacityRestrictionMaximum = price_item_data['capacityRestrictionMaximum'] ? price_item_data['capacityRestrictionMaximum'] : nil
|
24
|
+
self.capacityRestrictionMinimum = price_item_data['capacityRestrictionMinimum'] ? price_item_data['capacityRestrictionMinimum'] : nil
|
25
|
+
self.capacityRestrictionType = price_item_data['capacityRestrictionType'] ? price_item_data['capacityRestrictionType'] : nil
|
26
|
+
self.hourlyRecurringFee = price_item_data['hourlyRecurringFee'] ? price_item_data['hourlyRecurringFee'].to_f : 0.0
|
27
|
+
self.laborFee = price_item_data['laborFee'] ? price_item_data['laborFee'].to_f : 0.0
|
28
|
+
self.oneTimeFee = price_item_data['oneTimeFee'] ? price_item_data['oneTimeFee'].to_f : 0.0
|
29
|
+
self.price_id = price_item_data['id']
|
30
|
+
self.recurringFee = price_item_data['recurringFee'] ? price_item_data['recurringFee'].to_f : 0.0
|
31
|
+
self.requiredCoreCount = price_item_data['requiredCoreCount'] ? price_item_data['requiredCoreCount'] : nil
|
32
|
+
self.setupFee = price_item_data['setupFee'] ? price_item_data['setupFee'].to_f : 0.0
|
28
33
|
end
|
29
34
|
|
30
35
|
# returns true if the configurtion option has no fees associated with it.
|
@@ -121,4 +126,4 @@ module SoftLayer
|
|
121
126
|
return @is_required
|
122
127
|
end
|
123
128
|
end
|
124
|
-
end
|
129
|
+
end
|