shadow_puppet 0.3.3 → 0.4.0.beta1
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/IsolateScenarios +10 -0
- data/README.rdoc +7 -0
- data/Rakefile +3 -2
- data/bin/shadow_puppet +87 -50
- data/lib/shadow_puppet/core_ext.rb +19 -13
- data/lib/shadow_puppet/manifest.rb +37 -9
- data/shadow_puppet.gemspec +10 -7
- data/spec/fixtures/manifests.rb +14 -2
- data/spec/manifest_spec.rb +21 -1
- data/spec/spec_helper.rb +2 -1
- metadata +51 -10
- data/ginger_scenarios.rb +0 -23
data/IsolateScenarios
ADDED
data/README.rdoc
CHANGED
@@ -9,3 +9,10 @@ ShadowPuppet::Manifest.
|
|
9
9
|
|
10
10
|
A binary[http://railsmachine.github.com/shadow_puppet/files/bin/shadow_puppet.html] is provided to parse and execute a
|
11
11
|
ShadowPuppet::Manifest.
|
12
|
+
|
13
|
+
== Running the Test Suite
|
14
|
+
|
15
|
+
$ gem install rspec isolate-scenarios
|
16
|
+
$ rake spec
|
17
|
+
# To test against all supported versions of ActiveSupport:
|
18
|
+
$ isolate-scenarios rake spec
|
data/Rakefile
CHANGED
@@ -8,9 +8,9 @@ Jeweler::Tasks.new do |gem|
|
|
8
8
|
gem.email = "jesse@railsmachine.com"
|
9
9
|
gem.homepage = "http://railsmachine.github.com/shadow_puppet"
|
10
10
|
gem.rubyforge_project = "moonshine"
|
11
|
-
gem.authors = ["Jesse Newland", "Josh Nichols"]
|
11
|
+
gem.authors = ["Jesse Newland", "Josh Nichols", "Eric Lindvall", "Lee Jones", "dreamcat4", "Patrick Schless", "Ches Martin", "Rob Lingle", "Scott Fleckenstein"]
|
12
12
|
|
13
|
-
gem.version = "0.
|
13
|
+
gem.version = "0.4.0.beta1"
|
14
14
|
|
15
15
|
gem.add_dependency('puppet', ["= 0.24.8"])
|
16
16
|
gem.add_dependency('facter', [">= 1.5.4"])
|
@@ -21,6 +21,7 @@ Jeweler::Tasks.new do |gem|
|
|
21
21
|
gem.rdoc_options << '--inline-source' << '--webcvs=http://github.com/railsmachine/shadow_puppet/tree/master/'
|
22
22
|
|
23
23
|
gem.add_development_dependency "rspec", ">= 0"
|
24
|
+
gem.add_development_dependency "isolate-scenarios", ">= 0"
|
24
25
|
|
25
26
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
26
27
|
end
|
data/bin/shadow_puppet
CHANGED
@@ -29,84 +29,121 @@
|
|
29
29
|
#ShadowPuppet::Manifest. An instance of this class is created, and the
|
30
30
|
#<tt>execute</tt> method is called. All output is printed to the console.
|
31
31
|
|
32
|
-
|
32
|
+
def unindent(string)
|
33
|
+
indentation = string[/\A\s*/]
|
34
|
+
string.strip.gsub(/^#{indentation}/, "")
|
35
|
+
end
|
33
36
|
|
37
|
+
begin
|
34
38
|
require 'optparse'
|
39
|
+
|
40
|
+
ShadowPuppetOptions = Struct.new(:graph, :noop)
|
41
|
+
options = ShadowPuppetOptions.new
|
42
|
+
|
35
43
|
opts = OptionParser.new do |opts|
|
36
|
-
opts.banner =
|
37
|
-
|
38
|
-
|
44
|
+
opts.banner = "Usage: shadow_puppet [options] <manifest>"
|
45
|
+
|
46
|
+
opts.separator ""
|
47
|
+
opts.separator "Specific options:"
|
48
|
+
|
49
|
+
opts.on("--tutorial", "A simple tutorial for usage") do
|
50
|
+
puts unindent(<<-EOF)
|
51
|
+
NAME
|
52
|
+
Shadow Puppet
|
53
|
+
|
54
|
+
AUTHOR
|
55
|
+
Jesse Newland
|
56
|
+
jesse@railsmachine.com
|
57
|
+
|
58
|
+
DESCRIPTION
|
59
|
+
A Ruby DSL for puppet
|
60
|
+
|
61
|
+
EXAMPLES
|
62
|
+
Sample manifest:
|
39
63
|
|
40
|
-
|
41
|
-
|
42
|
-
|
64
|
+
# foo.rb
|
65
|
+
class Foo < ShadowPuppet::Manifest
|
66
|
+
recipe :foo
|
43
67
|
|
44
|
-
|
45
|
-
|
68
|
+
def foo
|
69
|
+
exec :foo, :command => 'echo "foo" > /tmp/foo.txt'
|
70
|
+
file '/tmp/example.txt', :ensure => :present, :content => Facter.to_hash.inspect
|
71
|
+
end
|
72
|
+
end
|
46
73
|
|
47
|
-
|
48
|
-
Sample manifest:
|
74
|
+
Executing this manifest:
|
49
75
|
|
50
|
-
|
51
|
-
|
52
|
-
|
76
|
+
$ shadow_puppet foo.rb
|
77
|
+
notice: /shadow_puppet:19861340/Exec[foo]/returns: executed successfully
|
78
|
+
$
|
53
79
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
80
|
+
The shadow_puppet binary parses the given ruby code, which is
|
81
|
+
expected to contain a class named Foo that inherits from
|
82
|
+
ShadowPuppet::Manifest. An instance of this class is created, and the
|
83
|
+
execute method is called. All output is printed to the console.
|
84
|
+
EOF
|
59
85
|
|
60
|
-
|
86
|
+
exit(1)
|
87
|
+
end
|
61
88
|
|
62
|
-
|
63
|
-
|
64
|
-
|
89
|
+
opts.on("-g", "--graph=[FILE]", "File to write graph .dot to") do |graph|
|
90
|
+
options.graph = graph
|
91
|
+
end
|
65
92
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
execute method is called. All output is printed to the console.
|
70
|
-
EOF
|
93
|
+
opts.on("-n", "--noop", "Run in a no-op or dry-run mode") do
|
94
|
+
options.noop = true
|
95
|
+
end
|
71
96
|
|
97
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
98
|
+
puts opts
|
99
|
+
exit
|
100
|
+
end
|
72
101
|
end
|
73
102
|
|
74
103
|
opts.parse!
|
75
104
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
require 'shadow_puppet'
|
86
|
-
require 'active_support/inflector'
|
87
|
-
require 'active_support/core_ext/string/inflections'
|
88
|
-
unless String.included_modules.include?(ActiveSupport::CoreExtensions::String::Inflections)
|
89
|
-
String.send :include, ActiveSupport::CoreExtensions::String::Inflections
|
105
|
+
unless filename = ARGV[0]
|
106
|
+
puts "Error: Manifest filename must be provided\n\n"
|
107
|
+
puts opts
|
108
|
+
exit(1)
|
109
|
+
# Take any variables set on the command line and update ENV
|
110
|
+
ARGV.delete_if do |arg|
|
111
|
+
next unless arg =~ /^(\w+)=(.*)$/
|
112
|
+
ENV[$1] = $2
|
113
|
+
end
|
90
114
|
end
|
115
|
+
|
116
|
+
require 'rubygems'
|
117
|
+
require 'shadow_puppet/core_ext'
|
91
118
|
require 'fileutils'
|
92
119
|
|
93
|
-
|
94
|
-
|
120
|
+
if options.noop
|
121
|
+
Puppet[:noop] = true
|
122
|
+
Puppet[:show_diff] = true
|
123
|
+
end
|
95
124
|
|
96
125
|
klass = File.basename(filename, ".rb")
|
97
126
|
require filename
|
98
|
-
manifest = klass.
|
99
|
-
|
127
|
+
manifest = klass.camelize.constantize.new
|
128
|
+
|
129
|
+
if options.graph
|
130
|
+
manifest.graph_to(klass.classify, options.graph)
|
131
|
+
else
|
132
|
+
if manifest.execute!
|
133
|
+
exit(0)
|
134
|
+
else
|
135
|
+
exit(1)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
100
139
|
rescue Errno::EACCES
|
101
140
|
puts "Please run shadow_puppet as root"
|
102
141
|
rescue Exception => e
|
103
142
|
if e.instance_of?(SystemExit)
|
104
143
|
raise
|
105
144
|
else
|
106
|
-
puts
|
107
|
-
puts e.
|
108
|
-
puts e.message
|
109
|
-
puts e.backtrace.join("\n")
|
145
|
+
puts "Uncaught exception: #{e.class}: #{e.message}"
|
146
|
+
puts "\t#{e.backtrace.join("\n\t")}"
|
110
147
|
exit(1)
|
111
148
|
end
|
112
149
|
end
|
@@ -1,29 +1,35 @@
|
|
1
1
|
require 'active_support/version'
|
2
|
-
|
3
2
|
require 'active_support/core_ext/class/attribute_accessors'
|
4
3
|
require 'active_support/core_ext/array'
|
4
|
+
require 'active_support/core_ext/hash/deep_merge'
|
5
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
5
6
|
require 'active_support/inflector'
|
6
7
|
require 'active_support/core_ext/class/inheritable_attributes'
|
7
8
|
|
9
|
+
# zomg epic hax
|
8
10
|
if ActiveSupport::VERSION::MAJOR < 3
|
11
|
+
if ActiveSupport::VERSION::TINY > 5
|
12
|
+
# hack around absurd number of deprecation warnings from puppet
|
13
|
+
# using `metaclass`
|
14
|
+
require 'active_support/core_ext/kernel/reporting'
|
15
|
+
require 'active_support/core_ext/module/attribute_accessors'
|
16
|
+
require 'active_support/deprecation'
|
17
|
+
ActiveSupport::Deprecation.silenced = true
|
18
|
+
end
|
19
|
+
require 'active_support/core_ext/string/inflections'
|
20
|
+
unless String.included_modules.include?(ActiveSupport::CoreExtensions::String::Inflections)
|
21
|
+
String.send :include, ActiveSupport::CoreExtensions::String::Inflections
|
22
|
+
end
|
9
23
|
require 'active_support/core_ext/duplicable'
|
24
|
+
class Hash #:nodoc:
|
25
|
+
include ActiveSupport::CoreExtensions::Hash::DeepMerge
|
26
|
+
include ActiveSupport::CoreExtensions::Hash::IndifferentAccess
|
27
|
+
end
|
10
28
|
else
|
11
29
|
require 'active_support/core_ext/object/duplicable'
|
12
30
|
end
|
13
31
|
|
14
32
|
class Hash #:nodoc:
|
15
|
-
def deep_merge(other_hash)
|
16
|
-
self.merge(other_hash) do |key, oldval, newval|
|
17
|
-
oldval = oldval.to_hash if oldval.respond_to?(:to_hash)
|
18
|
-
newval = newval.to_hash if newval.respond_to?(:to_hash)
|
19
|
-
oldval.is_a?(Hash) && newval.is_a?(Hash) ? oldval.deep_merge(newval) : newval
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def deep_merge!(other_hash)
|
24
|
-
replace(deep_merge(other_hash))
|
25
|
-
end
|
26
|
-
|
27
33
|
def deep_symbolize_keys
|
28
34
|
self.inject({}) { |result, (key, value)|
|
29
35
|
value = value.deep_symbolize_keys if value.is_a?(Hash)
|
@@ -119,7 +119,18 @@ module ShadowPuppet
|
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
|
-
#
|
122
|
+
# Access to a recipe of the class of this instance.
|
123
|
+
#
|
124
|
+
# class SampleManifest < ShadowPuppet::Manifest
|
125
|
+
# def my_recipe
|
126
|
+
# recipe :other_recipe
|
127
|
+
# end
|
128
|
+
# end
|
129
|
+
def recipe(*methods)
|
130
|
+
self.class.recipe *methods
|
131
|
+
end
|
132
|
+
|
133
|
+
# A HashWithIndifferentAccess describing any configuration that has been
|
123
134
|
# performed on the class. Modify this hash by calling configure:
|
124
135
|
#
|
125
136
|
# class SampleManifest < ShadowPuppet::Manifest
|
@@ -128,13 +139,11 @@ module ShadowPuppet
|
|
128
139
|
#
|
129
140
|
# >> SampleManifest.configuration
|
130
141
|
# => {:name => 'test'}
|
131
|
-
#
|
132
|
-
# All keys on this hash are coerced into symbols for ease of access.
|
133
|
-
#
|
142
|
+
# #
|
134
143
|
# Subclasses of the Manifest class properly inherit the parent classes'
|
135
144
|
# configuration.
|
136
145
|
def self.configuration
|
137
|
-
__config__.
|
146
|
+
__config__.with_indifferent_access
|
138
147
|
end
|
139
148
|
|
140
149
|
# Access to the configuration of the class of this instance.
|
@@ -160,13 +169,11 @@ module ShadowPuppet
|
|
160
169
|
#
|
161
170
|
# >> SampleManifest.configuration
|
162
171
|
# => {:name => 'test'}
|
163
|
-
#
|
164
|
-
# All keys on this hash are coerced into symbols for ease of access.
|
165
|
-
#
|
172
|
+
# #
|
166
173
|
# Subsequent calls to configure perform a deep_merge of the provided
|
167
174
|
# <tt>hash</tt> into the pre-existing configuration.
|
168
175
|
def self.configure(hash)
|
169
|
-
__config__.deep_merge
|
176
|
+
__config__.replace(__config__.deep_symbolize_keys.deep_merge(hash.deep_symbolize_keys))
|
170
177
|
end
|
171
178
|
|
172
179
|
# Update the configuration of this manifest instance's class.
|
@@ -258,6 +265,27 @@ module ShadowPuppet
|
|
258
265
|
@executed = true
|
259
266
|
end
|
260
267
|
|
268
|
+
def graph_to(name, destination)
|
269
|
+
evaluate_recipes
|
270
|
+
|
271
|
+
bucket = export()
|
272
|
+
catalog = bucket.to_catalog
|
273
|
+
relationship_graph = catalog.relationship_graph
|
274
|
+
|
275
|
+
graph = relationship_graph.to_dot_graph("name" => "#{name} Relationships".gsub(/\W+/, '_'))
|
276
|
+
graph.options['label'] = "#{name} Relationships"
|
277
|
+
|
278
|
+
# The graph ends up having all of the edges backwards
|
279
|
+
graph.each_node do |node|
|
280
|
+
next unless node.is_a?(DOT::DOTEdge)
|
281
|
+
node.to, node.from = node.from, node.to
|
282
|
+
end
|
283
|
+
|
284
|
+
File.open(destination, "w") { |f|
|
285
|
+
f.puts graph.to_s
|
286
|
+
}
|
287
|
+
end
|
288
|
+
|
261
289
|
protected
|
262
290
|
|
263
291
|
#Has this manifest instance been executed?
|
data/shadow_puppet.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{shadow_puppet}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0.beta1"
|
9
9
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
11
|
-
s.authors = ["Jesse Newland", "Josh Nichols"]
|
12
|
-
s.date = %q{2010-
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Jesse Newland", "Josh Nichols", "Eric Lindvall", "Lee Jones", "dreamcat4", "Patrick Schless", "Ches Martin", "Rob Lingle", "Scott Fleckenstein"]
|
12
|
+
s.date = %q{2010-08-18}
|
13
13
|
s.default_executable = %q{shadow_puppet}
|
14
14
|
s.description = %q{A Ruby Puppet DSL}
|
15
15
|
s.email = %q{jesse@railsmachine.com}
|
@@ -21,12 +21,12 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.files = [
|
22
22
|
".gitignore",
|
23
23
|
".gitmodules",
|
24
|
+
"IsolateScenarios",
|
24
25
|
"LICENSE",
|
25
26
|
"README.rdoc",
|
26
27
|
"Rakefile",
|
27
28
|
"bin/shadow_puppet",
|
28
29
|
"examples/foo.rb",
|
29
|
-
"ginger_scenarios.rb",
|
30
30
|
"lib/shadow_puppet.rb",
|
31
31
|
"lib/shadow_puppet/core_ext.rb",
|
32
32
|
"lib/shadow_puppet/manifest.rb",
|
@@ -43,7 +43,7 @@ Gem::Specification.new do |s|
|
|
43
43
|
s.rdoc_options = ["--charset=UTF-8", "--inline-source", "--webcvs=http://github.com/railsmachine/shadow_puppet/tree/master/"]
|
44
44
|
s.require_paths = ["lib"]
|
45
45
|
s.rubyforge_project = %q{moonshine}
|
46
|
-
s.rubygems_version = %q{1.3.
|
46
|
+
s.rubygems_version = %q{1.3.7}
|
47
47
|
s.summary = %q{A Ruby Puppet DSL}
|
48
48
|
s.test_files = [
|
49
49
|
"spec/fixtures/manifests.rb",
|
@@ -58,13 +58,14 @@ Gem::Specification.new do |s|
|
|
58
58
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
59
59
|
s.specification_version = 3
|
60
60
|
|
61
|
-
if Gem::Version.new(Gem::
|
61
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
62
62
|
s.add_runtime_dependency(%q<puppet>, ["= 0.24.8"])
|
63
63
|
s.add_runtime_dependency(%q<facter>, [">= 1.5.4"])
|
64
64
|
s.add_runtime_dependency(%q<highline>, [">= 1.5.0"])
|
65
65
|
s.add_runtime_dependency(%q<builder>, [">= 2.1.2"])
|
66
66
|
s.add_runtime_dependency(%q<activesupport>, [">= 2.0.0"])
|
67
67
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
68
|
+
s.add_development_dependency(%q<isolate-scenarios>, [">= 0"])
|
68
69
|
else
|
69
70
|
s.add_dependency(%q<puppet>, ["= 0.24.8"])
|
70
71
|
s.add_dependency(%q<facter>, [">= 1.5.4"])
|
@@ -72,6 +73,7 @@ Gem::Specification.new do |s|
|
|
72
73
|
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
73
74
|
s.add_dependency(%q<activesupport>, [">= 2.0.0"])
|
74
75
|
s.add_dependency(%q<rspec>, [">= 0"])
|
76
|
+
s.add_dependency(%q<isolate-scenarios>, [">= 0"])
|
75
77
|
end
|
76
78
|
else
|
77
79
|
s.add_dependency(%q<puppet>, ["= 0.24.8"])
|
@@ -80,6 +82,7 @@ Gem::Specification.new do |s|
|
|
80
82
|
s.add_dependency(%q<builder>, [">= 2.1.2"])
|
81
83
|
s.add_dependency(%q<activesupport>, [">= 2.0.0"])
|
82
84
|
s.add_dependency(%q<rspec>, [">= 0"])
|
85
|
+
s.add_dependency(%q<isolate-scenarios>, [">= 0"])
|
83
86
|
end
|
84
87
|
end
|
85
88
|
|
data/spec/fixtures/manifests.rb
CHANGED
@@ -16,7 +16,7 @@ end
|
|
16
16
|
class RequiresMetViaMethods < ShadowPuppet::Manifest
|
17
17
|
recipe :foo, :bar
|
18
18
|
|
19
|
-
configure({ :foo => :bar , :nested_hash => { :nested_foo => :bar } })
|
19
|
+
configure({ :foo => :bar , :nested_hash => { :nested_foo => :bar }, 'string' => 'value' })
|
20
20
|
|
21
21
|
def foo
|
22
22
|
exec('foo', :command => 'true')
|
@@ -37,6 +37,18 @@ class RequiresMetViaMethodsSubclass < RequiresMetViaMethods
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
# Requirements can be handled by other recipes in the class
|
41
|
+
class RequiresMetViaRecipeFromClassOfInstance < ShadowPuppet::Manifest
|
42
|
+
def bar
|
43
|
+
# other recipe stuff
|
44
|
+
end
|
45
|
+
|
46
|
+
def foo
|
47
|
+
recipe :bar
|
48
|
+
end
|
49
|
+
recipe :foo
|
50
|
+
end
|
51
|
+
|
40
52
|
#requirements can also be handled by functions in external modules
|
41
53
|
class ProvidedViaModules < ShadowPuppet::Manifest
|
42
54
|
module FooRecipe
|
@@ -92,4 +104,4 @@ class TestHelpers < ShadowPuppet::Manifest
|
|
92
104
|
file('baz', :content => 'bar',:mode => '644',:owner => 'rails')
|
93
105
|
end
|
94
106
|
|
95
|
-
end
|
107
|
+
end
|
data/spec/manifest_spec.rb
CHANGED
@@ -94,6 +94,17 @@ describe "A manifest" do
|
|
94
94
|
@manifest.configuration[:foo].should == :bar
|
95
95
|
end
|
96
96
|
|
97
|
+
it "can access configurations configured using symbols with symbols or strings" do
|
98
|
+
@manifest.configuration[:foo].should == :bar
|
99
|
+
@manifest.configuration['foo'].should == :bar
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
it "can access configurations configured using strings with symbols or strings" do
|
104
|
+
@manifest.configuration['string'].should == 'value'
|
105
|
+
@manifest.configuration[:string].should == 'value'
|
106
|
+
end
|
107
|
+
|
97
108
|
it "has a name" do
|
98
109
|
@manifest.name.should == "#{@manifest.class}##{@manifest.object_id}"
|
99
110
|
end
|
@@ -188,6 +199,7 @@ describe "A manifest" do
|
|
188
199
|
it "deep_merges it's configuration with that of the parent" do
|
189
200
|
@manifest.class.configuration[:nested_hash][:nested_baz].should == :bar
|
190
201
|
@manifest.class.configuration[:nested_hash][:nested_foo].should == :bar
|
202
|
+
@manifest.class.configuration['nested_hash']['nested_foo'].should == :bar
|
191
203
|
end
|
192
204
|
|
193
205
|
it "is able to add configuration parameters on the instance" do
|
@@ -197,5 +209,13 @@ describe "A manifest" do
|
|
197
209
|
end
|
198
210
|
|
199
211
|
end
|
212
|
+
describe "that has recipes called from other recipes" do
|
213
|
+
before(:each) do
|
214
|
+
@manifest = RequiresMetViaRecipeFromClassOfInstance.new
|
215
|
+
end
|
200
216
|
|
201
|
-
|
217
|
+
it "is able to call a recipe of the class of this instance" do
|
218
|
+
@manifest.execute.should be_true
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require '
|
2
|
+
require 'isolate/scenarios/now'
|
3
3
|
gem 'rspec'
|
4
4
|
require 'spec'
|
5
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'shadow_puppet', 'core_ext.rb')
|
5
6
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'shadow_puppet.rb')
|
6
7
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'shadow_puppet', 'test.rb')
|
7
8
|
Dir.glob(File.join(File.dirname(__FILE__), 'fixtures', '*.rb')).each do |manifest|
|
metadata
CHANGED
@@ -1,30 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shadow_puppet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: -1848230035
|
5
|
+
prerelease: true
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
- beta1
|
11
|
+
version: 0.4.0.beta1
|
10
12
|
platform: ruby
|
11
13
|
authors:
|
12
14
|
- Jesse Newland
|
13
15
|
- Josh Nichols
|
16
|
+
- Eric Lindvall
|
17
|
+
- Lee Jones
|
18
|
+
- dreamcat4
|
19
|
+
- Patrick Schless
|
20
|
+
- Ches Martin
|
21
|
+
- Rob Lingle
|
22
|
+
- Scott Fleckenstein
|
14
23
|
autorequire:
|
15
24
|
bindir: bin
|
16
25
|
cert_chain: []
|
17
26
|
|
18
|
-
date: 2010-
|
27
|
+
date: 2010-08-18 00:00:00 -04:00
|
19
28
|
default_executable: shadow_puppet
|
20
29
|
dependencies:
|
21
30
|
- !ruby/object:Gem::Dependency
|
22
31
|
name: puppet
|
23
32
|
prerelease: false
|
24
33
|
requirement: &id001 !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
25
35
|
requirements:
|
26
36
|
- - "="
|
27
37
|
- !ruby/object:Gem::Version
|
38
|
+
hash: 111
|
28
39
|
segments:
|
29
40
|
- 0
|
30
41
|
- 24
|
@@ -36,9 +47,11 @@ dependencies:
|
|
36
47
|
name: facter
|
37
48
|
prerelease: false
|
38
49
|
requirement: &id002 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
39
51
|
requirements:
|
40
52
|
- - ">="
|
41
53
|
- !ruby/object:Gem::Version
|
54
|
+
hash: 11
|
42
55
|
segments:
|
43
56
|
- 1
|
44
57
|
- 5
|
@@ -50,9 +63,11 @@ dependencies:
|
|
50
63
|
name: highline
|
51
64
|
prerelease: false
|
52
65
|
requirement: &id003 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
53
67
|
requirements:
|
54
68
|
- - ">="
|
55
69
|
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
56
71
|
segments:
|
57
72
|
- 1
|
58
73
|
- 5
|
@@ -64,9 +79,11 @@ dependencies:
|
|
64
79
|
name: builder
|
65
80
|
prerelease: false
|
66
81
|
requirement: &id004 !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
67
83
|
requirements:
|
68
84
|
- - ">="
|
69
85
|
- !ruby/object:Gem::Version
|
86
|
+
hash: 15
|
70
87
|
segments:
|
71
88
|
- 2
|
72
89
|
- 1
|
@@ -78,9 +95,11 @@ dependencies:
|
|
78
95
|
name: activesupport
|
79
96
|
prerelease: false
|
80
97
|
requirement: &id005 !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
81
99
|
requirements:
|
82
100
|
- - ">="
|
83
101
|
- !ruby/object:Gem::Version
|
102
|
+
hash: 15
|
84
103
|
segments:
|
85
104
|
- 2
|
86
105
|
- 0
|
@@ -92,14 +111,30 @@ dependencies:
|
|
92
111
|
name: rspec
|
93
112
|
prerelease: false
|
94
113
|
requirement: &id006 !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
95
115
|
requirements:
|
96
116
|
- - ">="
|
97
117
|
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
98
119
|
segments:
|
99
120
|
- 0
|
100
121
|
version: "0"
|
101
122
|
type: :development
|
102
123
|
version_requirements: *id006
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: isolate-scenarios
|
126
|
+
prerelease: false
|
127
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
hash: 3
|
133
|
+
segments:
|
134
|
+
- 0
|
135
|
+
version: "0"
|
136
|
+
type: :development
|
137
|
+
version_requirements: *id007
|
103
138
|
description: A Ruby Puppet DSL
|
104
139
|
email: jesse@railsmachine.com
|
105
140
|
executables:
|
@@ -112,12 +147,12 @@ extra_rdoc_files:
|
|
112
147
|
files:
|
113
148
|
- .gitignore
|
114
149
|
- .gitmodules
|
150
|
+
- IsolateScenarios
|
115
151
|
- LICENSE
|
116
152
|
- README.rdoc
|
117
153
|
- Rakefile
|
118
154
|
- bin/shadow_puppet
|
119
155
|
- examples/foo.rb
|
120
|
-
- ginger_scenarios.rb
|
121
156
|
- lib/shadow_puppet.rb
|
122
157
|
- lib/shadow_puppet/core_ext.rb
|
123
158
|
- lib/shadow_puppet/manifest.rb
|
@@ -141,23 +176,29 @@ rdoc_options:
|
|
141
176
|
require_paths:
|
142
177
|
- lib
|
143
178
|
required_ruby_version: !ruby/object:Gem::Requirement
|
179
|
+
none: false
|
144
180
|
requirements:
|
145
181
|
- - ">="
|
146
182
|
- !ruby/object:Gem::Version
|
183
|
+
hash: 3
|
147
184
|
segments:
|
148
185
|
- 0
|
149
186
|
version: "0"
|
150
187
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
|
+
none: false
|
151
189
|
requirements:
|
152
|
-
- - "
|
190
|
+
- - ">"
|
153
191
|
- !ruby/object:Gem::Version
|
192
|
+
hash: 25
|
154
193
|
segments:
|
155
|
-
-
|
156
|
-
|
194
|
+
- 1
|
195
|
+
- 3
|
196
|
+
- 1
|
197
|
+
version: 1.3.1
|
157
198
|
requirements: []
|
158
199
|
|
159
200
|
rubyforge_project: moonshine
|
160
|
-
rubygems_version: 1.3.
|
201
|
+
rubygems_version: 1.3.7
|
161
202
|
signing_key:
|
162
203
|
specification_version: 3
|
163
204
|
summary: A Ruby Puppet DSL
|
data/ginger_scenarios.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'ginger'
|
2
|
-
|
3
|
-
def create_scenario(version)
|
4
|
-
scenario = Ginger::Scenario.new("Rails #{version}")
|
5
|
-
scenario[/^activesupport$/] = version
|
6
|
-
scenario[/^activerecord$/] = version
|
7
|
-
scenario[/^actionpack$/] = version
|
8
|
-
scenario[/^actioncontroller$/] = version
|
9
|
-
scenario
|
10
|
-
end
|
11
|
-
|
12
|
-
Ginger.configure do |config|
|
13
|
-
config.aliases["rails"] = "rails"
|
14
|
-
|
15
|
-
rails_2_3_5 = create_scenario('2.3.5')
|
16
|
-
rails_2_3_8 = create_scenario('2.3.8')
|
17
|
-
|
18
|
-
rails_3_0_0_beta = create_scenario('3.0.0.beta')
|
19
|
-
rails_3_0_0_beta3 = create_scenario('3.0.0.beta3')
|
20
|
-
|
21
|
-
config.scenarios << rails_2_3_5 << rails_2_3_8 << rails_3_0_0_beta << rails_3_0_0_beta3
|
22
|
-
end
|
23
|
-
|