kitchen-openstack 1.2.0 → 1.3.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.
- checksums.yaml +5 -13
- data/CHANGELOG.md +19 -0
- data/README.md +26 -4
- data/lib/kitchen/driver/openstack.rb +73 -21
- data/lib/kitchen/driver/openstack_version.rb +1 -1
- data/spec/kitchen/driver/openstack_spec.rb +136 -5
- metadata +31 -31
checksums.yaml
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
5
|
-
data.tar.gz: !binary |-
|
|
6
|
-
OGM1NTk4NjUxMmY5Y2E2MmNhMTVkZThmYTBjOGQxMmE4ZTAzNTRkZQ==
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 23c44843c2f545b10ef08c9a7e798afff8acd4e3
|
|
4
|
+
data.tar.gz: 88bb1823d40b4929fef0de8d05a62ade24909d1c
|
|
7
5
|
SHA512:
|
|
8
|
-
metadata.gz:
|
|
9
|
-
|
|
10
|
-
NWVkNDU3OWE0YzZmOWMwZjRmYzI4OGQzZjA5ZTM5NjgyZjRiYmFiYjhkZjNh
|
|
11
|
-
YjUwYTM3Yjk4ODk4M2QzYzI1NTE3MDI5NzViODRkM2IwOGFlOTI=
|
|
12
|
-
data.tar.gz: !binary |-
|
|
13
|
-
MmJhNTZlYWE3OTI1MDAwYTc1MzM4YWQxZTZkYTAwYmMxYTM0NjE5YzhiNDhk
|
|
14
|
-
OWIxMmI4NGU4YzVjNzUzZDg3OWM4NWVlNzE3ZWVlYzIxNTBlYmYwZWExYzE1
|
|
15
|
-
M2U5MTVjNWM5Y2M0NjAyZWE0N2NiMGVlMjdmYWFkYzgxNmI0MDY=
|
|
6
|
+
metadata.gz: cc92ccbd2840b79694c06fbbf9b631d5067ae7268b8c5f01b2739ff0cd7441eeba405d227b919f5048749ec253286adcbab5ff28e89c645418b5fe54ef10af04
|
|
7
|
+
data.tar.gz: bb10f75c4b1751658486c274f4a398fdd59baa2bfa77a1c7a3d4fbc4617003f7186c9abfb94ff84c2d48e0bc05f232ce1c921db8e4425f8e0a68798919bc12ca
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
# 1.3.0 / 2014-03-09
|
|
2
|
+
|
|
3
|
+
### New Features
|
|
4
|
+
|
|
5
|
+
* PR [#40][] - New `user_data` option; via [@wilreichert][]
|
|
6
|
+
* PR [#39][] - New `network_ref` option to only provision a server with
|
|
7
|
+
certain specified NICs; via [@monsterzz][]
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* PR [#41][] - Fix issue creating servers with custom SSH ports; via
|
|
12
|
+
[@tenforward][]
|
|
13
|
+
|
|
1
14
|
# 1.2.0 / 2014-01-30
|
|
2
15
|
|
|
3
16
|
### New Features
|
|
@@ -68,6 +81,9 @@
|
|
|
68
81
|
|
|
69
82
|
* Initial release! Woo!
|
|
70
83
|
|
|
84
|
+
[#41]: https://github.com/test-kitchen/kitchen-openstack/pull/41
|
|
85
|
+
[#40]: https://github.com/test-kitchen/kitchen-openstack/pull/40
|
|
86
|
+
[#39]: https://github.com/test-kitchen/kitchen-openstack/pull/39
|
|
71
87
|
[#37]: https://github.com/test-kitchen/kitchen-openstack/pull/37
|
|
72
88
|
[#31]: https://github.com/test-kitchen/kitchen-openstack/pull/31
|
|
73
89
|
[#27]: https://github.com/test-kitchen/kitchen-openstack/pull/27
|
|
@@ -84,6 +100,9 @@
|
|
|
84
100
|
[#7]: https://github.com/test-kitchen/kitchen-openstack/pull/7
|
|
85
101
|
[#2]: https://github.com/test-kitchen/kitchen-openstack/pull/2
|
|
86
102
|
|
|
103
|
+
[@wilreichert]: https://github.com/wilreichert
|
|
104
|
+
[@tenforward]: https://github.com/tenforward
|
|
105
|
+
[@monsterzz]: https://github.com/monsterzz
|
|
87
106
|
[@bears4barrett]: https://github.com/bears4barrett
|
|
88
107
|
[@jgawor]: https://github.com/jgawor
|
|
89
108
|
[@hufman]: https://github.com/hufman
|
data/README.md
CHANGED
|
@@ -54,12 +54,15 @@ behavior can be overridden with additional options:
|
|
|
54
54
|
openstack_tenant: [YOUR OPENSTACK TENANT ID]
|
|
55
55
|
openstack_region: [A VALID OPENSTACK REGION]
|
|
56
56
|
openstack_service_name: [YOUR OPENSTACK COMPUTE SERVICE NAME]
|
|
57
|
-
openstack_network_name: [YOUR OPENSTACK NETWORK NAME]
|
|
57
|
+
openstack_network_name: [YOUR OPENSTACK NETWORK NAME USED TO CONNECT]
|
|
58
58
|
floating_ip: [A SPECIFIC FLOATING IP TO ASSIGN]
|
|
59
59
|
floating_ip_pool: [AN OPENSTACK POOL NAME TO ASSIGN THE NEXT IP FROM]
|
|
60
60
|
security_groups:
|
|
61
61
|
- [A LIST OF...]
|
|
62
62
|
- [...SECURITY GROUPS TO JOIN]
|
|
63
|
+
network_ref:
|
|
64
|
+
- [OPENSTACK NETWORK NAMES OR...]
|
|
65
|
+
- [...ID TO CREATE INSTANCE WITH]
|
|
63
66
|
|
|
64
67
|
If a `key_name` is provided it will be used instead of any
|
|
65
68
|
`public_key_path` that is specified.
|
|
@@ -68,6 +71,24 @@ If a `key_name` is provided without any `private_key_path`, unexpected
|
|
|
68
71
|
behavior may result if your local RSA/DSA private key doesn't match that
|
|
69
72
|
OpenStack key.
|
|
70
73
|
|
|
74
|
+
The `network_ref` option can be specified as an exact id, an exact name,
|
|
75
|
+
or as a regular expression matching the name of the network. You can pass one
|
|
76
|
+
|
|
77
|
+
network_ref: MYNET1
|
|
78
|
+
|
|
79
|
+
or many networks
|
|
80
|
+
|
|
81
|
+
network_ref:
|
|
82
|
+
- MYNET1
|
|
83
|
+
- MYNET2
|
|
84
|
+
|
|
85
|
+
The `openstack_network_name` is used to select IP address for SSH connection.
|
|
86
|
+
It's recommended to specify this option in case of multiple networks used for
|
|
87
|
+
instance to provide more control over network connectivity.
|
|
88
|
+
|
|
89
|
+
Please note that `network_ref` relies on Network Services (`Fog::Network`) and
|
|
90
|
+
it can be unavailable in your OpenStack installation.
|
|
91
|
+
|
|
71
92
|
disable_ssl_validation: true
|
|
72
93
|
|
|
73
94
|
Only disable SSL cert validation if you absolutely know what you are doing,
|
|
@@ -77,6 +98,7 @@ but are stuck with an OpenStack deployment without valid SSL certs.
|
|
|
77
98
|
|
|
78
99
|
1. Fork it
|
|
79
100
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
80
|
-
3.
|
|
81
|
-
4.
|
|
82
|
-
5.
|
|
101
|
+
3. Run style checks and RSpec tests (`bundle exec rake`)
|
|
102
|
+
4. Commit your changes (`git commit -am 'Add some feature'`)
|
|
103
|
+
5. Push to the branch (`git push origin my-new-feature`)
|
|
104
|
+
6. Create new Pull Request
|
|
@@ -52,6 +52,7 @@ module Kitchen
|
|
|
52
52
|
default_config :floating_ip_pool, nil
|
|
53
53
|
default_config :floating_ip, nil
|
|
54
54
|
default_config :security_groups, nil
|
|
55
|
+
default_config :network_ref, nil
|
|
55
56
|
|
|
56
57
|
def create(state)
|
|
57
58
|
config[:server_name] ||= generate_name(instance.name)
|
|
@@ -67,7 +68,8 @@ module Kitchen
|
|
|
67
68
|
end
|
|
68
69
|
state[:hostname] = get_ip(server)
|
|
69
70
|
state[:ssh_key] = config[:private_key_path]
|
|
70
|
-
wait_for_sshd(state[:hostname]
|
|
71
|
+
wait_for_sshd(state[:hostname], config[:username],
|
|
72
|
+
{ :port => config[:port] }) ; info '(ssh ready)'
|
|
71
73
|
if config[:key_name]
|
|
72
74
|
info "Using OpenStack keypair <#{config[:key_name]}>"
|
|
73
75
|
end
|
|
@@ -93,7 +95,7 @@ module Kitchen
|
|
|
93
95
|
|
|
94
96
|
private
|
|
95
97
|
|
|
96
|
-
def
|
|
98
|
+
def openstack_server
|
|
97
99
|
server_def = {
|
|
98
100
|
:provider => 'OpenStack',
|
|
99
101
|
:openstack_username => config[:openstack_username],
|
|
@@ -106,36 +108,86 @@ module Kitchen
|
|
|
106
108
|
optional.each do |o|
|
|
107
109
|
config[o] and server_def[o] = config[o]
|
|
108
110
|
end
|
|
109
|
-
|
|
111
|
+
server_def
|
|
110
112
|
end
|
|
111
113
|
|
|
112
|
-
def
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
debug "Selected image: #{image.id} #{image.name}"
|
|
114
|
+
def network
|
|
115
|
+
Fog::Network.new(openstack_server)
|
|
116
|
+
end
|
|
116
117
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
def compute
|
|
119
|
+
Fog::Compute.new(openstack_server)
|
|
120
|
+
end
|
|
120
121
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
122
|
+
def create_server
|
|
123
|
+
server_def = init_config
|
|
124
|
+
|
|
125
|
+
if config[:network_ref]
|
|
126
|
+
networks = [].concat([config[:network_ref]])
|
|
127
|
+
server_def[:nics] = networks.flatten.map do |net|
|
|
128
|
+
{ 'net_id' => find_network(net).id }
|
|
129
|
+
end
|
|
128
130
|
end
|
|
129
|
-
|
|
130
|
-
|
|
131
|
+
|
|
132
|
+
[
|
|
133
|
+
:security_groups,
|
|
134
|
+
:public_key_path,
|
|
135
|
+
:key_name,
|
|
136
|
+
:user_data
|
|
137
|
+
].each do |c|
|
|
138
|
+
server_def[c] = optional_config(c) if config[c]
|
|
131
139
|
end
|
|
132
|
-
|
|
140
|
+
|
|
133
141
|
# Can't use the Fog bootstrap and/or setup methods here; they require a
|
|
134
142
|
# public IP address that can't be guaranteed to exist across all
|
|
135
143
|
# OpenStack deployments (e.g. TryStack ARM only has private IPs).
|
|
136
144
|
compute.servers.create(server_def)
|
|
137
145
|
end
|
|
138
146
|
|
|
147
|
+
def init_config
|
|
148
|
+
{
|
|
149
|
+
:name => config[:server_name],
|
|
150
|
+
:image_ref => find_image(config[:image_ref]).id,
|
|
151
|
+
:flavor_ref => find_flavor(config[:flavor_ref]).id,
|
|
152
|
+
}
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def optional_config(c)
|
|
156
|
+
case c
|
|
157
|
+
when :security_groups
|
|
158
|
+
if config[c].kind_of?(Array)
|
|
159
|
+
config[c]
|
|
160
|
+
end
|
|
161
|
+
when :user_data
|
|
162
|
+
if File.exist?(config[c])
|
|
163
|
+
File.open(config[c]) { |f| f.read }
|
|
164
|
+
end
|
|
165
|
+
else
|
|
166
|
+
config[c]
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def find_image(image_ref)
|
|
171
|
+
image = find_matching(compute.images, image_ref)
|
|
172
|
+
raise ActionFailed, 'Image not found' if !image
|
|
173
|
+
debug "Selected image: #{image.id} #{image.name}"
|
|
174
|
+
image
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def find_flavor(flavor_ref)
|
|
178
|
+
flavor = find_matching(compute.flavors, flavor_ref)
|
|
179
|
+
raise ActionFailed, 'Flavor not found' if !flavor
|
|
180
|
+
debug "Selected flavor: #{flavor.id} #{flavor.name}"
|
|
181
|
+
flavor
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def find_network(network_ref)
|
|
185
|
+
net = find_matching(network.networks.all, network_ref)
|
|
186
|
+
raise ActionFailed, 'Network not found' if !net
|
|
187
|
+
debug "Selected net: #{net.id} #{net.name}"
|
|
188
|
+
net
|
|
189
|
+
end
|
|
190
|
+
|
|
139
191
|
def generate_name(base)
|
|
140
192
|
# Generate what should be a unique server name
|
|
141
193
|
sep = '-'
|
|
@@ -178,7 +230,7 @@ module Kitchen
|
|
|
178
230
|
|
|
179
231
|
def get_ip(server)
|
|
180
232
|
if config[:openstack_network_name]
|
|
181
|
-
debug "Using configured
|
|
233
|
+
debug "Using configured net: #{config[:openstack_network_name]}"
|
|
182
234
|
return server.addresses[config[:openstack_network_name]].first['addr']
|
|
183
235
|
end
|
|
184
236
|
begin
|
|
@@ -104,7 +104,8 @@ describe Kitchen::Driver::Openstack do
|
|
|
104
104
|
:openstack_region,
|
|
105
105
|
:openstack_service_name,
|
|
106
106
|
:floating_ip_pool,
|
|
107
|
-
:floating_ip
|
|
107
|
+
:floating_ip,
|
|
108
|
+
:network_ref
|
|
108
109
|
]
|
|
109
110
|
nils.each do |i|
|
|
110
111
|
it "defaults to no #{i}" do
|
|
@@ -127,7 +128,8 @@ describe Kitchen::Driver::Openstack do
|
|
|
127
128
|
:openstack_service_name => 'the_service',
|
|
128
129
|
:private_key_path => '/path/to/id_rsa',
|
|
129
130
|
:floating_ip_pool => 'swimmers',
|
|
130
|
-
:floating_ip => '11111'
|
|
131
|
+
:floating_ip => '11111',
|
|
132
|
+
:network_ref => '0xCAFFE'
|
|
131
133
|
}
|
|
132
134
|
end
|
|
133
135
|
|
|
@@ -150,7 +152,10 @@ describe Kitchen::Driver::Openstack do
|
|
|
150
152
|
d.instance = instance
|
|
151
153
|
d.stub(:generate_name).with('potatoes').and_return('a_monkey!')
|
|
152
154
|
d.stub(:create_server).and_return(server)
|
|
153
|
-
d.stub(:wait_for_sshd).with(
|
|
155
|
+
d.stub(:wait_for_sshd).with(
|
|
156
|
+
'1.2.3.4',
|
|
157
|
+
'root',
|
|
158
|
+
{ :port => '22' }).and_return(true)
|
|
154
159
|
d.stub(:get_ip).and_return('1.2.3.4')
|
|
155
160
|
d.stub(:do_ssh_setup).and_return(true)
|
|
156
161
|
d
|
|
@@ -284,6 +289,12 @@ describe Kitchen::Driver::Openstack do
|
|
|
284
289
|
res = config.merge({ :provider => 'OpenStack' })
|
|
285
290
|
expect(driver.send(:compute)).to eq(res)
|
|
286
291
|
end
|
|
292
|
+
|
|
293
|
+
it 'creates a new network connection' do
|
|
294
|
+
Fog::Network.stub(:new) { |arg| arg }
|
|
295
|
+
res = config.merge({ :provider => 'OpenStack' })
|
|
296
|
+
expect(driver.send(:network)).to eq(res)
|
|
297
|
+
end
|
|
287
298
|
end
|
|
288
299
|
|
|
289
300
|
context 'only an API key provided' do
|
|
@@ -317,18 +328,31 @@ describe Kitchen::Driver::Openstack do
|
|
|
317
328
|
s.stub(:create) { |arg| arg }
|
|
318
329
|
s
|
|
319
330
|
end
|
|
331
|
+
let(:vlan1_net) { double(:id => '1', :name => 'vlan1') }
|
|
332
|
+
let(:vlan2_net) { double(:id => '2', :name => 'vlan2') }
|
|
320
333
|
let(:ubuntu_image) { double(:id => '111', :name => 'ubuntu') }
|
|
321
334
|
let(:fedora_image) { double(:id => '222', :name => 'fedora') }
|
|
322
335
|
let(:tiny_flavor) { double(:id => '1', :name => 'tiny') }
|
|
323
336
|
let(:small_flavor) { double(:id => '2', :name => 'small') }
|
|
324
337
|
let(:compute) do
|
|
325
|
-
double(
|
|
326
|
-
:
|
|
338
|
+
double(
|
|
339
|
+
:servers => servers,
|
|
340
|
+
:images => [ubuntu_image, fedora_image],
|
|
341
|
+
:flavors => [tiny_flavor, small_flavor],
|
|
342
|
+
)
|
|
343
|
+
end
|
|
344
|
+
let(:network) do
|
|
345
|
+
double(
|
|
346
|
+
:networks => double(
|
|
347
|
+
:all => [vlan1_net, vlan2_net]
|
|
348
|
+
)
|
|
349
|
+
)
|
|
327
350
|
end
|
|
328
351
|
let(:driver) do
|
|
329
352
|
d = Kitchen::Driver::Openstack.new(config)
|
|
330
353
|
d.instance = instance
|
|
331
354
|
d.stub(:compute).and_return(compute)
|
|
355
|
+
d.stub(:network).and_return(network)
|
|
332
356
|
d
|
|
333
357
|
end
|
|
334
358
|
|
|
@@ -467,6 +491,113 @@ describe Kitchen::Driver::Openstack do
|
|
|
467
491
|
driver.send(:create_server)
|
|
468
492
|
end
|
|
469
493
|
end
|
|
494
|
+
|
|
495
|
+
context 'network specifies id' do
|
|
496
|
+
let(:config) do
|
|
497
|
+
{
|
|
498
|
+
:server_name => 'hello',
|
|
499
|
+
:image_ref => '111',
|
|
500
|
+
:flavor_ref => '1',
|
|
501
|
+
:public_key_path => 'tarpals',
|
|
502
|
+
:network_ref => '1'
|
|
503
|
+
}
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
it 'exact id match' do
|
|
507
|
+
networks = [
|
|
508
|
+
{ 'net_id' => '1' }
|
|
509
|
+
]
|
|
510
|
+
servers.should_receive(:create).with(
|
|
511
|
+
:name => 'hello',
|
|
512
|
+
:image_ref => '111',
|
|
513
|
+
:flavor_ref => '1',
|
|
514
|
+
:public_key_path => 'tarpals',
|
|
515
|
+
:nics => networks
|
|
516
|
+
)
|
|
517
|
+
driver.send(:create_server)
|
|
518
|
+
end
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
context 'network specifies name' do
|
|
522
|
+
let(:config) do
|
|
523
|
+
{
|
|
524
|
+
:server_name => 'hello',
|
|
525
|
+
:image_ref => '111',
|
|
526
|
+
:flavor_ref => '1',
|
|
527
|
+
:public_key_path => 'tarpals',
|
|
528
|
+
:network_ref => 'vlan1'
|
|
529
|
+
}
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
it 'exact id match' do
|
|
533
|
+
networks = [
|
|
534
|
+
{ 'net_id' => '1' }
|
|
535
|
+
]
|
|
536
|
+
servers.should_receive(:create).with(
|
|
537
|
+
:name => 'hello',
|
|
538
|
+
:image_ref => '111',
|
|
539
|
+
:flavor_ref => '1',
|
|
540
|
+
:public_key_path => 'tarpals',
|
|
541
|
+
:nics => networks
|
|
542
|
+
)
|
|
543
|
+
driver.send(:create_server)
|
|
544
|
+
end
|
|
545
|
+
end
|
|
546
|
+
|
|
547
|
+
context 'multiple networks specifies id' do
|
|
548
|
+
let(:config) do
|
|
549
|
+
{
|
|
550
|
+
:server_name => 'hello',
|
|
551
|
+
:image_ref => '111',
|
|
552
|
+
:flavor_ref => '1',
|
|
553
|
+
:public_key_path => 'tarpals',
|
|
554
|
+
:network_ref => %w(1 2)
|
|
555
|
+
}
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
it 'exact id match' do
|
|
559
|
+
networks = [
|
|
560
|
+
{ 'net_id' => '1' },
|
|
561
|
+
{ 'net_id' => '2' },
|
|
562
|
+
]
|
|
563
|
+
servers.should_receive(:create).with(
|
|
564
|
+
:name => 'hello',
|
|
565
|
+
:image_ref => '111',
|
|
566
|
+
:flavor_ref => '1',
|
|
567
|
+
:public_key_path => 'tarpals',
|
|
568
|
+
:nics => networks
|
|
569
|
+
)
|
|
570
|
+
driver.send(:create_server)
|
|
571
|
+
end
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
context 'user_data specified' do
|
|
575
|
+
let(:config) do
|
|
576
|
+
{
|
|
577
|
+
:server_name => 'hello',
|
|
578
|
+
:image_ref => '111',
|
|
579
|
+
:flavor_ref => '1',
|
|
580
|
+
:public_key_path => 'tarpals',
|
|
581
|
+
:user_data => 'cloud-init.txt'
|
|
582
|
+
}
|
|
583
|
+
end
|
|
584
|
+
let(:data) { "#cloud-config\n" }
|
|
585
|
+
|
|
586
|
+
before(:each) do
|
|
587
|
+
File.stub(:exist?).and_return(true)
|
|
588
|
+
File.stub(:open).and_return(data)
|
|
589
|
+
end
|
|
590
|
+
|
|
591
|
+
it 'should pass file contents' do
|
|
592
|
+
servers.should_receive(:create).with(
|
|
593
|
+
:name => 'hello',
|
|
594
|
+
:image_ref => '111',
|
|
595
|
+
:flavor_ref => '1',
|
|
596
|
+
:public_key_path => 'tarpals',
|
|
597
|
+
:user_data => data)
|
|
598
|
+
driver.send(:create_server)
|
|
599
|
+
end
|
|
600
|
+
end
|
|
470
601
|
end
|
|
471
602
|
|
|
472
603
|
describe '#generate_name' do
|
metadata
CHANGED
|
@@ -1,181 +1,181 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kitchen-openstack
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jonathan Hartman
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-
|
|
11
|
+
date: 2014-03-09 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: test-kitchen
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - ~>
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '1.1'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - ~>
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '1.1'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: fog
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - ~>
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '1.18'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - ~>
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '1.18'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: unf
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- -
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '0'
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- -
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: bundler
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- -
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
61
|
version: '0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- -
|
|
66
|
+
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: rake
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- -
|
|
73
|
+
- - ">="
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
75
|
version: '0'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- -
|
|
80
|
+
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '0'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: tailor
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- -
|
|
87
|
+
- - ">="
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
89
|
version: '0'
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- -
|
|
94
|
+
- - ">="
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '0'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: cane
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
|
-
- -
|
|
101
|
+
- - ">="
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
103
|
version: '0'
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
|
-
- -
|
|
108
|
+
- - ">="
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
110
|
version: '0'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: countloc
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
|
-
- -
|
|
115
|
+
- - ">="
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
117
|
version: '0'
|
|
118
118
|
type: :development
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
|
-
- -
|
|
122
|
+
- - ">="
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
124
|
version: '0'
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
126
|
name: rspec
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
|
128
128
|
requirements:
|
|
129
|
-
- -
|
|
129
|
+
- - ">="
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
131
|
version: '0'
|
|
132
132
|
type: :development
|
|
133
133
|
prerelease: false
|
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
135
|
requirements:
|
|
136
|
-
- -
|
|
136
|
+
- - ">="
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
138
|
version: '0'
|
|
139
139
|
- !ruby/object:Gem::Dependency
|
|
140
140
|
name: simplecov
|
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
|
142
142
|
requirements:
|
|
143
|
-
- -
|
|
143
|
+
- - ">="
|
|
144
144
|
- !ruby/object:Gem::Version
|
|
145
145
|
version: '0'
|
|
146
146
|
type: :development
|
|
147
147
|
prerelease: false
|
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
149
|
requirements:
|
|
150
|
-
- -
|
|
150
|
+
- - ">="
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
152
|
version: '0'
|
|
153
153
|
- !ruby/object:Gem::Dependency
|
|
154
154
|
name: simplecov-console
|
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
|
156
156
|
requirements:
|
|
157
|
-
- -
|
|
157
|
+
- - ">="
|
|
158
158
|
- !ruby/object:Gem::Version
|
|
159
159
|
version: '0'
|
|
160
160
|
type: :development
|
|
161
161
|
prerelease: false
|
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
163
|
requirements:
|
|
164
|
-
- -
|
|
164
|
+
- - ">="
|
|
165
165
|
- !ruby/object:Gem::Version
|
|
166
166
|
version: '0'
|
|
167
167
|
- !ruby/object:Gem::Dependency
|
|
168
168
|
name: coveralls
|
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
|
170
170
|
requirements:
|
|
171
|
-
- -
|
|
171
|
+
- - ">="
|
|
172
172
|
- !ruby/object:Gem::Version
|
|
173
173
|
version: '0'
|
|
174
174
|
type: :development
|
|
175
175
|
prerelease: false
|
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
|
177
177
|
requirements:
|
|
178
|
-
- -
|
|
178
|
+
- - ">="
|
|
179
179
|
- !ruby/object:Gem::Version
|
|
180
180
|
version: '0'
|
|
181
181
|
description: A Test Kitchen OpenStack Nova driver
|
|
@@ -185,8 +185,8 @@ executables: []
|
|
|
185
185
|
extensions: []
|
|
186
186
|
extra_rdoc_files: []
|
|
187
187
|
files:
|
|
188
|
-
- .gitignore
|
|
189
|
-
- .travis.yml
|
|
188
|
+
- ".gitignore"
|
|
189
|
+
- ".travis.yml"
|
|
190
190
|
- CHANGELOG.md
|
|
191
191
|
- Gemfile
|
|
192
192
|
- LICENSE.txt
|
|
@@ -207,17 +207,17 @@ require_paths:
|
|
|
207
207
|
- lib
|
|
208
208
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
209
209
|
requirements:
|
|
210
|
-
- -
|
|
210
|
+
- - ">="
|
|
211
211
|
- !ruby/object:Gem::Version
|
|
212
212
|
version: '0'
|
|
213
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
214
|
requirements:
|
|
215
|
-
- -
|
|
215
|
+
- - ">="
|
|
216
216
|
- !ruby/object:Gem::Version
|
|
217
217
|
version: '0'
|
|
218
218
|
requirements: []
|
|
219
219
|
rubyforge_project:
|
|
220
|
-
rubygems_version: 2.2.
|
|
220
|
+
rubygems_version: 2.2.2
|
|
221
221
|
signing_key:
|
|
222
222
|
specification_version: 4
|
|
223
223
|
summary: A Test Kitchen OpenStack Nova driver
|