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
@@ -12,9 +12,8 @@ class Puppet::Parser::AST
|
|
12
12
|
|
13
13
|
# Evaluate the actual statements; this only gets called if
|
14
14
|
# our test was true matched.
|
15
|
-
def evaluate(
|
16
|
-
|
17
|
-
return @statements.safeevaluate(:scope => scope)
|
15
|
+
def evaluate(scope)
|
16
|
+
return @statements.safeevaluate(scope)
|
18
17
|
end
|
19
18
|
end
|
20
19
|
end
|
@@ -7,18 +7,11 @@ class Puppet::Parser::AST
|
|
7
7
|
|
8
8
|
@settor = true
|
9
9
|
|
10
|
-
def evaluate(
|
10
|
+
def evaluate(scope)
|
11
11
|
# We don't need to evaluate the name, because it's plaintext
|
12
|
+
args = @arguments.safeevaluate(scope)
|
12
13
|
|
13
|
-
|
14
|
-
scope = hash[:scope]
|
15
|
-
|
16
|
-
args = @arguments.safeevaluate(:scope => scope)
|
17
|
-
|
18
|
-
#exceptwrap :message => "Failed to execute %s" % @name,
|
19
|
-
# :type => Puppet::ParseError do
|
20
|
-
return scope.send("function_" + @name, args)
|
21
|
-
#end
|
14
|
+
return scope.send("function_" + @name, args)
|
22
15
|
end
|
23
16
|
|
24
17
|
def initialize(hash)
|
@@ -1,80 +1,87 @@
|
|
1
1
|
require 'puppet/parser/ast/definition'
|
2
2
|
|
3
|
-
class
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
@name = :class
|
3
|
+
# The code associated with a class. This is different from definitions
|
4
|
+
# in that each class is a singleton -- only one will exist for a given
|
5
|
+
# node.
|
6
|
+
class Puppet::Parser::AST::HostClass < Puppet::Parser::AST::Definition
|
7
|
+
@name = :class
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
# Are we a child of the passed class? Do a recursive search up our
|
10
|
+
# parentage tree to figure it out.
|
11
|
+
def child_of?(klass)
|
12
|
+
return false unless self.parentclass
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
14
|
+
if klass == self.parentobj
|
15
|
+
return true
|
16
|
+
else
|
17
|
+
return self.parentobj.child_of?(klass)
|
20
18
|
end
|
19
|
+
end
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
# what provides the singleton aspect.
|
28
|
-
if existing_scope = scope.compile.class_scope(self)
|
29
|
-
Puppet.debug "Class '%s' already evaluated; not evaluating again" % (classname == "" ? "main" : classname)
|
30
|
-
return nil
|
31
|
-
end
|
21
|
+
# Make sure our parent class has been evaluated, if we have one.
|
22
|
+
def evaluate(scope)
|
23
|
+
if parentclass and ! scope.catalog.resource(self.class.name, parentclass)
|
24
|
+
parent_resource = parentobj.evaluate(scope)
|
25
|
+
end
|
32
26
|
|
33
|
-
|
27
|
+
# Do nothing if the resource already exists; this makes sure we don't
|
28
|
+
# get multiple copies of the class resource, which helps provide the
|
29
|
+
# singleton nature of classes.
|
30
|
+
if resource = scope.catalog.resource(self.class.name, self.classname)
|
31
|
+
return resource
|
32
|
+
end
|
34
33
|
|
35
|
-
|
36
|
-
|
37
|
-
pklass.safeevaluate :scope => scope, :resource => options[:resource]
|
34
|
+
super
|
35
|
+
end
|
38
36
|
|
39
|
-
|
40
|
-
|
41
|
-
|
37
|
+
# Evaluate the code associated with this class.
|
38
|
+
def evaluate_code(resource)
|
39
|
+
scope = resource.scope
|
40
|
+
# Verify that we haven't already been evaluated. This is
|
41
|
+
# what provides the singleton aspect.
|
42
|
+
if existing_scope = scope.compiler.class_scope(self)
|
43
|
+
Puppet.debug "Class '%s' already evaluated; not evaluating again" % (classname == "" ? "main" : classname)
|
44
|
+
return nil
|
45
|
+
end
|
42
46
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
47
|
+
pnames = nil
|
48
|
+
if pklass = self.parentobj
|
49
|
+
parent_resource = resource.scope.compiler.catalog.resource(self.class.name, pklass.classname)
|
50
|
+
# This shouldn't evaluate if the class has already been evaluated.
|
51
|
+
pklass.evaluate_code(parent_resource)
|
48
52
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
53
|
+
scope = parent_scope(scope, pklass)
|
54
|
+
pnames = scope.namespaces
|
55
|
+
end
|
54
56
|
|
55
|
-
|
56
|
-
|
57
|
-
|
57
|
+
# Don't create a subscope for the top-level class, since it already
|
58
|
+
# has its own scope.
|
59
|
+
scope = subscope(scope, resource) unless resource.title == :main
|
58
60
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
return nil
|
61
|
+
# Add the parent scope namespaces to our own.
|
62
|
+
if pnames
|
63
|
+
pnames.each do |ns|
|
64
|
+
scope.add_namespace(ns)
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
67
|
-
|
68
|
-
|
69
|
-
|
68
|
+
# Set the class before we evaluate the code, so that it's set during
|
69
|
+
# the evaluation and can be inspected.
|
70
|
+
scope.compiler.class_set(self.classname, scope)
|
71
|
+
|
72
|
+
# Now evaluate our code, yo.
|
73
|
+
if self.code
|
74
|
+
return self.code.safeevaluate(scope)
|
75
|
+
else
|
76
|
+
return nil
|
70
77
|
end
|
78
|
+
end
|
71
79
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
end
|
80
|
+
def parent_scope(scope, klass)
|
81
|
+
if s = scope.compiler.class_scope(klass)
|
82
|
+
return s
|
83
|
+
else
|
84
|
+
raise Puppet::DevError, "Could not find scope for %s" % klass.classname
|
78
85
|
end
|
79
86
|
end
|
80
87
|
end
|
@@ -12,15 +12,14 @@ class Puppet::Parser::AST
|
|
12
12
|
# Short-curcuit evaluation. If we're true, evaluate our statements,
|
13
13
|
# else if there's an 'else' setting, evaluate it.
|
14
14
|
# the first option that matches.
|
15
|
-
def evaluate(
|
16
|
-
|
17
|
-
value = @test.safeevaluate(:scope => scope)
|
15
|
+
def evaluate(scope)
|
16
|
+
value = @test.safeevaluate(scope)
|
18
17
|
|
19
18
|
if Puppet::Parser::Scope.true?(value)
|
20
|
-
return @statements.safeevaluate(
|
19
|
+
return @statements.safeevaluate(scope)
|
21
20
|
else
|
22
21
|
if defined? @else
|
23
|
-
return @else.safeevaluate(
|
22
|
+
return @else.safeevaluate(scope)
|
24
23
|
else
|
25
24
|
return nil
|
26
25
|
end
|
@@ -6,7 +6,7 @@ class Puppet::Parser::AST
|
|
6
6
|
attr_accessor :value, :type
|
7
7
|
|
8
8
|
# Return our value.
|
9
|
-
def evaluate(
|
9
|
+
def evaluate(scope)
|
10
10
|
return @value
|
11
11
|
end
|
12
12
|
|
@@ -35,14 +35,14 @@ class Puppet::Parser::AST
|
|
35
35
|
class String < AST::Leaf
|
36
36
|
# Interpolate the string looking for variables, and then return
|
37
37
|
# the result.
|
38
|
-
def evaluate(
|
39
|
-
return
|
38
|
+
def evaluate(scope)
|
39
|
+
return scope.strinterp(@value, @file, @line)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
# An uninterpreted string.
|
44
44
|
class FlatString < AST::Leaf
|
45
|
-
def evaluate(
|
45
|
+
def evaluate(scope)
|
46
46
|
return @value
|
47
47
|
end
|
48
48
|
end
|
@@ -81,9 +81,9 @@ class Puppet::Parser::AST
|
|
81
81
|
class Variable < Name
|
82
82
|
# Looks up the value of the object in the scope tree (does
|
83
83
|
# not include syntactical constructs, like '$' and '{}').
|
84
|
-
def evaluate(
|
84
|
+
def evaluate(scope)
|
85
85
|
parsewrap do
|
86
|
-
return
|
86
|
+
return scope.lookupvar(@value)
|
87
87
|
end
|
88
88
|
end
|
89
89
|
end
|
@@ -1,67 +1,35 @@
|
|
1
1
|
require 'puppet/parser/ast/hostclass'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
#else
|
16
|
-
# origscope
|
17
|
-
#end
|
18
|
-
|
19
|
-
# We don't have to worry about the declarativeness of node parentage,
|
20
|
-
# because the entry point is always a single node definition.
|
21
|
-
if parent = self.parentobj
|
22
|
-
scope = parent.safeevaluate :scope => scope, :resource => options[:resource]
|
23
|
-
end
|
24
|
-
|
25
|
-
scope = scope.newscope(
|
26
|
-
:resource => options[:resource],
|
27
|
-
:keyword => @keyword,
|
28
|
-
:source => self,
|
29
|
-
:namespace => "" # nodes are always in ""
|
30
|
-
)
|
31
|
-
|
32
|
-
# Mark our node name as a class, too, but strip it of the domain
|
33
|
-
# name. Make the mark before we evaluate the code, so that it is
|
34
|
-
# marked within the code itself.
|
35
|
-
scope.compile.class_set(self.classname, scope)
|
36
|
-
|
37
|
-
# And then evaluate our code if we have any
|
38
|
-
if self.code
|
39
|
-
@code.safeevaluate(:scope => scope)
|
40
|
-
end
|
41
|
-
|
42
|
-
return scope
|
3
|
+
# The specific code associated with a host. Nodes are annoyingly unlike
|
4
|
+
# other objects. That's just the way it is, at least for now.
|
5
|
+
class Puppet::Parser::AST::Node < Puppet::Parser::AST::HostClass
|
6
|
+
@name = :node
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
@parentclass = nil
|
10
|
+
super
|
11
|
+
|
12
|
+
# Do some validation on the node name
|
13
|
+
if @name =~ /[^-\w.]/
|
14
|
+
raise Puppet::ParseError, "Invalid node name %s" % @name
|
43
15
|
end
|
16
|
+
end
|
44
17
|
|
45
|
-
|
46
|
-
|
47
|
-
|
18
|
+
def namespace
|
19
|
+
""
|
20
|
+
end
|
48
21
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
22
|
+
# Make sure node scopes are marked as such.
|
23
|
+
def subscope(*args)
|
24
|
+
scope = super
|
25
|
+
scope.nodescope = true
|
26
|
+
scope
|
27
|
+
end
|
54
28
|
|
55
|
-
|
56
|
-
def subscope(*args)
|
57
|
-
scope = super
|
58
|
-
scope.nodescope = true
|
59
|
-
end
|
29
|
+
private
|
60
30
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
@parser.findnode(parentclass)
|
65
|
-
end
|
31
|
+
# Search for the object matching our parent class.
|
32
|
+
def find_parentclass
|
33
|
+
@parser.findnode(parentclass)
|
66
34
|
end
|
67
35
|
end
|
@@ -9,15 +9,13 @@ class Resource < AST::ResourceReference
|
|
9
9
|
|
10
10
|
# Does not actually return an object; instead sets an object
|
11
11
|
# in the current scope.
|
12
|
-
def evaluate(
|
13
|
-
scope = options[:scope]
|
14
|
-
|
12
|
+
def evaluate(scope)
|
15
13
|
# Evaluate all of the specified params.
|
16
14
|
paramobjects = @params.collect { |param|
|
17
|
-
param.safeevaluate(
|
15
|
+
param.safeevaluate(scope)
|
18
16
|
}
|
19
17
|
|
20
|
-
objtitles = @title.safeevaluate(
|
18
|
+
objtitles = @title.safeevaluate(scope)
|
21
19
|
|
22
20
|
# it's easier to always use an array, even for only one name
|
23
21
|
unless objtitles.is_a?(Array)
|
@@ -50,10 +48,10 @@ class Resource < AST::ResourceReference
|
|
50
48
|
:scope => scope
|
51
49
|
)
|
52
50
|
|
53
|
-
# And then store the resource in the
|
51
|
+
# And then store the resource in the compiler.
|
54
52
|
# At some point, we need to switch all of this to return
|
55
53
|
# objects instead of storing them like this.
|
56
|
-
scope.
|
54
|
+
scope.compiler.add_resource(scope, obj)
|
57
55
|
obj
|
58
56
|
end
|
59
57
|
}.reject { |obj| obj.nil? }
|
@@ -8,13 +8,11 @@ class Puppet::Parser::AST
|
|
8
8
|
|
9
9
|
# As opposed to ResourceDef, this stores each default for the given
|
10
10
|
# object type.
|
11
|
-
def evaluate(
|
12
|
-
scope = hash[:scope]
|
13
|
-
|
11
|
+
def evaluate(scope)
|
14
12
|
# Use a resource reference to canonize the type
|
15
13
|
ref = Puppet::ResourceReference.new(@type, "whatever")
|
16
14
|
type = ref.type
|
17
|
-
params = @params.safeevaluate(
|
15
|
+
params = @params.safeevaluate(scope)
|
18
16
|
|
19
17
|
parsewrap do
|
20
18
|
scope.setdefaults(type, params)
|
@@ -17,17 +17,15 @@ class Puppet::Parser::AST
|
|
17
17
|
|
18
18
|
# Does not actually return an object; instead sets an object
|
19
19
|
# in the current scope.
|
20
|
-
def evaluate(
|
21
|
-
scope = hash[:scope]
|
22
|
-
|
20
|
+
def evaluate(scope)
|
23
21
|
# Get our object reference.
|
24
|
-
object = @object.safeevaluate(
|
22
|
+
object = @object.safeevaluate(scope)
|
25
23
|
|
26
24
|
hash = {}
|
27
25
|
|
28
26
|
# Evaluate all of the specified params.
|
29
27
|
params = @params.collect { |param|
|
30
|
-
param.safeevaluate(
|
28
|
+
param.safeevaluate(scope)
|
31
29
|
}
|
32
30
|
|
33
31
|
# Now we just create a normal resource, but we call a very different
|
@@ -44,7 +42,7 @@ class Puppet::Parser::AST
|
|
44
42
|
|
45
43
|
# Now we tell the scope that it's an override, and it behaves as
|
46
44
|
# necessary.
|
47
|
-
scope.
|
45
|
+
scope.compiler.add_override(obj)
|
48
46
|
|
49
47
|
obj
|
50
48
|
end
|
@@ -22,10 +22,8 @@ class Puppet::Parser::AST
|
|
22
22
|
|
23
23
|
# Evaluate our object, but just return a simple array of the type
|
24
24
|
# and name.
|
25
|
-
def evaluate(
|
26
|
-
|
27
|
-
|
28
|
-
title = @title.safeevaluate(:scope => scope)
|
25
|
+
def evaluate(scope)
|
26
|
+
title = @title.safeevaluate(scope)
|
29
27
|
if @type.to_s.downcase == "class"
|
30
28
|
objtype = "class"
|
31
29
|
title = qualified_class(scope, title)
|
@@ -10,12 +10,10 @@ class Puppet::Parser::AST
|
|
10
10
|
end
|
11
11
|
|
12
12
|
# Return the parameter and the value.
|
13
|
-
def evaluate(
|
14
|
-
scope = hash[:scope]
|
15
|
-
|
13
|
+
def evaluate(scope)
|
16
14
|
return Puppet::Parser::Resource::Param.new(
|
17
15
|
:name => @param,
|
18
|
-
:value => @value.safeevaluate(
|
16
|
+
:value => @value.safeevaluate(scope),
|
19
17
|
:source => scope.source, :line => self.line, :file => self.file,
|
20
18
|
:add => self.add
|
21
19
|
)
|
@@ -11,13 +11,12 @@ class Puppet::Parser::AST
|
|
11
11
|
end
|
12
12
|
|
13
13
|
# Find the value that corresponds with the test.
|
14
|
-
def evaluate(
|
15
|
-
scope = hash[:scope]
|
14
|
+
def evaluate(scope)
|
16
15
|
retvalue = nil
|
17
16
|
found = nil
|
18
17
|
|
19
18
|
# Get our parameter.
|
20
|
-
paramvalue = @param.safeevaluate(
|
19
|
+
paramvalue = @param.safeevaluate(scope)
|
21
20
|
|
22
21
|
sensitive = Puppet[:casesensitive]
|
23
22
|
|
@@ -33,13 +32,13 @@ class Puppet::Parser::AST
|
|
33
32
|
|
34
33
|
# Then look for a match in the options.
|
35
34
|
@values.each { |obj|
|
36
|
-
param = obj.param.safeevaluate(
|
35
|
+
param = obj.param.safeevaluate(scope)
|
37
36
|
if ! sensitive && param.respond_to?(:downcase)
|
38
37
|
param = param.downcase
|
39
38
|
end
|
40
39
|
if param == paramvalue
|
41
40
|
# we found a matching option
|
42
|
-
retvalue = obj.value.safeevaluate(
|
41
|
+
retvalue = obj.value.safeevaluate(scope)
|
43
42
|
found = true
|
44
43
|
break
|
45
44
|
elsif obj.param.is_a?(Default)
|
@@ -51,7 +50,7 @@ class Puppet::Parser::AST
|
|
51
50
|
# Unless we found something, look for the default.
|
52
51
|
unless found
|
53
52
|
if default
|
54
|
-
retvalue = default.value.safeevaluate(
|
53
|
+
retvalue = default.value.safeevaluate(scope)
|
55
54
|
else
|
56
55
|
self.fail Puppet::ParseError,
|
57
56
|
"No matching value for selector param '%s'" % paramvalue
|