kitchen-openstack 1.9.0.dev → 2.0.0.dev
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 +4 -4
- data/.travis.yml +1 -12
- data/CHANGELOG.md +7 -1
- data/README.md +40 -10
- data/Rakefile +0 -3
- data/kitchen-openstack.gemspec +5 -6
- data/lib/kitchen/driver/openstack.rb +60 -49
- data/lib/kitchen/driver/openstack/volume.rb +1 -1
- data/lib/kitchen/driver/openstack_version.rb +1 -1
- data/spec/kitchen/driver/openstack_spec.rb +37 -11
- metadata +15 -8
- data/Gemfile.ohai-7 +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0fcef6ed3a8627a5040fdd71bce12e068ea0fe2
|
4
|
+
data.tar.gz: b1325ba7444d75a0e88db8a2e3429e9f4d3514f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d89d7bc5d23ddb2617be2e43671d405282531891b2c6a63e70d3993681e301e3f0f46bac27f61cb5feffbd29ab095267240fb7f9c1a01e3b700583c4bb56bca
|
7
|
+
data.tar.gz: d5592746386dde26f22029973d9594407e764894331d3d66f9ec3b00060c2e4eefbbc633cc39094978ce4b5df41446062fd82326a06f14c41d02e68f9063612d
|
data/.travis.yml
CHANGED
@@ -5,18 +5,7 @@ sudo: false
|
|
5
5
|
|
6
6
|
gemfile:
|
7
7
|
- Gemfile
|
8
|
-
- Gemfile.ohai-7
|
9
8
|
|
10
9
|
rvm:
|
11
|
-
- 1.9.3
|
12
10
|
- 2.0.0
|
13
|
-
- ruby-head
|
14
|
-
|
15
|
-
matrix:
|
16
|
-
exclude:
|
17
|
-
- rvm: 1.9.3
|
18
|
-
gemfile: Gemfile
|
19
|
-
- rvm: 2.0.0
|
20
|
-
gemfile: Gemfile.ohai-7
|
21
|
-
- rvm: ruby-head
|
22
|
-
gemfile: Gemfile.ohai-7
|
11
|
+
- ruby-head
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -15,7 +15,9 @@
|
|
15
15
|
An OpenStack Nova driver for Test Kitchen 1.0!
|
16
16
|
|
17
17
|
Shamelessly copied from [Fletcher Nichol](https://github.com/fnichol)'s
|
18
|
-
awesome work on an [EC2 driver](https://github.com/
|
18
|
+
awesome work on an [EC2 driver](https://github.com/test-kitchen/kitchen-ec2),
|
19
|
+
and [Adam Leff](https://github.com/adamleff)'s
|
20
|
+
amazing work on an [VRO driver](https://github.com/chef-partners/kitchen-vro).
|
19
21
|
|
20
22
|
## Installation
|
21
23
|
|
@@ -39,18 +41,39 @@ Or if using [chefdk](https://downloads.chef.io/chef-dk) install with:
|
|
39
41
|
|
40
42
|
Provide, at a minimum, the required driver options in your `.kitchen.yml` file:
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
44
|
+
```yaml
|
45
|
+
driver:
|
46
|
+
name: openstack
|
47
|
+
openstack_username: [YOUR OPENSTACK USERNAME]
|
48
|
+
openstack_api_key: [YOUR OPENSTACK API KEY] # AKA your OPENSTACK PASSWORD
|
49
|
+
openstack_auth_url: [YOUR OPENSTACK AUTH URL]
|
50
|
+
require_chef_omnibus: [e.g. 'true' or a version number if you need Chef]
|
51
|
+
image_ref: [SERVER IMAGE ID]
|
52
|
+
flavor_ref: [SERVER FLAVOR ID]
|
53
|
+
```
|
50
54
|
|
51
55
|
The `image_ref` and `flavor_ref` options can be specified as an exact id,
|
52
56
|
an exact name, or as a regular expression matching the name of the image or flavor.
|
53
57
|
|
58
|
+
Test Kitchen 1.4 supports multiple transports, and transports can be configure globally:
|
59
|
+
|
60
|
+
```yaml
|
61
|
+
transport:
|
62
|
+
username: ubuntu
|
63
|
+
password: mysecretpassword
|
64
|
+
```
|
65
|
+
|
66
|
+
... or per-platform:
|
67
|
+
|
68
|
+
```yaml
|
69
|
+
platforms:
|
70
|
+
name: ubuntu-14.04
|
71
|
+
transport:
|
72
|
+
password: myrootpassword
|
73
|
+
name: windows-2012r2
|
74
|
+
password: myadministratorpassword
|
75
|
+
```
|
76
|
+
|
54
77
|
By default, a unique server name will be generated and the current user's SSH
|
55
78
|
key will be used (with an RSA key taking precedence over a DSA), though that
|
56
79
|
behavior can be overridden with additional options:
|
@@ -85,18 +108,25 @@ behavior can be overridden with additional options:
|
|
85
108
|
availability_zone: [THE BLOCK STORAGE AVAILABILITY ZONE, DEFAULTS TO nova]
|
86
109
|
volume_type: [THE VOLUME TYPE, THIS IS OPTIONAL]
|
87
110
|
delete_on_termination: [WILL DELETE VOLUME ON INSTANCE DESTROY WHEN true, OTHERWISE SET TO false]
|
111
|
+
winrm_wait: [DEFAULTS TO 0, BUT THIS HELPS CONFIRM WINRM IS IN A GOOD STATE BEFORE TRYING TO CONNECT]
|
88
112
|
|
89
113
|
If a `server_name_prefix` is specified then this prefix will be used when
|
90
114
|
generating random names of the form `<NAME PREFIX>-<RANDOM STRING>` e.g.
|
91
115
|
`myproject-asdfghjk`. If both `server_name_prefix` and `server_name` are
|
92
116
|
specified then the `server_name` takes precedence.
|
93
117
|
|
118
|
+
`winrm_wait` is a workaround to deal with how WinRM comes up during machine
|
119
|
+
creation. With `cloud-init` running on most OpenStack instances having this
|
120
|
+
wait makes sure that the machine is in a good state to work with.
|
121
|
+
|
94
122
|
If a `key_name` is provided it will be used instead of any
|
95
123
|
`public_key_path` that is specified.
|
96
124
|
|
97
125
|
If a `key_name` is provided without any `private_key_path`, unexpected
|
98
126
|
behavior may result if your local RSA/DSA private key doesn't match that
|
99
|
-
OpenStack key.
|
127
|
+
OpenStack key. If you do key injection via `cloud-init` like this issue:
|
128
|
+
[#77](https://github.com/test-kitchen/kitchen-openstack/issues/77) the best
|
129
|
+
way is to make a "dummy-key."
|
100
130
|
|
101
131
|
A specific `floating_ip` or the ID of a `floating_ip_pool` can be provided to
|
102
132
|
bind a floating IP to the node. Any floating IP will be the IP used for
|
data/Rakefile
CHANGED
data/kitchen-openstack.gemspec
CHANGED
@@ -7,8 +7,8 @@ require 'kitchen/driver/openstack_version'
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
8
|
spec.name = 'kitchen-openstack'
|
9
9
|
spec.version = Kitchen::Driver::OPENSTACK_VERSION
|
10
|
-
spec.authors = ['Jonathan Hartman']
|
11
|
-
spec.email = ['j@p4nt5.com']
|
10
|
+
spec.authors = ['Jonathan Hartman', 'JJ Asghar']
|
11
|
+
spec.email = ['j@p4nt5.com', 'jj@chef.io']
|
12
12
|
spec.description = 'A Test Kitchen OpenStack Nova driver'
|
13
13
|
spec.summary = spec.description
|
14
14
|
spec.homepage = 'https://github.com/test-kitchen/kitchen-openstack'
|
@@ -19,11 +19,10 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.required_ruby_version = '>=
|
22
|
+
spec.required_ruby_version = '>= 2.0.0'
|
23
23
|
|
24
|
-
spec.add_dependency 'test-kitchen', '~> 1.
|
25
|
-
spec.add_dependency 'fog', '~> 1.
|
26
|
-
# Newer Fogs throw a warning if unf isn't there :(
|
24
|
+
spec.add_dependency 'test-kitchen', '~> 1.4', '>= 1.4.1'
|
25
|
+
spec.add_dependency 'fog', '~> 1.33'
|
27
26
|
spec.add_dependency 'unf'
|
28
27
|
spec.add_dependency 'ohai'
|
29
28
|
|
@@ -1,8 +1,10 @@
|
|
1
|
-
# Encoding:
|
1
|
+
# Encoding: UTF-8
|
2
2
|
#
|
3
3
|
# Author:: Jonathan Hartman (<j@p4nt5.com>)
|
4
|
+
# Author:: JJ Asghar (<jj@chef.io>)
|
4
5
|
#
|
5
6
|
# Copyright (C) 2013-2015, Jonathan Hartman
|
7
|
+
# Copyright (C) 2015, Chef Inc
|
6
8
|
#
|
7
9
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
10
|
# you may not use this file except in compliance with the License.
|
@@ -16,23 +18,20 @@
|
|
16
18
|
# See the License for the specific language governing permissions and
|
17
19
|
# limitations under the License.
|
18
20
|
|
19
|
-
require 'benchmark'
|
20
|
-
require 'fog'
|
21
21
|
require 'kitchen'
|
22
|
-
require '
|
23
|
-
require 'ipaddr'
|
24
|
-
require 'socket'
|
22
|
+
require 'fog'
|
25
23
|
require 'ohai'
|
26
24
|
require_relative 'openstack/volume'
|
27
25
|
|
28
26
|
module Kitchen
|
29
27
|
module Driver
|
30
|
-
#
|
31
|
-
#
|
32
|
-
# @author Jonathan Hartman <j@p4nt5.com>
|
33
|
-
class Openstack < Kitchen::Driver::SSHBase # rubocop:disable Metrics/ClassLength, Metrics/LineLength
|
28
|
+
# This takes from the Base Class and creates the OpenStack driver.
|
29
|
+
class Openstack < Kitchen::Driver::Base # rubocop:disable Metrics/ClassLength, Metrics/LineLength
|
34
30
|
@@ip_pool_lock = Mutex.new
|
35
31
|
|
32
|
+
kitchen_driver_api_version 2
|
33
|
+
plugin_version Kitchen::Driver::OPENSTACK_VERSION
|
34
|
+
|
36
35
|
default_config :server_name, nil
|
37
36
|
default_config :server_name_prefix, nil
|
38
37
|
default_config :key_name, nil
|
@@ -62,6 +61,7 @@ module Kitchen
|
|
62
61
|
default_config :network_ref, nil
|
63
62
|
default_config :no_ssh_tcp_check, false
|
64
63
|
default_config :no_ssh_tcp_check_sleep, 120
|
64
|
+
default_config :winrm_wait, 0
|
65
65
|
default_config :block_device_mapping, nil
|
66
66
|
|
67
67
|
required_config :private_key_path
|
@@ -82,23 +82,18 @@ module Kitchen
|
|
82
82
|
config[:server_name] = default_name
|
83
83
|
end
|
84
84
|
end
|
85
|
-
config[:disable_ssl_validation]
|
85
|
+
disable_ssl_validation if config[:disable_ssl_validation]
|
86
86
|
server = create_server
|
87
87
|
state[:server_id] = server.id
|
88
|
-
info "OpenStack instance <#{state[:server_id]}>
|
89
|
-
|
90
|
-
print '.'
|
91
|
-
ready?
|
92
|
-
end
|
93
|
-
info "\n(server ready)"
|
88
|
+
info "OpenStack instance with ID of <#{state[:server_id]}> is ready." # rubocop:disable Metrics/LineLength
|
89
|
+
sleep 30
|
94
90
|
if config[:floating_ip]
|
95
91
|
attach_ip(server, config[:floating_ip])
|
96
92
|
elsif config[:floating_ip_pool]
|
97
93
|
attach_ip_from_pool(server, config[:floating_ip_pool])
|
98
94
|
end
|
99
|
-
state
|
100
|
-
setup_ssh(server, state)
|
101
|
-
wait_for_ssh_key_access(state)
|
95
|
+
wait_for_server(state)
|
96
|
+
setup_ssh(server, state) if bourne_shell?
|
102
97
|
add_ohai_hint(state)
|
103
98
|
rescue Fog::Errors::Error, Excon::Errors::Error => ex
|
104
99
|
raise ActionFailed, ex.message
|
@@ -107,7 +102,7 @@ module Kitchen
|
|
107
102
|
def destroy(state)
|
108
103
|
return if state[:server_id].nil?
|
109
104
|
|
110
|
-
config[:disable_ssl_validation]
|
105
|
+
disable_ssl_validation if config[:disable_ssl_validation]
|
111
106
|
server = compute.servers.get(state[:server_id])
|
112
107
|
server.destroy unless server.nil?
|
113
108
|
info "OpenStack instance <#{state[:server_id]}> destroyed."
|
@@ -117,25 +112,6 @@ module Kitchen
|
|
117
112
|
|
118
113
|
private
|
119
114
|
|
120
|
-
def wait_for_ssh_key_access(state)
|
121
|
-
new_state = build_ssh_args(state)
|
122
|
-
new_state[2][:number_of_password_prompts] = 0
|
123
|
-
info 'Checking ssh key authentication'
|
124
|
-
30.times do
|
125
|
-
ssh = Fog::SSH.new(*new_state)
|
126
|
-
begin
|
127
|
-
ssh.run([%(uname -a)])
|
128
|
-
rescue => e
|
129
|
-
info "Server not yet accepting SSH key: #{e.message}"
|
130
|
-
sleep 1
|
131
|
-
else
|
132
|
-
info 'SSH key authetication successful'
|
133
|
-
return
|
134
|
-
end
|
135
|
-
end
|
136
|
-
fail "30 seconds went by and we couldn't connect, somethings broken"
|
137
|
-
end
|
138
|
-
|
139
115
|
def openstack_server
|
140
116
|
server_def = {
|
141
117
|
provider: 'OpenStack'
|
@@ -212,7 +188,7 @@ module Kitchen
|
|
212
188
|
when :security_groups
|
213
189
|
config[c] if config[c].is_a?(Array)
|
214
190
|
when :user_data
|
215
|
-
File.open(config[c]
|
191
|
+
File.open(config[c], &:read) if File.exist?(config[c])
|
216
192
|
else
|
217
193
|
config[c]
|
218
194
|
end
|
@@ -299,7 +275,6 @@ module Kitchen
|
|
299
275
|
def attach_ip(server, ip)
|
300
276
|
info "Attaching floating IP <#{ip}>"
|
301
277
|
server.associate_address ip
|
302
|
-
(server.addresses['public'] ||= []) << { 'version' => 4, 'addr' => ip }
|
303
278
|
end
|
304
279
|
|
305
280
|
def get_public_private_ips(server)
|
@@ -344,12 +319,25 @@ module Kitchen
|
|
344
319
|
end
|
345
320
|
|
346
321
|
def add_ohai_hint(state)
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
322
|
+
if bourne_shell?
|
323
|
+
info 'Adding OpenStack hint for ohai'
|
324
|
+
mkdir_cmd = "sudo mkdir -p #{hints_path}"
|
325
|
+
touch_cmd = "sudo touch #{hints_path}/openstack.json"
|
326
|
+
instance.transport.connection(state).execute(
|
327
|
+
"#{mkdir_cmd} && #{touch_cmd}"
|
328
|
+
)
|
329
|
+
elsif windows_os?
|
330
|
+
info 'Adding OpenStack hint for ohai'
|
331
|
+
mkdir_cmd = "mkdir #{hints_path}"
|
332
|
+
touch_cmd = "'' > #{hints_path}\\openstack.json"
|
333
|
+
instance.transport.connection(state).execute(
|
334
|
+
"#{mkdir_cmd} && #{touch_cmd}"
|
335
|
+
)
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
def hints_path
|
340
|
+
Ohai::Config[:hints_path][0]
|
353
341
|
end
|
354
342
|
|
355
343
|
def setup_ssh(server, state)
|
@@ -386,7 +374,7 @@ module Kitchen
|
|
386
374
|
config[:username],
|
387
375
|
port: config[:port])
|
388
376
|
end
|
389
|
-
info
|
377
|
+
info "Server #{state[:hostname]} has ssh ready..."
|
390
378
|
end
|
391
379
|
|
392
380
|
def disable_ssl_validation
|
@@ -394,6 +382,29 @@ module Kitchen
|
|
394
382
|
Excon.defaults[:ssl_verify_peer] = false
|
395
383
|
end
|
396
384
|
|
385
|
+
def wait_for_server(state)
|
386
|
+
state[:hostname] = get_ip(state)
|
387
|
+
if config[:winrm_wait]
|
388
|
+
info "Sleeping for #{config[:winrm_wait]} seconds to let WinRM start up..." # rubocop:disable Metrics/LineLength
|
389
|
+
countdown(config[:winrm_wait])
|
390
|
+
end
|
391
|
+
info 'Waiting for server to be ready...'
|
392
|
+
instance.transport.connection(state).wait_until_ready
|
393
|
+
rescue
|
394
|
+
error "Server #{state[:hostname]} (#{state[:server_id]}) not reachable. Destroying server..." # rubocop:disable Metrics/LineLength
|
395
|
+
destroy(state)
|
396
|
+
raise
|
397
|
+
end
|
398
|
+
|
399
|
+
def countdown(seconds)
|
400
|
+
date1 = Time.now + seconds
|
401
|
+
while Time.now < date1
|
402
|
+
t = Time.at(date1.to_i - Time.now.to_i)
|
403
|
+
puts t.strftime('%M:%S')
|
404
|
+
sleep 1
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
397
408
|
def find_matching(collection, name)
|
398
409
|
name = name.to_s
|
399
410
|
if name.start_with?('/') && name.end_with?('/')
|
@@ -7,6 +7,10 @@ require 'logger'
|
|
7
7
|
require 'stringio'
|
8
8
|
require 'rspec'
|
9
9
|
require 'kitchen'
|
10
|
+
require 'kitchen/driver/openstack'
|
11
|
+
require 'kitchen/provisioner/dummy'
|
12
|
+
require 'kitchen/transport/dummy'
|
13
|
+
require 'kitchen/verifier/dummy'
|
10
14
|
require 'ohai'
|
11
15
|
|
12
16
|
describe Kitchen::Driver::Openstack do
|
@@ -17,10 +21,17 @@ describe Kitchen::Driver::Openstack do
|
|
17
21
|
let(:dsa) { File.expand_path('~/.ssh/id_dsa') }
|
18
22
|
let(:rsa) { File.expand_path('~/.ssh/id_rsa') }
|
19
23
|
let(:instance_name) { 'potatoes' }
|
24
|
+
let(:transport) { Kitchen::Transport::Dummy.new }
|
25
|
+
let(:platform) { Kitchen::Platform.new(name: 'fake_platform') }
|
26
|
+
let(:driver) { Kitchen::Driver::Openstack.new(config) }
|
20
27
|
|
21
28
|
let(:instance) do
|
22
29
|
double(
|
23
|
-
name: instance_name,
|
30
|
+
name: instance_name,
|
31
|
+
transport: transport,
|
32
|
+
logger: logger,
|
33
|
+
platform: platform,
|
34
|
+
to_str: 'instance'
|
24
35
|
)
|
25
36
|
end
|
26
37
|
|
@@ -184,6 +195,7 @@ describe Kitchen::Driver::Openstack do
|
|
184
195
|
allow(d).to receive(:get_ip).and_return('1.2.3.4')
|
185
196
|
allow(d).to receive(:add_ohai_hint).and_return(true)
|
186
197
|
allow(d).to receive(:do_ssh_setup).and_return(true)
|
198
|
+
allow(d).to receive(:sleep)
|
187
199
|
d
|
188
200
|
end
|
189
201
|
|
@@ -197,6 +209,28 @@ describe Kitchen::Driver::Openstack do
|
|
197
209
|
}
|
198
210
|
end
|
199
211
|
end
|
212
|
+
|
213
|
+
context 'when executed with a bourne shell' do
|
214
|
+
before do
|
215
|
+
allow(driver).to receive(:bourne_shell?).and_return(true)
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'executes the ssh setup' do
|
219
|
+
expect(driver).to receive(:setup_ssh)
|
220
|
+
driver.create(state)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
context 'when executed in a non-bourne shell' do
|
225
|
+
before do
|
226
|
+
allow(driver).to receive(:bourne_shell?).and_return(false)
|
227
|
+
end
|
228
|
+
|
229
|
+
it 'does not execute the ssh setup' do
|
230
|
+
expect(driver).not_to receive(:setup_ssh)
|
231
|
+
driver.create(state)
|
232
|
+
end
|
233
|
+
end
|
200
234
|
end
|
201
235
|
|
202
236
|
describe '#destroy' do
|
@@ -812,8 +846,7 @@ describe Kitchen::Driver::Openstack do
|
|
812
846
|
end
|
813
847
|
|
814
848
|
it 'associates the IP address with the server' do
|
815
|
-
expect(driver.send(:attach_ip, server, ip)).to eq(
|
816
|
-
[{ 'version' => 4, 'addr' => ip }])
|
849
|
+
expect(driver.send(:attach_ip, server, ip)).to eq(true)
|
817
850
|
end
|
818
851
|
end
|
819
852
|
|
@@ -1067,14 +1100,7 @@ describe Kitchen::Driver::Openstack do
|
|
1067
1100
|
s
|
1068
1101
|
end
|
1069
1102
|
it 'opens an SSH session to the server' do
|
1070
|
-
|
1071
|
-
.and_return(ssh)
|
1072
|
-
res = driver.send(:add_ohai_hint, state)
|
1073
|
-
expected = [
|
1074
|
-
"sudo mkdir -p #{Ohai::Config[:hints_path][0]}",
|
1075
|
-
"sudo touch #{Ohai::Config[:hints_path][0]}/openstack.json"
|
1076
|
-
]
|
1077
|
-
expect(res).to eq(expected)
|
1103
|
+
driver.send(:add_ohai_hint, state)
|
1078
1104
|
end
|
1079
1105
|
end
|
1080
1106
|
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-openstack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.dev
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Hartman
|
8
|
+
- JJ Asghar
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
12
|
+
date: 2015-09-09 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: test-kitchen
|
@@ -16,28 +17,34 @@ dependencies:
|
|
16
17
|
requirements:
|
17
18
|
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
20
|
+
version: '1.4'
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.4.1
|
20
24
|
type: :runtime
|
21
25
|
prerelease: false
|
22
26
|
version_requirements: !ruby/object:Gem::Requirement
|
23
27
|
requirements:
|
24
28
|
- - "~>"
|
25
29
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
30
|
+
version: '1.4'
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.4.1
|
27
34
|
- !ruby/object:Gem::Dependency
|
28
35
|
name: fog
|
29
36
|
requirement: !ruby/object:Gem::Requirement
|
30
37
|
requirements:
|
31
38
|
- - "~>"
|
32
39
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
40
|
+
version: '1.33'
|
34
41
|
type: :runtime
|
35
42
|
prerelease: false
|
36
43
|
version_requirements: !ruby/object:Gem::Requirement
|
37
44
|
requirements:
|
38
45
|
- - "~>"
|
39
46
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
47
|
+
version: '1.33'
|
41
48
|
- !ruby/object:Gem::Dependency
|
42
49
|
name: unf
|
43
50
|
requirement: !ruby/object:Gem::Requirement
|
@@ -195,6 +202,7 @@ dependencies:
|
|
195
202
|
description: A Test Kitchen OpenStack Nova driver
|
196
203
|
email:
|
197
204
|
- j@p4nt5.com
|
205
|
+
- jj@chef.io
|
198
206
|
executables: []
|
199
207
|
extensions: []
|
200
208
|
extra_rdoc_files: []
|
@@ -204,7 +212,6 @@ files:
|
|
204
212
|
- ".travis.yml"
|
205
213
|
- CHANGELOG.md
|
206
214
|
- Gemfile
|
207
|
-
- Gemfile.ohai-7
|
208
215
|
- LICENSE.txt
|
209
216
|
- README.md
|
210
217
|
- Rakefile
|
@@ -227,7 +234,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
227
234
|
requirements:
|
228
235
|
- - ">="
|
229
236
|
- !ruby/object:Gem::Version
|
230
|
-
version:
|
237
|
+
version: 2.0.0
|
231
238
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
232
239
|
requirements:
|
233
240
|
- - ">"
|