beaker-openstack 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MDJjYjZkYjUwOTBmOWQyZDg5ZDU2YTU3MjFiNDBmNDQzN2U0M2Q1NA==
5
- data.tar.gz: !binary |-
6
- ZTRlZjczNzlhNDIxYmJlYzNlZDdmMjQ3YWMxMjIyOWRkYzc2NTFmMg==
2
+ SHA1:
3
+ metadata.gz: d6633df09acdbb5609695abe943b7d8ca80d4793
4
+ data.tar.gz: b121d5093ba7cb858cf96854949ada97ae53aacf
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- OWJhMGI4YjAxMDAwY2QxZjMwMzY5ZjE5ZTU4NmMyNzU4MDc4NzExYTllZDEy
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
@@ -23,4 +23,5 @@ doc
23
23
  # Vagrant folder
24
24
  .vagrant/
25
25
  .vagrant_files/
26
- sut-files.tgz
26
+ sut-files.tgz
27
+ vendor/
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
- ### Right Now? (beaker 3.x)
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
- This gem is already included as [beaker dependency](https://github.com/puppetlabs/beaker/blob/master/beaker.gemspec) for you, so you don't need to do anything special to use this gem's functionality with beaker.
11
+ ## With Beaker 3.x
12
12
 
13
- ### In beaker's Next Major Version? (beaker 4.x)
13
+ This library is included as a dependency of Beaker 3.x versions, so there's nothing to do.
14
14
 
15
- In beaker's next major version, the requirement for beaker-openstack will be pulled
16
- from that repo. When that happens, then the usage pattern will change. In order
17
- to use this then, you'll need to include beaker-openstack as a dependency right
18
- next to beaker itself.
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
 
@@ -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
- s.add_development_dependency 'fakefs', '~> 0.6'
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', '>= 0'
40
+ s.add_runtime_dependency 'fog-openstack', '~> 1.0.0'
36
41
 
37
42
  end
38
43
 
@@ -1,3 +1,3 @@
1
1
  module BeakerOpenstack
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -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 @credentials[:openstack_auth_url].include?('/v3/')
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 (api_key: #{@options[:openstack_api_key]}, username: #{@options[:openstack_username]}, auth_url: #{@options[:openstack_auth_url]}, tenant: #{@options[:openstack_tenant]})"
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
- def get_ip
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::OpenStack::NotFound
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
- ip = get_ip
220
- hostname = ip.ip.gsub('.','-')
221
- host[:vmhostname] = hostname + '.rfc1918.puppetlabs.net'
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
- # Associate a public IP to the server
256
- ip.server = vm
257
- host[:ip] = ip.ip
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( :get_ip ).and_return( mock_ip )
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 'get_ip always allocates a new floatingip' do
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.get_ip }
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.2.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: 2018-01-09 00:00:00.000000000 Z
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: '0'
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: '0'
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.4.8
208
+ rubygems_version: 2.5.1
209
209
  signing_key:
210
210
  specification_version: 4
211
211
  summary: Beaker DSL Extension Helpers!