chef-metal 0.11.beta.11 → 0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -28
- data/README.md +108 -94
- data/lib/chef_metal/transport/ssh.rb +3 -4
- data/lib/chef_metal/version.rb +1 -1
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a4b69b8572373668b6d29bf038e2da863f399a1
|
4
|
+
data.tar.gz: 16008add0cfc263409fd632ab6205c54dba6fa0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 756dd414e8309497b54c6c007060ddeb019cc0e48f2a32b95155dd131ff3a4026ee1eaaa2c89eb78091bffad32d9ea08cd445bee911e9582b86d2d218c8a2757
|
7
|
+
data.tar.gz: 289ed6a9752f6a8eed10c62128d6213899b910442945106cf11f2a362f25e419a48ed0f2e409da7e22fe381e81005f6e30e7f43dfc2596b74f603c5ca86fc80f
|
data/CHANGELOG.md
CHANGED
@@ -1,24 +1,16 @@
|
|
1
1
|
# Chef Metal Changelog
|
2
|
-
## 0.11.beta.10 (6/3/2014)
|
3
2
|
|
4
|
-
|
5
|
-
- fix crash when no current driver is set
|
6
|
-
|
7
|
-
## 0.11.beta.9 (6/3/2014)
|
3
|
+
## 0.11 (6/3/2014)
|
8
4
|
|
5
|
+
- New Driver interface (see docs/ and blogs/ directories for documentation)
|
6
|
+
- New configuration (see docs/ and blogs/)
|
7
|
+
- get rid of annoying SSL warning (note: this turns off SSL verification, which was the default anyway)
|
9
8
|
- fix machine_batch error report to be less verbose
|
10
|
-
|
11
|
-
## 0.11.beta.7 (5/30/2014)
|
12
|
-
|
13
|
-
- allow options to be set from with_driver
|
14
9
|
- fail when machine is being moved from driver to driver
|
15
|
-
- support knife.rb config for non-canonical URLs
|
16
10
|
- @marcusn disconnect from SSH when there is a problem
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- Fix machine_batch defaults to be significantly less stupid
|
21
|
-
- Remove with_machine_batch
|
11
|
+
- fix SSH gateway code to honor any options given (@marcusn)
|
12
|
+
- Make machine_batch auto batching smarter (only batch things that have the same actions)
|
13
|
+
- Allow auto batching to be turned off with `auto_batch_machines = false` in recipes or config
|
22
14
|
- Allow this:
|
23
15
|
```ruby
|
24
16
|
machine_batch do
|
@@ -32,20 +24,8 @@
|
|
32
24
|
machines 'a', 'b', 'c'
|
33
25
|
action :destroy
|
34
26
|
end
|
35
|
-
- fix SSH gateway code to honor any options given (@marcusn)
|
36
|
-
|
37
|
-
## 0.11.beta.5 (5/28/2014)
|
38
|
-
|
39
27
|
- fix issue setting Hosted Chef ACLs on nodes
|
40
|
-
- fix
|
41
|
-
|
42
|
-
## 0.11.beta.2 (5/27/2014)
|
43
|
-
|
44
|
-
- Bring in cheffish-0.5.beta.2
|
45
|
-
|
46
|
-
## 0.11.beta (5/23/2014)
|
47
|
-
|
48
|
-
- New Driver interface (see docs/ and blogs/ directories for documentation)
|
28
|
+
- fix local mode forwarding in mixed IPv4/IPv6 environments
|
49
29
|
|
50
30
|
## 0.10.2 (5/2/2014)
|
51
31
|
|
data/README.md
CHANGED
@@ -3,35 +3,54 @@ Chef Metal
|
|
3
3
|
|
4
4
|
This library solves the problem of repeatably creating machines and infrastructures in Chef. It has a plugin model that lets you write bootstrappers for your favorite infrastructures, including VirtualBox, EC2, LXC, bare metal, and many more!
|
5
5
|
|
6
|
-
|
6
|
+
[This video](https://www.youtube.com/watch?v=Yb8QdL30WgM) explains the basics of chef-metal (though provisioners are now called drivers). Slides (more up to date) are [here](http://slides.com/jkeiser/chef-metal).
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
[
|
8
|
+
Date | Blog
|
9
|
+
-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
10
|
+
6/3/2014 | [machine_batch and parallelization](https://github.com/opscode/chef-metal/blob/master/docs/blogs/2012-05-28-machine_batch.html.markdown#chef-metal-parallelization)
|
11
|
+
6/3/2014 | [Chef Metal, Configuration and Drivers](https://github.com/opscode/chef-metal/blob/master/docs/blogs/2012-05-22-new-driver-interface.html.markdown#chef-metal-configuration-and-drivers)
|
12
|
+
3/4/2014 | [Chef Metal 0.2: Overview](http://www.getchef.com/blog/2014/03/04/chef-metal-0-2-release/) - this is a pretty good overview (though dated).
|
13
|
+
12/20/2014 | [Chef Metal Alpha](http://www.getchef.com/blog/2013/12/20/chef-metal-alpha/)
|
11
14
|
|
12
15
|
Try It Out
|
13
16
|
----------
|
14
17
|
|
15
|
-
|
18
|
+
You can try out Metal in many different flavors.
|
19
|
+
|
20
|
+
### Vagrant
|
16
21
|
|
17
|
-
|
18
|
-
cd cheffish
|
19
|
-
rake install
|
20
|
-
cd ..
|
22
|
+
To give it a spin, install Vagrant and VirtualBox and try this from the `chef-metal/docs/examples` directory:
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
chef-client -z -o myapp::vagrant,myapp::linux,myapp::small
|
24
|
+
```
|
25
|
+
gem install chef-metal
|
26
|
+
export CHEF_DRIVER=vagrant
|
27
|
+
chef-client -z vagrant_linux.rb simple.rb
|
28
|
+
```
|
28
29
|
|
29
30
|
This will create two vagrant precise64 linux boxes, "mario" and "luigi1", in `~/machinetest`, bootstrapped to an empty runlist. For Windows, you can replace `myapp::linux` with `myapp::windows`, but you'll need your own Windows vagrant box to do that (licensing!).
|
30
31
|
|
32
|
+
### AWS
|
33
|
+
|
34
|
+
If you have an AWS account, you can spin up a machine there like this:
|
35
|
+
|
36
|
+
```
|
37
|
+
gem install chef-metal
|
38
|
+
export CHEF_DRIVER=fog:AWS
|
39
|
+
chef-client -z simple.rb
|
40
|
+
```
|
41
|
+
|
42
|
+
This will create two linux boxes in the AWS account referenced by your default profile in `~/.aws/config` (or your environment variables).
|
43
|
+
|
44
|
+
When you are done with the examples, run this to clean up:
|
45
|
+
|
46
|
+
```
|
47
|
+
chef-client -z destroy_all.rb
|
48
|
+
```
|
49
|
+
|
31
50
|
What Is Chef Metal?
|
32
51
|
-------------------
|
33
52
|
|
34
|
-
Chef Metal has two major abstractions: the machine resource,
|
53
|
+
Chef Metal has two major abstractions: the machine resource, anf drivers.
|
35
54
|
|
36
55
|
### The `machine` resource
|
37
56
|
|
@@ -58,148 +77,143 @@ end
|
|
58
77
|
|
59
78
|
You will notice the dynamic nature of the number of web servers. It's all code, your imagination is the limit :)
|
60
79
|
|
61
|
-
|
62
|
-
-------
|
63
|
-
|
64
|
-
Chef Metal also works with Test Kitchen, allowing you to test entire clusters, not just machines! The repository for the kitchen-metal gem is https://github.com/doubt72/kitchen-metal.
|
65
|
-
|
66
|
-
Provisioners
|
67
|
-
------------
|
80
|
+
### Drivers
|
68
81
|
|
69
|
-
|
82
|
+
Drivers handle the real work of getting those abstract definitions into real, physical form. They handle the following tasks, idempotently (you can run the resource again and again and it will only create the machine once--though it may notice things are wrong and fix them!):
|
70
83
|
|
71
84
|
* Acquiring machines from the cloud, creating containers or VMs, or grabbing bare metal
|
72
85
|
* Connecting to those machines via ssh, winrm, or other transports
|
73
86
|
* Bootstrapping chef onto the machines and converging the recipes you suggested
|
74
87
|
|
75
|
-
The
|
88
|
+
The driver API is separated out so that new drivers can be made with minimal effort (without having to rewrite ssh, tunneling, bootstrapping, and OS support). But to the user, they appear as a single thing, so that the machine acquisition can use its smarts to autodetect the other bits (transports, OS's, etc.).
|
76
89
|
|
77
|
-
|
90
|
+
Drivers save their data in the Chef node itself, so that they will be accessible to everyone who is using the Chef server to manage the nodes.
|
78
91
|
|
79
|
-
|
92
|
+
Drivers each have their own repository. Current drivers:
|
80
93
|
|
81
94
|
**Cloud:**
|
82
95
|
- [FOG: EC2, DigitalOcean, OpenStack, etc.](https://github.com/opscode/chef-metal-fog)
|
83
96
|
|
84
97
|
**Virtualization:**
|
85
98
|
- [Vagrant: VirtualBox, VMWare Fusion, etc.](https://github.com/opscode/chef-metal-vagrant)
|
99
|
+
- [VSphere](https://github.com/RallySoftware-cookbooks/chef-metal-vsphere) (not yet up to date with 0.11)
|
86
100
|
|
87
101
|
**Containers:**
|
88
|
-
- [LXC](https://github.com/opscode/chef-metal-lxc)
|
89
|
-
- [Docker](https://github.com/opscode/chef-metal-docker)
|
102
|
+
- [LXC](https://github.com/opscode/chef-metal-lxc) (not yet up to date with 0.11)
|
103
|
+
- [Docker](https://github.com/opscode/chef-metal-docker) (not yet up to date with 0.11)
|
90
104
|
|
91
105
|
**Bare Metal:**
|
92
|
-
- [SSH (no PXE)](https://github.com/double-z/chef-metal-ssh)
|
106
|
+
- [SSH (no PXE)](https://github.com/double-z/chef-metal-ssh) (not yet up to date with 0.11)
|
93
107
|
|
94
|
-
###
|
95
|
-
|
96
|
-
chef-zero comes with a provisioner for Vagrant, an abstraction that covers VirtualBox, VMWare and other Virtual Machine drivers. To run it, you can check out the sample recipes with:
|
97
|
-
|
98
|
-
```
|
99
|
-
chef-client -z -o myapp::vagrant,myapp::linux,myapp::small
|
100
|
-
```
|
108
|
+
### Anatomy of a Recipe
|
101
109
|
|
102
|
-
|
110
|
+
chef-zero comes with a provisioner for Vagrant, an abstraction that covers VirtualBox, VMWare and other Virtual Machine drivers. In docs/examples, you can run this to try it:
|
103
111
|
|
104
112
|
```ruby
|
105
|
-
|
106
|
-
|
107
|
-
directory "#{ENV['HOME']}/machinetest/repo"
|
108
|
-
with_chef_local_server :chef_repo_path => "#{ENV['HOME']}/machinetest/repo"
|
109
|
-
|
110
|
-
vagrant_box 'precise64' do
|
111
|
-
url 'http://files.vagrantup.com/precise32.box'
|
112
|
-
end
|
113
|
+
export CHEF_DRIVER=vagrant
|
114
|
+
chef-client -z vagrant_linux.rb simple.rb
|
113
115
|
```
|
114
116
|
|
115
|
-
|
117
|
+
This is a chef-client run, which runs multiple **recipes.** Chef Metal is nothing but resources you put in recipes.
|
116
118
|
|
117
|
-
|
119
|
+
The driver is specified on the command line. Drivers are URLs. You could use `vagrant:~/vms` or `fog:AWS:default:us-east-1' as driver URLs. More information [here.](https://github.com/opscode/chef-metal/blob/master/docs/configuration.md#setting-the-driver-with-a-driver-url)
|
118
120
|
|
119
|
-
`
|
121
|
+
The `vagrant_linux.rb` recipe handles the physical specification of the machines and Vagrant box:
|
120
122
|
|
121
123
|
```ruby
|
122
|
-
require '
|
124
|
+
require 'chef_metal_vagrant'
|
123
125
|
|
124
|
-
|
125
|
-
|
126
|
-
|
126
|
+
vagrant_box 'precise64' do
|
127
|
+
url 'http://files.vagrantup.com/precise64.box'
|
128
|
+
end
|
129
|
+
|
130
|
+
with_machine_options :vagrant_options => {
|
131
|
+
'vm.box' => 'precise64'
|
127
132
|
}
|
128
133
|
```
|
129
134
|
|
130
|
-
|
135
|
+
`require 'chef_metal_vagrant'` is how we bring in the `vagrant_box` resource.
|
131
136
|
|
132
|
-
|
133
|
-
machine 'mario' do
|
134
|
-
recipe 'postgresql'
|
135
|
-
recipe 'mydb'
|
136
|
-
tag 'mydb_master'
|
137
|
-
end
|
137
|
+
`vagrant_box` makes sure a particular vagrant box exists, and lets you specify `machine_options` for things like port forwarding, OS definitions, and any other vagrant-isms.
|
138
138
|
|
139
|
-
|
139
|
+
Typically, you declare these in separate files from your machine resources. Chef Metal picks up the drivers and machine_options you have declared, and uses them to instantiate the machines you request. The actual machine definitions, in this case, are in `simple.rb`, and are generic--you could use them against Azure or EC2 as well:
|
140
140
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
recipe 'mywebapp'
|
145
|
-
end
|
141
|
+
```ruby
|
142
|
+
machine 'mario' do
|
143
|
+
tag 'itsame'
|
146
144
|
end
|
147
145
|
```
|
148
146
|
|
149
|
-
|
147
|
+
Other directives, like `recipe 'apache'`, help you set run lists and other information about the machine.
|
150
148
|
|
151
|
-
|
149
|
+
### Fog (EC2, Openstack and friends)
|
150
|
+
|
151
|
+
chef-metal also comes with a [Fog](http://fog.io/) provisioner that handles provisioning to Openstack, Rackspace, Amazon's EC2 and other cloud drivers. Before you begin, you will need to put your AWS credentials in ~/.aws/config in the format [mentioned in Option 1 here](http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#d0e726). There are other ways to specify your credentials, but this is the standard one for the Amazon CLI.
|
152
152
|
|
153
153
|
Once your credentials are in, basic usage looks like this:
|
154
154
|
|
155
155
|
```
|
156
|
-
|
156
|
+
export CHEF_DRIVER=fog:AWS
|
157
|
+
chef-client -z simple.rb
|
157
158
|
```
|
158
159
|
|
159
|
-
|
160
|
+
Other valid URLs include `fog:AWS:myprofilename` and `fog:AWS:profilename:us-west-2`.
|
160
161
|
|
161
|
-
|
162
|
-
ec2testdir = File.expand_path('~/ec2test')
|
162
|
+
Most Chef Metal drivers try hard to provide reasonable defaults so you can get started easily. Once you have specified your credentials, AMIs and other things are chosen for you.
|
163
163
|
|
164
|
-
|
164
|
+
You will usually want to create or input a custom key pair for bootstrap. To customize, specify keys and AMI and other options, you can make recipes like this:
|
165
165
|
|
166
|
-
|
166
|
+
```ruby
|
167
|
+
require 'chef_metal_fog'
|
167
168
|
|
168
|
-
|
169
|
+
fog_key_pair 'my_bootstrap_key'
|
169
170
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
171
|
+
with_machine_options :bootstrap_options => {
|
172
|
+
:key_name => 'my_bootstrap_key',
|
173
|
+
:image_id => 'ami-59a4a230',
|
174
|
+
:flavor_id => 't1.micro'
|
175
|
+
}
|
174
176
|
```
|
175
177
|
|
176
|
-
`
|
178
|
+
`fog_key_pair` creates a new key pair (if the files do not already exist) and uploads it to AWS (it will toss an error if the key pair already exists and does not match). By default, `fog_key_pair` will look for matching key files in .chef/keys, ~/.chef/keys and ~/.ssh. If it does not find one, it will place the key in `.chef/keys`. You can override this path in fog_key_pair, but if you do, you will want to modify `private_key_paths` in your configuration to match.
|
179
|
+
|
180
|
+
`with_machine_options` specifies machine_options that will be applied to any `machine` resources chef-client encounters.
|
177
181
|
|
178
|
-
|
182
|
+
You will notice that we are still using `simple.rb` here. Machine definitions are generally driver-independent. This is an important feature that allows you to spin up your clusters in different places to create staging, test or miniature dev environments.
|
179
183
|
|
180
|
-
|
184
|
+
### Pointing Boxes at Servers
|
185
|
+
|
186
|
+
By default, Chef Metal will put your boxes on the same Chef server you started chef-client with (in the case of -z, that's a local chef-zero server). Sometimes you want to put your boxes on different servers. There are a couple of ways to do that:
|
181
187
|
|
182
188
|
```ruby
|
183
|
-
|
189
|
+
with_chef_local_server :chef_repo_path => '~/repo'
|
184
190
|
```
|
185
191
|
|
186
|
-
|
192
|
+
`with_chef_local_server` is a generic directive that creates a chef-zero server pointed at the given repository. nodes, clients, data bags, and all data will be stored here on your provisioner machine if you do this.
|
193
|
+
|
194
|
+
You can use `with_chef_server` instead if you want to point at OSS, Hosted or Enterprise Chef, and if you don't specify a Chef server at all, it will use the one you are running chef-client against. Keep in mind when using `with_chef_server` and running `chef-client -z` on your workstation that you will also need to set the client name and signing key for the chef server. If you've already got knife.rb set up, then something like this will correctly create a client for the chef server on instance using your knife.rb configuration:
|
187
195
|
|
188
196
|
```ruby
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
'image_id' => 'ami-59a4a230',
|
193
|
-
'flavor_id' => 't1.micro'
|
194
|
-
}
|
195
|
-
end
|
197
|
+
with_chef_server "https://chef-server.example.org",
|
198
|
+
:client_name => Chef::Config[:node_name],
|
199
|
+
:signing_key_filename => Chef::Config[:client_key]
|
196
200
|
```
|
197
201
|
|
198
|
-
|
202
|
+
Kitchen
|
203
|
+
-------
|
204
|
+
|
205
|
+
Chef Metal also works with Test Kitchen, allowing you to test entire clusters, not just machines! The repository for the kitchen-metal gem is https://github.com/doubt72/kitchen-metal.
|
206
|
+
|
207
|
+
Documentation
|
208
|
+
-------------
|
209
|
+
* [Configuration](https://github.com/opscode/chef-metal/blob/master/docs/configuration.md#configuring-and-using-metal-drivers)
|
210
|
+
* [Writing Drivers](https://github.com/opscode/chef-metal/blob/master/docs/building_drivers.md#writing-drivers)
|
211
|
+
* [Embedding](https://github.com/opscode/chef-metal/blob/master/docs/embedding.md)
|
199
212
|
|
200
213
|
Bugs and The Plan
|
201
214
|
-----------------
|
202
215
|
|
203
|
-
|
216
|
+
Please submit bugs, gripes and feature requests at [https://github.com/opscode/chef-metal/issues](https://twitter.com/jkeiser2), contact jkeiser on Twitter at @jkeiser2, email at [jkeiser@getchef.com](mailto:jkeiser@getchef.com)
|
204
217
|
|
205
|
-
|
218
|
+
To contribute, just make a PR in the appropriate repo--also, make sure you've [signed the Chef Contributor License Agreement](https://secure.echosign.com/public/hostedForm?formid=PJIF5694K6L) (quick couple of minutes online), since this is going into core Chef eventually. It takes some time to process, so if you've just done it, let me know in the PR :) If you already signed this for a Chef contribution, you don't need to do so again--if you're not sure, you can check for your name [here](https://wiki.opscode.com/display/chef/Approved+Contributors)!
|
219
|
+
Â
|
@@ -110,10 +110,9 @@ module ChefMetal
|
|
110
110
|
uri = URI(local_url)
|
111
111
|
host = Socket.getaddrinfo(uri.host, uri.scheme, nil, :STREAM)[0][3]
|
112
112
|
if host == '127.0.0.1' || host == '[::1]'
|
113
|
-
unless session.forward.active_remotes.any? { |port, bind| port == uri.port && bind ==
|
114
|
-
#
|
115
|
-
|
116
|
-
session.forward.remote(uri.port, '127.0.0.1', uri.port)
|
113
|
+
unless session.forward.active_remotes.any? { |port, bind| port == uri.port && bind == uri.host }
|
114
|
+
Chef::Log.debug("Forwarding local server #{uri.host}:#{uri.port} to port #{uri.port} on #{username}@#{self.host}")
|
115
|
+
session.forward.remote(uri.port, uri.host, uri.port)
|
117
116
|
end
|
118
117
|
end
|
119
118
|
local_url
|
data/lib/chef_metal/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-metal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11
|
4
|
+
version: '0.11'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Keiser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef
|
@@ -84,44 +84,44 @@ dependencies:
|
|
84
84
|
name: cheffish
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.5
|
89
|
+
version: '0.5'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.5
|
96
|
+
version: '0.5'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: chef-metal-fog
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.5
|
103
|
+
version: '0.5'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.5
|
110
|
+
version: '0.5'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: chef-metal-vagrant
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.4
|
117
|
+
version: '0.4'
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.4
|
124
|
+
version: '0.4'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rspec
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -211,9 +211,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
211
211
|
version: '0'
|
212
212
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
213
213
|
requirements:
|
214
|
-
- - "
|
214
|
+
- - ">="
|
215
215
|
- !ruby/object:Gem::Version
|
216
|
-
version:
|
216
|
+
version: '0'
|
217
217
|
requirements: []
|
218
218
|
rubyforge_project:
|
219
219
|
rubygems_version: 2.2.2
|