fog-softlayer 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.editorconfig +15 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +5 -0
- data/examples/compute.md +18 -0
- data/examples/storage.md +17 -0
- data/lib/fog/softlayer/compute.rb +1 -0
- data/lib/fog/softlayer/models/compute/server.rb +61 -8
- data/lib/fog/softlayer/models/compute/servers.rb +4 -0
- data/lib/fog/softlayer/models/storage/directory.rb +4 -1
- data/lib/fog/softlayer/network.rb +1 -1
- data/lib/fog/softlayer/requests/compute/get_available_preset_codes.rb +40 -0
- data/lib/fog/softlayer/storage.rb +23 -11
- data/lib/fog/softlayer/version.rb +1 -1
- data/tests/softlayer/models/storage/directory_tests.rb +15 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8e974e2bd69d7a85f5f75c30c58aab63c5feb4a
|
4
|
+
data.tar.gz: 62a6c43e1da9592ba070e14269429a49e44c1afb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 567acc968851f508de336f89b888cdee138d061a365bec496d8f3b452321c0d0eaa9c9dfdd9d32c359fff754981a034bc0020d3e1aa5a06c8fb21b6571329919
|
7
|
+
data.tar.gz: ef12acaa5e16d13049045aa31b59371542bdbfcabbd68694251b763fb0f46dbc17a59810f06d2c1add38db8b074d8d434c2b2a20b97323fd596be3fd8ff36a17
|
data/.editorconfig
ADDED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/examples/compute.md
CHANGED
@@ -150,6 +150,24 @@ If you are unfamiliar with fog, we recommend reading our [getting started](getti
|
|
150
150
|
@sl.servers.create(opts)
|
151
151
|
new_server.id # => 1338
|
152
152
|
```
|
153
|
+
|
154
|
+
1. Provision a *preset* Bare Metal instance (instant provisioning).
|
155
|
+
1. First get a list of available preset configuration keys:
|
156
|
+
|
157
|
+
```ruby
|
158
|
+
|
159
|
+
```
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
opts = {
|
163
|
+
:domain => 'example.com',
|
164
|
+
:name => 'my-test',
|
165
|
+
:flavor_id => 'm1.small',
|
166
|
+
:fixed_configuration_preset => '50_128GB_4X800GBSSD_RAID10',
|
167
|
+
:os_code => 'UBUNTU_LATEST',
|
168
|
+
:datacenter => 'wdc01'
|
169
|
+
}
|
170
|
+
```
|
153
171
|
|
154
172
|
1. Provision a new VM without flavor.
|
155
173
|
|
data/examples/storage.md
CHANGED
@@ -10,6 +10,23 @@ If you are unfamiliar with fog, we recommend reading our [getting started](getti
|
|
10
10
|
@sl = Fog::Storage[:softlayer]
|
11
11
|
```
|
12
12
|
|
13
|
+
#### Create a connection within a Bluemix Application to Bluemix v1 Object Storage
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
require 'fog/softlayer'
|
17
|
+
objstor_service = JSON.parse(ENV['VCAP_SERVICES'])["objectstorage"].first["credentials"]
|
18
|
+
bluemix_app_name = JSON.parse(ENV["VCAP_APPLICATION"])["name"]
|
19
|
+
|
20
|
+
@sl = Fog::Storage.new({
|
21
|
+
:provider => 'softlayer',
|
22
|
+
:softlayer_username => objstor_service['username'].to_s,
|
23
|
+
:softlayer_api_key => objstor_service['password'].to_s,
|
24
|
+
:softlayer_storage_account => bluemix_app_name,
|
25
|
+
:softlayer_bluemix_objstor_auth_url => objstor_service['auth_uri'].to_s,
|
26
|
+
:softlayer_cluster => 'dal05'
|
27
|
+
})
|
28
|
+
```
|
29
|
+
|
13
30
|
#### Use the Models
|
14
31
|
1. List directories/containers.
|
15
32
|
|
@@ -48,6 +48,7 @@ module Fog
|
|
48
48
|
request :describe_tags
|
49
49
|
request :generate_bare_metal_order_template
|
50
50
|
request :generate_virtual_guest_order_template
|
51
|
+
request :get_available_preset_codes
|
51
52
|
request :get_bare_metal_active_tickets
|
52
53
|
request :get_bare_metal_create_options
|
53
54
|
request :get_bare_metal_server
|
@@ -29,6 +29,7 @@ module Fog
|
|
29
29
|
attribute :ephemeral_storage, :aliases => 'localDiskFlag'
|
30
30
|
attribute :key_pairs, :aliases => 'sshKeys'
|
31
31
|
attribute :network_components
|
32
|
+
attribute :fixed_configuration_preset, :aliases => 'fixedConfigurationPreset'
|
32
33
|
|
33
34
|
# Times
|
34
35
|
attribute :created_at, :aliases => ['createDate', 'provisionDate'], :type => :time
|
@@ -121,6 +122,7 @@ module Fog
|
|
121
122
|
|
122
123
|
def pre_save
|
123
124
|
extract_flavor
|
125
|
+
self.bare_metal = true if attributes[:fixed_configuration_preset] and not bare_metal?
|
124
126
|
validate_attributes
|
125
127
|
if self.vlan
|
126
128
|
attributes[:vlan] = { :networkVlan => { :id => self.vlan.id } }
|
@@ -139,6 +141,10 @@ module Fog
|
|
139
141
|
end
|
140
142
|
end
|
141
143
|
|
144
|
+
if attributes[:fixed_configuration_preset].is_a? String
|
145
|
+
attributes[:fixedConfigurationPreset] = {:keyName => attributes.delete(:fixed_configuration_preset)}
|
146
|
+
end
|
147
|
+
|
142
148
|
remap_attributes(attributes, attributes_mapping)
|
143
149
|
clean_attributes
|
144
150
|
end
|
@@ -343,7 +349,7 @@ module Fog
|
|
343
349
|
copy = self.dup
|
344
350
|
copy.pre_save
|
345
351
|
|
346
|
-
data = if bare_metal?
|
352
|
+
data = if copy.bare_metal?
|
347
353
|
service.create_bare_metal_server(copy.attributes).body
|
348
354
|
else
|
349
355
|
service.create_vm(copy.attributes).body.first
|
@@ -384,10 +390,49 @@ module Fog
|
|
384
390
|
def generate_order_template
|
385
391
|
copy = self.dup
|
386
392
|
copy.pre_save
|
387
|
-
return service.generate_bare_metal_order_template(copy.attributes).body if bare_metal?
|
393
|
+
return service.generate_bare_metal_order_template(copy.attributes).body if copy.bare_metal?
|
388
394
|
service.generate_virtual_guest_order_template(copy.attributes).body
|
389
395
|
end
|
390
396
|
|
397
|
+
def wait_for_id(timeout=14400, delay=30)
|
398
|
+
# Cannot use self.wait_for because it calls reload which requires
|
399
|
+
# self.id which is not initially available for bare metal.
|
400
|
+
filterStr = Fog::JSON.encode({
|
401
|
+
"hardware" => {
|
402
|
+
"hostname" => {
|
403
|
+
"operation" => self.name,
|
404
|
+
},
|
405
|
+
"domain" => {
|
406
|
+
"operation" => self.domain,
|
407
|
+
},
|
408
|
+
"globalIdentifier" => {
|
409
|
+
"operation" => self.uid,
|
410
|
+
},
|
411
|
+
}
|
412
|
+
})
|
413
|
+
|
414
|
+
Fog.wait_for(timeout, delay) do
|
415
|
+
res = service.request(:account, 'getHardware', :query => {
|
416
|
+
:objectMask => 'mask[id,fullyQualifiedDomainName,provisionDate,hardwareStatus,lastTransaction[elapsedSeconds,transactionStatus[friendlyName]],operatingSystem[id,passwords[password,username]]]',
|
417
|
+
:objectFilter => filterStr,
|
418
|
+
})
|
419
|
+
|
420
|
+
server = res.body.first
|
421
|
+
|
422
|
+
yield server if block_given?
|
423
|
+
|
424
|
+
if server and server["provisionDate"]
|
425
|
+
attributes[:id] = server['id']
|
426
|
+
true
|
427
|
+
else
|
428
|
+
false
|
429
|
+
end
|
430
|
+
end
|
431
|
+
|
432
|
+
self.reload
|
433
|
+
true
|
434
|
+
end
|
435
|
+
|
391
436
|
private
|
392
437
|
|
393
438
|
def network_connection
|
@@ -455,7 +500,8 @@ module Fog
|
|
455
500
|
:cpu => :processorCoreAmount,
|
456
501
|
:ram => :memoryCapacity,
|
457
502
|
:disk => :hardDrives,
|
458
|
-
:bare_metal => :bareMetalInstanceFlag
|
503
|
+
:bare_metal => :bareMetalInstanceFlag,
|
504
|
+
:fixed_configuration_preset => :fixedConfigurationPreset,
|
459
505
|
}
|
460
506
|
else
|
461
507
|
{
|
@@ -470,12 +516,13 @@ module Fog
|
|
470
516
|
end
|
471
517
|
|
472
518
|
def bare_metal=(set)
|
519
|
+
return @bare_metal if set == @bare_metal
|
473
520
|
raise Exception, "Bare metal flag has already been set" unless @bare_metal.nil?
|
474
521
|
@bare_metal = case set
|
475
522
|
when false, 'false', 0, nil, ''
|
476
|
-
false
|
523
|
+
attributes[:bare_metal] = false
|
477
524
|
else
|
478
|
-
true
|
525
|
+
attributes[:bare_metal] = true
|
479
526
|
end
|
480
527
|
end
|
481
528
|
|
@@ -485,6 +532,7 @@ module Fog
|
|
485
532
|
attributes.delete(:bare_metal)
|
486
533
|
attributes.delete(:flavor_id)
|
487
534
|
attributes.delete(:ephemeral_storage)
|
535
|
+
attributes.delete(:tags) if bare_metal?
|
488
536
|
end
|
489
537
|
|
490
538
|
##
|
@@ -505,9 +553,14 @@ module Fog
|
|
505
553
|
end
|
506
554
|
|
507
555
|
def validate_attributes
|
508
|
-
requires :name, :domain, :
|
509
|
-
|
510
|
-
|
556
|
+
requires :name, :domain, :datacenter
|
557
|
+
if attributes[:fixed_configuration_preset]
|
558
|
+
requires :os_code
|
559
|
+
else
|
560
|
+
requires :cpu, :ram
|
561
|
+
requires_one :os_code, :image_id
|
562
|
+
requires_one :disk, :image_id
|
563
|
+
end
|
511
564
|
bare_metal? and image_id and raise ArgumentError, "Bare Metal Cloud does not support booting from Image"
|
512
565
|
end
|
513
566
|
|
@@ -78,6 +78,10 @@ module Fog
|
|
78
78
|
def get_vm_create_options
|
79
79
|
service.get_virtual_guest_create_options.body
|
80
80
|
end
|
81
|
+
|
82
|
+
def get_available_preset_codes
|
83
|
+
service.get_available_preset_codes.body['fixedConfigurationPresets'].map { |item| { :desc => item['preset']['description'], :key => item['preset']['keyName'] } }
|
84
|
+
end
|
81
85
|
end
|
82
86
|
end
|
83
87
|
end
|
@@ -46,7 +46,10 @@ module Fog
|
|
46
46
|
alias_method :public?, :public
|
47
47
|
|
48
48
|
def public_url
|
49
|
-
|
49
|
+
requires :key
|
50
|
+
cluster = service.cluster.downcase
|
51
|
+
key = Fog::Softlayer.escape(self.key)
|
52
|
+
"http://17532.http.#{cluster}.cdn.softlayer.net/#{key}"
|
50
53
|
end
|
51
54
|
|
52
55
|
def save
|
@@ -170,7 +170,7 @@ module Fog
|
|
170
170
|
# @return [Integer]
|
171
171
|
def global_ipv4_price_code
|
172
172
|
request(:product_package, '0/get_item_prices', :query => 'objectMask=mask[id,item.description,categories.id]').body.map do |item|
|
173
|
-
item['id'] if item['categories'][0]['id'] == global_ipv4_cat_code
|
173
|
+
item['id'] if item.has_key?('categories') && !item['categories'][0].nil? && item['categories'][0]['id'] == global_ipv4_cat_code
|
174
174
|
end.compact.first
|
175
175
|
end
|
176
176
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
|
3
|
+
# © Copyright IBM Corporation 2015.
|
4
|
+
#
|
5
|
+
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
|
+
#
|
7
|
+
|
8
|
+
module Fog
|
9
|
+
module Compute
|
10
|
+
class Softlayer
|
11
|
+
class Mock
|
12
|
+
def get_available_preset_codes
|
13
|
+
{
|
14
|
+
"fixedConfigurationPresets" =>
|
15
|
+
[{"preset"=>{"description"=>"Single Xeon 1270, 8GB Ram, 2x1TB SATA disks, Non-RAID", "keyName"=>"S1270_8GB_2X1TBSATA_NORAID", "totalMinimumHourlyFee"=>".368", "totalMinimumRecurringFee"=>"244"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"S1270_8GB_2X1TBSATA_NORAID"}}},
|
16
|
+
{"preset"=>{"description"=>"Single Xeon 1270, 32GB Ram, 1x1TB SATA disks, Non-RAID", "keyName"=>"S1270_32GB_1X1TBSATA_NORAID", "totalMinimumHourlyFee"=>".595", "totalMinimumRecurringFee"=>"395"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"S1270_32GB_1X1TBSATA_NORAID"}}},
|
17
|
+
{"preset"=>{"description"=>"Dual Xeon 2620, 32GB Ram, 4x1TB SATA disks, Non-RAID", "keyName"=>"D2620_32GB_4X1TBSATA_NORAID", "totalMinimumHourlyFee"=>".786", "totalMinimumRecurringFee"=>"522"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"D2620_32GB_4X1TBSATA_NORAID"}}},
|
18
|
+
{"preset"=>{"description"=>"Dual Xeon 2620, 64GB Ram, 2x1TB SATA disks, Non-RAID", "keyName"=>"D2620_64GB_2X1TBSATA_NORAID", "totalMinimumHourlyFee"=>".978", "totalMinimumRecurringFee"=>"649"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"D2620_64GB_2X1TBSATA_NORAID"}}},
|
19
|
+
{"preset"=>{"description"=>"Single Xeon 1270, 32GB Ram, 2x960GB SSD disks, Non-RAID", "keyName"=>"S1270_32GB_2X400GBSSD_NORAID", "totalMinimumHourlyFee"=>"1.057", "totalMinimumRecurringFee"=>"701"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"S1270_32GB_2X400GBSSD_NORAID"}}},
|
20
|
+
{"preset"=>{"description"=>"Single Xeon 1270, 32GB Ram, 2x960GB SSD disks, Non-RAID", "keyName"=>"S1270_32GB_2X960GBSSD_NORAID", "totalMinimumHourlyFee"=>"1.057", "totalMinimumRecurringFee"=>"701"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"S1270_32GB_2X960GBSSD_NORAID"}}},
|
21
|
+
{"preset"=>{"description"=>"Dual Xeon 2650, 64GB Ram, 4x1TB SATA disks, Non-RAID", "keyName"=>"D2650_64GB_4X1TBSATA_NORAID", "totalMinimumHourlyFee"=>"1.148", "totalMinimumRecurringFee"=>"762"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"D2650_64GB_4X1TBSATA_NORAID"}}},
|
22
|
+
{"preset"=>{"description"=>"Dual Xeon 2650, 128GB Ram, 1x1TB SATA disks, Non-RAID", "keyName"=>"D2650_128GB_1X1TBSATA_NORAID", "totalMinimumHourlyFee"=>"1.399", "totalMinimumRecurringFee"=>"929"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"D2650_128GB_1X1TBSATA_NORAID"}}},
|
23
|
+
{"preset"=>{"description"=>"Dual Xeon 2620, 64GB Ram, 4x600GB SAS disks, RAID10", "keyName"=>"D2620_64GB_4X300GBSAS_RAID10", "totalMinimumHourlyFee"=>"1.603", "totalMinimumRecurringFee"=>"1068"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"D2620_64GB_4X300GBSAS_RAID10"}}},
|
24
|
+
{"preset"=>{"description"=>"Dual Xeon 2690, 128GB Ram, 2x600GB SAS disks, RAID1", "keyName"=>"D2690_128GB_2X600GBSAS_RAID1", "totalMinimumHourlyFee"=>"1.87", "totalMinimumRecurringFee"=>"1246"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"D2690_128GB_2X600GBSAS_RAID1"}}},
|
25
|
+
{"preset"=>{"description"=>"Dual Xeon 2690, 128GB Ram, 2x600GB SAS disks, RAID1", "keyName"=>"D2690_128GB_2X600GBSAS_RAID1_2", "totalMinimumHourlyFee"=>"1.893", "totalMinimumRecurringFee"=>"1261"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"D2690_128GB_2X600GBSAS_RAID1_2"}}},
|
26
|
+
{"preset"=>{"description"=>"Dual Xeon 2690, 64GB Ram, 4x960GB SSD disks, RAID10", "keyName"=>"D2690_64GB_4X960GBSSD_RAID10", "totalMinimumHourlyFee"=>"2.226", "totalMinimumRecurringFee"=>"1481"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"D2690_64GB_4X960GBSSD_RAID10"}}},
|
27
|
+
{"preset"=>{"description"=>"Dual Xeon 2690, 256GB Ram, 4x600GB SAS disks, RAID10", "keyName"=>"D2690_256GB_4X600GBSAS_RAID10_RAID_10", "totalMinimumHourlyFee"=>"2.605", "totalMinimumRecurringFee"=>"1733"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"D2690_256GB_4X600GBSAS_RAID10_RAID_10"}}},
|
28
|
+
{"preset"=>{"description"=>"Dual Xeon 2650, 128GB Ram, 4x800GB SSD disks, RAID10", "keyName"=>"D2650_128GB_4X800GBSSD_RAID10", "totalMinimumHourlyFee"=>"2.749", "totalMinimumRecurringFee"=>"1828"}, "template"=>{"fixedConfigurationPreset"=>{"keyName"=>"D2650_128GB_4X800GBSSD_RAID10"}}}]
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Real
|
34
|
+
def get_available_preset_codes
|
35
|
+
self.request(:hardware_server, :get_create_object_options, :http_method => :GET)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -5,11 +5,13 @@
|
|
5
5
|
# LICENSE: MIT (http://opensource.org/licenses/MIT)
|
6
6
|
#
|
7
7
|
|
8
|
+
require 'base64'
|
9
|
+
|
8
10
|
module Fog
|
9
11
|
module Storage
|
10
12
|
class Softlayer < Fog::Service
|
11
13
|
requires :softlayer_username, :softlayer_api_key, :softlayer_cluster
|
12
|
-
recognizes :persistent, :softlayer_storage_account, :softlayer_temp_url_key
|
14
|
+
recognizes :persistent, :softlayer_storage_account, :softlayer_temp_url_key, :softlayer_bluemix_objstor_auth_url
|
13
15
|
|
14
16
|
model_path 'fog/softlayer/models/storage'
|
15
17
|
model :directory
|
@@ -87,7 +89,7 @@ module Fog
|
|
87
89
|
class Real
|
88
90
|
include Integrity
|
89
91
|
|
90
|
-
attr_reader :auth_url
|
92
|
+
attr_reader :auth_url, :cluster
|
91
93
|
attr_accessor :auth_token, :auth_expires
|
92
94
|
|
93
95
|
def initialize(options={})
|
@@ -97,6 +99,7 @@ module Fog
|
|
97
99
|
@cluster = options[:softlayer_cluster]
|
98
100
|
@storage_account = options[:softlayer_storage_account] || default_storage_account(options[:softlayer_username], options[:softlayer_api_key])
|
99
101
|
@connection_options = options[:connection_options] || {}
|
102
|
+
@bluemix_objstor_auth_url = options[:softlayer_bluemix_objstor_auth_url] || nil
|
100
103
|
authenticate
|
101
104
|
@persistent = options[:persistent] || false
|
102
105
|
@connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
|
@@ -104,7 +107,7 @@ module Fog
|
|
104
107
|
end
|
105
108
|
|
106
109
|
def auth_url
|
107
|
-
"https://#{@cluster}.#{Fog::Softlayer::SL_STORAGE_AUTH_URL}"
|
110
|
+
@bluemix_objstor_auth_url.nil? ? "https://#{@cluster}.#{Fog::Softlayer::SL_STORAGE_AUTH_URL}" : "#{@bluemix_objstor_auth_url}/#{@storage_account}"
|
108
111
|
end
|
109
112
|
|
110
113
|
def reload
|
@@ -141,13 +144,23 @@ module Fog
|
|
141
144
|
private
|
142
145
|
|
143
146
|
def _auth_headers
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
147
|
+
unless @bluemix_objstor_auth_url.nil?
|
148
|
+
puts "Bluemix Object Store v1 Authentication Header Required ..."
|
149
|
+
{
|
150
|
+
:headers => {
|
151
|
+
'User-Agent' => "Fog SoftLayer Adapter #{Fog::Softlayer::VERSION}",
|
152
|
+
'Authorization' => "Basic " + Base64.strict_encode64("#{@username}" + ':' + "#{@api_key}")
|
153
|
+
}
|
154
|
+
}
|
155
|
+
else
|
156
|
+
{
|
157
|
+
:headers => {
|
158
|
+
'User-Agent' => "Fog SoftLayer Adapter #{Fog::Softlayer::VERSION}",
|
159
|
+
'X-Auth-User' => "#{@storage_account}:#{@username}",
|
160
|
+
'X-Auth-Key' => @api_key
|
161
|
+
}
|
162
|
+
}
|
163
|
+
end
|
151
164
|
end
|
152
165
|
|
153
166
|
def _build_params(params)
|
@@ -296,4 +309,3 @@ module Fog
|
|
296
309
|
end
|
297
310
|
end
|
298
311
|
end
|
299
|
-
|
@@ -36,6 +36,21 @@ Shindo.tests("Fog::Storage[:softlayer] | Directory model", ["softlayer"]) do
|
|
36
36
|
data_matches_schema([Fog::Storage::Softlayer::Directory]) { @storage.directories.all }
|
37
37
|
end
|
38
38
|
|
39
|
+
tests("#public_url") do
|
40
|
+
data_matches_schema(String) do
|
41
|
+
directory = @storage.directories.create(:key => @test_dir1)
|
42
|
+
service = directory.service
|
43
|
+
def service.cluster
|
44
|
+
@cluster ||= %w[
|
45
|
+
AMS01 CHE01 DAL05 FRA02
|
46
|
+
HKG02 LON02 MEL01 MEX01
|
47
|
+
MON01 PAR01 SAO01 SJC01
|
48
|
+
SNG01 SYD01 TOK02 TOR01
|
49
|
+
].sample
|
50
|
+
end
|
51
|
+
directory.public_url
|
52
|
+
end
|
53
|
+
end
|
39
54
|
end
|
40
55
|
|
41
56
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-softlayer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Eldridge
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog-core
|
@@ -185,6 +185,7 @@ executables: []
|
|
185
185
|
extensions: []
|
186
186
|
extra_rdoc_files: []
|
187
187
|
files:
|
188
|
+
- ".editorconfig"
|
188
189
|
- ".gitignore"
|
189
190
|
- ".travis.yml"
|
190
191
|
- CHANGELOG.md
|
@@ -275,6 +276,7 @@ files:
|
|
275
276
|
- lib/fog/softlayer/requests/compute/describe_tags.rb
|
276
277
|
- lib/fog/softlayer/requests/compute/generate_bare_metal_order_template.rb
|
277
278
|
- lib/fog/softlayer/requests/compute/generate_virtual_guest_order_template.rb
|
279
|
+
- lib/fog/softlayer/requests/compute/get_available_preset_codes.rb
|
278
280
|
- lib/fog/softlayer/requests/compute/get_bare_metal_active_tickets.rb
|
279
281
|
- lib/fog/softlayer/requests/compute/get_bare_metal_create_options.rb
|
280
282
|
- lib/fog/softlayer/requests/compute/get_bare_metal_server.rb
|