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
@@ -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 = ""
19
- @@green = ""
20
- @@yellow = ""
21
- @@slate = ""
22
- @@reset = ""
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. Basically just iterates across all
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(args)
54
- #Puppet.debug("Evaluating ast %s" % @name)
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(hash)
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
- if ac.class.settor?
39
- settors << ac
40
- else
41
- others << ac
42
- end
27
+ items << ac
43
28
  end
44
29
  else
45
- if child.class.settor?
46
- settors << child
47
- else
48
- others << child
49
- end
30
+ items << child
50
31
  end
51
32
  }
52
33
 
53
- rets = [settors, others].flatten.collect { |child|
54
- child.safeevaluate(:scope => scope)
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.evaluate(:scope => scope)
47
+ yield subval.safeevaluate(scope)
48
48
  }
49
49
  else
50
- yield @value.evaluate(:scope => scope)
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(hash)
57
- return @statements.safeevaluate(hash)
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(hash)
12
- scope = hash[:scope]
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(:scope => scope)
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(:scope => scope)
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(hash)
13
- scope = hash[:scope]
14
-
12
+ def evaluate(scope)
15
13
  if self.query
16
- str, code = self.query.safeevaluate :scope => scope
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.compile.add_collection(newcoll)
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(hash)
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 :scope => scope
25
- str2, code2 = @test2.safeevaluate :scope => scope
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
- class Puppet::Parser::AST
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
- # The class name
16
- @name = :definition
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
- attr_accessor :classname, :arguments, :code, :scope, :keyword
19
- attr_accessor :exported, :namespace, :parser, :virtual
13
+ # The class name
14
+ @name = :definition
20
15
 
21
- # These are retrieved when looking up the superclass
22
- attr_accessor :name
16
+ attr_accessor :classname, :arguments, :code, :scope, :keyword
17
+ attr_accessor :exported, :namespace, :parser, :virtual, :name
23
18
 
24
- attr_reader :parentclass
19
+ attr_reader :parentclass
25
20
 
26
- def child_of?(klass)
27
- false
28
- end
21
+ def child_of?(klass)
22
+ false
23
+ end
29
24
 
30
- def evaluate(options)
31
- origscope = options[:scope]
32
- resource = options[:resource]
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
- # Create a new scope.
35
- scope = subscope(origscope, resource)
29
+ scope.catalog.tag(*resource.tags)
36
30
 
37
- # Additionally, add a tag for whatever kind of class
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
- [resource.name, resource.title].each do |str|
44
- unless str.nil? or str =~ /[^\w]/ or str == ""
45
- scope.resource.tag(str)
46
- end
47
- end
33
+ return resource
34
+ end
48
35
 
49
- set_resource_parameters(scope, resource)
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
- if self.code
52
- return self.code.safeevaluate(:scope => scope)
53
- else
54
- return nil
55
- end
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
- def initialize(hash = {})
59
- @arguments = nil
60
- @parentclass = nil
61
- super
50
+ def initialize(hash = {})
51
+ @arguments = nil
52
+ @parentclass = nil
53
+ super
62
54
 
63
- # Convert the arguments to a hash for ease of later use.
64
- if @arguments
65
- unless @arguments.is_a? Array
66
- @arguments = [@arguments]
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
- # Deal with metaparams in the argument list.
78
- @arguments.each do |arg, defvalue|
79
- next unless Puppet::Type.metaparamclass(arg)
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
- def find_parentclass
89
- @parser.findclass(namespace, parentclass)
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
- # Set our parent class, with a little check to avoid some potential
93
- # weirdness.
94
- def parentclass=(name)
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
- @parentclass = name
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
- # Hunt down our class object.
103
- def parentobj
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
- if tmp == self
112
- parsefail "Parent classes must have dissimilar names"
113
- end
94
+ # Hunt down our class object.
95
+ def parentobj
96
+ return nil unless @parentclass
114
97
 
115
- @parentobj = tmp
116
- end
117
- @parentobj
118
- else
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
- # Create a new subscope in which to evaluate our code.
124
- def subscope(scope, resource)
125
- args = {
126
- :resource => resource,
127
- :keyword => self.keyword,
128
- :namespace => self.namespace,
129
- :source => self
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
- oldscope = scope
133
- scope = scope.newscope(args)
134
- scope.source = self
122
+ oldscope = scope
123
+ scope = scope.newscope(args)
124
+ scope.source = self
135
125
 
136
- return scope
137
- end
126
+ return scope
127
+ end
138
128
 
139
- def to_s
140
- classname
141
- end
129
+ def to_s
130
+ classname
131
+ end
142
132
 
143
- # Check whether a given argument is valid. Searches up through
144
- # any parent classes that might exist.
145
- def validattr?(param)
146
- param = param.to_s
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
- if @arguments.include?(param)
149
- # It's a valid arg for us
150
- return true
151
- elsif param == "name"
152
- return true
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
- elsif Puppet::Type.metaparam?(param)
164
- return true
165
- else
166
- # Or just return false
167
- return false
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
- private
172
-
173
- # Set any arguments passed by the resource as variables in the scope.
174
- def set_resource_parameters(scope, resource)
175
- args = symbolize_options(resource.to_hash || {})
176
-
177
- # Verify that all required arguments are either present or
178
- # have been provided with defaults.
179
- if self.arguments
180
- self.arguments.each { |arg, default|
181
- arg = symbolize(arg)
182
- unless args.include?(arg)
183
- if defined? default and ! default.nil?
184
- default = default.safeevaluate :scope => scope
185
- args[arg] = default
186
- #Puppet.debug "Got default %s for %s in %s" %
187
- # [default.inspect, arg.inspect, @name.inspect]
188
- else
189
- parsefail "Must pass %s to %s of type %s" %
190
- [arg, resource.title, @classname]
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