kitchen-openstack 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +11 -0
- data/README.md +7 -4
- data/kitchen-openstack.gemspec +4 -2
- data/lib/kitchen/driver/openstack.rb +3 -3
- data/lib/kitchen/driver/openstack_version.rb +1 -1
- data/spec/kitchen/driver/openstack_spec.rb +34 -16
- metadata +22 -6
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
# 1.1.0 / 2013-12-07
|
2
|
+
|
3
|
+
### Improvements
|
4
|
+
|
5
|
+
* Tested against, and working with, Test Kitchen 1.1.0
|
6
|
+
|
7
|
+
### Bug Fixes
|
8
|
+
|
9
|
+
* PR [#31][] - Fix collision with TK 1.x; change `name` option to `server_name`
|
10
|
+
|
1
11
|
# 1.0.0 / 2013-10-16
|
2
12
|
|
3
13
|
### New Features
|
@@ -52,6 +62,7 @@
|
|
52
62
|
|
53
63
|
* Initial release! Woo!
|
54
64
|
|
65
|
+
[#31]: https://github.com/RoboticCheese/kitchen-openstack/pull/31
|
55
66
|
[#27]: https://github.com/RoboticCheese/kitchen-openstack/pull/27
|
56
67
|
[#26]: https://github.com/RoboticCheese/kitchen-openstack/pull/26
|
57
68
|
[#25]: https://github.com/RoboticCheese/kitchen-openstack/pull/25
|
data/README.md
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
-
[![Gem Version](https://badge.fury.io/rb/kitchen-openstack.png)](http://badge.fury.io/rb/kitchen-openstack)
|
1
|
+
[![Gem Version](https://badge.fury.io/rb/kitchen-openstack.png)](http://badge.fury.io/rb/kitchen-openstack)
|
2
|
+
[![Build Status](https://travis-ci.org/RoboticCheese/kitchen-openstack.png?branch=master)](https://travis-ci.org/RoboticCheese/kitchen-openstack)
|
3
|
+
[![Code Climate](https://codeclimate.com/github/RoboticCheese/kitchen-openstack.png)](https://codeclimate.com/github/RoboticCheese/kitchen-openstack)
|
4
|
+
[![Dependency Status](https://gemnasium.com/RoboticCheese/kitchen-openstack.png)](https://gemnasium.com/RoboticCheese/kitchen-openstack)
|
2
5
|
|
3
6
|
# Kitchen::OpenStack
|
4
7
|
|
@@ -25,8 +28,8 @@ Or install it yourself as:
|
|
25
28
|
|
26
29
|
Provide, at a minimum, the required driver options in your `.kitchen.yml` file:
|
27
30
|
|
28
|
-
|
29
|
-
|
31
|
+
driver:
|
32
|
+
name: openstack
|
30
33
|
openstack_username: [YOUR OPENSTACK USERNAME]
|
31
34
|
openstack_api_key: [YOUR OPENSTACK API KEY]
|
32
35
|
openstack_auth_url: [YOUR OPENSTACK AUTH URL]
|
@@ -41,7 +44,7 @@ By default, a unique server name will be generated and the current user's SSH
|
|
41
44
|
key will be used (with an RSA key taking precedence over a DSA), though that
|
42
45
|
behavior can be overridden with additional options:
|
43
46
|
|
44
|
-
|
47
|
+
server_name: [A UNIQUE SERVER NAME]
|
45
48
|
private_key_path: [PATH TO YOUR PRIVATE SSH KEY]
|
46
49
|
public_key_path: [PATH TO YOUR SSH PUBLIC KEY]
|
47
50
|
username: [SSH USER]
|
data/kitchen-openstack.gemspec
CHANGED
@@ -18,8 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency 'test-kitchen', '~> 1.
|
22
|
-
spec.add_dependency 'fog', '~> 1.
|
21
|
+
spec.add_dependency 'test-kitchen', '~> 1.1'
|
22
|
+
spec.add_dependency 'fog', '~> 1.18'
|
23
|
+
# Newer Fogs throw a warning if unf isn't there :(
|
24
|
+
spec.add_dependency 'unf'
|
23
25
|
|
24
26
|
spec.add_development_dependency 'bundler'
|
25
27
|
spec.add_development_dependency 'rake'
|
@@ -31,7 +31,7 @@ module Kitchen
|
|
31
31
|
class Openstack < Kitchen::Driver::SSHBase
|
32
32
|
@@ip_pool_lock = Mutex.new
|
33
33
|
|
34
|
-
default_config :
|
34
|
+
default_config :server_name, nil
|
35
35
|
default_config :key_name, nil
|
36
36
|
default_config :private_key_path do |driver|
|
37
37
|
%w{id_rsa id_dsa}.collect do |k|
|
@@ -53,7 +53,7 @@ module Kitchen
|
|
53
53
|
default_config :floating_ip, nil
|
54
54
|
|
55
55
|
def create(state)
|
56
|
-
config[:
|
56
|
+
config[:server_name] ||= generate_name(instance.name)
|
57
57
|
config[:disable_ssl_validation] and disable_ssl_validation
|
58
58
|
server = create_server
|
59
59
|
state[:server_id] = server.id
|
@@ -118,7 +118,7 @@ module Kitchen
|
|
118
118
|
debug "Selected flavor: #{flavor.id} #{flavor.name}"
|
119
119
|
|
120
120
|
server_def = {
|
121
|
-
:name => config[:
|
121
|
+
:name => config[:server_name],
|
122
122
|
:image_ref => image.id,
|
123
123
|
:flavor_ref => flavor.id
|
124
124
|
}
|
@@ -31,7 +31,9 @@ describe Kitchen::Driver::Openstack do
|
|
31
31
|
let(:rsa) { File.expand_path('~/.ssh/id_rsa') }
|
32
32
|
|
33
33
|
let(:instance) do
|
34
|
-
double(
|
34
|
+
double(
|
35
|
+
:name => 'potatoes', :logger => logger, :to_str => 'instance'
|
36
|
+
)
|
35
37
|
end
|
36
38
|
|
37
39
|
let(:driver) do
|
@@ -96,7 +98,7 @@ describe Kitchen::Driver::Openstack do
|
|
96
98
|
end
|
97
99
|
|
98
100
|
nils = [
|
99
|
-
:
|
101
|
+
:server_name,
|
100
102
|
:openstack_tenant,
|
101
103
|
:openstack_region,
|
102
104
|
:openstack_service_name,
|
@@ -118,7 +120,7 @@ describe Kitchen::Driver::Openstack do
|
|
118
120
|
:public_key_path => '/tmp',
|
119
121
|
:username => 'admin',
|
120
122
|
:port => '2222',
|
121
|
-
:
|
123
|
+
:server_name => 'puppy',
|
122
124
|
:openstack_tenant => 'that_one',
|
123
125
|
:openstack_region => 'atlantis',
|
124
126
|
:openstack_service_name => 'the_service',
|
@@ -165,7 +167,7 @@ describe Kitchen::Driver::Openstack do
|
|
165
167
|
|
166
168
|
it 'generates a server name in the absence of one' do
|
167
169
|
driver.create(state)
|
168
|
-
expect(driver[:
|
170
|
+
expect(driver[:server_name]).to eq('a_monkey!')
|
169
171
|
end
|
170
172
|
|
171
173
|
it 'gets a proper server ID' do
|
@@ -303,7 +305,7 @@ describe Kitchen::Driver::Openstack do
|
|
303
305
|
describe '#create_server' do
|
304
306
|
let(:config) do
|
305
307
|
{
|
306
|
-
:
|
308
|
+
:server_name => 'hello',
|
307
309
|
:image_ref => '111',
|
308
310
|
:flavor_ref => '1',
|
309
311
|
:public_key_path => 'tarpals'
|
@@ -330,50 +332,66 @@ describe Kitchen::Driver::Openstack do
|
|
330
332
|
end
|
331
333
|
|
332
334
|
context 'a default config' do
|
333
|
-
before(:each)
|
335
|
+
before(:each) do
|
336
|
+
@expected = config.merge(:name => config[:server_name])
|
337
|
+
@expected.delete_if do |k, v|
|
338
|
+
k == :server_name
|
339
|
+
end
|
340
|
+
end
|
334
341
|
|
335
342
|
it 'creates the server using a compute connection' do
|
336
|
-
expect(driver.send(:create_server)).to eq(@
|
343
|
+
expect(driver.send(:create_server)).to eq(@expected)
|
337
344
|
end
|
338
345
|
end
|
339
346
|
|
340
347
|
context 'a provided public key path' do
|
341
348
|
let(:config) do
|
342
349
|
{
|
343
|
-
:
|
350
|
+
:server_name => 'hello',
|
344
351
|
:image_ref => '111',
|
345
352
|
:flavor_ref => '1',
|
346
353
|
:public_key_path => 'tarpals'
|
347
354
|
}
|
348
355
|
end
|
349
|
-
before(:each)
|
356
|
+
before(:each) do
|
357
|
+
@expected = config.merge(:name => config[:server_name])
|
358
|
+
@expected.delete_if do |k, v|
|
359
|
+
k == :server_name
|
360
|
+
end
|
361
|
+
end
|
350
362
|
|
351
363
|
it 'passes that public key path to Fog' do
|
352
|
-
expect(driver.send(:create_server)).to eq(@
|
364
|
+
expect(driver.send(:create_server)).to eq(@expected)
|
353
365
|
end
|
354
366
|
end
|
355
367
|
|
356
368
|
context 'a provided key name' do
|
357
369
|
let(:config) do
|
358
370
|
{
|
359
|
-
:
|
371
|
+
:server_name => 'hello',
|
360
372
|
:image_ref => '111',
|
361
373
|
:flavor_ref => '1',
|
362
374
|
:public_key_path => 'montgomery',
|
363
375
|
:key_name => 'tarpals'
|
364
376
|
}
|
365
377
|
end
|
366
|
-
|
378
|
+
|
379
|
+
before(:each) do
|
380
|
+
@expected = config.merge(:name => config[:server_name])
|
381
|
+
@expected.delete_if do |k, v|
|
382
|
+
k == :server_name
|
383
|
+
end
|
384
|
+
end
|
367
385
|
|
368
386
|
it 'passes that key name to Fog' do
|
369
|
-
expect(driver.send(:create_server)).to eq(@
|
387
|
+
expect(driver.send(:create_server)).to eq(@expected)
|
370
388
|
end
|
371
389
|
end
|
372
390
|
|
373
391
|
context 'image/flavor specifies id' do
|
374
392
|
let(:config) do
|
375
393
|
{
|
376
|
-
:
|
394
|
+
:server_name => 'hello',
|
377
395
|
:image_ref => '111',
|
378
396
|
:flavor_ref => '1',
|
379
397
|
:public_key_path => 'tarpals'
|
@@ -391,7 +409,7 @@ describe Kitchen::Driver::Openstack do
|
|
391
409
|
context 'image/flavor specifies name' do
|
392
410
|
let(:config) do
|
393
411
|
{
|
394
|
-
:
|
412
|
+
:server_name => 'hello',
|
395
413
|
:image_ref => 'fedora',
|
396
414
|
:flavor_ref => 'small',
|
397
415
|
:public_key_path => 'tarpals'
|
@@ -409,7 +427,7 @@ describe Kitchen::Driver::Openstack do
|
|
409
427
|
context 'image/flavor specifies regex' do
|
410
428
|
let(:config) do
|
411
429
|
{
|
412
|
-
:
|
430
|
+
:server_name => 'hello',
|
413
431
|
# pass regex as string as yml returns string values
|
414
432
|
:image_ref => '/edo/',
|
415
433
|
:flavor_ref => '/in/',
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-openstack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-12-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: test-kitchen
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.
|
21
|
+
version: '1.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1.
|
29
|
+
version: '1.1'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: fog
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: '1.
|
37
|
+
version: '1.18'
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,23 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: '1.
|
45
|
+
version: '1.18'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: unf
|
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'
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
63
|
name: bundler
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|