puppet 0.18.4 → 0.22.4

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 (673) hide show
  1. data/CHANGELOG +288 -0
  2. data/README +2 -2
  3. data/Rakefile +78 -5
  4. data/bin/puppet +28 -36
  5. data/bin/puppetca +81 -38
  6. data/bin/puppetd +65 -62
  7. data/bin/puppetdoc +409 -140
  8. data/bin/puppetmasterd +59 -47
  9. data/bin/puppetrun +38 -23
  10. data/conf/freebsd/puppetd +26 -0
  11. data/conf/freebsd/puppetmasterd +26 -0
  12. data/conf/gentoo/conf.d/puppet +5 -0
  13. data/conf/gentoo/conf.d/puppetmaster +12 -0
  14. data/conf/gentoo/init.d/puppet +38 -0
  15. data/conf/gentoo/init.d/puppetmaster +50 -0
  16. data/conf/gentoo/puppet/fileserver.conf +12 -0
  17. data/conf/gentoo/puppet/puppetca.conf +29 -0
  18. data/conf/gentoo/puppet/puppetd.conf +29 -0
  19. data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
  20. data/conf/redhat/client.init +10 -5
  21. data/conf/redhat/client.sysconfig +1 -1
  22. data/conf/redhat/fileserver.conf +2 -2
  23. data/conf/redhat/logrotate +1 -1
  24. data/conf/redhat/no-lockdir.patch +13 -0
  25. data/conf/redhat/puppet.spec +65 -8
  26. data/conf/redhat/puppetd.conf +0 -4
  27. data/conf/redhat/server.init +3 -6
  28. data/conf/solaris/pkginfo +1 -1
  29. data/conf/solaris/smf/svc-puppetd +2 -2
  30. data/conf/suse/client.init +142 -0
  31. data/conf/suse/puppet.spec +221 -0
  32. data/conf/suse/server.init +162 -0
  33. data/examples/code/mac_automount.pp +16 -0
  34. data/examples/root/bin/sleeper +3 -5
  35. data/examples/root/etc/init.d/sleeper +8 -2
  36. data/examples/root/etc/puppet/fileserver.conf +12 -2
  37. data/examples/root/etc/puppet/namespaceauth.conf +20 -0
  38. data/examples/root/etc/puppet/puppetd.conf +4 -0
  39. data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
  40. data/examples/root/etc/puppet/tagmail.conf +1 -0
  41. data/ext/emacs/puppet-mode.el +46 -1
  42. data/ext/logcheck/puppet +15 -0
  43. data/ext/module_puppet +15 -23
  44. data/ext/vim/puppet.vim +4 -2
  45. data/install.rb +2 -1
  46. data/lib/puppet.rb +76 -207
  47. data/lib/puppet/configuration.rb +331 -0
  48. data/lib/puppet/daemon.rb +63 -246
  49. data/lib/puppet/dsl.rb +371 -0
  50. data/lib/puppet/element.rb +8 -26
  51. data/lib/puppet/error.rb +54 -0
  52. data/lib/puppet/event.rb +8 -243
  53. data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
  54. data/lib/puppet/external/event-loop.rb +1 -0
  55. data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
  56. data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
  57. data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
  58. data/lib/puppet/external/gratr.rb +33 -0
  59. data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
  60. data/lib/puppet/external/gratr/base.rb +34 -0
  61. data/lib/puppet/external/gratr/biconnected.rb +116 -0
  62. data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
  63. data/lib/puppet/external/gratr/common.rb +73 -0
  64. data/lib/puppet/external/gratr/comparability.rb +92 -0
  65. data/lib/puppet/external/gratr/digraph.rb +116 -0
  66. data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
  67. data/lib/puppet/external/gratr/dot.rb +90 -0
  68. data/lib/puppet/external/gratr/edge.rb +145 -0
  69. data/lib/puppet/external/gratr/graph.rb +303 -0
  70. data/lib/puppet/external/gratr/graph_api.rb +83 -0
  71. data/lib/puppet/external/gratr/import.rb +44 -0
  72. data/lib/puppet/external/gratr/labels.rb +90 -0
  73. data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
  74. data/lib/puppet/external/gratr/rdot.rb +327 -0
  75. data/lib/puppet/external/gratr/search.rb +409 -0
  76. data/lib/puppet/external/gratr/strong_components.rb +127 -0
  77. data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
  78. data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
  79. data/lib/puppet/feature/base.rb +20 -0
  80. data/lib/puppet/feature/rails.rb +52 -0
  81. data/lib/puppet/metatype/attributes.rb +719 -0
  82. data/lib/puppet/metatype/closure.rb +111 -0
  83. data/lib/puppet/metatype/container.rb +94 -0
  84. data/lib/puppet/metatype/evaluation.rb +118 -0
  85. data/lib/puppet/metatype/instances.rb +261 -0
  86. data/lib/puppet/metatype/manager.rb +169 -0
  87. data/lib/puppet/metatype/metaparams.rb +409 -0
  88. data/lib/puppet/metatype/providers.rb +260 -0
  89. data/lib/puppet/metatype/relationships.rb +116 -0
  90. data/lib/puppet/metatype/schedules.rb +39 -0
  91. data/lib/puppet/metatype/tags.rb +39 -0
  92. data/lib/puppet/modules.rb +113 -0
  93. data/lib/puppet/network/authconfig.rb +168 -0
  94. data/lib/puppet/network/authorization.rb +84 -0
  95. data/lib/puppet/network/authstore.rb +293 -0
  96. data/lib/puppet/network/client.rb +187 -0
  97. data/lib/puppet/network/client/ca.rb +56 -0
  98. data/lib/puppet/network/client/dipper.rb +81 -0
  99. data/lib/puppet/network/client/file.rb +7 -0
  100. data/lib/puppet/network/client/logger.rb +6 -0
  101. data/lib/puppet/network/client/master.rb +644 -0
  102. data/lib/puppet/{client → network/client}/proxy.rb +3 -3
  103. data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
  104. data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
  105. data/lib/puppet/network/client/runner.rb +13 -0
  106. data/lib/puppet/network/client/status.rb +5 -0
  107. data/lib/puppet/network/client_request.rb +32 -0
  108. data/lib/puppet/network/handler.rb +33 -0
  109. data/lib/puppet/{server → network/handler}/ca.rb +5 -6
  110. data/lib/puppet/network/handler/filebucket.rb +180 -0
  111. data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
  112. data/lib/puppet/{server → network/handler}/logger.rb +3 -5
  113. data/lib/puppet/{server → network/handler}/master.rb +42 -8
  114. data/lib/puppet/network/handler/report.rb +158 -0
  115. data/lib/puppet/network/handler/resource.rb +190 -0
  116. data/lib/puppet/{server → network/handler}/runner.rb +17 -18
  117. data/lib/puppet/network/handler/status.rb +13 -0
  118. data/lib/puppet/network/rights.rb +74 -0
  119. data/lib/puppet/network/server.rb +5 -0
  120. data/lib/puppet/network/server/mongrel.rb +138 -0
  121. data/lib/puppet/network/server/webrick.rb +153 -0
  122. data/lib/puppet/network/xmlrpc/client.rb +129 -0
  123. data/lib/puppet/network/xmlrpc/processor.rb +91 -0
  124. data/lib/puppet/network/xmlrpc/server.rb +20 -0
  125. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
  126. data/lib/puppet/parameter.rb +390 -346
  127. data/lib/puppet/parser/ast.rb +116 -147
  128. data/lib/puppet/parser/ast/astarray.rb +17 -33
  129. data/lib/puppet/parser/ast/branch.rb +2 -0
  130. data/lib/puppet/parser/ast/caseopt.rb +7 -12
  131. data/lib/puppet/parser/ast/casestatement.rb +23 -32
  132. data/lib/puppet/parser/ast/collection.rb +19 -80
  133. data/lib/puppet/parser/ast/collexpr.rb +81 -0
  134. data/lib/puppet/parser/ast/component.rb +160 -89
  135. data/lib/puppet/parser/ast/else.rb +30 -0
  136. data/lib/puppet/parser/ast/function.rb +9 -2
  137. data/lib/puppet/parser/ast/hostclass.rb +47 -131
  138. data/lib/puppet/parser/ast/ifstatement.rb +43 -0
  139. data/lib/puppet/parser/ast/leaf.rb +10 -21
  140. data/lib/puppet/parser/ast/node.rb +32 -79
  141. data/lib/puppet/parser/ast/resourcedef.rb +222 -0
  142. data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
  143. data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
  144. data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
  145. data/lib/puppet/parser/ast/resourceref.rb +44 -0
  146. data/lib/puppet/parser/ast/selector.rb +16 -8
  147. data/lib/puppet/parser/ast/tag.rb +3 -1
  148. data/lib/puppet/parser/ast/vardef.rb +8 -12
  149. data/lib/puppet/parser/collector.rb +181 -0
  150. data/lib/puppet/parser/functions.rb +191 -36
  151. data/lib/puppet/parser/interpreter.rb +802 -380
  152. data/lib/puppet/parser/lexer.rb +86 -19
  153. data/lib/puppet/parser/parser.rb +1123 -960
  154. data/lib/puppet/parser/resource.rb +353 -0
  155. data/lib/puppet/parser/resource/param.rb +57 -0
  156. data/lib/puppet/parser/resource/reference.rb +71 -0
  157. data/lib/puppet/parser/scope.rb +573 -1000
  158. data/lib/puppet/parser/templatewrapper.rb +54 -0
  159. data/lib/puppet/pgraph.rb +208 -0
  160. data/lib/puppet/propertychange.rb +143 -0
  161. data/lib/puppet/provider.rb +302 -0
  162. data/lib/puppet/provider/cron/crontab.rb +187 -0
  163. data/lib/puppet/provider/group/groupadd.rb +29 -0
  164. data/lib/puppet/provider/group/netinfo.rb +12 -0
  165. data/lib/puppet/provider/group/pw.rb +31 -0
  166. data/lib/puppet/provider/host/netinfo.rb +18 -0
  167. data/lib/puppet/provider/host/parsed.rb +73 -0
  168. data/lib/puppet/provider/mount.rb +57 -0
  169. data/lib/puppet/provider/mount/netinfo.rb +38 -0
  170. data/lib/puppet/provider/mount/parsed.rb +37 -0
  171. data/lib/puppet/provider/nameservice.rb +344 -0
  172. data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
  173. data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
  174. data/lib/puppet/provider/nameservice/pw.rb +22 -0
  175. data/lib/puppet/provider/package/apple.rb +53 -0
  176. data/lib/puppet/provider/package/apt.rb +119 -0
  177. data/lib/puppet/provider/package/aptitude.rb +30 -0
  178. data/lib/puppet/provider/package/aptrpm.rb +79 -0
  179. data/lib/puppet/provider/package/blastwave.rb +114 -0
  180. data/lib/puppet/provider/package/darwinport.rb +88 -0
  181. data/lib/puppet/provider/package/dpkg.rb +109 -0
  182. data/lib/puppet/provider/package/freebsd.rb +43 -0
  183. data/lib/puppet/provider/package/gem.rb +104 -0
  184. data/lib/puppet/provider/package/openbsd.rb +93 -0
  185. data/lib/puppet/provider/package/pkgdmg.rb +119 -0
  186. data/lib/puppet/provider/package/portage.rb +112 -0
  187. data/lib/puppet/provider/package/ports.rb +94 -0
  188. data/lib/puppet/provider/package/rpm.rb +125 -0
  189. data/lib/puppet/provider/package/rug.rb +53 -0
  190. data/lib/puppet/provider/package/sun.rb +168 -0
  191. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  192. data/lib/puppet/provider/package/up2date.rb +45 -0
  193. data/lib/puppet/provider/package/yum.rb +54 -0
  194. data/lib/puppet/provider/parsedfile.rb +342 -0
  195. data/lib/puppet/provider/port/parsed.rb +174 -0
  196. data/lib/puppet/provider/service/base.rb +136 -0
  197. data/lib/puppet/provider/service/debian.rb +32 -0
  198. data/lib/puppet/provider/service/gentoo.rb +49 -0
  199. data/lib/puppet/{type → provider}/service/init.rb +42 -40
  200. data/lib/puppet/provider/service/redhat.rb +59 -0
  201. data/lib/puppet/{type → provider}/service/smf.rb +24 -13
  202. data/lib/puppet/provider/sshkey/parsed.rb +36 -0
  203. data/lib/puppet/provider/user/netinfo.rb +106 -0
  204. data/lib/puppet/provider/user/pw.rb +41 -0
  205. data/lib/puppet/provider/user/useradd.rb +67 -0
  206. data/lib/puppet/provider/zone/solaris.rb +208 -0
  207. data/lib/puppet/rails.rb +102 -66
  208. data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
  209. data/lib/puppet/rails/database/schema.rb +89 -0
  210. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
  211. data/lib/puppet/rails/external/tagging/init.rb +5 -0
  212. data/lib/puppet/rails/external/tagging/tag.rb +50 -0
  213. data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
  214. data/lib/puppet/rails/fact_name.rb +7 -0
  215. data/lib/puppet/rails/fact_value.rb +5 -0
  216. data/lib/puppet/rails/host.rb +95 -46
  217. data/lib/puppet/rails/param_name.rb +28 -0
  218. data/lib/puppet/rails/param_value.rb +5 -0
  219. data/lib/puppet/rails/puppet_class.rb +9 -0
  220. data/lib/puppet/rails/resource.rb +95 -0
  221. data/lib/puppet/rails/source_file.rb +5 -0
  222. data/lib/puppet/relationship.rb +63 -0
  223. data/lib/puppet/reports/log.rb +14 -0
  224. data/lib/puppet/reports/rrdgraph.rb +114 -10
  225. data/lib/puppet/reports/store.rb +64 -0
  226. data/lib/puppet/reports/tagmail.rb +144 -71
  227. data/lib/puppet/sslcertificates.rb +38 -5
  228. data/lib/puppet/sslcertificates/ca.rb +142 -37
  229. data/lib/puppet/sslcertificates/certificate.rb +3 -3
  230. data/lib/puppet/sslcertificates/inventory.rb +53 -0
  231. data/lib/puppet/sslcertificates/support.rb +128 -0
  232. data/lib/puppet/transaction.rb +568 -189
  233. data/lib/puppet/transaction/report.rb +14 -3
  234. data/lib/puppet/transportable.rb +18 -10
  235. data/lib/puppet/type.rb +279 -2299
  236. data/lib/puppet/type/component.rb +63 -63
  237. data/lib/puppet/type/cron.rb +294 -710
  238. data/lib/puppet/type/exec.rb +185 -129
  239. data/lib/puppet/type/group.rb +38 -89
  240. data/lib/puppet/type/host.rb +110 -0
  241. data/lib/puppet/type/mount.rb +189 -0
  242. data/lib/puppet/type/notify.rb +47 -0
  243. data/lib/puppet/type/package.rb +129 -257
  244. data/lib/puppet/type/parsedtype.rb +172 -297
  245. data/lib/puppet/type/pfile.rb +540 -319
  246. data/lib/puppet/type/pfile/checksum.rb +103 -76
  247. data/lib/puppet/type/pfile/content.rb +16 -10
  248. data/lib/puppet/type/pfile/ensure.rb +52 -34
  249. data/lib/puppet/type/pfile/group.rb +25 -18
  250. data/lib/puppet/type/pfile/mode.rb +7 -4
  251. data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
  252. data/lib/puppet/type/pfile/source.rb +119 -124
  253. data/lib/puppet/type/pfile/target.rb +29 -45
  254. data/lib/puppet/type/pfile/type.rb +2 -2
  255. data/lib/puppet/type/pfilebucket.rb +18 -14
  256. data/lib/puppet/type/port.rb +121 -0
  257. data/lib/puppet/type/property.rb +530 -0
  258. data/lib/puppet/type/resources.rb +150 -0
  259. data/lib/puppet/type/schedule.rb +38 -22
  260. data/lib/puppet/type/service.rb +70 -326
  261. data/lib/puppet/type/sshkey.rb +76 -0
  262. data/lib/puppet/type/tidy.rb +197 -97
  263. data/lib/puppet/type/user.rb +107 -183
  264. data/lib/puppet/type/yumrepo.rb +53 -34
  265. data/lib/puppet/type/zone.rb +55 -208
  266. data/lib/puppet/util.rb +239 -201
  267. data/lib/puppet/util/autoload.rb +107 -0
  268. data/lib/puppet/util/classgen.rb +208 -0
  269. data/lib/puppet/{config.rb → util/config.rb} +102 -54
  270. data/lib/puppet/util/docs.rb +104 -0
  271. data/lib/puppet/util/errors.rb +55 -0
  272. data/lib/puppet/util/execution.rb +22 -0
  273. data/lib/puppet/util/feature.rb +76 -0
  274. data/lib/puppet/util/fileparsing.rb +380 -0
  275. data/lib/puppet/util/filetype.rb +300 -0
  276. data/lib/puppet/util/graph.rb +39 -0
  277. data/lib/puppet/util/inifile.rb +209 -0
  278. data/lib/puppet/util/loadedfile.rb +71 -0
  279. data/lib/puppet/util/log.rb +549 -0
  280. data/lib/puppet/util/logging.rb +20 -0
  281. data/lib/puppet/util/metaid.rb +22 -0
  282. data/lib/puppet/util/methodhelper.rb +37 -0
  283. data/lib/puppet/util/metric.rb +160 -0
  284. data/lib/puppet/util/package.rb +31 -0
  285. data/lib/puppet/util/pidlock.rb +68 -0
  286. data/lib/puppet/util/plist.rb +24 -0
  287. data/lib/puppet/util/plist/generator.rb +226 -0
  288. data/lib/puppet/util/plist/parser.rb +227 -0
  289. data/lib/puppet/util/posix.rb +87 -0
  290. data/lib/puppet/util/provider_features.rb +170 -0
  291. data/lib/puppet/util/rails/collection_merger.rb +42 -0
  292. data/lib/puppet/util/storage.rb +103 -0
  293. data/lib/puppet/util/subclass_loader.rb +83 -0
  294. data/lib/puppet/util/suidmanager.rb +86 -0
  295. data/lib/puppet/util/variables.rb +39 -0
  296. data/lib/puppet/util/warnings.rb +15 -0
  297. data/test/Rakefile +97 -0
  298. data/test/certmgr/ca.rb +81 -0
  299. data/test/certmgr/certmgr.rb +77 -50
  300. data/test/certmgr/inventory.rb +79 -0
  301. data/test/certmgr/support.rb +81 -0
  302. data/test/executables/filebucket.rb +49 -0
  303. data/test/executables/puppetbin.rb +28 -12
  304. data/test/executables/puppetca.rb +75 -54
  305. data/test/executables/puppetd.rb +10 -13
  306. data/test/executables/puppetmasterd.rb +12 -17
  307. data/test/executables/puppetmodule.rb +18 -17
  308. data/test/language/ast.rb +242 -798
  309. data/test/language/ast/casestatement.rb +104 -0
  310. data/test/language/ast/component.rb +133 -0
  311. data/test/language/ast/hostclass.rb +162 -0
  312. data/test/language/ast/selector.rb +62 -0
  313. data/test/language/ast/variable.rb +31 -0
  314. data/test/language/collector.rb +369 -0
  315. data/test/language/functions.rb +305 -18
  316. data/test/language/interpreter.rb +894 -125
  317. data/test/language/lexer.rb +98 -12
  318. data/test/language/node.rb +37 -53
  319. data/test/language/parser.rb +455 -148
  320. data/test/language/resource.rb +535 -0
  321. data/test/language/scope.rb +451 -561
  322. data/test/language/snippets.rb +101 -111
  323. data/test/language/transportable.rb +6 -8
  324. data/test/lib/mocha.rb +19 -0
  325. data/test/lib/mocha/any_instance_method.rb +35 -0
  326. data/test/lib/mocha/auto_verify.rb +113 -0
  327. data/test/lib/mocha/central.rb +35 -0
  328. data/test/lib/mocha/class_method.rb +62 -0
  329. data/test/lib/mocha/expectation.rb +295 -0
  330. data/test/lib/mocha/expectation_error.rb +6 -0
  331. data/test/lib/mocha/infinite_range.rb +27 -0
  332. data/test/lib/mocha/inspect.rb +37 -0
  333. data/test/lib/mocha/instance_method.rb +8 -0
  334. data/test/lib/mocha/metaclass.rb +7 -0
  335. data/test/lib/mocha/mock.rb +20 -0
  336. data/test/lib/mocha/mock_methods.rb +122 -0
  337. data/test/lib/mocha/object.rb +100 -0
  338. data/test/lib/mocha/pretty_parameters.rb +28 -0
  339. data/test/lib/mocha/setup_and_teardown.rb +23 -0
  340. data/test/lib/mocha/standalone.rb +30 -0
  341. data/test/lib/mocha/test_case_adapter.rb +49 -0
  342. data/test/lib/mocha_standalone.rb +2 -0
  343. data/test/lib/puppettest.rb +294 -0
  344. data/test/lib/puppettest/certificates.rb +61 -0
  345. data/test/lib/puppettest/exetest.rb +123 -0
  346. data/test/lib/puppettest/fakes.rb +194 -0
  347. data/test/lib/puppettest/fileparsing.rb +33 -0
  348. data/test/lib/puppettest/filetesting.rb +231 -0
  349. data/test/lib/puppettest/graph.rb +41 -0
  350. data/test/lib/puppettest/parsertesting.rb +392 -0
  351. data/test/lib/puppettest/railstesting.rb +56 -0
  352. data/test/lib/puppettest/reporttesting.rb +19 -0
  353. data/test/lib/puppettest/resourcetesting.rb +73 -0
  354. data/test/lib/puppettest/servertest.rb +72 -0
  355. data/test/lib/puppettest/support.rb +8 -0
  356. data/test/lib/puppettest/support/assertions.rb +101 -0
  357. data/test/lib/puppettest/support/helpers.rb +23 -0
  358. data/test/lib/puppettest/support/resources.rb +37 -0
  359. data/test/lib/puppettest/support/utils.rb +160 -0
  360. data/test/lib/puppettest/testcase.rb +48 -0
  361. data/test/lib/rake/puppet_test_loader.rb +17 -0
  362. data/test/lib/rake/puppet_testtask.rb +17 -0
  363. data/test/lib/spec.rb +8 -0
  364. data/test/lib/spec/callback.rb +11 -0
  365. data/test/lib/spec/callback/callback_container.rb +60 -0
  366. data/test/lib/spec/callback/extensions/module.rb +24 -0
  367. data/test/lib/spec/callback/extensions/object.rb +37 -0
  368. data/test/lib/spec/deprecated.rb +3 -0
  369. data/test/lib/spec/expectations.rb +59 -0
  370. data/test/lib/spec/expectations/differs/default.rb +62 -0
  371. data/test/lib/spec/expectations/errors.rb +6 -0
  372. data/test/lib/spec/expectations/extensions.rb +3 -0
  373. data/test/lib/spec/expectations/extensions/object.rb +109 -0
  374. data/test/lib/spec/expectations/extensions/proc.rb +57 -0
  375. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  376. data/test/lib/spec/expectations/handler.rb +47 -0
  377. data/test/lib/spec/expectations/should.rb +5 -0
  378. data/test/lib/spec/expectations/should/base.rb +64 -0
  379. data/test/lib/spec/expectations/should/change.rb +69 -0
  380. data/test/lib/spec/expectations/should/have.rb +128 -0
  381. data/test/lib/spec/expectations/should/not.rb +74 -0
  382. data/test/lib/spec/expectations/should/should.rb +81 -0
  383. data/test/lib/spec/expectations/sugar.rb +47 -0
  384. data/test/lib/spec/matchers.rb +160 -0
  385. data/test/lib/spec/matchers/be.rb +161 -0
  386. data/test/lib/spec/matchers/be_close.rb +37 -0
  387. data/test/lib/spec/matchers/change.rb +120 -0
  388. data/test/lib/spec/matchers/eql.rb +43 -0
  389. data/test/lib/spec/matchers/equal.rb +43 -0
  390. data/test/lib/spec/matchers/has.rb +44 -0
  391. data/test/lib/spec/matchers/have.rb +140 -0
  392. data/test/lib/spec/matchers/include.rb +50 -0
  393. data/test/lib/spec/matchers/match.rb +41 -0
  394. data/test/lib/spec/matchers/raise_error.rb +100 -0
  395. data/test/lib/spec/matchers/respond_to.rb +35 -0
  396. data/test/lib/spec/matchers/satisfy.rb +47 -0
  397. data/test/lib/spec/matchers/throw_symbol.rb +75 -0
  398. data/test/lib/spec/mocks.rb +232 -0
  399. data/test/lib/spec/mocks/argument_expectation.rb +132 -0
  400. data/test/lib/spec/mocks/error_generator.rb +85 -0
  401. data/test/lib/spec/mocks/errors.rb +10 -0
  402. data/test/lib/spec/mocks/extensions/object.rb +3 -0
  403. data/test/lib/spec/mocks/message_expectation.rb +231 -0
  404. data/test/lib/spec/mocks/methods.rb +40 -0
  405. data/test/lib/spec/mocks/mock.rb +26 -0
  406. data/test/lib/spec/mocks/mock_handler.rb +166 -0
  407. data/test/lib/spec/mocks/order_group.rb +29 -0
  408. data/test/lib/spec/rake/spectask.rb +173 -0
  409. data/test/lib/spec/rake/verify_rcov.rb +47 -0
  410. data/test/lib/spec/runner.rb +132 -0
  411. data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
  412. data/test/lib/spec/runner/command_line.rb +34 -0
  413. data/test/lib/spec/runner/context.rb +154 -0
  414. data/test/lib/spec/runner/context_eval.rb +142 -0
  415. data/test/lib/spec/runner/context_runner.rb +55 -0
  416. data/test/lib/spec/runner/drb_command_line.rb +21 -0
  417. data/test/lib/spec/runner/execution_context.rb +17 -0
  418. data/test/lib/spec/runner/extensions/kernel.rb +17 -0
  419. data/test/lib/spec/runner/extensions/object.rb +32 -0
  420. data/test/lib/spec/runner/formatter.rb +5 -0
  421. data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
  422. data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
  423. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
  424. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
  425. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
  426. data/test/lib/spec/runner/heckle_runner.rb +71 -0
  427. data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
  428. data/test/lib/spec/runner/option_parser.rb +224 -0
  429. data/test/lib/spec/runner/reporter.rb +105 -0
  430. data/test/lib/spec/runner/spec_matcher.rb +25 -0
  431. data/test/lib/spec/runner/spec_parser.rb +41 -0
  432. data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
  433. data/test/lib/spec/runner/specification.rb +114 -0
  434. data/test/lib/spec/translator.rb +87 -0
  435. data/test/lib/spec/version.rb +30 -0
  436. data/test/lib/stubba.rb +2 -0
  437. data/test/network/authconfig.rb +72 -0
  438. data/test/network/authorization.rb +138 -0
  439. data/test/network/authstore.rb +450 -0
  440. data/test/network/client/ca.rb +38 -0
  441. data/test/{client → network/client}/client.rb +107 -24
  442. data/test/network/client/dipper.rb +35 -0
  443. data/test/network/client/master.rb +627 -0
  444. data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
  445. data/test/network/client_request.rb +39 -0
  446. data/test/network/daemon.rb +71 -0
  447. data/test/{server → network/handler}/bucket.rb +103 -27
  448. data/test/{server → network/handler}/ca.rb +14 -19
  449. data/test/{server → network/handler}/fileserver.rb +443 -68
  450. data/test/network/handler/handler.rb +64 -0
  451. data/test/{server → network/handler}/logger.rb +26 -26
  452. data/test/network/handler/master.rb +352 -0
  453. data/test/network/handler/report.rb +185 -0
  454. data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
  455. data/test/{server → network/handler}/runner.rb +17 -16
  456. data/test/network/rights.rb +38 -0
  457. data/test/network/server/webrick.rb +140 -0
  458. data/test/network/xmlrpc/client.rb +68 -0
  459. data/test/network/xmlrpc/processor.rb +80 -0
  460. data/test/network/xmlrpc/server.rb +28 -0
  461. data/test/network/xmlrpc/webrick_servlet.rb +26 -0
  462. data/test/other/dsl.rb +218 -0
  463. data/test/other/events.rb +22 -15
  464. data/test/other/overrides.rb +9 -14
  465. data/test/other/pgraph.rb +289 -0
  466. data/test/other/propertychange.rb +142 -0
  467. data/test/other/provider.rb +162 -0
  468. data/test/other/puppet.rb +63 -10
  469. data/test/other/relationship.rb +74 -0
  470. data/test/other/relationships.rb +199 -123
  471. data/test/other/report.rb +152 -23
  472. data/test/other/transactions.rb +824 -78
  473. data/test/puppet/conffiles.rb +16 -11
  474. data/test/puppet/defaults.rb +7 -10
  475. data/test/puppet/{error.rb → errortest.rb} +5 -8
  476. data/test/puppet/modules.rb +58 -0
  477. data/test/puppet/tc_suidmanager.rb +107 -0
  478. data/test/rails/host.rb +177 -0
  479. data/test/rails/rails.rb +27 -0
  480. data/test/rails/railsparameter.rb +62 -0
  481. data/test/rails/railsresource.rb +100 -0
  482. data/test/ral/manager/attributes.rb +296 -0
  483. data/test/ral/manager/manager.rb +55 -0
  484. data/test/ral/manager/provider.rb +54 -0
  485. data/test/ral/manager/type.rb +837 -0
  486. data/test/ral/providers/cron/crontab.rb +346 -0
  487. data/test/ral/providers/group.rb +252 -0
  488. data/test/ral/providers/host/netinfo.rb +58 -0
  489. data/test/ral/providers/host/parsed.rb +226 -0
  490. data/test/ral/providers/mount/netinfo.rb +80 -0
  491. data/test/ral/providers/mount/parsed.rb +223 -0
  492. data/test/ral/providers/nameservice.rb +33 -0
  493. data/test/ral/providers/package.rb +253 -0
  494. data/test/ral/providers/package/apt.rb +89 -0
  495. data/test/ral/providers/package/aptitude.rb +69 -0
  496. data/test/ral/providers/package/aptrpm.rb +89 -0
  497. data/test/ral/providers/package/dpkg.rb +64 -0
  498. data/test/ral/providers/parsedfile.rb +668 -0
  499. data/test/ral/providers/parsedport.rb +233 -0
  500. data/test/ral/providers/provider.rb +423 -0
  501. data/test/{types → ral/providers}/service.rb +20 -121
  502. data/test/ral/providers/service/base.rb +75 -0
  503. data/test/ral/providers/sshkey/parsed.rb +111 -0
  504. data/test/ral/providers/user.rb +567 -0
  505. data/test/ral/providers/user/useradd.rb +250 -0
  506. data/test/ral/types/basic.rb +90 -0
  507. data/test/ral/types/component.rb +113 -0
  508. data/test/ral/types/cron.rb +480 -0
  509. data/test/{types → ral/types}/exec.rb +278 -82
  510. data/test/ral/types/file.rb +1799 -0
  511. data/test/ral/types/file/target.rb +363 -0
  512. data/test/{types → ral/types}/filebucket.rb +15 -17
  513. data/test/{types → ral/types}/fileignoresource.rb +9 -15
  514. data/test/ral/types/filesources.rb +1046 -0
  515. data/test/ral/types/group.rb +169 -0
  516. data/test/ral/types/host.rb +155 -0
  517. data/test/ral/types/mount.rb +312 -0
  518. data/test/ral/types/package.rb +85 -0
  519. data/test/ral/types/parameter.rb +172 -0
  520. data/test/ral/types/port.rb +148 -0
  521. data/test/ral/types/property.rb +343 -0
  522. data/test/ral/types/resources.rb +221 -0
  523. data/test/{types → ral/types}/schedule.rb +34 -12
  524. data/test/ral/types/service.rb +37 -0
  525. data/test/{types → ral/types}/sshkey.rb +75 -65
  526. data/test/ral/types/tidy.rb +240 -0
  527. data/test/ral/types/user.rb +493 -0
  528. data/test/{types → ral/types}/yumrepo.rb +7 -11
  529. data/test/{types → ral/types}/zone.rb +45 -45
  530. data/test/tagging/tagging.rb +17 -26
  531. data/test/util/autoload.rb +130 -0
  532. data/test/util/classgen.rb +227 -0
  533. data/test/{other → util}/config.rb +373 -113
  534. data/test/util/execution.rb +34 -0
  535. data/test/util/features.rb +94 -0
  536. data/test/util/fileparsing.rb +677 -0
  537. data/test/{other → util}/filetype.rb +9 -12
  538. data/test/util/graph.rb +108 -0
  539. data/test/{other → util}/inifile.rb +24 -11
  540. data/test/util/loadedfile.rb +106 -0
  541. data/test/{other → util}/log.rb +96 -50
  542. data/test/{other → util}/metrics.rb +7 -17
  543. data/test/util/package.rb +27 -0
  544. data/test/util/pidlock.rb +126 -0
  545. data/test/util/posixtest.rb +173 -0
  546. data/test/util/storage.rb +123 -0
  547. data/test/util/subclass_loader.rb +100 -0
  548. data/test/util/utiltest.rb +368 -0
  549. metadata +449 -169
  550. data/examples/code/classing +0 -35
  551. data/examples/code/failers/badclassnoparam +0 -10
  552. data/examples/code/failers/badclassparam +0 -10
  553. data/examples/code/failers/badcompnoparam +0 -9
  554. data/examples/code/failers/badcompparam +0 -9
  555. data/examples/code/failers/badtypeparam +0 -3
  556. data/examples/code/failers/noobjectrvalue +0 -1
  557. data/examples/code/snippets/aliastest.pp +0 -16
  558. data/examples/code/snippets/argumentdefaults +0 -14
  559. data/examples/code/snippets/casestatement.pp +0 -58
  560. data/examples/code/snippets/classheirarchy.pp +0 -15
  561. data/examples/code/snippets/classincludes.pp +0 -17
  562. data/examples/code/snippets/classpathtest +0 -11
  563. data/examples/code/snippets/componentmetaparams.pp +0 -11
  564. data/examples/code/snippets/deepclassheirarchy.pp +0 -23
  565. data/examples/code/snippets/defineoverrides.pp +0 -17
  566. data/examples/code/snippets/dirchmod +0 -19
  567. data/examples/code/snippets/emptyclass.pp +0 -9
  568. data/examples/code/snippets/emptyexec.pp +0 -3
  569. data/examples/code/snippets/failmissingexecpath.pp +0 -13
  570. data/examples/code/snippets/falsevalues.pp +0 -3
  571. data/examples/code/snippets/filecreate +0 -11
  572. data/examples/code/snippets/implicititeration +0 -15
  573. data/examples/code/snippets/multipleinstances +0 -7
  574. data/examples/code/snippets/namevartest +0 -9
  575. data/examples/code/snippets/scopetest +0 -13
  576. data/examples/code/snippets/selectorvalues.pp +0 -42
  577. data/examples/code/snippets/simpledefaults +0 -5
  578. data/examples/code/snippets/simpleselector +0 -38
  579. data/examples/code/snippets/singleary.pp +0 -19
  580. data/examples/code/snippets/singlequote.pp +0 -11
  581. data/examples/code/snippets/singleselector.pp +0 -22
  582. data/examples/code/snippets/tag.pp +0 -9
  583. data/examples/code/snippets/tagged.pp +0 -35
  584. data/lib/puppet/client.rb +0 -177
  585. data/lib/puppet/client/ca.rb +0 -21
  586. data/lib/puppet/client/dipper.rb +0 -76
  587. data/lib/puppet/client/file.rb +0 -20
  588. data/lib/puppet/client/log.rb +0 -17
  589. data/lib/puppet/client/master.rb +0 -531
  590. data/lib/puppet/client/runner.rb +0 -17
  591. data/lib/puppet/client/status.rb +0 -7
  592. data/lib/puppet/event-loop.rb +0 -1
  593. data/lib/puppet/filetype.rb +0 -308
  594. data/lib/puppet/inifile.rb +0 -201
  595. data/lib/puppet/log.rb +0 -524
  596. data/lib/puppet/metric.rb +0 -132
  597. data/lib/puppet/networkclient.rb +0 -175
  598. data/lib/puppet/parsedfile.rb +0 -58
  599. data/lib/puppet/parser/ast/classdef.rb +0 -79
  600. data/lib/puppet/parser/ast/compdef.rb +0 -75
  601. data/lib/puppet/parser/ast/nodedef.rb +0 -73
  602. data/lib/puppet/parser/ast/objectdef.rb +0 -284
  603. data/lib/puppet/parser/ast/objectref.rb +0 -77
  604. data/lib/puppet/rails/database.rb +0 -40
  605. data/lib/puppet/rails/rails_object.rb +0 -42
  606. data/lib/puppet/rails/rails_parameter.rb +0 -5
  607. data/lib/puppet/server.rb +0 -196
  608. data/lib/puppet/server/authconfig.rb +0 -177
  609. data/lib/puppet/server/authstore.rb +0 -226
  610. data/lib/puppet/server/filebucket.rb +0 -155
  611. data/lib/puppet/server/pelement.rb +0 -188
  612. data/lib/puppet/server/report.rb +0 -184
  613. data/lib/puppet/server/rights.rb +0 -78
  614. data/lib/puppet/server/servlet.rb +0 -274
  615. data/lib/puppet/statechange.rb +0 -129
  616. data/lib/puppet/storage.rb +0 -98
  617. data/lib/puppet/type/nameservice.rb +0 -264
  618. data/lib/puppet/type/nameservice/netinfo.rb +0 -232
  619. data/lib/puppet/type/nameservice/objectadd.rb +0 -146
  620. data/lib/puppet/type/nameservice/posix.rb +0 -12
  621. data/lib/puppet/type/nameservice/pw.rb +0 -107
  622. data/lib/puppet/type/package/apple.rb +0 -41
  623. data/lib/puppet/type/package/apt.rb +0 -107
  624. data/lib/puppet/type/package/blastwave.rb +0 -136
  625. data/lib/puppet/type/package/darwinport.rb +0 -97
  626. data/lib/puppet/type/package/dpkg.rb +0 -113
  627. data/lib/puppet/type/package/freebsd.rb +0 -19
  628. data/lib/puppet/type/package/gem.rb +0 -119
  629. data/lib/puppet/type/package/openbsd.rb +0 -112
  630. data/lib/puppet/type/package/ports.rb +0 -103
  631. data/lib/puppet/type/package/rpm.rb +0 -121
  632. data/lib/puppet/type/package/sun.rb +0 -174
  633. data/lib/puppet/type/package/sunfreeware.rb +0 -7
  634. data/lib/puppet/type/package/yum.rb +0 -52
  635. data/lib/puppet/type/parsedtype/host.rb +0 -144
  636. data/lib/puppet/type/parsedtype/mount.rb +0 -271
  637. data/lib/puppet/type/parsedtype/port.rb +0 -261
  638. data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
  639. data/lib/puppet/type/service/base.rb +0 -12
  640. data/lib/puppet/type/service/debian.rb +0 -46
  641. data/lib/puppet/type/service/redhat.rb +0 -38
  642. data/lib/puppet/type/state.rb +0 -393
  643. data/lib/puppet/type/symlink.rb +0 -186
  644. data/test/client/master.rb +0 -207
  645. data/test/language/rails.rb +0 -105
  646. data/test/other/parsedfile.rb +0 -58
  647. data/test/other/storage.rb +0 -100
  648. data/test/puppet/utiltest.rb +0 -299
  649. data/test/puppettest.rb +0 -1170
  650. data/test/server/authconfig.rb +0 -56
  651. data/test/server/authstore.rb +0 -218
  652. data/test/server/master.rb +0 -201
  653. data/test/server/report.rb +0 -93
  654. data/test/server/rights.rb +0 -41
  655. data/test/server/server.rb +0 -152
  656. data/test/test +0 -61
  657. data/test/types/basic.rb +0 -117
  658. data/test/types/component.rb +0 -298
  659. data/test/types/cron.rb +0 -718
  660. data/test/types/file.rb +0 -1314
  661. data/test/types/filesources.rb +0 -590
  662. data/test/types/group.rb +0 -323
  663. data/test/types/host.rb +0 -186
  664. data/test/types/mount.rb +0 -294
  665. data/test/types/package.rb +0 -538
  666. data/test/types/parameter.rb +0 -107
  667. data/test/types/port.rb +0 -201
  668. data/test/types/query.rb +0 -101
  669. data/test/types/state.rb +0 -92
  670. data/test/types/symlink.rb +0 -120
  671. data/test/types/tidy.rb +0 -102
  672. data/test/types/type.rb +0 -469
  673. data/test/types/user.rb +0 -563
@@ -0,0 +1,54 @@
1
+ # A simple wrapper for templates, so they don't have full access to
2
+ # the scope objects.
3
+ class Puppet::Parser::TemplateWrapper
4
+ attr_accessor :scope, :file
5
+ include Puppet::Util
6
+ Puppet::Util.logmethods(self)
7
+
8
+ def initialize(scope, file)
9
+ @scope = scope
10
+ @file = Puppet::Module::find_template(file)
11
+
12
+ unless FileTest.exists?(@file)
13
+ raise Puppet::ParseError,
14
+ "Could not find template %s" % file
15
+ end
16
+
17
+ # We'll only ever not have an interpreter in testing, but, eh.
18
+ if @scope.interp
19
+ @scope.interp.newfile(@file)
20
+ end
21
+ end
22
+
23
+ # Ruby treats variables like methods, so we can cheat here and
24
+ # trap missing vars like they were missing methods.
25
+ def method_missing(name, *args)
26
+ # We have to tell lookupvar to return :undefined to us when
27
+ # appropriate; otherwise it converts to "".
28
+ value = @scope.lookupvar(name.to_s, false)
29
+ if value != :undefined
30
+ return value
31
+ else
32
+ # Just throw an error immediately, instead of searching for
33
+ # other missingmethod things or whatever.
34
+ raise Puppet::ParseError,
35
+ "Could not find value for '%s'" % name
36
+ end
37
+ end
38
+
39
+ def result
40
+ result = nil
41
+ benchmark(:debug, "Interpolated template #{@file}") do
42
+ template = ERB.new(File.read(@file), 0, "-")
43
+ result = template.result(binding)
44
+ end
45
+
46
+ result
47
+ end
48
+
49
+ def to_s
50
+ "template[%s]" % @file
51
+ end
52
+ end
53
+
54
+ # $Id: templatewrapper.rb 2277 2007-03-09 00:48:28Z lutter $
@@ -0,0 +1,208 @@
1
+ # Created by Luke A. Kanies on 2006-11-24.
2
+ # Copyright (c) 2006. All rights reserved.
3
+
4
+ require 'puppet/external/gratr/digraph'
5
+ require 'puppet/external/gratr/import'
6
+ require 'puppet/external/gratr/dot'
7
+ require 'puppet/relationship'
8
+
9
+ # This class subclasses a graph class in order to handle relationships
10
+ # among resources.
11
+ class Puppet::PGraph < GRATR::Digraph
12
+ # This is the type used for splicing.
13
+ attr_accessor :container_type
14
+
15
+ include Puppet::Util
16
+
17
+ def add_edge!(*args)
18
+ @reversal = nil
19
+ super
20
+ end
21
+
22
+ def add_vertex!(*args)
23
+ @reversal = nil
24
+ super
25
+ end
26
+
27
+ def clear
28
+ @vertex_dict.clear
29
+ if defined? @edge_number
30
+ @edge_number.clear
31
+ end
32
+ end
33
+
34
+ # Make sure whichever edge has a label keeps the label
35
+ def copy_label(source, target, label)
36
+ # 'require' relationships will not have a label,
37
+ # and all 'subscribe' relationships have the same
38
+ # label, at least for now.
39
+
40
+ # Labels default to {}, so we can't just test for nil.
41
+ newlabel = label || {}
42
+ oldlabel = edge_label(source, target) || {}
43
+ if ! newlabel.empty? and oldlabel.empty?
44
+ edge_label_set(source, target, label)
45
+ # We should probably check to see if the labels both exist
46
+ # and don't match, but we'd just throw an error which the user
47
+ # couldn't do anyting about.
48
+ end
49
+ end
50
+
51
+ # Fail in a somewhat informative way if the graph has become cyclic.
52
+ def check_cycle(sorted)
53
+ return true if sorted.size == size()
54
+
55
+ bad = []
56
+ vertices.each do |v|
57
+ bad << v unless sorted.include?(v)
58
+ end
59
+
60
+ if bad.length > 0
61
+ raise Puppet::Error,
62
+ "Found dependency cycle involving %s" % bad.collect do |v|
63
+ v.to_s
64
+ end.join(", ")
65
+ else
66
+ raise Puppet::Error,
67
+ "Found dependency cycle but could not find the cause"
68
+ end
69
+ end
70
+
71
+ # Which resources a given resource depends upon.
72
+ def dependents(resource)
73
+ tree_from_vertex2(resource).keys
74
+ end
75
+
76
+ # Which resources depend upon the given resource.
77
+ def dependencies(resource)
78
+ # Cache the reversal graph, because it's somewhat expensive
79
+ # to create.
80
+ unless defined? @reversal and @reversal
81
+ @reversal = reversal
82
+ end
83
+ # Strangely, it's significantly faster to search a reversed
84
+ # tree in the :out direction than to search a normal tree
85
+ # in the :in direction.
86
+ @reversal.tree_from_vertex2(resource, :out).keys
87
+ #tree_from_vertex2(resource, :in).keys
88
+ end
89
+
90
+ # Override this method to use our class instead.
91
+ def edge_class()
92
+ Puppet::Relationship
93
+ end
94
+
95
+ # Determine all of the leaf nodes below a given vertex.
96
+ def leaves(vertex, type = :dfs)
97
+ tree = tree_from_vertex(vertex, type)
98
+ l = tree.keys.find_all { |c| adjacent(c, :direction => :out).empty? }
99
+ return l
100
+ end
101
+
102
+ # Collect all of the edges that the passed events match. Returns
103
+ # an array of edges.
104
+ def matching_edges(events, base = nil)
105
+ events.collect do |event|
106
+ source = base || event.source
107
+
108
+ unless vertex?(source)
109
+ Puppet.warning "Got an event from invalid vertex %s" % source.ref
110
+ next
111
+ end
112
+ # Get all of the edges that this vertex should forward events
113
+ # to, which is the same thing as saying all edges directly below
114
+ # This vertex in the graph.
115
+ adjacent(source, :direction => :out, :type => :edges).find_all do |edge|
116
+ edge.match?(event.event)
117
+ end
118
+ end.flatten
119
+ end
120
+
121
+ # Take container information from another graph and use it
122
+ # to replace any container vertices with their respective leaves.
123
+ # This creates direct relationships where there were previously
124
+ # indirect relationships through the containers.
125
+ def splice!(other, type)
126
+ # We have to get the container list via a topological sort on the
127
+ # configuration graph, because otherwise containers that contain
128
+ # other containers will add those containers back into the
129
+ # graph. We could get a similar affect by only setting relationships
130
+ # to container leaves, but that would result in many more
131
+ # relationships.
132
+ containers = other.topsort.find_all { |v| v.is_a?(type) and vertex?(v) }
133
+ containers.each do |container|
134
+ # Get the list of children from the other graph.
135
+ children = other.adjacent(container, :direction => :out)
136
+
137
+ # Just remove the container if it's empty.
138
+ if children.empty?
139
+ remove_vertex!(container)
140
+ next
141
+ end
142
+
143
+ # First create new edges for each of the :in edges
144
+ [:in, :out].each do |dir|
145
+ edges = adjacent(container, :direction => dir, :type => :edges)
146
+ edges.each do |edge|
147
+ children.each do |child|
148
+ if dir == :in
149
+ s = edge.source
150
+ t = child
151
+ else
152
+ s = child
153
+ t = edge.target
154
+ end
155
+
156
+ # We don't want to add multiple copies of the
157
+ # same edge, but we *do* want to make sure we
158
+ # keep labels around.
159
+ # XXX This will *not* work when we support multiple
160
+ # types of labels, and only works now because
161
+ # you can only do simple subscriptions.
162
+ if edge?(s, t)
163
+ copy_label(s, t, edge.label)
164
+ next
165
+ end
166
+ add_edge!(s, t, edge.label)
167
+ end
168
+
169
+ # Now get rid of the edge, so remove_vertex! works correctly.
170
+ remove_edge!(edge)
171
+ Puppet.debug "%s: %s => %s: %s" % [container,
172
+ edge.source, edge.target, edge?(edge)]
173
+ end
174
+ end
175
+ remove_vertex!(container)
176
+ end
177
+ end
178
+
179
+ # For some reason, unconnected vertices do not show up in
180
+ # this graph.
181
+ def to_jpg(path, name)
182
+ gv = vertices()
183
+ Dir.chdir(path) do
184
+ induced_subgraph(gv).write_to_graphic_file('jpg', name)
185
+ end
186
+ end
187
+
188
+ # A different way of walking a tree, and a much faster way than the
189
+ # one that comes with GRATR.
190
+ def tree_from_vertex2(start, direction = :out)
191
+ predecessor={}
192
+ walk(start, direction) do |parent, child|
193
+ predecessor[child] = parent
194
+ end
195
+ predecessor
196
+ end
197
+
198
+ # A support method for tree_from_vertex2. Just walk the tree and pass
199
+ # the parents and children.
200
+ def walk(source, direction, &block)
201
+ adjacent(source, :direction => direction).each do |target|
202
+ yield source, target
203
+ walk(target, direction, &block)
204
+ end
205
+ end
206
+ end
207
+
208
+ # $Id: pgraph.rb 2308 2007-03-19 04:40:25Z luke $
@@ -0,0 +1,143 @@
1
+ # the class responsible for actually doing any work
2
+
3
+ # enables no-op and logging/rollback
4
+
5
+ module Puppet
6
+ # Handle all of the work around performing an actual change,
7
+ # including calling 'sync' on the properties and producing events.
8
+ class PropertyChange
9
+ attr_accessor :is, :should, :type, :path, :property, :transaction, :changed, :proxy
10
+
11
+ # The log file generated when this object was changed.
12
+ attr_reader :report
13
+
14
+ # Switch the goals of the property, thus running the change in reverse.
15
+ def backward
16
+ @property.should = @is
17
+ @property.retrieve
18
+
19
+ unless defined? @transaction
20
+ raise Puppet::Error,
21
+ "PropertyChange '%s' tried to be executed outside of transaction" %
22
+ self
23
+ end
24
+ unless @property.insync?
25
+ @property.info "Backing %s" % self
26
+ return self.go
27
+ else
28
+ @property.debug "rollback is already in sync: %s vs. %s" %
29
+ [@property.is.inspect, @property.should.inspect]
30
+ return nil
31
+ end
32
+ end
33
+
34
+ def changed?
35
+ self.changed
36
+ end
37
+
38
+ # Create our event object.
39
+ def event(name)
40
+ # default to a simple event type
41
+ unless name.is_a?(Symbol)
42
+ @property.warning("Property '%s' returned invalid event '%s'; resetting to default" %
43
+ [@property.class,event])
44
+
45
+ event = @property.parent.class.name.id2name + "_changed"
46
+ end
47
+
48
+ Puppet::Event.new(
49
+ :event => name,
50
+ :transaction => @transaction,
51
+ :source => self.source
52
+ )
53
+ end
54
+
55
+ def initialize(property)
56
+ unless property.is_a?(Puppet::Type::Property)
57
+ raise Puppet::DevError, "Got a %s instead of a property" %
58
+ property.class
59
+ end
60
+ @property = property
61
+ @path = [property.path,"change"].flatten
62
+ @is = property.is
63
+
64
+ @should = property.should
65
+
66
+ @changed = false
67
+ end
68
+
69
+ # Perform the actual change. This method can go either forward or
70
+ # backward, and produces an event.
71
+ def go
72
+ if skip?
73
+ if self.noop
74
+ return [event(:noop)]
75
+ else
76
+ return nil
77
+ end
78
+ end
79
+
80
+ # The transaction catches any exceptions here.
81
+ events = @property.sync
82
+ if events.nil?
83
+ return nil
84
+ end
85
+
86
+ if events.is_a?(Array)
87
+ if events.empty?
88
+ return nil
89
+ end
90
+ else
91
+ events = [events]
92
+ end
93
+
94
+ return events.collect { |name|
95
+ @report = @property.log(@property.change_to_s)
96
+ event(name)
97
+ }
98
+ end
99
+
100
+ def forward
101
+ #@property.debug "moving change forward"
102
+
103
+ unless defined? @transaction
104
+ raise Puppet::Error,
105
+ "PropertyChange '%s' tried to be executed outside of transaction" %
106
+ self
107
+ end
108
+
109
+ return self.go
110
+ end
111
+
112
+ def noop
113
+ return @property.noop
114
+ end
115
+
116
+ def skip?
117
+ if @property.insync?
118
+ @property.info "Already in sync"
119
+ return true
120
+ end
121
+
122
+ if @property.noop
123
+ @property.log "is %s, should be %s (noop)" %
124
+ [property.is_to_s, property.should_to_s]
125
+ #@property.debug "%s is noop" % @property
126
+ return true
127
+ end
128
+ return false
129
+ end
130
+
131
+ def source
132
+ self.proxy || @property.parent
133
+ end
134
+
135
+ def to_s
136
+ return "change %s.%s(%s)" %
137
+ [@transaction.object_id, self.object_id, @property.change_to_s]
138
+ #return "change %s.%s" % [@transaction.object_id, self.object_id]
139
+ end
140
+ end
141
+ end
142
+
143
+ # $Id: propertychange.rb 2286 2007-03-17 23:16:37Z luke $
@@ -0,0 +1,302 @@
1
+ # The container class for implementations.
2
+ class Puppet::Provider
3
+ include Puppet::Util
4
+ include Puppet::Util::Errors
5
+
6
+ Puppet::Util.logmethods(self, true)
7
+
8
+ class << self
9
+ # Include the util module so we have access to things like 'binary'
10
+ include Puppet::Util, Puppet::Util::Docs
11
+ include Puppet::Util::Logging
12
+ attr_accessor :name
13
+ attr_reader :model
14
+ attr_writer :doc
15
+ end
16
+
17
+ attr_accessor :model
18
+
19
+ def self.command(name)
20
+ name = symbolize(name)
21
+
22
+ if defined?(@commands) and command = @commands[name]
23
+ # nothing
24
+ elsif superclass.respond_to? :command and command = superclass.command(name)
25
+ # nothing
26
+ else
27
+ raise Puppet::DevError, "No command %s defined for provider %s" %
28
+ [name, self.name]
29
+ end
30
+
31
+ if command == :missing
32
+ return nil
33
+ end
34
+
35
+ command
36
+ end
37
+
38
+ # Define commands that are not optional.
39
+ def self.commands(hash)
40
+ optional_commands(hash) do |name, path|
41
+ confine :exists => path
42
+ end
43
+ end
44
+
45
+ def self.confine(hash)
46
+ hash.each do |p,v|
47
+ if v.is_a? Array
48
+ @confines[p] += v
49
+ else
50
+ @confines[p] << v
51
+ end
52
+ end
53
+ end
54
+
55
+ # Does this implementation match all of the default requirements? If
56
+ # defaults are empty, we return false.
57
+ def self.default?
58
+ return false if @defaults.empty?
59
+ if @defaults.find do |fact, values|
60
+ values = [values] unless values.is_a? Array
61
+ if fval = Facter.value(fact).to_s and fval != ""
62
+ fval = fval.to_s.downcase.intern
63
+ else
64
+ return false
65
+ end
66
+
67
+ # If any of the values match, we're a default.
68
+ if values.find do |value| fval == value.to_s.downcase.intern end
69
+ false
70
+ else
71
+ true
72
+ end
73
+ end
74
+ return false
75
+ else
76
+ return true
77
+ end
78
+ end
79
+
80
+ # Store how to determine defaults.
81
+ def self.defaultfor(hash)
82
+ hash.each do |d,v|
83
+ @defaults[d] = v
84
+ end
85
+ end
86
+
87
+ def self.defaultnum
88
+ @defaults.length
89
+ end
90
+
91
+ def self.initvars
92
+ @defaults = {}
93
+ @commands = {}
94
+ @origcommands = {}
95
+ @confines = Hash.new do |hash, key|
96
+ hash[key] = []
97
+ end
98
+ end
99
+
100
+ # Create the methods for a given command.
101
+ def self.make_command_methods(name)
102
+ # Now define a method for that command
103
+ unless metaclass.method_defined? name
104
+ meta_def(name) do |*args|
105
+ unless command(name)
106
+ raise Puppet::Error, "Command %s is missing" % name
107
+ end
108
+ if args.empty?
109
+ cmd = [command(name)]
110
+ else
111
+ cmd = [command(name)] + args
112
+ end
113
+ # This might throw an ExecutionFailure, but the system above
114
+ # will catch it, if so.
115
+ return execute(cmd)
116
+ end
117
+
118
+ # And then define an instance method that just calls the class method.
119
+ # We need both, so both instances and classes can easily run the commands.
120
+ unless method_defined? name
121
+ define_method(name) do |*args|
122
+ self.class.send(name, *args)
123
+ end
124
+ end
125
+ end
126
+ end
127
+
128
+ # Create getter/setter methods for each property our model supports.
129
+ # They all get stored in @property_hash. This method is useful
130
+ # for those providers that use prefetch and flush.
131
+ def self.mkmodelmethods
132
+ [model.validproperties, model.parameters].flatten.each do |attr|
133
+ attr = symbolize(attr)
134
+ define_method(attr) do
135
+ @property_hash[attr] || :absent
136
+ end
137
+
138
+ define_method(attr.to_s + "=") do |val|
139
+ @property_hash[attr] = val
140
+ end
141
+ end
142
+ end
143
+
144
+ # Add the feature module immediately, so its methods are available to the
145
+ # providers.
146
+ def self.model=(model)
147
+ @model = model
148
+ #if mod = model.feature_module
149
+ # extend(mod)
150
+ # include(mod)
151
+ #end
152
+ end
153
+
154
+ self.initvars
155
+
156
+ # Define one or more binaries we'll be using. If a block is passed, yield the name
157
+ # and path to the block (really only used by 'commands').
158
+ def self.optional_commands(hash)
159
+ hash.each do |name, path|
160
+ name = symbolize(name)
161
+ @origcommands[name] = path
162
+
163
+ # Try to find the full path (or verify already-full paths); otherwise
164
+ # store that the command is missing so we know it's defined but absent.
165
+ if tmp = binary(path)
166
+ path = tmp
167
+ @commands[name] = path
168
+ else
169
+ @commands[name] = :missing
170
+ end
171
+
172
+ if block_given?
173
+ yield(name, path)
174
+ end
175
+
176
+ # Now define the class and instance methods.
177
+ make_command_methods(name)
178
+ end
179
+ end
180
+
181
+ # Check whether this implementation is suitable for our platform.
182
+ def self.suitable?
183
+ # A single false result is sufficient to turn the whole thing down.
184
+ # We don't return 'true' until the very end, though, so that every
185
+ # confine is tested.
186
+ @confines.each do |check, values|
187
+ case check
188
+ when :exists:
189
+ values.each do |value|
190
+ unless value and FileTest.exists? value
191
+ debug "Not suitable: missing %s" % value
192
+ return false
193
+ end
194
+ end
195
+ when :true:
196
+ values.each do |v|
197
+ debug "Not suitable: false value"
198
+ return false unless v
199
+ end
200
+ when :false:
201
+ values.each do |v|
202
+ debug "Not suitable: true value"
203
+ return false if v
204
+ end
205
+ else # Just delegate everything else to facter
206
+ if result = Facter.value(check)
207
+ result = result.to_s.downcase.intern
208
+
209
+ found = values.find do |v|
210
+ result == v.to_s.downcase.intern
211
+ end
212
+ unless found
213
+ debug "Not suitable: %s not in %s" % [check, values]
214
+ return false
215
+ end
216
+ else
217
+ return false
218
+ end
219
+ end
220
+ end
221
+
222
+ return true
223
+ end
224
+
225
+ # Does this provider support the specified parameter?
226
+ def self.supports_parameter?(param)
227
+ if param.is_a?(Class)
228
+ klass = param
229
+ else
230
+ unless klass = @model.attrclass(param)
231
+ raise Puppet::DevError, "'%s' is not a valid parameter for %s" % [param, @model.name]
232
+ end
233
+ end
234
+ return true unless features = klass.required_features
235
+
236
+ if satisfies?(*features)
237
+ return true
238
+ else
239
+ return false
240
+ end
241
+ end
242
+
243
+ def self.to_s
244
+ unless defined? @str
245
+ if self.model
246
+ @str = "%s provider %s" % [@model.name, self.name]
247
+ else
248
+ @str = "unattached provider %s" % [self.name]
249
+ end
250
+ end
251
+ @str
252
+ end
253
+
254
+ dochook(:defaults) do
255
+ if @defaults.length > 0
256
+ return " Default for " + @defaults.collect do |f, v|
257
+ "``#{f}`` == ``#{v}``"
258
+ end.join(" and ") + "."
259
+ end
260
+ end
261
+
262
+ dochook(:commands) do
263
+ if @origcommands.length > 0
264
+ return " Required binaries: " + @origcommands.collect do |n, c|
265
+ "``#{c}``"
266
+ end.join(", ") + "."
267
+ end
268
+ end
269
+
270
+ dochook(:features) do
271
+ if features().length > 0
272
+ return " Supported features: " + features().collect do |f|
273
+ "``#{f}``"
274
+ end.join(", ") + "."
275
+ end
276
+ end
277
+
278
+ # Remove the reference to the model, so GC can clean up.
279
+ def clear
280
+ @model = nil
281
+ end
282
+
283
+ # Retrieve a named command.
284
+ def command(name)
285
+ self.class.command(name)
286
+ end
287
+
288
+ def initialize(model)
289
+ @model = model
290
+ @property_hash = {}
291
+ end
292
+
293
+ def name
294
+ @model.name
295
+ end
296
+
297
+ def to_s
298
+ "%s(provider=%s)" % [@model.to_s, self.class.name]
299
+ end
300
+ end
301
+
302
+ # $Id: provider.rb 2444 2007-05-01 03:14:09Z luke $