fog-softlayer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ Gemfile.lock
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ### 0.0.1 / 2014-04-18
2
+
3
+ Enhancements:
4
+
5
+ * Initial release of `fog-softlayer` module.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ © Copyright IBM Corporation 2014.
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # SoftLayer Cloud module for fog (The Ruby cloud services library)
2
+
3
+ This gem is a module for the `fog` gem that allows you to manage resources in
4
+ the SoftLayer Cloud.
5
+
6
+ It is included by the main `fog` metagem but can used as an independent library
7
+ in other applications.
8
+
9
+ This release includes support for the following services:
10
+ * Compute
11
+
12
+ Additional services coming soon:
13
+ * Storage
14
+ * DNS
15
+ * Image
16
+ * Network
17
+
18
+ ## Installation
19
+
20
+ Add this line to your application's Gemfile:
21
+
22
+ gem "fog-softlayer"
23
+
24
+ And then execute:
25
+
26
+ $ bundle
27
+
28
+ Or install it yourself as:
29
+
30
+ $ gem install fog-softlayer
31
+
32
+ ## Usage
33
+
34
+ Please see the following references for instructions using the main `fog` gem
35
+ and its modules:
36
+
37
+ * https://github.com/fog/fog
38
+ * http://fog.io/
39
+ * http://rubydoc.info/gems/fog/
40
+
41
+ ## Contributing
42
+
43
+ `fog` modules are kept within the main repo.
44
+
45
+ 1. Fork it ( http://github.com/fog/fog/fork )
46
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
47
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
48
+ 4. Push to the branch (`git push origin my-new-feature`)
49
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ #
2
+ # Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
3
+ # © Copyright IBM Corporation 2014.
4
+ #
5
+ # LICENSE: MIT (http://opensource.org/licenses/MIT)
6
+ #
7
+
8
+
9
+ require "bundler/gem_tasks"
10
+ require "rake/testtask"
11
+
12
+ task :default => :test
13
+
14
+ Rake::TestTask.new do |t|
15
+ t.pattern = File.join("spec", "**", "*_spec.rb")
16
+ end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'fog/softlayer/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "fog-softlayer"
8
+ spec.version = Fog::Softlayer::VERSION
9
+ spec.authors = ["Matt Eldridge"]
10
+ spec.email = ["matt.eldridge@us.ibm.com"]
11
+ spec.description = %q{Module for the 'fog' gem to support SoftLayer Cloud}
12
+ spec.summary = %q{This library can be used as a module for `fog` or as standalone provider
13
+ to use the SoftLayer Cloud in applications}
14
+ spec.homepage = ""
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files`.split($/)
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency "fog-core"
23
+ spec.add_dependency "fog-json"
24
+ spec.add_dependency("pry-debugger")
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.3"
27
+ spec.add_development_dependency "rake"
28
+ spec.add_development_dependency "minitest"
29
+ end
@@ -0,0 +1 @@
1
+ require 'fog/softlayer/compute'
@@ -0,0 +1,162 @@
1
+ #
2
+ # Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
3
+ # © Copyright IBM Corporation 2014.
4
+ #
5
+ # LICENSE: MIT (http://opensource.org/licenses/MIT)
6
+ #
7
+
8
+ require 'fog/softlayer/core'
9
+ require 'fog/softlayer/compute/shared'
10
+
11
+ module Fog
12
+ module Compute
13
+ class Softlayer < Fog::Service
14
+ class MissingRequiredParameter < Fog::Errors::Error; end
15
+
16
+ # Client credentials
17
+ requires :softlayer_username, :softlayer_api_key
18
+
19
+ # Excon connection settings
20
+ recognizes :softlayer_api_url
21
+
22
+ #model_path 'fog/softlayer/models/compute'
23
+ #collection :servers
24
+ #model :server
25
+ #collection :bare_metal_servers
26
+ #model :bare_metal_server
27
+ #collection :global_ipv4s
28
+ #model :global_ipv4
29
+ #collection :images
30
+ #model :image
31
+ #
32
+
33
+ service = File.basename(__FILE__, '.rb')
34
+
35
+ path = "fog/softlayer/requests/#{service}"
36
+ request_path path
37
+
38
+ Fog::Softlayer.load_requests(service) do |r|
39
+ request r
40
+ end
41
+
42
+
43
+ # The Mock Service allows you to run a fake instance of the Service
44
+ # which makes no real connections.
45
+ #
46
+ #
47
+ class Mock
48
+ include Fog::Softlayer::Compute::Shared
49
+
50
+ def request(method, path, expected_responses, parameters = {})
51
+ _request
52
+ end
53
+
54
+ def request_access_token(connection, credentials)
55
+ _request
56
+ end
57
+
58
+ def _request
59
+ raise Fog::Errors::MockNotImplemented
60
+ end
61
+
62
+ end
63
+
64
+ ##
65
+ # Makes real connections to Softlayer.
66
+ #
67
+ class Real
68
+ include Fog::Softlayer::Compute::Shared
69
+
70
+ # Sends the real request to the real SoftLayer service.
71
+ #
72
+ # @param [String] service
73
+ # ...ayer.com/rest/v3/Softlayer_Service_Name...
74
+ # @param path [String]
75
+ # ...ayer.com/rest/v3/Softlayer_Service_Name/path.json
76
+ # @param [Hash] options
77
+ # @option options [Array<Hash>] :body
78
+ # HTTP request body parameters
79
+ # @option options [String] :softlayer_api_url
80
+ # Override the default (or configured) API endpoint
81
+ # @option options [String] :softlayer_username
82
+ # Email or user identifier for user based authentication
83
+ # @option options [String] :softlayer_api_key
84
+ # Password for user based authentication
85
+ # @return [Excon::Response]
86
+ def request(service, path, options={})
87
+
88
+ # default HTTP method to get if not passed
89
+ http_method = options[:http_method] || :get
90
+ # set the target base url
91
+ @request_url = options[:softlayer_api_url] || Fog::Softlayer::API_URL
92
+ # tack on the username and password
93
+ credentialize_url(@credentials[:username], @credentials[:api_key])
94
+ # set the SoftLayer Service name
95
+ set_sl_service(service)
96
+ # set the request path (known as the "method" in SL docs)
97
+ set_sl_path(path)
98
+
99
+ # build request params
100
+ params = { :headers => user_agent_header }
101
+ params[:headers]['Content-Type'] = 'application/json'
102
+ params[:expects] = [200,201]
103
+ params[:body] = Fog::JSON.encode({:parameters => [ options[:body] ]}) unless options[:body].nil?
104
+
105
+ # initialize connection object
106
+ @connection = Fog::Core::Connection.new(@request_url, false, params)
107
+
108
+ # send it
109
+ response = @connection.request(:method => http_method)
110
+
111
+ # decode it
112
+ response.body = Fog::JSON.decode(response.body)
113
+ response
114
+ end
115
+
116
+ private
117
+
118
+ def credentialize_url(username, apikey)
119
+ @request_url = "https://#{username}:#{apikey}@#{@request_url}"
120
+ end
121
+
122
+ ##
123
+ # Prepend "SoftLayer_" to the service name and Snake_Camel_Case the string before appending it to the @request_url.
124
+ #
125
+ def set_sl_service(service)
126
+ service = "SoftLayer_" << service.to_s.gsub(/^softlayer_/i, '').split('_').map{|i|i.capitalize}.join('_')
127
+ @request_url += "/#{service}"
128
+ end
129
+
130
+ ##
131
+ # Try to smallCamelCase the path before appending it to the @request_url
132
+ #
133
+ def set_sl_path(path)
134
+ path = path.to_s.underscore.camelize
135
+ @request_url += "/#{path}.json"
136
+ end
137
+
138
+ def user_agent_header
139
+ {"User-Agent" => "Fog SoftLayer Adapter #{Fog::Softlayer::VERSION}"}
140
+ end
141
+
142
+ end
143
+
144
+ end
145
+
146
+ end
147
+ end
148
+
149
+ ## some helpers for some dirty work
150
+ class String
151
+ def camelize
152
+ self.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
153
+ end
154
+
155
+ def underscore
156
+ self.gsub(/::/, '/').
157
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
158
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
159
+ tr("-", "_").
160
+ downcase
161
+ end
162
+ end
@@ -0,0 +1,39 @@
1
+ #
2
+ # Author:: Matt Eldridge (<matt.eldridge@us.ibm.com>)
3
+ # © Copyright IBM Corporation 2014.
4
+ #
5
+ # LICENSE: MIT (http://opensource.org/licenses/MIT)
6
+ #
7
+
8
+ module Fog
9
+ module Softlayer
10
+ module Compute
11
+
12
+ # The Shared module consists of code that was duplicated between the Real
13
+ # and Mock implementations.
14
+ #
15
+ module Shared
16
+
17
+ # Creates a new instance of the Softlayer Compute service
18
+ #
19
+ # @param [Hash] options
20
+ # @option options [String] :softlayer_api_url
21
+ # Override the default (or configured) API endpoint
22
+ # @option options [String] :softlayer_username
23
+ # Email or user identifier for user based authentication
24
+ # @option options [String] :softlayer_api_key
25
+ # Password for user based authentication
26
+ #
27
+ def initialize(options)
28
+ @api_url = options[:softlayer_api_url] || API_URL
29
+ @credentials = { :username => options[:softlayer_username], :api_key => options[:softlayer_api_key] }
30
+ end
31
+
32
+ def self.valid_request?(required, passed)
33
+ required.all? {|k| passed.key?(k)}
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,38 @@
1
+ require 'fog/core'
2
+ require 'fog/json'
3
+ require 'time'
4
+
5
+ module Fog
6
+ module Softlayer
7
+ extend Fog::Provider
8
+
9
+ API_URL = 'api.softlayer.com/rest/v3' unless defined? API_URL
10
+
11
+ service(:compute, 'Compute')
12
+
13
+ def self.load_requests(service)
14
+ path = "providers/softlayer/lib/fog/softlayer/requests/#{service}"
15
+ Dir.entries(path).reject{|e| e =~ /^\./}.each do |file|
16
+ _request = File.basename(file, '.rb')
17
+ yield _request.to_sym
18
+ end
19
+ end
20
+
21
+ def self.mock_account_id
22
+ Fog.mocking? and @sl_account_id ||= Fog::Mock.random_numbers(7)
23
+ end
24
+
25
+ def self.mock_vm_id
26
+ Fog::Mock.random_numbers(7)
27
+ end
28
+
29
+ def self.mock_global_identifier
30
+ Fog::UUID.uuid
31
+ end
32
+
33
+ def self.valid_request?(required, passed)
34
+ required.all? {|k| passed.key?(k) and !passed[k].nil?}
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,78 @@
1
+ module Fog
2
+ module Compute
3
+ class Softlayer
4
+
5
+ class Mock
6
+
7
+ # Launch a SoftLayer BMC server.
8
+ #
9
+ # @param [Array<Hash>] opts
10
+ # @option opts [Array<Hash>] :body
11
+ # HTTP request body parameters
12
+ # @option opts [String] "hostname"
13
+ # VM hostname, should be unique within the domain.
14
+ # @option opts [String] "domain"
15
+ # VM domain.
16
+ # @option opts [Integer] "processorCoreAmount"
17
+ # Number of CPU cores provisioned for the VM.
18
+ # @option opts [Integer] "memoryCapacity"
19
+ # Available RAM for the server in GB. Valid arguments are 1, 2, 4, 6, 8, 12, 16, 32, 48, 64
20
+ # @option opts [Boolean] "hourlyBillingFlag"
21
+ # Should the VM be billed hourly or monthly (monthly is less expensive, minimum charge of 1 month).
22
+ # @option opts [Boolean] "localDiskFlag"
23
+ # Should the root volume be on the machine or on the SAN
24
+ # @option opts [String] "operatingSystemReferenceCode"
25
+ # A valid SoftLayer operatingSystemReferenceCode string
26
+ # @option opts [Boolean] "dedicatedAccountHostOnlyFlag"
27
+ # Defaults to false, pass true for a single-tenant VM.
28
+ # @return [Excon::Response]
29
+ def create_bare_metal_server(opts)
30
+ raise ArgumentError, "Fog::Compute::Softlayer#create_bare_metal_server expects argument of type Hash" unless opts.kind_of?(Hash)
31
+ response = Excon::Response.new
32
+ required = %w{hostname domain processorCoreAmount memoryCapacity hourlyBillingFlag operatingSystemReferenceCode}
33
+
34
+ begin
35
+ Fog::Softlayer.valid_request?(required, opts) or raise MissingRequiredParameter
36
+ response.status = 200
37
+ # a real response comes back with lots of nil values like this too, it takes 1 - 2 hours for a real BMC server to provision
38
+ response.body = {
39
+ "accountId" => Fog::Softlayer.mock_account_id,
40
+ "createDate" => Time.now.iso8601,
41
+ "dedicatedAccountHostOnlyFlag" => false,
42
+ "domain" => nil,
43
+ "fullyQualifiedDomainName" => nil,
44
+ "hostname" => nil,
45
+ "id" => Fog::Softlayer.mock_vm_id,
46
+ "lastPowerStateId" => nil,
47
+ "lastVerifiedDate" => nil,
48
+ "maxCpu" => nil,
49
+ "maxCpuUnits" => "CORE",
50
+ "maxMemory" => nil,
51
+ "metricPollDate" => nil,
52
+ "modifyDate" => nil,
53
+ "startCpus" => nil,
54
+ "statusId" => 1001,
55
+ "globalIdentifier" => Fog::Softlayer.mock_global_identifier
56
+ }
57
+ rescue MissingRequiredParameter
58
+ response.status = 500
59
+ response.body = {
60
+ "code" => "SoftLayer_Exception_MissingCreationProperty",
61
+ "error" => "Properties #{required.join(', ')} ALL must be set to create an instance of 'SoftLayer_Hardware'."
62
+ }
63
+ end
64
+ response
65
+ end
66
+ end
67
+
68
+ class Real
69
+
70
+ def create_bare_metal_server(opts)
71
+ raise ArgumentError, "Fog::Compute::Softlayer#create_bare_metal_server expects argument of type Hash" unless opts.kind_of?(Hash)
72
+ request(:hardware_server, :create_object, :body => opts, :http_method => :POST)
73
+ end
74
+
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,46 @@
1
+ module Fog
2
+ module Compute
3
+ class Softlayer
4
+
5
+ class Mock
6
+
7
+ # Launch a single SoftLayer VM.
8
+ #
9
+ # @param [<Hash>] opts
10
+ # @option opts [<Hash>] :body
11
+ # HTTP request body parameters
12
+ # @option opts [String] "hostname"
13
+ # VM hostname, should be unique within the domain.
14
+ # @option opts [String] "domain"
15
+ # VM domain.
16
+ # @option opts [Integer] "startCpus"
17
+ # Number of CPU cores provisioned for the VM.
18
+ # @option opts [Integer] "maxMemory"
19
+ # Available RAM for the VM in MB. Valid arguments are 1024, 2048, 4096, 6144, 8192, 12288, 16384, 32768, 49152, 65536
20
+ # @option opts [Boolean] "hourlyBillingFlag"
21
+ # Should the VM be billed hourly or monthly (monthly is less expensive, minimum charge of 1 month).
22
+ # @option opts [Boolean] "localDiskFlag"
23
+ # Should the root volume be on the machine or on the SAN
24
+ # @option opts [String] "operatingSystemReferenceCode"
25
+ # A valid SoftLayer operatingSystemReferenceCode string
26
+ # @option opts [Boolean] "dedicatedAccountHostOnlyFlag"
27
+ # Defaults to false, pass true for a single-tenant VM.
28
+ # @return [Excon::Response]
29
+ def create_vm(opts)
30
+ raise ArgumentError, "Fog::Compute::Softlayer#create_vm expects argument of type Hash" unless opts.kind_of?(Hash)
31
+ opts = [opts]
32
+ self.create_vms(opts)
33
+ end
34
+
35
+ end
36
+
37
+ class Real
38
+ def create_vm(opts)
39
+ raise ArgumentError, "Fog::Compute::Softlayer#create_vm expects argument of type Hash" unless opts.kind_of?(Hash)
40
+ opts = [opts]
41
+ self.create_vms(opts)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,87 @@
1
+ module Fog
2
+ module Compute
3
+ class Softlayer
4
+
5
+ class Mock
6
+
7
+ # Launch one or more SoftLayer VMs.
8
+ #
9
+ # @param [Array<Hash>] opts
10
+ # @option opts [Array<Hash>] :body
11
+ # HTTP request body parameters
12
+ # @option opts [String] "hostname"
13
+ # VM hostname, should be unique within the domain.
14
+ # @option opts [String] "domain"
15
+ # VM domain.
16
+ # @option opts [Integer] "startCpus"
17
+ # Number of CPU cores provisioned for the VM.
18
+ # @option opts [Integer] "maxMemory"
19
+ # Available RAM for the VM in MB. Valid arguments are 1024, 2048, 4096, 6144, 8192, 12288, 16384, 32768, 49152, 65536
20
+ # @option opts [Boolean] "hourlyBillingFlag"
21
+ # Should the VM be billed hourly or monthly (monthly is less expensive, minimum charge of 1 month).
22
+ # @option opts [Boolean] "localDiskFlag"
23
+ # Should the root volume be on the machine or on the SAN
24
+ # @option opts [String] "operatingSystemReferenceCode"
25
+ # A valid SoftLayer operatingSystemReferenceCode string
26
+ # @option opts [Boolean] "dedicatedAccountHostOnlyFlag"
27
+ # Defaults to false, pass true for a single-tenant VM.
28
+ # @return [Excon::Response]
29
+ def create_vms(opts)
30
+ raise ArgumentError, "Fog::Compute::Softlayer#create_vms expects argument of type Array" unless opts.kind_of?(Array)
31
+ response = Excon::Response.new
32
+ required = %w{hostname domain startCpus maxMemory hourlyBillingFlag localDiskFlag operatingSystemReferenceCode}
33
+
34
+ begin
35
+ opts.each {|vm| Fog::Softlayer.valid_request?(required, vm) or raise MissingRequiredParameter}
36
+ response.status = 200
37
+ response.body = []
38
+
39
+ ## stub some responses
40
+ fields = {
41
+ "accountId" => Fog::Softlayer.mock_account_id,
42
+ "createDate" => Time.now.iso8601,
43
+ "dedicatedAccountHostOnlyFlag" => false,
44
+ "domain" => nil,
45
+ "fullyQualifiedDomainName" => nil,
46
+ "hostname" => nil,
47
+ "id" => Fog::Softlayer.mock_vm_id,
48
+ "lastPowerStateId" => nil,
49
+ "lastVerifiedDate" => nil,
50
+ "maxCpu" => nil,
51
+ "maxCpuUnits" => "CORE",
52
+ "maxMemory" => nil,
53
+ "metricPollDate" => nil,
54
+ "modifyDate" => nil,
55
+ "startCpus" => nil,
56
+ "statusId" => 1001,
57
+ "globalIdentifier" => Fog::Softlayer.mock_global_identifier
58
+ }
59
+
60
+ # clobber stubbed values where applicable
61
+ response.body = opts.each_with_index.map do |vm,i|
62
+ fields.reduce({}) do |result,(field,default)|
63
+ result[field] = vm[field] || default
64
+ result
65
+ end
66
+ end
67
+ rescue MissingRequiredParameter
68
+ response.status = 500
69
+ response.body = {
70
+ "code" => "SoftLayer_Exception_MissingCreationProperty",
71
+ "error" => "Properties #{required.join(', ')} ALL must be set to create an instance of 'SoftLayer_Hardware'."
72
+ }
73
+ end
74
+ response
75
+ end
76
+
77
+ end
78
+
79
+ class Real
80
+ def create_vms(opts)
81
+ raise ArgumentError, "Fog::Compute::Softlayer#create_vms expects argument of type Array" unless opts.kind_of?(Array)
82
+ request(:virtual_guest, :create_objects, :body => opts, :http_method => :POST)
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,5 @@
1
+ module Fog
2
+ module Softlayer
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,39 @@
1
+ require "minitest/autorun"
2
+ require "fog/softlayer"
3
+
4
+ describe Fog::Compute::Softlayer do
5
+ describe "when global config is available" do
6
+ before do
7
+
8
+ @arguments = {
9
+ :softlayer_api_url => "http://localhost",
10
+ :softlayer_username => "username",
11
+ :softlayer_api_key => "key"
12
+ }
13
+
14
+ @credential_guard = Minitest::Mock.new
15
+ def @credential_guard.reject
16
+ {}
17
+ end
18
+
19
+ Fog.stub :credentials, @credential_guard do
20
+ @service = Fog::Compute::Softlayer.new(@arguments)
21
+ end
22
+ end
23
+
24
+ it "responds to #request" do
25
+ assert_respond_to @service, :request
26
+ end
27
+
28
+ end
29
+
30
+ describe "when created without required arguments" do
31
+ it "raises an error" do
32
+ Fog.stub :credentials, {} do
33
+ assert_raises ArgumentError do
34
+ Fog::Compute::Softlayer.new({})
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,161 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fog-softlayer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Matt Eldridge
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-04-18 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: fog-core
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: fog-json
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: pry-debugger
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: bundler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '1.3'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '1.3'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: minitest
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: Module for the 'fog' gem to support SoftLayer Cloud
111
+ email:
112
+ - matt.eldridge@us.ibm.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - .gitignore
118
+ - CHANGELOG.md
119
+ - Gemfile
120
+ - LICENSE.txt
121
+ - README.md
122
+ - Rakefile
123
+ - fog-softlayer.gemspec
124
+ - lib/fog/softlayer.rb
125
+ - lib/fog/softlayer/compute.rb
126
+ - lib/fog/softlayer/compute/shared.rb
127
+ - lib/fog/softlayer/core.rb
128
+ - lib/fog/softlayer/requests/compute/create_bare_metal_server.rb
129
+ - lib/fog/softlayer/requests/compute/create_vm.rb
130
+ - lib/fog/softlayer/requests/compute/create_vms.rb
131
+ - lib/fog/softlayer/version.rb
132
+ - spec/fog/compute/softlayer_spec.rb
133
+ homepage: ''
134
+ licenses:
135
+ - MIT
136
+ post_install_message:
137
+ rdoc_options: []
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ! '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ! '>='
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 1.8.23
155
+ signing_key:
156
+ specification_version: 3
157
+ summary: This library can be used as a module for `fog` or as standalone provider
158
+ to use the SoftLayer Cloud in applications
159
+ test_files:
160
+ - spec/fog/compute/softlayer_spec.rb
161
+ has_rdoc: