puppet 0.18.4 → 0.22.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -1,7 +1,5 @@
1
1
  module Puppet
2
- Puppet.type(:file).newstate(:target) do
3
- attr_accessor :linkmaker
4
-
2
+ Puppet.type(:file).newproperty(:target) do
5
3
  desc "The target for creating a link. Currently, symlinks are the
6
4
  only type supported."
7
5
 
@@ -12,7 +10,12 @@ module Puppet
12
10
 
13
11
  # Anything else, basically
14
12
  newvalue(/./) do
15
- if @parent.state(:ensure).insync?
13
+ if ! @parent.should(:ensure)
14
+ @parent[:ensure] = :link
15
+ end
16
+
17
+ # Only call mklink if ensure() didn't call us in the first place.
18
+ if @parent.property(:ensure).insync?
16
19
  mklink()
17
20
  end
18
21
  end
@@ -21,20 +24,16 @@ module Puppet
21
24
  def mklink
22
25
  target = self.should
23
26
 
24
- if stat = @parent.stat
25
- unless @parent.handlebackup
26
- self.fail "Could not back up; will not replace with link"
27
- end
27
+ # Clean up any existing objects. The argument is just for logging,
28
+ # it doesn't determine what's removed.
29
+ @parent.remove_existing(target)
28
30
 
29
- case stat.ftype
30
- when "directory":
31
- FileUtils.rmtree(@parent[:path])
32
- else
33
- File.unlink(@parent[:path])
34
- end
31
+ if FileTest.exists?(@parent[:path])
32
+ raise Puppet::Error, "Could not remove existing file"
35
33
  end
34
+
36
35
  Dir.chdir(File.dirname(@parent[:path])) do
37
- Puppet::Util.asuser(@parent.asuser()) do
36
+ Puppet::Util::SUIDManager.asuser(@parent.asuser()) do
38
37
  mode = @parent.should(:mode)
39
38
  if mode
40
39
  Puppet::Util.withumask(000) do
@@ -49,41 +48,26 @@ module Puppet
49
48
  end
50
49
  end
51
50
 
52
- def retrieve
53
- if @parent.state(:ensure).should == :directory
54
- @is = self.should
55
- @linkmaker = true
51
+ def insync?
52
+ if [:nochange, :notlink].include?(self.should) or @parent.recurse?
53
+ return true
56
54
  else
57
- if stat = @parent.stat
58
- # If we're just checking the value
59
- if (should = self.should) and
60
- (should != :notlink) and
61
- File.exists?(should) and
62
- (tstat = File.lstat(should)) and
63
- (tstat.ftype == "directory") and
64
- @parent.recurse?
65
- unless @parent.recurse?
66
- raise "wtf?"
67
- end
68
- warning "Changing ensure to directory; recurse is %s but %s" %
69
- [@parent[:recurse].inspect, @parent.recurse?]
70
- @parent[:ensure] = :directory
71
- @is = should
72
- @linkmaker = true
73
- else
74
- if stat.ftype == "link"
75
- @is = File.readlink(@parent[:path])
76
- @linkmaker = false
77
- else
78
- @is = :notlink
79
- end
80
- end
55
+ return super
56
+ end
57
+ end
58
+
59
+ def retrieve
60
+ if stat = @parent.stat
61
+ if stat.ftype == "link"
62
+ @is = File.readlink(@parent[:path])
81
63
  else
82
- @is = :absent
64
+ @is = :notlink
83
65
  end
66
+ else
67
+ @is = :absent
84
68
  end
85
69
  end
86
70
  end
87
71
  end
88
72
 
89
- # $Id: target.rb 1303 2006-06-20 01:34:24Z luke $
73
+ # $Id: target.rb 2269 2007-03-08 07:36:46Z luke $
@@ -1,5 +1,5 @@
1
1
  module Puppet
2
- Puppet.type(:file).newstate(:type) do
2
+ Puppet.type(:file).newproperty(:type) do
3
3
  require 'etc'
4
4
  desc "A read-only state to check the file type."
5
5
 
@@ -25,4 +25,4 @@ module Puppet
25
25
  end
26
26
  end
27
27
 
28
- # $Id: type.rb 862 2006-01-31 02:07:56Z luke $
28
+ # $Id: type.rb 2169 2007-02-07 06:47:10Z luke $
@@ -1,6 +1,6 @@
1
- require 'puppet/server/filebucket'
2
-
3
1
  module Puppet
2
+ require 'puppet/network/client'
3
+
4
4
  newtype(:filebucket) do
5
5
  @doc = "A repository for backing up files. If no filebucket is
6
6
  defined, then files will be backed up in their current directory,
@@ -17,7 +17,7 @@ module Puppet
17
17
  undo transactions.
18
18
 
19
19
  You will normally want to define a single filebucket for your
20
- whole network and then use that as the default backup location:
20
+ whole network and then use that as the default backup location::
21
21
 
22
22
  # Define the bucket
23
23
  filebucket { main: server => puppet }
@@ -26,10 +26,7 @@ module Puppet
26
26
  File { backup => main }
27
27
 
28
28
  Puppetmaster servers create a filebucket by default, so this will
29
- work in a default configuration.
30
- "
31
-
32
- @states = []
29
+ work in a default configuration."
33
30
 
34
31
  newparam(:name) do
35
32
  desc "The name of the filebucket."
@@ -54,7 +51,7 @@ module Puppet
54
51
  not specified, then the bucket is remote and *server* must be
55
52
  specified."
56
53
 
57
- defaultto { Puppet[:bucketdir] }
54
+ defaultto { Puppet[:clientbucketdir] }
58
55
  end
59
56
 
60
57
  # get the actual filebucket object
@@ -65,6 +62,13 @@ module Puppet
65
62
  return nil
66
63
  end
67
64
  end
65
+
66
+ # Create a default filebucket.
67
+ def self.mkdefaultbucket
68
+ unless self["puppet"]
69
+ self.create :name => "puppet", :path => Puppet[:clientbucketdir]
70
+ end
71
+ end
68
72
 
69
73
  def self.list
70
74
  self.collect do |obj| obj.name end
@@ -81,7 +85,7 @@ module Puppet
81
85
  def mkbucket
82
86
  if self[:server]
83
87
  begin
84
- @bucket = Puppet::Client::Dipper.new(
88
+ @bucket = Puppet::Network::Client.client(:Dipper).new(
85
89
  :Server => self[:server],
86
90
  :Port => self[:port]
87
91
  )
@@ -91,14 +95,14 @@ module Puppet
91
95
  )
92
96
  end
93
97
  else
94
- unless self[:path]
95
- self[:path] = Puppet[:bucketdir]
96
- end
97
98
  begin
98
- @bucket = Puppet::Client::Dipper.new(
99
+ @bucket = Puppet::Network::Client.client(:Dipper).new(
99
100
  :Path => self[:path]
100
101
  )
101
102
  rescue => detail
103
+ if Puppet[:trace]
104
+ puts detail.backtrace
105
+ end
102
106
  self.fail(
103
107
  "Could not create local filebucket: %s" % detail
104
108
  )
@@ -110,4 +114,4 @@ module Puppet
110
114
  end
111
115
  end
112
116
 
113
- # $Id: pfilebucket.rb 1373 2006-07-06 04:39:59Z luke $
117
+ # $Id: pfilebucket.rb 2408 2007-04-24 02:41:16Z luke $
@@ -0,0 +1,121 @@
1
+ require 'puppet/type/parsedtype'
2
+
3
+ #module Puppet
4
+ # newtype(:port) do
5
+ # @doc = "Installs and manages port entries. For most systems, these
6
+ # entries will just be in /etc/services, but some systems (notably OS X)
7
+ # will have different solutions."
8
+ #
9
+ # ensurable
10
+ #
11
+ # newproperty(:protocols) do
12
+ # desc "The protocols the port uses. Valid values are *udp* and *tcp*.
13
+ # Most services have both protocols, but not all. If you want
14
+ # both protocols, you must specify that; Puppet replaces the
15
+ # current values, it does not merge with them. If you specify
16
+ # multiple protocols they must be as an array."
17
+ #
18
+ # def is=(value)
19
+ # case value
20
+ # when String
21
+ # @is = value.split(/\s+/)
22
+ # else
23
+ # @is = value
24
+ # end
25
+ # end
26
+ #
27
+ # def is
28
+ # @is
29
+ # end
30
+ #
31
+ # # We actually want to return the whole array here, not just the first
32
+ # # value.
33
+ # def should
34
+ # if defined? @should
35
+ # if @should[0] == :absent
36
+ # return :absent
37
+ # else
38
+ # return @should
39
+ # end
40
+ # else
41
+ # return nil
42
+ # end
43
+ # end
44
+ #
45
+ # validate do |value|
46
+ # valids = ["udp", "tcp", "ddp", :absent]
47
+ # unless valids.include? value
48
+ # raise Puppet::Error,
49
+ # "Protocols can be either 'udp' or 'tcp', not %s" % value
50
+ # end
51
+ # end
52
+ # end
53
+ #
54
+ # newproperty(:number) do
55
+ # desc "The port number."
56
+ # end
57
+ #
58
+ # newproperty(:description) do
59
+ # desc "The port description."
60
+ # end
61
+ #
62
+ # newproperty(:alias) do
63
+ # desc "Any aliases the port might have. Multiple values must be
64
+ # specified as an array. Note that this property has the same name as
65
+ # one of the metaparams; using this property to set aliases will make
66
+ # those aliases available in your Puppet scripts and also on disk."
67
+ #
68
+ # # We actually want to return the whole array here, not just the first
69
+ # # value.
70
+ # def should
71
+ # if defined? @should
72
+ # if @should[0] == :absent
73
+ # return :absent
74
+ # else
75
+ # return @should
76
+ # end
77
+ # else
78
+ # return nil
79
+ # end
80
+ # end
81
+ #
82
+ # validate do |value|
83
+ # if value.is_a? String and value =~ /\s/
84
+ # raise Puppet::Error,
85
+ # "Aliases cannot have whitespace in them: %s" %
86
+ # value.inspect
87
+ # end
88
+ # end
89
+ #
90
+ # munge do |value|
91
+ # unless value == "absent" or value == :absent
92
+ # # Add the :alias metaparam in addition to the property
93
+ # @parent.newmetaparam(
94
+ # @parent.class.metaparamclass(:alias), value
95
+ # )
96
+ # end
97
+ # value
98
+ # end
99
+ # end
100
+ #
101
+ # newproperty(:target) do
102
+ # desc "The file in which to store service information. Only used by
103
+ # those providers that write to disk (i.e., not NetInfo)."
104
+ #
105
+ # defaultto { if @parent.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
106
+ # @parent.class.defaultprovider.default_target
107
+ # else
108
+ # nil
109
+ # end
110
+ # }
111
+ # end
112
+ #
113
+ # newparam(:name) do
114
+ # desc "The port name."
115
+ #
116
+ # isnamevar
117
+ # end
118
+ # end
119
+ #end
120
+
121
+ # $Id: port.rb 2169 2007-02-07 06:47:10Z luke $
@@ -0,0 +1,530 @@
1
+ # The virtual base class for properties, which are the self-contained building
2
+ # blocks for actually doing work on the system.
3
+
4
+ require 'puppet'
5
+ require 'puppet/element'
6
+ require 'puppet/propertychange'
7
+ require 'puppet/parameter'
8
+
9
+ module Puppet
10
+ class Property < Puppet::Parameter
11
+ attr_accessor :is
12
+
13
+ # Because 'should' uses an array, we have a special method for handling
14
+ # it. We also want to keep copies of the original values, so that
15
+ # they can be retrieved and compared later when merging.
16
+ attr_reader :shouldorig
17
+
18
+ class << self
19
+ attr_accessor :unmanaged
20
+ attr_reader :name
21
+
22
+ def checkable
23
+ @checkable = true
24
+ end
25
+
26
+ def uncheckable
27
+ @checkable = false
28
+ end
29
+
30
+ def checkable?
31
+ if defined? @checkable
32
+ return @checkable
33
+ else
34
+ return true
35
+ end
36
+ end
37
+ end
38
+
39
+ # Look up a value's name, so we can find options and such.
40
+ def self.value_name(value)
41
+ name = symbolize(value)
42
+ if @parametervalues[name]
43
+ return name
44
+ elsif ary = self.match?(value)
45
+ return ary[0]
46
+ else
47
+ return nil
48
+ end
49
+ end
50
+
51
+ # Retrieve an option set when a value was defined.
52
+ def self.value_option(name, option)
53
+ if option.is_a?(String)
54
+ option = symbolize(option)
55
+ end
56
+ if hash = @parameteroptions[name]
57
+ hash[option]
58
+ else
59
+ nil
60
+ end
61
+ end
62
+
63
+ # Create the value management variables.
64
+ def self.initvars
65
+ @parametervalues = {}
66
+ @aliasvalues = {}
67
+ @parameterregexes = {}
68
+ @parameteroptions = {}
69
+ end
70
+
71
+ # Define a new valid value for a property. You must provide the value itself,
72
+ # usually as a symbol, or a regex to match the value.
73
+ #
74
+ # The first argument to the method is either the value itself or a regex.
75
+ # The second argument is an option hash; valid options are:
76
+ # * <tt>:event</tt>: The event that should be returned when this value is set.
77
+ # * <tt>:call</tt>: When to call any associated block. The default value
78
+ # is ``instead``, which means to call the value instead of calling the
79
+ # provider. You can also specify ``before`` or ``after``, which will
80
+ # call both the block and the provider, according to the order you specify
81
+ # (the ``first`` refers to when the block is called, not the provider).
82
+ def self.newvalue(name, options = {}, &block)
83
+ name = name.intern if name.is_a? String
84
+
85
+ @parameteroptions[name] = {}
86
+ paramopts = @parameteroptions[name]
87
+
88
+ # Symbolize everything
89
+ options.each do |opt, val|
90
+ paramopts[symbolize(opt)] = symbolize(val)
91
+ end
92
+
93
+ # By default, call the block instead of the provider.
94
+ if block_given?
95
+ paramopts[:call] ||= :instead
96
+ else
97
+ paramopts[:call] ||= :none
98
+ end
99
+ # If there was no block given, we still want to store the information
100
+ # for validation, but we won't be defining a method
101
+ block ||= true
102
+
103
+ case name
104
+ when Symbol
105
+ if @parametervalues.include?(name)
106
+ Puppet.warning "%s reassigning value %s" % [self.name, name]
107
+ end
108
+ @parametervalues[name] = block
109
+
110
+ if block_given?
111
+ method = "set_" + name.to_s
112
+ settor = paramopts[:settor] || (self.name.to_s + "=")
113
+ define_method(method, &block)
114
+ paramopts[:method] = method
115
+ end
116
+ when Regexp
117
+ # The regexes are handled in parameter.rb. This value is used
118
+ # for validation.
119
+ @parameterregexes[name] = block
120
+
121
+ # This is used for looking up the block for execution.
122
+ if block_given?
123
+ paramopts[:block] = block
124
+ end
125
+ else
126
+ raise ArgumentError, "Invalid value %s of type %s" %
127
+ [name, name.class]
128
+ end
129
+ end
130
+
131
+ # Call the provider method.
132
+ def call_provider(value)
133
+ begin
134
+ provider.send(self.class.name.to_s + "=", value)
135
+ rescue NoMethodError
136
+ self.fail "The %s provider can not handle attribute %s" %
137
+ [provider.class.name, self.class.name]
138
+ end
139
+ end
140
+
141
+ # Call the dynamically-created method associated with our value, if
142
+ # there is one.
143
+ def call_valuemethod(name, value)
144
+ event = nil
145
+ if method = self.class.value_option(name, :method) and self.respond_to?(method)
146
+ self.debug "setting %s (currently %s)" % [value, self.is]
147
+
148
+ begin
149
+ event = self.send(method)
150
+ rescue Puppet::Error
151
+ raise
152
+ rescue => detail
153
+ if Puppet[:trace]
154
+ puts detail.backtrace
155
+ end
156
+ error = Puppet::Error.new("Could not set %s on %s: %s" %
157
+ [value, self.class.name, detail], @parent.line, @parent.file)
158
+ error.set_backtrace detail.backtrace
159
+ raise error
160
+ end
161
+ elsif block = self.class.value_option(name, :block)
162
+ # FIXME It'd be better here to define a method, so that
163
+ # the blocks could return values.
164
+ # If the regex was defined with no associated block, then just pass
165
+ # through and the correct event will be passed back.
166
+ event = self.instance_eval(&block)
167
+ end
168
+ return event, name
169
+ end
170
+
171
+ # How should a property change be printed as a string?
172
+ def change_to_s
173
+ begin
174
+ if @is == :absent
175
+ return "defined '%s' as '%s'" %
176
+ [self.name, self.should_to_s]
177
+ elsif self.should == :absent or self.should == [:absent]
178
+ return "undefined %s from '%s'" %
179
+ [self.name, self.is_to_s]
180
+ else
181
+ return "%s changed '%s' to '%s'" %
182
+ [self.name, self.is_to_s, self.should_to_s]
183
+ end
184
+ rescue Puppet::Error, Puppet::DevError
185
+ raise
186
+ rescue => detail
187
+ raise Puppet::DevError, "Could not convert change %s to string: %s" %
188
+ [self.name, detail]
189
+ end
190
+ end
191
+
192
+ # Figure out which event to return.
193
+ def event(name, event = nil)
194
+ if value_event = self.class.value_option(name, :event)
195
+ return value_event
196
+ else
197
+ if event and event.is_a?(Symbol)
198
+ if event == :nochange
199
+ return nil
200
+ else
201
+ return event
202
+ end
203
+ else
204
+ if self.class.name == :ensure
205
+ event = case self.should
206
+ when :present: (@parent.class.name.to_s + "_created").intern
207
+ when :absent: (@parent.class.name.to_s + "_removed").intern
208
+ else
209
+ (@parent.class.name.to_s + "_changed").intern
210
+ end
211
+ else
212
+ event = (@parent.class.name.to_s + "_changed").intern
213
+ end
214
+ end
215
+ end
216
+
217
+ return event
218
+ end
219
+
220
+ # initialize our property
221
+ def initialize(hash = {})
222
+ @is = nil
223
+ super
224
+ end
225
+
226
+ def inspect
227
+ str = "Property('%s', " % self.name
228
+ if self.is
229
+ str += "@is = '%s', " % [self.is]
230
+ else
231
+ str += "@is = nil, "
232
+ end
233
+
234
+ if defined? @should and @should
235
+ str += "@should = '%s')" % @should.join(", ")
236
+ else
237
+ str += "@should = nil)"
238
+ end
239
+ end
240
+
241
+ # Determine whether the property is in-sync or not. If @should is
242
+ # not defined or is set to a non-true value, then we do not have
243
+ # a valid value for it and thus consider the property to be in-sync
244
+ # since we cannot fix it. Otherwise, we expect our should value
245
+ # to be an array, and if @is matches any of those values, then
246
+ # we consider it to be in-sync.
247
+ def insync?
248
+ #debug "%s value is '%s', should be '%s'" %
249
+ # [self,self.is.inspect,self.should.inspect]
250
+ unless defined? @should and @should
251
+ return true
252
+ end
253
+
254
+ unless @should.is_a?(Array)
255
+ self.devfail "%s's should is not array" % self.class.name
256
+ end
257
+
258
+ # an empty array is analogous to no should values
259
+ if @should.empty?
260
+ return true
261
+ end
262
+
263
+ # Look for a matching value
264
+ @should.each { |val|
265
+ if @is == val or @is == val.to_s
266
+ return true
267
+ end
268
+ }
269
+
270
+ # otherwise, return false
271
+ return false
272
+ end
273
+
274
+ # because the @should and @is vars might be in weird formats,
275
+ # we need to set up a mechanism for pretty printing of the values
276
+ # default to just the values, but this way individual properties can
277
+ # override these methods
278
+ def is_to_s
279
+ @is
280
+ end
281
+
282
+ # Send a log message.
283
+ def log(msg)
284
+ unless @parent[:loglevel]
285
+ self.devfail "Parent %s has no loglevel" %
286
+ @parent.name
287
+ end
288
+ Puppet::Util::Log.create(
289
+ :level => @parent[:loglevel],
290
+ :message => msg,
291
+ :source => self
292
+ )
293
+ end
294
+
295
+ # each property class must define the name() method, and property instances
296
+ # do not change that name
297
+ # this implicitly means that a given object can only have one property
298
+ # instance of a given property class
299
+ def name
300
+ return self.class.name
301
+ end
302
+
303
+ # for testing whether we should actually do anything
304
+ def noop
305
+ unless defined? @noop
306
+ @noop = false
307
+ end
308
+ if self.parent.respond_to?(:noop)
309
+ tmp = @noop || self.parent.noop || Puppet[:noop] || false
310
+ else
311
+ tmp = @noop || Puppet[:noop] || false
312
+ end
313
+ return tmp
314
+ end
315
+
316
+ # By default, call the method associated with the property name on our
317
+ # provider. In other words, if the property name is 'gid', we'll call
318
+ # 'provider.gid' to retrieve the current value.
319
+ def retrieve
320
+ @is = provider.send(self.class.name)
321
+ end
322
+
323
+ # Set our value, using the provider, an associated block, or both.
324
+ def set(value)
325
+ # Set a name for looking up associated options like the event.
326
+ name = self.class.value_name(value)
327
+
328
+ call = self.class.value_option(name, :call)
329
+
330
+ # If we're supposed to call the block first or instead, call it now
331
+ if call == :before or call == :instead
332
+ event, tmp = call_valuemethod(name, value)
333
+ end
334
+ unless call == :instead
335
+ if @parent.provider
336
+ call_provider(value)
337
+ else
338
+ # They haven't provided a block, and our parent does not have
339
+ # a provider, so we have no idea how to handle this.
340
+ self.fail "%s cannot handle values of type %s" %
341
+ [self.class.name, value.inspect]
342
+ end
343
+ end
344
+ if call == :after
345
+ event, tmp = call_valuemethod(name, value)
346
+ end
347
+
348
+ return event(name, event)
349
+ end
350
+
351
+ # Only return the first value
352
+ def should
353
+ if defined? @should
354
+ unless @should.is_a?(Array)
355
+ self.devfail "should for %s on %s is not an array" %
356
+ [self.class.name, @parent.name]
357
+ end
358
+ return @should[0]
359
+ else
360
+ return nil
361
+ end
362
+ end
363
+
364
+ # Set the should value.
365
+ def should=(values)
366
+ unless values.is_a?(Array)
367
+ values = [values]
368
+ end
369
+
370
+ @shouldorig = values
371
+
372
+ if self.respond_to?(:validate)
373
+ values.each { |val|
374
+ validate(val)
375
+ }
376
+ end
377
+ if self.respond_to?(:munge)
378
+ @should = values.collect { |val|
379
+ self.munge(val)
380
+ }
381
+ else
382
+ @should = values
383
+ end
384
+ end
385
+
386
+ def should_to_s
387
+ if defined? @should
388
+ @should.join(" ")
389
+ else
390
+ return nil
391
+ end
392
+ end
393
+
394
+ # The default 'sync' method only selects among a list of registered
395
+ # values.
396
+ def sync
397
+ if self.insync?
398
+ self.info "already in sync"
399
+ return nil
400
+ end
401
+ unless self.class.values
402
+ self.devfail "No values defined for %s" %
403
+ self.class.name
404
+ end
405
+
406
+ if value = self.should
407
+ set(value)
408
+ else
409
+ self.devfail "Got a nil value for should"
410
+ end
411
+ end
412
+
413
+ # The properties need to return tags so that logs correctly collect them.
414
+ def tags
415
+ unless defined? @tags
416
+ @tags = []
417
+ # This might not be true in testing
418
+ if @parent.respond_to? :tags
419
+ @tags = @parent.tags
420
+ end
421
+ @tags << self.name
422
+ end
423
+ @tags
424
+ end
425
+
426
+ def to_s
427
+ return "%s(%s)" % [@parent.name,self.name]
428
+ end
429
+
430
+ # Provide a common hook for setting @should, just like params.
431
+ def value=(value)
432
+ self.should = value
433
+ end
434
+
435
+ # This property will get automatically added to any type that responds
436
+ # to the methods 'exists?', 'create', and 'destroy'.
437
+ class Ensure < Puppet::Property
438
+ @name = :ensure
439
+
440
+ def self.defaultvalues
441
+ newvalue(:present) do
442
+ if @parent.provider and @parent.provider.respond_to?(:create)
443
+ @parent.provider.create
444
+ else
445
+ @parent.create
446
+ end
447
+ nil # return nil so the event is autogenerated
448
+ end
449
+
450
+ newvalue(:absent) do
451
+ if @parent.provider and @parent.provider.respond_to?(:destroy)
452
+ @parent.provider.destroy
453
+ else
454
+ @parent.destroy
455
+ end
456
+ nil # return nil so the event is autogenerated
457
+ end
458
+
459
+ defaultto do
460
+ if @parent.managed?
461
+ :present
462
+ else
463
+ nil
464
+ end
465
+ end
466
+
467
+ # This doc will probably get overridden
468
+ @doc ||= "The basic property that the object should be in."
469
+ end
470
+
471
+ def self.inherited(sub)
472
+ # Add in the two properties that everyone will have.
473
+ sub.class_eval do
474
+ end
475
+ end
476
+
477
+ def change_to_s
478
+ begin
479
+ if @is == :absent or @is.nil?
480
+ return "created"
481
+ elsif self.should == :absent
482
+ return "removed"
483
+ else
484
+ return "%s changed '%s' to '%s'" %
485
+ [self.name, self.is_to_s, self.should_to_s]
486
+ end
487
+ rescue Puppet::Error, Puppet::DevError
488
+ raise
489
+ rescue => detail
490
+ raise Puppet::DevError, "Could not convert change %s to string: %s" %
491
+ [self.name, detail]
492
+ end
493
+ end
494
+
495
+ def retrieve
496
+ # XXX This is a problem -- whether the object exists or not often
497
+ # depends on the results of other properties, yet we're the first property
498
+ # to get checked, which means that those other properties do not have
499
+ # @is values set. This seems to be the source of quite a few bugs,
500
+ # although they're mostly logging bugs, not functional ones.
501
+ if prov = @parent.provider and prov.respond_to?(:exists?)
502
+ result = prov.exists?
503
+ elsif @parent.respond_to?(:exists?)
504
+ result = @parent.exists?
505
+ else
506
+ raise Puppet::DevError, "No ability to determine if %s exists" %
507
+ @parent.class.name
508
+ end
509
+ if result
510
+ @is = :present
511
+ else
512
+ @is = :absent
513
+ end
514
+ end
515
+
516
+ # If they're talking about the thing at all, they generally want to
517
+ # say it should exist.
518
+ #defaultto :present
519
+ defaultto do
520
+ if @parent.managed?
521
+ :present
522
+ else
523
+ nil
524
+ end
525
+ end
526
+ end
527
+ end
528
+ end
529
+
530
+ # $Id: property.rb 2328 2007-03-19 21:29:08Z luke $