kitchen-openstack 1.0.0 → 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.
- 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
|
-
[](http://badge.fury.io/rb/kitchen-openstack)
|
|
1
|
+
[](http://badge.fury.io/rb/kitchen-openstack)
|
|
2
|
+
[](https://travis-ci.org/RoboticCheese/kitchen-openstack)
|
|
3
|
+
[](https://codeclimate.com/github/RoboticCheese/kitchen-openstack)
|
|
4
|
+
[](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
|