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
@@ -0,0 +1,76 @@
1
+ module Puppet
2
+ newtype(:sshkey) do
3
+ @doc = "Installs and manages ssh host keys. At this point, this type
4
+ only knows how to install keys into /etc/ssh/ssh_known_hosts, and
5
+ it cannot manage user authorized keys yet."
6
+
7
+ ensurable
8
+
9
+ newproperty(:type) do
10
+ desc "The encryption type used. Probably ssh-dss or ssh-rsa."
11
+
12
+ newvalue("ssh-dss")
13
+ newvalue("ssh-rsa")
14
+ aliasvalue(:dsa, "ssh-dss")
15
+ aliasvalue(:rsa, "ssh-rsa")
16
+ end
17
+
18
+ newproperty(:key) do
19
+ desc "The key itself; generally a long string of hex digits."
20
+ end
21
+
22
+ # FIXME This should automagically check for aliases to the hosts, just
23
+ # to see if we can automatically glean any aliases.
24
+ newproperty(:alias) do
25
+ desc "Any alias the host might have. Multiple values must be
26
+ specified as an array. Note that this parameter has the same name
27
+ as one of the metaparams; using this parameter to set aliases will
28
+ make those aliases available in your Puppet scripts."
29
+
30
+ attr_accessor :meta
31
+
32
+ def insync?
33
+ @is == @should
34
+ end
35
+
36
+ # We actually want to return the whole array here, not just the first
37
+ # value.
38
+ def should
39
+ if defined? @should
40
+ return @should
41
+ else
42
+ return nil
43
+ end
44
+ end
45
+
46
+ validate do |value|
47
+ if value =~ /\s/
48
+ raise Puppet::Error, "Aliases cannot include whitespace"
49
+ end
50
+ if value =~ /,/
51
+ raise Puppet::Error, "Aliases cannot include whitespace"
52
+ end
53
+ end
54
+ end
55
+
56
+ newparam(:name) do
57
+ desc "The host name."
58
+
59
+ isnamevar
60
+ end
61
+
62
+ newproperty(:target) do
63
+ desc "The file in which to store the mount table. Only used by
64
+ those providers that write to disk (i.e., not NetInfo)."
65
+
66
+ defaultto { if @parent.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
67
+ @parent.class.defaultprovider.default_target
68
+ else
69
+ nil
70
+ end
71
+ }
72
+ end
73
+ end
74
+ end
75
+
76
+ # $Id: sshkey.rb 2169 2007-02-07 06:47:10Z luke $
@@ -1,11 +1,13 @@
1
1
 
2
2
  require 'etc'
3
- require 'puppet/type/state'
3
+ require 'puppet/type/property'
4
4
  require 'puppet/type/pfile'
5
5
 
6
6
  module Puppet
7
7
  newtype(:tidy, Puppet.type(:file)) do
8
- @doc = "Remove unwanted files based on specific criteria."
8
+ @doc = "Remove unwanted files based on specific criteria. Multiple
9
+ criteria are OR'd together, so a file that is too large but is not
10
+ old enough will still get tidied."
9
11
 
10
12
  newparam(:path) do
11
13
  desc "The path to the file or directory to manage. Must be fully
@@ -14,111 +16,70 @@ module Puppet
14
16
  end
15
17
 
16
18
  copyparam(Puppet.type(:file), :backup)
19
+
20
+ newproperty(:ensure) do
21
+ desc "An internal attribute used to determine which files should be removed."
22
+ require 'etc'
17
23
 
18
- newparam(:age) do
19
- desc "Tidy files whose age is equal to or greater than
20
- the specified number of days."
21
-
22
- munge do |age|
23
- case age
24
- when /^[0-9]+$/, /^[0-9]+[dD]/:
25
- Integer(age.gsub(/[^0-9]+/,'')) *
26
- 60 * 60 * 24
27
- when /^[0-9]+$/, /^[0-9]+[hH]/:
28
- Integer(age.gsub(/[^0-9]+/,'')) * 60 * 60
29
- when /^[0-9]+[mM]/:
30
- Integer(age.gsub(/[^0-9]+/,'')) * 60
31
- when /^[0-9]+[sS]/:
32
- Integer(age.gsub(/[^0-9]+/,''))
33
- else
34
- self.fail "Invalid tidy age %s" % age
35
- end
36
- end
37
- end
38
-
39
- newparam(:size) do
40
- desc "Tidy files whose size is equal to or greater than
41
- the specified size. Unqualified values are in kilobytes, but
42
- *b*, *k*, and *m* can be appended to specify *bytes*, *kilobytes*,
43
- and *megabytes*, respectively. Only the first character is
44
- significant, so the full word can also be used."
24
+ @nodoc = true
45
25
 
46
- munge do |size|
47
- if FileTest.directory?(@parent[:path])
48
- # don't do size comparisons for directories
49
- return
26
+ TATTRS = [:age, :size]
27
+
28
+ defaultto :anything # just so we always get this property
29
+
30
+ def change_to_s
31
+ start = "Tidying"
32
+ if @out.include?(:age)
33
+ start += ", older than %s seconds" % @parent.should(:age)
50
34
  end
51
- case size
52
- when /^[0-9]+$/, /^[0-9]+[kK]/:
53
- Integer(size.gsub(/[^0-9]+/,'')) * 1024
54
- when /^[0-9]+[bB]/:
55
- Integer(size.gsub(/[^0-9]+/,''))
56
- when /^[0-9]+[mM]/:
57
- Integer(size.gsub(/[^0-9]+/,'')) *
58
- 1024 * 1024
59
- else
60
- self.fail "Invalid tidy size %s" % size
35
+ if @out.include?(:size)
36
+ start += ", larger than %s bytes" % @parent.should(:size)
61
37
  end
62
- end
63
- end
64
38
 
65
- newparam(:type) do
66
- desc "Set the mechanism for determining age.
67
- **atime**/*mtime*/*ctime*."
68
-
69
- munge do |type|
70
- case type
71
- when "atime", "mtime", "ctime":
72
- type.intern
73
- else
74
- self.fail "Invalid tidy type %s" % type
75
- end
39
+ start
76
40
  end
77
- end
78
41
 
79
- newparam(:recurse) do
80
- desc "If target is a directory, recursively descend
81
- into the directory looking for files to tidy."
82
- end
83
-
84
- newparam(:rmdirs) do
85
- desc "Tidy directories in addition to files; that is, remove
86
- directories whose age is older than the specified criteria."
87
- end
88
-
89
- newstate(:tidyup) do
90
- require 'etc'
91
-
92
- @nodoc = true
93
- @name = :tidyup
94
-
95
- def age(stat)
96
- type = nil
97
- if stat.ftype == "directory"
98
- type = :mtime
42
+ def insync?
43
+ if @is.is_a?(Symbol)
44
+ if [:absent, :notidy].include?(@is)
45
+ return true
46
+ else
47
+ return false
48
+ end
99
49
  else
100
- type = @parent[:type] || :atime
50
+ @out = []
51
+ TATTRS.each do |param|
52
+ if property = @parent.property(param)
53
+ unless property.insync?
54
+ @out << param
55
+ end
56
+ end
57
+ end
58
+ if @out.length > 0
59
+ return false
60
+ else
61
+ return true
62
+ end
101
63
  end
102
-
103
- return Integer(Time.now - stat.send(type))
104
64
  end
105
65
 
106
66
  def retrieve
107
67
  stat = nil
108
68
  unless stat = @parent.stat
109
- @is = :unknown
69
+ @is = :absent
70
+ return
71
+ end
72
+
73
+ if stat.ftype == "directory" and ! @parent[:rmdirs]
74
+ @is = :notidy
110
75
  return
111
76
  end
112
77
 
113
- @is = [:age, :size].collect { |param|
114
- if @parent[param]
115
- self.send(param, stat)
78
+ TATTRS.each { |param|
79
+ if property = @parent.property(param)
80
+ property.is = property.assess(stat)
116
81
  end
117
- }.reject { |p| p == false or p.nil? }
118
- end
119
-
120
- def size(stat)
121
- return stat.size
82
+ }
122
83
  end
123
84
 
124
85
  def sync
@@ -143,7 +104,8 @@ module Puppet
143
104
  when "file":
144
105
  @parent.handlebackup(file)
145
106
  File.unlink(file)
146
- when "symlink": File.unlink(file)
107
+ when "link":
108
+ File.unlink(file)
147
109
  else
148
110
  self.fail "Cannot tidy files of type %s" %
149
111
  File.lstat(file).ftype
@@ -153,6 +115,139 @@ module Puppet
153
115
  end
154
116
  end
155
117
 
118
+ newproperty(:age) do
119
+ desc "Tidy files whose age is equal to or greater than
120
+ the specified time. You can choose seconds, minutes,
121
+ hours, days, or weeks by specifying the first letter of any
122
+ of those words (e.g., '1w')."
123
+
124
+ @@ageconvertors = {
125
+ :s => 1,
126
+ :m => 60
127
+ }
128
+
129
+ @@ageconvertors[:h] = @@ageconvertors[:m] * 60
130
+ @@ageconvertors[:d] = @@ageconvertors[:h] * 24
131
+ @@ageconvertors[:w] = @@ageconvertors[:d] * 7
132
+
133
+ def assess(stat)
134
+ type = nil
135
+ if stat.ftype == "directory"
136
+ type = :mtime
137
+ else
138
+ type = @parent[:type] || :atime
139
+ end
140
+
141
+ #return Integer(Time.now - stat.send(type))
142
+ return stat.send(type).to_i
143
+ end
144
+
145
+ def convert(unit, multi)
146
+ if num = @@ageconvertors[unit]
147
+ return num * multi
148
+ else
149
+ self.fail "Invalid age unit '%s'" % unit
150
+ end
151
+ end
152
+
153
+ def insync?
154
+ if (Time.now.to_i - @is) > self.should
155
+ return false
156
+ end
157
+
158
+ true
159
+ end
160
+
161
+ munge do |age|
162
+ unit = multi = nil
163
+ case age
164
+ when /^([0-9]+)(\w)\w*$/:
165
+ multi = Integer($1)
166
+ unit = $2.downcase.intern
167
+ when /^([0-9]+)$/:
168
+ multi = Integer($1)
169
+ unit = :d
170
+ else
171
+ self.fail "Invalid tidy age %s" % age
172
+ end
173
+
174
+ convert(unit, multi)
175
+ end
176
+ end
177
+
178
+ newproperty(:size) do
179
+ desc "Tidy files whose size is equal to or greater than
180
+ the specified size. Unqualified values are in kilobytes, but
181
+ *b*, *k*, and *m* can be appended to specify *bytes*, *kilobytes*,
182
+ and *megabytes*, respectively. Only the first character is
183
+ significant, so the full word can also be used."
184
+
185
+ @@sizeconvertors = {
186
+ :b => 0,
187
+ :k => 1,
188
+ :m => 2,
189
+ :g => 3
190
+ }
191
+
192
+ # Retrieve the size from a File::Stat object
193
+ def assess(stat)
194
+ return stat.size
195
+ end
196
+
197
+ def convert(unit, multi)
198
+ if num = @@sizeconvertors[unit]
199
+ result = multi
200
+ num.times do result *= 1024 end
201
+ return result
202
+ else
203
+ self.fail "Invalid size unit '%s'" % unit
204
+ end
205
+ end
206
+
207
+ def insync?
208
+ if @is > self.should
209
+ return false
210
+ end
211
+
212
+ true
213
+ end
214
+
215
+ munge do |size|
216
+ case size
217
+ when /^([0-9]+)(\w)\w*$/:
218
+ multi = Integer($1)
219
+ unit = $2.downcase.intern
220
+ when /^([0-9]+)$/:
221
+ multi = Integer($1)
222
+ unit = :k
223
+ else
224
+ self.fail "Invalid tidy size %s" % age
225
+ end
226
+
227
+ convert(unit, multi)
228
+ end
229
+ end
230
+
231
+ newparam(:type) do
232
+ desc "Set the mechanism for determining age."
233
+
234
+ newvalues(:atime, :mtime, :ctime)
235
+
236
+ defaultto :atime
237
+ end
238
+
239
+ newparam(:recurse) do
240
+ desc "If target is a directory, recursively descend
241
+ into the directory looking for files to tidy."
242
+ end
243
+
244
+ newparam(:rmdirs) do
245
+ desc "Tidy directories in addition to files; that is, remove
246
+ directories whose age is older than the specified criteria.
247
+ This will only remove empty directories, so all contained
248
+ files must also be tidied before a directory gets removed."
249
+ end
250
+
156
251
  # Erase PFile's validate method
157
252
  validate do
158
253
  end
@@ -165,7 +260,6 @@ module Puppet
165
260
 
166
261
  def initialize(hash)
167
262
  super
168
- #self.setdefaults
169
263
 
170
264
  unless @parameters.include?(:age) or
171
265
  @parameters.include?(:size)
@@ -176,15 +270,21 @@ module Puppet
176
270
  end
177
271
 
178
272
  # only allow backing up into filebuckets
179
- unless self[:backup].is_a? Puppet::Client::Dipper
273
+ unless self[:backup].is_a? Puppet::Network::Client::Dipper
180
274
  self[:backup] = false
181
275
  end
182
- self[:tidyup] = [:age, :size].collect { |param|
183
- self[param]
184
- }.reject { |p| p == false }
185
276
  end
186
-
277
+
278
+ def retrieve
279
+ # Our ensure property knows how to retrieve everything for us.
280
+ obj = @parameters[:ensure] and obj.retrieve
281
+ end
282
+
283
+ # Hack things a bit so we only ever check the ensure property.
284
+ def properties
285
+ []
286
+ end
187
287
  end
188
288
  end
189
289
 
190
- # $Id: tidy.rb 1125 2006-04-20 19:38:48Z luke $
290
+ # $Id: tidy.rb 2179 2007-02-08 01:39:39Z luke $
@@ -1,57 +1,40 @@
1
1
  require 'etc'
2
2
  require 'facter'
3
- require 'puppet/type/state'
4
- require 'puppet/type/nameservice'
3
+ require 'puppet/type/property'
5
4
 
6
5
  module Puppet
7
- newtype(:user, Puppet::Type::NSSType) do
8
- case Facter["operatingsystem"].value
9
- when "Darwin":
10
- @parentstate = Puppet::NameService::NetInfo::NetInfoState
11
- @parentmodule = Puppet::NameService::NetInfo
12
- when "FreeBSD":
13
- @parentstate = Puppet::NameService::PW::PWUser
14
- @parentmodule = Puppet::NameService::PW
15
- else
16
- @parentstate = Puppet::NameService::ObjectAdd::ObjectAddUser
17
- @parentmodule = Puppet::NameService::ObjectAdd
18
- end
6
+ newtype(:user) do
7
+ @doc = "Manage users. This type is mostly built to manage system
8
+ users, so it is lacking some features useful for managing normal
9
+ users.
10
+
11
+ This element type uses the prescribed native tools for creating
12
+ groups and generally uses POSIX APIs for retrieving information
13
+ about them. It does not directly modify /etc/passwd or anything."
19
14
 
20
- newstate(:ensure, @parentstate) do
21
- newvalue(:present) do
22
- # Verify that they have provided everything necessary, if we
23
- # are trying to manage the user
24
- if @parent.managed?
25
- @parent.class.states.each { |state|
26
- next if stateobj = @parent.state(state.name)
27
- next if state.name == :ensure
28
-
29
- unless state.autogen? or state.isoptional?
30
- if state.method_defined?(:autogen)
31
- @parent[state.name] = :auto
32
- else
33
- @parent.fail "Users require a value for %s" %
34
- state.name
35
- end
36
- end
37
- }
15
+ feature :allows_duplicates,
16
+ "The provider supports duplicate users with the same UID."
38
17
 
39
- #if @states.empty?
40
- # @parent[:comment] = @parent[:name]
41
- #end
42
- end
43
- self.syncname(:present)
18
+ feature :manages_homedir,
19
+ "The provider can create and remove home directories."
20
+
21
+ feature :manages_passwords,
22
+ "The provider can modify user passwords, by accepting a password
23
+ hash."
24
+
25
+ newproperty(:ensure) do
26
+ newvalue(:present, :event => :user_created) do
27
+ provider.create
44
28
  end
45
29
 
46
- newvalue(:absent) do
47
- self.syncname(:absent)
30
+ newvalue(:absent, :event => :user_removed) do
31
+ provider.delete
48
32
  end
49
33
 
50
34
  desc "The basic state that the object should be in."
51
35
 
52
36
  # If they're talking about the thing at all, they generally want to
53
37
  # say it should exist.
54
- #defaultto :present
55
38
  defaultto do
56
39
  if @parent.managed?
57
40
  :present
@@ -80,12 +63,13 @@ module Puppet
80
63
  end
81
64
 
82
65
  def retrieve
83
- if @parent.exists?
66
+ if provider.exists?
84
67
  @is = :present
85
68
  else
86
69
  @is = :absent
87
70
  end
88
71
  end
72
+
89
73
  # The default 'sync' method only selects among a list of registered
90
74
  # values.
91
75
  def sync
@@ -101,32 +85,20 @@ module Puppet
101
85
  end
102
86
 
103
87
  # Set ourselves to whatever our should value is.
104
- self.set
88
+ self.set(self.should)
105
89
  end
106
90
 
107
91
  end
108
92
 
109
- newstate(:uid, @parentstate) do
93
+ newproperty(:uid) do
110
94
  desc "The user ID. Must be specified numerically. For new users
111
95
  being created, if no user ID is specified then one will be
112
96
  chosen automatically, which will likely result in the same user
113
97
  having different IDs on different systems, which is not
114
- recommended."
115
-
116
- isautogen
117
-
118
- def autogen
119
- highest = 0
120
- Etc.passwd { |user|
121
- if user.uid > highest
122
- unless user.uid > 65000
123
- highest = user.uid
124
- end
125
- end
126
- }
127
-
128
- return highest + 1
129
- end
98
+ recommended. This is especially noteworthy if you use Puppet
99
+ to manage the same user on both Darwin and other platforms,
100
+ since Puppet does the ID generation for you on Darwin, but the
101
+ tools do so on other platforms."
130
102
 
131
103
  munge do |value|
132
104
  case value
@@ -134,25 +106,19 @@ module Puppet
134
106
  if value =~ /^[-0-9]+$/
135
107
  value = Integer(value)
136
108
  end
137
- when Symbol
138
- unless value == :absent or value == :auto
139
- self.devfail "Invalid UID %s" % value
140
- end
141
-
142
- if value == :auto
143
- value = autogen()
144
- end
145
109
  end
146
110
 
147
111
  return value
148
112
  end
149
113
  end
150
114
 
151
- newstate(:gid, @parentstate) do
115
+ newproperty(:gid) do
152
116
  desc "The user's primary group. Can be specified numerically or
153
117
  by name."
154
-
155
- isautogen
118
+
119
+ def found?
120
+ defined? @found and @found
121
+ end
156
122
 
157
123
  munge do |gid|
158
124
  method = :getgrgid
@@ -186,7 +152,7 @@ module Puppet
186
152
  unless defined? @should
187
153
  return super
188
154
  end
189
- unless defined? @found and @found
155
+ unless found?
190
156
  @should = @should.each { |val|
191
157
  next unless val
192
158
  Puppet::Util.gid(val)
@@ -194,38 +160,31 @@ module Puppet
194
160
  end
195
161
  super
196
162
  end
197
-
198
163
  end
199
164
 
200
- newstate(:comment, @parentstate) do
165
+ newproperty(:comment) do
201
166
  desc "A description of the user. Generally is a user's full name."
202
-
203
- isoptional
204
-
205
- @posixmethod = :gecos
206
167
  end
207
168
 
208
- newstate(:home, @parentstate) do
169
+ newproperty(:home) do
209
170
  desc "The home directory of the user. The directory must be created
210
171
  separately and is not currently checked for existence."
211
-
212
- isautogen
213
- @posixmethod = :dir
214
172
  end
215
173
 
216
- newstate(:shell, @parentstate) do
174
+ newproperty(:shell) do
217
175
  desc "The user's login shell. The shell must exist and be
218
176
  executable."
219
- isautogen
220
177
  end
221
178
 
222
- newstate(:groups, @parentstate) do
179
+ newproperty(:password, :required_features => :manages_passwords) do
180
+ desc "The user's password, in whatever encrypted format the local machine requires."
181
+ end
182
+
183
+ newproperty(:groups) do
223
184
  desc "The groups of which the user is a member. The primary
224
185
  group should not be listed. Multiple groups should be
225
186
  specified as an array."
226
187
 
227
- isoptional
228
-
229
188
  def should_to_s
230
189
  self.should
231
190
  end
@@ -241,34 +200,42 @@ module Puppet
241
200
  retrieve
242
201
  end
243
202
 
244
- @should ||= []
203
+ unless defined? @should and @should
204
+ return nil
205
+ end
245
206
 
246
207
  if @parent[:membership] == :inclusive
247
- @should.sort.join(",")
208
+ return @should.sort.join(",")
248
209
  else
249
210
  members = @should
250
211
  if @is.is_a?(Array)
251
212
  members += @is
252
213
  end
253
- members.uniq.sort.join(",")
214
+ return members.uniq.sort.join(",")
254
215
  end
255
216
  end
256
217
 
257
218
  def retrieve
258
- @is = grouplist()
219
+ if tmp = provider.groups
220
+ @is = tmp.split(",")
221
+ else
222
+ @is = :absent
223
+ end
259
224
  end
260
225
 
261
226
  def insync?
262
227
  unless defined? @should and @should
263
- return false
228
+ return true
264
229
  end
265
230
  unless defined? @is and @is
266
- return false
231
+ return true
267
232
  end
268
- unless @is.class == @should.class
269
- return false
233
+ tmp = @is
234
+ if @is.is_a? Array
235
+ tmp = @is.sort.join(",")
270
236
  end
271
- return @is.sort == @should.sort
237
+
238
+ return tmp == self.should
272
239
  end
273
240
 
274
241
  validate do |value|
@@ -276,42 +243,29 @@ module Puppet
276
243
  raise ArgumentError, "Group names must be provided, not numbers"
277
244
  end
278
245
  end
279
-
280
- def sync
281
- if respond_to? :setgrouplist
282
- # Pass them the group list, so that the :membership logic
283
- # is all in this class, not in parent classes.
284
- setgrouplist(self.should)
285
- return :user_modified
286
- else
287
- super
288
- end
289
- end
290
246
  end
291
247
 
292
- # these three states are all implemented differently on each platform,
248
+ # these three properties are all implemented differently on each platform,
293
249
  # so i'm disabling them for now
294
250
 
295
- # FIXME Puppet::State::UserLocked is currently non-functional
296
- #newstate(:locked, @parentstate) do
251
+ # FIXME Puppet::Property::UserLocked is currently non-functional
252
+ #newproperty(:locked) do
297
253
  # desc "The expected return code. An error will be returned if the
298
254
  # executed command returns something else."
299
255
  #end
300
256
 
301
- # FIXME Puppet::State::UserExpire is currently non-functional
302
- #newstate(:expire, @parentstate) do
257
+ # FIXME Puppet::Property::UserExpire is currently non-functional
258
+ #newproperty(:expire) do
303
259
  # desc "The expected return code. An error will be returned if the
304
260
  # executed command returns something else."
305
261
  # @objectaddflag = "-e"
306
- # isautogen
307
262
  #end
308
263
 
309
- # FIXME Puppet::State::UserInactive is currently non-functional
310
- #newstate(:inactive, @parentstate) do
264
+ # FIXME Puppet::Property::UserInactive is currently non-functional
265
+ #newproperty(:inactive) do
311
266
  # desc "The expected return code. An error will be returned if the
312
267
  # executed command returns something else."
313
268
  # @objectaddflag = "-f"
314
- # isautogen
315
269
  #end
316
270
 
317
271
  newparam(:name) do
@@ -331,7 +285,7 @@ module Puppet
331
285
  defaultto :minimum
332
286
  end
333
287
 
334
- newparam(:allowdupe) do
288
+ newparam(:allowdupe, :boolean => true) do
335
289
  desc "Whether to allow duplicate UIDs."
336
290
 
337
291
  newvalues(:true, :false)
@@ -339,29 +293,27 @@ module Puppet
339
293
  defaultto false
340
294
  end
341
295
 
342
- @doc = "Manage users. Currently can create and modify users, but
343
- cannot delete them. Theoretically all of the parameters are
344
- optional, but if no parameters are specified the comment will
345
- be set to the user name in order to make the internals work out
346
- correctly.
347
-
348
- This element type uses the prescribed native tools for creating
349
- groups and generally uses POSIX APIs for retrieving information
350
- about them. It does not directly modify /etc/passwd or anything.
351
-
352
- For most platforms, the tools used are ``useradd`` and its ilk;
353
- for Mac OS X, NetInfo is used. This is currently unconfigurable,
354
- but if you desperately need it to be so, please contact us."
296
+ newparam(:managehome, :boolean => true) do
297
+ desc "Whether to manage the home directory when managing the user."
298
+
299
+ newvalues(:true, :false)
300
+
301
+ defaultto false
355
302
 
356
- @netinfodir = "users"
303
+ validate do |val|
304
+ if val.to_s == "true"
305
+ unless provider.class.manages_homedir?
306
+ raise ArgumentError, "User provider %s can not manage home directories" % provider.class.name
307
+ end
308
+ end
309
+ end
310
+ end
357
311
 
358
312
  # Autorequire the group, if it's around
359
313
  autorequire(:group) do
360
- #return nil unless @states.include?(:gid)
361
- #return nil unless groups = @states[:gid].shouldorig
362
314
  autos = []
363
315
 
364
- if @states.include?(:gid) and groups = @states[:gid].shouldorig
316
+ if obj = @parameters[:gid] and groups = obj.shouldorig
365
317
  groups = groups.collect { |group|
366
318
  if group =~ /^\d+$/
367
319
  Integer(group)
@@ -384,73 +336,45 @@ module Puppet
384
336
  }
385
337
  end
386
338
 
387
- if @states.include?(:groups) and groups = @states[:groups].should.split(",")
388
- autos += groups
339
+ if obj = @parameters[:groups] and groups = obj.should
340
+ autos += groups.split(",")
389
341
  end
390
342
 
391
343
  autos
392
344
  end
393
345
 
394
- autorequire(:file) do
395
- dir = self.should(:home) or self.is(:home)
396
- if dir =~ /^#{File::SEPARATOR}/
397
- dir
398
- else
399
- nil
400
- end
401
- end
402
-
403
- # List all found users
404
- def self.listbyname
346
+ def self.list_by_name
405
347
  users = []
406
- Etc.setpwent
407
- while ent = Etc.getpwent
408
- users << ent.name
348
+ defaultprovider.listbyname do |user|
349
+ users << user
409
350
  end
410
- Etc.endpwent
411
-
412
351
  return users
413
352
  end
414
353
 
415
- def exists?
416
- self.class.parentmodule.exists?(self)
417
- end
418
-
419
- def getinfo(refresh = false)
420
- if @userinfo.nil? or refresh == true
421
- begin
422
- @userinfo = Etc.getpwnam(self[:name])
423
- rescue ArgumentError => detail
424
- @userinfo = nil
425
- end
426
- end
427
-
428
- @userinfo
429
- end
430
-
431
- def initialize(hash)
432
- @userinfo = nil
433
- super
354
+ def self.list
355
+ defaultprovider.list
434
356
 
435
- unless defined? @states
436
- raise "wtf?"
357
+ self.collect do |user|
358
+ user
437
359
  end
438
360
  end
439
361
 
440
362
  def retrieve
441
- info = self.getinfo(true)
363
+ absent = false
364
+ properties().each { |property|
365
+ if absent
366
+ property.is = :absent
367
+ else
368
+ property.retrieve
369
+ end
442
370
 
443
- if info.nil?
444
- # the user does not exist
445
- @states.each { |name, state|
446
- state.is = :absent
447
- }
448
- return
449
- else
450
- super
451
- end
371
+ if property.name == :ensure and property.is == :absent
372
+ absent = true
373
+ next
374
+ end
375
+ }
452
376
  end
453
377
  end
454
378
  end
455
379
 
456
- # $Id: user.rb 1416 2006-07-21 19:05:30Z luke $
380
+ # $Id: user.rb 2414 2007-04-25 20:59:00Z luke $