puppet 0.23.2 → 0.24.0

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 (629) hide show
  1. data/CHANGELOG +112 -1
  2. data/README +1 -1
  3. data/Rakefile +1 -2
  4. data/bin/filebucket +2 -3
  5. data/bin/puppet +55 -39
  6. data/bin/puppetca +20 -11
  7. data/bin/puppetd +30 -31
  8. data/bin/puppetdoc +27 -28
  9. data/bin/puppetmasterd +24 -42
  10. data/bin/puppetrun +3 -4
  11. data/bin/ralsh +5 -7
  12. data/conf/redhat/puppet.spec +4 -1
  13. data/conf/solaris/smf/svc-puppetd +1 -1
  14. data/conf/solaris/smf/svc-puppetmasterd +1 -1
  15. data/examples/code/allatonce +1 -1
  16. data/examples/code/assignments +1 -1
  17. data/examples/code/components +1 -1
  18. data/examples/code/file.bl +1 -1
  19. data/examples/code/filedefaults +1 -1
  20. data/examples/code/fileparsing +1 -1
  21. data/examples/code/filerecursion +1 -1
  22. data/examples/code/functions +1 -1
  23. data/examples/code/groups +1 -1
  24. data/examples/code/head +1 -1
  25. data/examples/code/importing +1 -1
  26. data/examples/code/modules/sample-module.pp +10 -0
  27. data/examples/code/modules/sample-module/README.txt +17 -0
  28. data/examples/code/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +36 -0
  29. data/examples/code/modules/sample-module/manifests/init.pp +12 -0
  30. data/examples/code/modules/sample-module/templates/sample.erb +5 -0
  31. data/examples/code/nodes +1 -1
  32. data/examples/code/one +1 -1
  33. data/examples/code/relationships +1 -1
  34. data/examples/code/selectors +1 -1
  35. data/examples/code/simpletests +1 -1
  36. data/examples/root/etc/init.d/sleeper +1 -1
  37. data/examples/root/etc/puppet/fileserver.conf +1 -1
  38. data/ext/ldap/puppet.schema +1 -1
  39. data/ext/module_puppet +30 -21
  40. data/ext/puppet-test +3 -3
  41. data/ext/vim/filetype.vim +1 -1
  42. data/install.rb +1 -2
  43. data/lib/puppet.rb +20 -19
  44. data/lib/puppet/checksum.rb +57 -0
  45. data/lib/puppet/config_stores/rest.rb +1 -1
  46. data/lib/puppet/daemon.rb +0 -1
  47. data/lib/puppet/{configuration.rb → defaults.rb} +56 -23
  48. data/lib/puppet/dsl.rb +22 -116
  49. data/lib/puppet/error.rb +0 -9
  50. data/lib/puppet/event.rb +0 -1
  51. data/lib/puppet/external/gratr/rdot.rb +0 -1
  52. data/lib/puppet/external/lock.rb +0 -1
  53. data/lib/puppet/feature/base.rb +3 -2
  54. data/lib/puppet/feature/rails.rb +0 -1
  55. data/lib/puppet/file_serving.rb +7 -0
  56. data/lib/puppet/file_serving/configuration.rb +129 -0
  57. data/lib/puppet/file_serving/configuration/parser.rb +124 -0
  58. data/lib/puppet/file_serving/content.rb +34 -0
  59. data/lib/puppet/file_serving/file_base.rb +63 -0
  60. data/lib/puppet/file_serving/fileset.rb +138 -0
  61. data/lib/puppet/file_serving/indirection_hooks.rb +44 -0
  62. data/lib/puppet/file_serving/metadata.rb +69 -0
  63. data/lib/puppet/file_serving/mount.rb +186 -0
  64. data/lib/puppet/file_serving/terminus_helper.rb +19 -0
  65. data/lib/puppet/indirector.rb +68 -0
  66. data/lib/puppet/indirector/catalog/compiler.rb +173 -0
  67. data/lib/puppet/indirector/catalog/yaml.rb +24 -0
  68. data/lib/puppet/indirector/checksum/file.rb +33 -0
  69. data/lib/puppet/indirector/code.rb +6 -0
  70. data/lib/puppet/indirector/direct_file_server.rb +27 -0
  71. data/lib/puppet/indirector/exec.rb +57 -0
  72. data/lib/puppet/indirector/facts/facter.rb +65 -0
  73. data/lib/puppet/indirector/facts/memory.rb +9 -0
  74. data/lib/puppet/indirector/facts/yaml.rb +7 -0
  75. data/lib/puppet/indirector/file.rb +54 -0
  76. data/lib/puppet/indirector/file_content.rb +5 -0
  77. data/lib/puppet/indirector/file_content/file.rb +11 -0
  78. data/lib/puppet/indirector/file_content/file_server.rb +11 -0
  79. data/lib/puppet/indirector/file_content/modules.rb +11 -0
  80. data/lib/puppet/indirector/file_content/rest.rb +12 -0
  81. data/lib/puppet/indirector/file_metadata.rb +5 -0
  82. data/lib/puppet/indirector/file_metadata/file.rb +26 -0
  83. data/lib/puppet/indirector/file_metadata/file_server.rb +11 -0
  84. data/lib/puppet/indirector/file_metadata/modules.rb +17 -0
  85. data/lib/puppet/indirector/file_metadata/rest.rb +12 -0
  86. data/lib/puppet/indirector/file_server.rb +56 -0
  87. data/lib/puppet/indirector/indirection.rb +237 -0
  88. data/lib/puppet/indirector/ldap.rb +90 -0
  89. data/lib/puppet/indirector/memory.rb +21 -0
  90. data/lib/puppet/indirector/module_files.rb +82 -0
  91. data/lib/puppet/indirector/node/exec.rb +52 -0
  92. data/lib/puppet/indirector/node/ldap.rb +120 -0
  93. data/lib/puppet/indirector/node/memory.rb +10 -0
  94. data/lib/puppet/indirector/node/plain.rb +19 -0
  95. data/lib/puppet/indirector/node/rest.rb +7 -0
  96. data/lib/puppet/indirector/node/yaml.rb +7 -0
  97. data/lib/puppet/indirector/plain.rb +9 -0
  98. data/lib/puppet/indirector/report/processor.rb +50 -0
  99. data/lib/puppet/indirector/rest.rb +8 -0
  100. data/lib/puppet/indirector/ssl_rsa.rb +5 -0
  101. data/lib/puppet/indirector/ssl_rsa/file.rb +33 -0
  102. data/lib/puppet/indirector/terminus.rb +178 -0
  103. data/lib/puppet/indirector/yaml.rb +57 -0
  104. data/lib/puppet/metatype/attributes.rb +3 -3
  105. data/lib/puppet/metatype/closure.rb +0 -66
  106. data/lib/puppet/metatype/container.rb +0 -9
  107. data/lib/puppet/metatype/evaluation.rb +10 -2
  108. data/lib/puppet/metatype/instances.rb +16 -30
  109. data/lib/puppet/metatype/manager.rb +1 -2
  110. data/lib/puppet/metatype/metaparams.rb +27 -21
  111. data/lib/puppet/metatype/providers.rb +3 -2
  112. data/lib/puppet/metatype/relationships.rb +1 -2
  113. data/lib/puppet/metatype/schedules.rb +0 -1
  114. data/lib/puppet/metatype/tags.rb +0 -1
  115. data/lib/puppet/module.rb +60 -32
  116. data/lib/puppet/network/authconfig.rb +0 -1
  117. data/lib/puppet/network/authorization.rb +0 -1
  118. data/lib/puppet/network/authstore.rb +0 -1
  119. data/lib/puppet/network/client.rb +13 -4
  120. data/lib/puppet/network/client/ca.rb +4 -5
  121. data/lib/puppet/network/client/dipper.rb +0 -1
  122. data/lib/puppet/network/client/file.rb +0 -1
  123. data/lib/puppet/network/client/master.rb +127 -235
  124. data/lib/puppet/network/client/proxy.rb +0 -1
  125. data/lib/puppet/network/client/report.rb +0 -1
  126. data/lib/puppet/network/client/resource.rb +0 -1
  127. data/lib/puppet/network/client/runner.rb +0 -1
  128. data/lib/puppet/network/client/status.rb +0 -1
  129. data/lib/puppet/network/client_request.rb +0 -1
  130. data/lib/puppet/network/handler.rb +5 -2
  131. data/lib/puppet/network/handler/ca.rb +1 -2
  132. data/lib/puppet/network/handler/configuration.rb +184 -0
  133. data/lib/puppet/network/handler/filebucket.rb +1 -2
  134. data/lib/puppet/network/handler/fileserver.rb +279 -107
  135. data/lib/puppet/network/handler/master.rb +57 -152
  136. data/lib/puppet/network/handler/report.rb +6 -65
  137. data/lib/puppet/network/handler/resource.rb +5 -13
  138. data/lib/puppet/network/handler/runner.rb +3 -4
  139. data/lib/puppet/network/handler/status.rb +0 -1
  140. data/lib/puppet/network/http.rb +13 -0
  141. data/lib/puppet/network/http/handler.rb +109 -0
  142. data/lib/puppet/network/http/mongrel.rb +54 -0
  143. data/lib/puppet/network/http/mongrel/rest.rb +37 -0
  144. data/lib/puppet/network/http/mongrel/xmlrpc.rb +4 -0
  145. data/lib/puppet/network/http/webrick.rb +51 -0
  146. data/lib/puppet/network/http/webrick/rest.rb +41 -0
  147. data/lib/puppet/network/http/webrick/xmlrpc.rb +4 -0
  148. data/lib/puppet/network/http_server.rb +3 -0
  149. data/lib/puppet/network/{server → http_server}/mongrel.rb +11 -5
  150. data/lib/puppet/network/{server → http_server}/webrick.rb +9 -5
  151. data/lib/puppet/network/rest_controller.rb +2 -0
  152. data/lib/puppet/network/rights.rb +0 -1
  153. data/lib/puppet/network/server.rb +63 -3
  154. data/lib/puppet/network/xmlrpc/client.rb +90 -23
  155. data/lib/puppet/network/xmlrpc/processor.rb +0 -1
  156. data/lib/puppet/network/xmlrpc/server.rb +0 -1
  157. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +0 -1
  158. data/lib/puppet/node.rb +165 -0
  159. data/lib/puppet/node/catalog.rb +480 -0
  160. data/lib/puppet/node/environment.rb +46 -0
  161. data/lib/puppet/node/facts.rb +36 -0
  162. data/lib/puppet/parameter.rb +34 -28
  163. data/lib/puppet/parser/ast.rb +0 -1
  164. data/lib/puppet/parser/ast/astarray.rb +30 -53
  165. data/lib/puppet/parser/ast/branch.rb +0 -10
  166. data/lib/puppet/parser/ast/caseopt.rb +0 -11
  167. data/lib/puppet/parser/ast/casestatement.rb +0 -12
  168. data/lib/puppet/parser/ast/collection.rb +1 -3
  169. data/lib/puppet/parser/ast/collexpr.rb +0 -2
  170. data/lib/puppet/parser/ast/{component.rb → definition.rb} +58 -72
  171. data/lib/puppet/parser/ast/else.rb +0 -10
  172. data/lib/puppet/parser/ast/function.rb +0 -2
  173. data/lib/puppet/parser/ast/hostclass.rb +21 -19
  174. data/lib/puppet/parser/ast/ifstatement.rb +0 -13
  175. data/lib/puppet/parser/ast/leaf.rb +0 -8
  176. data/lib/puppet/parser/ast/node.rb +13 -10
  177. data/lib/puppet/parser/ast/resource.rb +75 -0
  178. data/lib/puppet/parser/ast/{resourcedefaults.rb → resource_defaults.rb} +4 -20
  179. data/lib/puppet/parser/ast/{resourceoverride.rb → resource_override.rb} +3 -5
  180. data/lib/puppet/parser/ast/resource_reference.rb +66 -0
  181. data/lib/puppet/parser/ast/resourceparam.rb +0 -14
  182. data/lib/puppet/parser/ast/selector.rb +0 -10
  183. data/lib/puppet/parser/ast/tag.rb +0 -2
  184. data/lib/puppet/parser/ast/vardef.rb +0 -14
  185. data/lib/puppet/parser/collector.rb +83 -101
  186. data/lib/puppet/parser/compile.rb +509 -0
  187. data/lib/puppet/parser/functions.rb +10 -10
  188. data/lib/puppet/parser/interpreter.rb +44 -662
  189. data/lib/puppet/parser/lexer.rb +1 -3
  190. data/lib/puppet/parser/parser.rb +674 -701
  191. data/lib/puppet/parser/parser_support.rb +33 -24
  192. data/lib/puppet/parser/resource.rb +219 -162
  193. data/lib/puppet/parser/resource/param.rb +1 -2
  194. data/lib/puppet/parser/resource/reference.rb +24 -16
  195. data/lib/puppet/parser/scope.rb +48 -459
  196. data/lib/puppet/parser/templatewrapper.rb +4 -5
  197. data/lib/puppet/pgraph.rb +10 -13
  198. data/lib/puppet/property.rb +25 -41
  199. data/lib/puppet/propertychange.rb +0 -2
  200. data/lib/puppet/provider.rb +15 -11
  201. data/lib/puppet/provider/cron/crontab.rb +6 -7
  202. data/lib/puppet/provider/group/groupadd.rb +0 -1
  203. data/lib/puppet/provider/group/netinfo.rb +0 -1
  204. data/lib/puppet/provider/group/pw.rb +0 -1
  205. data/lib/puppet/provider/host/netinfo.rb +0 -1
  206. data/lib/puppet/provider/host/parsed.rb +0 -1
  207. data/lib/puppet/provider/interface/redhat.rb +90 -91
  208. data/lib/puppet/provider/interface/sunos.rb +98 -81
  209. data/lib/puppet/provider/mailalias/aliases.rb +0 -1
  210. data/lib/puppet/provider/maillist/mailman.rb +2 -3
  211. data/lib/puppet/provider/mount.rb +10 -9
  212. data/lib/puppet/provider/mount/netinfo.rb +0 -1
  213. data/lib/puppet/provider/mount/parsed.rb +0 -1
  214. data/lib/puppet/provider/nameservice.rb +0 -1
  215. data/lib/puppet/provider/nameservice/netinfo.rb +0 -1
  216. data/lib/puppet/provider/nameservice/objectadd.rb +0 -1
  217. data/lib/puppet/provider/nameservice/pw.rb +0 -1
  218. data/lib/puppet/provider/package.rb +0 -2
  219. data/lib/puppet/provider/package/appdmg.rb +0 -1
  220. data/lib/puppet/provider/package/apple.rb +0 -1
  221. data/lib/puppet/provider/package/apt.rb +0 -1
  222. data/lib/puppet/provider/package/aptitude.rb +0 -1
  223. data/lib/puppet/provider/package/aptrpm.rb +0 -1
  224. data/lib/puppet/provider/package/blastwave.rb +0 -1
  225. data/lib/puppet/provider/package/darwinport.rb +0 -1
  226. data/lib/puppet/provider/package/dpkg.rb +9 -1
  227. data/lib/puppet/provider/package/fink.rb +0 -1
  228. data/lib/puppet/provider/package/freebsd.rb +0 -1
  229. data/lib/puppet/provider/package/gem.rb +0 -1
  230. data/lib/puppet/provider/package/openbsd.rb +1 -2
  231. data/lib/puppet/provider/package/pkgdmg.rb +14 -15
  232. data/lib/puppet/provider/package/portage.rb +6 -7
  233. data/lib/puppet/provider/package/ports.rb +1 -4
  234. data/lib/puppet/provider/package/rpm.rb +31 -45
  235. data/lib/puppet/provider/package/sun.rb +0 -3
  236. data/lib/puppet/provider/package/sunfreeware.rb +0 -1
  237. data/lib/puppet/provider/package/up2date.rb +0 -1
  238. data/lib/puppet/provider/package/urpmi.rb +0 -1
  239. data/lib/puppet/provider/package/yum.rb +45 -14
  240. data/lib/puppet/provider/package/yumhelper.py +37 -0
  241. data/lib/puppet/provider/parsedfile.rb +2 -3
  242. data/lib/puppet/provider/port/parsed.rb +0 -1
  243. data/lib/puppet/provider/service/base.rb +4 -1
  244. data/lib/puppet/provider/service/debian.rb +5 -2
  245. data/lib/puppet/provider/service/freebsd.rb +51 -0
  246. data/lib/puppet/provider/service/init.rb +16 -40
  247. data/lib/puppet/provider/service/redhat.rb +1 -6
  248. data/lib/puppet/provider/service/smf.rb +0 -1
  249. data/lib/puppet/provider/sshkey/parsed.rb +0 -1
  250. data/lib/puppet/provider/user/netinfo.rb +0 -1
  251. data/lib/puppet/provider/user/pw.rb +0 -1
  252. data/lib/puppet/provider/user/useradd.rb +0 -1
  253. data/lib/puppet/provider/zone/solaris.rb +0 -1
  254. data/lib/puppet/rails.rb +35 -30
  255. data/lib/puppet/rails/database/schema.rb +0 -1
  256. data/lib/puppet/rails/host.rb +6 -15
  257. data/lib/puppet/rails/param_name.rb +1 -2
  258. data/lib/puppet/rails/param_value.rb +0 -1
  259. data/lib/puppet/rails/puppet_class.rb +0 -1
  260. data/lib/puppet/rails/resource.rb +3 -5
  261. data/lib/puppet/reference/configuration.rb +12 -6
  262. data/lib/puppet/reference/indirection.rb +34 -0
  263. data/lib/puppet/reference/node_source.rb +9 -0
  264. data/lib/puppet/relationship.rb +10 -8
  265. data/lib/puppet/reports.rb +51 -0
  266. data/lib/puppet/reports/log.rb +2 -3
  267. data/lib/puppet/reports/rrdgraph.rb +2 -5
  268. data/lib/puppet/reports/store.rb +6 -7
  269. data/lib/puppet/reports/tagmail.rb +2 -3
  270. data/lib/puppet/resource_reference.rb +79 -0
  271. data/lib/puppet/simple_graph.rb +251 -0
  272. data/lib/puppet/sslcertificates.rb +19 -15
  273. data/lib/puppet/sslcertificates/ca.rb +56 -15
  274. data/lib/puppet/sslcertificates/certificate.rb +0 -1
  275. data/lib/puppet/sslcertificates/inventory.rb +2 -6
  276. data/lib/puppet/sslcertificates/monkey_patch.rb +6 -0
  277. data/lib/puppet/sslcertificates/support.rb +4 -5
  278. data/lib/puppet/transaction.rb +93 -96
  279. data/lib/puppet/transaction/report.rb +5 -1
  280. data/lib/puppet/transportable.rb +79 -125
  281. data/lib/puppet/type.rb +44 -10
  282. data/lib/puppet/type/component.rb +25 -110
  283. data/lib/puppet/type/cron.rb +1 -2
  284. data/lib/puppet/type/exec.rb +19 -13
  285. data/lib/puppet/type/group.rb +0 -1
  286. data/lib/puppet/type/host.rb +0 -1
  287. data/lib/puppet/type/interface.rb +6 -3
  288. data/lib/puppet/type/k5login.rb +87 -0
  289. data/lib/puppet/type/mailalias.rb +0 -1
  290. data/lib/puppet/type/maillist.rb +0 -1
  291. data/lib/puppet/type/mount.rb +7 -13
  292. data/lib/puppet/type/notify.rb +0 -1
  293. data/lib/puppet/type/package.rb +7 -63
  294. data/lib/puppet/type/pfile.rb +25 -32
  295. data/lib/puppet/type/pfile/checksum.rb +0 -1
  296. data/lib/puppet/type/pfile/content.rb +18 -3
  297. data/lib/puppet/type/pfile/ensure.rb +5 -6
  298. data/lib/puppet/type/pfile/group.rb +4 -1
  299. data/lib/puppet/type/pfile/mode.rb +0 -1
  300. data/lib/puppet/type/pfile/owner.rb +6 -9
  301. data/lib/puppet/type/pfile/source.rb +28 -11
  302. data/lib/puppet/type/pfile/target.rb +2 -1
  303. data/lib/puppet/type/pfile/type.rb +0 -1
  304. data/lib/puppet/type/pfilebucket.rb +0 -1
  305. data/lib/puppet/type/port.rb +0 -1
  306. data/lib/puppet/type/resources.rb +0 -1
  307. data/lib/puppet/type/schedule.rb +17 -15
  308. data/lib/puppet/type/service.rb +23 -159
  309. data/lib/puppet/type/sshkey.rb +0 -1
  310. data/lib/puppet/type/tidy.rb +15 -7
  311. data/lib/puppet/type/user.rb +0 -1
  312. data/lib/puppet/type/zone.rb +0 -1
  313. data/lib/puppet/util.rb +1 -2
  314. data/lib/puppet/util/autoload.rb +21 -23
  315. data/lib/puppet/util/checksums.rb +37 -0
  316. data/lib/puppet/util/classgen.rb +0 -1
  317. data/lib/puppet/util/diff.rb +71 -0
  318. data/lib/puppet/util/docs.rb +8 -2
  319. data/lib/puppet/util/errors.rb +0 -1
  320. data/lib/puppet/util/execution.rb +0 -1
  321. data/lib/puppet/util/fact_store.rb +0 -1
  322. data/lib/puppet/util/feature.rb +31 -22
  323. data/lib/puppet/util/fileparsing.rb +3 -2
  324. data/lib/puppet/util/filetype.rb +30 -12
  325. data/lib/puppet/util/graph.rb +0 -1
  326. data/lib/puppet/util/inifile.rb +0 -1
  327. data/lib/puppet/util/instance_loader.rb +11 -4
  328. data/lib/puppet/util/loadedfile.rb +0 -1
  329. data/lib/puppet/util/log.rb +0 -1
  330. data/lib/puppet/util/log_paths.rb +0 -1
  331. data/lib/puppet/util/logging.rb +0 -1
  332. data/lib/puppet/util/metaid.rb +0 -1
  333. data/lib/puppet/util/methodhelper.rb +0 -2
  334. data/lib/puppet/util/metric.rb +1 -2
  335. data/lib/puppet/util/plist.rb +0 -1
  336. data/lib/puppet/util/plist/generator.rb +0 -1
  337. data/lib/puppet/util/plist/parser.rb +0 -1
  338. data/lib/puppet/util/posix.rb +7 -1
  339. data/lib/puppet/util/provider_features.rb +11 -12
  340. data/lib/puppet/util/rails/collection_merger.rb +0 -1
  341. data/lib/puppet/util/reference.rb +2 -3
  342. data/lib/puppet/util/{config.rb → settings.rb} +424 -300
  343. data/lib/puppet/util/storage.rb +1 -3
  344. data/lib/puppet/util/subclass_loader.rb +0 -1
  345. data/lib/puppet/util/suidmanager.rb +25 -42
  346. data/lib/puppet/util/uri_helper.rb +22 -0
  347. data/lib/puppet/util/variables.rb +0 -1
  348. data/lib/puppet/util/warnings.rb +0 -1
  349. data/test/Rakefile +1 -1
  350. data/test/certmgr/ca.rb +8 -2
  351. data/test/certmgr/certmgr.rb +14 -6
  352. data/test/certmgr/inventory.rb +18 -30
  353. data/test/certmgr/support.rb +3 -2
  354. data/test/executables/filebucket.rb +1 -2
  355. data/test/executables/puppetbin.rb +1 -2
  356. data/test/executables/puppetca.rb +7 -2
  357. data/test/executables/puppetd.rb +23 -29
  358. data/test/executables/puppetmasterd.rb +1 -2
  359. data/test/executables/puppetmodule.rb +1 -2
  360. data/test/language/ast.rb +24 -29
  361. data/test/language/ast/casestatement.rb +1 -2
  362. data/test/language/ast/definition.rb +166 -0
  363. data/test/language/ast/hostclass.rb +50 -29
  364. data/test/language/ast/resource.rb +59 -0
  365. data/test/language/ast/{resourceref.rb → resource_reference.rb} +30 -20
  366. data/test/language/ast/selector.rb +1 -2
  367. data/test/language/ast/variable.rb +1 -2
  368. data/test/language/compile.rb +569 -0
  369. data/test/language/functions.rb +57 -76
  370. data/test/language/lexer.rb +20 -3
  371. data/test/language/parser.rb +45 -33
  372. data/test/language/resource.rb +275 -308
  373. data/test/language/scope.rb +135 -410
  374. data/test/language/snippets.rb +19 -41
  375. data/test/language/transportable.rb +8 -29
  376. data/test/lib/mocha/auto_verify.rb +6 -6
  377. data/test/lib/mocha/deprecation.rb +22 -0
  378. data/test/lib/mocha/exception_raiser.rb +17 -0
  379. data/test/lib/mocha/expectation.rb +167 -84
  380. data/test/lib/mocha/infinite_range.rb +4 -6
  381. data/test/lib/mocha/inspect.rb +3 -1
  382. data/test/lib/mocha/is_a.rb +9 -0
  383. data/test/lib/mocha/missing_expectation.rb +27 -0
  384. data/test/lib/mocha/mock.rb +192 -5
  385. data/test/lib/mocha/multiple_yields.rb +20 -0
  386. data/test/lib/mocha/no_yields.rb +11 -0
  387. data/test/lib/mocha/object.rb +11 -1
  388. data/test/lib/mocha/parameter_matchers.rb +9 -0
  389. data/test/lib/mocha/parameter_matchers/all_of.rb +39 -0
  390. data/test/lib/mocha/parameter_matchers/any_of.rb +44 -0
  391. data/test/lib/mocha/parameter_matchers/anything.rb +30 -0
  392. data/test/lib/mocha/parameter_matchers/has_entry.rb +39 -0
  393. data/test/lib/mocha/parameter_matchers/has_key.rb +39 -0
  394. data/test/lib/mocha/parameter_matchers/has_value.rb +39 -0
  395. data/test/lib/mocha/parameter_matchers/includes.rb +37 -0
  396. data/test/lib/mocha/return_values.rb +31 -0
  397. data/test/lib/mocha/single_return_value.rb +24 -0
  398. data/test/lib/mocha/single_yield.rb +18 -0
  399. data/test/lib/mocha/standalone.rb +2 -0
  400. data/test/lib/mocha/stub.rb +18 -0
  401. data/test/lib/mocha/test_case_adapter.rb +3 -3
  402. data/test/lib/mocha/yield_parameters.rb +31 -0
  403. data/test/lib/puppettest.rb +38 -20
  404. data/test/lib/puppettest/certificates.rb +0 -1
  405. data/test/lib/puppettest/exetest.rb +0 -1
  406. data/test/lib/puppettest/fakes.rb +0 -1
  407. data/test/lib/puppettest/fileparsing.rb +8 -15
  408. data/test/lib/puppettest/filetesting.rb +0 -1
  409. data/test/lib/puppettest/parsertesting.rb +37 -23
  410. data/test/lib/puppettest/railstesting.rb +3 -6
  411. data/test/lib/puppettest/reporttesting.rb +0 -1
  412. data/test/lib/puppettest/resourcetesting.rb +6 -34
  413. data/test/lib/puppettest/runnable_test.rb +30 -0
  414. data/test/lib/puppettest/servertest.rb +2 -3
  415. data/test/lib/puppettest/support/assertions.rb +13 -41
  416. data/test/lib/puppettest/support/collection.rb +0 -1
  417. data/test/lib/puppettest/support/helpers.rb +0 -1
  418. data/test/lib/puppettest/support/resources.rb +17 -17
  419. data/test/lib/puppettest/support/utils.rb +45 -27
  420. data/test/lib/puppettest/testcase.rb +2 -21
  421. data/test/lib/rake/puppet_test_loader.rb +0 -1
  422. data/test/lib/rake/puppet_testtask.rb +0 -1
  423. data/test/network/authconfig.rb +1 -2
  424. data/test/network/authorization.rb +1 -2
  425. data/test/network/authstore.rb +1 -2
  426. data/test/network/client/ca.rb +12 -7
  427. data/test/network/client/client.rb +17 -22
  428. data/test/network/client/dipper.rb +1 -2
  429. data/test/network/client/master.rb +70 -184
  430. data/test/network/client/resource.rb +9 -2
  431. data/test/network/client_request.rb +1 -2
  432. data/test/network/daemon.rb +1 -2
  433. data/test/network/handler/bucket.rb +2 -31
  434. data/test/network/handler/ca.rb +9 -3
  435. data/test/network/handler/configuration.rb +160 -0
  436. data/test/network/handler/fileserver.rb +24 -5
  437. data/test/network/handler/handler.rb +1 -2
  438. data/test/network/handler/master.rb +38 -243
  439. data/test/network/handler/report.rb +2 -104
  440. data/test/network/handler/resource.rb +5 -3
  441. data/test/network/handler/runner.rb +22 -60
  442. data/test/network/rights.rb +1 -2
  443. data/test/network/server/mongrel_test.rb +2 -3
  444. data/test/network/server/webrick.rb +17 -11
  445. data/test/network/xmlrpc/client.rb +27 -12
  446. data/test/network/xmlrpc/processor.rb +3 -4
  447. data/test/network/xmlrpc/server.rb +1 -2
  448. data/test/network/xmlrpc/webrick_servlet.rb +8 -2
  449. data/test/other/dsl.rb +2 -4
  450. data/test/other/events.rb +14 -56
  451. data/test/other/overrides.rb +3 -6
  452. data/test/other/propertychange.rb +1 -2
  453. data/test/other/provider.rb +1 -2
  454. data/test/other/puppet.rb +1 -2
  455. data/test/other/relationships.rb +15 -17
  456. data/test/other/report.rb +14 -20
  457. data/test/other/transactions.rb +109 -192
  458. data/test/puppet/conffiles.rb +3 -5
  459. data/test/puppet/defaults.rb +1 -28
  460. data/test/puppet/errortest.rb +1 -2
  461. data/test/puppet/tc_suidmanager.rb +77 -63
  462. data/test/rails/ast.rb +4 -4
  463. data/test/rails/configuration.rb +71 -0
  464. data/test/rails/host.rb +19 -30
  465. data/test/rails/rails.rb +1 -2
  466. data/test/rails/railsparameter.rb +3 -4
  467. data/test/rails/railsresource.rb +6 -5
  468. data/test/ral/manager/attributes.rb +1 -2
  469. data/test/ral/manager/instances.rb +3 -3
  470. data/test/ral/manager/manager.rb +1 -2
  471. data/test/ral/manager/provider.rb +1 -2
  472. data/test/ral/manager/type.rb +89 -93
  473. data/test/ral/providers/cron/crontab.rb +9 -11
  474. data/test/ral/providers/group.rb +1 -2
  475. data/test/ral/providers/host/netinfo.rb +1 -2
  476. data/test/ral/providers/host/parsed.rb +1 -2
  477. data/test/ral/providers/mailalias/aliases.rb +1 -2
  478. data/test/ral/providers/mount/netinfo.rb +1 -2
  479. data/test/ral/providers/nameservice.rb +1 -2
  480. data/test/ral/providers/package.rb +5 -4
  481. data/test/ral/providers/package/apt.rb +0 -1
  482. data/test/ral/providers/package/aptrpm.rb +0 -1
  483. data/test/ral/providers/parsedfile.rb +1 -2
  484. data/test/ral/providers/port/parsed.rb +1 -2
  485. data/test/ral/providers/provider.rb +10 -5
  486. data/test/ral/providers/service/base.rb +1 -2
  487. data/test/ral/providers/service/debian.rb +58 -0
  488. data/test/ral/providers/sshkey/parsed.rb +1 -2
  489. data/test/ral/providers/user.rb +3 -2
  490. data/test/ral/providers/user/useradd.rb +0 -1
  491. data/test/ral/types/basic.rb +4 -9
  492. data/test/ral/types/cron.rb +6 -12
  493. data/test/ral/types/exec.rb +6 -7
  494. data/test/ral/types/file.rb +35 -14
  495. data/test/ral/types/file/target.rb +6 -5
  496. data/test/ral/types/filebucket.rb +3 -2
  497. data/test/ral/types/fileignoresource.rb +10 -42
  498. data/test/ral/types/filesources.rb +21 -60
  499. data/test/ral/types/group.rb +3 -3
  500. data/test/ral/types/host.rb +6 -3
  501. data/test/ral/types/mailalias.rb +1 -2
  502. data/test/ral/types/parameter.rb +5 -3
  503. data/test/ral/types/port.rb +1 -2
  504. data/test/ral/types/property.rb +3 -3
  505. data/test/ral/types/resources.rb +1 -2
  506. data/test/ral/types/service.rb +5 -3
  507. data/test/ral/types/sshkey.rb +5 -3
  508. data/test/ral/types/tidy.rb +63 -3
  509. data/test/ral/types/user.rb +10 -11
  510. data/test/ral/types/yumrepo.rb +1 -1
  511. data/test/ral/types/zone.rb +1 -2
  512. data/test/util/autoload.rb +23 -27
  513. data/test/util/classgen.rb +1 -2
  514. data/test/util/execution.rb +1 -2
  515. data/test/util/features.rb +1 -3
  516. data/test/util/fileparsing.rb +11 -3
  517. data/test/util/filetype.rb +1 -2
  518. data/test/util/inifile.rb +1 -1
  519. data/test/util/instance_loader.rb +5 -6
  520. data/test/util/loadedfile.rb +1 -2
  521. data/test/util/log.rb +1 -2
  522. data/test/util/metrics.rb +1 -2
  523. data/test/util/package.rb +1 -2
  524. data/test/util/posixtest.rb +1 -2
  525. data/test/util/{config.rb → settings.rb} +123 -265
  526. data/test/util/storage.rb +1 -2
  527. data/test/util/subclass_loader.rb +1 -2
  528. data/test/util/utiltest.rb +1 -111
  529. metadata +130 -112
  530. data/ext/tools/passwd2puppet +0 -45
  531. data/lib/puppet/fact_stores/yaml.rb +0 -42
  532. data/lib/puppet/network/handler/facts.rb +0 -70
  533. data/lib/puppet/parser/ast/resourcedef.rb +0 -222
  534. data/lib/puppet/parser/ast/resourceref.rb +0 -58
  535. data/test/language/ast/component.rb +0 -142
  536. data/test/language/collector.rb +0 -179
  537. data/test/language/interpreter.rb +0 -804
  538. data/test/language/node.rb +0 -126
  539. data/test/lib/mocha/mock_methods.rb +0 -122
  540. data/test/lib/puppettest/graph.rb +0 -41
  541. data/test/lib/spec.rb +0 -8
  542. data/test/lib/spec/callback.rb +0 -11
  543. data/test/lib/spec/callback/callback_container.rb +0 -60
  544. data/test/lib/spec/callback/extensions/module.rb +0 -24
  545. data/test/lib/spec/callback/extensions/object.rb +0 -37
  546. data/test/lib/spec/deprecated.rb +0 -3
  547. data/test/lib/spec/expectations.rb +0 -59
  548. data/test/lib/spec/expectations/differs/default.rb +0 -62
  549. data/test/lib/spec/expectations/errors.rb +0 -6
  550. data/test/lib/spec/expectations/extensions.rb +0 -3
  551. data/test/lib/spec/expectations/extensions/object.rb +0 -109
  552. data/test/lib/spec/expectations/extensions/proc.rb +0 -57
  553. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
  554. data/test/lib/spec/expectations/handler.rb +0 -47
  555. data/test/lib/spec/expectations/should.rb +0 -5
  556. data/test/lib/spec/expectations/should/base.rb +0 -64
  557. data/test/lib/spec/expectations/should/change.rb +0 -69
  558. data/test/lib/spec/expectations/should/have.rb +0 -128
  559. data/test/lib/spec/expectations/should/not.rb +0 -74
  560. data/test/lib/spec/expectations/should/should.rb +0 -81
  561. data/test/lib/spec/expectations/sugar.rb +0 -47
  562. data/test/lib/spec/matchers.rb +0 -160
  563. data/test/lib/spec/matchers/be.rb +0 -161
  564. data/test/lib/spec/matchers/be_close.rb +0 -37
  565. data/test/lib/spec/matchers/change.rb +0 -120
  566. data/test/lib/spec/matchers/eql.rb +0 -43
  567. data/test/lib/spec/matchers/equal.rb +0 -43
  568. data/test/lib/spec/matchers/has.rb +0 -44
  569. data/test/lib/spec/matchers/have.rb +0 -140
  570. data/test/lib/spec/matchers/include.rb +0 -50
  571. data/test/lib/spec/matchers/match.rb +0 -41
  572. data/test/lib/spec/matchers/raise_error.rb +0 -100
  573. data/test/lib/spec/matchers/respond_to.rb +0 -35
  574. data/test/lib/spec/matchers/satisfy.rb +0 -47
  575. data/test/lib/spec/matchers/throw_symbol.rb +0 -75
  576. data/test/lib/spec/mocks.rb +0 -232
  577. data/test/lib/spec/mocks/argument_expectation.rb +0 -132
  578. data/test/lib/spec/mocks/error_generator.rb +0 -85
  579. data/test/lib/spec/mocks/errors.rb +0 -10
  580. data/test/lib/spec/mocks/extensions/object.rb +0 -3
  581. data/test/lib/spec/mocks/message_expectation.rb +0 -231
  582. data/test/lib/spec/mocks/methods.rb +0 -40
  583. data/test/lib/spec/mocks/mock.rb +0 -26
  584. data/test/lib/spec/mocks/mock_handler.rb +0 -166
  585. data/test/lib/spec/mocks/order_group.rb +0 -29
  586. data/test/lib/spec/rake/spectask.rb +0 -173
  587. data/test/lib/spec/rake/verify_rcov.rb +0 -47
  588. data/test/lib/spec/runner.rb +0 -132
  589. data/test/lib/spec/runner/backtrace_tweaker.rb +0 -55
  590. data/test/lib/spec/runner/command_line.rb +0 -34
  591. data/test/lib/spec/runner/context.rb +0 -154
  592. data/test/lib/spec/runner/context_eval.rb +0 -142
  593. data/test/lib/spec/runner/context_runner.rb +0 -55
  594. data/test/lib/spec/runner/drb_command_line.rb +0 -21
  595. data/test/lib/spec/runner/execution_context.rb +0 -17
  596. data/test/lib/spec/runner/extensions/kernel.rb +0 -17
  597. data/test/lib/spec/runner/extensions/object.rb +0 -32
  598. data/test/lib/spec/runner/formatter.rb +0 -5
  599. data/test/lib/spec/runner/formatter/base_text_formatter.rb +0 -118
  600. data/test/lib/spec/runner/formatter/html_formatter.rb +0 -219
  601. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +0 -27
  602. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +0 -22
  603. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +0 -23
  604. data/test/lib/spec/runner/heckle_runner.rb +0 -71
  605. data/test/lib/spec/runner/heckle_runner_win.rb +0 -10
  606. data/test/lib/spec/runner/option_parser.rb +0 -224
  607. data/test/lib/spec/runner/reporter.rb +0 -105
  608. data/test/lib/spec/runner/spec_matcher.rb +0 -25
  609. data/test/lib/spec/runner/spec_parser.rb +0 -41
  610. data/test/lib/spec/runner/spec_should_raise_handler.rb +0 -74
  611. data/test/lib/spec/runner/specification.rb +0 -114
  612. data/test/lib/spec/translator.rb +0 -87
  613. data/test/lib/spec/version.rb +0 -30
  614. data/test/network/handler/facts.rb +0 -112
  615. data/test/other/pgraph.rb +0 -290
  616. data/test/other/relationship.rb +0 -74
  617. data/test/puppet/modules.rb +0 -59
  618. data/test/rails/collection.rb +0 -247
  619. data/test/rails/interpreter.rb +0 -91
  620. data/test/ral/providers/mount/parsed.rb +0 -251
  621. data/test/ral/providers/service.rb +0 -235
  622. data/test/ral/types/component.rb +0 -113
  623. data/test/ral/types/interface.rb +0 -40
  624. data/test/ral/types/mount.rb +0 -362
  625. data/test/ral/types/package.rb +0 -154
  626. data/test/ral/types/schedule.rb +0 -357
  627. data/test/tagging/tagging.rb +0 -170
  628. data/test/util/fact_store.rb +0 -67
  629. data/test/util/graph.rb +0 -108
@@ -111,7 +111,7 @@ module Manager
111
111
  def type(name)
112
112
  @types ||= {}
113
113
 
114
- name = symbolize(name)
114
+ name = name.to_s.downcase.to_sym
115
115
 
116
116
  if t = @types[name]
117
117
  return t
@@ -139,4 +139,3 @@ module Manager
139
139
  end
140
140
  end
141
141
 
142
- # $Id: manager.rb 2680 2007-07-12 04:27:04Z luke $
@@ -94,7 +94,7 @@ class Puppet::Type
94
94
 
95
95
  # We've got four relationship metaparameters, so this method is used
96
96
  # to reduce code duplication between them.
97
- def store_relationship(param, values)
97
+ def munge_relationship(param, values)
98
98
  # We need to support values passed in as an array or as a
99
99
  # resource reference.
100
100
  result = []
@@ -194,20 +194,24 @@ class Puppet::Type
194
194
  unless aliases.is_a?(Array)
195
195
  aliases = [aliases]
196
196
  end
197
- @resource.info "Adding aliases %s" % aliases.collect { |a|
198
- a.inspect
199
- }.join(", ")
197
+
198
+ raise(ArgumentError, "Cannot add aliases without a catalog") unless @resource.catalog
199
+
200
+ @resource.info "Adding aliases %s" % aliases.collect { |a| a.inspect }.join(", ")
201
+
200
202
  aliases.each do |other|
201
- if obj = @resource.class[other]
202
- unless obj == @resource
203
- self.fail(
204
- "%s can not create alias %s: object already exists" %
205
- [@resource.title, other]
206
- )
203
+ if obj = @resource.catalog.resource(@resource.class.name, other)
204
+ unless obj.object_id == @resource.object_id
205
+ self.fail("%s can not create alias %s: object already exists" % [@resource.title, other])
207
206
  end
208
207
  next
209
208
  end
209
+
210
+ # LAK:FIXME Old-school, add the alias to the class.
210
211
  @resource.class.alias(other, @resource)
212
+
213
+ # Newschool, add it to the catalog.
214
+ @resource.catalog.alias(@resource, other)
211
215
  end
212
216
  end
213
217
  end
@@ -247,7 +251,16 @@ class Puppet::Type
247
251
  end
248
252
 
249
253
  def munge(rels)
250
- @resource.store_relationship(self.class.name, rels)
254
+ @resource.munge_relationship(self.class.name, rels)
255
+ end
256
+
257
+ def validate_relationship
258
+ @value.each do |value|
259
+ unless @resource.catalog.resource(*value)
260
+ description = self.class.direction == :in ? "dependency" : "dependent"
261
+ raise Puppet::Error, "Could not find #{description} %s[%s]" % [value[0].to_s.capitalize, value[1]]
262
+ end
263
+ end
251
264
  end
252
265
 
253
266
  # Create edges from each of our relationships. :in
@@ -263,18 +276,12 @@ class Puppet::Type
263
276
  # we just have a name and a type, and we need to convert it
264
277
  # to an object...
265
278
  tname, name = value
266
- object = nil
267
- if type = Puppet::Type.type(tname)
268
- object = type[name]
269
- else # try to treat it as a component
270
- object = Puppet::Type::Component["#{tname}[#{name}]"]
271
- end
279
+ reference = Puppet::ResourceReference.new(tname, name)
272
280
 
273
281
  # Either of the two retrieval attempts could have returned
274
282
  # nil.
275
- unless object
276
- self.fail "Could not retrieve dependency '%s[%s]'" %
277
- [tname.to_s.capitalize, name]
283
+ unless object = reference.resolve
284
+ self.fail "Could not retrieve dependency '%s' of %s" % [reference, @resource.ref]
278
285
  end
279
286
 
280
287
  # Are we requiring them, or vice versa? See the method docs
@@ -414,4 +421,3 @@ class Puppet::Type
414
421
  end
415
422
  end # Puppet::Type
416
423
 
417
- # $Id: metaparams.rb 2684 2007-07-12 16:39:47Z luke $
@@ -230,6 +230,9 @@ class Puppet::Type
230
230
 
231
231
  # Return an array of all of the suitable providers.
232
232
  def self.suitableprovider
233
+ if @providers.empty?
234
+ providerloader.loadall
235
+ end
233
236
  @providers.find_all { |name, provider|
234
237
  provider.suitable?
235
238
  }.collect { |name, provider|
@@ -249,5 +252,3 @@ class Puppet::Type
249
252
  end
250
253
  end
251
254
  end
252
-
253
- # $Id: providers.rb 2714 2007-07-19 18:12:20Z luke $
@@ -40,7 +40,7 @@ class Puppet::Type
40
40
  end
41
41
  end
42
42
 
43
- reqs << Puppet::Relationship[dep, self]
43
+ reqs << Puppet::Relationship.new(dep, self)
44
44
  }
45
45
  }
46
46
 
@@ -113,4 +113,3 @@ class Puppet::Type
113
113
  end
114
114
  end
115
115
 
116
- # $Id: relationships.rb 2169 2007-02-07 06:47:10Z luke $
@@ -31,4 +31,3 @@ class Puppet::Type
31
31
  end
32
32
  end
33
33
 
34
- # $Id: schedules.rb 2665 2007-07-09 21:32:33Z luke $
@@ -36,4 +36,3 @@ class Puppet::Type
36
36
  end
37
37
  end
38
38
 
39
- # $Id: tags.rb 1762 2006-10-10 20:59:10Z luke $
@@ -4,14 +4,15 @@ class Puppet::Module
4
4
  TEMPLATES = "templates"
5
5
  FILES = "files"
6
6
  MANIFESTS = "manifests"
7
-
7
+
8
8
  # Return an array of paths by splitting the +modulepath+ config
9
9
  # parameter. Only consider paths that are absolute and existing
10
10
  # directories
11
- def self.modulepath
12
- dirs = Puppet[:modulepath].split(":")
11
+ def self.modulepath(environment = nil)
12
+ dirs = Puppet.settings.value(:modulepath, environment).split(":")
13
13
  if ENV["PUPPETLIB"]
14
14
  dirs = ENV["PUPPETLIB"].split(":") + dirs
15
+ else
15
16
  end
16
17
  dirs.select do |p|
17
18
  p =~ /^#{File::SEPARATOR}/ && File::directory?(p)
@@ -21,22 +22,34 @@ class Puppet::Module
21
22
  # Find and return the +module+ that +path+ belongs to. If +path+ is
22
23
  # absolute, or if there is no module whose name is the first component
23
24
  # of +path+, return +nil+
24
- def self.find(path)
25
- if path =~ %r/^#{File::SEPARATOR}/
25
+ def self.find(modname, environment = nil)
26
+ if modname =~ %r/^#{File::SEPARATOR}/
26
27
  return nil
27
28
  end
28
29
 
29
- modname, rest = path.split(File::SEPARATOR, 2)
30
- return nil if modname.nil? || modname.empty?
31
-
32
- modpath = modulepath.collect { |p|
33
- File::join(p, modname)
30
+ modpath = modulepath(environment).collect { |path|
31
+ File::join(path, modname)
34
32
  }.find { |f| File::directory?(f) }
35
33
  return nil unless modpath
36
34
 
37
35
  return self.new(modname, modpath)
38
36
  end
39
37
 
38
+ # Return an array of the full path of every subdirectory in each
39
+ # directory in the modulepath.
40
+ def self.all(environment = nil)
41
+ modulepath(environment).map do |mp|
42
+ Dir.new(mp).map do |modfile|
43
+ modpath = File.join(mp, modfile)
44
+ unless modfile == '.' or modfile == '..' or !File.directory?(modpath)
45
+ modpath
46
+ else
47
+ nil
48
+ end
49
+ end
50
+ end.flatten.compact
51
+ end
52
+
40
53
  # Instance methods
41
54
 
42
55
  # Find the concrete file denoted by +file+. If +file+ is absolute,
@@ -45,16 +58,25 @@ class Puppet::Module
45
58
  # param.
46
59
  # In all cases, an absolute path is returned, which does not
47
60
  # necessarily refer to an existing file
48
- def self.find_template(file)
49
- if file =~ /^#{File::SEPARATOR}/
50
- return file
61
+ def self.find_template(template, environment = nil)
62
+ if template =~ /^#{File::SEPARATOR}/
63
+ return template
51
64
  end
52
65
 
53
- mod = find(file)
66
+ path, file = split_path(template)
67
+
68
+ # Because templates don't have an assumed template name, like manifests do,
69
+ # we treat templates with no name as being templates in the main template
70
+ # directory.
71
+ if file.nil?
72
+ mod = nil
73
+ else
74
+ mod = find(path, environment)
75
+ end
54
76
  if mod
55
77
  return mod.template(file)
56
78
  else
57
- return File.join(Puppet[:templatedir], file)
79
+ return File.join(Puppet.settings.value(:templatedir, environment), template)
58
80
  end
59
81
  end
60
82
 
@@ -63,13 +85,13 @@ class Puppet::Module
63
85
  # +pat+ does not contain any wildcards and is an existing module, return
64
86
  # a list of manifests in that module matching the rest of +pat+
65
87
  # Otherwise, try to find manifests matching +pat+ relative to +cwd+
66
- def self.find_manifests(pat, cwd = nil)
67
- cwd ||= Dir.getwd
68
- mod = find(pat)
69
- if mod
70
- return mod.manifests(pat)
88
+ def self.find_manifests(start, options = {})
89
+ cwd = options[:cwd] || Dir.getwd
90
+ module_name, pattern = split_path(start)
91
+ if module_name and mod = find(module_name, options[:environment])
92
+ return mod.manifests(pattern)
71
93
  else
72
- abspat = File::expand_path(pat, cwd)
94
+ abspat = File::expand_path(start, cwd)
73
95
  files = Dir.glob(abspat).reject { |f| FileTest.directory?(f) }
74
96
  if files.size == 0
75
97
  files = Dir.glob(abspat + ".pp").reject { |f| FileTest.directory?(f) }
@@ -78,28 +100,36 @@ class Puppet::Module
78
100
  end
79
101
  end
80
102
 
103
+ # Split the path into the module and the rest of the path.
104
+ # This method can and often does return nil, so anyone calling
105
+ # it needs to handle that.
106
+ def self.split_path(path)
107
+ if path =~ %r/^#{File::SEPARATOR}/
108
+ return nil
109
+ end
110
+
111
+ modname, rest = path.split(File::SEPARATOR, 2)
112
+ return nil if modname.nil? || modname.empty?
113
+ return modname, rest
114
+ end
115
+
81
116
  attr_reader :name, :path
82
117
  def initialize(name, path)
83
118
  @name = name
84
119
  @path = path
85
120
  end
86
121
 
87
- def strip(file)
88
- n, rest = file.split(File::SEPARATOR, 2)
89
- rest = nil if rest && rest.empty?
90
- return rest
91
- end
92
-
93
122
  def template(file)
94
- return File::join(path, TEMPLATES, strip(file))
123
+ return File::join(path, TEMPLATES, file)
95
124
  end
96
125
 
97
126
  def files
98
127
  return File::join(path, FILES)
99
128
  end
100
129
 
101
- def manifests(pat)
102
- rest = strip(pat)
130
+ # Return the list of manifests matching the given glob pattern,
131
+ # defaulting to 'init.pp' for empty modules.
132
+ def manifests(rest)
103
133
  rest ||= "init.pp"
104
134
  p = File::join(path, MANIFESTS, rest)
105
135
  files = Dir.glob(p)
@@ -111,5 +141,3 @@ class Puppet::Module
111
141
 
112
142
  private :initialize
113
143
  end
114
-
115
- # $Id: module.rb 2655 2007-07-06 22:22:10Z luke $
@@ -165,4 +165,3 @@ module Puppet
165
165
  end
166
166
  end
167
167
 
168
- # $Id: authconfig.rb 2345 2007-03-22 15:40:28Z luke $
@@ -81,4 +81,3 @@ module Puppet::Network
81
81
  end
82
82
  end
83
83
 
84
- # $Id: authorization.rb 2259 2007-03-06 19:03:05Z luke $
@@ -294,4 +294,3 @@ module Puppet
294
294
  end
295
295
  end
296
296
 
297
- # $Id: authstore.rb 2673 2007-07-10 19:26:36Z luke $
@@ -19,6 +19,12 @@ class Net::HTTP
19
19
  false
20
20
  end
21
21
  end
22
+
23
+ # JJM: This is a "backport" of sorts to older ruby versions which
24
+ # do not have this accessor. See #896 for more information.
25
+ unless Net::HTTP.instance_methods.include? "enable_post_connection_check"
26
+ attr_accessor :enable_post_connection_check
27
+ end
22
28
  end
23
29
 
24
30
  # The base class for all of the clients. Many clients just directly
@@ -85,8 +91,12 @@ class Puppet::Network::Client
85
91
 
86
92
  @driver = self.class.xmlrpc_client.new(args)
87
93
 
88
- if self.read_cert
89
- @driver.cert_setup(self)
94
+ self.read_cert
95
+
96
+ # We have to start the HTTP connection manually before we start
97
+ # sending it requests or keep-alive won't work.
98
+ if @driver.respond_to? :start
99
+ @driver.start
90
100
  end
91
101
 
92
102
  @local = false
@@ -114,7 +124,7 @@ class Puppet::Network::Client
114
124
  # Make sure we set the driver up when we read the cert in.
115
125
  def read_cert
116
126
  if super
117
- @driver.cert_setup(self) if @driver.respond_to?(:cert_setup)
127
+ @driver.recycle_connection(self) if @driver.respond_to?(:recycle_connection)
118
128
  return true
119
129
  else
120
130
  return false
@@ -184,4 +194,3 @@ class Puppet::Network::Client
184
194
  require 'puppet/network/client/proxy'
185
195
  end
186
196
 
187
- # $Id: client.rb 2375 2007-03-30 23:17:40Z luke $
@@ -14,9 +14,9 @@ class Puppet::Network::Client::CA < Puppet::Network::Client
14
14
  end
15
15
 
16
16
  # This client is really only able to request certificates for the
17
- # current host. It uses the Puppet.config settings to figure everything out.
17
+ # current host. It uses the Puppet.settings settings to figure everything out.
18
18
  def request_cert
19
- Puppet.config.use(:main, :ssl)
19
+ Puppet.settings.use(:main, :ssl)
20
20
 
21
21
  if cert = read_cert
22
22
  return cert
@@ -49,11 +49,10 @@ class Puppet::Network::Client::CA < Puppet::Network::Client
49
49
  end
50
50
 
51
51
  # Only write the cert out if it passes validating.
52
- Puppet.config.write(:hostcert) do |f| f.print cert end
53
- Puppet.config.write(:localcacert) do |f| f.print cacert end
52
+ Puppet.settings.write(:hostcert) do |f| f.print cert end
53
+ Puppet.settings.write(:localcacert) do |f| f.print cacert end
54
54
 
55
55
  return @cert
56
56
  end
57
57
  end
58
58
 
59
- # $Id: ca.rb 2611 2007-06-18 19:33:15Z luke $
@@ -78,4 +78,3 @@ class Puppet::Network::Client::Dipper < Puppet::Network::Client
78
78
  end
79
79
  end
80
80
 
81
- # $Id: dipper.rb 2679 2007-07-11 20:23:49Z luke $
@@ -4,4 +4,3 @@ class Puppet::Network::Client::File < Puppet::Network::Client::ProxyClient
4
4
  self.mkmethods
5
5
  end
6
6
 
7
- # $Id: file.rb 2259 2007-03-06 19:03:05Z luke $
@@ -7,7 +7,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
7
7
  @@sync = Sync.new
8
8
  end
9
9
 
10
- attr_accessor :objects
10
+ attr_accessor :catalog
11
11
  attr_reader :compile_time
12
12
 
13
13
  class << self
@@ -38,61 +38,20 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
38
38
  # in their manifests
39
39
  facts["clientversion"] = Puppet.version.to_s
40
40
 
41
+ # And add our environment as a fact.
42
+ facts["environment"] = Puppet[:environment]
43
+
41
44
  facts
42
45
  end
43
46
 
44
47
  # Return the list of dynamic facts as an array of symbols
45
48
  def self.dynamic_facts
46
- Puppet.config[:dynamicfacts].split(/\s*,\s*/).collect { |fact| fact.downcase }
47
- end
48
-
49
- # This method actually applies the configuration.
50
- def apply(tags = nil, ignoreschedules = false)
51
- unless defined? @objects
52
- raise Puppet::Error, "Cannot apply; objects not defined"
53
- end
54
-
55
- transaction = @objects.evaluate
56
-
57
- if tags
58
- transaction.tags = tags
59
- end
60
-
61
- if ignoreschedules
62
- transaction.ignoreschedules = true
63
- end
64
-
65
- transaction.addtimes :config_retrieval => @configtime
66
-
67
- begin
68
- transaction.evaluate
69
- rescue Puppet::Error => detail
70
- Puppet.err "Could not apply complete configuration: %s" %
71
- detail
72
- rescue => detail
73
- Puppet.err "Got an uncaught exception of type %s: %s" %
74
- [detail.class, detail]
75
- if Puppet[:trace]
76
- puts detail.backtrace
77
- end
78
- ensure
79
- Puppet::Util::Storage.store
80
- end
81
-
82
- if Puppet[:report] or Puppet[:summarize]
83
- report(transaction)
84
- end
85
-
86
- return transaction
87
- ensure
88
- if defined? transaction and transaction
89
- transaction.cleanup
90
- end
49
+ Puppet.settings[:dynamicfacts].split(/\s*,\s*/).collect { |fact| fact.downcase }
91
50
  end
92
51
 
93
52
  # Cache the config
94
53
  def cache(text)
95
- Puppet.info "Caching configuration at %s" % self.cachefile
54
+ Puppet.info "Caching catalog at %s" % self.cachefile
96
55
  confdir = ::File.dirname(Puppet[:localconfig])
97
56
  ::File.open(self.cachefile + ".tmp", "w", 0660) { |f|
98
57
  f.print text
@@ -108,10 +67,10 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
108
67
  end
109
68
 
110
69
  def clear
111
- @objects.remove(true) if @objects
70
+ @catalog.clear(true) if @catalog
112
71
  Puppet::Type.allclear
113
72
  mkdefault_objects
114
- @objects = nil
73
+ @catalog = nil
115
74
  end
116
75
 
117
76
  # Initialize and load storage
@@ -134,7 +93,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
134
93
  end
135
94
  end
136
95
 
137
- # Check whether our configuration is up to date
96
+ # Check whether our catalog is up to date
138
97
  def fresh?(facts)
139
98
  if Puppet[:ignorecache]
140
99
  Puppet.notice "Ignoring cache"
@@ -149,12 +108,12 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
149
108
  return false
150
109
  end
151
110
 
152
- # We're willing to give a 2 second drift
153
111
  newcompile = @driver.freshness
112
+ # We're willing to give a 2 second drift
154
113
  if newcompile - @compile_time.to_i < 1
155
114
  return true
156
115
  else
157
- Puppet.debug "Server compile time is %s vs %s" % [newcompile, @compile_time]
116
+ Puppet.debug "Server compile time is %s vs %s" % [newcompile, @compile_time.to_i]
158
117
  return false
159
118
  end
160
119
  end
@@ -165,7 +124,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
165
124
  lockfile.unlock(:anonymous => true)
166
125
  end
167
126
 
168
- # Stop the daemon from making any configuration runs.
127
+ # Stop the daemon from making any catalog runs.
169
128
  def disable
170
129
  lockfile.lock(:anonymous => true)
171
130
  end
@@ -180,63 +139,57 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
180
139
  facts = self.class.facts
181
140
  end
182
141
 
183
- if self.objects or FileTest.exists?(self.cachefile)
184
- if self.fresh?(facts)
185
- Puppet.info "Config is up to date"
186
- if self.objects
187
- return
188
- end
189
- if oldtext = self.retrievecache
190
- begin
191
- @objects = YAML.load(oldtext).to_type
192
- rescue => detail
193
- Puppet.warning "Could not load cached configuration: %s" % detail
194
- end
195
- return
196
- end
197
- end
198
- end
199
- Puppet.debug("getting config")
142
+ raise Puppet::Network::ClientError.new("Could not retrieve any facts") unless facts.length > 0
200
143
 
201
144
  # Retrieve the plugins.
202
- if Puppet[:pluginsync]
203
- getplugins()
204
- end
145
+ getplugins() if Puppet[:pluginsync]
205
146
 
206
- unless facts.length > 0
207
- raise Puppet::Network::ClientError.new(
208
- "Could not retrieve any facts"
209
- )
147
+ if (self.catalog or FileTest.exist?(self.cachefile)) and self.fresh?(facts)
148
+ Puppet.info "Configuration is up to date"
149
+ return if use_cached_config
210
150
  end
211
151
 
212
- unless objects = get_actual_config(facts)
213
- @objects = nil
152
+ Puppet.debug("Retrieving catalog")
153
+
154
+ # If we can't retrieve the catalog, just return, which will either
155
+ # fail, or use the in-memory catalog.
156
+ unless yaml_objects = get_actual_config(facts)
157
+ use_cached_config(true)
214
158
  return
215
159
  end
216
160
 
217
- unless objects.is_a?(Puppet::TransBucket)
218
- raise NetworkClientError,
219
- "Invalid returned objects of type %s" % objects.class
161
+ begin
162
+ objects = YAML.load(yaml_objects)
163
+ rescue => detail
164
+ msg = "Configuration could not be translated from yaml"
165
+ msg += "; using cached catalog" if use_cached_config(true)
166
+ Puppet.warning msg
167
+ return
220
168
  end
221
169
 
222
170
  self.setclasses(objects.classes)
223
171
 
224
172
  # Clear all existing objects, so we can recreate our stack.
225
- if self.objects
173
+ clear() if self.catalog
174
+
175
+ # Now convert the objects to a puppet catalog graph.
176
+ begin
177
+ @catalog = objects.to_catalog
178
+ rescue => detail
226
179
  clear()
180
+ puts detail.backtrace if Puppet[:trace]
181
+ msg = "Configuration could not be instantiated: %s" % detail
182
+ msg += "; using cached catalog" if use_cached_config(true)
183
+ Puppet.warning msg
184
+ return
227
185
  end
228
186
 
229
- # Now convert the objects to real Puppet objects
230
- @objects = objects.to_type
231
-
232
- if @objects.nil?
233
- raise Puppet::Error, "Configuration could not be processed"
187
+ if ! @catalog.from_cache
188
+ self.cache(yaml_objects)
234
189
  end
235
190
 
236
- # and perform any necessary final actions before we evaluate.
237
- @objects.finalize
238
-
239
- return @objects
191
+ # Keep the state database up to date.
192
+ @catalog.host_config = true
240
193
  end
241
194
 
242
195
  # A simple proxy method, so it's easy to test.
@@ -246,12 +199,9 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
246
199
 
247
200
  # Just so we can specify that we are "the" instance.
248
201
  def initialize(*args)
249
- Puppet.config.use(:main, :ssl, :puppetd)
202
+ Puppet.settings.use(:main, :ssl, :puppetd)
250
203
  super
251
204
 
252
- # This might be nil
253
- @configtime = 0
254
-
255
205
  self.class.instance = self
256
206
  @running = false
257
207
 
@@ -293,30 +243,32 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
293
243
  end
294
244
  end
295
245
 
296
- # The code that actually runs the configuration.
297
- def run(tags = nil, ignoreschedules = false)
246
+ # The code that actually runs the catalog.
247
+ # This just passes any options on to the catalog,
248
+ # which accepts :tags and :ignoreschedules.
249
+ def run(options = {})
298
250
  got_lock = false
299
251
  splay
300
252
  Puppet::Util.sync(:puppetrun).synchronize(Sync::EX) do
301
253
  if !lockfile.lock
302
- Puppet.notice "Lock file %s exists; skipping configuration run" %
254
+ Puppet.notice "Lock file %s exists; skipping catalog run" %
303
255
  lockfile.lockfile
304
256
  else
305
257
  got_lock = true
306
258
  begin
307
- @configtime = thinmark do
259
+ duration = thinmark do
308
260
  self.getconfig
309
261
  end
310
262
  rescue => detail
311
- Puppet.err "Could not retrieve configuration: %s" % detail
263
+ puts detail.backtrace if Puppet[:trace]
264
+ Puppet.err "Could not retrieve catalog: %s" % detail
312
265
  end
313
266
 
314
- if defined? @objects and @objects
315
- unless @local
316
- Puppet.notice "Starting configuration run"
317
- end
318
- benchmark(:notice, "Finished configuration run") do
319
- self.apply(tags, ignoreschedules)
267
+ if self.catalog
268
+ @catalog.retrieval_duration = duration
269
+ Puppet.notice "Starting catalog run" unless @local
270
+ benchmark(:notice, "Finished catalog run") do
271
+ @catalog.apply(options)
320
272
  end
321
273
  end
322
274
  end
@@ -363,9 +315,6 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
363
315
  # Download files from the remote server, returning a list of all
364
316
  # changed files.
365
317
  def self.download(args)
366
- objects = Puppet::Type.type(:component).create(
367
- :name => "#{args[:name]}_collector"
368
- )
369
318
  hash = {
370
319
  :path => args[:dest],
371
320
  :recurse => true,
@@ -374,24 +323,30 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
374
323
  :owner => Process.uid,
375
324
  :group => Process.gid,
376
325
  :purge => true,
326
+ :force => true,
377
327
  :backup => false
378
328
  }
379
329
 
380
330
  if args[:ignore]
381
331
  hash[:ignore] = args[:ignore].split(/\s+/)
382
332
  end
383
- objects.push Puppet::Type.type(:file).create(hash)
333
+ downconfig = Puppet::Node::Catalog.new("downloading")
334
+ downconfig.add_resource Puppet::Type.type(:file).create(hash)
384
335
 
385
336
  Puppet.info "Retrieving #{args[:name]}s"
386
337
 
387
338
  noop = Puppet[:noop]
388
339
  Puppet[:noop] = false
389
340
 
341
+ files = []
390
342
  begin
391
- trans = objects.evaluate
392
- trans.ignoretags = true
393
343
  Timeout::timeout(self.timeout) do
394
- trans.evaluate
344
+ downconfig.apply do |trans|
345
+ trans.changed?.find_all do |resource|
346
+ yield resource if block_given?
347
+ files << resource[:path]
348
+ end
349
+ end
395
350
  end
396
351
  rescue Puppet::Error, Timeout::Error => detail
397
352
  if Puppet[:debug]
@@ -400,18 +355,10 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
400
355
  Puppet.err "Could not retrieve #{args[:name]}s: %s" % detail
401
356
  end
402
357
 
403
- # Now source all of the changed objects, but only source those
404
- # that are top-level.
405
- files = []
406
- trans.changed?.find_all do |object|
407
- yield object if block_given?
408
- files << object[:path]
409
- end
410
- trans.cleanup
411
-
412
358
  # Now clean up after ourselves
413
- objects.remove
414
- files
359
+ downconfig.clear
360
+
361
+ return files
415
362
  ensure
416
363
  # I can't imagine why this is necessary, but apparently at last one person has had problems with noop
417
364
  # being nil here.
@@ -424,21 +371,20 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
424
371
 
425
372
  # Retrieve facts from the central server.
426
373
  def self.getfacts
427
- # Clear all existing definitions.
428
- Facter.clear
429
-
430
374
  # Download the new facts
431
375
  path = Puppet[:factpath].split(":")
432
376
  files = []
433
377
  download(:dest => Puppet[:factdest], :source => Puppet[:factsource],
434
- :ignore => Puppet[:factsignore], :name => "fact") do |object|
435
-
436
- next unless path.include?(::File.dirname(object[:path]))
378
+ :ignore => Puppet[:factsignore], :name => "fact") do |resource|
437
379
 
438
- files << object[:path]
380
+ next unless path.include?(::File.dirname(resource[:path]))
439
381
 
382
+ files << resource[:path]
440
383
  end
441
384
  ensure
385
+ # Clear all existing definitions.
386
+ Facter.clear
387
+
442
388
  # Reload everything.
443
389
  if Facter.respond_to? :loadfacts
444
390
  Facter.loadfacts
@@ -458,20 +404,20 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
458
404
  # changed plugins, because Puppet::Type loads plugins on demand.
459
405
  def self.getplugins
460
406
  download(:dest => Puppet[:plugindest], :source => Puppet[:pluginsource],
461
- :ignore => Puppet[:pluginsignore], :name => "plugin") do |object|
407
+ :ignore => Puppet[:pluginsignore], :name => "plugin") do |resource|
462
408
 
463
- next if FileTest.directory?(object[:path])
464
- path = object[:path].sub(Puppet[:plugindest], '').sub(/^\/+/, '')
409
+ next if FileTest.directory?(resource[:path])
410
+ path = resource[:path].sub(Puppet[:plugindest], '').sub(/^\/+/, '')
465
411
  unless Puppet::Util::Autoload.loaded?(path)
466
412
  next
467
413
  end
468
414
 
469
415
  begin
470
416
  Puppet.info "Reloading downloaded file %s" % path
471
- load object[:path]
417
+ load resource[:path]
472
418
  rescue => detail
473
419
  Puppet.warning "Could not reload downloaded file %s: %s" %
474
- [object[:path], detail]
420
+ [resource[:path], detail]
475
421
  end
476
422
  end
477
423
  end
@@ -514,42 +460,6 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
514
460
 
515
461
  return timeout
516
462
  end
517
-
518
- # Send off the transaction report.
519
- def report(transaction)
520
- begin
521
- report = transaction.generate_report()
522
- rescue => detail
523
- Puppet.err "Could not generate report: %s" % detail
524
- return
525
- end
526
-
527
- if Puppet[:rrdgraph] == true
528
- report.graph()
529
- end
530
-
531
- if Puppet[:summarize]
532
- puts report.summary
533
- end
534
-
535
- if Puppet[:report]
536
- begin
537
- reportclient().report(report)
538
- rescue => detail
539
- Puppet.err "Reporting failed: %s" % detail
540
- end
541
- end
542
- end
543
-
544
- def reportclient
545
- unless defined? @reportclient
546
- @reportclient = Puppet::Network::Client.report.new(
547
- :Server => Puppet[:reportserver]
548
- )
549
- end
550
-
551
- @reportclient
552
- end
553
463
 
554
464
  loadfacts()
555
465
 
@@ -579,92 +489,48 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
579
489
  end
580
490
  end
581
491
 
582
- # Actually retrieve the configuration, either from the server or from a
492
+ # Actually retrieve the catalog, either from the server or from a
583
493
  # local master.
584
494
  def get_actual_config(facts)
585
- if @local
586
- return get_local_config(facts)
587
- else
588
- begin
589
- Timeout::timeout(self.class.timeout) do
590
- return get_remote_config(facts)
591
- end
592
- rescue Timeout::Error
593
- Puppet.err "Configuration retrieval timed out"
594
- return nil
495
+ begin
496
+ Timeout::timeout(self.class.timeout) do
497
+ return get_remote_config(facts)
595
498
  end
499
+ rescue Timeout::Error
500
+ Puppet.err "Configuration retrieval timed out"
501
+ return nil
596
502
  end
597
503
  end
598
504
 
599
- # Retrieve a configuration from a local master.
600
- def get_local_config(facts)
601
- # If we're local, we don't have to do any of the conversion
602
- # stuff.
603
- objects = @driver.getconfig(facts, "yaml")
604
- @compile_time = Time.now
605
-
606
- if objects == ""
607
- raise Puppet::Error, "Could not retrieve configuration"
608
- end
609
-
610
- return objects
611
- end
612
-
613
505
  # Retrieve a config from a remote master.
614
506
  def get_remote_config(facts)
615
507
  textobjects = ""
616
508
 
617
509
  textfacts = CGI.escape(YAML.dump(facts))
618
510
 
619
- benchmark(:debug, "Retrieved configuration") do
511
+ benchmark(:debug, "Retrieved catalog") do
620
512
  # error handling for this is done in the network client
621
513
  begin
622
514
  textobjects = @driver.getconfig(textfacts, "yaml")
623
515
  begin
624
516
  textobjects = CGI.unescape(textobjects)
625
517
  rescue => detail
626
- raise Puppet::Error, "Could not CGI.unescape configuration"
518
+ raise Puppet::Error, "Could not CGI.unescape catalog"
627
519
  end
628
520
 
629
521
  rescue => detail
630
- Puppet.err "Could not retrieve configuration: %s" % detail
631
-
632
- unless Puppet[:usecacheonfailure]
633
- @objects = nil
634
- Puppet.warning "Not using cache on failed configuration"
635
- return
636
- end
522
+ Puppet.err "Could not retrieve catalog: %s" % detail
523
+ return nil
637
524
  end
638
525
  end
639
526
 
640
- fromcache = false
641
- if textobjects == ""
642
- unless textobjects = self.retrievecache
643
- raise Puppet::Error.new(
644
- "Cannot connect to server and there is no cached configuration"
645
- )
646
- end
647
- Puppet.warning "Could not get config; using cached copy"
648
- fromcache = true
649
- else
650
- @compile_time = Time.now
651
- Puppet::Util::Storage.cache(:configuration)[:facts] = facts
652
- Puppet::Util::Storage.cache(:configuration)[:compile_time] = @compile_time
653
- end
527
+ return nil if textobjects == ""
654
528
 
655
- begin
656
- objects = YAML.load(textobjects)
657
- rescue => detail
658
- raise Puppet::Error,
659
- "Could not understand configuration: %s" %
660
- detail.to_s
661
- end
529
+ @compile_time = Time.now
530
+ Puppet::Util::Storage.cache(:configuration)[:facts] = facts
531
+ Puppet::Util::Storage.cache(:configuration)[:compile_time] = @compile_time
662
532
 
663
- if @cache and ! fromcache
664
- self.cache(textobjects)
665
- end
666
-
667
- return objects
533
+ return textobjects
668
534
  end
669
535
 
670
536
  def lockfile
@@ -690,6 +556,32 @@ class Puppet::Network::Client::Master < Puppet::Network::Client
690
556
  Puppet.info "Sleeping for %s seconds (splay is enabled)" % time
691
557
  sleep(time)
692
558
  end
693
- end
694
559
 
695
- # $Id: master.rb 2671 2007-07-10 19:25:32Z luke $
560
+ private
561
+
562
+ # Use our cached config, optionally specifying whether this is
563
+ # necessary because of a failure.
564
+ def use_cached_config(because_of_failure = false)
565
+ return true if self.catalog
566
+
567
+ if because_of_failure and ! Puppet[:usecacheonfailure]
568
+ @catalog = nil
569
+ Puppet.warning "Not using cache on failed catalog"
570
+ return false
571
+ end
572
+
573
+ return false unless oldtext = self.retrievecache
574
+
575
+ begin
576
+ @catalog = YAML.load(oldtext).to_catalog
577
+ @catalog.from_cache = true
578
+ @catalog.host_config = true
579
+ rescue => detail
580
+ puts detail.backtrace if Puppet[:trace]
581
+ Puppet.warning "Could not load cached catalog: %s" % detail
582
+ clear
583
+ return false
584
+ end
585
+ return true
586
+ end
587
+ end