puppet 0.22.4 → 0.23.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CHANGELOG +156 -0
- data/README +2 -2
- data/Rakefile +6 -6
- data/bin/filebucket +212 -0
- data/bin/puppet +2 -0
- data/bin/puppetca +2 -4
- data/bin/puppetd +16 -15
- data/bin/puppetdoc +46 -496
- data/bin/puppetmasterd +3 -5
- data/bin/puppetrun +8 -3
- data/bin/ralsh +271 -0
- data/conf/redhat/client.init +1 -1
- data/conf/redhat/puppet.spec +13 -2
- data/conf/solaris/pkginfo +1 -1
- data/ext/puppet-test +374 -0
- data/install.rb +40 -31
- data/lib/puppet.rb +39 -4
- data/lib/puppet/config_stores/rest.rb +60 -0
- data/lib/puppet/configuration.rb +312 -17
- data/lib/puppet/external/event-loop/event-loop.rb +4 -0
- data/lib/puppet/external/gratr/rdot.rb +1 -1
- data/lib/puppet/fact_stores/yaml.rb +42 -0
- data/lib/puppet/feature/base.rb +4 -1
- data/lib/puppet/metatype/attributes.rb +20 -43
- data/lib/puppet/metatype/container.rb +1 -36
- data/lib/puppet/metatype/evaluation.rb +48 -19
- data/lib/puppet/metatype/instances.rb +35 -1
- data/lib/puppet/metatype/metaparams.rb +23 -19
- data/lib/puppet/metatype/providers.rb +25 -38
- data/lib/puppet/network/client/ca.rb +8 -5
- data/lib/puppet/network/client/master.rb +59 -17
- data/lib/puppet/network/handler.rb +18 -1
- data/lib/puppet/network/handler/ca.rb +9 -3
- data/lib/puppet/network/handler/facts.rb +70 -0
- data/lib/puppet/network/handler/filebucket.rb +4 -1
- data/lib/puppet/network/handler/fileserver.rb +65 -21
- data/lib/puppet/network/handler/master.rb +6 -3
- data/lib/puppet/network/handler/report.rb +12 -26
- data/lib/puppet/network/handler/resource.rb +14 -2
- data/lib/puppet/network/handler/runner.rb +5 -1
- data/lib/puppet/network/handler/status.rb +5 -1
- data/lib/puppet/network/server/mongrel.rb +4 -4
- data/lib/puppet/network/server/webrick.rb +14 -3
- data/lib/puppet/parameter.rb +30 -25
- data/lib/puppet/parser/ast.rb +1 -6
- data/lib/puppet/parser/ast/component.rb +23 -20
- data/lib/puppet/parser/ast/hostclass.rb +7 -11
- data/lib/puppet/parser/ast/leaf.rb +4 -1
- data/lib/puppet/parser/ast/node.rb +6 -8
- data/lib/puppet/parser/functions.rb +7 -4
- data/lib/puppet/parser/interpreter.rb +155 -205
- data/lib/puppet/parser/lexer.rb +35 -2
- data/lib/puppet/parser/parser.rb +705 -612
- data/lib/puppet/parser/resource.rb +91 -48
- data/lib/puppet/parser/resource/param.rb +52 -29
- data/lib/puppet/parser/scope.rb +28 -23
- data/lib/puppet/pgraph.rb +26 -21
- data/lib/puppet/propertychange.rb +12 -12
- data/lib/puppet/provider.rb +102 -31
- data/lib/puppet/provider/cron/crontab.rb +7 -8
- data/lib/puppet/provider/group/groupadd.rb +4 -4
- data/lib/puppet/provider/group/pw.rb +3 -3
- data/lib/puppet/provider/mount.rb +8 -8
- data/lib/puppet/provider/mount/netinfo.rb +5 -5
- data/lib/puppet/provider/mount/parsed.rb +2 -2
- data/lib/puppet/provider/nameservice.rb +19 -31
- data/lib/puppet/provider/nameservice/netinfo.rb +14 -14
- data/lib/puppet/provider/nameservice/objectadd.rb +4 -4
- data/lib/puppet/provider/nameservice/pw.rb +4 -4
- data/lib/puppet/provider/package.rb +31 -0
- data/lib/puppet/provider/package/appdmg.rb +118 -0
- data/lib/puppet/provider/package/apple.rb +18 -16
- data/lib/puppet/provider/package/apt.rb +13 -15
- data/lib/puppet/provider/package/aptitude.rb +5 -3
- data/lib/puppet/provider/package/aptrpm.rb +9 -11
- data/lib/puppet/provider/package/blastwave.rb +9 -9
- data/lib/puppet/provider/package/darwinport.rb +12 -11
- data/lib/puppet/provider/package/dpkg.rb +20 -12
- data/lib/puppet/provider/package/fink.rb +87 -0
- data/lib/puppet/provider/package/freebsd.rb +10 -11
- data/lib/puppet/provider/package/gem.rb +15 -15
- data/lib/puppet/provider/package/openbsd.rb +12 -17
- data/lib/puppet/provider/package/pkgdmg.rb +90 -16
- data/lib/puppet/provider/package/portage.rb +20 -14
- data/lib/puppet/provider/package/ports.rb +15 -13
- data/lib/puppet/provider/package/rpm.rb +20 -23
- data/lib/puppet/provider/package/rug.rb +6 -8
- data/lib/puppet/provider/package/sun.rb +20 -18
- data/lib/puppet/provider/package/sunfreeware.rb +2 -2
- data/lib/puppet/provider/package/up2date.rb +6 -10
- data/lib/puppet/provider/package/urpmi.rb +51 -0
- data/lib/puppet/provider/package/yum.rb +15 -13
- data/lib/puppet/provider/parsedfile.rb +53 -63
- data/lib/puppet/provider/service/base.rb +13 -15
- data/lib/puppet/provider/service/debian.rb +4 -4
- data/lib/puppet/provider/service/gentoo.rb +4 -4
- data/lib/puppet/provider/service/init.rb +22 -15
- data/lib/puppet/provider/service/redhat.rb +6 -6
- data/lib/puppet/provider/service/smf.rb +6 -6
- data/lib/puppet/provider/user/netinfo.rb +5 -5
- data/lib/puppet/provider/user/pw.rb +10 -5
- data/lib/puppet/provider/user/useradd.rb +9 -14
- data/lib/puppet/provider/zone/solaris.rb +80 -45
- data/lib/puppet/rails.rb +3 -34
- data/lib/puppet/rails/database/schema.rb +45 -24
- data/lib/puppet/rails/fact_value.rb +1 -0
- data/lib/puppet/rails/host.rb +69 -40
- data/lib/puppet/rails/param_name.rb +3 -8
- data/lib/puppet/rails/param_value.rb +2 -1
- data/lib/puppet/rails/puppet_class.rb +0 -2
- data/lib/puppet/rails/puppet_tag.rb +5 -0
- data/lib/puppet/rails/resource.rb +41 -17
- data/lib/puppet/rails/resource_tag.rb +4 -0
- data/lib/puppet/reference/configuration.rb +149 -0
- data/lib/puppet/reference/function.rb +13 -0
- data/lib/puppet/reference/network.rb +37 -0
- data/lib/puppet/reference/providers.rb +118 -0
- data/lib/puppet/reference/report.rb +21 -0
- data/lib/puppet/reference/type.rb +152 -0
- data/lib/puppet/reports/rrdgraph.rb +21 -7
- data/lib/puppet/reports/tagmail.rb +4 -1
- data/lib/puppet/sslcertificates.rb +1 -49
- data/lib/puppet/sslcertificates/ca.rb +2 -79
- data/lib/puppet/sslcertificates/inventory.rb +0 -10
- data/lib/puppet/transaction.rb +24 -41
- data/lib/puppet/transaction/report.rb +27 -1
- data/lib/puppet/type.rb +7 -43
- data/lib/puppet/type/component.rb +198 -124
- data/lib/puppet/type/cron.rb +51 -42
- data/lib/puppet/type/exec.rb +20 -19
- data/lib/puppet/type/group.rb +6 -55
- data/lib/puppet/type/host.rb +16 -37
- data/lib/puppet/type/mount.rb +30 -17
- data/lib/puppet/type/notify.rb +7 -8
- data/lib/puppet/type/package.rb +44 -80
- data/lib/puppet/type/pfile.rb +50 -41
- data/lib/puppet/type/pfile/checksum.rb +82 -95
- data/lib/puppet/type/pfile/content.rb +21 -25
- data/lib/puppet/type/pfile/ensure.rb +32 -30
- data/lib/puppet/type/pfile/group.rb +21 -26
- data/lib/puppet/type/pfile/mode.rb +25 -32
- data/lib/puppet/type/pfile/owner.rb +23 -27
- data/lib/puppet/type/pfile/source.rb +42 -33
- data/lib/puppet/type/pfile/target.rb +20 -18
- data/lib/puppet/type/pfile/type.rb +6 -7
- data/lib/puppet/type/pfilebucket.rb +3 -3
- data/lib/puppet/type/port.rb +5 -7
- data/lib/puppet/type/property.rb +58 -61
- data/lib/puppet/type/resources.rb +12 -8
- data/lib/puppet/type/schedule.rb +8 -8
- data/lib/puppet/type/service.rb +26 -33
- data/lib/puppet/type/sshkey.rb +6 -7
- data/lib/puppet/type/tidy.rb +41 -35
- data/lib/puppet/type/user.rb +34 -67
- data/lib/puppet/type/yumrepo.rb +27 -12
- data/lib/puppet/type/zone.rb +71 -110
- data/lib/puppet/util.rb +46 -61
- data/lib/puppet/util/autoload.rb +59 -47
- data/lib/puppet/util/config.rb +160 -18
- data/lib/puppet/util/config_store.rb +61 -0
- data/lib/puppet/util/fact_store.rb +60 -0
- data/lib/puppet/util/instance_loader.rb +74 -0
- data/lib/puppet/util/loadedfile.rb +5 -8
- data/lib/puppet/util/metric.rb +17 -25
- data/lib/puppet/util/posix.rb +39 -7
- data/lib/puppet/util/provider_features.rb +9 -1
- data/lib/puppet/util/rails/collection_merger.rb +16 -1
- data/lib/puppet/util/reference.rb +189 -0
- data/lib/puppet/util/storage.rb +2 -2
- data/lib/puppet/util/subclass_loader.rb +9 -2
- data/test/language/ast.rb +4 -148
- data/test/language/ast/component.rb +10 -1
- data/test/language/collector.rb +1 -191
- data/test/language/interpreter.rb +284 -327
- data/test/language/lexer.rb +13 -1
- data/test/language/node.rb +1 -1
- data/test/language/parser.rb +17 -4
- data/test/language/resource.rb +67 -101
- data/test/language/scope.rb +18 -3
- data/test/language/snippets.rb +114 -151
- data/test/lib/puppettest.rb +13 -0
- data/test/lib/puppettest/exetest.rb +7 -0
- data/test/lib/puppettest/fakes.rb +39 -28
- data/test/lib/puppettest/railstesting.rb +1 -1
- data/test/lib/puppettest/support/assertions.rb +2 -2
- data/test/lib/puppettest/support/collection.rb +30 -0
- data/test/network/client/ca.rb +27 -1
- data/test/network/client/client.rb +3 -3
- data/test/network/client/master.rb +102 -1
- data/test/network/handler/ca.rb +35 -1
- data/test/network/handler/facts.rb +112 -0
- data/test/network/handler/fileserver.rb +25 -1
- data/test/network/handler/handler.rb +2 -2
- data/test/network/handler/master.rb +2 -49
- data/test/network/handler/resource.rb +5 -6
- data/test/network/server/mongrel_test.rb +65 -0
- data/test/network/server/webrick.rb +2 -2
- data/test/network/xmlrpc/client.rb +2 -1
- data/test/network/xmlrpc/processor.rb +2 -1
- data/test/other/pgraph.rb +6 -5
- data/test/other/propertychange.rb +11 -12
- data/test/other/report.rb +44 -27
- data/test/other/transactions.rb +17 -16
- data/test/puppet/tc_suidmanager.rb +2 -2
- data/test/rails/ast.rb +74 -0
- data/test/rails/collection.rb +214 -0
- data/test/rails/host.rb +49 -24
- data/test/rails/interpreter.rb +91 -0
- data/test/rails/railsparameter.rb +22 -11
- data/test/rails/railsresource.rb +140 -7
- data/test/ral/manager/attributes.rb +37 -13
- data/test/ral/manager/instances.rb +82 -0
- data/test/ral/manager/provider.rb +60 -22
- data/test/ral/manager/type.rb +9 -6
- data/test/ral/providers/cron/crontab.rb +59 -7
- data/test/ral/providers/group.rb +7 -7
- data/test/ral/providers/host/netinfo.rb +5 -6
- data/test/ral/providers/host/parsed.rb +4 -4
- data/test/ral/providers/mount/parsed.rb +11 -6
- data/test/ral/providers/nameservice.rb +2 -2
- data/test/ral/providers/package.rb +39 -14
- data/test/ral/providers/package/apt.rb +72 -3
- data/test/ral/providers/package/aptitude.rb +15 -12
- data/test/ral/providers/package/aptrpm.rb +3 -3
- data/test/ral/providers/package/dpkg.rb +2 -2
- data/test/ral/providers/parsedfile.rb +114 -88
- data/test/ral/providers/{parsedport.rb → port/parsed.rb} +1 -1
- data/test/ral/providers/provider.rb +93 -13
- data/test/ral/providers/service.rb +52 -26
- data/test/ral/providers/sshkey/parsed.rb +3 -3
- data/test/ral/providers/user.rb +19 -20
- data/test/ral/providers/user/useradd.rb +1 -5
- data/test/ral/types/cron.rb +49 -36
- data/test/ral/types/file.rb +38 -35
- data/test/ral/types/file/target.rb +4 -4
- data/test/ral/types/filesources.rb +24 -22
- data/test/ral/types/group.rb +4 -2
- data/test/ral/types/host.rb +17 -10
- data/test/ral/types/mount.rb +40 -23
- data/test/ral/types/package.rb +62 -5
- data/test/ral/types/parameter.rb +2 -2
- data/test/ral/types/property.rb +27 -20
- data/test/ral/types/resources.rb +4 -16
- data/test/ral/types/schedule.rb +2 -2
- data/test/ral/types/service.rb +2 -3
- data/test/ral/types/sshkey.rb +3 -3
- data/test/ral/types/tidy.rb +6 -15
- data/test/ral/types/user.rb +17 -17
- data/test/ral/types/yumrepo.rb +2 -2
- data/test/ral/types/zone.rb +71 -87
- data/test/util/autoload.rb +6 -21
- data/test/util/config.rb +201 -101
- data/test/util/fact_store.rb +67 -0
- data/test/util/features.rb +9 -6
- data/test/util/instance_loader.rb +53 -0
- data/test/util/loadedfile.rb +17 -1
- data/test/util/metrics.rb +54 -57
- data/test/util/posixtest.rb +8 -11
- data/test/util/utiltest.rb +31 -2
- metadata +520 -492
- data/TODO +0 -4
- data/lib/puppet/network/client/logger.rb +0 -6
- data/lib/puppet/network/handler/logger.rb +0 -52
- data/lib/puppet/rails/database/001_add_indexes.rb +0 -38
- data/lib/puppet/type/parsedtype.rb +0 -219
- data/test/network/handler/logger.rb +0 -183
@@ -0,0 +1,189 @@
|
|
1
|
+
require 'puppet/util/instance_loader'
|
2
|
+
|
3
|
+
# Manage Reference Documentation.
|
4
|
+
class Puppet::Util::Reference
|
5
|
+
include Puppet::Util
|
6
|
+
include Puppet::Util::Docs
|
7
|
+
|
8
|
+
extend Puppet::Util::InstanceLoader
|
9
|
+
|
10
|
+
autoload(:reference, 'puppet/reference')
|
11
|
+
|
12
|
+
def self.footer
|
13
|
+
"\n\n----------------\n\n*This page autogenerated on %s*\n" % Time.now
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.modes
|
17
|
+
%w{pdf trac text}
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.newreference(name, options = {}, &block)
|
21
|
+
ref = self.new(name, options, &block)
|
22
|
+
instance_hash(:reference)[symbolize(name)] = ref
|
23
|
+
|
24
|
+
ref
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.page(*sections)
|
28
|
+
depth = 4
|
29
|
+
# Use the minimum depth
|
30
|
+
sections.each do |name|
|
31
|
+
section = reference(name) or raise "Could not find section %s" % name
|
32
|
+
depth = section.depth if section.depth < depth
|
33
|
+
end
|
34
|
+
text = ".. contents:: :depth: 2\n\n"
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.pdf(text)
|
38
|
+
puts "creating pdf"
|
39
|
+
File.open("/tmp/puppetdoc.txt", "w") do |f|
|
40
|
+
f.puts text
|
41
|
+
end
|
42
|
+
rst2latex = %x{which rst2latex}
|
43
|
+
if $? != 0 or rst2latex =~ /no /
|
44
|
+
rst2latex = %x{which rst2latex.py}
|
45
|
+
end
|
46
|
+
if $? != 0 or rst2latex =~ /no /
|
47
|
+
raise "Could not find rst2latex"
|
48
|
+
end
|
49
|
+
rst2latex.chomp!
|
50
|
+
cmd = %{#{rst2latex} /tmp/puppetdoc.txt > /tmp/puppetdoc.tex}
|
51
|
+
output = %x{#{cmd}}
|
52
|
+
unless $? == 0
|
53
|
+
$stderr.puts "rst2latex failed"
|
54
|
+
$stderr.puts output
|
55
|
+
exit(1)
|
56
|
+
end
|
57
|
+
$stderr.puts output
|
58
|
+
|
59
|
+
# Now convert to pdf
|
60
|
+
puts "handling pdf"
|
61
|
+
Dir.chdir("/tmp") do
|
62
|
+
%x{texi2pdf puppetdoc.tex >/dev/null 2>/dev/null}
|
63
|
+
end
|
64
|
+
|
65
|
+
#if FileTest.exists?("/tmp/puppetdoc.pdf")
|
66
|
+
# FileUtils.mv("/tmp/puppetdoc.pdf", "/export/apache/docroots/reductivelabs.com/htdocs/downloads/puppet/reference.pdf")
|
67
|
+
#end
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.references
|
71
|
+
instance_loader(:reference).loadall
|
72
|
+
loaded_instances(:reference).sort { |a,b| a.to_s <=> b.to_s }
|
73
|
+
end
|
74
|
+
|
75
|
+
HEADER_LEVELS = [nil, "=", "-", "+", "'", "~"]
|
76
|
+
|
77
|
+
attr_accessor :page, :depth, :header, :title, :dynamic
|
78
|
+
attr_writer :doc
|
79
|
+
|
80
|
+
def doc
|
81
|
+
if defined?(@doc)
|
82
|
+
return "%s - %s" % [@name, @doc]
|
83
|
+
else
|
84
|
+
return @title
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def dynamic?
|
89
|
+
self.dynamic
|
90
|
+
end
|
91
|
+
|
92
|
+
def h(name, level)
|
93
|
+
return "%s\n%s\n\n" % [name, HEADER_LEVELS[level] * name.to_s.length]
|
94
|
+
end
|
95
|
+
|
96
|
+
def initialize(name, options = {}, &block)
|
97
|
+
@name = name
|
98
|
+
options.each do |option, value|
|
99
|
+
send(option.to_s + "=", value)
|
100
|
+
end
|
101
|
+
|
102
|
+
meta_def(:generate, &block)
|
103
|
+
|
104
|
+
# Now handle the defaults
|
105
|
+
@title ||= "%s Reference" % @name.to_s.capitalize
|
106
|
+
@page ||= @title.gsub(/\s+/, '')
|
107
|
+
@depth ||= 2
|
108
|
+
@header ||= ""
|
109
|
+
end
|
110
|
+
|
111
|
+
# Indent every line in the chunk except those which begin with '..'.
|
112
|
+
def indent(text, tab)
|
113
|
+
return text.gsub(/(^|\A)/, tab).gsub(/^ +\.\./, "..")
|
114
|
+
end
|
115
|
+
|
116
|
+
def option(name, value)
|
117
|
+
":%s: %s\n" % [name.to_s.capitalize, value]
|
118
|
+
end
|
119
|
+
|
120
|
+
def paramwrap(name, text, options = {})
|
121
|
+
options[:level] ||= 5
|
122
|
+
#str = "%s : " % name
|
123
|
+
str = h(name, options[:level])
|
124
|
+
if options[:namevar]
|
125
|
+
str += "- **namevar**\n\n"
|
126
|
+
end
|
127
|
+
str += text
|
128
|
+
#str += text.gsub(/\n/, "\n ")
|
129
|
+
|
130
|
+
str += "\n\n"
|
131
|
+
return str
|
132
|
+
end
|
133
|
+
|
134
|
+
# Remove all trac links.
|
135
|
+
def strip_trac(text)
|
136
|
+
text.gsub(/`\w+\s+([^`]+)`:trac:/) { |m| $1 }
|
137
|
+
end
|
138
|
+
|
139
|
+
def text
|
140
|
+
puts output
|
141
|
+
end
|
142
|
+
|
143
|
+
def to_rest(withcontents = true)
|
144
|
+
# First the header
|
145
|
+
text = h(@title, 1)
|
146
|
+
text += "\n\n**This page is autogenerated; any changes will get overwritten**\n\n"
|
147
|
+
if withcontents
|
148
|
+
text += ".. contents:: :depth: %s\n\n" % @depth
|
149
|
+
end
|
150
|
+
|
151
|
+
text += @header
|
152
|
+
|
153
|
+
text += generate()
|
154
|
+
|
155
|
+
if withcontents
|
156
|
+
text += self.class.footer
|
157
|
+
end
|
158
|
+
|
159
|
+
return text
|
160
|
+
end
|
161
|
+
|
162
|
+
def to_text(withcontents = true)
|
163
|
+
strip_trac(to_rest(withcontents))
|
164
|
+
end
|
165
|
+
|
166
|
+
def to_trac(with_contents = true)
|
167
|
+
"{{{\n#!rst\n#{self.to_rest(with_contents)}\n}}}"
|
168
|
+
end
|
169
|
+
|
170
|
+
def trac
|
171
|
+
File.open("/tmp/puppetdoc.txt", "w") do |f|
|
172
|
+
f.puts self.to_trac
|
173
|
+
end
|
174
|
+
|
175
|
+
puts "Writing %s reference to trac as %s" % [@name, @page]
|
176
|
+
cmd = %{sudo trac-admin /export/svn/trac/puppet wiki import %s /tmp/puppetdoc.txt} % self.page
|
177
|
+
output = %x{#{cmd}}
|
178
|
+
unless $? == 0
|
179
|
+
$stderr.puts "trac-admin failed"
|
180
|
+
$stderr.puts output
|
181
|
+
exit(1)
|
182
|
+
end
|
183
|
+
unless output =~ /^\s+/
|
184
|
+
$stderr.puts output
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
# $Id: reference.rb 2485 2007-05-08 19:29:38Z luke $
|
data/lib/puppet/util/storage.rb
CHANGED
@@ -46,7 +46,7 @@ class Puppet::Util::Storage
|
|
46
46
|
self.init
|
47
47
|
|
48
48
|
def self.load
|
49
|
-
Puppet.config.use(:
|
49
|
+
Puppet.config.use(:main)
|
50
50
|
|
51
51
|
unless File.exists?(Puppet[:statefile])
|
52
52
|
unless defined? @@state and ! @@state.nil?
|
@@ -100,4 +100,4 @@ class Puppet::Util::Storage
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
# $Id: storage.rb
|
103
|
+
# $Id: storage.rb 2463 2007-05-04 23:09:34Z luke $
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# A module for loading subclasses into an array and retrieving
|
2
2
|
# them by name. Also sets up a method for each class so
|
3
3
|
# that you can just do Klass.subclass, rather than Klass.subclass(:subclass).
|
4
|
+
#
|
5
|
+
# This module is currently used by network handlers and clients.
|
4
6
|
module Puppet::Util::SubclassLoader
|
5
7
|
attr_accessor :loader, :classloader
|
6
8
|
|
@@ -48,7 +50,6 @@ module Puppet::Util::SubclassLoader
|
|
48
50
|
# subclasses, thus the reason we're keeping track of the @@classloader.
|
49
51
|
def inherited(sub)
|
50
52
|
@subclasses ||= []
|
51
|
-
@subclasses << sub
|
52
53
|
sub.classloader = self.classloader
|
53
54
|
if self.classloader == self
|
54
55
|
@subclasses << sub
|
@@ -78,6 +79,12 @@ module Puppet::Util::SubclassLoader
|
|
78
79
|
|
79
80
|
return @name
|
80
81
|
end
|
82
|
+
|
83
|
+
# Provide a list of all subclasses.
|
84
|
+
def subclasses
|
85
|
+
@loader.loadall
|
86
|
+
@subclasses.collect { |klass| klass.name }
|
87
|
+
end
|
81
88
|
end
|
82
89
|
|
83
|
-
# $Id: subclass_loader.rb
|
90
|
+
# $Id: subclass_loader.rb 2479 2007-05-07 22:29:44Z luke $
|
data/test/language/ast.rb
CHANGED
@@ -2,80 +2,17 @@
|
|
2
2
|
|
3
3
|
$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
|
4
4
|
|
5
|
-
require '
|
6
|
-
require 'puppet/rails'
|
5
|
+
require 'puppettest'
|
7
6
|
require 'puppet/parser/interpreter'
|
8
7
|
require 'puppet/parser/parser'
|
9
|
-
require 'puppet/network/client'
|
10
|
-
require 'puppettest'
|
11
8
|
require 'puppettest/resourcetesting'
|
12
9
|
require 'puppettest/parsertesting'
|
13
|
-
require 'puppettest/
|
10
|
+
require 'puppettest/support/collection'
|
14
11
|
|
15
12
|
class TestAST < Test::Unit::TestCase
|
16
|
-
include PuppetTest::RailsTesting
|
17
13
|
include PuppetTest::ParserTesting
|
18
14
|
include PuppetTest::ResourceTesting
|
19
|
-
|
20
|
-
if defined? ActiveRecord
|
21
|
-
# Verify that our collection stuff works.
|
22
|
-
def test_collection
|
23
|
-
collectable = []
|
24
|
-
non = []
|
25
|
-
# First put some objects into the database.
|
26
|
-
bucket = mk_transtree do |object, depth, width|
|
27
|
-
# and mark some of them collectable
|
28
|
-
if width % 2 == 1
|
29
|
-
object.collectable = true
|
30
|
-
collectable << object
|
31
|
-
else
|
32
|
-
non << object
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# Now collect our facts
|
37
|
-
facts = {}
|
38
|
-
Facter.each do |fact, value| facts[fact] = value end
|
39
|
-
|
40
|
-
assert_nothing_raised {
|
41
|
-
Puppet::Rails.init
|
42
|
-
}
|
43
|
-
|
44
|
-
# Now try storing our crap
|
45
|
-
assert_nothing_raised {
|
46
|
-
host = Puppet::Rails::Host.store(
|
47
|
-
:objects => bucket,
|
48
|
-
:facts => facts,
|
49
|
-
:host => facts["hostname"]
|
50
|
-
)
|
51
|
-
}
|
52
|
-
|
53
|
-
# Now create an ast tree that collects that. They should all be files.
|
54
|
-
coll = nil
|
55
|
-
assert_nothing_raised {
|
56
|
-
coll = AST::Collection.new(
|
57
|
-
:type => nameobj("file")
|
58
|
-
)
|
59
|
-
}
|
60
|
-
|
61
|
-
top = nil
|
62
|
-
assert_nothing_raised("Could not create top object") {
|
63
|
-
top = AST::ASTArray.new(
|
64
|
-
:children => [coll]
|
65
|
-
)
|
66
|
-
}
|
67
|
-
|
68
|
-
objects = nil
|
69
|
-
assert_nothing_raised("Could not evaluate") {
|
70
|
-
scope = mkscope
|
71
|
-
objects = scope.evaluate(:ast => top).flatten
|
72
|
-
}
|
73
|
-
|
74
|
-
assert(objects.length > 0, "Did not receive any collected objects")
|
75
|
-
end
|
76
|
-
else
|
77
|
-
$stderr.puts "No ActiveRecord -- skipping collection tests"
|
78
|
-
end
|
15
|
+
include PuppetTest::Support::Collection
|
79
16
|
|
80
17
|
def test_if
|
81
18
|
astif = nil
|
@@ -251,87 +188,6 @@ class TestAST < Test::Unit::TestCase
|
|
251
188
|
end
|
252
189
|
end
|
253
190
|
end
|
254
|
-
|
255
|
-
if defined? ActiveRecord::Base
|
256
|
-
def test_exported_collexp
|
257
|
-
railsinit
|
258
|
-
Puppet[:storeconfigs] = true
|
259
|
-
@interp, @scope, @source = mkclassframing
|
260
|
-
|
261
|
-
# make a rails resource
|
262
|
-
railsresource "file", "/tmp/testing", :owner => "root", :group => "bin",
|
263
|
-
:mode => "644"
|
264
|
-
|
265
|
-
run_collection_queries(:exported) do |string, result, query|
|
266
|
-
code = nil
|
267
|
-
str = nil
|
268
|
-
|
269
|
-
# We don't support anything but the title in rails right now
|
270
|
-
retval = nil
|
271
|
-
bad = false
|
272
|
-
# Figure out if the search is for anything rails will ignore
|
273
|
-
string.scan(/(\w+) [!=]= \w+/) do |s|
|
274
|
-
unless s[0] == "title"
|
275
|
-
bad = true
|
276
|
-
break
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
# And if it is, make sure we throw an error.
|
281
|
-
if bad
|
282
|
-
assert_raise(Puppet::ParseError, "Evaluated '#{string}'") do
|
283
|
-
str, code = query.evaluate :scope => @scope
|
284
|
-
end
|
285
|
-
next
|
286
|
-
else
|
287
|
-
assert_nothing_raised("Could not evaluate '#{string}'") do
|
288
|
-
str, code = query.evaluate :scope => @scope
|
289
|
-
end
|
290
|
-
end
|
291
|
-
assert_nothing_raised("Could not find resource") do
|
292
|
-
retval = Puppet::Rails::Resource.find(:all,
|
293
|
-
:include => :param_values,
|
294
|
-
:conditions => str)
|
295
|
-
end
|
296
|
-
|
297
|
-
if result
|
298
|
-
assert_equal(1, retval.length, "Did not find resource with '#{string}'")
|
299
|
-
res = retval.shift
|
300
|
-
|
301
|
-
assert_equal("file", res.restype)
|
302
|
-
assert_equal("/tmp/testing", res.title)
|
303
|
-
else
|
304
|
-
assert_equal(0, retval.length, "found a resource with '#{string}'")
|
305
|
-
end
|
306
|
-
end
|
307
|
-
end
|
308
|
-
end
|
309
|
-
|
310
|
-
def run_collection_queries(form)
|
311
|
-
{true => [%{title == "/tmp/testing"}, %{(title == "/tmp/testing")},
|
312
|
-
%{title == "/tmp/testing" and group == bin}, %{title == bin or group == bin},
|
313
|
-
%{title == "/tmp/testing" or title == bin}, %{title == "/tmp/testing"},
|
314
|
-
%{(title == "/tmp/testing" or title == bin) and group == bin}],
|
315
|
-
false => [%{title == bin}, %{title == bin or (title == bin and group == bin)},
|
316
|
-
%{title != "/tmp/testing"}, %{title != "/tmp/testing" and group != bin}]
|
317
|
-
}.each do |res, ary|
|
318
|
-
ary.each do |str|
|
319
|
-
if form == :virtual
|
320
|
-
code = "File <| #{str} |>"
|
321
|
-
else
|
322
|
-
code = "File <<| #{str} |>>"
|
323
|
-
end
|
324
|
-
parser = mkparser
|
325
|
-
query = nil
|
326
|
-
|
327
|
-
assert_nothing_raised("Could not parse '#{str}'") do
|
328
|
-
query = parser.parse(code)[0].query
|
329
|
-
end
|
330
|
-
|
331
|
-
yield str, res, query
|
332
|
-
end
|
333
|
-
end
|
334
|
-
end
|
335
191
|
end
|
336
192
|
|
337
|
-
# $Id: ast.rb
|
193
|
+
# $Id: ast.rb 2597 2007-06-17 21:41:50Z luke $
|
@@ -129,5 +129,14 @@ class TestASTComponent < Test::Unit::TestCase
|
|
129
129
|
end
|
130
130
|
end
|
131
131
|
end
|
132
|
+
|
133
|
+
# Testing the root cause of #615. We should be using the fqname for the type, instead
|
134
|
+
# of just the short name.
|
135
|
+
def test_fully_qualified_types
|
136
|
+
interp = mkinterp
|
137
|
+
klass = interp.newclass("one::two")
|
138
|
+
|
139
|
+
assert_equal("one::two", klass.classname, "Class did not get fully qualified class name")
|
140
|
+
end
|
132
141
|
end
|
133
|
-
# $Id: component.rb
|
142
|
+
# $Id: component.rb 2458 2007-05-03 20:45:25Z luke $
|
data/test/language/collector.rb
CHANGED
@@ -2,17 +2,14 @@
|
|
2
2
|
|
3
3
|
$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
|
4
4
|
|
5
|
-
require 'puppet/rails'
|
6
5
|
require 'puppettest'
|
7
6
|
require 'puppettest/parsertesting'
|
8
7
|
require 'puppettest/resourcetesting'
|
9
|
-
require 'puppettest/railstesting'
|
10
8
|
|
11
9
|
class TestCollector < Test::Unit::TestCase
|
12
10
|
include PuppetTest
|
13
11
|
include PuppetTest::ParserTesting
|
14
12
|
include PuppetTest::ResourceTesting
|
15
|
-
include PuppetTest::RailsTesting
|
16
13
|
Parser = Puppet::Parser
|
17
14
|
AST = Parser::AST
|
18
15
|
|
@@ -142,193 +139,6 @@ class TestCollector < Test::Unit::TestCase
|
|
142
139
|
assert_equal(false, ret)
|
143
140
|
end
|
144
141
|
|
145
|
-
if Puppet.features.rails?
|
146
|
-
def test_collect_exported
|
147
|
-
railsinit
|
148
|
-
|
149
|
-
# Set a hostname
|
150
|
-
@scope.host = Facter.value(:hostname)
|
151
|
-
|
152
|
-
# make an exported resource
|
153
|
-
exported = mkresource(:type => "file", :title => "/tmp/exported",
|
154
|
-
:exported => true, :params => {:owner => "root"})
|
155
|
-
@scope.setresource exported
|
156
|
-
|
157
|
-
assert(exported.exported?, "Object was not marked exported")
|
158
|
-
assert(exported.virtual?, "Object was not marked virtual")
|
159
|
-
|
160
|
-
# And a non-exported
|
161
|
-
real = mkresource(:type => "file", :title => "/tmp/real",
|
162
|
-
:params => {:owner => "root"})
|
163
|
-
@scope.setresource real
|
164
|
-
|
165
|
-
# Now make a collector
|
166
|
-
coll = nil
|
167
|
-
assert_nothing_raised do
|
168
|
-
coll = Puppet::Parser::Collector.new(@scope, "file", nil, nil, :exported)
|
169
|
-
end
|
170
|
-
|
171
|
-
# Set it in our scope
|
172
|
-
@scope.newcollection(coll)
|
173
|
-
|
174
|
-
# Make sure it's in the collections
|
175
|
-
assert_equal([coll], @scope.collections)
|
176
|
-
|
177
|
-
# And try to collect the virtual resources.
|
178
|
-
ret = nil
|
179
|
-
assert_nothing_raised do
|
180
|
-
ret = coll.collect_exported
|
181
|
-
end
|
182
|
-
|
183
|
-
assert_equal([exported], ret)
|
184
|
-
|
185
|
-
# Now make sure evaluate does the right thing.
|
186
|
-
assert_nothing_raised do
|
187
|
-
ret = coll.evaluate
|
188
|
-
end
|
189
|
-
|
190
|
-
# Make sure that the collection does not find the resource on the
|
191
|
-
# next run.
|
192
|
-
ret = nil
|
193
|
-
assert_nothing_raised do
|
194
|
-
ret = coll.collect_exported
|
195
|
-
end
|
196
|
-
|
197
|
-
assert(ret.empty?, "Exported resource was collected on the second run")
|
198
|
-
|
199
|
-
|
200
|
-
# And make sure our exported object is no longer exported
|
201
|
-
assert(! exported.virtual?, "Virtual object did not get realized")
|
202
|
-
|
203
|
-
# But it should still be marked exported.
|
204
|
-
assert(exported.exported?, "Resource got un-exported")
|
205
|
-
|
206
|
-
# Now make a new collector of a different type and make sure it
|
207
|
-
# finds nothing.
|
208
|
-
assert_nothing_raised do
|
209
|
-
coll = Puppet::Parser::Collector.new(@scope, "exec", nil, nil, :exported)
|
210
|
-
end
|
211
|
-
|
212
|
-
# Remark this as virtual
|
213
|
-
exported.virtual = true
|
214
|
-
|
215
|
-
assert_nothing_raised do
|
216
|
-
ret = coll.evaluate
|
217
|
-
end
|
218
|
-
|
219
|
-
assert(! ret, "got resources back")
|
220
|
-
|
221
|
-
# Now create a whole new scope and make sure we can actually retrieve
|
222
|
-
# the resource from the database, not just from the scope.
|
223
|
-
# First create a host object and store our resource in it.
|
224
|
-
|
225
|
-
# Now collect our facts
|
226
|
-
facts = {}
|
227
|
-
Facter.each do |fact, value| facts[fact] = value end
|
228
|
-
|
229
|
-
# Now try storing our crap
|
230
|
-
# Remark this as exported
|
231
|
-
exported.exported = true
|
232
|
-
host = Puppet::Rails::Host.store(
|
233
|
-
:resources => [exported],
|
234
|
-
:facts => facts,
|
235
|
-
:name => facts["hostname"]
|
236
|
-
)
|
237
|
-
assert(host, "did not get rails host")
|
238
|
-
host.save
|
239
|
-
|
240
|
-
# And make sure it's in there
|
241
|
-
newres = host.resources.find_by_restype_and_title_and_exported("file", "/tmp/exported", true)
|
242
|
-
assert(newres, "Did not find resource in db")
|
243
|
-
interp, scope, source = mkclassframing
|
244
|
-
scope.host = "two"
|
245
|
-
|
246
|
-
# Now make a collector
|
247
|
-
coll = nil
|
248
|
-
assert_nothing_raised do
|
249
|
-
coll = Puppet::Parser::Collector.new(scope, "file", nil, nil, :exported)
|
250
|
-
end
|
251
|
-
|
252
|
-
# Set it in our scope
|
253
|
-
scope.newcollection(coll)
|
254
|
-
|
255
|
-
# Make sure it's in the collections
|
256
|
-
assert_equal([coll], scope.collections)
|
257
|
-
|
258
|
-
# And try to collect the virtual resources.
|
259
|
-
ret = nil
|
260
|
-
assert_nothing_raised do
|
261
|
-
ret = coll.collect_exported
|
262
|
-
end
|
263
|
-
|
264
|
-
assert_equal(["/tmp/exported"], ret.collect { |f| f.title })
|
265
|
-
|
266
|
-
# Make sure we can evaluate the same collection multiple times and
|
267
|
-
# that later collections do nothing
|
268
|
-
assert_nothing_raised("Collection found same resource twice") do
|
269
|
-
ret = coll.evaluate
|
270
|
-
end
|
271
|
-
end
|
272
|
-
|
273
|
-
def test_collection_conflicts
|
274
|
-
railsinit
|
275
|
-
|
276
|
-
# First make a railshost we can conflict with
|
277
|
-
host = Puppet::Rails::Host.new(:name => "myhost")
|
278
|
-
|
279
|
-
host.resources.build(:title => "/tmp/conflicttest", :restype => "file",
|
280
|
-
:exported => true)
|
281
|
-
|
282
|
-
host.save
|
283
|
-
|
284
|
-
# Now make a normal resource
|
285
|
-
normal = mkresource(:type => "file", :title => "/tmp/conflicttest",
|
286
|
-
:params => {:owner => "root"})
|
287
|
-
@scope.setresource normal
|
288
|
-
@scope.host = "otherhost"
|
289
|
-
|
290
|
-
# Now make a collector
|
291
|
-
coll = nil
|
292
|
-
assert_nothing_raised do
|
293
|
-
coll = Puppet::Parser::Collector.new(@scope, "file", nil, nil, :exported)
|
294
|
-
end
|
295
|
-
|
296
|
-
# And try to collect the virtual resources.
|
297
|
-
assert_raise(Puppet::ParseError) do
|
298
|
-
ret = coll.collect_exported
|
299
|
-
end
|
300
|
-
end
|
301
|
-
|
302
|
-
# Make sure we do not collect resources from the host we're on
|
303
|
-
def test_no_resources_from_me
|
304
|
-
railsinit
|
305
|
-
|
306
|
-
# Make our configuration
|
307
|
-
host = Puppet::Rails::Host.new(:name => "myhost")
|
308
|
-
|
309
|
-
host.resources.build(:title => "/tmp/hosttest", :type => "file",
|
310
|
-
:exported => true)
|
311
|
-
|
312
|
-
host.save
|
313
|
-
|
314
|
-
@scope.host = "myhost"
|
315
|
-
|
316
|
-
# Now make a collector
|
317
|
-
coll = nil
|
318
|
-
assert_nothing_raised do
|
319
|
-
coll = Puppet::Parser::Collector.new(@scope, "file", nil, nil, :exported)
|
320
|
-
end
|
321
|
-
|
322
|
-
# And make sure we get nada back
|
323
|
-
ret = nil
|
324
|
-
assert_nothing_raised do
|
325
|
-
ret = coll.collect_exported
|
326
|
-
end
|
327
|
-
|
328
|
-
assert(ret.empty?, "Found exports from our own host")
|
329
|
-
end
|
330
|
-
end
|
331
|
-
|
332
142
|
# Collections that specify resources should be deleted when they succeed,
|
333
143
|
# but others should remain until the very end.
|
334
144
|
def test_normal_collections_remain
|
@@ -366,4 +176,4 @@ class TestCollector < Test::Unit::TestCase
|
|
366
176
|
end
|
367
177
|
end
|
368
178
|
|
369
|
-
# $Id: collector.rb
|
179
|
+
# $Id: collector.rb 2597 2007-06-17 21:41:50Z luke $
|