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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4653fea3f18009d860e8472c3c0a30a94888b628
4
- data.tar.gz: 91e26288c27c6990a36b2a435def63e05c13a63a
3
+ metadata.gz: c8e974e2bd69d7a85f5f75c30c58aab63c5feb4a
4
+ data.tar.gz: 62a6c43e1da9592ba070e14269429a49e44c1afb
5
5
  SHA512:
6
- metadata.gz: 2c6e003eb7e9bd6452f02f8d7ceccdb5b81e6e6b30d2239b67a203b2f2105072d4c4ed25adc957e47362d6e324ad2e8b182e9571e04a4dd629f56ec5110f1480
7
- data.tar.gz: 06d9e733a5f5b60041b6c7ecb33abd1fb8441261151466ff26ab50e1c0444999fe3043d118f465968c4b9e4161df77b47590a6d25c9f9e82cb9c536a43a7c5ee
6
+ metadata.gz: 567acc968851f508de336f89b888cdee138d061a365bec496d8f3b452321c0d0eaa9c9dfdd9d32c359fff754981a034bc0020d3e1aa5a06c8fb21b6571329919
7
+ data.tar.gz: ef12acaa5e16d13049045aa31b59371542bdbfcabbd68694251b763fb0f46dbc17a59810f06d2c1add38db8b074d8d434c2b2a20b97323fd596be3fd8ff36a17
data/.editorconfig ADDED
@@ -0,0 +1,15 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ trim_trailing_whitespace = true
8
+
9
+ [*.{rb,gemspec}]
10
+ indent_size = 2
11
+ indent_style = space
12
+
13
+ [Gemfile]
14
+ indent_size = 2
15
+ indent_style = space
data/.travis.yml CHANGED
@@ -24,4 +24,5 @@ notifications:
24
24
 
25
25
  before_install:
26
26
  - gem update --system # todo: workaround for https://github.com/rubygems/rubygems/pull/763
27
+ - gem update bundler
27
28
 
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # v1.1.0
2
+ __features__
3
+
4
+ * Add support for pre-configured bare metal with fast provisioning times.
5
+
1
6
  # v0.4.7
2
7
 
3
8
  __features__
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, :cpu, :ram, :datacenter
509
- requires_one :os_code, :image_id
510
- requires_one :disk, :image_id
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
- raise NotImplementedError
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
- :headers => {
146
- 'User-Agent' => "Fog SoftLayer Adapter #{Fog::Softlayer::VERSION}",
147
- 'X-Auth-User' => "#{@storage_account}:#{@username}",
148
- 'X-Auth-Key' => @api_key
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
-
@@ -7,6 +7,6 @@
7
7
 
8
8
  module Fog
9
9
  module Softlayer
10
- VERSION = "1.0.3"
10
+ VERSION = "1.1.0"
11
11
  end
12
12
  end
@@ -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.3
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-01-07 00:00:00.000000000 Z
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