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 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!