puppet 0.24.1 → 0.24.2
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 +94 -0
- data/Rakefile +0 -4
- data/bin/puppet +18 -10
- data/bin/puppetd +1 -1
- data/bin/puppetdoc +14 -4
- data/bin/puppetmasterd +1 -1
- data/bin/puppetrun +3 -8
- data/bin/ralsh +12 -11
- data/conf/freebsd/puppetd +1 -1
- data/conf/freebsd/puppetmasterd +1 -1
- data/conf/gentoo/puppet/puppet.conf +29 -0
- data/conf/namespaceauth.conf +20 -0
- data/conf/redhat/puppet.spec +4 -1
- data/conf/solaris/smf/puppetd.xml +1 -1
- data/conf/solaris/smf/puppetmasterd.xml +1 -1
- data/conf/suse/puppet.spec +10 -8
- data/examples/root/etc/puppet/{puppetmasterd.conf → puppet.conf} +6 -3
- data/ext/logcheck/puppet +7 -0
- data/ext/puppet-test +28 -5
- data/lib/puppet.rb +2 -1
- data/lib/puppet/defaults.rb +12 -5
- data/lib/puppet/dsl.rb +43 -45
- data/lib/puppet/external/{gratr/rdot.rb → dot.rb} +0 -0
- data/lib/puppet/external/nagios.rb +50 -0
- data/lib/puppet/external/nagios/base.rb +421 -0
- data/lib/puppet/external/nagios/parser.rb +816 -0
- data/lib/puppet/file_serving/file_base.rb +16 -3
- data/lib/puppet/file_serving/metadata.rb +29 -11
- data/lib/puppet/indirector/terminus.rb +1 -0
- data/lib/puppet/metatype/closure.rb +4 -0
- data/lib/puppet/metatype/evaluation.rb +2 -17
- data/lib/puppet/metatype/metaparams.rb +1 -1
- data/lib/puppet/network.rb +3 -0
- data/lib/puppet/network/client.rb +4 -5
- data/lib/puppet/network/client/master.rb +10 -7
- data/lib/puppet/network/handler/fileserver.rb +22 -45
- data/lib/puppet/network/http_pool.rb +3 -0
- data/lib/puppet/network/http_server/mongrel.rb +7 -1
- data/lib/puppet/network/http_server/webrick.rb +4 -3
- data/lib/puppet/network/xmlrpc/client.rb +12 -1
- data/lib/puppet/node/catalog.rb +51 -40
- data/lib/puppet/parser/ast.rb +27 -49
- data/lib/puppet/parser/ast/astarray.rb +5 -24
- data/lib/puppet/parser/ast/caseopt.rb +4 -4
- data/lib/puppet/parser/ast/casestatement.rb +4 -5
- data/lib/puppet/parser/ast/collection.rb +3 -5
- data/lib/puppet/parser/ast/collexpr.rb +3 -5
- data/lib/puppet/parser/ast/definition.rb +148 -159
- data/lib/puppet/parser/ast/else.rb +2 -3
- data/lib/puppet/parser/ast/function.rb +3 -10
- data/lib/puppet/parser/ast/hostclass.rb +66 -59
- data/lib/puppet/parser/ast/ifstatement.rb +4 -5
- data/lib/puppet/parser/ast/leaf.rb +6 -6
- data/lib/puppet/parser/ast/node.rb +26 -58
- data/lib/puppet/parser/ast/resource.rb +5 -7
- data/lib/puppet/parser/ast/resource_defaults.rb +2 -4
- data/lib/puppet/parser/ast/resource_override.rb +4 -6
- data/lib/puppet/parser/ast/resource_reference.rb +2 -4
- data/lib/puppet/parser/ast/resourceparam.rb +2 -4
- data/lib/puppet/parser/ast/selector.rb +5 -6
- data/lib/puppet/parser/ast/tag.rb +2 -4
- data/lib/puppet/parser/ast/vardef.rb +3 -4
- data/lib/puppet/parser/collector.rb +5 -5
- data/lib/puppet/parser/{compile.rb → compiler.rb} +69 -107
- data/lib/puppet/parser/functions.rb +3 -3
- data/lib/puppet/parser/interpreter.rb +32 -23
- data/lib/puppet/parser/lexer.rb +391 -282
- data/lib/puppet/parser/parser.rb +5 -4
- data/lib/puppet/parser/parser_support.rb +3 -6
- data/lib/puppet/parser/resource.rb +24 -36
- data/lib/puppet/parser/resource/param.rb +1 -1
- data/lib/puppet/parser/resource/reference.rb +7 -3
- data/lib/puppet/parser/scope.rb +12 -7
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pgraph.rb +9 -98
- data/lib/puppet/provider/interface/redhat.rb +65 -65
- data/lib/puppet/provider/mount/parsed.rb +1 -1
- data/lib/puppet/provider/naginator.rb +55 -0
- data/lib/puppet/provider/nameservice/directoryservice.rb +6 -7
- data/lib/puppet/provider/package/fink.rb +0 -2
- data/lib/puppet/provider/package/gem.rb +9 -5
- data/lib/puppet/provider/package/openbsd.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -8
- data/lib/puppet/provider/package/portage.rb +4 -4
- data/lib/puppet/provider/package/yumhelper.py +8 -6
- data/lib/puppet/provider/parsedfile.rb +7 -1
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/service/gentoo.rb +4 -0
- data/lib/puppet/provider/service/init.rb +1 -1
- data/lib/puppet/provider/sshkey/parsed.rb +2 -0
- data/lib/puppet/provider/user/useradd.rb +1 -1
- data/lib/puppet/rails.rb +4 -0
- data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +17 -0
- data/lib/puppet/rails/fact_value.rb +4 -0
- data/lib/puppet/rails/host.rb +1 -2
- data/lib/puppet/rails/param_value.rb +4 -0
- data/lib/puppet/rails/resource_tag.rb +4 -0
- data/lib/puppet/rails/source_file.rb +4 -1
- data/lib/puppet/relationship.rb +5 -1
- data/lib/puppet/reports/tagmail.rb +12 -1
- data/lib/puppet/resource_reference.rb +1 -1
- data/lib/puppet/simple_graph.rb +78 -11
- data/lib/puppet/sslcertificates.rb +1 -1
- data/lib/puppet/sslcertificates/ca.rb +3 -3
- data/lib/puppet/transaction.rb +7 -4
- data/lib/puppet/transportable.rb +1 -1
- data/lib/puppet/type.rb +3 -10
- data/lib/puppet/type/cron.rb +18 -0
- data/lib/puppet/type/exec.rb +18 -12
- data/lib/puppet/type/{pfile.rb → file.rb} +66 -84
- data/lib/puppet/type/file/checksum.rb +271 -0
- data/lib/puppet/type/{pfile → file}/content.rb +10 -15
- data/lib/puppet/type/{pfile → file}/ensure.rb +15 -8
- data/lib/puppet/type/{pfile → file}/group.rb +0 -0
- data/lib/puppet/type/{pfile → file}/mode.rb +0 -0
- data/lib/puppet/type/{pfile → file}/owner.rb +0 -0
- data/lib/puppet/type/{pfile → file}/source.rb +34 -48
- data/lib/puppet/type/{pfile → file}/target.rb +0 -0
- data/lib/puppet/type/{pfile → file}/type.rb +0 -0
- data/lib/puppet/type/{pfilebucket.rb → filebucket.rb} +0 -0
- data/lib/puppet/type/host.rb +13 -0
- data/lib/puppet/type/mailalias.rb +1 -1
- data/lib/puppet/type/nagios_command.rb +3 -0
- data/lib/puppet/type/nagios_contact.rb +3 -0
- data/lib/puppet/type/nagios_contactgroup.rb +3 -0
- data/lib/puppet/type/nagios_host.rb +3 -0
- data/lib/puppet/type/nagios_hostextinfo.rb +3 -0
- data/lib/puppet/type/nagios_hostgroup.rb +3 -0
- data/lib/puppet/type/nagios_hostgroupescalation.rb +3 -0
- data/lib/puppet/type/nagios_service.rb +3 -0
- data/lib/puppet/type/nagios_servicedependency.rb +3 -0
- data/lib/puppet/type/nagios_serviceescalation.rb +3 -0
- data/lib/puppet/type/nagios_serviceextinfo.rb +3 -0
- data/lib/puppet/type/nagios_timeperiod.rb +3 -0
- data/lib/puppet/type/package.rb +4 -12
- data/lib/puppet/type/service.rb +9 -0
- data/lib/puppet/type/sshkey.rb +3 -3
- data/lib/puppet/util/autoload.rb +5 -5
- data/lib/puppet/util/checksums.rb +51 -13
- data/lib/puppet/util/constant_inflector.rb +14 -0
- data/lib/puppet/util/filetype.rb +1 -1
- data/lib/puppet/util/graph.rb +3 -9
- data/lib/puppet/util/nagios_maker.rb +57 -0
- data/lib/puppet/util/settings.rb +19 -16
- data/lib/puppet/util/tagging.rb +39 -0
- data/test/executables/puppetbin.rb +17 -0
- data/test/language/ast.rb +8 -58
- data/test/language/ast/casestatement.rb +3 -3
- data/test/language/ast/resource.rb +6 -7
- data/test/language/ast/resource_reference.rb +12 -12
- data/test/language/ast/selector.rb +2 -2
- data/test/language/ast/variable.rb +2 -2
- data/test/language/functions.rb +24 -24
- data/test/language/parser.rb +20 -8
- data/test/language/resource.rb +5 -42
- data/test/language/scope.rb +21 -37
- data/test/language/snippets.rb +7 -0
- data/test/lib/puppettest.rb +28 -14
- data/test/lib/puppettest/parsertesting.rb +10 -10
- data/test/lib/puppettest/support/resources.rb +1 -1
- data/test/network/client/master.rb +10 -0
- data/test/network/handler/fileserver.rb +51 -49
- data/test/network/server/webrick.rb +1 -1
- data/test/other/dsl.rb +3 -4
- data/test/other/transactions.rb +6 -4
- data/test/rails/ast.rb +2 -2
- data/test/rails/configuration.rb +1 -1
- data/test/rails/railsparameter.rb +2 -0
- data/test/rails/railsresource.rb +1 -0
- data/test/ral/manager/type.rb +4 -4
- data/test/ral/providers/cron/crontab.rb +3 -1
- data/test/ral/providers/package.rb +1 -1
- data/test/ral/{types → type}/basic.rb +2 -2
- data/test/ral/{types → type}/cron.rb +0 -0
- data/test/ral/{types → type}/exec.rb +42 -2
- data/test/ral/{types → type}/file.rb +34 -79
- data/test/ral/{types → type}/file/target.rb +0 -0
- data/test/ral/{types → type}/filebucket.rb +0 -0
- data/test/ral/{types → type}/fileignoresource.rb +0 -0
- data/test/ral/{types → type}/filesources.rb +8 -27
- data/test/ral/{types → type}/group.rb +0 -0
- data/test/ral/{types → type}/host.rb +16 -0
- data/test/ral/{types → type}/mailalias.rb +0 -0
- data/test/ral/{types → type}/parameter.rb +0 -0
- data/test/ral/{types → type}/port.rb +0 -0
- data/test/ral/{types → type}/property.rb +0 -0
- data/test/ral/{types → type}/resources.rb +0 -0
- data/test/ral/{types → type}/service.rb +0 -0
- data/test/ral/{types → type}/sshkey.rb +0 -0
- data/test/ral/{types → type}/tidy.rb +1 -0
- data/test/ral/{types → type}/user.rb +0 -0
- data/test/ral/{types → type}/yumrepo.rb +0 -0
- data/test/ral/{types → type}/zone.rb +0 -0
- data/test/util/autoload.rb +24 -5
- metadata +60 -107
- data/conf/gentoo/puppet/puppetca.conf +0 -29
- data/conf/gentoo/puppet/puppetd.conf +0 -29
- data/conf/gentoo/puppet/puppetmasterd.conf +0 -29
- data/examples/root/etc/puppet/puppetd.conf +0 -4
- data/lib/puppet/external/gratr.rb +0 -33
- data/lib/puppet/external/gratr/adjacency_graph.rb +0 -257
- data/lib/puppet/external/gratr/base.rb +0 -34
- data/lib/puppet/external/gratr/biconnected.rb +0 -116
- data/lib/puppet/external/gratr/chinese_postman.rb +0 -123
- data/lib/puppet/external/gratr/common.rb +0 -73
- data/lib/puppet/external/gratr/comparability.rb +0 -92
- data/lib/puppet/external/gratr/digraph.rb +0 -116
- data/lib/puppet/external/gratr/digraph_distance.rb +0 -185
- data/lib/puppet/external/gratr/dot.rb +0 -90
- data/lib/puppet/external/gratr/edge.rb +0 -145
- data/lib/puppet/external/gratr/graph.rb +0 -303
- data/lib/puppet/external/gratr/graph_api.rb +0 -83
- data/lib/puppet/external/gratr/import.rb +0 -44
- data/lib/puppet/external/gratr/labels.rb +0 -90
- data/lib/puppet/external/gratr/maximum_flow.rb +0 -64
- data/lib/puppet/external/gratr/search.rb +0 -409
- data/lib/puppet/external/gratr/strong_components.rb +0 -127
- data/lib/puppet/external/gratr/undirected_graph.rb +0 -153
- data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +0 -62
- data/lib/puppet/rails/external/tagging/init.rb +0 -5
- data/lib/puppet/rails/external/tagging/tag.rb +0 -50
- data/lib/puppet/rails/external/tagging/tagging.rb +0 -12
- data/lib/puppet/rails/puppet_class.rb +0 -6
- data/lib/puppet/reference/node_source.rb +0 -9
- data/lib/puppet/reference/report.rb +0 -21
- data/lib/puppet/type/pfile/checksum.rb +0 -326
- data/test/language/ast/definition.rb +0 -166
- data/test/language/ast/hostclass.rb +0 -184
- data/test/language/compile.rb +0 -569
- data/test/language/lexer.rb +0 -276
- data/test/lib/mocha.rb +0 -19
- data/test/lib/mocha/any_instance_method.rb +0 -35
- data/test/lib/mocha/auto_verify.rb +0 -113
- data/test/lib/mocha/central.rb +0 -35
- data/test/lib/mocha/class_method.rb +0 -62
- data/test/lib/mocha/deprecation.rb +0 -22
- data/test/lib/mocha/exception_raiser.rb +0 -17
- data/test/lib/mocha/expectation.rb +0 -378
- data/test/lib/mocha/expectation_error.rb +0 -6
- data/test/lib/mocha/infinite_range.rb +0 -25
- data/test/lib/mocha/inspect.rb +0 -39
- data/test/lib/mocha/instance_method.rb +0 -8
- data/test/lib/mocha/is_a.rb +0 -9
- data/test/lib/mocha/metaclass.rb +0 -7
- data/test/lib/mocha/missing_expectation.rb +0 -27
- data/test/lib/mocha/mock.rb +0 -207
- data/test/lib/mocha/multiple_yields.rb +0 -20
- data/test/lib/mocha/no_yields.rb +0 -11
- data/test/lib/mocha/object.rb +0 -110
- data/test/lib/mocha/parameter_matchers.rb +0 -9
- data/test/lib/mocha/parameter_matchers/all_of.rb +0 -39
- data/test/lib/mocha/parameter_matchers/any_of.rb +0 -44
- data/test/lib/mocha/parameter_matchers/anything.rb +0 -30
- data/test/lib/mocha/parameter_matchers/has_entry.rb +0 -39
- data/test/lib/mocha/parameter_matchers/has_key.rb +0 -39
- data/test/lib/mocha/parameter_matchers/has_value.rb +0 -39
- data/test/lib/mocha/parameter_matchers/includes.rb +0 -37
- data/test/lib/mocha/pretty_parameters.rb +0 -28
- data/test/lib/mocha/return_values.rb +0 -31
- data/test/lib/mocha/setup_and_teardown.rb +0 -23
- data/test/lib/mocha/single_return_value.rb +0 -24
- data/test/lib/mocha/single_yield.rb +0 -18
- data/test/lib/mocha/standalone.rb +0 -32
- data/test/lib/mocha/stub.rb +0 -18
- data/test/lib/mocha/test_case_adapter.rb +0 -49
- data/test/lib/mocha/yield_parameters.rb +0 -31
data/lib/puppet/parser/ast.rb
CHANGED
@@ -14,30 +14,6 @@ class Puppet::Parser::AST
|
|
14
14
|
include Puppet::Util::MethodHelper
|
15
15
|
attr_accessor :line, :file, :parent, :scope
|
16
16
|
|
17
|
-
# Just used for 'tree', which is only used in debugging.
|
18
|
-
@@pink = "[0;31m"
|
19
|
-
@@green = "[0;32m"
|
20
|
-
@@yellow = "[0;33m"
|
21
|
-
@@slate = "[0;34m"
|
22
|
-
@@reset = "[0m"
|
23
|
-
|
24
|
-
# Just used for 'tree', which is only used in debugging.
|
25
|
-
@@indent = " " * 4
|
26
|
-
@@indline = @@pink + ("-" * 4) + @@reset
|
27
|
-
@@midline = @@slate + ("-" * 4) + @@reset
|
28
|
-
|
29
|
-
@@settypes = {}
|
30
|
-
|
31
|
-
# Just used for 'tree', which is only used in debugging.
|
32
|
-
def AST.indention
|
33
|
-
return @@indent * @@indention
|
34
|
-
end
|
35
|
-
|
36
|
-
# Just used for 'tree', which is only used in debugging.
|
37
|
-
def AST.midline
|
38
|
-
return @@midline
|
39
|
-
end
|
40
|
-
|
41
17
|
# Does this ast object set something? If so, it gets evaluated first.
|
42
18
|
def self.settor?
|
43
19
|
if defined? @settor
|
@@ -47,16 +23,12 @@ class Puppet::Parser::AST
|
|
47
23
|
end
|
48
24
|
end
|
49
25
|
|
50
|
-
# Evaluate the current object.
|
26
|
+
# Evaluate the current object. Just a stub method, since the subclass
|
27
|
+
# should override this method.
|
51
28
|
# of the contained children and evaluates them in turn, returning a
|
52
29
|
# list of all of the collected values, rejecting nil values
|
53
|
-
def evaluate(
|
54
|
-
|
55
|
-
value = self.collect { |obj|
|
56
|
-
obj.safeevaluate(args)
|
57
|
-
}.reject { |obj|
|
58
|
-
obj.nil?
|
59
|
-
}
|
30
|
+
def evaluate(*options)
|
31
|
+
raise Puppet::DevError, "Did not override #evaluate in %s" % self.class
|
60
32
|
end
|
61
33
|
|
62
34
|
# Throw a parse error.
|
@@ -75,11 +47,11 @@ class Puppet::Parser::AST
|
|
75
47
|
# correctly handles errors. It is critical to use this method because
|
76
48
|
# it can enable you to catch the error where it happens, rather than
|
77
49
|
# much higher up the stack.
|
78
|
-
def safeevaluate(options)
|
50
|
+
def safeevaluate(*options)
|
79
51
|
# We duplicate code here, rather than using exceptwrap, because this
|
80
52
|
# is called so many times during parsing.
|
81
53
|
begin
|
82
|
-
return self.evaluate(options)
|
54
|
+
return self.evaluate(*options)
|
83
55
|
rescue Puppet::Error => detail
|
84
56
|
raise adderrorcontext(detail)
|
85
57
|
rescue => detail
|
@@ -90,14 +62,6 @@ class Puppet::Parser::AST
|
|
90
62
|
end
|
91
63
|
end
|
92
64
|
|
93
|
-
# Again, just used for printing out the parse tree.
|
94
|
-
def typewrap(string)
|
95
|
-
#return self.class.to_s.sub(/.+::/,'') +
|
96
|
-
#"(" + @@green + string.to_s + @@reset + ")"
|
97
|
-
return @@green + string.to_s + @@reset +
|
98
|
-
"(" + self.class.to_s.sub(/.+::/,'') + ")"
|
99
|
-
end
|
100
|
-
|
101
65
|
# Initialize the object. Requires a hash as the argument, and
|
102
66
|
# takes each of the parameters of the hash and calls the settor
|
103
67
|
# method for them. This is probably pretty inefficient and should
|
@@ -107,13 +71,27 @@ class Puppet::Parser::AST
|
|
107
71
|
@line = nil
|
108
72
|
set_options(args)
|
109
73
|
end
|
110
|
-
#---------------------------------------------------------------
|
111
|
-
# Now autoload everything.
|
112
|
-
@autoloader = Puppet::Util::Autoload.new(self,
|
113
|
-
"puppet/parser/ast"
|
114
|
-
)
|
115
|
-
@autoloader.loadall
|
116
74
|
end
|
117
75
|
|
76
|
+
# And include all of the AST subclasses.
|
77
|
+
require 'puppet/parser/ast/astarray'
|
78
|
+
require 'puppet/parser/ast/branch'
|
79
|
+
require 'puppet/parser/ast/caseopt'
|
80
|
+
require 'puppet/parser/ast/casestatement'
|
81
|
+
require 'puppet/parser/ast/collection'
|
82
|
+
require 'puppet/parser/ast/collexpr'
|
83
|
+
require 'puppet/parser/ast/definition'
|
84
|
+
require 'puppet/parser/ast/else'
|
85
|
+
require 'puppet/parser/ast/function'
|
86
|
+
require 'puppet/parser/ast/hostclass'
|
87
|
+
require 'puppet/parser/ast/ifstatement'
|
118
88
|
require 'puppet/parser/ast/leaf'
|
119
|
-
|
89
|
+
require 'puppet/parser/ast/node'
|
90
|
+
require 'puppet/parser/ast/resource'
|
91
|
+
require 'puppet/parser/ast/resource_defaults'
|
92
|
+
require 'puppet/parser/ast/resource_override'
|
93
|
+
require 'puppet/parser/ast/resource_reference'
|
94
|
+
require 'puppet/parser/ast/resourceparam'
|
95
|
+
require 'puppet/parser/ast/selector'
|
96
|
+
require 'puppet/parser/ast/tag'
|
97
|
+
require 'puppet/parser/ast/vardef'
|
@@ -15,18 +15,7 @@ class Puppet::Parser::AST
|
|
15
15
|
end
|
16
16
|
|
17
17
|
# Evaluate our children.
|
18
|
-
def evaluate(
|
19
|
-
scope = hash[:scope]
|
20
|
-
rets = nil
|
21
|
-
# We basically always operate declaratively, and when we
|
22
|
-
# do we need to evaluate the settor-like statements first. This
|
23
|
-
# is basically variable and type-default declarations.
|
24
|
-
# This is such a stupid hack. I've no real idea how to make a
|
25
|
-
# "real" declarative language, so I hack it so it looks like
|
26
|
-
# one, yay.
|
27
|
-
settors = []
|
28
|
-
others = []
|
29
|
-
|
18
|
+
def evaluate(scope)
|
30
19
|
# Make a new array, so we don't have to deal with the details of
|
31
20
|
# flattening and such
|
32
21
|
items = []
|
@@ -35,23 +24,15 @@ class Puppet::Parser::AST
|
|
35
24
|
@children.each { |child|
|
36
25
|
if child.instance_of?(AST::ASTArray)
|
37
26
|
child.each do |ac|
|
38
|
-
|
39
|
-
settors << ac
|
40
|
-
else
|
41
|
-
others << ac
|
42
|
-
end
|
27
|
+
items << ac
|
43
28
|
end
|
44
29
|
else
|
45
|
-
|
46
|
-
settors << child
|
47
|
-
else
|
48
|
-
others << child
|
49
|
-
end
|
30
|
+
items << child
|
50
31
|
end
|
51
32
|
}
|
52
33
|
|
53
|
-
rets =
|
54
|
-
child.safeevaluate(
|
34
|
+
rets = items.flatten.collect { |child|
|
35
|
+
child.safeevaluate(scope)
|
55
36
|
}
|
56
37
|
return rets.reject { |o| o.nil? }
|
57
38
|
end
|
@@ -44,17 +44,17 @@ class Puppet::Parser::AST
|
|
44
44
|
def eachvalue(scope)
|
45
45
|
if @value.is_a?(AST::ASTArray)
|
46
46
|
@value.each { |subval|
|
47
|
-
yield subval.
|
47
|
+
yield subval.safeevaluate(scope)
|
48
48
|
}
|
49
49
|
else
|
50
|
-
yield @value.
|
50
|
+
yield @value.safeevaluate(scope)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
# Evaluate the actual statements; this only gets called if
|
55
55
|
# our option matched.
|
56
|
-
def evaluate(
|
57
|
-
return @statements.safeevaluate(
|
56
|
+
def evaluate(scope)
|
57
|
+
return @statements.safeevaluate(scope)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -8,9 +8,8 @@ class Puppet::Parser::AST
|
|
8
8
|
|
9
9
|
# Short-curcuit evaluation. Return the value of the statements for
|
10
10
|
# the first option that matches.
|
11
|
-
def evaluate(
|
12
|
-
|
13
|
-
value = @test.safeevaluate(:scope => scope)
|
11
|
+
def evaluate(scope)
|
12
|
+
value = @test.safeevaluate(scope)
|
14
13
|
sensitive = Puppet[:casesensitive]
|
15
14
|
value = value.downcase if ! sensitive and value.respond_to?(:downcase)
|
16
15
|
|
@@ -30,7 +29,7 @@ class Puppet::Parser::AST
|
|
30
29
|
|
31
30
|
if found
|
32
31
|
# we found a matching option
|
33
|
-
retvalue = option.safeevaluate(
|
32
|
+
retvalue = option.safeevaluate(scope)
|
34
33
|
break
|
35
34
|
end
|
36
35
|
|
@@ -42,7 +41,7 @@ class Puppet::Parser::AST
|
|
42
41
|
# Unless we found something, look for the default.
|
43
42
|
unless found
|
44
43
|
if default
|
45
|
-
retvalue = default.safeevaluate(
|
44
|
+
retvalue = default.safeevaluate(scope)
|
46
45
|
else
|
47
46
|
Puppet.debug "No true answers and no default"
|
48
47
|
retvalue = nil
|
@@ -9,18 +9,16 @@ class Collection < AST::Branch
|
|
9
9
|
attr_accessor :type, :query, :form
|
10
10
|
|
11
11
|
# We return an object that does a late-binding evaluation.
|
12
|
-
def evaluate(
|
13
|
-
scope = hash[:scope]
|
14
|
-
|
12
|
+
def evaluate(scope)
|
15
13
|
if self.query
|
16
|
-
str, code = self.query.safeevaluate
|
14
|
+
str, code = self.query.safeevaluate scope
|
17
15
|
else
|
18
16
|
str = code = nil
|
19
17
|
end
|
20
18
|
|
21
19
|
newcoll = Puppet::Parser::Collector.new(scope, @type, str, code, self.form)
|
22
20
|
|
23
|
-
scope.
|
21
|
+
scope.compiler.add_collection(newcoll)
|
24
22
|
|
25
23
|
newcoll
|
26
24
|
end
|
@@ -9,9 +9,7 @@ class CollExpr < AST::Branch
|
|
9
9
|
attr_accessor :test1, :test2, :oper, :form, :type, :parens
|
10
10
|
|
11
11
|
# We return an object that does a late-binding evaluation.
|
12
|
-
def evaluate(
|
13
|
-
scope = hash[:scope]
|
14
|
-
|
12
|
+
def evaluate(scope)
|
15
13
|
# Make sure our contained expressions have all the info they need.
|
16
14
|
[@test1, @test2].each do |t|
|
17
15
|
if t.is_a?(self.class)
|
@@ -21,8 +19,8 @@ class CollExpr < AST::Branch
|
|
21
19
|
end
|
22
20
|
|
23
21
|
# The code is only used for virtual lookups
|
24
|
-
str1, code1 = @test1.safeevaluate
|
25
|
-
str2, code2 = @test2.safeevaluate
|
22
|
+
str1, code1 = @test1.safeevaluate scope
|
23
|
+
str2, code2 = @test2.safeevaluate scope
|
26
24
|
|
27
25
|
# First build up the virtual code.
|
28
26
|
# If we're a conjunction operator, then we're calling code. I did
|
@@ -1,155 +1,145 @@
|
|
1
1
|
require 'puppet/parser/ast/branch'
|
2
2
|
|
3
|
-
|
4
|
-
# Evaluate the stored parse tree for a given component. This will
|
5
|
-
# receive the arguments passed to the component and also the type and
|
6
|
-
# name of the component.
|
7
|
-
class Definition < AST::Branch
|
8
|
-
include Puppet::Util
|
9
|
-
include Puppet::Util::Warnings
|
10
|
-
include Puppet::Util::MethodHelper
|
11
|
-
class << self
|
12
|
-
attr_accessor :name
|
13
|
-
end
|
3
|
+
require 'puppet/util/warnings'
|
14
4
|
|
15
|
-
|
16
|
-
|
5
|
+
# The AST class for defined types, which is also the base class
|
6
|
+
# nodes and classes.
|
7
|
+
class Puppet::Parser::AST::Definition < Puppet::Parser::AST::Branch
|
8
|
+
include Puppet::Util::Warnings
|
9
|
+
class << self
|
10
|
+
attr_accessor :name
|
11
|
+
end
|
17
12
|
|
18
|
-
|
19
|
-
|
13
|
+
# The class name
|
14
|
+
@name = :definition
|
20
15
|
|
21
|
-
|
22
|
-
|
16
|
+
attr_accessor :classname, :arguments, :code, :scope, :keyword
|
17
|
+
attr_accessor :exported, :namespace, :parser, :virtual, :name
|
23
18
|
|
24
|
-
|
19
|
+
attr_reader :parentclass
|
25
20
|
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
def child_of?(klass)
|
22
|
+
false
|
23
|
+
end
|
29
24
|
|
30
|
-
|
31
|
-
|
32
|
-
|
25
|
+
# Create a resource that knows how to evaluate our actual code.
|
26
|
+
def evaluate(scope)
|
27
|
+
resource = Puppet::Parser::Resource.new(:type => self.class.name, :title => self.classname, :scope => scope, :source => scope.source)
|
33
28
|
|
34
|
-
|
35
|
-
scope = subscope(origscope, resource)
|
29
|
+
scope.catalog.tag(*resource.tags)
|
36
30
|
|
37
|
-
|
38
|
-
# we are
|
39
|
-
if @classname != "" and ! @classname.nil?
|
40
|
-
@classname.split(/::/).each { |tag| scope.resource.tag(tag) }
|
41
|
-
end
|
31
|
+
scope.compiler.add_resource(scope, resource)
|
42
32
|
|
43
|
-
|
44
|
-
|
45
|
-
scope.resource.tag(str)
|
46
|
-
end
|
47
|
-
end
|
33
|
+
return resource
|
34
|
+
end
|
48
35
|
|
49
|
-
|
36
|
+
# Now evaluate the code associated with this class or definition.
|
37
|
+
def evaluate_code(resource)
|
38
|
+
# Create a new scope.
|
39
|
+
scope = subscope(resource.scope, resource)
|
50
40
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
41
|
+
set_resource_parameters(scope, resource)
|
42
|
+
|
43
|
+
if self.code
|
44
|
+
return self.code.safeevaluate(scope)
|
45
|
+
else
|
46
|
+
return nil
|
56
47
|
end
|
48
|
+
end
|
57
49
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
50
|
+
def initialize(hash = {})
|
51
|
+
@arguments = nil
|
52
|
+
@parentclass = nil
|
53
|
+
super
|
62
54
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
end
|
68
|
-
oldargs = @arguments
|
69
|
-
@arguments = {}
|
70
|
-
oldargs.each do |arg, val|
|
71
|
-
@arguments[arg] = val
|
72
|
-
end
|
73
|
-
else
|
74
|
-
@arguments = {}
|
55
|
+
# Convert the arguments to a hash for ease of later use.
|
56
|
+
if @arguments
|
57
|
+
unless @arguments.is_a? Array
|
58
|
+
@arguments = [@arguments]
|
75
59
|
end
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
if defvalue
|
81
|
-
warnonce "%s is a metaparam; this value will inherit to all contained resources" % arg
|
82
|
-
else
|
83
|
-
raise Puppet::ParseError, "%s is a metaparameter; please choose another parameter name in the %s definition" % [arg, self.classname]
|
84
|
-
end
|
60
|
+
oldargs = @arguments
|
61
|
+
@arguments = {}
|
62
|
+
oldargs.each do |arg, val|
|
63
|
+
@arguments[arg] = val
|
85
64
|
end
|
65
|
+
else
|
66
|
+
@arguments = {}
|
86
67
|
end
|
87
68
|
|
88
|
-
|
89
|
-
|
69
|
+
# Deal with metaparams in the argument list.
|
70
|
+
@arguments.each do |arg, defvalue|
|
71
|
+
next unless Puppet::Type.metaparamclass(arg)
|
72
|
+
if defvalue
|
73
|
+
warnonce "%s is a metaparam; this value will inherit to all contained resources" % arg
|
74
|
+
else
|
75
|
+
raise Puppet::ParseError, "%s is a metaparameter; please choose another parameter name in the %s definition" % [arg, self.classname]
|
76
|
+
end
|
90
77
|
end
|
78
|
+
end
|
91
79
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
if name == self.classname
|
96
|
-
parsefail "Parent classes must have dissimilar names"
|
97
|
-
end
|
80
|
+
def find_parentclass
|
81
|
+
@parser.findclass(namespace, parentclass)
|
82
|
+
end
|
98
83
|
|
99
|
-
|
84
|
+
# Set our parent class, with a little check to avoid some potential
|
85
|
+
# weirdness.
|
86
|
+
def parentclass=(name)
|
87
|
+
if name == self.classname
|
88
|
+
parsefail "Parent classes must have dissimilar names"
|
100
89
|
end
|
101
90
|
|
102
|
-
|
103
|
-
|
104
|
-
if @parentclass
|
105
|
-
# Cache our result, since it should never change.
|
106
|
-
unless defined?(@parentobj)
|
107
|
-
unless tmp = find_parentclass
|
108
|
-
parsefail "Could not find %s %s" % [self.class.name, @parentclass]
|
109
|
-
end
|
91
|
+
@parentclass = name
|
92
|
+
end
|
110
93
|
|
111
|
-
|
112
|
-
|
113
|
-
|
94
|
+
# Hunt down our class object.
|
95
|
+
def parentobj
|
96
|
+
return nil unless @parentclass
|
114
97
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
nil
|
98
|
+
# Cache our result, since it should never change.
|
99
|
+
unless defined?(@parentobj)
|
100
|
+
unless tmp = find_parentclass
|
101
|
+
parsefail "Could not find %s parent %s" % [self.class.name, @parentclass]
|
120
102
|
end
|
103
|
+
|
104
|
+
if tmp == self
|
105
|
+
parsefail "Parent classes must have dissimilar names"
|
106
|
+
end
|
107
|
+
|
108
|
+
@parentobj = tmp
|
121
109
|
end
|
110
|
+
@parentobj
|
111
|
+
end
|
122
112
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
113
|
+
# Create a new subscope in which to evaluate our code.
|
114
|
+
def subscope(scope, resource)
|
115
|
+
args = {
|
116
|
+
:resource => resource,
|
117
|
+
:keyword => self.keyword,
|
118
|
+
:namespace => self.namespace,
|
119
|
+
:source => self
|
120
|
+
}
|
131
121
|
|
132
|
-
|
133
|
-
|
134
|
-
|
122
|
+
oldscope = scope
|
123
|
+
scope = scope.newscope(args)
|
124
|
+
scope.source = self
|
135
125
|
|
136
|
-
|
137
|
-
|
126
|
+
return scope
|
127
|
+
end
|
138
128
|
|
139
|
-
|
140
|
-
|
141
|
-
|
129
|
+
def to_s
|
130
|
+
classname
|
131
|
+
end
|
142
132
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
133
|
+
# Check whether a given argument is valid. Searches up through
|
134
|
+
# any parent classes that might exist.
|
135
|
+
def validattr?(param)
|
136
|
+
param = param.to_s
|
147
137
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
138
|
+
if @arguments.include?(param)
|
139
|
+
# It's a valid arg for us
|
140
|
+
return true
|
141
|
+
elsif param == "name"
|
142
|
+
return true
|
153
143
|
# elsif defined? @parentclass and @parentclass
|
154
144
|
# # Else, check any existing parent
|
155
145
|
# if parent = @scope.lookuptype(@parentclass) and parent != []
|
@@ -160,53 +150,52 @@ class Puppet::Parser::AST
|
|
160
150
|
# raise Puppet::Error, "Could not find parent class %s" %
|
161
151
|
# @parentclass
|
162
152
|
# end
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
end
|
153
|
+
elsif Puppet::Type.metaparam?(param)
|
154
|
+
return true
|
155
|
+
else
|
156
|
+
# Or just return false
|
157
|
+
return false
|
169
158
|
end
|
159
|
+
end
|
170
160
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
end
|
161
|
+
private
|
162
|
+
|
163
|
+
# Set any arguments passed by the resource as variables in the scope.
|
164
|
+
def set_resource_parameters(scope, resource)
|
165
|
+
args = symbolize_options(resource.to_hash || {})
|
166
|
+
|
167
|
+
# Verify that all required arguments are either present or
|
168
|
+
# have been provided with defaults.
|
169
|
+
if self.arguments
|
170
|
+
self.arguments.each { |arg, default|
|
171
|
+
arg = arg.to_sym
|
172
|
+
unless args.include?(arg)
|
173
|
+
if defined? default and ! default.nil?
|
174
|
+
default = default.safeevaluate scope
|
175
|
+
args[arg] = default
|
176
|
+
#Puppet.debug "Got default %s for %s in %s" %
|
177
|
+
# [default.inspect, arg.inspect, @name.inspect]
|
178
|
+
else
|
179
|
+
parsefail "Must pass %s to %s of type %s" %
|
180
|
+
[arg, resource.title, @classname]
|
192
181
|
end
|
193
|
-
}
|
194
|
-
end
|
195
|
-
|
196
|
-
# Set each of the provided arguments as variables in the
|
197
|
-
# definition's scope.
|
198
|
-
args.each { |arg,value|
|
199
|
-
unless validattr?(arg)
|
200
|
-
parsefail "%s does not accept attribute %s" % [@classname, arg]
|
201
|
-
end
|
202
|
-
|
203
|
-
exceptwrap do
|
204
|
-
scope.setvar(arg.to_s, args[arg])
|
205
182
|
end
|
206
183
|
}
|
207
|
-
|
208
|
-
scope.setvar("title", resource.title) unless args.include? :title
|
209
|
-
scope.setvar("name", resource.name) unless args.include? :name
|
210
184
|
end
|
185
|
+
|
186
|
+
# Set each of the provided arguments as variables in the
|
187
|
+
# definition's scope.
|
188
|
+
args.each { |arg,value|
|
189
|
+
unless validattr?(arg)
|
190
|
+
parsefail "%s does not accept attribute %s" % [@classname, arg]
|
191
|
+
end
|
192
|
+
|
193
|
+
exceptwrap do
|
194
|
+
scope.setvar(arg.to_s, args[arg])
|
195
|
+
end
|
196
|
+
}
|
197
|
+
|
198
|
+
scope.setvar("title", resource.title) unless args.include? :title
|
199
|
+
scope.setvar("name", resource.name) unless args.include? :name
|
211
200
|
end
|
212
201
|
end
|