beaker-openstack 0.2.0 → 0.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/.gitignore +2 -1
- data/README.md +15 -7
- data/beaker-openstack.gemspec +7 -2
- data/lib/beaker-openstack/version.rb +1 -1
- data/lib/beaker/hypervisor/openstack.rb +45 -16
- data/spec/beaker/hypervisor/openstack_spec.rb +12 -4
- metadata +31 -31
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZTRlZjczNzlhNDIxYmJlYzNlZDdmMjQ3YWMxMjIyOWRkYzc2NTFmMg==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d6633df09acdbb5609695abe943b7d8ca80d4793
|
4
|
+
data.tar.gz: b121d5093ba7cb858cf96854949ada97ae53aacf
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NTViZjFmZjhiZGMyMjVhYzlkYzE5MDQyMDlhYjAzM2ZkOTk2YWFmZDQxMTA0
|
11
|
-
MDU3OWVjYzQzNjIyZjE0ZjM2ZjgwZjIyM2JjMzE0OWI0YTU4ZTM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YzZlYWFhMzY0MjUxNzI4NmVlYWE1ZDlmNGM4N2Q0NTNmMDY2Y2JjZWIyODA4
|
14
|
-
YzcyMGY0OTRjMzFhN2VjYjliNTk2NjRkZjIwMTRiMmFmMDk5NDM1YjU2ODQy
|
15
|
-
YTk2MmI0YzI1ZmMwMzBhYzg1Y2I4OTQ4ZGYwYjRkNzIxZmUwMjY=
|
6
|
+
metadata.gz: 6f9ad76c1b51b2ac3e190ecf931fea129b308f7bac7f6573f89b1956c4d7f7ad7237f09a22ea0619b82b9ae5662e230614700b906f334cc564d198947438543f
|
7
|
+
data.tar.gz: 88e8e676509fa13b677597e773719b850691ba4eed0581748a6318edfe1c7a9ae843eefe7c5d185d623b1a58ac49f3cacbf285660a1e3db7a1552511f00d57f5
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -6,16 +6,24 @@ Beaker library to use openstack hypervisor
|
|
6
6
|
|
7
7
|
This gem that allows you to use hosts with [openstack](openstack.md) hypervisor with [beaker](https://github.com/puppetlabs/beaker).
|
8
8
|
|
9
|
-
|
9
|
+
Beaker will automatically load the appropriate hypervisors for any given hosts file, so as long as your project dependencies are satisfied there's nothing else to do. No need to `require` this library in your tests.
|
10
10
|
|
11
|
-
|
11
|
+
## With Beaker 3.x
|
12
12
|
|
13
|
-
|
13
|
+
This library is included as a dependency of Beaker 3.x versions, so there's nothing to do.
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
to use
|
18
|
-
|
15
|
+
## With Beaker 4.x
|
16
|
+
|
17
|
+
As of Beaker 4.0, all hypervisor and DSL extension libraries have been removed and are no longer dependencies. In order to use a specific hypervisor or DSL extension library in your project, you will need to include them alongside Beaker in your Gemfile or project.gemspec. E.g.
|
18
|
+
|
19
|
+
~~~ruby
|
20
|
+
# Gemfile
|
21
|
+
gem 'beaker', '~>4.0'
|
22
|
+
gem 'beaker-aws'
|
23
|
+
# project.gemspec
|
24
|
+
s.add_runtime_dependency 'beaker', '~>4.0'
|
25
|
+
s.add_runtime_dependency 'beaker-aws'
|
26
|
+
~~~
|
19
27
|
|
20
28
|
# Spec tests
|
21
29
|
|
data/beaker-openstack.gemspec
CHANGED
@@ -20,7 +20,12 @@ Gem::Specification.new do |s|
|
|
20
20
|
# Testing dependencies
|
21
21
|
s.add_development_dependency 'rspec', '~> 3.0'
|
22
22
|
s.add_development_dependency 'rspec-its'
|
23
|
-
|
23
|
+
# pin fakefs for Ruby < 2.3
|
24
|
+
if RUBY_VERSION < "2.3"
|
25
|
+
s.add_development_dependency 'fakefs', '~> 0.6', '< 0.14'
|
26
|
+
else
|
27
|
+
s.add_development_dependency 'fakefs', '~> 0.6'
|
28
|
+
end
|
24
29
|
s.add_development_dependency 'rake', '~> 10.1'
|
25
30
|
s.add_development_dependency 'simplecov'
|
26
31
|
s.add_development_dependency 'pry', '~> 0.10'
|
@@ -32,7 +37,7 @@ Gem::Specification.new do |s|
|
|
32
37
|
|
33
38
|
# Run time dependencies
|
34
39
|
s.add_runtime_dependency 'stringify-hash', '~> 0.0.0'
|
35
|
-
s.add_runtime_dependency 'fog-openstack', '
|
40
|
+
s.add_runtime_dependency 'fog-openstack', '~> 1.0.0'
|
36
41
|
|
37
42
|
end
|
38
43
|
|
@@ -12,9 +12,11 @@ module Beaker
|
|
12
12
|
#@option options [String] :openstack_api_key The key to access the OpenStack instance with (required)
|
13
13
|
#@option options [String] :openstack_username The username to access the OpenStack instance with (required)
|
14
14
|
#@option options [String] :openstack_auth_url The URL to access the OpenStack instance with (required)
|
15
|
-
#@option options [String] :openstack_tenant The tenant to access the OpenStack instance with (required)
|
15
|
+
#@option options [String] :openstack_tenant The tenant to access the OpenStack instance with (either this or openstack_project_name is required)
|
16
|
+
#@option options [String] :openstack_project_name The project name to access the OpenStack instance with (either this or openstack_tenant is required)
|
16
17
|
#@option options [String] :openstack_region The region that each OpenStack instance should be provisioned on (optional)
|
17
18
|
#@option options [String] :openstack_network The network that each OpenStack instance should be contacted through (required)
|
19
|
+
#@option options [Bool] :openstack_floating_ip Whether a floating IP should be allocated (required)
|
18
20
|
#@option options [String] :openstack_keyname The name of an existing key pair that should be auto-loaded onto each
|
19
21
|
#@option options [Hash] :security_group An array of security groups to associate with the instance
|
20
22
|
# OpenStack instance (optional)
|
@@ -32,8 +34,21 @@ module Beaker
|
|
32
34
|
raise 'You must specify an Openstack API key (:openstack_api_key) for OpenStack instances!' unless @options[:openstack_api_key]
|
33
35
|
raise 'You must specify an Openstack username (:openstack_username) for OpenStack instances!' unless @options[:openstack_username]
|
34
36
|
raise 'You must specify an Openstack auth URL (:openstack_auth_url) for OpenStack instances!' unless @options[:openstack_auth_url]
|
35
|
-
raise 'You must specify an Openstack tenant (:openstack_tenant) for OpenStack instances!' unless @options[:openstack_tenant]
|
36
37
|
raise 'You must specify an Openstack network (:openstack_network) for OpenStack instances!' unless @options[:openstack_network]
|
38
|
+
raise 'You must specify whether a floating IP (:openstack_floating_ip) should be used for OpenStack instances!' unless !@options[:openstack_floating_ip].nil?
|
39
|
+
|
40
|
+
is_v3 = @options[:openstack_auth_url].include?('/v3/')
|
41
|
+
raise 'You must specify an Openstack project name (:openstack_project_name) for OpenStack instances!' if is_v3 and !@options[:openstack_project_name]
|
42
|
+
raise 'You must specify an Openstack tenant (:openstack_tenant) for OpenStack instances!' if !is_v3 and !@options[:openstack_tenant]
|
43
|
+
raise 'Invalid option specified: v3 API expects :openstack_project_name, not :openstack_tenant for OpenStack instances!' if is_v3 and @options[:openstack_tenant]
|
44
|
+
raise 'Invalid option specified: v2 API expects :openstack_tenant, not :openstack_project_name for OpenStack instances!' if !is_v3 and @options[:openstack_project_name]
|
45
|
+
|
46
|
+
# Keystone version 3 changed the parameter names
|
47
|
+
if !is_v3
|
48
|
+
extra_credentials = {:openstack_tenant => @options[:openstack_tenant]}
|
49
|
+
else
|
50
|
+
extra_credentials = {:openstack_project_name => @options[:openstack_project_name]}
|
51
|
+
end
|
37
52
|
|
38
53
|
# Common keystone authentication credentials
|
39
54
|
@credentials = {
|
@@ -43,10 +58,10 @@ module Beaker
|
|
43
58
|
:openstack_username => @options[:openstack_username],
|
44
59
|
:openstack_tenant => @options[:openstack_tenant],
|
45
60
|
:openstack_region => @options[:openstack_region],
|
46
|
-
}
|
61
|
+
}.merge(extra_credentials)
|
47
62
|
|
48
63
|
# Keystone version 3 requires users and projects to be scoped
|
49
|
-
if
|
64
|
+
if is_v3
|
50
65
|
@credentials[:openstack_user_domain] = @options[:openstack_user_domain] || 'Default'
|
51
66
|
@credentials[:openstack_project_domain] = @options[:openstack_project_domain] || 'Default'
|
52
67
|
end
|
@@ -54,13 +69,13 @@ module Beaker
|
|
54
69
|
@compute_client ||= Fog::Compute.new(@credentials)
|
55
70
|
|
56
71
|
if not @compute_client
|
57
|
-
raise "Unable to create OpenStack Compute instance (api key: #{@options[:openstack_api_key]}, username: #{@options[:openstack_username]}, auth_url: #{@options[:openstack_auth_url]}, tenant: #{@options[:openstack_tenant]})"
|
72
|
+
raise "Unable to create OpenStack Compute instance (api key: #{@options[:openstack_api_key]}, username: #{@options[:openstack_username]}, auth_url: #{@options[:openstack_auth_url]}, tenant: #{@options[:openstack_tenant]}, project_name: #{@options[:openstack_project_name]})"
|
58
73
|
end
|
59
74
|
|
60
75
|
@network_client ||= Fog::Network.new(@credentials)
|
61
76
|
|
62
77
|
if not @network_client
|
63
|
-
raise "Unable to create OpenStack Network instance (
|
78
|
+
raise "Unable to create OpenStack Network instance (api key: #{@options[:openstack_api_key]}, username: #{@options[:openstack_username]}, auth_url: #{@options[:openstack_auth_url]}, tenant: #{@options[:openstack_tenant]}, project_name: #{@options[:openstack_project_name]})"
|
64
79
|
end
|
65
80
|
|
66
81
|
# Validate openstack_volume_support setting value, reset to boolean if passed via ENV value string
|
@@ -197,17 +212,19 @@ module Beaker
|
|
197
212
|
|
198
213
|
# Get a floating IP address to associate with the instance, try
|
199
214
|
# to allocate a new one from the specified pool if none are available
|
200
|
-
|
215
|
+
#
|
216
|
+
# TODO(GiedriusS): convert to use @network_client. This API will be turned off
|
217
|
+
# completely very soon.
|
218
|
+
def get_floating_ip
|
201
219
|
begin
|
202
220
|
@logger.debug "Creating IP"
|
203
221
|
ip = @compute_client.addresses.create
|
204
|
-
rescue Fog::Compute::
|
222
|
+
rescue Fog::OpenStack::Compute::NotFound
|
205
223
|
# If there are no more floating IP addresses, allocate a
|
206
|
-
# new one and try again.
|
224
|
+
# new one and try again.
|
207
225
|
@compute_client.allocate_address(@options[:floating_ip_pool])
|
208
226
|
ip = @compute_client.addresses.find { |ip| ip.instance_id.nil? }
|
209
227
|
end
|
210
|
-
raise 'Could not find or allocate an address' if not ip
|
211
228
|
ip
|
212
229
|
end
|
213
230
|
|
@@ -216,9 +233,15 @@ module Beaker
|
|
216
233
|
@logger.notify "Provisioning OpenStack"
|
217
234
|
|
218
235
|
@hosts.each do |host|
|
219
|
-
|
220
|
-
|
221
|
-
|
236
|
+
if @options[:openstack_floating_ip]
|
237
|
+
ip = get_floating_ip
|
238
|
+
hostname = ip.ip.gsub('.','-')
|
239
|
+
host[:vmhostname] = hostname + '.rfc1918.puppetlabs.net'
|
240
|
+
else
|
241
|
+
hostname = ('a'..'z').to_a.shuffle[0, 10].join
|
242
|
+
host[:vmhostname] = hostname
|
243
|
+
end
|
244
|
+
|
222
245
|
create_or_associate_keypair(host, hostname)
|
223
246
|
@logger.debug "Provisioning #{host.name} (#{host[:vmhostname]})"
|
224
247
|
options = {
|
@@ -252,9 +275,15 @@ module Beaker
|
|
252
275
|
try += 1
|
253
276
|
end
|
254
277
|
|
255
|
-
|
256
|
-
|
257
|
-
|
278
|
+
if @options[:openstack_floating_ip]
|
279
|
+
# Associate a public IP to the VM
|
280
|
+
ip.server = vm
|
281
|
+
host[:ip] = ip.ip
|
282
|
+
else
|
283
|
+
# Get the first address of the VM that was just created just like in the
|
284
|
+
# OpenStack UI
|
285
|
+
host[:ip] = vm.addresses.first[1][0]["addr"]
|
286
|
+
end
|
258
287
|
|
259
288
|
@logger.debug "OpenStack host #{host.name} (#{host[:vmhostname]}) assigned ip: #{host[:ip]}"
|
260
289
|
|
@@ -4,7 +4,7 @@ require 'fog/openstack'
|
|
4
4
|
module Beaker
|
5
5
|
describe Openstack do
|
6
6
|
|
7
|
-
let(:options) { make_opts.merge({'logger' => double().as_null_object}) }
|
7
|
+
let(:options) { make_opts.merge({'logger' => double().as_null_object, 'openstack_floating_ip' => true}) }
|
8
8
|
|
9
9
|
let(:openstack) {
|
10
10
|
Openstack.new(@hosts, options)
|
@@ -30,10 +30,14 @@ module Beaker
|
|
30
30
|
it 'supports keystone v3 with implicit arguments' do
|
31
31
|
v3_options = options
|
32
32
|
v3_options[:openstack_auth_url] = 'https://example.com/identity/v3/auth'
|
33
|
+
v3_options[:openstack_project_name] = 'TeamTest_ab_c'
|
34
|
+
v3_options[:openstack_tenant] = nil
|
33
35
|
|
34
36
|
credentials = Openstack.new(@hosts, v3_options).instance_eval('@credentials')
|
35
37
|
expect(credentials[:openstack_user_domain]).to eq('Default')
|
36
38
|
expect(credentials[:openstack_project_domain]).to eq('Default')
|
39
|
+
expect(credentials[:openstack_project_name]).to eq('TeamTest_ab_c')
|
40
|
+
expect(credentials[:openstack_tenant]).to be_nil
|
37
41
|
end
|
38
42
|
|
39
43
|
it 'supports keystone v3 with explicit arguments' do
|
@@ -41,10 +45,14 @@ module Beaker
|
|
41
45
|
v3_options[:openstack_auth_url] = 'https://example.com/identity/v3/auth'
|
42
46
|
v3_options[:openstack_user_domain] = 'acme.com'
|
43
47
|
v3_options[:openstack_project_domain] = 'R&D'
|
48
|
+
v3_options[:openstack_project_name] = 'Team_test_abc'
|
49
|
+
v3_options[:openstack_tenant] = nil
|
44
50
|
|
45
51
|
credentials = Openstack.new(@hosts, v3_options).instance_eval('@credentials')
|
46
52
|
expect(credentials[:openstack_user_domain]).to eq('acme.com')
|
47
53
|
expect(credentials[:openstack_project_domain]).to eq('R&D')
|
54
|
+
expect(credentials[:openstack_project_name]).to eq('Team_test_abc')
|
55
|
+
expect(credentials[:openstack_tenant]).to be_nil
|
48
56
|
end
|
49
57
|
end
|
50
58
|
|
@@ -102,7 +110,7 @@ module Beaker
|
|
102
110
|
# Simulate getting a dynamic IP from OpenStack to test key generation code
|
103
111
|
# after provisioning. See _validate_new_key_pair in openstack/nova for reference
|
104
112
|
mock_ip = double().as_null_object
|
105
|
-
allow( openstack ).to receive( :
|
113
|
+
allow( openstack ).to receive( :get_floating_ip ).and_return( mock_ip )
|
106
114
|
allow( mock_ip ).to receive( :ip ).and_return( '172.16.0.1' )
|
107
115
|
openstack.instance_eval('@options')['openstack_keyname'] = nil
|
108
116
|
|
@@ -117,7 +125,7 @@ module Beaker
|
|
117
125
|
end
|
118
126
|
end
|
119
127
|
|
120
|
-
it '
|
128
|
+
it 'get_floating_ip always allocates a new floatingip' do
|
121
129
|
# Assume beaker is being executed in parallel N times by travis (or similar).
|
122
130
|
# IPs are allocated (but not associated) before an instance is created; it is
|
123
131
|
# hightly possible the first instance will allocate a new IP and create an ssh
|
@@ -130,7 +138,7 @@ module Beaker
|
|
130
138
|
allow(@compute_client).to receive(:addresses).and_return(mock_addresses)
|
131
139
|
allow(mock_addresses).to receive(:create).and_return(mock_ip)
|
132
140
|
expect(mock_addresses).to receive(:create).exactly(3).times
|
133
|
-
(1..3).each { openstack.
|
141
|
+
(1..3).each { openstack.get_floating_ip }
|
134
142
|
end
|
135
143
|
|
136
144
|
context 'volume creation option' do
|
metadata
CHANGED
@@ -1,169 +1,169 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker-openstack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rishi Javia, Kevin Imber, Tony Vu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.0'
|
20
20
|
type: :development
|
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: '3.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec-its
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
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: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: fakefs
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0.6'
|
48
48
|
type: :development
|
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.6'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '10.1'
|
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: '10.1'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: simplecov
|
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: pry
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - ~>
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0.10'
|
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.10'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: yard
|
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: markdown
|
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: thin
|
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: stringify-hash
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - ~>
|
143
|
+
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: 0.0.0
|
146
146
|
type: :runtime
|
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.0.0
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: fog-openstack
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
159
|
+
version: 1.0.0
|
160
160
|
type: :runtime
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
166
|
+
version: 1.0.0
|
167
167
|
description: For use for the Beaker acceptance testing tool
|
168
168
|
email:
|
169
169
|
- rishi.javia@puppet.com, kevin.imber@puppet.com, tony.vu@puppet.com
|
@@ -172,8 +172,8 @@ executables:
|
|
172
172
|
extensions: []
|
173
173
|
extra_rdoc_files: []
|
174
174
|
files:
|
175
|
-
- .gitignore
|
176
|
-
- .simplecov
|
175
|
+
- ".gitignore"
|
176
|
+
- ".simplecov"
|
177
177
|
- Gemfile
|
178
178
|
- LICENSE
|
179
179
|
- README.md
|
@@ -195,17 +195,17 @@ require_paths:
|
|
195
195
|
- lib
|
196
196
|
required_ruby_version: !ruby/object:Gem::Requirement
|
197
197
|
requirements:
|
198
|
-
- -
|
198
|
+
- - ">="
|
199
199
|
- !ruby/object:Gem::Version
|
200
200
|
version: '0'
|
201
201
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
202
202
|
requirements:
|
203
|
-
- -
|
203
|
+
- - ">="
|
204
204
|
- !ruby/object:Gem::Version
|
205
205
|
version: '0'
|
206
206
|
requirements: []
|
207
207
|
rubyforge_project:
|
208
|
-
rubygems_version: 2.
|
208
|
+
rubygems_version: 2.5.1
|
209
209
|
signing_key:
|
210
210
|
specification_version: 4
|
211
211
|
summary: Beaker DSL Extension Helpers!
|