spiceweasel 0.8.1 → 0.8.2
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.
- data/README.md +15 -12
- data/bin/spiceweasel +11 -5
- data/lib/spiceweasel/cli.rb +6 -0
- data/lib/spiceweasel/cookbook_list.rb +26 -24
- data/lib/spiceweasel/data_bag_list.rb +25 -23
- data/lib/spiceweasel/environment_list.rb +8 -6
- data/lib/spiceweasel/node_list.rb +27 -25
- data/lib/spiceweasel/role_list.rb +8 -6
- data/lib/spiceweasel/version.rb +1 -1
- metadata +57 -85
data/README.md
CHANGED
@@ -4,17 +4,20 @@ Spiceweasel is a command-line tool for batch loading Chef infrastructure. It pro
|
|
4
4
|
|
5
5
|
The `examples` directory provides examples based on the Quick Starts provided at [http://help.opscode.com/kb/otherhelp](http://help.opscode.com/kb/otherhelp).
|
6
6
|
|
7
|
-
|
7
|
+
The [https://github.com/mattray/ravel-repo](https://github.com/mattray/ravel-repo) provides a working example for bootstrapping a Chef repository with Spiceweasel.
|
8
|
+
|
9
|
+
The [CHANGELOG.md](https://github.com/mattray/spiceweasel/blob/master/CHANGELOG.md) covers current, previous and future development milestones and contains the features backlog.
|
10
|
+
|
8
11
|
|
9
12
|
Requirements
|
10
13
|
============
|
11
14
|
Spiceweasel currently depends on `knife` to run commands for it. Infrastructure files must either end in .json or .yml to be processed.
|
12
15
|
|
13
|
-
Written with Chef 0.9.12
|
16
|
+
Written initially with Chef 0.9.12 (should still work) and continuing to develop with support for 0.10.
|
14
17
|
|
15
18
|
Testing
|
16
19
|
-------
|
17
|
-
Tested with Ubuntu 10.04 and Chef 0.9.16 and 0.10.
|
20
|
+
Tested with Ubuntu 10.04 and Chef 0.9.16 and 0.10.4.
|
18
21
|
|
19
22
|
File Syntax
|
20
23
|
===========
|
@@ -164,7 +167,7 @@ produces the knife commands
|
|
164
167
|
|
165
168
|
```
|
166
169
|
knife cookbook upload apache2
|
167
|
-
knife cookbook site download apt 1.1.0 --file cookbooks/apt.tgz
|
170
|
+
knife cookbook site download apt 1.1.0 --file cookbooks/apt.tgz
|
168
171
|
tar -C cookbooks/ -xf cookbooks/apt.tgz
|
169
172
|
knife cookbook upload apt
|
170
173
|
knife cookbook upload mysql
|
@@ -172,7 +175,7 @@ knife cookbook upload mysql
|
|
172
175
|
|
173
176
|
Environments
|
174
177
|
------------
|
175
|
-
The `environments` section of the JSON or YAML file currently supports `knife environment from file FOO` where `FOO` is the name of the environment file ending in `.rb` in the `environments` directory. The YAML snippet
|
178
|
+
The `environments` section of the JSON or YAML file currently supports `knife environment from file FOO` where `FOO` is the name of the environment file ending in `.rb` in the `environments` directory. The YAML snippet
|
176
179
|
|
177
180
|
``` yaml
|
178
181
|
environments:
|
@@ -181,7 +184,7 @@ environments:
|
|
181
184
|
- production:
|
182
185
|
```
|
183
186
|
|
184
|
-
produces the knife commands
|
187
|
+
produces the knife commands
|
185
188
|
|
186
189
|
```
|
187
190
|
knife environment from file development.rb
|
@@ -191,7 +194,7 @@ knife environment from file production.rb
|
|
191
194
|
|
192
195
|
Roles
|
193
196
|
-----
|
194
|
-
The `roles` section of the JSON or YAML file currently supports `knife role from file FOO` where `FOO` is the name of the role file ending in `.rb` in the `roles` directory. The YAML snippet
|
197
|
+
The `roles` section of the JSON or YAML file currently supports `knife role from file FOO` where `FOO` is the name of the role file ending in `.rb` in the `roles` directory. The YAML snippet
|
195
198
|
|
196
199
|
``` yaml
|
197
200
|
roles:
|
@@ -200,7 +203,7 @@ roles:
|
|
200
203
|
- webserver:
|
201
204
|
```
|
202
205
|
|
203
|
-
produces the knife commands
|
206
|
+
produces the knife commands
|
204
207
|
|
205
208
|
```
|
206
209
|
knife role from file base.rb
|
@@ -210,7 +213,7 @@ knife role from file webserver.rb
|
|
210
213
|
|
211
214
|
Data Bags
|
212
215
|
---------
|
213
|
-
The `data bags` section of the JSON or YAML file currently creates the data bags listed with `knife data bag create FOO` where `FOO` is the name of the data bag. Individual items may be added to the data bag as part of a JSON or YAML sequence, the assumption is made that they `.json` files and in the `data_bags/FOO` directory. You may also pass a wildcard as an entry to load all matching data bags (ie. `*`). Encrypted data bags are supported by listing `secret filename` as the first item (where `filename` is the secret key to be used). Assuming the presence of `dataA.json` and `dataB.json` in the `data_bags/data` directory, the YAML snippet
|
216
|
+
The `data bags` section of the JSON or YAML file currently creates the data bags listed with `knife data bag create FOO` where `FOO` is the name of the data bag. Individual items may be added to the data bag as part of a JSON or YAML sequence, the assumption is made that they `.json` files and in the `data_bags/FOO` directory. You may also pass a wildcard as an entry to load all matching data bags (ie. `*`). Encrypted data bags are supported by listing `secret filename` as the first item (where `filename` is the secret key to be used). Assuming the presence of `dataA.json` and `dataB.json` in the `data_bags/data` directory, the YAML snippet
|
214
217
|
|
215
218
|
``` yaml
|
216
219
|
data bags:
|
@@ -226,7 +229,7 @@ data bags:
|
|
226
229
|
- rabbitmq
|
227
230
|
```
|
228
231
|
|
229
|
-
produces the knife commands
|
232
|
+
produces the knife commands
|
230
233
|
|
231
234
|
```
|
232
235
|
knife data bag create users
|
@@ -243,7 +246,7 @@ knife data bag from file passwords data_bags/passwords/rabbitmq.json --secret-fi
|
|
243
246
|
|
244
247
|
Nodes
|
245
248
|
-----
|
246
|
-
The `nodes` section of the JSON or YAML file bootstraps a node for each entry where the entry is a hostname or provider and count. Each node requires 2 items after it in a sequence. The first item is the run_list and the second the CLI options used. The run_list may be space or comma-delimited. Validation is performed on the run_list components to ensure that only recipes and roles listed in the file are used. A shortcut syntax for bulk-creating nodes with various providers where the line starts with the provider and ends with the number of nodes to be provisioned. The YAML snippet
|
249
|
+
The `nodes` section of the JSON or YAML file bootstraps a node for each entry where the entry is a hostname or provider and count. Each node requires 2 items after it in a sequence. The first item is the run_list and the second the CLI options used. The run_list may be space or comma-delimited. Validation is performed on the run_list components to ensure that only recipes and roles listed in the file are used. A shortcut syntax for bulk-creating nodes with various providers where the line starts with the provider and ends with the number of nodes to be provisioned. The YAML snippet
|
247
250
|
|
248
251
|
``` yaml
|
249
252
|
nodes:
|
@@ -261,7 +264,7 @@ nodes:
|
|
261
264
|
- --image 49 --flavor 2
|
262
265
|
```
|
263
266
|
|
264
|
-
produces the knife commands
|
267
|
+
produces the knife commands
|
265
268
|
|
266
269
|
```
|
267
270
|
knife bootstrap serverA 'role[base]' -i ~/.ssh/mray.pem -x user --sudo -d ubuntu10.04-gems
|
data/bin/spiceweasel
CHANGED
@@ -5,6 +5,8 @@ require 'yaml'
|
|
5
5
|
|
6
6
|
require 'spiceweasel'
|
7
7
|
|
8
|
+
options={'knife_options' => ''}
|
9
|
+
|
8
10
|
#process command line options
|
9
11
|
begin
|
10
12
|
ARGV << "-h" if ARGV.empty?
|
@@ -17,6 +19,10 @@ rescue OptionParser::InvalidOption => e
|
|
17
19
|
exit(-1)
|
18
20
|
end
|
19
21
|
|
22
|
+
if cli.config[:knifeconfig]
|
23
|
+
options['knife_options']=" -c "+cli.config[:knifeconfig]
|
24
|
+
end
|
25
|
+
|
20
26
|
begin
|
21
27
|
file = ARGV.last
|
22
28
|
STDOUT.puts "DEBUG: file: #{file}" if cli.config[:debug]
|
@@ -41,12 +47,12 @@ end
|
|
41
47
|
create = String.new()
|
42
48
|
delete = String.new()
|
43
49
|
|
44
|
-
cookbook_list = Spiceweasel::CookbookList.new(input['cookbooks'])
|
45
|
-
environment_list = Spiceweasel::EnvironmentList.new(input['environments'])
|
46
|
-
role_list = Spiceweasel::RoleList.new(input['roles'])
|
47
|
-
data_bag_list = Spiceweasel::DataBagList.new(input['data bags'])
|
50
|
+
cookbook_list = Spiceweasel::CookbookList.new(input['cookbooks'], options)
|
51
|
+
environment_list = Spiceweasel::EnvironmentList.new(input['environments'], options)
|
52
|
+
role_list = Spiceweasel::RoleList.new(input['roles'], options)
|
53
|
+
data_bag_list = Spiceweasel::DataBagList.new(input['data bags'], options)
|
48
54
|
|
49
|
-
node_list = Spiceweasel::NodeList.new(input['nodes'], cookbook_list, environment_list, role_list)
|
55
|
+
node_list = Spiceweasel::NodeList.new(input['nodes'], cookbook_list, environment_list, role_list, options)
|
50
56
|
|
51
57
|
create += cookbook_list.create
|
52
58
|
create += environment_list.create
|
data/lib/spiceweasel/cli.rb
CHANGED
@@ -44,4 +44,10 @@ class Spiceweasel::CLI
|
|
44
44
|
:boolean => true,
|
45
45
|
:proc => lambda {|v| puts "Spiceweasel: #{Spiceweasel::VERSION}" },
|
46
46
|
:exit => 0
|
47
|
+
|
48
|
+
option :knifeconfig,
|
49
|
+
:short => "-c CONFIG",
|
50
|
+
:long => "--knifeconfig CONFIG",
|
51
|
+
:description => "The knife.rb configuration file to use."
|
52
|
+
|
47
53
|
end
|
@@ -1,33 +1,35 @@
|
|
1
1
|
class Spiceweasel::CookbookList
|
2
|
-
def initialize(cookbooks = [])
|
2
|
+
def initialize(cookbooks = [], options = {})
|
3
3
|
@create = @delete = ''
|
4
4
|
@cookbooks = []
|
5
|
-
cookbooks
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
if
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
5
|
+
if cookbooks
|
6
|
+
cookbooks.each do |cookbook|
|
7
|
+
cb = cookbook.keys.first
|
8
|
+
if cookbook[cb] and cookbook[cb].length > 0
|
9
|
+
version = cookbook[cb][0].to_s || ""
|
10
|
+
args = cookbook[cb][1] || ""
|
11
|
+
end
|
12
|
+
STDOUT.puts "DEBUG: cookbook: #{cb} #{version}" if DEBUG
|
13
|
+
@delete += "knife cookbook#{options['knife_options']} delete #{cb} #{version} -y\n"
|
14
|
+
if File.directory?("cookbooks")
|
15
|
+
if version and File.directory?("cookbooks/#{cb}")
|
16
|
+
#check metadata.rb for requested version
|
17
|
+
metadata = File.open("cookbooks/#{cb}/metadata.rb").grep(/^version/)[0].split()[1].gsub(/"/,'').to_s
|
18
|
+
if (metadata != version)
|
19
|
+
raise "Invalid version #{version} of '#{cb}' requested, #{metadata} is already in the cookbooks directory."
|
20
|
+
exit(-1)
|
21
|
+
end
|
22
|
+
elsif !File.directory?("cookbooks/#{cb}")
|
23
|
+
@create += "knife cookbook#{options['knife_options']} site download #{cb} #{version} --file cookbooks/#{cb}.tgz #{args}\n"
|
24
|
+
@create += "tar -C cookbooks/ -xf cookbooks/#{cb}.tgz\n"
|
20
25
|
end
|
21
|
-
|
22
|
-
|
23
|
-
@create += "tar -C cookbooks/ -xf cookbooks/#{cb}.tgz\n"
|
26
|
+
else
|
27
|
+
STDERR.puts "cookbooks directory not found, validation and downloading skipped"
|
24
28
|
end
|
25
|
-
|
26
|
-
STDERR.puts "cookbooks directory not found, validation and downloading skipped"
|
27
|
-
end
|
28
|
-
@create += "knife cookbook upload #{cb}\n"
|
29
|
+
@create += "knife cookbook#{options['knife_options']} upload #{cb}\n"
|
29
30
|
|
30
|
-
|
31
|
+
@cookbooks << cb
|
32
|
+
end
|
31
33
|
end
|
32
34
|
end
|
33
35
|
|
@@ -1,28 +1,30 @@
|
|
1
1
|
class Spiceweasel::DataBagList
|
2
|
-
def initialize(data_bags = [])
|
2
|
+
def initialize(data_bags = [], options = {})
|
3
3
|
@create = @delete = ''
|
4
|
-
data_bags
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
4
|
+
if data_bags
|
5
|
+
data_bags.each do |data_bag|
|
6
|
+
STDOUT.puts "DEBUG: data bag: #{data_bag.keys[0]}" if DEBUG
|
7
|
+
@delete += "knife data bag#{options['knife_options']} delete #{data_bag.keys[0]} -y\n"
|
8
|
+
@create += "knife data bag#{options['knife_options']} create #{data_bag.keys[0]}\n"
|
9
|
+
items = data_bag[data_bag.keys[0]] || []
|
10
|
+
secret = nil
|
11
|
+
while item = items.shift
|
12
|
+
STDOUT.puts "DEBUG: data bag #{data_bag.keys[0]} item: #{item}" if DEBUG
|
13
|
+
if item.start_with?("secret")
|
14
|
+
secret = item.split()[1]
|
15
|
+
next
|
16
|
+
end
|
17
|
+
if item =~ /\*/ #wildcard support
|
18
|
+
files = Dir.glob("data_bags/#{data_bag.keys[0]}/#{item}.json")
|
19
|
+
items += files.collect {|x| x[x.rindex('/')+1..-6]}
|
20
|
+
puts items
|
21
|
+
next
|
22
|
+
end
|
23
|
+
if secret
|
24
|
+
@create += "knife data bag#{options['knife_options']} from file #{data_bag.keys[0]} data_bags/#{data_bag.keys[0]}/#{item}.json --secret-file #{secret}\n"
|
25
|
+
else
|
26
|
+
@create += "knife data bag#{options['knife_options']} from file #{data_bag.keys[0]} data_bags/#{data_bag.keys[0]}/#{item}.json\n"
|
27
|
+
end
|
26
28
|
end
|
27
29
|
end
|
28
30
|
end
|
@@ -1,12 +1,14 @@
|
|
1
1
|
class Spiceweasel::EnvironmentList
|
2
|
-
def initialize(environments = [])
|
2
|
+
def initialize(environments = [], options = {})
|
3
3
|
@create = @delete = ''
|
4
4
|
@environments = []
|
5
|
-
environments
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
if environments
|
6
|
+
environments.each do |environment|
|
7
|
+
STDOUT.puts "DEBUG: environment: #{environment.keys[0]}" if DEBUG
|
8
|
+
@delete += "knife environment#{options['knife_options']} delete #{environment.keys[0]} -y\n"
|
9
|
+
@create += "knife environment#{options['knife_options']} from file #{environment.keys[0]}.rb\n"
|
10
|
+
@environments << environment.keys[0]
|
11
|
+
end
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
@@ -1,33 +1,35 @@
|
|
1
1
|
class Spiceweasel::NodeList
|
2
|
-
def initialize(nodes, cookbook_list, environment_list, role_list)
|
2
|
+
def initialize(nodes, cookbook_list, environment_list, role_list, options = {})
|
3
3
|
nodes ||= []
|
4
4
|
@create = @delete = ''
|
5
5
|
|
6
|
-
@delete += "knife node bulk_delete .* -y\n"
|
7
|
-
nodes
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
#create the instances
|
20
|
-
count.to_i.times do
|
21
|
-
@create += "knife #{provider[0]} server create #{node[node.keys[0]][1]}"
|
22
|
-
if run_list.length > 0
|
23
|
-
@create += " -r '#{node[node.keys[0]][0].gsub(/ /,',')}'\n"
|
6
|
+
@delete += "knife node#{options['knife_options']} bulk_delete .* -y\n"
|
7
|
+
if nodes
|
8
|
+
nodes.each do |node|
|
9
|
+
STDOUT.puts "DEBUG: node: #{node.keys[0]}" if DEBUG
|
10
|
+
run_list = node[node.keys[0]][0].gsub(/ /,',').split(',')
|
11
|
+
STDOUT.puts "DEBUG: node run_list: #{run_list}" if DEBUG
|
12
|
+
Spiceweasel::RunList.new(run_list).validate(cookbook_list, environment_list, role_list)
|
13
|
+
#provider support
|
14
|
+
if node.keys[0].start_with?("bluebox","ec2","openstack","rackspace","slicehost","terremark")
|
15
|
+
provider = node.keys[0].split()
|
16
|
+
count = 1
|
17
|
+
if (provider.length == 2)
|
18
|
+
count = provider[1]
|
24
19
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
20
|
+
#create the instances
|
21
|
+
count.to_i.times do
|
22
|
+
@create += "knife #{provider[0]}#{options['knife_options']} server create #{node[node.keys[0]][1]}"
|
23
|
+
if run_list.length > 0
|
24
|
+
@create += " -r '#{node[node.keys[0]][0].gsub(/ /,',')}'\n"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
else #multinode support
|
28
|
+
node.keys[0].split.each do |server|
|
29
|
+
@create += "knife bootstrap#{options['knife_options']} #{server} #{node[node.keys[0]][1]}"
|
30
|
+
if run_list.length > 0
|
31
|
+
@create += " -r '#{node[node.keys[0]][0].gsub(/ /,',')}'\n"
|
32
|
+
end
|
31
33
|
end
|
32
34
|
end
|
33
35
|
end
|
@@ -1,12 +1,14 @@
|
|
1
1
|
class Spiceweasel::RoleList
|
2
|
-
def initialize(roles = [])
|
2
|
+
def initialize(roles = [], options = {})
|
3
3
|
@create = @delete = ''
|
4
4
|
@roles = []
|
5
|
-
roles
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
if roles
|
6
|
+
roles.each do |role|
|
7
|
+
STDOUT.puts "DEBUG: role: #{role.keys[0]}" if DEBUG
|
8
|
+
@delete += "knife role#{options['knife_options']} delete #{role.keys[0]} -y\n"
|
9
|
+
@create += "knife role#{options['knife_options']} from file #{role.keys[0]}.rb\n"
|
10
|
+
@roles << role.keys[0]
|
11
|
+
end
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
data/lib/spiceweasel/version.rb
CHANGED
metadata
CHANGED
@@ -1,91 +1,72 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: spiceweasel
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 8
|
9
|
-
- 1
|
10
|
-
version: 0.8.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.2
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Matt Ray
|
14
9
|
- Elliot Crosby-McCullough
|
15
10
|
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
|
-
|
19
|
-
date: 2011-08-11 00:00:00 -05:00
|
13
|
+
date: 2011-10-28 00:00:00.000000000 -05:00
|
20
14
|
default_executable:
|
21
|
-
dependencies:
|
22
|
-
- !ruby/object:Gem::Dependency
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
23
17
|
name: chef
|
24
|
-
|
25
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
18
|
+
requirement: &2160839960 !ruby/object:Gem::Requirement
|
26
19
|
none: false
|
27
|
-
requirements:
|
28
|
-
- -
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
|
31
|
-
segments:
|
32
|
-
- 0
|
33
|
-
version: "0"
|
20
|
+
requirements:
|
21
|
+
- - ! '>='
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '0'
|
34
24
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: json
|
38
25
|
prerelease: false
|
39
|
-
|
26
|
+
version_requirements: *2160839960
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: &2160839480 !ruby/object:Gem::Requirement
|
40
30
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
version: "0"
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
48
35
|
type: :runtime
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: mixlib-cli
|
52
36
|
prerelease: false
|
53
|
-
|
37
|
+
version_requirements: *2160839480
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: mixlib-cli
|
40
|
+
requirement: &2160839000 !ruby/object:Gem::Requirement
|
54
41
|
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
segments:
|
60
|
-
- 0
|
61
|
-
version: "0"
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
62
46
|
type: :runtime
|
63
|
-
version_requirements: *id003
|
64
|
-
- !ruby/object:Gem::Dependency
|
65
|
-
name: rspec
|
66
47
|
prerelease: false
|
67
|
-
|
48
|
+
version_requirements: *2160839000
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rspec
|
51
|
+
requirement: &2160838480 !ruby/object:Gem::Requirement
|
68
52
|
none: false
|
69
|
-
requirements:
|
70
|
-
- -
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
|
73
|
-
segments:
|
74
|
-
- 0
|
75
|
-
version: "0"
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
76
57
|
type: :development
|
77
|
-
|
78
|
-
|
79
|
-
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: *2160838480
|
60
|
+
description: This provides a CLI for generating knife commands to build Chef-managed
|
61
|
+
infrastructure from a simple YAML file.
|
62
|
+
email:
|
80
63
|
- matt@opscode.com
|
81
64
|
- elliot.cm@gmail.com
|
82
|
-
executables:
|
65
|
+
executables:
|
83
66
|
- spiceweasel
|
84
67
|
extensions: []
|
85
|
-
|
86
68
|
extra_rdoc_files: []
|
87
|
-
|
88
|
-
files:
|
69
|
+
files:
|
89
70
|
- bin/spiceweasel
|
90
71
|
- lib/spiceweasel/cli.rb
|
91
72
|
- lib/spiceweasel/cookbook_list.rb
|
@@ -101,36 +82,27 @@ files:
|
|
101
82
|
has_rdoc: true
|
102
83
|
homepage: http://github.com/mattray/spiceweasel
|
103
84
|
licenses: []
|
104
|
-
|
105
85
|
post_install_message:
|
106
86
|
rdoc_options: []
|
107
|
-
|
108
|
-
require_paths:
|
87
|
+
require_paths:
|
109
88
|
- lib
|
110
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
90
|
none: false
|
112
|
-
requirements:
|
113
|
-
- -
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
|
116
|
-
|
117
|
-
- 0
|
118
|
-
version: "0"
|
119
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
96
|
none: false
|
121
|
-
requirements:
|
122
|
-
- -
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
|
125
|
-
segments:
|
126
|
-
- 0
|
127
|
-
version: "0"
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
128
101
|
requirements: []
|
129
|
-
|
130
102
|
rubyforge_project: spiceweasel
|
131
|
-
rubygems_version: 1.
|
103
|
+
rubygems_version: 1.6.2
|
132
104
|
signing_key:
|
133
105
|
specification_version: 3
|
134
106
|
summary: CLI for generating Chef knife commands from a simple YAML file.
|
135
|
-
test_files:
|
107
|
+
test_files:
|
136
108
|
- spec/bin/spiceweasel_spec.rb
|