knife-cloud 1.2.0.rc.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9bd37b28f654e1519bd6257e85df5b334b3552c
4
- data.tar.gz: 50388a4270d158c12fda15ed43e8cd69e832283a
3
+ metadata.gz: 4ee4f881dd2d188f7667e32dd23170942f908827
4
+ data.tar.gz: c2eb79c92ecbe38059ded6138802f67ce7531f45
5
5
  SHA512:
6
- metadata.gz: 53083a0e00ae32d660d4a3ef22994b0348d54e5439001dcc7004b57bf6388cc6465625cc3d048dac6bd2aba2df2fb5900bc0e3d0232907e4e57e207706107205
7
- data.tar.gz: 4b456d12c67e2d7485a2e89ab162ea1e17105c87ca6326ae55499722ab30fa30c98a3f5c385fb0fa39279057cfe883246de257c2aab361ddc70a9ac2c82cb2b2
6
+ metadata.gz: 9de1b62043893d528a727d619be4f77448b8fa72b02650b28f77a202630a8976177c6210c5c113ce36bdd18acb370c8de976565de211457e6b854e8b6e986f68
7
+ data.tar.gz: 590e7718a81e42b18d99a13d4bc2535b5eef192fdcc8f82939d4da0db3ae2e42e019651a886c41353f8447c66c5328ab64183b979bbfd901adc647cf8890bfa0
@@ -31,6 +31,7 @@ class Chef
31
31
  class ServerShowError < KnifeCloudError; end
32
32
  class ChefServerError < KnifeCloudError; end
33
33
  class NetworkNotFoundError < KnifeCloudError; end
34
+ class NotFoundError < KnifeCloudError; end
34
35
  end
35
36
  end
36
37
  end
@@ -128,7 +128,7 @@ class Chef
128
128
  def handle_excon_exception(exception_class, e)
129
129
  error_message = if e.response
130
130
  response = Chef::JSONCompat.from_json(e.response.body)
131
- "Unknown server error (#{response['badRequest']['code']}): #{response['badRequest']['message']}"
131
+ "Unknown server error (#{response[response.keys[0]]['code']}): #{response[response.keys[0]]['message']}"
132
132
  else
133
133
  "Unknown server error : #{e.message}"
134
134
  end
@@ -138,14 +138,74 @@ class Chef
138
138
 
139
139
  def list_resource_configurations
140
140
  begin
141
- flavors = connection.flavors.all
141
+ connection.flavors.all
142
142
  rescue Excon::Errors::BadRequest => e
143
143
  handle_excon_exception(CloudExceptions::CloudAPIException, e)
144
144
  end
145
145
  end
146
146
 
147
+ def list_addresses
148
+ connection.addresses.all
149
+ rescue Excon::Errors::BadRequest => e
150
+ handle_excon_exception(CloudExceptions::CloudAPIException, e)
151
+ end
152
+
153
+ def release_address(address_id)
154
+ response = get_address(address_id)
155
+ msg_pair('IP address', get_address_ip(response))
156
+ puts
157
+ ui.confirm('Do you really want to delete this ip')
158
+ connection.release_address(address_id)
159
+ rescue Fog::Compute::OpenStack::NotFound => e
160
+ error_message = 'Floating ip not found.'
161
+ ui.error(error_message)
162
+ raise CloudExceptions::NotFoundError, "#{e.message}"
163
+ rescue Excon::Errors::BadRequest => e
164
+ handle_excon_exception(CloudExceptions::KnifeCloudError, e)
165
+ end
166
+
167
+ def get_address_ip(response)
168
+ response.body['floating_ip']['ip'] if response.body['floating_ip']
169
+ end
170
+
171
+ def get_address(address_id)
172
+ connection.get_address(address_id)
173
+ rescue Excon::Errors::BadRequest => e
174
+ handle_excon_exception(CloudExceptions::KnifeCloudError, e)
175
+ end
176
+
177
+ def allocate_address(pool = nil)
178
+ response = connection.allocate_address(pool)
179
+ response.body
180
+ rescue Fog::Compute::OpenStack::NotFound => e
181
+ error_message = 'Floating ip pool not found.'
182
+ ui.error(error_message)
183
+ raise CloudExceptions::NotFoundError, "#{e.message}"
184
+ rescue Excon::Errors::Forbidden => e
185
+ handle_excon_exception(CloudExceptions::KnifeCloudError, e)
186
+ rescue Excon::Errors::BadRequest => e
187
+ handle_excon_exception(CloudExceptions::KnifeCloudError, e)
188
+ end
189
+
190
+ def associate_address(*args)
191
+ connection.associate_address(*args)
192
+ rescue Excon::Errors::BadRequest => e
193
+ handle_excon_exception(CloudExceptions::KnifeCloudError, e)
194
+ end
195
+
196
+ def disassociate_address(*args)
197
+ connection.disassociate_address(*args)
198
+ rescue Fog::Compute::OpenStack::NotFound
199
+ error_message = 'Floating ip not found.'
200
+ ui.error(error_message)
201
+ rescue Excon::Errors::UnprocessableEntity => e
202
+ handle_excon_exception(CloudExceptions::KnifeCloudError, e)
203
+ rescue Excon::Errors::BadRequest => e
204
+ handle_excon_exception(CloudExceptions::KnifeCloudError, e)
205
+ end
206
+
147
207
  def delete_server_on_failure(server = nil)
148
- server.destroy if ! server.nil?
208
+ server.destroy unless server.nil?
149
209
  end
150
210
 
151
211
  def add_api_endpoint
@@ -157,11 +217,9 @@ class Chef
157
217
  end
158
218
 
159
219
  def get_server(instance_id)
160
- begin
161
- server = connection.servers.get(instance_id)
162
- rescue Excon::Errors::BadRequest => e
163
- handle_excon_exception(CloudExceptions::KnifeCloudError, e)
164
- end
220
+ connection.servers.get(instance_id)
221
+ rescue Excon::Errors::BadRequest => e
222
+ handle_excon_exception(CloudExceptions::KnifeCloudError, e)
165
223
  end
166
224
 
167
225
  def get_image(name_or_id)
@@ -193,7 +251,6 @@ class Chef
193
251
  image_info = connection.images.get(image)
194
252
  !image_info.nil? ? image_info.platform == 'windows' : false
195
253
  end
196
-
197
254
  end
198
255
  end
199
256
  end
@@ -1,6 +1,6 @@
1
1
  module Knife
2
2
  module Cloud
3
- VERSION = "1.2.0.rc.0"
3
+ VERSION = "1.2.0"
4
4
  MAJOR, MINOR, TINY = VERSION.split('.')
5
5
  end
6
6
  end
@@ -82,7 +82,7 @@ describe Chef::Knife::Cloud::FogService do
82
82
 
83
83
  it "sets the provided attributes with supplied values" do
84
84
  expect(@server_def[:state] == "Inactive").to be true
85
- end
85
+ end
86
86
  end
87
87
 
88
88
  ["servers", "images", "networks"].each do |resource_type|
@@ -93,9 +93,9 @@ describe Chef::Knife::Cloud::FogService do
93
93
  :connection
94
94
  end
95
95
  context "list #{resource_type}" do
96
-
96
+
97
97
  it "lists #{resource_type} of the current cloud service provider account." do
98
- allow(instance).to receive_message_chain(resource.to_sym, "#{resource_type}".to_sym, :all)
98
+ allow(instance).to receive_message_chain(resource.to_sym, "#{resource_type}".to_sym, :all)
99
99
  instance.method("list_#{resource_type}").call
100
100
  end
101
101
 
@@ -135,4 +135,29 @@ describe Chef::Knife::Cloud::FogService do
135
135
  expect { instance.delete_server(server_name) }.to raise_error(Chef::Knife::Cloud::CloudExceptions::ServerDeleteError, error_message)
136
136
  end
137
137
  end
138
+
139
+ context '#release_address' do
140
+ before(:each) do
141
+ allow(instance).to receive(:add_api_endpoint)
142
+ allow(Fog::Compute).to receive(:new).with({:provider => 'Any Cloud Provider'})
143
+ end
144
+
145
+ it 'releases address successfully' do
146
+ address_id = 'test-addres-id'
147
+ @address = TestResource.new('body' => { 'floating_ip' =>
148
+ { 'instance_id' => nil,
149
+ 'ip' => '127.0.0.1',
150
+ 'fixed_ip' => nil,
151
+ 'id' => 'test-addres-id',
152
+ 'pool' => 'public-110'
153
+ }
154
+ })
155
+ instance.ui = double
156
+ expect(instance).to receive(:get_address).and_return(@address)
157
+ expect(instance).to receive(:msg_pair).with('IP address', '127.0.0.1')
158
+ expect(instance.ui).to receive(:confirm)
159
+ allow(instance.connection).to receive(:release_address)
160
+ instance.release_address(address_id)
161
+ end
162
+ end
138
163
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0.rc.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaustubh Deorukhkar
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-06-25 00:00:00.000000000 Z
12
+ date: 2015-07-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: knife-windows
@@ -214,9 +214,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
214
214
  version: '0'
215
215
  required_rubygems_version: !ruby/object:Gem::Requirement
216
216
  requirements:
217
- - - ">"
217
+ - - ">="
218
218
  - !ruby/object:Gem::Version
219
- version: 1.3.1
219
+ version: '0'
220
220
  requirements: []
221
221
  rubyforge_project:
222
222
  rubygems_version: 2.2.2
@@ -246,4 +246,3 @@ test_files:
246
246
  - spec/unit/unix_distribution_spec.rb
247
247
  - spec/unit/windows_distribution_spec.rb
248
248
  - spec/unit/winrm_bootstrap_protocol_spec.rb
249
- has_rdoc: