spiceweasel 0.1.0 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/{MILESTONES.md → CHANGELOG.md} +20 -31
- data/README.md +75 -55
- data/bin/spiceweasel +125 -40
- data/example.yml +20 -20
- data/lib/spiceweasel/version.rb +1 -1
- data/test.sh +48 -0
- metadata +8 -5
@@ -10,42 +10,31 @@ This is the current, previous and future development milestones and contains the
|
|
10
10
|
|
11
11
|
0.2
|
12
12
|
===
|
13
|
-
*
|
14
|
-
* --
|
15
|
-
* --delete The option `--delete` will delete each cookbook, role, data bag, environment and node described in the yml file. All nodes from the system are deleted with `knife node bulk_delete`.
|
13
|
+
* switch to mixlib-cli
|
14
|
+
* --dryrun The option `--dryrun` will print the commands to run, but not actually execute them (the default behavior)
|
15
|
+
* --delete The option `--delete` will delete each cookbook, role, data bag, environment and node described in the yml file. All nodes from the system are deleted with `knife node bulk_delete`.
|
16
16
|
* --rebuild The option `--rebuild` will remove all currently managed infrastructure for this chef repository and rebuild it from scratch.
|
17
17
|
|
18
18
|
0.3
|
19
19
|
===
|
20
|
-
*
|
20
|
+
* renamed MILESTONES.md to CHANGELOG.md
|
21
|
+
* fixed version number
|
22
|
+
* updated YAML schema and examples because Ruby 1.8 does not order hashes.
|
23
|
+
* validate that the recipes and roles listed in the nodes are loaded
|
24
|
+
|
25
|
+
0.4
|
26
|
+
===
|
27
|
+
* --chef-client The option `--chef-client` will make a `knife ssh` call to each box and run `chef-client` on each.
|
28
|
+
* --chef-client validation that nodes are added
|
21
29
|
|
22
30
|
BACKLOG
|
23
31
|
=======
|
24
|
-
|
25
|
-
|
26
|
-
*
|
27
|
-
* JSON
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
* JSON?
|
32
|
-
* validate recipes and roles have been uploaded
|
33
|
-
|
34
|
-
Data Bags
|
35
|
-
---------
|
36
|
-
|
37
|
-
Environments
|
38
|
-
------------
|
39
|
-
|
40
|
-
Nodes
|
41
|
-
-----
|
42
|
-
* Provider
|
43
|
-
* on delete... what to do?
|
32
|
+
* support site vendor for cookbooks
|
33
|
+
* support versions for cookbooks
|
34
|
+
* add support for environments
|
35
|
+
* make the JSON calls directly with Spice (https://github.com/danryan/spice)
|
36
|
+
* -e/--execute execute the commands
|
37
|
+
* catching return codes and retrying (with retry count?)
|
38
|
+
* on provider delete take count of vendor-specific, delete if match (ec2 server delete and node delete)
|
44
39
|
* knife windows bootstrap FQDN [RUN LIST...] (options)
|
45
|
-
|
46
|
-
Wishlist
|
47
|
-
--------
|
48
|
-
* use GNU parallel
|
49
|
-
* make the JSON calls directly (and possibly parallelize)
|
50
|
-
* --dryrun The option `--dryrun` will print the commands to run, but not actually execute them.
|
51
|
-
|
40
|
+
* use GNU parallel with knife?
|
data/README.md
CHANGED
@@ -1,59 +1,59 @@
|
|
1
1
|
Description
|
2
2
|
===========
|
3
|
-
Spiceweasel is a command-line tool for batch loading Chef infrastructure. It provides a simple syntax for describing and deploying infrastructure with the Chef command-line tool `knife`.
|
3
|
+
Spiceweasel is a command-line tool for batch loading Chef infrastructure. It provides a simple syntax for describing and deploying infrastructure in order with the Chef command-line tool `knife`.
|
4
4
|
|
5
|
-
|
5
|
+
CHANGELOG.md covers current, previous and future development milestones and contains the features backlog.
|
6
6
|
|
7
7
|
Requirements
|
8
8
|
============
|
9
9
|
Spiceweasel currently depends on `knife` to run commands for it.
|
10
10
|
|
11
|
-
Written with Chef 0.9.12 and supports cookbooks, recipes, roles, data bags and nodes. Support for environments will be added with the Chef 0.10 release.
|
11
|
+
Written with Chef 0.9.12 and 0.9.14 and supports cookbooks, recipes, roles, data bags and nodes. Support for environments will be added with the Chef 0.10 release.
|
12
12
|
|
13
13
|
Testing
|
14
14
|
-------
|
15
|
-
Tested with Ubuntu 10.04 and 10.10 and Chef 0.9.12.
|
15
|
+
Tested with Ubuntu 10.04 and 10.10 and Chef 0.9.12 and 0.9.14.
|
16
16
|
|
17
17
|
File Syntax
|
18
18
|
===========
|
19
19
|
The syntax for the spiceweasel file is a simple YAML format of Chef primitives describing what is to be instantiated.
|
20
20
|
|
21
21
|
cookbooks:
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
- apache2:
|
23
|
+
- apt:
|
24
|
+
- mysql:
|
25
25
|
|
26
26
|
roles:
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
- base:
|
28
|
+
- monitoring:
|
29
|
+
- webserver:
|
30
30
|
|
31
31
|
data bags:
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
32
|
+
- users:
|
33
|
+
- alice
|
34
|
+
- bob
|
35
|
+
- chuck
|
36
|
+
- data:
|
37
37
|
|
38
38
|
nodes:
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
39
|
+
- serverA:
|
40
|
+
- role[base]
|
41
|
+
- -i ~/.ssh/mray.pem -x user --sudo -d ubuntu10.04-gems
|
42
|
+
- ec2 5:
|
43
|
+
- role[webserver] recipe[mysql::client]
|
44
|
+
- -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
45
|
+
- rackspace 3:
|
46
|
+
- recipe[mysql] role[monitoring]
|
47
|
+
- --image 49 --flavor 2
|
48
48
|
|
49
49
|
Cookbooks
|
50
50
|
---------
|
51
51
|
The `cookbooks` section of the YAML file currently supports `knife cookbook upload FOO` where `FOO` is the name of the cookbook in the `cookbooks` directory. The YAML snippet
|
52
52
|
|
53
53
|
cookbooks:
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
- apache2:
|
55
|
+
- apt:
|
56
|
+
- mysql:
|
57
57
|
|
58
58
|
produces the knife commands
|
59
59
|
|
@@ -66,9 +66,9 @@ Roles
|
|
66
66
|
The `roles` section of the 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
|
67
67
|
|
68
68
|
roles:
|
69
|
-
|
70
|
-
|
71
|
-
|
69
|
+
- base:
|
70
|
+
- monitoring:
|
71
|
+
- webserver:
|
72
72
|
|
73
73
|
produces the knife commands
|
74
74
|
|
@@ -81,46 +81,46 @@ Data Bags
|
|
81
81
|
The `data bags` section of the 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 YAML sequence, the assumption is made that they `.json` files and in the `data_bags` directory. The YAML snippet
|
82
82
|
|
83
83
|
data bags:
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
84
|
+
- users:
|
85
|
+
- alice
|
86
|
+
- bob
|
87
|
+
- chuck
|
88
|
+
- data:
|
89
89
|
|
90
90
|
produces the knife commands
|
91
91
|
|
92
|
-
knife data bag create data
|
93
92
|
knife data bag create users
|
94
93
|
knife data bag from file users data_bags/alice.json
|
95
94
|
knife data bag from file users data_bags/bob.json
|
96
95
|
knife data bag from file users data_bags/chuck.json
|
96
|
+
knife data bag create data
|
97
97
|
|
98
98
|
Nodes
|
99
99
|
-----
|
100
|
-
The `nodes` section of the 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 YAML sequence. The first item is the run_list and the second the CLI options 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
|
100
|
+
The `nodes` section of the 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 YAML sequence. The first item is the run_list and the second the CLI options used. Validation is performed on the run_list components to ensure that only recipes and roles listed in the YAML 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
|
101
101
|
|
102
102
|
nodes:
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
103
|
+
- serverA:
|
104
|
+
- role[base]
|
105
|
+
- -i ~/.ssh/mray.pem -x user --sudo -d ubuntu10.04-gems
|
106
|
+
- ec2 5:
|
107
|
+
- role[webserver] recipe[mysql::client]
|
108
|
+
- -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
109
|
+
- rackspace 3:
|
110
|
+
- recipe[mysql] role[monitoring]
|
111
|
+
- --image 49 --flavor 2
|
112
112
|
|
113
113
|
produces the knife commands
|
114
114
|
|
115
|
-
knife bootstrap serverA 'role[
|
116
|
-
knife ec2 server create 'role[webserver]' -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
117
|
-
knife ec2 server create 'role[webserver]' -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
118
|
-
knife ec2 server create 'role[webserver]' -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
119
|
-
knife ec2 server create 'role[webserver]' -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
120
|
-
knife ec2 server create 'role[webserver]' -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
121
|
-
knife rackspace server create 'recipe[mysql]' 'role[
|
122
|
-
knife rackspace server create 'recipe[mysql]' 'role[
|
123
|
-
knife rackspace server create 'recipe[mysql]' 'role[
|
115
|
+
knife bootstrap serverA 'role[base]' -i ~/.ssh/mray.pem -x user --sudo -d ubuntu10.04-gems
|
116
|
+
knife ec2 server create 'role[webserver]' 'recipe[mysql::client]' -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
117
|
+
knife ec2 server create 'role[webserver]' 'recipe[mysql::client]' -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
118
|
+
knife ec2 server create 'role[webserver]' 'recipe[mysql::client]' -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
119
|
+
knife ec2 server create 'role[webserver]' 'recipe[mysql::client]' -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
120
|
+
knife ec2 server create 'role[webserver]' 'recipe[mysql::client]' -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
121
|
+
knife rackspace server create 'recipe[mysql]' 'role[monitoring]' --image 49 --flavor 2
|
122
|
+
knife rackspace server create 'recipe[mysql]' 'role[monitoring]' --image 49 --flavor 2
|
123
|
+
knife rackspace server create 'recipe[mysql]' 'role[monitoring]' --image 49 --flavor 2
|
124
124
|
|
125
125
|
Usage
|
126
126
|
=====
|
@@ -130,6 +130,26 @@ To run a spiceweasel file, run the following from you Chef repository directory:
|
|
130
130
|
|
131
131
|
This will generate the knife commands to build the described infrastructure.
|
132
132
|
|
133
|
+
--dryrun
|
134
|
+
--------
|
135
|
+
This is the default action, printing the knife commands to be run without executing them.
|
136
|
+
|
137
|
+
-d/--delete
|
138
|
+
-----------
|
139
|
+
The delete command will generate the knife commands to delete the infrastructure described in the YAML file. This includes each cookbook, role, data bag, environment and node listed. Currently all nodes from the system are deleted with `knife node bulk_delete`, specific-node support will be added in a future release.
|
140
|
+
|
141
|
+
-h/--help
|
142
|
+
---------
|
143
|
+
Print the currently-supported usage options for spiceweasel.
|
144
|
+
|
145
|
+
-r/--rebuild
|
146
|
+
---------
|
147
|
+
The rebuild command will generate the knife commands to delete and recreate the infrastructure described in the YAML file. This includes each cookbook, role, data bag, environment and node listed. Currently all nodes from the system are deleted with `knife node bulk_delete`, specific-node support will be added in a future release.
|
148
|
+
|
149
|
+
-v/--version
|
150
|
+
------------
|
151
|
+
Print the version of spiceweasel currently installed.
|
152
|
+
|
133
153
|
License and Author
|
134
154
|
==================
|
135
155
|
Author: Matt Ray <matt@opscode.com>
|
data/bin/spiceweasel
CHANGED
@@ -1,84 +1,169 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'mixlib/cli'
|
4
4
|
require 'yaml'
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
5
|
+
require 'spiceweasel/version'
|
6
|
+
|
7
|
+
#ensure that the run_list contents are present in either the cookbooks or roles
|
8
|
+
def validate_run_list(run_list, cookbooks, roles)
|
9
|
+
run_list.each do |item|
|
10
|
+
if item.start_with?("recipe")
|
11
|
+
#recipe[foo] or recipe[foo::bar]
|
12
|
+
recipe = item.slice(7..-2).split("::")[0]
|
13
|
+
unless cookbooks.member?(recipe)
|
14
|
+
raise "'#{item}' is an invalid run_list recipe not managed by spiceweasel"
|
15
|
+
exit(-1)
|
16
|
+
end
|
17
|
+
elsif item.start_with?("role")
|
18
|
+
#role[blah]
|
19
|
+
role = item.slice(5..-2)
|
20
|
+
unless roles.member?(role)
|
21
|
+
raise "'#{item}' is an invalid run_list role not managed by spiceweasel"
|
22
|
+
exit(-1)
|
23
|
+
end
|
24
|
+
else
|
25
|
+
raise "'#{item}' is an invalid run_list component"
|
26
|
+
exit(-1)
|
27
|
+
end
|
16
28
|
end
|
17
29
|
end
|
18
30
|
|
31
|
+
class SpiceweaselCLI
|
32
|
+
include Mixlib::CLI
|
33
|
+
|
34
|
+
banner("Usage: spiceweasel [option] file")
|
35
|
+
|
36
|
+
option :delete,
|
37
|
+
:short => "-d",
|
38
|
+
:long => "--delete",
|
39
|
+
:description => "Print the knife commands to be delete the infrastructure",
|
40
|
+
:boolean => true
|
41
|
+
|
42
|
+
option :dryrun,
|
43
|
+
:long => "--dryrun",
|
44
|
+
:description => "Print the knife commands to be executed to STDOUT",
|
45
|
+
:boolean => true
|
46
|
+
|
47
|
+
option :help,
|
48
|
+
:short => "-h",
|
49
|
+
:long => "--help",
|
50
|
+
:description => "Show this message",
|
51
|
+
:on => :tail,
|
52
|
+
:boolean => true,
|
53
|
+
:show_options => true,
|
54
|
+
:exit => 0
|
55
|
+
|
56
|
+
option :rebuild,
|
57
|
+
:short => "-r",
|
58
|
+
:long => "--rebuild",
|
59
|
+
:description => "Print the knife commands to be delete and recreate the infrastructure",
|
60
|
+
:boolean => true
|
61
|
+
|
62
|
+
option :version,
|
63
|
+
:short => "-v",
|
64
|
+
:long => "--version",
|
65
|
+
:description => "Version",
|
66
|
+
:boolean => true,
|
67
|
+
:proc => lambda {|v| puts "Spiceweasel: #{Spiceweasel::VERSION}" },
|
68
|
+
:exit => 0
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
#process command line options
|
19
73
|
begin
|
20
74
|
ARGV << "-h" if ARGV.empty?
|
21
|
-
|
22
|
-
|
23
|
-
|
75
|
+
cli = SpiceweaselCLI.new
|
76
|
+
cli.parse_options
|
77
|
+
rescue OptionParser::InvalidOption => e
|
78
|
+
STDERR.puts e.message
|
79
|
+
#puts???
|
24
80
|
exit(-1)
|
25
81
|
end
|
26
82
|
|
83
|
+
begin
|
84
|
+
yml = YAML.load_file ARGV.last
|
85
|
+
rescue Exception
|
86
|
+
STDERR.puts "No infrastructure YAML file provided."
|
87
|
+
#puts???
|
88
|
+
exit(-1)
|
89
|
+
end
|
27
90
|
|
28
|
-
|
29
|
-
|
91
|
+
create = String.new()
|
92
|
+
delete = String.new()
|
30
93
|
|
31
94
|
#cookbooks
|
32
95
|
cookbooks = yml['cookbooks'] || []
|
96
|
+
cookbook_list = []
|
33
97
|
cookbooks.each do |cookbook|
|
34
|
-
|
98
|
+
delete += "knife cookbook delete #{cookbook.keys[0]} -y\n"
|
99
|
+
create += "knife cookbook upload #{cookbook.keys[0]}\n"
|
100
|
+
#flatten list of cookbooks for validation later
|
101
|
+
cookbook_list.push(cookbook.keys[0])
|
35
102
|
end
|
36
103
|
|
37
104
|
#roles
|
38
105
|
roles = yml['roles'] || []
|
106
|
+
role_list = []
|
39
107
|
roles.each do |role|
|
40
|
-
|
108
|
+
delete += "knife role delete #{role.keys[0]} -y\n"
|
109
|
+
create += "knife role from file #{role.keys[0]}.rb\n"
|
110
|
+
#flatten list of roles for validation later
|
111
|
+
role_list.push(role.keys[0])
|
41
112
|
end
|
42
113
|
|
43
114
|
#data bags
|
44
115
|
bags = yml['data bags'] || []
|
45
|
-
bags.
|
46
|
-
|
47
|
-
|
116
|
+
bags.each do |bag|
|
117
|
+
delete += "knife data bag delete #{bag.keys[0]} -y\n"
|
118
|
+
create += "knife data bag create #{bag.keys[0]}\n"
|
119
|
+
items = bag[bag.keys[0]] || []
|
48
120
|
items.each do |item|
|
49
|
-
|
121
|
+
create += "knife data bag from file #{bag.keys[0]} data_bags/#{item}.json\n"
|
50
122
|
end
|
51
123
|
end
|
52
124
|
|
53
125
|
nodes = yml['nodes'] || []
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
126
|
+
#currently use bulk_delete for deleting, add provider support real soon
|
127
|
+
delete += "knife node bulk_delete .* -y\n"
|
128
|
+
nodes.each do |node|
|
129
|
+
# delete += "knife node delete #{node[node.keys[0]}\n"
|
130
|
+
run_list = node[node.keys[0]][0].split()
|
131
|
+
validate_run_list(run_list, cookbook_list, role_list)
|
132
|
+
if node.keys[0].start_with?("bluebox","ec2","rackspace","slicehost","terremark")
|
133
|
+
provider = node.keys[0].split()
|
59
134
|
count = 1
|
60
135
|
if (provider.length == 2)
|
61
136
|
count = provider[1]
|
62
137
|
end
|
63
138
|
count.to_i.times do
|
64
|
-
|
139
|
+
create += "knife #{provider[0]} server create "
|
65
140
|
run_list.each do |x|
|
66
|
-
|
141
|
+
create += "\'#{x}\' "
|
67
142
|
end
|
68
|
-
|
143
|
+
create +="#{node[node.keys[0]][1]}\n"
|
69
144
|
end
|
70
145
|
else
|
71
|
-
|
146
|
+
create += "knife bootstrap #{node.keys[0]} "
|
72
147
|
run_list.each do |x|
|
73
|
-
|
148
|
+
create += "\'#{x}\' "
|
74
149
|
end
|
75
|
-
|
150
|
+
create +="#{node[node.keys[0]][1]}\n"
|
76
151
|
end
|
77
152
|
end
|
78
153
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
154
|
+
#just print the knife commands, do not execute
|
155
|
+
#if cli.config[:dryrun]
|
156
|
+
if cli.config[:delete]
|
157
|
+
puts delete unless delete.empty?
|
158
|
+
elsif cli.config[:rebuild]
|
159
|
+
puts delete unless delete.empty?
|
160
|
+
puts create unless create.empty?
|
161
|
+
else
|
162
|
+
puts create unless create.empty?
|
163
|
+
end
|
164
|
+
#else
|
165
|
+
#eventually we will execute instead of printing knife commands
|
166
|
+
#puts "BAM!"
|
167
|
+
#end
|
168
|
+
|
169
|
+
|
data/example.yml
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
cookbooks:
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
- apache2:
|
3
|
+
- apt:
|
4
|
+
- mysql:
|
5
5
|
|
6
6
|
roles:
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
- base:
|
8
|
+
- monitoring:
|
9
|
+
- webserver:
|
10
10
|
|
11
11
|
data bags:
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
- users:
|
13
|
+
- alice
|
14
|
+
- bob
|
15
|
+
- chuck
|
16
|
+
- data:
|
17
17
|
|
18
18
|
nodes:
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
19
|
+
- serverA:
|
20
|
+
- role[base]
|
21
|
+
- -i ~/.ssh/mray.pem -x user --sudo -d ubuntu10.04-gems
|
22
|
+
- ec2 5:
|
23
|
+
- role[webserver] recipe[mysql::client]
|
24
|
+
- -S mray -I ~/.ssh/mray.pem -x ubuntu -G default -i ami-a403f7cd -f m1.small
|
25
|
+
- rackspace 3:
|
26
|
+
- recipe[mysql] role[monitoring]
|
27
|
+
- --image 49 --flavor 2
|
data/lib/spiceweasel/version.rb
CHANGED
data/test.sh
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
echo "------------>spiceweasel"
|
2
|
+
spiceweasel
|
3
|
+
echo "------------>Return code:$?"
|
4
|
+
echo "------------>spiceweasel -h"
|
5
|
+
spiceweasel -h
|
6
|
+
echo "------------>Return code:$?"
|
7
|
+
echo "------------>spiceweasel -h example.yml"
|
8
|
+
spiceweasel -h example.yml
|
9
|
+
echo "------------>Return code:$?"
|
10
|
+
echo "------------>spiceweasel -v"
|
11
|
+
spiceweasel -v
|
12
|
+
echo "------------>Return code:$?"
|
13
|
+
echo "------------>spiceweasel -v example.yml"
|
14
|
+
spiceweasel -v example.yml
|
15
|
+
echo "------------>Return code:$?"
|
16
|
+
echo "------------>spiceweasel --version"
|
17
|
+
spiceweasel --version
|
18
|
+
echo "------------>Return code:$?"
|
19
|
+
echo "------------>spiceweasel example.yml"
|
20
|
+
spiceweasel example.yml
|
21
|
+
echo "------------>Return code:$?"
|
22
|
+
echo "------------>spiceweasel --dryrun"
|
23
|
+
spiceweasel --dryrun
|
24
|
+
echo "------------>Return code:$?"
|
25
|
+
echo "------------>spiceweasel --dryrun example.yml"
|
26
|
+
spiceweasel --dryrun example.yml
|
27
|
+
echo "------------>Return code:$?"
|
28
|
+
echo "------------>spiceweasel --help"
|
29
|
+
spiceweasel --help
|
30
|
+
echo "------------>Return code:$?"
|
31
|
+
echo "------------>spiceweasel -d"
|
32
|
+
spiceweasel -d
|
33
|
+
echo "------------>Return code:$?"
|
34
|
+
echo "------------>spiceweasel -d example.yml"
|
35
|
+
spiceweasel -d example.yml
|
36
|
+
echo "------------>Return code:$?"
|
37
|
+
echo "------------>spiceweasel --delete example.yml"
|
38
|
+
spiceweasel --delete example.yml
|
39
|
+
echo "------------>Return code:$?"
|
40
|
+
echo "------------>spiceweasel -r"
|
41
|
+
spiceweasel -r
|
42
|
+
echo "------------>Return code:$?"
|
43
|
+
echo "------------>spiceweasel -r example.yml"
|
44
|
+
spiceweasel -r example.yml
|
45
|
+
echo "------------>Return code:$?"
|
46
|
+
echo "------------>spiceweasel --rebuild example.yml"
|
47
|
+
spiceweasel --rebuild example.yml
|
48
|
+
echo "------------>Return code:$?"
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spiceweasel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 13
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
|
9
|
-
version: 0.1.0
|
8
|
+
- 3
|
9
|
+
version: "0.3"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Matt Ray
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-03-
|
17
|
+
date: 2011-03-07 00:00:00 -06:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
@@ -29,8 +29,8 @@ extra_rdoc_files: []
|
|
29
29
|
|
30
30
|
files:
|
31
31
|
- .gitignore
|
32
|
+
- CHANGELOG.md
|
32
33
|
- Gemfile
|
33
|
-
- MILESTONES.md
|
34
34
|
- README.md
|
35
35
|
- Rakefile
|
36
36
|
- bin/spiceweasel
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- lib/spiceweasel.rb
|
39
39
|
- lib/spiceweasel/version.rb
|
40
40
|
- spiceweasel.gemspec
|
41
|
+
- test.sh
|
41
42
|
has_rdoc: true
|
42
43
|
homepage: ""
|
43
44
|
licenses: []
|
@@ -52,6 +53,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
52
53
|
requirements:
|
53
54
|
- - ">="
|
54
55
|
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
55
57
|
segments:
|
56
58
|
- 0
|
57
59
|
version: "0"
|
@@ -60,6 +62,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
62
|
requirements:
|
61
63
|
- - ">="
|
62
64
|
- !ruby/object:Gem::Version
|
65
|
+
hash: 3
|
63
66
|
segments:
|
64
67
|
- 0
|
65
68
|
version: "0"
|