kitchen-openstack 3.6.1 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +37 -18
- data/lib/kitchen/driver/openstack.rb +37 -25
- data/lib/kitchen/driver/openstack/volume.rb +17 -6
- data/lib/kitchen/driver/openstack_version.rb +3 -3
- metadata +17 -102
- data/.gitignore +0 -23
- data/.rubocop.yml +0 -16
- data/.travis.yml +0 -14
- data/CHANGELOG.md +0 -547
- data/Gemfile +0 -6
- data/LICENSE.txt +0 -17
- data/Rakefile +0 -19
- data/kitchen-openstack.gemspec +0 -39
- data/spec/kitchen/driver/openstack/volume_spec.rb +0 -126
- data/spec/kitchen/driver/openstack_spec.rb +0 -1411
- data/spec/spec_helper.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d3c139f8629d8896b075e11cb86e24e39895b8d98f82fe252577b781a1181f65
|
4
|
+
data.tar.gz: 178e6d4f4fbdc151d8cb90a3a9073f39901aab259b35955a970d1152fc4b3e2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab2a070947110663f54193aa73379f5740ec0bc353f962e4523fcc1cd721382f216db25f97a0d1199ba22208126543460fbd76e2da63493c88884f1f956fe6b4
|
7
|
+
data.tar.gz: 4d1f3d1d6f753183beabf8493c87335fd7e42485d6e889410ed4e115031c5480e7fab107a7419b6166797a081ff67a293692fd7fc27598368f31eb890377108d
|
data/README.md
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
# <a name="title"></a> Kitchen::OpenStack: A Test Kitchen Driver for OpenStack
|
2
2
|
|
3
3
|
[![Gem Version](https://img.shields.io/gem/v/kitchen-openstack.svg)][gem]
|
4
|
-
|
5
|
-
[![Code Climate](https://img.shields.io/codeclimate/github/test-kitchen/kitchen-openstack.svg)][codeclimate]
|
6
|
-
[![Coverage Status](https://img.shields.io/coveralls/test-kitchen/kitchen-openstack.svg)][coveralls]
|
7
|
-
[![Dependency Status](https://img.shields.io/gemnasium/test-kitchen/kitchen-openstack.svg)][gemnasium]
|
4
|
+
![CI](https://github.com/test-kitchen/kitchen-openstack/workflows/CI/badge.svg)
|
8
5
|
|
9
6
|
A [Test Kitchen][kitchen_ci] Driver for [OpenStack][openstack_web].
|
10
7
|
|
@@ -12,12 +9,22 @@ This driver uses the [fog gem][fog_web] to provision and destroy nova instances.
|
|
12
9
|
|
13
10
|
Shamelessly copied from [Fletcher Nichol](https://github.com/fnichol)'s awesome work on an [EC2 driver](https://github.com/test-kitchen/kitchen-ec2), and [Adam Leff](https://github.com/adamleff)'s amazing work on an [VRO driver](https://github.com/chef-partners/kitchen-vro).
|
14
11
|
|
12
|
+
## Status
|
13
|
+
|
14
|
+
This software project is no longer under active development as it has no active maintainers. The software may continue to work for some or all use cases, but issues filed in GitHub will most likely not be triaged. If a new maintainer is interested in working on this project please come chat with us in #test-kitchen on Chef Community Slack.
|
15
|
+
|
15
16
|
## Requirements
|
16
17
|
|
17
18
|
There are **no** external system requirements for this driver. However you will need access to an OpenStack cloud.
|
18
19
|
|
19
20
|
## Installation and Setup
|
20
21
|
|
22
|
+
This plugin ships out of the box with Chef Workstation, which is the easiest way to make sure you always have the latest testing dependencies in a single package.
|
23
|
+
|
24
|
+
[Download Chef Workstation](https://downloads.chef.io/tools/workstation) to get started
|
25
|
+
|
26
|
+
### Manual Installation
|
27
|
+
|
21
28
|
Add this line to your application's Gemfile:
|
22
29
|
|
23
30
|
```ruby
|
@@ -36,12 +43,6 @@ Or install it yourself as:
|
|
36
43
|
$ gem install kitchen-openstack
|
37
44
|
```
|
38
45
|
|
39
|
-
Or if using [chefdk][chefdk_dl] install with:
|
40
|
-
|
41
|
-
```bash
|
42
|
-
$ chef gem install kitchen-openstack
|
43
|
-
```
|
44
|
-
|
45
46
|
## Minimum Configuration
|
46
47
|
|
47
48
|
```yaml
|
@@ -177,7 +178,7 @@ security_groups:
|
|
177
178
|
|
178
179
|
### user\_data
|
179
180
|
|
180
|
-
If your
|
181
|
+
If your VMs have `cloud-init` enabled you can use the `user_data` in your
|
181
182
|
kitchen.yml to inject commands at boot time.
|
182
183
|
|
183
184
|
```
|
@@ -193,9 +194,28 @@ for example:
|
|
193
194
|
echo "do whatever you want to pre-configure your machine"
|
194
195
|
```
|
195
196
|
|
197
|
+
### cloud\_config
|
198
|
+
|
199
|
+
If your VMs have `cloud-init` enabled you can use `cloud_config` to generate userdata for use by cloud-init in the [cloud-config format](https://cloudinit.readthedocs.io/en/latest/topics/format.html#cloud-config-data). This provides a convenient way to specify cloud-init config inline. As the cloud-config format uses YAML the resulting userdata is essentially a copy+paste of `cloud_config` with the header line '#cloud-config'
|
200
|
+
|
201
|
+
```
|
202
|
+
driver_config:
|
203
|
+
cloud_config:
|
204
|
+
hostname: my-hostname
|
205
|
+
```
|
206
|
+
|
207
|
+
This will pass the following user data to OpenStack:
|
208
|
+
|
209
|
+
```
|
210
|
+
#cloud-config
|
211
|
+
hostname: my-hostname
|
212
|
+
```
|
213
|
+
|
214
|
+
The `cloud_config` and `user_data` options are mutually exclusive.
|
215
|
+
|
196
216
|
### config\_drive
|
197
217
|
|
198
|
-
If your
|
218
|
+
If your VMs require config drive.
|
199
219
|
|
200
220
|
```
|
201
221
|
config_drive: true
|
@@ -282,6 +302,9 @@ Otherwise set this to `false`.
|
|
282
302
|
#### creation\_timeout
|
283
303
|
Timeout to wait for volume to become available. If a large volume is provisioned, it might take time to provision it on the backend. Maximum amount of time to wait for volume to be created and be available.
|
284
304
|
|
305
|
+
#### attach\_timeout
|
306
|
+
If using a customized version of Openstack such a VMWare Integrated OPenstack (VIO), it may mark a volume active even though it is still performing some actions which may cause test kitchen to attach the volume to early which results in errors. Specify in seconds the amount of time to delay attaching the volume after its been marked active. Default timeout is 0.
|
307
|
+
|
285
308
|
#### Example
|
286
309
|
|
287
310
|
```yaml
|
@@ -292,6 +315,7 @@ block_device_mapping:
|
|
292
315
|
availability_zone: nova
|
293
316
|
delete_on_termination: false
|
294
317
|
creation_timeout: 120
|
318
|
+
attach_timeout: 240
|
295
319
|
```
|
296
320
|
|
297
321
|
## Network and Communication Configuration
|
@@ -445,10 +469,6 @@ Apache 2.0 (see [LICENSE][license])
|
|
445
469
|
|
446
470
|
|
447
471
|
[gem]: https://rubygems.org/gems/kitchen-openstack
|
448
|
-
[travis]: https://travis-ci.org/test-kitchen/kitchen-openstack
|
449
|
-
[codeclimate]: https://codeclimate.com/github/test-kitchen/kitchen-openstack
|
450
|
-
[coveralls]: https://coveralls.io/r/test-kitchen/kitchen-openstack
|
451
|
-
[gemnasium]: https://gemnasium.com/test-kitchen/kitchen-openstack
|
452
472
|
|
453
473
|
[author]: https://github.com/RoboticCheese
|
454
474
|
[maintainer]: https://github.com/jjasghar
|
@@ -456,8 +476,7 @@ Apache 2.0 (see [LICENSE][license])
|
|
456
476
|
[license]: https://github.com/test-kitchen/kitchen-openstack/blob/master/LICENSE.txt
|
457
477
|
[repo]: https://github.com/test-kitchen/kitchen-openstack
|
458
478
|
[driver_usage]: https://github.com/test-kitchen/kitchen-openstack
|
459
|
-
[chef_omnibus_dl]:
|
460
|
-
[chefdk_dl]: https://downloads.chef.io/chef-dk
|
479
|
+
[chef_omnibus_dl]: https://downloads.chef.io/tools/infra-client
|
461
480
|
[kitchen_ci]: http://kitchen.ci
|
462
481
|
|
463
482
|
[openstack_web]: http://www.openstack.org
|
@@ -1,11 +1,11 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
#
|
4
4
|
# Author:: Jonathan Hartman (<j@p4nt5.com>)
|
5
5
|
# Author:: JJ Asghar (<jj@chef.io>)
|
6
6
|
#
|
7
7
|
# Copyright (C) 2013-2015, Jonathan Hartman
|
8
|
-
# Copyright (C) 2015-
|
8
|
+
# Copyright (C) 2015-2020, Chef Software Inc.
|
9
9
|
#
|
10
10
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
11
11
|
# you may not use this file except in compliance with the License.
|
@@ -21,7 +21,8 @@
|
|
21
21
|
|
22
22
|
require "kitchen"
|
23
23
|
require "fog/openstack"
|
24
|
-
require "ohai"
|
24
|
+
require "ohai" unless defined?(Ohai::System)
|
25
|
+
require "yaml"
|
25
26
|
require_relative "openstack_version"
|
26
27
|
require_relative "openstack/volume"
|
27
28
|
|
@@ -116,8 +117,7 @@ module Kitchen
|
|
116
117
|
pub_ip = pub[config[:public_ip_order].to_i] || nil
|
117
118
|
if pub_ip
|
118
119
|
info "Retrieve the ID of floating IP <#{pub_ip}>"
|
119
|
-
floating_ip_id = network.list_floating_ips(floating_ip_address: pub_ip)
|
120
|
-
.body["floatingips"][0]["id"]
|
120
|
+
floating_ip_id = network.list_floating_ips(floating_ip_address: pub_ip).body["floatingips"][0]["id"]
|
121
121
|
network.delete_floating_ip(floating_ip_id)
|
122
122
|
info "OpenStack Floating IP <#{pub_ip}> released."
|
123
123
|
end
|
@@ -133,7 +133,6 @@ module Kitchen
|
|
133
133
|
|
134
134
|
def openstack_server
|
135
135
|
server_def = {
|
136
|
-
provider: "OpenStack",
|
137
136
|
connection_options: {},
|
138
137
|
}
|
139
138
|
required_server_settings.each { |s| server_def[s] = config[s] }
|
@@ -147,7 +146,7 @@ module Kitchen
|
|
147
146
|
end
|
148
147
|
|
149
148
|
def optional_server_settings
|
150
|
-
Fog::Compute
|
149
|
+
Fog::OpenStack::Compute.recognized.select do |k|
|
151
150
|
k.to_s.start_with?("openstack")
|
152
151
|
end - required_server_settings
|
153
152
|
end
|
@@ -157,11 +156,11 @@ module Kitchen
|
|
157
156
|
end
|
158
157
|
|
159
158
|
def network
|
160
|
-
Fog::Network.new(openstack_server)
|
159
|
+
Fog::OpenStack::Network.new(openstack_server)
|
161
160
|
end
|
162
161
|
|
163
162
|
def compute
|
164
|
-
Fog::Compute.new(openstack_server)
|
163
|
+
Fog::OpenStack::Compute.new(openstack_server)
|
165
164
|
end
|
166
165
|
|
167
166
|
def volume
|
@@ -174,7 +173,8 @@ module Kitchen
|
|
174
173
|
|
175
174
|
def create_server
|
176
175
|
server_def = init_configuration
|
177
|
-
|
176
|
+
raise(ActionFailed, "Cannot specify both network_ref and network_id") if config[:network_id] && config[:network_ref]
|
177
|
+
|
178
178
|
if config[:network_id]
|
179
179
|
networks = [].concat([config[:network_id]])
|
180
180
|
server_def[:nics] = networks.flatten.map do |net_id|
|
@@ -201,6 +201,12 @@ module Kitchen
|
|
201
201
|
server_def[c] = optional_config(c) if config[c]
|
202
202
|
end
|
203
203
|
|
204
|
+
if config[:cloud_config]
|
205
|
+
raise(ActionFailed, "Cannot specify both cloud_config and user_data") if config[:user_data]
|
206
|
+
|
207
|
+
server_def[:user_data] = Kitchen::Util.stringified_hash(config[:cloud_config]).to_yaml.gsub(/^---\n/, "#cloud-config\n")
|
208
|
+
end
|
209
|
+
|
204
210
|
# Can't use the Fog bootstrap and/or setup methods here; they require a
|
205
211
|
# public IP address that can't be guaranteed to exist across all
|
206
212
|
# OpenStack deployments (e.g. TryStack ARM only has private IPs).
|
@@ -208,8 +214,9 @@ module Kitchen
|
|
208
214
|
end
|
209
215
|
|
210
216
|
def init_configuration
|
211
|
-
|
212
|
-
|
217
|
+
raise(ActionFailed, "Cannot specify both image_ref and image_id") if config[:image_id] && config[:image_ref]
|
218
|
+
raise(ActionFailed, "Cannot specify both flavor_ref and flavor_id") if config[:flavor_id] && config[:flavor_ref]
|
219
|
+
|
213
220
|
{
|
214
221
|
name: config[:server_name],
|
215
222
|
image_ref: config[:image_id] || find_image(config[:image_ref]).id,
|
@@ -231,21 +238,24 @@ module Kitchen
|
|
231
238
|
|
232
239
|
def find_image(image_ref)
|
233
240
|
image = find_matching(compute.images, image_ref)
|
234
|
-
|
241
|
+
raise(ActionFailed, "Image not found") unless image
|
242
|
+
|
235
243
|
debug "Selected image: #{image.id} #{image.name}"
|
236
244
|
image
|
237
245
|
end
|
238
246
|
|
239
247
|
def find_flavor(flavor_ref)
|
240
248
|
flavor = find_matching(compute.flavors, flavor_ref)
|
241
|
-
|
249
|
+
raise(ActionFailed, "Flavor not found") unless flavor
|
250
|
+
|
242
251
|
debug "Selected flavor: #{flavor.id} #{flavor.name}"
|
243
252
|
flavor
|
244
253
|
end
|
245
254
|
|
246
255
|
def find_network(network_ref)
|
247
256
|
net = find_matching(network.networks.all, network_ref)
|
248
|
-
|
257
|
+
raise(ActionFailed, "Network not found") unless net
|
258
|
+
|
249
259
|
debug "Selected net: #{net.id} #{net.name}"
|
250
260
|
net
|
251
261
|
end
|
@@ -261,7 +271,7 @@ module Kitchen
|
|
261
271
|
def default_name
|
262
272
|
[
|
263
273
|
instance.name.gsub(/\W/, "")[0..14],
|
264
|
-
(Etc.getpwuid.name || "nologin").gsub(/\W/, "")[0..14],
|
274
|
+
((Etc.getpwuid ? Etc.getpwuid.name : Etc.getlogin) || "nologin").gsub(/\W/, "")[0..14],
|
265
275
|
Socket.gethostname.gsub(/\W/, "")[0..22],
|
266
276
|
Array.new(7) { rand(36).to_s(36) }.join,
|
267
277
|
].join("-")
|
@@ -297,8 +307,10 @@ module Kitchen
|
|
297
307
|
@@ip_pool_lock.synchronize do
|
298
308
|
info "Attaching floating IP from <#{pool}> pool"
|
299
309
|
if config[:allocate_floating_ip]
|
300
|
-
network_id = network
|
301
|
-
|
310
|
+
network_id = network
|
311
|
+
.list_networks(
|
312
|
+
name: pool
|
313
|
+
).body["networks"][0]["id"]
|
302
314
|
resp = network.create_floating_ip(network_id)
|
303
315
|
ip = resp.body["floatingip"]["floating_ip_address"]
|
304
316
|
info "Created floating IP <#{ip}> from <#{pool}> pool"
|
@@ -308,8 +320,9 @@ module Kitchen
|
|
308
320
|
i.ip if i.fixed_ip.nil? && i.instance_id.nil? && i.pool == pool
|
309
321
|
end.compact
|
310
322
|
if free_addrs.empty?
|
311
|
-
|
323
|
+
raise ActionFailed, "No available IPs in pool <#{pool}>"
|
312
324
|
end
|
325
|
+
|
313
326
|
config[:floating_ip] = free_addrs[0]
|
314
327
|
end
|
315
328
|
attach_ip(server, config[:floating_ip])
|
@@ -325,7 +338,7 @@ module Kitchen
|
|
325
338
|
begin
|
326
339
|
pub = server.public_ip_addresses
|
327
340
|
priv = server.private_ip_addresses
|
328
|
-
rescue Fog::Compute::
|
341
|
+
rescue Fog::OpenStack::Compute::NotFound, Excon::Errors::Forbidden
|
329
342
|
# See Fog issue: https://github.com/fog/fog/issues/2160
|
330
343
|
addrs = server.addresses
|
331
344
|
addrs["public"] && pub = addrs["public"].map { |i| i["addr"] }
|
@@ -352,8 +365,7 @@ module Kitchen
|
|
352
365
|
# should also work for private networks
|
353
366
|
if config[:openstack_network_name]
|
354
367
|
debug "Using configured net: #{config[:openstack_network_name]}"
|
355
|
-
return filter_ips(server.addresses[config[:openstack_network_name]])
|
356
|
-
.first["addr"]
|
368
|
+
return filter_ips(server.addresses[config[:openstack_network_name]]).first["addr"]
|
357
369
|
end
|
358
370
|
|
359
371
|
pub, priv = get_public_private_ips(server)
|
@@ -361,7 +373,7 @@ module Kitchen
|
|
361
373
|
pub, priv = parse_ips(pub, priv)
|
362
374
|
pub[config[:public_ip_order].to_i] ||
|
363
375
|
priv[config[:private_ip_order].to_i] ||
|
364
|
-
|
376
|
+
raise(ActionFailed, "Could not find an IP")
|
365
377
|
end
|
366
378
|
|
367
379
|
def filter_ips(addresses)
|
@@ -406,7 +418,7 @@ module Kitchen
|
|
406
418
|
end
|
407
419
|
|
408
420
|
def disable_ssl_validation
|
409
|
-
require "excon"
|
421
|
+
require "excon" unless defined?(Excon)
|
410
422
|
Excon.defaults[:ssl_verify_peer] = false
|
411
423
|
end
|
412
424
|
|
@@ -436,7 +448,7 @@ module Kitchen
|
|
436
448
|
if name.start_with?("/") && name.end_with?("/")
|
437
449
|
regex = Regexp.new(name[1...-1])
|
438
450
|
# check for regex name match
|
439
|
-
collection.each { |single| return single if regex
|
451
|
+
collection.each { |single| return single if regex&.match?(single.name) }
|
440
452
|
else
|
441
453
|
# check for exact id match
|
442
454
|
collection.each { |single| return single if single.id == name }
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
#
|
4
4
|
# Author:: Jonathan Hartman (<j@p4nt5.com>)
|
@@ -35,7 +35,7 @@ module Kitchen
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def volume(openstack_server)
|
38
|
-
Fog::Volume.new(openstack_server)
|
38
|
+
Fog::OpenStack::Volume.new(openstack_server)
|
39
39
|
end
|
40
40
|
|
41
41
|
def create_volume(config, os)
|
@@ -47,10 +47,13 @@ module Kitchen
|
|
47
47
|
opt[key] = bdm[key]
|
48
48
|
end
|
49
49
|
@logger.info "Creating Volume..."
|
50
|
-
resp = volume(os)
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
resp = volume(os)
|
51
|
+
.create_volume(
|
52
|
+
"#{config[:server_name]}-volume",
|
53
|
+
"#{config[:server_name]} volume",
|
54
|
+
bdm[:volume_size],
|
55
|
+
opt
|
56
|
+
)
|
54
57
|
vol_id = resp[:body]["volume"]["id"]
|
55
58
|
|
56
59
|
# Get Volume Model to make waiting for ready easy
|
@@ -66,9 +69,17 @@ module Kitchen
|
|
66
69
|
vol_model.wait_for(creation_timeout) do
|
67
70
|
sleep(1)
|
68
71
|
raise("Failed to make volume") if status.casecmp("error".downcase) == 0
|
72
|
+
|
69
73
|
ready?
|
70
74
|
end
|
71
75
|
|
76
|
+
attach_timeout = bdm.key?(:attach_timeout) ? bdm[:attach_timeout] : 0
|
77
|
+
|
78
|
+
if attach_timeout > 0
|
79
|
+
@logger.debug "Sleeping for an additional #{attach_timeout} seconds before attaching volume to wait for Openstack to finish disk creation process.."
|
80
|
+
sleep(attach_timeout)
|
81
|
+
end
|
82
|
+
|
72
83
|
@logger.debug "Volume Ready"
|
73
84
|
|
74
85
|
vol_id
|
@@ -1,10 +1,10 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
#
|
4
4
|
# Author:: Jonathan Hartman (<j@p4nt5.com>)
|
5
5
|
#
|
6
6
|
# Copyright (C) 2013-2015, Jonathan Hartman
|
7
|
-
# Copyright (C) 2015-
|
7
|
+
# Copyright (C) 2015-2021, Chef Software Inc
|
8
8
|
#
|
9
9
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
10
10
|
# you may not use this file except in compliance with the License.
|
@@ -23,6 +23,6 @@ module Kitchen
|
|
23
23
|
#
|
24
24
|
# @author Jonathan Hartman <j@p4nt5.com>
|
25
25
|
module Driver
|
26
|
-
OPENSTACK_VERSION = "
|
26
|
+
OPENSTACK_VERSION = "6.0.0"
|
27
27
|
end
|
28
28
|
end
|
metadata
CHANGED
@@ -1,64 +1,50 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-openstack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Hartman
|
8
8
|
- JJ Asghar
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-02-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: test-kitchen
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "~>"
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '1.4'
|
21
18
|
- - ">="
|
22
19
|
- !ruby/object:Gem::Version
|
23
20
|
version: 1.4.1
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '3'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
-
- - "~>"
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
version: '1.4'
|
31
28
|
- - ">="
|
32
29
|
- !ruby/object:Gem::Version
|
33
30
|
version: 1.4.1
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: fog-openstack
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0
|
40
|
+
version: '1.0'
|
41
41
|
type: :runtime
|
42
42
|
prerelease: false
|
43
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: unf
|
50
|
-
requirement: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
type: :runtime
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
47
|
+
version: '1.0'
|
62
48
|
- !ruby/object:Gem::Dependency
|
63
49
|
name: ohai
|
64
50
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,20 +101,6 @@ dependencies:
|
|
115
101
|
- - ">="
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
|
-
- !ruby/object:Gem::Dependency
|
119
|
-
name: cane
|
120
|
-
requirement: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
type: :development
|
126
|
-
prerelease: false
|
127
|
-
version_requirements: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
104
|
- !ruby/object:Gem::Dependency
|
133
105
|
name: countloc
|
134
106
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,48 +129,6 @@ dependencies:
|
|
157
129
|
- - ">="
|
158
130
|
- !ruby/object:Gem::Version
|
159
131
|
version: '0'
|
160
|
-
- !ruby/object:Gem::Dependency
|
161
|
-
name: simplecov
|
162
|
-
requirement: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - ">="
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
167
|
-
type: :development
|
168
|
-
prerelease: false
|
169
|
-
version_requirements: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ">="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
|
-
- !ruby/object:Gem::Dependency
|
175
|
-
name: simplecov-console
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
181
|
-
type: :development
|
182
|
-
prerelease: false
|
183
|
-
version_requirements: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - ">="
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '0'
|
188
|
-
- !ruby/object:Gem::Dependency
|
189
|
-
name: coveralls
|
190
|
-
requirement: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - ">="
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: '0'
|
195
|
-
type: :development
|
196
|
-
prerelease: false
|
197
|
-
version_requirements: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - ">="
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0'
|
202
132
|
- !ruby/object:Gem::Dependency
|
203
133
|
name: github_changelog_generator
|
204
134
|
requirement: !ruby/object:Gem::Requirement
|
@@ -221,26 +151,15 @@ executables: []
|
|
221
151
|
extensions: []
|
222
152
|
extra_rdoc_files: []
|
223
153
|
files:
|
224
|
-
- ".gitignore"
|
225
|
-
- ".rubocop.yml"
|
226
|
-
- ".travis.yml"
|
227
|
-
- CHANGELOG.md
|
228
|
-
- Gemfile
|
229
|
-
- LICENSE.txt
|
230
154
|
- README.md
|
231
|
-
- Rakefile
|
232
|
-
- kitchen-openstack.gemspec
|
233
155
|
- lib/kitchen/driver/openstack.rb
|
234
156
|
- lib/kitchen/driver/openstack/volume.rb
|
235
157
|
- lib/kitchen/driver/openstack_version.rb
|
236
|
-
- spec/kitchen/driver/openstack/volume_spec.rb
|
237
|
-
- spec/kitchen/driver/openstack_spec.rb
|
238
|
-
- spec/spec_helper.rb
|
239
158
|
homepage: https://github.com/test-kitchen/kitchen-openstack
|
240
159
|
licenses:
|
241
|
-
- Apache
|
160
|
+
- Apache-2.0
|
242
161
|
metadata: {}
|
243
|
-
post_install_message:
|
162
|
+
post_install_message:
|
244
163
|
rdoc_options: []
|
245
164
|
require_paths:
|
246
165
|
- lib
|
@@ -248,19 +167,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
248
167
|
requirements:
|
249
168
|
- - ">="
|
250
169
|
- !ruby/object:Gem::Version
|
251
|
-
version: 2.
|
170
|
+
version: 2.6.0
|
252
171
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
253
172
|
requirements:
|
254
173
|
- - ">="
|
255
174
|
- !ruby/object:Gem::Version
|
256
175
|
version: '0'
|
257
176
|
requirements: []
|
258
|
-
|
259
|
-
|
260
|
-
signing_key:
|
177
|
+
rubygems_version: 3.1.4
|
178
|
+
signing_key:
|
261
179
|
specification_version: 4
|
262
180
|
summary: A Test Kitchen OpenStack Nova driver
|
263
|
-
test_files:
|
264
|
-
- spec/kitchen/driver/openstack/volume_spec.rb
|
265
|
-
- spec/kitchen/driver/openstack_spec.rb
|
266
|
-
- spec/spec_helper.rb
|
181
|
+
test_files: []
|