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
@@ -29,7 +29,7 @@ module Puppet
29
29
 
30
30
  class Parser < Racc::Parser
31
31
 
32
- module_eval <<'..end grammar.ra modeval..id9134b179f4', 'grammar.ra', 638
32
+ module_eval <<'..end grammar.ra modeval..idfef5d70c9f', 'grammar.ra', 638
33
33
 
34
34
  # It got too annoying having code in a file that needs to be compiled.
35
35
  require 'puppet/parser/parser_support'
@@ -39,8 +39,9 @@ require 'puppet/parser/parser_support'
39
39
  # mode: ruby
40
40
  # End:
41
41
 
42
+ # $Id$
42
43
 
43
- ..end grammar.ra modeval..id9134b179f4
44
+ ..end grammar.ra modeval..idfef5d70c9f
44
45
 
45
46
  ##### racc 1.4.5 generates ###
46
47
 
@@ -956,7 +957,7 @@ module_eval <<'.,.,', 'grammar.ra', 174
956
957
  def _reduce_38( val, _values, result )
957
958
  type = val[0]
958
959
 
959
- if type == :exported and ! Puppet[:storeconfigs]
960
+ if (type == :exported and ! Puppet[:storeconfigs]) and ! Puppet[:parseonly]
960
961
  error "You cannot collect without storeconfigs being set"
961
962
  end
962
963
 
@@ -1009,7 +1010,7 @@ module_eval <<'.,.,', 'grammar.ra', 199
1009
1010
  else
1010
1011
  args[:form] = val[1]
1011
1012
  end
1012
- if args[:form] == :exported and ! Puppet[:storeconfigs]
1013
+ if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly]
1013
1014
  error "You cannot collect exported resources without storeconfigs being set"
1014
1015
  end
1015
1016
  result = ast AST::Collection, args
@@ -47,11 +47,8 @@ class Puppet::Parser::Parser
47
47
 
48
48
  # Create an AST object, and automatically add the file and line information if
49
49
  # available.
50
- def ast(klass, hash = nil)
51
- hash ||= {}
52
- unless hash.include?(:line)
53
- hash[:line] = @lexer.line
54
- end
50
+ def ast(klass, hash = {})
51
+ hash[:line] = @lexer.line unless hash.include?(:line)
55
52
 
56
53
  unless hash.include?(:file)
57
54
  if file = @lexer.file
@@ -180,7 +177,7 @@ class Puppet::Parser::Parser
180
177
  "in file #{@lexer.file} at line #{@lexer.line}"
181
178
  )
182
179
  end
183
- files = Puppet::Module::find_manifests(pat, :cwd => dir)
180
+ files = Puppet::Module::find_manifests(pat, :cwd => dir, :environment => @environment)
184
181
  if files.size == 0
185
182
  raise Puppet::ImportError.new("No file(s) found for import " +
186
183
  "of '#{pat}'")
@@ -3,18 +3,18 @@
3
3
  class Puppet::Parser::Resource
4
4
  require 'puppet/parser/resource/param'
5
5
  require 'puppet/parser/resource/reference'
6
+ require 'puppet/util/tagging'
6
7
  include Puppet::Util
7
8
  include Puppet::Util::MethodHelper
8
9
  include Puppet::Util::Errors
9
10
  include Puppet::Util::Logging
11
+ include Puppet::Util::Tagging
10
12
 
11
13
  attr_accessor :source, :line, :file, :scope, :rails_id
12
14
  attr_accessor :virtual, :override, :translated
13
15
 
14
16
  attr_reader :exported, :evaluated, :params
15
17
 
16
- attr_writer :tags
17
-
18
18
  # Determine whether the provided parameter name is a relationship parameter.
19
19
  def self.relationship_parameter?(name)
20
20
  unless defined?(@relationship_names)
@@ -58,8 +58,7 @@ class Puppet::Parser::Resource
58
58
  def evaluate
59
59
  if klass = @ref.definedtype
60
60
  finish()
61
- scope.compile.delete_resource(self)
62
- return klass.evaluate(:scope => scope, :resource => self)
61
+ return klass.evaluate_code(self)
63
62
  elsif builtin?
64
63
  devfail "Cannot evaluate a builtin type"
65
64
  else
@@ -83,12 +82,19 @@ class Puppet::Parser::Resource
83
82
  # Do any finishing work on this object, called before evaluation or
84
83
  # before storage/translation.
85
84
  def finish
86
- add_overrides()
85
+ return if finished?
86
+ @finished = true
87
87
  add_defaults()
88
88
  add_metaparams()
89
+ add_scope_tags()
89
90
  validate()
90
91
  end
91
92
 
93
+ # Has this resource already been finished?
94
+ def finished?
95
+ defined?(@finished) and @finished
96
+ end
97
+
92
98
  def initialize(options)
93
99
  # Set all of the options we can.
94
100
  options.each do |option, value|
@@ -130,12 +136,16 @@ class Puppet::Parser::Resource
130
136
  raise ArgumentError, "Resources do not accept %s" % options.keys.collect { |k| k.to_s }.join(", ")
131
137
  end
132
138
 
133
- @tags = []
134
139
  tag(@ref.type)
135
- tag(@ref.title) if @ref.title.to_s =~ /^[-\w]+$/
140
+ tag(@ref.title) if valid_tag?(@ref.title.to_s)
141
+ end
136
142
 
137
- if scope.resource
138
- @tags += scope.resource.tags
143
+ # Is this resource modeling an isomorphic resource type?
144
+ def isomorphic?
145
+ if builtin?
146
+ return @ref.builtintype.isomorphic?
147
+ else
148
+ return true
139
149
  end
140
150
  end
141
151
 
@@ -223,23 +233,6 @@ class Puppet::Parser::Resource
223
233
  @ref.to_s
224
234
  end
225
235
 
226
- # Add a tag to our current list. These tags will be added to all
227
- # of the objects contained in this scope.
228
- def tag(*ary)
229
- ary.collect { |tag| tag.to_s.downcase }.collect { |tag| tag.split("::") }.flatten.each do |tag|
230
- unless tag =~ /^\w[-\w]*$/
231
- fail Puppet::ParseError, "Invalid tag %s" % tag.inspect
232
- end
233
- unless @tags.include?(tag)
234
- @tags << tag
235
- end
236
- end
237
- end
238
-
239
- def tags
240
- @tags.dup
241
- end
242
-
243
236
  def to_hash
244
237
  @params.inject({}) do |hash, ary|
245
238
  param = ary[1]
@@ -260,6 +253,8 @@ class Puppet::Parser::Resource
260
253
  # Handle file specially
261
254
  db_resource.file = self.file
262
255
 
256
+ db_resource.save
257
+
263
258
  @params.each { |name, param|
264
259
  param.to_rails(db_resource)
265
260
  }
@@ -361,16 +356,9 @@ class Puppet::Parser::Resource
361
356
  end
362
357
  end
363
358
 
364
- # Add any overrides for this object.
365
- def add_overrides
366
- if overrides = scope.compile.resource_overrides(self)
367
- overrides.each do |over|
368
- self.merge(over)
369
- end
370
-
371
- # Remove the overrides, so that the configuration knows there
372
- # are none left.
373
- overrides.clear
359
+ def add_scope_tags
360
+ if scope_resource = scope.resource
361
+ tag(*scope_resource.tags)
374
362
  end
375
363
  end
376
364
 
@@ -12,7 +12,7 @@ class Puppet::Parser::Resource::Param
12
12
  end
13
13
 
14
14
  def inspect
15
- "#<#{self.class} @name => #{self.name}, @value => #{self.value}, @source => #{self.source.name}>"
15
+ "#<#{self.class} @name => #{name}, @value => #{value}, @source => #{source.name}>"
16
16
  end
17
17
 
18
18
  def line_to_i
@@ -37,10 +37,14 @@ class Puppet::Parser::Resource::Reference < Puppet::ResourceReference
37
37
  if self.title == :main
38
38
  tmp = @scope.findclass("")
39
39
  else
40
- tmp = @scope.findclass(self.title)
40
+ unless tmp = @scope.findclass(self.title)
41
+ fail Puppet::ParseError, "Could not find class '%s'" % self.title
42
+ end
41
43
  end
42
44
  when "Node": # look for node definitions
43
- tmp = @scope.parser.nodes[self.title]
45
+ unless tmp = @scope.parser.nodes[self.title]
46
+ fail Puppet::ParseError, "Could not find node '%s'" % self.title
47
+ end
44
48
  else # normal definitions
45
49
  # We have to swap these variables around so the errors are right.
46
50
  tmp = @scope.finddefine(self.type)
@@ -49,7 +53,7 @@ class Puppet::Parser::Resource::Reference < Puppet::ResourceReference
49
53
  if tmp
50
54
  @definedtype = tmp
51
55
  else
52
- fail Puppet::ParseError, "Could not find resource '%s'" % self
56
+ fail Puppet::ParseError, "Could not find resource type '%s'" % self.type
53
57
  end
54
58
  end
55
59
 
@@ -17,15 +17,20 @@ class Puppet::Parser::Scope
17
17
  include Puppet::Util::Errors
18
18
  attr_accessor :parent, :level, :parser, :source, :resource
19
19
  attr_accessor :base, :keyword, :nodescope
20
- attr_accessor :top, :translated, :compile
20
+ attr_accessor :top, :translated, :compiler
21
+
22
+ # A demeterific shortcut to the catalog.
23
+ def catalog
24
+ compiler.catalog
25
+ end
21
26
 
22
27
  # Proxy accessors
23
28
  def host
24
- @compile.node.name
29
+ @compiler.node.name
25
30
  end
26
31
 
27
32
  def interpreter
28
- @compile.interpreter
33
+ @compiler.interpreter
29
34
  end
30
35
 
31
36
  # Is the value true? This allows us to control the definition of truth
@@ -72,7 +77,7 @@ class Puppet::Parser::Scope
72
77
  end
73
78
 
74
79
  def findresource(string, name = nil)
75
- compile.findresource(string, name)
80
+ compiler.findresource(string, name)
76
81
  end
77
82
 
78
83
  # Initialize our new scope. Defaults to having no parent.
@@ -147,7 +152,7 @@ class Puppet::Parser::Scope
147
152
  unless klass
148
153
  raise Puppet::ParseError, "Could not find class %s" % klassname
149
154
  end
150
- unless kscope = compile.class_scope(klass)
155
+ unless kscope = compiler.class_scope(klass)
151
156
  raise Puppet::ParseError, "Class %s has not been evaluated so its variables cannot be referenced" % klass.classname
152
157
  end
153
158
  return kscope.lookupvar(shortname, usestring)
@@ -184,7 +189,7 @@ class Puppet::Parser::Scope
184
189
 
185
190
  # Create a new scope and set these options.
186
191
  def newscope(options = {})
187
- compile.newscope(self, options)
192
+ compiler.newscope(self, options)
188
193
  end
189
194
 
190
195
  # Is this class for a node? This is used to make sure that
@@ -199,7 +204,7 @@ class Puppet::Parser::Scope
199
204
  # than doing lots of queries.
200
205
  def parent
201
206
  unless defined?(@parent)
202
- @parent = compile.parent(self)
207
+ @parent = compiler.parent(self)
203
208
  end
204
209
  @parent
205
210
  end
@@ -7,7 +7,7 @@ class Puppet::Parser::TemplateWrapper
7
7
 
8
8
  def initialize(scope, file)
9
9
  @scope = scope
10
- @file = Puppet::Module::find_template(file, @scope.compile.environment)
10
+ @file = Puppet::Module::find_template(file, @scope.compiler.environment)
11
11
 
12
12
  unless FileTest.exists?(@file)
13
13
  raise Puppet::ParseError,
@@ -1,51 +1,27 @@
1
1
  # Created by Luke A. Kanies on 2006-11-24.
2
2
  # Copyright (c) 2006. All rights reserved.
3
3
 
4
- require 'puppet/external/gratr/digraph'
5
- require 'puppet/external/gratr/import'
6
- require 'puppet/external/gratr/dot'
7
-
8
4
  require 'puppet/relationship'
9
5
  require 'puppet/simple_graph'
10
6
 
11
7
  # This class subclasses a graph class in order to handle relationships
12
8
  # among resources.
13
9
  class Puppet::PGraph < Puppet::SimpleGraph
14
- # This is the type used for splicing.
15
- attr_accessor :container_type
16
-
17
10
  include Puppet::Util
18
11
 
19
- def add_edge!(*args)
12
+ def add_edge(*args)
20
13
  @reversal = nil
21
14
  super
22
15
  end
23
16
 
24
- def add_vertex!(*args)
17
+ def add_vertex(*args)
25
18
  @reversal = nil
26
19
  super
27
20
  end
28
21
 
29
- # Make sure whichever edge has a label keeps the label
30
- def copy_label(source, target, label)
31
- # 'require' relationships will not have a label,
32
- # and all 'subscribe' relationships have the same
33
- # label, at least for now.
34
-
35
- # Labels default to {}, so we can't just test for nil.
36
- newlabel = label || {}
37
- oldlabel = edge_label(source, target) || {}
38
- if ! newlabel.empty? and oldlabel.empty?
39
- edge_label_set(source, target, label)
40
- # We should probably check to see if the labels both exist
41
- # and don't match, but we'd just throw an error which the user
42
- # couldn't do anyting about.
43
- end
44
- end
45
-
46
22
  # Which resources a given resource depends upon.
47
23
  def dependents(resource)
48
- tree_from_vertex2(resource).keys
24
+ tree_from_vertex(resource).keys
49
25
  end
50
26
 
51
27
  # Which resources depend upon the given resource.
@@ -58,19 +34,13 @@ class Puppet::PGraph < Puppet::SimpleGraph
58
34
  # Strangely, it's significantly faster to search a reversed
59
35
  # tree in the :out direction than to search a normal tree
60
36
  # in the :in direction.
61
- @reversal.tree_from_vertex2(resource, :out).keys
62
- #tree_from_vertex2(resource, :in).keys
63
- end
64
-
65
- # Override this method to use our class instead.
66
- def edge_class()
67
- Puppet::Relationship
37
+ @reversal.tree_from_vertex(resource, :out).keys
68
38
  end
69
39
 
70
40
  # Determine all of the leaf nodes below a given vertex.
71
- def leaves(vertex, type = :dfs)
72
- tree = tree_from_vertex(vertex, type)
73
- l = tree.keys.find_all { |c| adjacent(c, :direction => :out).empty? }
41
+ def leaves(vertex, direction = :out)
42
+ tree = tree_from_vertex(vertex, direction)
43
+ l = tree.keys.find_all { |c| adjacent(c, :direction => direction).empty? }
74
44
  return l
75
45
  end
76
46
 
@@ -128,83 +98,24 @@ class Puppet::PGraph < Puppet::SimpleGraph
128
98
  t = edge.target
129
99
  end
130
100
 
131
- # We don't want to add multiple copies of the
132
- # same edge, but we *do* want to make sure we
133
- # keep labels around.
134
- # XXX This will *not* work when we support multiple
135
- # types of labels, and only works now because
136
- # you can only do simple subscriptions.
137
- if edge?(s, t)
138
- copy_label(s, t, edge.label)
139
- next
140
- end
141
- add_edge!(s, t, edge.label)
101
+ add_edge(s, t, edge.label)
142
102
  end
143
103
 
144
104
  # Now get rid of the edge, so remove_vertex! works correctly.
145
105
  remove_edge!(edge)
146
- Puppet.debug "%s: %s => %s: %s" % [container,
147
- edge.source, edge.target, edge?(edge.source, edge.target)]
148
106
  end
149
107
  end
150
108
  remove_vertex!(container)
151
109
  end
152
110
  end
153
-
154
- # For some reason, unconnected vertices do not show up in
155
- # this graph.
156
- def to_jpg(path, name)
157
- gv = vertices()
158
- Dir.chdir(path) do
159
- induced_subgraph(gv).write_to_graphic_file('jpg', name)
160
- end
161
- end
162
-
163
- # Replace the default method, because we want to throw errors on back edges,
164
- # not just skip them.
165
- def topsort(start = nil, &block)
166
- result = []
167
- go = true
168
- cycles = []
169
- back = Proc.new { |e|
170
- cycles << e
171
- go = false
172
- }
173
- push = Proc.new { |v| result.unshift(v) if go}
174
- start ||= vertices[0]
175
- dfs({:exit_vertex => push, :back_edge => back, :start => start})
176
- if block_given?
177
- result.each {|v| yield(v) }
178
- end
179
-
180
- if cycles.length > 0
181
- msg = "Found cycles in the following relationships:"
182
- cycles.each { |edge| msg += " %s => %s" % [edge.source, edge.target] }
183
- raise Puppet::Error, msg
184
- end
185
- return result
186
- end
187
-
188
- def to_yaml_properties
189
- instance_variables
190
- end
191
111
 
192
112
  # A different way of walking a tree, and a much faster way than the
193
113
  # one that comes with GRATR.
194
- def tree_from_vertex2(start, direction = :out)
114
+ def tree_from_vertex(start, direction = :out)
195
115
  predecessor={}
196
116
  walk(start, direction) do |parent, child|
197
117
  predecessor[child] = parent
198
118
  end
199
119
  predecessor
200
120
  end
201
-
202
- # A support method for tree_from_vertex2. Just walk the tree and pass
203
- # the parents and children.
204
- def walk(source, direction, &block)
205
- adjacent(source, :direction => direction).each do |target|
206
- yield source, target
207
- walk(target, direction, &block)
208
- end
209
- end
210
121
  end