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.

Files changed (266) hide show
  1. data/CHANGELOG +94 -0
  2. data/Rakefile +0 -4
  3. data/bin/puppet +18 -10
  4. data/bin/puppetd +1 -1
  5. data/bin/puppetdoc +14 -4
  6. data/bin/puppetmasterd +1 -1
  7. data/bin/puppetrun +3 -8
  8. data/bin/ralsh +12 -11
  9. data/conf/freebsd/puppetd +1 -1
  10. data/conf/freebsd/puppetmasterd +1 -1
  11. data/conf/gentoo/puppet/puppet.conf +29 -0
  12. data/conf/namespaceauth.conf +20 -0
  13. data/conf/redhat/puppet.spec +4 -1
  14. data/conf/solaris/smf/puppetd.xml +1 -1
  15. data/conf/solaris/smf/puppetmasterd.xml +1 -1
  16. data/conf/suse/puppet.spec +10 -8
  17. data/examples/root/etc/puppet/{puppetmasterd.conf → puppet.conf} +6 -3
  18. data/ext/logcheck/puppet +7 -0
  19. data/ext/puppet-test +28 -5
  20. data/lib/puppet.rb +2 -1
  21. data/lib/puppet/defaults.rb +12 -5
  22. data/lib/puppet/dsl.rb +43 -45
  23. data/lib/puppet/external/{gratr/rdot.rb → dot.rb} +0 -0
  24. data/lib/puppet/external/nagios.rb +50 -0
  25. data/lib/puppet/external/nagios/base.rb +421 -0
  26. data/lib/puppet/external/nagios/parser.rb +816 -0
  27. data/lib/puppet/file_serving/file_base.rb +16 -3
  28. data/lib/puppet/file_serving/metadata.rb +29 -11
  29. data/lib/puppet/indirector/terminus.rb +1 -0
  30. data/lib/puppet/metatype/closure.rb +4 -0
  31. data/lib/puppet/metatype/evaluation.rb +2 -17
  32. data/lib/puppet/metatype/metaparams.rb +1 -1
  33. data/lib/puppet/network.rb +3 -0
  34. data/lib/puppet/network/client.rb +4 -5
  35. data/lib/puppet/network/client/master.rb +10 -7
  36. data/lib/puppet/network/handler/fileserver.rb +22 -45
  37. data/lib/puppet/network/http_pool.rb +3 -0
  38. data/lib/puppet/network/http_server/mongrel.rb +7 -1
  39. data/lib/puppet/network/http_server/webrick.rb +4 -3
  40. data/lib/puppet/network/xmlrpc/client.rb +12 -1
  41. data/lib/puppet/node/catalog.rb +51 -40
  42. data/lib/puppet/parser/ast.rb +27 -49
  43. data/lib/puppet/parser/ast/astarray.rb +5 -24
  44. data/lib/puppet/parser/ast/caseopt.rb +4 -4
  45. data/lib/puppet/parser/ast/casestatement.rb +4 -5
  46. data/lib/puppet/parser/ast/collection.rb +3 -5
  47. data/lib/puppet/parser/ast/collexpr.rb +3 -5
  48. data/lib/puppet/parser/ast/definition.rb +148 -159
  49. data/lib/puppet/parser/ast/else.rb +2 -3
  50. data/lib/puppet/parser/ast/function.rb +3 -10
  51. data/lib/puppet/parser/ast/hostclass.rb +66 -59
  52. data/lib/puppet/parser/ast/ifstatement.rb +4 -5
  53. data/lib/puppet/parser/ast/leaf.rb +6 -6
  54. data/lib/puppet/parser/ast/node.rb +26 -58
  55. data/lib/puppet/parser/ast/resource.rb +5 -7
  56. data/lib/puppet/parser/ast/resource_defaults.rb +2 -4
  57. data/lib/puppet/parser/ast/resource_override.rb +4 -6
  58. data/lib/puppet/parser/ast/resource_reference.rb +2 -4
  59. data/lib/puppet/parser/ast/resourceparam.rb +2 -4
  60. data/lib/puppet/parser/ast/selector.rb +5 -6
  61. data/lib/puppet/parser/ast/tag.rb +2 -4
  62. data/lib/puppet/parser/ast/vardef.rb +3 -4
  63. data/lib/puppet/parser/collector.rb +5 -5
  64. data/lib/puppet/parser/{compile.rb → compiler.rb} +69 -107
  65. data/lib/puppet/parser/functions.rb +3 -3
  66. data/lib/puppet/parser/interpreter.rb +32 -23
  67. data/lib/puppet/parser/lexer.rb +391 -282
  68. data/lib/puppet/parser/parser.rb +5 -4
  69. data/lib/puppet/parser/parser_support.rb +3 -6
  70. data/lib/puppet/parser/resource.rb +24 -36
  71. data/lib/puppet/parser/resource/param.rb +1 -1
  72. data/lib/puppet/parser/resource/reference.rb +7 -3
  73. data/lib/puppet/parser/scope.rb +12 -7
  74. data/lib/puppet/parser/templatewrapper.rb +1 -1
  75. data/lib/puppet/pgraph.rb +9 -98
  76. data/lib/puppet/provider/interface/redhat.rb +65 -65
  77. data/lib/puppet/provider/mount/parsed.rb +1 -1
  78. data/lib/puppet/provider/naginator.rb +55 -0
  79. data/lib/puppet/provider/nameservice/directoryservice.rb +6 -7
  80. data/lib/puppet/provider/package/fink.rb +0 -2
  81. data/lib/puppet/provider/package/gem.rb +9 -5
  82. data/lib/puppet/provider/package/openbsd.rb +1 -1
  83. data/lib/puppet/provider/package/pkgdmg.rb +3 -8
  84. data/lib/puppet/provider/package/portage.rb +4 -4
  85. data/lib/puppet/provider/package/yumhelper.py +8 -6
  86. data/lib/puppet/provider/parsedfile.rb +7 -1
  87. data/lib/puppet/provider/service/debian.rb +2 -0
  88. data/lib/puppet/provider/service/gentoo.rb +4 -0
  89. data/lib/puppet/provider/service/init.rb +1 -1
  90. data/lib/puppet/provider/sshkey/parsed.rb +2 -0
  91. data/lib/puppet/provider/user/useradd.rb +1 -1
  92. data/lib/puppet/rails.rb +4 -0
  93. data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +17 -0
  94. data/lib/puppet/rails/fact_value.rb +4 -0
  95. data/lib/puppet/rails/host.rb +1 -2
  96. data/lib/puppet/rails/param_value.rb +4 -0
  97. data/lib/puppet/rails/resource_tag.rb +4 -0
  98. data/lib/puppet/rails/source_file.rb +4 -1
  99. data/lib/puppet/relationship.rb +5 -1
  100. data/lib/puppet/reports/tagmail.rb +12 -1
  101. data/lib/puppet/resource_reference.rb +1 -1
  102. data/lib/puppet/simple_graph.rb +78 -11
  103. data/lib/puppet/sslcertificates.rb +1 -1
  104. data/lib/puppet/sslcertificates/ca.rb +3 -3
  105. data/lib/puppet/transaction.rb +7 -4
  106. data/lib/puppet/transportable.rb +1 -1
  107. data/lib/puppet/type.rb +3 -10
  108. data/lib/puppet/type/cron.rb +18 -0
  109. data/lib/puppet/type/exec.rb +18 -12
  110. data/lib/puppet/type/{pfile.rb → file.rb} +66 -84
  111. data/lib/puppet/type/file/checksum.rb +271 -0
  112. data/lib/puppet/type/{pfile → file}/content.rb +10 -15
  113. data/lib/puppet/type/{pfile → file}/ensure.rb +15 -8
  114. data/lib/puppet/type/{pfile → file}/group.rb +0 -0
  115. data/lib/puppet/type/{pfile → file}/mode.rb +0 -0
  116. data/lib/puppet/type/{pfile → file}/owner.rb +0 -0
  117. data/lib/puppet/type/{pfile → file}/source.rb +34 -48
  118. data/lib/puppet/type/{pfile → file}/target.rb +0 -0
  119. data/lib/puppet/type/{pfile → file}/type.rb +0 -0
  120. data/lib/puppet/type/{pfilebucket.rb → filebucket.rb} +0 -0
  121. data/lib/puppet/type/host.rb +13 -0
  122. data/lib/puppet/type/mailalias.rb +1 -1
  123. data/lib/puppet/type/nagios_command.rb +3 -0
  124. data/lib/puppet/type/nagios_contact.rb +3 -0
  125. data/lib/puppet/type/nagios_contactgroup.rb +3 -0
  126. data/lib/puppet/type/nagios_host.rb +3 -0
  127. data/lib/puppet/type/nagios_hostextinfo.rb +3 -0
  128. data/lib/puppet/type/nagios_hostgroup.rb +3 -0
  129. data/lib/puppet/type/nagios_hostgroupescalation.rb +3 -0
  130. data/lib/puppet/type/nagios_service.rb +3 -0
  131. data/lib/puppet/type/nagios_servicedependency.rb +3 -0
  132. data/lib/puppet/type/nagios_serviceescalation.rb +3 -0
  133. data/lib/puppet/type/nagios_serviceextinfo.rb +3 -0
  134. data/lib/puppet/type/nagios_timeperiod.rb +3 -0
  135. data/lib/puppet/type/package.rb +4 -12
  136. data/lib/puppet/type/service.rb +9 -0
  137. data/lib/puppet/type/sshkey.rb +3 -3
  138. data/lib/puppet/util/autoload.rb +5 -5
  139. data/lib/puppet/util/checksums.rb +51 -13
  140. data/lib/puppet/util/constant_inflector.rb +14 -0
  141. data/lib/puppet/util/filetype.rb +1 -1
  142. data/lib/puppet/util/graph.rb +3 -9
  143. data/lib/puppet/util/nagios_maker.rb +57 -0
  144. data/lib/puppet/util/settings.rb +19 -16
  145. data/lib/puppet/util/tagging.rb +39 -0
  146. data/test/executables/puppetbin.rb +17 -0
  147. data/test/language/ast.rb +8 -58
  148. data/test/language/ast/casestatement.rb +3 -3
  149. data/test/language/ast/resource.rb +6 -7
  150. data/test/language/ast/resource_reference.rb +12 -12
  151. data/test/language/ast/selector.rb +2 -2
  152. data/test/language/ast/variable.rb +2 -2
  153. data/test/language/functions.rb +24 -24
  154. data/test/language/parser.rb +20 -8
  155. data/test/language/resource.rb +5 -42
  156. data/test/language/scope.rb +21 -37
  157. data/test/language/snippets.rb +7 -0
  158. data/test/lib/puppettest.rb +28 -14
  159. data/test/lib/puppettest/parsertesting.rb +10 -10
  160. data/test/lib/puppettest/support/resources.rb +1 -1
  161. data/test/network/client/master.rb +10 -0
  162. data/test/network/handler/fileserver.rb +51 -49
  163. data/test/network/server/webrick.rb +1 -1
  164. data/test/other/dsl.rb +3 -4
  165. data/test/other/transactions.rb +6 -4
  166. data/test/rails/ast.rb +2 -2
  167. data/test/rails/configuration.rb +1 -1
  168. data/test/rails/railsparameter.rb +2 -0
  169. data/test/rails/railsresource.rb +1 -0
  170. data/test/ral/manager/type.rb +4 -4
  171. data/test/ral/providers/cron/crontab.rb +3 -1
  172. data/test/ral/providers/package.rb +1 -1
  173. data/test/ral/{types → type}/basic.rb +2 -2
  174. data/test/ral/{types → type}/cron.rb +0 -0
  175. data/test/ral/{types → type}/exec.rb +42 -2
  176. data/test/ral/{types → type}/file.rb +34 -79
  177. data/test/ral/{types → type}/file/target.rb +0 -0
  178. data/test/ral/{types → type}/filebucket.rb +0 -0
  179. data/test/ral/{types → type}/fileignoresource.rb +0 -0
  180. data/test/ral/{types → type}/filesources.rb +8 -27
  181. data/test/ral/{types → type}/group.rb +0 -0
  182. data/test/ral/{types → type}/host.rb +16 -0
  183. data/test/ral/{types → type}/mailalias.rb +0 -0
  184. data/test/ral/{types → type}/parameter.rb +0 -0
  185. data/test/ral/{types → type}/port.rb +0 -0
  186. data/test/ral/{types → type}/property.rb +0 -0
  187. data/test/ral/{types → type}/resources.rb +0 -0
  188. data/test/ral/{types → type}/service.rb +0 -0
  189. data/test/ral/{types → type}/sshkey.rb +0 -0
  190. data/test/ral/{types → type}/tidy.rb +1 -0
  191. data/test/ral/{types → type}/user.rb +0 -0
  192. data/test/ral/{types → type}/yumrepo.rb +0 -0
  193. data/test/ral/{types → type}/zone.rb +0 -0
  194. data/test/util/autoload.rb +24 -5
  195. metadata +60 -107
  196. data/conf/gentoo/puppet/puppetca.conf +0 -29
  197. data/conf/gentoo/puppet/puppetd.conf +0 -29
  198. data/conf/gentoo/puppet/puppetmasterd.conf +0 -29
  199. data/examples/root/etc/puppet/puppetd.conf +0 -4
  200. data/lib/puppet/external/gratr.rb +0 -33
  201. data/lib/puppet/external/gratr/adjacency_graph.rb +0 -257
  202. data/lib/puppet/external/gratr/base.rb +0 -34
  203. data/lib/puppet/external/gratr/biconnected.rb +0 -116
  204. data/lib/puppet/external/gratr/chinese_postman.rb +0 -123
  205. data/lib/puppet/external/gratr/common.rb +0 -73
  206. data/lib/puppet/external/gratr/comparability.rb +0 -92
  207. data/lib/puppet/external/gratr/digraph.rb +0 -116
  208. data/lib/puppet/external/gratr/digraph_distance.rb +0 -185
  209. data/lib/puppet/external/gratr/dot.rb +0 -90
  210. data/lib/puppet/external/gratr/edge.rb +0 -145
  211. data/lib/puppet/external/gratr/graph.rb +0 -303
  212. data/lib/puppet/external/gratr/graph_api.rb +0 -83
  213. data/lib/puppet/external/gratr/import.rb +0 -44
  214. data/lib/puppet/external/gratr/labels.rb +0 -90
  215. data/lib/puppet/external/gratr/maximum_flow.rb +0 -64
  216. data/lib/puppet/external/gratr/search.rb +0 -409
  217. data/lib/puppet/external/gratr/strong_components.rb +0 -127
  218. data/lib/puppet/external/gratr/undirected_graph.rb +0 -153
  219. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +0 -62
  220. data/lib/puppet/rails/external/tagging/init.rb +0 -5
  221. data/lib/puppet/rails/external/tagging/tag.rb +0 -50
  222. data/lib/puppet/rails/external/tagging/tagging.rb +0 -12
  223. data/lib/puppet/rails/puppet_class.rb +0 -6
  224. data/lib/puppet/reference/node_source.rb +0 -9
  225. data/lib/puppet/reference/report.rb +0 -21
  226. data/lib/puppet/type/pfile/checksum.rb +0 -326
  227. data/test/language/ast/definition.rb +0 -166
  228. data/test/language/ast/hostclass.rb +0 -184
  229. data/test/language/compile.rb +0 -569
  230. data/test/language/lexer.rb +0 -276
  231. data/test/lib/mocha.rb +0 -19
  232. data/test/lib/mocha/any_instance_method.rb +0 -35
  233. data/test/lib/mocha/auto_verify.rb +0 -113
  234. data/test/lib/mocha/central.rb +0 -35
  235. data/test/lib/mocha/class_method.rb +0 -62
  236. data/test/lib/mocha/deprecation.rb +0 -22
  237. data/test/lib/mocha/exception_raiser.rb +0 -17
  238. data/test/lib/mocha/expectation.rb +0 -378
  239. data/test/lib/mocha/expectation_error.rb +0 -6
  240. data/test/lib/mocha/infinite_range.rb +0 -25
  241. data/test/lib/mocha/inspect.rb +0 -39
  242. data/test/lib/mocha/instance_method.rb +0 -8
  243. data/test/lib/mocha/is_a.rb +0 -9
  244. data/test/lib/mocha/metaclass.rb +0 -7
  245. data/test/lib/mocha/missing_expectation.rb +0 -27
  246. data/test/lib/mocha/mock.rb +0 -207
  247. data/test/lib/mocha/multiple_yields.rb +0 -20
  248. data/test/lib/mocha/no_yields.rb +0 -11
  249. data/test/lib/mocha/object.rb +0 -110
  250. data/test/lib/mocha/parameter_matchers.rb +0 -9
  251. data/test/lib/mocha/parameter_matchers/all_of.rb +0 -39
  252. data/test/lib/mocha/parameter_matchers/any_of.rb +0 -44
  253. data/test/lib/mocha/parameter_matchers/anything.rb +0 -30
  254. data/test/lib/mocha/parameter_matchers/has_entry.rb +0 -39
  255. data/test/lib/mocha/parameter_matchers/has_key.rb +0 -39
  256. data/test/lib/mocha/parameter_matchers/has_value.rb +0 -39
  257. data/test/lib/mocha/parameter_matchers/includes.rb +0 -37
  258. data/test/lib/mocha/pretty_parameters.rb +0 -28
  259. data/test/lib/mocha/return_values.rb +0 -31
  260. data/test/lib/mocha/setup_and_teardown.rb +0 -23
  261. data/test/lib/mocha/single_return_value.rb +0 -24
  262. data/test/lib/mocha/single_yield.rb +0 -18
  263. data/test/lib/mocha/standalone.rb +0 -32
  264. data/test/lib/mocha/stub.rb +0 -18
  265. data/test/lib/mocha/test_case_adapter.rb +0 -49
  266. 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(hash)
16
- scope = hash[:scope]
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(hash)
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
- # Just evaluate the arguments
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 Puppet::Parser::AST
4
- # The code associated with a class. This is different from definitions
5
- # in that each class is a singleton -- only one will exist for a given
6
- # node.
7
- class HostClass < AST::Definition
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
- # Are we a child of the passed class? Do a recursive search up our
11
- # parentage tree to figure it out.
12
- def child_of?(klass)
13
- return false unless self.parentclass
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
- if klass == self.parentobj
16
- return true
17
- else
18
- return self.parentobj.child_of?(klass)
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
- # Evaluate the code associated with this class.
23
- def evaluate(options)
24
- scope = options[:scope]
25
- raise(ArgumentError, "Classes require resources") unless options[:resource]
26
- # Verify that we haven't already been evaluated. This is
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
- scope.compile.catalog.tag(self.classname)
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
- pnames = nil
36
- if pklass = self.parentobj
37
- pklass.safeevaluate :scope => scope, :resource => options[:resource]
34
+ super
35
+ end
38
36
 
39
- scope = parent_scope(scope, pklass)
40
- pnames = scope.namespaces
41
- end
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
- # Don't create a subscope for the top-level class, since it already
44
- # has its own scope.
45
- unless options[:resource].title == :main
46
- scope = subscope(scope, options[:resource])
47
- end
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
- if pnames
50
- pnames.each do |ns|
51
- scope.add_namespace(ns)
52
- end
53
- end
53
+ scope = parent_scope(scope, pklass)
54
+ pnames = scope.namespaces
55
+ end
54
56
 
55
- # Set the class before we do anything else, so that it's set
56
- # during the evaluation and can be inspected.
57
- scope.compile.class_set(self.classname, scope)
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
- # Now evaluate our code, yo.
60
- if self.code
61
- return self.code.evaluate(:scope => scope)
62
- else
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
- def initialize(options)
68
- @parentclass = nil
69
- super
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
- def parent_scope(scope, klass)
73
- if s = scope.compile.class_scope(klass)
74
- return s
75
- else
76
- raise Puppet::DevError, "Could not find scope for %s" % klass.classname
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(hash)
16
- scope = hash[:scope]
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(:scope => scope)
19
+ return @statements.safeevaluate(scope)
21
20
  else
22
21
  if defined? @else
23
- return @else.safeevaluate(:scope => scope)
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(hash)
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(hash)
39
- return hash[:scope].strinterp(@value, @file, @line)
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(hash)
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(hash)
84
+ def evaluate(scope)
85
85
  parsewrap do
86
- return hash[:scope].lookupvar(@value)
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
- class Puppet::Parser::AST
4
- # The specific code associated with a host. Nodes are annoyingly unlike
5
- # other objects. That's just the way it is, at least for now.
6
- class Node < AST::HostClass
7
- @name = :node
8
- attr_accessor :name
9
-
10
- def evaluate(options)
11
- scope = options[:scope]
12
-
13
- #pscope = if ! Puppet[:lexical] or options[:asparent]
14
- # @scope
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
- def initialize(options)
46
- @parentclass = nil
47
- super
18
+ def namespace
19
+ ""
20
+ end
48
21
 
49
- # Do some validation on the node name
50
- if @name =~ /[^-\w.]/
51
- raise Puppet::ParseError, "Invalid node name %s" % @name
52
- end
53
- end
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
- # Make sure node scopes are marked as such.
56
- def subscope(*args)
57
- scope = super
58
- scope.nodescope = true
59
- end
29
+ private
60
30
 
61
- private
62
- # Search for the object matching our parent class.
63
- def find_parentclass
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(options)
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(:scope => scope)
15
+ param.safeevaluate(scope)
18
16
  }
19
17
 
20
- objtitles = @title.safeevaluate(:scope => scope)
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 compile.
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.compile.store_resource(scope, obj)
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(hash)
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(:scope => scope)
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(hash)
21
- scope = hash[:scope]
22
-
20
+ def evaluate(scope)
23
21
  # Get our object reference.
24
- object = @object.safeevaluate(:scope => scope)
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(:scope => scope)
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.compile.store_override(obj)
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(hash)
26
- scope = hash[:scope]
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(hash)
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(:scope => scope),
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(hash)
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(:scope => scope)
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(:scope => scope)
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(:scope => scope)
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(:scope => scope)
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