fog-softlayer 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +8 -8
  2. data/.travis.yml +2 -0
  3. data/CHANGELOG.md +8 -1
  4. data/CONTRIBUTORS.md +2 -0
  5. data/README.md +2 -2
  6. data/examples/compute.md +28 -7
  7. data/examples/dns.md +3 -2
  8. data/examples/key_pairs.md +81 -0
  9. data/examples/network.md +3 -2
  10. data/examples/storage.md +4 -3
  11. data/examples/tags.md +4 -3
  12. data/lib/fog.rb +0 -6
  13. data/lib/fog/softlayer/compute.rb +16 -8
  14. data/lib/fog/softlayer/core.rb +6 -4
  15. data/lib/fog/softlayer/dns.rb +3 -3
  16. data/lib/fog/softlayer/models/compute/key_pair.rb +48 -0
  17. data/lib/fog/softlayer/models/compute/key_pairs.rb +37 -0
  18. data/lib/fog/softlayer/models/compute/server.rb +37 -10
  19. data/lib/fog/softlayer/requests/compute/create_key_pair.rb +41 -0
  20. data/lib/fog/softlayer/requests/compute/delete_key_pair.rb +37 -0
  21. data/lib/fog/softlayer/requests/compute/get_bare_metal_server.rb +1 -1
  22. data/lib/fog/softlayer/requests/compute/get_bare_metal_servers.rb +1 -1
  23. data/lib/fog/softlayer/requests/compute/get_key_pair.rb +36 -0
  24. data/lib/fog/softlayer/requests/compute/get_key_pairs.rb +29 -0
  25. data/lib/fog/softlayer/requests/compute/get_vm.rb +1 -1
  26. data/lib/fog/softlayer/requests/compute/get_vms.rb +1 -1
  27. data/lib/fog/softlayer/requests/compute/update_key_pair.rb +43 -0
  28. data/lib/fog/softlayer/storage.rb +3 -3
  29. data/lib/fog/softlayer/version.rb +1 -1
  30. data/tests/softlayer/compute/schema.rb +11 -0
  31. data/tests/softlayer/models/compute/key_pair_tests.rb +47 -0
  32. data/tests/softlayer/models/compute/server_tests.rb +1 -1
  33. data/tests/softlayer/requests/compute/key_pair_tests.rb +79 -0
  34. data/tests/softlayer/requests/compute/tag_tests.rb +1 -1
  35. metadata +11 -1
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZDJhYzVmZmIzZTFmNzIwYjlkOGM2YTg4ZjQ1MTY2M2JjOGY3ZjM3MQ==
4
+ NTRkYjQxZWNhZTFhMzZhNWE5OWU2NmIyMjQ3ZGVkYzI2MTQ0MGRhZA==
5
5
  data.tar.gz: !binary |-
6
- YjIxY2IzMjIwODRlY2QzOWQyMmU2ODA5Y2VhZDJlYTA4MDliYjA1NA==
6
+ YjkzMWIxMWU2NTVkY2E4N2U4YTE5ZThmZmU4ZWZhNWI1MDQ1MmNiMg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZjQ1NDFlYzgxZjMxYjMzYmIyNTZiM2Y1YWFiYjMzODU3MTE0NzdhNWZiYmNl
10
- OGM5NWY3OGEyYzM3NTRjNDQ3NDc2NDg1OGI3ZDAyYmVkOTIzNjBmMTc0NzEz
11
- ODdkZmJhODEwODllMTBmZmYzMmNmM2ZlNzBjMjdhY2JkMGJjZGE=
9
+ YmFmY2YyMTc2MzU2NDNhOGM5MDUyMjFhOTVjOWM2ZjQ1YzRhMjRlNzY4ZjI4
10
+ NDg2NjZkMTJmYTI2OTQxN2Q1OGFmZDU4NGQ4ZjIyZjQ0NDVjYmFhNjA0ZmQy
11
+ MDMxNTljNmE2Yjg4YjllMWU2ZDM5MWU4NDBlYzkzNzY2YmFhMzk=
12
12
  data.tar.gz: !binary |-
13
- M2U3M2ZhZDIxNzZiODZkYWZmNTg1MGNiY2Y3MDM4OTcyMDcxMDY3NDMxYWUy
14
- MGZmYzY1YmZlNTQwZjRmZmJhNjhiOGQyZDU1YTA4NDhkNzE4ZTNiZGNkODQx
15
- NGJmZTQ4ZGVjN2RlM2E2NmM5OGNlNTkzNjU2MmNhZGNiNzhiMDM=
13
+ NWIwOTc3N2ZiMGQ4MmYxMWMxOGZiMjllODg0MDk1YmVkNmJlMWQ0MmVhY2I5
14
+ OTU2Y2ExYzA4MDdiNzMzYTNmMjZjODY1YWRlNzFkNjQzNmE3NDM0NjVkZTIy
15
+ MjI1MThjZDI3NTFlMjIxODg2ZjQxYjU1OTQ4ZTY5YWVjY2NiZGQ=
data/.travis.yml CHANGED
@@ -26,6 +26,8 @@ matrix:
26
26
  gemfile: Gemfile
27
27
 
28
28
  allow_failures:
29
+ - rvm: 1.8.7
30
+ - rvm: jruby-18mode
29
31
  - rvm: jruby-head
30
32
 
31
33
  notifications:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 0.3.7 2014-07-11
2
+ * Added support for ssh key pairs.
3
+ * See [key_pairs.md](https://github.com/fog/fog-softlayer/blob/master/examples/key_pairs.md) for details.
4
+ * Fix [issue 19](https://github.com/fog/fog-softlayer/issues/19) Storage initialization bug.
5
+ * Fix [issue 17], incompatibility with Rails 4.1.4. *thanks konsti*
6
+ * Updated .fog file example and datacenter option. *thanks
7
+
1
8
  ## 0.3.2 2014-06-30
2
9
  * No longer requires `fog` gem.
3
10
 
@@ -10,7 +17,7 @@
10
17
  * Tag model.
11
18
  * Added vlan and private_vlan properties to Server model.
12
19
  * Fixed up bare_metal? on Server so it's not a hack. *thanks fernandes*
13
- * Fixed Bundler/dep issues with Ruby 1.8.7. (Thx @fernandes!)
20
+ * Fixed Bundler/dep issues with Ruby 1.8.7. *thanks fernandes*
14
21
  * Added some missing license headers.
15
22
  * Updated Compute examples and Tag examples to reflect new Network service.
16
23
  * Moved shared logic from `lib/fog/softlayer/compute.rb` to `lib/fog/softlayer/core.rb`
data/CONTRIBUTORS.md CHANGED
@@ -1,2 +1,4 @@
1
1
  * Celso Fernandes <fernandes@zertico.com>
2
+ * Hiroyuki Urasoko <ura.58.58@gmail.com>
3
+ * Konstantin Krauss <konstantin@propertybase.com>
2
4
  * Matt Eldridge <matt.eldridge@us.ibm.com>
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ### `fog-softlayer` - SoftLayer module for fog.
2
2
  [![Gem Version](https://badge.fury.io/rb/fog-softlayer.png)](http://badge.fury.io/rb/fog-softlayer)
3
- [![Build Status](https://api.travis-ci.org/softlayer/fog-softlayer.svg)](https://travis-ci.org/softlayer/fog-softlayer)
4
- [![Dependency Status](https://gemnasium.com/softlayer/fog-softlayer.svg)](https://gemnasium.com/softlayer/fog-softlayer)
3
+ [![Build Status](https://api.travis-ci.org/fog/fog-softlayer.svg)](https://travis-ci.org/fog/fog-softlayer)
4
+ [![Dependency Status](https://gemnasium.com/fog/fog-softlayer.svg)](https://gemnasium.com/fog/fog-softlayer)
5
5
 
6
6
  This gem is a module for the `fog` gem that allows you to manage resources in
7
7
  the SoftLayer Cloud.
data/examples/compute.md CHANGED
@@ -3,9 +3,10 @@
3
3
  These examples all assume you have `~/.fog` which contains the following
4
4
 
5
5
  ```yaml
6
- :softlayer_username: example-username
7
- :softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
8
- :softlayer_default_domain: example.com
6
+ default:
7
+ softlayer_username: example-username
8
+ softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
9
+ softlayer_default_domain: example.com
9
10
  ```
10
11
 
11
12
  #### Create a connection to SoftLayer Compute Service
@@ -127,7 +128,7 @@ These examples all assume you have `~/.fog` which contains the following
127
128
  :flavor_id => "m1.small",
128
129
  :image_id => "23f7f05f-3657-4330-8772-329ed2e816bc",
129
130
  :name => "test",
130
- :datacenter => {:name=>"ams01"}
131
+ :datacenter => "ams01"
131
132
  }
132
133
  new_server = @sl.servers.create(opts)
133
134
  new_server.id # => 1337
@@ -140,7 +141,7 @@ These examples all assume you have `~/.fog` which contains the following
140
141
  :flavor_id => "m1.small",
141
142
  :os_code => "UBUNTU_LATEST",
142
143
  :name => "test1",
143
- :datacenter => {:name=>"ams01"},
144
+ :datacenter => "ams01",
144
145
  :bare_metal => true
145
146
  }
146
147
  @sl.servers.create(opts)
@@ -159,7 +160,7 @@ These examples all assume you have `~/.fog` which contains the following
159
160
  :name => "hostname",
160
161
  :os_code => "UBUNTU_LATEST",
161
162
  :name => "test2",
162
- :datacenter => {:name=>"ams01"},
163
+ :datacenter => "ams01"
163
164
  }
164
165
  ```
165
166
 
@@ -175,11 +176,31 @@ These examples all assume you have `~/.fog` which contains the following
175
176
  :name => "hostname",
176
177
  :os_code => "UBUNTU_LATEST",
177
178
  :name => "test2",
178
- :datacenter => {:name=>"ams01"},
179
+ :datacenter => "ams01",
179
180
  :bare_metal => true
180
181
  }
181
182
  ```
182
183
 
184
+ 1. Create a server with one or more key pairs (also see [key_pairs.md](./key_pairs.md) )
185
+
186
+ ```ruby
187
+ the_first_key = @sl.key_pairs.by_label('my-new-key')
188
+ # => <Fog::Compute::Softlayer::KeyPair>
189
+ the_second_key = @sl.key_pairs.by_label('my-other-new-key')
190
+ # => <Fog::Compute::Softlayer::KeyPair>
191
+
192
+ opts = {
193
+ :flavor_id => 'm1.small',
194
+ :os_code => 'UBUNTU_LATEST',
195
+ :datacenter => 'hkg02',
196
+ :name => 'cphrmky',
197
+ :key_pairs => [ the_first_key, the_second_key ]
198
+ }
199
+ @sl.servers.create(opts)
200
+ # => <Fog::Compute::Softlayer::Server>
201
+ ```
202
+
203
+
183
204
  1. Delete a VM or Bare Metal instance.
184
205
 
185
206
  ```ruby
data/examples/dns.md CHANGED
@@ -4,8 +4,9 @@ These examples all assume you have `~/.fog` which contains the following
4
4
 
5
5
 
6
6
  ```yaml
7
- :softlayer_username: example-username
8
- :softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
7
+ default:
8
+ softlayer_username: example-username
9
+ softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
9
10
  ```
10
11
 
11
12
  #### Create a connection to SoftLayer DNS Service
@@ -0,0 +1,81 @@
1
+ ### Key Pair Examples
2
+
3
+ These examples all assume you have `~/.fog` which contains the following
4
+
5
+ ```yaml
6
+ default:
7
+ softlayer_username: example-username
8
+ softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
9
+ softlayer_default_domain: example.com
10
+ ```
11
+
12
+ #### Create a connection to SoftLayer Compute Service
13
+
14
+ ```ruby
15
+ require 'fog/softlayer'
16
+ @sl = Fog::Compute[:softlayer]
17
+ ```
18
+
19
+ #### Key Pair Basics
20
+ 1. Create
21
+
22
+ ```ruby
23
+ kp1 = @sl.key_pairs.create(:label => 'my-new-key', :key => 'ssh-rsa AAAAxbU2lx...')
24
+ # => <Fog::Compute::Softlayer::KeyPair>
25
+ kp2 = @sl.key_pairs.new
26
+ kp2.label = 'my-new-new-key'
27
+ kp2.key = 'ssh-rsa AAAAxbU2lx...'
28
+ kp2.save
29
+ # => <Fog::Compute::Softlayer::KeyPair>
30
+ ```
31
+
32
+ 1. Get
33
+
34
+ ```ruby
35
+ # By id:
36
+ kp = @sl.key_pairs.get(123456)
37
+ # => <Fog::Compute::Softlayer::KeyPair>
38
+
39
+ # By label:
40
+ kp = @sl.key_pairs.by_label('my-new-key')
41
+ # => <Fog::Compute::Softlayer::KeyPair>
42
+ ```
43
+
44
+
45
+ 1. Destroy
46
+
47
+ ```ruby
48
+ kp = @sl.key_pairs.by_label('my-new-key')
49
+ # => <Fog::Compute::Softlayer::KeyPair>
50
+ kp.destroy
51
+ ```
52
+
53
+
54
+ ### Key Pairs with Servers
55
+ 1. Create a server with one or more key pairs
56
+
57
+ ```ruby
58
+ the_first_key = @sl.key_pairs.by_label('my-new-key')
59
+ # => <Fog::Compute::Softlayer::KeyPair>
60
+ the_second_key = @sl.key_pairs.by_label('my-other-new-key')
61
+ # => <Fog::Compute::Softlayer::KeyPair>
62
+
63
+ opts = {
64
+ :flavor_id => 'm1.small',
65
+ :os_code => 'UBUNTU_LATEST',
66
+ :datacenter => 'hkg02',
67
+ :name => 'cphrmky',
68
+ :key_pairs => [ the_first_key, the_second_key ]
69
+ }
70
+ @sl.servers.create(opts)
71
+ # => <Fog::Compute::Softlayer::Server>
72
+ ```
73
+
74
+ 1. Look at the key pairs on a server.
75
+
76
+ ```ruby
77
+ server = @sl.servers.get(12345)
78
+ server.key_pairs
79
+ # => [ <Fog::Compute::Softlayer::Server>,
80
+ # <Fog::Compute::Softlayer::Server>]
81
+ ```
data/examples/network.md CHANGED
@@ -7,8 +7,9 @@ These examples all assume you have `~/.fog` which contains the following
7
7
 
8
8
 
9
9
  ```yaml
10
- :softlayer_username: example-username
11
- :softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
10
+ default:
11
+ softlayer_username: example-username
12
+ softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
12
13
  ```
13
14
 
14
15
  #### Create a connection to SoftLayer Network
data/examples/storage.md CHANGED
@@ -4,9 +4,10 @@ These examples all assume you have `~/.fog` which contains the following
4
4
 
5
5
 
6
6
  ```yaml
7
- :softlayer_username: example-username
8
- :softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
9
- :softlayer_cluster: cluster # currently supported clusters are dal05, sng01, ams01
7
+ default:
8
+ softlayer_username: example-username
9
+ softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
10
+ softlayer_cluster: cluster # currently supported clusters are dal05, sng01, ams01
10
11
  ```
11
12
 
12
13
  #### Create a connection to SoftLayer Object Storage
data/examples/tags.md CHANGED
@@ -3,9 +3,10 @@
3
3
  These examples all assume you have `~/.fog` which contains the following
4
4
 
5
5
  ```yaml
6
- :softlayer_username: example-username
7
- :softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
8
- :softlayer_default_domain: example.com
6
+ default:
7
+ softlayer_username: example-username
8
+ softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
9
+ softlayer_default_domain: example.com
9
10
  ```
10
11
 
11
12
  #### Create a connection to SoftLayer Compute Service
data/lib/fog.rb CHANGED
@@ -10,12 +10,6 @@
10
10
  __LIB_DIR__ = File.expand_path(File.dirname(__FILE__))
11
11
  $LOAD_PATH.unshift __LIB_DIR__ unless $LOAD_PATH.include?(__LIB_DIR__)
12
12
 
13
- # Use fog and core
14
13
  require 'fog/core'
15
- require 'fog'
16
-
17
- # Previously treated as "core"
18
- # data exchange specific (to be extracted and used on a per provider basis)
19
14
  require 'fog/json'
20
-
21
15
  require 'fog/softlayer'
@@ -17,8 +17,7 @@ module Fog
17
17
  requires :softlayer_username, :softlayer_api_key
18
18
 
19
19
  # Excon connection settings
20
- recognizes :softlayer_api_url
21
- recognizes :softlayer_default_domain
20
+ recognizes :softlayer_api_url, :softlayer_default_domain, :softlayer_default_datacenter
22
21
 
23
22
 
24
23
  model_path 'fog/softlayer/models/compute'
@@ -26,6 +25,8 @@ module Fog
26
25
  model :flavor
27
26
  collection :images
28
27
  model :image
28
+ collection :key_pairs
29
+ model :key_pair
29
30
  collection :servers
30
31
  model :server
31
32
  collection :tags
@@ -34,37 +35,42 @@ module Fog
34
35
  request_path 'fog/softlayer/requests/compute'
35
36
  request :create_bare_metal_server
36
37
  request :create_bare_metal_tags
38
+ request :create_key_pair
37
39
  request :create_vm
38
40
  request :create_vms
39
41
  request :create_vm_tags
40
42
  request :delete_bare_metal_server
41
43
  request :delete_bare_metal_tags
44
+ request :delete_key_pair
42
45
  request :delete_vm
43
46
  request :delete_vm_tags
44
47
  request :describe_tags
45
48
  request :get_bare_metal_server
46
49
  request :get_bare_metal_servers
47
50
  request :get_bare_metal_tags
51
+ request :get_key_pair
52
+ request :get_key_pairs
48
53
  request :get_references_by_tag_name
49
54
  request :get_tag
50
55
  request :get_vm_tags
51
56
  request :get_vm
52
57
  request :get_vms
58
+ request :update_key_pair
53
59
 
54
60
  # The Mock Service allows you to run a fake instance of the Service
55
61
  # which makes no real connections.
56
62
  #
57
63
  #
58
64
  class Mock
59
- attr_accessor :default_domain
60
65
  include Fog::Softlayer::Slapi
61
66
  include Fog::Softlayer::Compute::Shared
62
- attr_accessor :virtual_guests, :bare_metal_servers
67
+ attr_accessor :default_domain, :virtual_guests, :bare_metal_servers, :softlayer_default_domain, :softlayer_default_datacenter
63
68
 
64
69
  def initialize(args)
65
70
  @virtual_guests = []
66
71
  @bare_metal_servers = []
67
72
  @tags = []
73
+ @key_pairs = []
68
74
  super(args)
69
75
  end
70
76
 
@@ -94,13 +100,16 @@ module Fog
94
100
  # Makes real connections to Softlayer.
95
101
  #
96
102
  class Real
97
- attr_accessor :default_domain
103
+ attr_accessor :softlayer_default_domain
104
+ attr_accessor :softlayer_default_datacenter
98
105
  include Fog::Softlayer::Slapi
99
106
  include Fog::Softlayer::Compute::Shared
100
107
 
101
108
  def initialize(options={})
102
109
  @softlayer_api_key = options[:softlayer_api_key]
103
110
  @softlayer_username = options[:softlayer_username]
111
+ @softlayer_default_domain = options[:softlayer_default_domain]
112
+ @softlayer_default_datacenter = options[:softlayer_default_datacenter]
104
113
  end
105
114
 
106
115
  def request(service, path, options = {})
@@ -108,7 +117,6 @@ module Fog
108
117
  Fog::Softlayer::Slapi.slapi_request(service, path, options)
109
118
  end
110
119
 
111
-
112
120
  def list_servers
113
121
  (self.get_vms.body.map {|s| s['bare_metal'] = false; s } << self.get_bare_metal_servers.body.map {|s| s['bare_metal'] = true; s}).flatten
114
122
  end
@@ -123,11 +131,11 @@ end
123
131
 
124
132
  ## some helpers for some dirty work
125
133
  class String
126
- def camelize
134
+ def softlayer_camelize
127
135
  self.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
128
136
  end
129
137
 
130
- def underscore
138
+ def softlayer_underscore
131
139
  self.gsub(/::/, '/').
132
140
  gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
133
141
  gsub(/([a-z\d])([A-Z])/,'\1_\2').
@@ -82,7 +82,7 @@ module Fog
82
82
  # Try to smallCamelCase the path before appending it to the @request_url
83
83
  #
84
84
  def self.set_sl_path(path)
85
- path = path.to_s.underscore.camelize
85
+ path = path.to_s.softlayer_underscore.softlayer_camelize
86
86
  path.fix_convention_exceptions
87
87
  @request_url += "/#{path}.json"
88
88
  end
@@ -144,15 +144,17 @@ end
144
144
 
145
145
  ## some helpers for some dirty work
146
146
  class String
147
- def camelize
147
+ def softlayer_camelize
148
148
  self.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
149
149
  end
150
150
 
151
151
  def fix_convention_exceptions
152
- self.gsub!(/ipaddress/i, 'IpAddress') # SLAPI WHY U No Follow Own Convention!?
152
+ # SLAPI WHY U No Follow Own Convention!?
153
+ self.gsub!(/ipaddress/i, 'IpAddress')
154
+ self.gsub!(/loadbalancer/i, 'LoadBalancer')
153
155
  end
154
156
 
155
- def underscore
157
+ def softlayer_underscore
156
158
  self.gsub(/::/, '/').
157
159
  gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
158
160
  gsub(/([a-z\d])([A-Z])/,'\1_\2').
@@ -132,7 +132,7 @@ module Fog
132
132
  # Try to smallCamelCase the path before appending it to the @request_url
133
133
  #
134
134
  def set_sl_path(path)
135
- path = path.to_s.underscore.camelize
135
+ path = path.to_s.softlayer_underscore.softlayer_camelize
136
136
  @request_url += "/#{path}.json"
137
137
  end
138
138
 
@@ -149,11 +149,11 @@ end
149
149
 
150
150
  ## some helpers for some dirty work
151
151
  class String
152
- def camelize
152
+ def softlayer_camelize
153
153
  self.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
154
154
  end
155
155
 
156
- def underscore
156
+ def softlayer_underscore
157
157
  self.gsub(/::/, '/').
158
158
  gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
159
159
  gsub(/([a-z\d])([A-Z])/,'\1_\2').
@@ -0,0 +1,48 @@
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/core/model'
9
+
10
+ module Fog
11
+ module Compute
12
+ class Softlayer
13
+ class KeyPair < Fog::Model
14
+ identity :id
15
+
16
+ attribute :label
17
+ attribute :create_date, :aliases => 'createDate'
18
+ attribute :modify_date, :aliases => 'modifyDate'
19
+ attribute :note, :aliases => 'notes'
20
+ attribute :key
21
+
22
+ def save
23
+ identity ? update : create
24
+ end
25
+
26
+ def create
27
+ requires :key, :label
28
+ response = service.create_key_pair(attributes).body
29
+ merge_attributes(response)
30
+ self
31
+ end
32
+
33
+ def update
34
+ requires :id
35
+ merge_attributes(service.update_key_pair(self.id, self.attributes).body)
36
+ self
37
+ end
38
+
39
+ def destroy
40
+ requires :id
41
+ service.delete_key_pair(self.id)
42
+ true
43
+ end
44
+
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,37 @@
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/core/collection'
9
+ require 'fog/softlayer/models/compute/key_pair'
10
+
11
+ module Fog
12
+ module Compute
13
+ class Softlayer
14
+ class KeyPairs < Fog::Collection
15
+ model Fog::Compute::Softlayer::KeyPair
16
+
17
+ def all
18
+ data = service.get_key_pairs.body
19
+ load(data)
20
+ end
21
+
22
+ def get(id)
23
+ if key_pair = service.get_key_pair(id).body
24
+ new(key_pair)
25
+ end
26
+ rescue Fog::Network::Softlayer::NotFound
27
+ nil
28
+ end
29
+
30
+ def by_label(label)
31
+ all.select { |key_pair| key_pair.label == label }.first
32
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+ end
@@ -24,10 +24,10 @@ module Fog
24
24
  attribute :public_ip, :aliases => 'primaryIpAddress'
25
25
  attribute :flavor_id
26
26
  attribute :bare_metal, :type => :boolean
27
- attribute :os_code, :aliases => 'operatingSystemReferenceCode'
27
+ attribute :os_code
28
28
  attribute :image_id, :type => :squash
29
29
  attribute :ephemeral_storage, :aliases => 'localDiskFlag'
30
- attribute :os, :aliases => 'operatingSystem'
30
+ attribute :key_pairs, :aliases => 'sshKeys'
31
31
 
32
32
  # Times
33
33
  attribute :created_at, :aliases => ['createDate', 'provisionDate'], :type => :time
@@ -42,6 +42,7 @@ module Fog
42
42
  attribute :global_identifier, :aliases => 'globalIdentifier'
43
43
  attribute :hourly_billing_flag, :aliases => 'hourlyBillingFlag'
44
44
  attribute :tags, :aliases => 'tagReferences'
45
+ attribute :private_network_only, :aliases => 'privateNetworkOnlyFlag'
45
46
 
46
47
  def initialize(attributes = {})
47
48
  # Forces every request inject bare_metal parameter
@@ -123,32 +124,56 @@ module Fog
123
124
  if self.private_vlan
124
125
  attributes[:private_vlan] = { :networkVlan => { :id => self.private_vlan.id } }
125
126
  end
127
+ if self.key_pairs
128
+ attributes[:key_pairs].map! { |key| { :id => key.id } }
129
+ end
126
130
  remap_attributes(attributes, attributes_mapping)
127
131
  clean_attributes
128
132
  end
129
133
 
130
- def vlan
131
- attributes[:vlan] ||= _get_vlan
134
+ def os_code
135
+ attributes['operatingSystem']['softwareLicense']['softwareDescription']['referenceCode'] if attributes['operatingSystem']
132
136
  end
133
137
 
134
138
  def private_vlan
135
139
  attributes[:private_vlan] ||= _get_private_vlan
136
140
  end
137
141
 
138
- def vlan=(value)
142
+ def private_vlan=(value)
139
143
  unless value.is_a?(Integer) or value.is_a?(Fog::Network::Softlayer::Network)
140
144
  raise ArgumentError, "vlan argument for #{self.class.name}##{__method__} must be Integer or Fog::Network::Softlayer::Network."
141
145
  end
142
146
  value = Fog::Network[:softlayer].networks.get(value) if value.is_a?(Integer)
143
- attributes[:vlan] = value
147
+ attributes[:private_vlan] = value
144
148
  end
145
149
 
146
- def private_vlan=(value)
150
+ def key_pairs
151
+ attributes[:key_pairs]
152
+ end
153
+
154
+ def key_pairs=(keys)
155
+ raise ArgumentError, "Argument #{local_variables.first.to_s} for #{self.class.name}##{__method__} must be Array." unless keys.is_a?(Array)
156
+ attributes[:key_pairs] = []
157
+ keys.map do |key|
158
+ key = self.symbolize_keys(key) if key.is_a?(Hash)
159
+ unless key.is_a?(Fog::Compute::Softlayer::KeyPair) or (key.is_a?(Hash) and key[:id])
160
+ raise ArgumentError, "Elements of keys array for #{self.class.name}##{__method__} must be a Hash with key 'id', or Fog::Compute::Softlayer::KeyPair"
161
+ end
162
+ key = service.key_pairs.get(key[:id]) unless key.is_a?(Fog::Compute::Softlayer::KeyPair)
163
+ attributes[:key_pairs] << key
164
+ end
165
+ end
166
+
167
+ def vlan
168
+ attributes[:vlan] ||= _get_vlan
169
+ end
170
+
171
+ def vlan=(value)
147
172
  unless value.is_a?(Integer) or value.is_a?(Fog::Network::Softlayer::Network)
148
173
  raise ArgumentError, "vlan argument for #{self.class.name}##{__method__} must be Integer or Fog::Network::Softlayer::Network."
149
174
  end
150
175
  value = Fog::Network[:softlayer].networks.get(value) if value.is_a?(Integer)
151
- attributes[:private_vlan] = value
176
+ attributes[:vlan] = value
152
177
  end
153
178
 
154
179
  def ram=(set)
@@ -212,7 +237,6 @@ module Fog
212
237
  # * BUILD -> ERROR (on error)
213
238
  def save
214
239
  raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
215
-
216
240
  copy = self.dup
217
241
  copy.pre_save
218
242
 
@@ -263,6 +287,8 @@ module Fog
263
287
  :os_code => :operatingSystemReferenceCode,
264
288
  :vlan => :primaryNetworkComponent,
265
289
  :private_vlan => :primaryBackendNetworkComponent,
290
+ :key_pairs => :sshKeys,
291
+ :private_network_only => :privateNetworkOnlyFlag,
266
292
 
267
293
  }
268
294
 
@@ -331,7 +357,8 @@ module Fog
331
357
  def set_defaults
332
358
  attributes[:hourly_billing_flag] = true if attributes[:hourly_billing_flag].nil?
333
359
  attributes[:ephemeral_storage] = false if attributes[:ephemeral_storage].nil?
334
- attributes[:domain] = service.default_domain if service.default_domain and attributes[:domain].nil?
360
+ attributes[:domain] = service.softlayer_default_domain if service.softlayer_default_domain and attributes[:domain].nil?
361
+ self.datacenter = service.softlayer_default_datacenter if service.softlayer_default_datacenter and attributes[:datacenter].nil?
335
362
  end
336
363
 
337
364
  end
@@ -0,0 +1,41 @@
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
+ module Fog
8
+ module Compute
9
+ class Softlayer
10
+
11
+ class Mock
12
+
13
+ def create_key_pair(opts)
14
+ response = Excon::Response.new
15
+
16
+ response.status = 200
17
+ response.body = []
18
+
19
+ response.body = {
20
+ "createDate" => Time.now.iso8601,
21
+ "fingerprint" => "1a:1a:1a:1a:1a:1a:1a:1a:1a:1a:1a:1a:1a:1a:1a:1a",
22
+ "id" => Fog::Mock.random_numbers(5).to_i,
23
+ "key" => opts[:key],
24
+ "label" => opts[:label],
25
+ "modifyDate" => nil
26
+ }
27
+
28
+ @key_pairs.push(response.body)
29
+ response
30
+ end
31
+ end
32
+
33
+ class Real
34
+ def create_key_pair(opts)
35
+ request(:security_ssh_key, :create_object, :body => opts, :http_method => :post)
36
+ end
37
+ end
38
+
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,37 @@
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
+ module Fog
8
+ module Compute
9
+ class Softlayer
10
+
11
+ class Mock
12
+
13
+ def delete_key_pair(id)
14
+ response = Excon::Response.new
15
+ response.status = 200
16
+ if @key_pairs.reject! { |kp| kp['id'] == id }.nil?
17
+ response.status = 404
18
+ response.body = {
19
+ "error" => "Unable to find object with id of '#{id}'.",
20
+ "code" => "SoftLayer_Exception_ObjectNotFound"
21
+ }
22
+ else
23
+ response.body = true
24
+ end
25
+ response
26
+ end
27
+ end
28
+
29
+ class Real
30
+ def delete_key_pair(id)
31
+ request(:security_ssh_key, id, :http_method => :delete)
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -26,7 +26,7 @@ module Fog
26
26
 
27
27
  class Real
28
28
  def get_bare_metal_server(identifier)
29
- request(:hardware_server, identifier, :expected => [200, 404], :query => 'objectMask=mask[datacenter,tagReferences,memory,provisionDate,processorCoreAmount,hardDrives,datacenter,hourlyBillingFlag,operatingSystem.passwords.password]')
29
+ request(:hardware_server, identifier, :expected => [200, 404], :query => 'objectMask=mask[datacenter,tagReferences,memory,provisionDate,processorCoreAmount,hardDrives,datacenter,hourlyBillingFlag,operatingSystem.softwareLicense.softwareDescription.referenceCode,sshKeys.id,privateNetworkOnlyFlag]')
30
30
  end
31
31
  end
32
32
  end
@@ -20,7 +20,7 @@ module Fog
20
20
 
21
21
  class Real
22
22
  def get_bare_metal_servers
23
- request(:account, :get_hardware, :query => 'objectMask=mask[datacenter,tagReferences,memory,processorCoreAmount,hardDrives,datacenter,hourlyBillingFlag,operatingSystem.passwords.password]')
23
+ request(:account, :get_hardware, :query => 'objectMask=mask[datacenter,tagReferences,memory,processorCoreAmount,hardDrives,datacenter,hourlyBillingFlag,operatingSystem.softwareLicense.softwareDescription.referenceCode,sshKeys.id,privateNetworkOnlyFlag]')
24
24
  end
25
25
  end
26
26
  end
@@ -0,0 +1,36 @@
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
+ module Fog
8
+ module Compute
9
+ class Softlayer
10
+
11
+ class Mock
12
+ def get_key_pair(id)
13
+ response = Excon::Response.new
14
+ response.status = 200
15
+ response.body = key_pair = @key_pairs.select { |kp| kp['id'] == id }.first
16
+
17
+ if key_pair.nil?
18
+ response.body = {
19
+ "error"=>"Unable to find object with id of '#{id}'.",
20
+ "code"=>"SoftLayer_Exception_ObjectNotFound"
21
+ }
22
+ response.status = 404
23
+ end
24
+ response
25
+ end
26
+
27
+ end
28
+
29
+ class Real
30
+ def get_key_pair(id)
31
+ request(:security_ssh_key, id)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,29 @@
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 Compute
10
+ class Softlayer
11
+
12
+ class Mock
13
+ def get_key_pairs
14
+ response = Excon::Response.new
15
+ response.body = @key_pairs
16
+ response.status = 200
17
+ response
18
+ end
19
+
20
+ end
21
+
22
+ class Real
23
+ def get_key_pairs
24
+ request(:account, :get_ssh_keys)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -26,7 +26,7 @@ module Fog
26
26
 
27
27
  class Real
28
28
  def get_vm(identifier)
29
- request(:virtual_guest, identifier, :expected => [200, 404], :query => 'objectMask=mask[datacenter,tagReferences,blockDevices,blockDeviceTemplateGroup.globalIdentifier,operatingSystem.passwords.password]')
29
+ request(:virtual_guest, identifier, :expected => [200, 404], :query => 'objectMask=mask[datacenter,tagReferences,blockDevices,blockDeviceTemplateGroup.globalIdentifier,operatingSystem.softwareLicense.softwareDescription.referenceCode,sshKeys.id,privateNetworkOnlyFlag]')
30
30
  end
31
31
  end
32
32
  end
@@ -20,7 +20,7 @@ module Fog
20
20
 
21
21
  class Real
22
22
  def get_vms
23
- request(:account, :get_virtual_guests, :query => 'objectMask=mask[datacenter,tagReferences,blockDevices,blockDeviceTemplateGroup.globalIdentifier,operatingSystem.passwords.password,primaryNetworkComponent.networkVlan]')
23
+ request(:account, :get_virtual_guests, :query => 'objectMask=mask[datacenter,tagReferences,blockDevices,blockDeviceTemplateGroup.globalIdentifier,operatingSystem.softwareLicense.softwareDescription.referenceCode,primaryNetworkComponent.networkVlan,sshKeys.id,privateNetworkOnlyFlag]')
24
24
  end
25
25
  end
26
26
  end
@@ -0,0 +1,43 @@
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
+ module Fog
8
+ module Compute
9
+ class Softlayer
10
+
11
+ class Mock
12
+
13
+ def update_key_pair(id, opts)
14
+ response = Excon::Response.new
15
+ response.status = 200
16
+
17
+ key_pair, index = @key_pairs.each_with_index.map { |kp, i| [kp, i] if kp['id'] == id }.compact.flatten
18
+
19
+ if key_pair.nil?
20
+ response.status = 404
21
+ response.body = {
22
+ "error" => "Unable to find object with id of '#{id}'.",
23
+ "code" => "SoftLayer_Exception_ObjectNotFound"
24
+ }
25
+ else
26
+
27
+ @key_pairs[index] = key_pair.merge(opts)
28
+ response.body = true
29
+ end
30
+ response
31
+ end
32
+ end
33
+
34
+ class Real
35
+ def update_key_pair(id, opts)
36
+ request(:security_ssh_key, id, :body => opts, :http_method => :put)
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+
@@ -86,7 +86,7 @@ module Fog
86
86
  @api_key = options[:softlayer_api_key]
87
87
  @username = options[:softlayer_username]
88
88
  @cluster = options[:softlayer_cluster]
89
- @storage_account = options[:softlayer_storage_account] || default_storage_account
89
+ @storage_account = options[:softlayer_storage_account] || default_storage_account(options[:softlayer_username], options[:softlayer_api_key])
90
90
  @connection_options = options[:connection_options] || {}
91
91
  authenticate
92
92
  @persistent = options[:persistent] || false
@@ -183,8 +183,8 @@ module Fog
183
183
  true
184
184
  end
185
185
 
186
- def default_storage_account
187
- slapi = Fog::Compute[:softlayer].request(:account, :get_hub_network_storage)
186
+ def default_storage_account(username, api_key)
187
+ slapi = Fog::Compute.new(:provider => :softlayer, :softlayer_username => username, :softlayer_api_key => api_key).request(:account, :get_hub_network_storage)
188
188
  slapi.body.map { |store| store['username'] }.first if slapi.body and slapi.body.instance_of? Array
189
189
  end
190
190
 
@@ -7,6 +7,6 @@
7
7
 
8
8
  module Fog
9
9
  module Softlayer
10
- VERSION = "0.3.6"
10
+ VERSION = "0.3.7"
11
11
  end
12
12
  end
@@ -120,6 +120,17 @@ class Softlayer
120
120
 
121
121
  end
122
122
 
123
+ module KeyPair
124
+ KP = {
125
+ "createDate" => String,
126
+ "fingerprint" => String,
127
+ "id" => Integer,
128
+ "key" => String,
129
+ "label" => String,
130
+ "modifyDate" => Fog::Nullable::String,
131
+ }
132
+ end
133
+
123
134
  module Collected
124
135
  SERVER = {
125
136
  :id => Fog::Nullable::Integer,
@@ -0,0 +1,47 @@
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
+ Shindo.tests("Fog::Compute[:softlayer] | KeyPair model", ["softlayer"]) do
9
+ pending unless Fog.mocking?
10
+
11
+ @sl_connection = Fog::Compute[:softlayer]
12
+ @key_gen = Proc.new { string='ssh-rsa '; while string.length < 380 do; string << Fog::Mock.random_base64(1); end; string; }
13
+ @kp1 = @sl_connection.key_pairs.create(:label => 'test-key-1', :key => @key_gen.call)
14
+
15
+ tests("success") do
16
+
17
+ tests("#label=") do
18
+ returns('new-label') { @kp1.label = 'new-label' }
19
+ end
20
+
21
+ tests("#label") do
22
+ returns('new-label') { @kp1.label}
23
+ end
24
+
25
+ tests("#key=") do
26
+ @new_key_value = @key_gen.call
27
+ returns(@new_key_value) { @kp1.key = @new_key_value }
28
+ end
29
+
30
+ tests("#key") do
31
+ returns(@new_key_value) { @kp1.key }
32
+ end
33
+
34
+ tests("#create(:label => 'test-key-2', :key => #{@key_gen.call}") do
35
+ data_matches_schema(Fog::Compute::Softlayer::KeyPair) { @sl_connection.key_pairs.create(:label => 'test-key-2', :key => @key_gen.call)}
36
+ end
37
+
38
+ tests("#destroy") do
39
+ returns(true) { @sl_connection.key_pairs.first.destroy }
40
+ end
41
+
42
+ end
43
+
44
+ tests ("failure") do
45
+ # ToDo: Failure cases.
46
+ end
47
+ end
@@ -23,7 +23,7 @@ Shindo.tests("Fog::Compute[:softlayer] | Server model", ["softlayer"]) do
23
23
  :os_code => 'UBUNTU_LATEST',
24
24
  :name => 'test-bmc',
25
25
  :domain => 'bare-metal-server.com',
26
- :datecenter => 'dal05',
26
+ :datacenter => 'dal05',
27
27
  :bare_metal => true
28
28
  }
29
29
 
@@ -0,0 +1,79 @@
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
+ Shindo.tests("Fog::Compute[:softlayer] | key_pair requests", ["softlayer"]) do
9
+
10
+ @sl_connection = Fog::Compute[:softlayer]
11
+
12
+ opts = { :flavor_id => 'm1.small', :os_code => 'UBUNTU_LATEST', :name => 'matt', :datacenter => 'dal05', :domain => 'example.com', :bare_metal => false}
13
+ @vm = @sl_connection.servers.create(opts)
14
+
15
+ opts[:bare_metal] = true
16
+ @bmc = @sl_connection.servers.create(opts)
17
+
18
+ @key_gen = Proc.new { string='ssh-rsa '; while string.length < 380 do; string << Fog::Mock.random_base64(1); end; string; }
19
+
20
+ @kp1 = @sl_connection.key_pairs.new
21
+ @kp1.label = 'test-key-1'
22
+ @kp1.key = @key_gen.call
23
+ @kp1.save
24
+
25
+
26
+ tests('success') do
27
+
28
+ tests("#create_key_pair") do
29
+ key = @sl_connection.create_key_pair(:key => @key_gen.call, :label => 'test-key-tmp')
30
+ @kp2 = @sl_connection.key_pairs.get(key.body['id'])
31
+ returns(200) { key.status }
32
+ data_matches_schema(Integer) { key.body['id'] }
33
+ end
34
+
35
+ tests("#get_key_pairs") do
36
+ data_matches_schema([Softlayer::Compute::Formats::KeyPair::KP]) { @sl_connection.get_key_pairs.body}
37
+ returns(200) { @sl_connection.get_key_pairs.status }
38
+ returns(2) { @sl_connection.get_key_pairs.body.count }
39
+ end
40
+
41
+ tests("#get_key_pair(#{@kp1.id}") do
42
+ data_matches_schema(Softlayer::Compute::Formats::KeyPair::KP) { @sl_connection.get_key_pair(@kp1.id).body }
43
+ end
44
+
45
+ tests("#update_key_pair(#{@kp1.id}, 'label' => 'some-new-name'}") do
46
+ returns(true) { @sl_connection.update_key_pair(@kp1.id, 'label' => 'some-new-name').body }
47
+ returns('some-new-name') { @sl_connection.get_key_pair(@kp1.id).body['label'] }
48
+ end
49
+
50
+ tests("#delete_key_pair(#{@kp1.id}") do
51
+ returns(true) { @sl_connection.delete_key_pair(@kp1.id).body }
52
+ returns(1) { @sl_connection.get_key_pairs.body.count }
53
+ end
54
+
55
+ end
56
+
57
+ tests('failure') do
58
+
59
+ tests("#get_key_pair").raises(ArgumentError) do
60
+ @sl_connection.get_key_pair
61
+ end
62
+
63
+ tests("#get_key_pair(#{@kp1.id}") do
64
+ returns(404) { @sl_connection.get_key_pair(@kp1.id).status }
65
+ end
66
+
67
+ tests("#update_key_pair(#{@kp1.id}, 'label' => 'random thing'") do
68
+ returns(404) { @sl_connection.update_key_pair(@kp1.id, 'label' => 'random thing' ).status }
69
+ end
70
+
71
+ tests("#delete_key_pair(#{@kp1.id}") do
72
+ returns(404) { @sl_connection.delete_key_pair(@kp1.id).status }
73
+ end
74
+
75
+
76
+
77
+ end
78
+
79
+ end
@@ -9,7 +9,7 @@ Shindo.tests("Fog::Compute[:softlayer] | tag requests", ["softlayer"]) do
9
9
 
10
10
  @sl_connection = Fog::Compute[:softlayer]
11
11
 
12
- opts = { :flavor_id => 'm1.small', :os_code => 'UBUNTU_LATEST', :name => 'matt', :datacenter => 'dal05', :bare_metal => false}
12
+ opts = { :flavor_id => 'm1.small', :os_code => 'UBUNTU_LATEST', :name => 'matt', :datacenter => 'dal05', :domain => 'example.com', :bare_metal => false}
13
13
  @vm = @sl_connection.servers.create(opts)
14
14
 
15
15
  opts[:bare_metal] = true
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-softlayer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Eldridge
@@ -200,6 +200,7 @@ files:
200
200
  - docs/fog-softlayer-CLA.pdf
201
201
  - examples/compute.md
202
202
  - examples/dns.md
203
+ - examples/key_pairs.md
203
204
  - examples/network.md
204
205
  - examples/storage.md
205
206
  - examples/tags.md
@@ -216,6 +217,8 @@ files:
216
217
  - lib/fog/softlayer/models/compute/flavors.rb
217
218
  - lib/fog/softlayer/models/compute/image.rb
218
219
  - lib/fog/softlayer/models/compute/images.rb
220
+ - lib/fog/softlayer/models/compute/key_pair.rb
221
+ - lib/fog/softlayer/models/compute/key_pairs.rb
219
222
  - lib/fog/softlayer/models/compute/server.rb
220
223
  - lib/fog/softlayer/models/compute/servers.rb
221
224
  - lib/fog/softlayer/models/compute/tag.rb
@@ -241,22 +244,27 @@ files:
241
244
  - lib/fog/softlayer/network.rb
242
245
  - lib/fog/softlayer/requests/compute/create_bare_metal_server.rb
243
246
  - lib/fog/softlayer/requests/compute/create_bare_metal_tags.rb
247
+ - lib/fog/softlayer/requests/compute/create_key_pair.rb
244
248
  - lib/fog/softlayer/requests/compute/create_vm.rb
245
249
  - lib/fog/softlayer/requests/compute/create_vm_tags.rb
246
250
  - lib/fog/softlayer/requests/compute/create_vms.rb
247
251
  - lib/fog/softlayer/requests/compute/delete_bare_metal_server.rb
248
252
  - lib/fog/softlayer/requests/compute/delete_bare_metal_tags.rb
253
+ - lib/fog/softlayer/requests/compute/delete_key_pair.rb
249
254
  - lib/fog/softlayer/requests/compute/delete_vm.rb
250
255
  - lib/fog/softlayer/requests/compute/delete_vm_tags.rb
251
256
  - lib/fog/softlayer/requests/compute/describe_tags.rb
252
257
  - lib/fog/softlayer/requests/compute/get_bare_metal_server.rb
253
258
  - lib/fog/softlayer/requests/compute/get_bare_metal_servers.rb
254
259
  - lib/fog/softlayer/requests/compute/get_bare_metal_tags.rb
260
+ - lib/fog/softlayer/requests/compute/get_key_pair.rb
261
+ - lib/fog/softlayer/requests/compute/get_key_pairs.rb
255
262
  - lib/fog/softlayer/requests/compute/get_references_by_tag_name.rb
256
263
  - lib/fog/softlayer/requests/compute/get_tag.rb
257
264
  - lib/fog/softlayer/requests/compute/get_vm.rb
258
265
  - lib/fog/softlayer/requests/compute/get_vm_tags.rb
259
266
  - lib/fog/softlayer/requests/compute/get_vms.rb
267
+ - lib/fog/softlayer/requests/compute/update_key_pair.rb
260
268
  - lib/fog/softlayer/requests/dns/create_domain.rb
261
269
  - lib/fog/softlayer/requests/dns/create_record.rb
262
270
  - lib/fog/softlayer/requests/dns/delete_domain.rb
@@ -327,6 +335,7 @@ files:
327
335
  - tests/softlayer/helper.rb
328
336
  - tests/softlayer/models/compute/flavor_tests.rb
329
337
  - tests/softlayer/models/compute/image_tests.rb
338
+ - tests/softlayer/models/compute/key_pair_tests.rb
330
339
  - tests/softlayer/models/compute/server_tests.rb
331
340
  - tests/softlayer/models/dns/domain_tests.rb
332
341
  - tests/softlayer/models/dns/domains_tests.rb
@@ -335,6 +344,7 @@ files:
335
344
  - tests/softlayer/models/storage/directory_tests.rb
336
345
  - tests/softlayer/models/storage/file_tests.rb
337
346
  - tests/softlayer/requests/compute/bmc_tests.rb
347
+ - tests/softlayer/requests/compute/key_pair_tests.rb
338
348
  - tests/softlayer/requests/compute/tag_tests.rb
339
349
  - tests/softlayer/requests/compute/vm_tests.rb
340
350
  - tests/softlayer/requests/network/network_tests.rb