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,59 @@
1
+ # Manage debian services. Start/stop is the same as InitSvc, but enable/disable
2
+ # is special.
3
+ Puppet::Type.type(:service).provide :redhat, :parent => :init do
4
+ desc "Red Hat's (and probably many others) form of ``init``-style service
5
+ management; uses ``chkconfig`` for service enabling and disabling."
6
+
7
+ commands :chkconfig => "/sbin/chkconfig"
8
+
9
+ defaultfor :operatingsystem => [:redhat, :fedora, :suse]
10
+
11
+ def self.defpath
12
+ superclass.defpath
13
+ end
14
+
15
+ if self.suitable?
16
+ Puppet.type(:service).newpath(:redhat, defpath())
17
+ end
18
+
19
+ # Remove the symlinks
20
+ def disable
21
+ begin
22
+ output = chkconfig(@model[:name], :off)
23
+ output += chkconfig("--del", @model[:name])
24
+ rescue Puppet::ExecutionFailure
25
+ raise Puppet::Error, "Could not disable %s: %s" %
26
+ [self.name, output]
27
+ end
28
+ end
29
+
30
+ def enabled?
31
+ begin
32
+ output = chkconfig(@model[:name])
33
+ rescue Puppet::ExecutionFailure
34
+ return :false
35
+ end
36
+
37
+ # If it's disabled on SuSE, then it will print output showing "off"
38
+ # at the end
39
+ if output =~ /.* off$/
40
+ return :false
41
+ end
42
+
43
+ return :true
44
+ end
45
+
46
+ # Don't support them specifying runlevels; always use the runlevels
47
+ # in the init scripts.
48
+ def enable
49
+ begin
50
+ output = chkconfig("--add", @model[:name])
51
+ output += chkconfig(@model[:name], :on)
52
+ rescue Puppet::ExecutionFailure => detail
53
+ raise Puppet::Error, "Could not enable %s: %s" %
54
+ [self.name, detail]
55
+ end
56
+ end
57
+ end
58
+
59
+ # $Id: redhat.rb 2330 2007-03-19 22:13:09Z luke $
@@ -1,5 +1,14 @@
1
1
  # Solaris 10 SMF-style services.
2
- Puppet.type(:service).newsvctype(:smf) do
2
+ Puppet::Type.type(:service).provide :smf, :parent => :base do
3
+ desc "Support for Sun's new Service Management Framework. Starting a service
4
+ is effectively equivalent to enabling it, so there is only support
5
+ for starting and stopping services, which also enables and disables them,
6
+ respectively."
7
+
8
+ defaultfor :operatingsystem => :solaris
9
+
10
+ commands :adm => "/usr/sbin/svcadm", :svcs => "/usr/bin/svcs"
11
+
3
12
  def enable
4
13
  self.start
5
14
  end
@@ -18,19 +27,26 @@ Puppet.type(:service).newsvctype(:smf) do
18
27
  end
19
28
 
20
29
  def restartcmd
21
- "svcadm restart %s" % self[:name]
30
+ [command(:adm), :restart, @model[:name]]
22
31
  end
23
32
 
24
33
  def startcmd
25
- "svcadm enable %s" % self[:name]
34
+ [command(:adm), :enable, @model[:name]]
26
35
  end
27
36
 
28
37
  def status
29
- if self[:status]
38
+ if @model[:status]
30
39
  super
31
40
  return
32
41
  end
33
- %x{/usr/bin/svcs -l #{self[:name]} 2>/dev/null}.split("\n").each { |line|
42
+ begin
43
+ output = svcs "-l", @model[:name]
44
+ rescue Puppet::ExecutionFailure
45
+ warning "Could not get status on service %s" % self.name
46
+ return :stopped
47
+ end
48
+
49
+ output.split("\n").each { |line|
34
50
  var = nil
35
51
  value = nil
36
52
  if line =~ /^(\w+)\s+(.+)/
@@ -38,6 +54,7 @@ Puppet.type(:service).newsvctype(:smf) do
38
54
  value = $2
39
55
  else
40
56
  Puppet.err "Could not match %s" % line.inspect
57
+ next
41
58
  end
42
59
  case var
43
60
  when "state":
@@ -58,17 +75,11 @@ Puppet.type(:service).newsvctype(:smf) do
58
75
  end
59
76
  end
60
77
  }
61
-
62
- if $? != 0
63
- #raise Puppet::Error,
64
- warning "Could not get status on service %s" % self.name
65
- return :stopped
66
- end
67
78
  end
68
79
 
69
80
  def stopcmd
70
- "svcadm disable %s" % self[:name]
81
+ [command(:adm), :disable, @model[:name]]
71
82
  end
72
83
  end
73
84
 
74
- # $Id: smf.rb 1375 2006-07-06 17:59:30Z luke $
85
+ # $Id: smf.rb 2284 2007-03-17 02:50:48Z luke $
@@ -0,0 +1,36 @@
1
+ require 'puppet/provider/parsedfile'
2
+
3
+ known = nil
4
+ case Facter.value(:operatingsystem)
5
+ when "Darwin": known = "/etc/ssh_known_hosts"
6
+ else
7
+ known = "/etc/ssh/ssh_known_hosts"
8
+ end
9
+
10
+ Puppet::Type.type(:sshkey).provide(:parsed,
11
+ :parent => Puppet::Provider::ParsedFile,
12
+ :default_target => known,
13
+ :filetype => :flat
14
+ ) do
15
+ text_line :comment, :match => /^#/
16
+ text_line :blank, :match => /^\s+/
17
+
18
+ record_line :parsed, :fields => %w{name type key},
19
+ :post_parse => proc { |hash|
20
+ if hash[:name] =~ /,/
21
+ names = hash[:name].split(",")
22
+ hash[:name] = names.shift
23
+ hash[:alias] = names
24
+ end
25
+ },
26
+ :pre_gen => proc { |hash|
27
+ if hash[:alias]
28
+ names = [hash[:name], hash[:alias]].flatten
29
+
30
+ hash[:name] = [hash[:name], hash[:alias]].flatten.join(",")
31
+ hash.delete(:alias)
32
+ end
33
+ }
34
+ end
35
+
36
+ # $Id: parsed.rb 2281 2007-03-14 17:49:19Z luke $
@@ -0,0 +1,106 @@
1
+ # Manage NetInfo POSIX objects. Probably only used on OS X, but I suppose
2
+ # it could be used elsewhere.
3
+ require 'puppet/provider/nameservice/netinfo'
4
+
5
+ Puppet::Type.type(:user).provide :netinfo, :parent => Puppet::Provider::NameService::NetInfo do
6
+ desc "User management in NetInfo. Note that NetInfo is not smart enough to fill in default information
7
+ for users, so this provider will use default settings for home (``/var/empty``), shell (``/usr/bin/false``),
8
+ comment (the user name, capitalized), and password ('********'). These defaults are only used when the user is created.
9
+ Note that password management probably does not really work -- OS X does not store the password in NetInfo itself,
10
+ yet we cannot figure out how to store the encrypted password where OS X will look for it. The main reason the password
11
+ support is even there is so that a default password is created, which effectively locks people out, even if it does not
12
+ enable us to set a password."
13
+ commands :nireport => "nireport", :niutil => "niutil"
14
+
15
+ options :comment, :key => "realname"
16
+ options :password, :key => "passwd"
17
+
18
+ defaultfor :operatingsystem => :darwin
19
+
20
+ autogen_defaults :home => "/var/empty", :shell => "/usr/bin/false", :password => '********'
21
+
22
+ has_features :manages_passwords
23
+
24
+ verify :gid, "GID must be an integer" do |value|
25
+ value.is_a? Integer
26
+ end
27
+
28
+ verify :uid, "UID must be an integer" do |value|
29
+ value.is_a? Integer
30
+ end
31
+
32
+ def autogen_comment
33
+ return @model[:name].capitalize
34
+ end
35
+
36
+ # The list of all groups the user is a member of. Different
37
+ # user mgmt systems will need to override this method.
38
+ def groups
39
+ groups = []
40
+
41
+ user = @model[:name]
42
+ # Retrieve them all from netinfo
43
+ open("| #{command(:nireport)} / /groups name users") do |file|
44
+ file.each do |line|
45
+ name, members = line.split(/\s+/)
46
+ next unless members
47
+ next if members =~ /NoValue/
48
+ members = members.split(",")
49
+
50
+ if members.include? user
51
+ groups << name
52
+ end
53
+ end
54
+ end
55
+
56
+ groups.join(",")
57
+ end
58
+
59
+ # This is really lame. We have to iterate over each
60
+ # of the groups and add us to them.
61
+ def groups=(groups)
62
+ case groups
63
+ when Fixnum:
64
+ groups = [groups.to_s]
65
+ when String
66
+ groups = groups.split(/\s*,\s*/)
67
+ else
68
+ raise Puppet::DevError, "got invalid groups value %s of type %s" % [groups.class, groups]
69
+ end
70
+ # Get just the groups we need to modify
71
+ diff = groups - (@is || [])
72
+
73
+ data = {}
74
+ open("| #{command(:nireport)} / /groups name users") do |file|
75
+ file.each do |line|
76
+ name, members = line.split(/\s+/)
77
+
78
+ if members.nil? or members =~ /NoValue/
79
+ data[name] = []
80
+ else
81
+ # Add each diff group's current members
82
+ data[name] = members.split(/,/)
83
+ end
84
+ end
85
+ end
86
+
87
+ user = @model[:name]
88
+ data.each do |name, members|
89
+ if members.include? user and groups.include? name
90
+ # I'm in the group and should be
91
+ next
92
+ elsif members.include? user
93
+ # I'm in the group and shouldn't be
94
+ setuserlist(name, members - [user])
95
+ elsif groups.include? name
96
+ # I'm not in the group and should be
97
+ setuserlist(name, members + [user])
98
+ else
99
+ # I'm not in the group and shouldn't be
100
+ next
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ # $Id: netinfo.rb 2415 2007-04-25 21:44:22Z luke $
@@ -0,0 +1,41 @@
1
+ require 'puppet/provider/nameservice/pw'
2
+
3
+ Puppet::Type.type(:user).provide :pw, :parent => Puppet::Provider::NameService::PW do
4
+ desc "User management via ``pw`` on FreeBSD."
5
+
6
+ commands :pw => "pw"
7
+
8
+ defaultfor :operatingsystem => :freebsd
9
+
10
+ options :home, :flag => "-d", :method => :dir
11
+ options :comment, :method => :gecos
12
+ options :groups, :flag => "-G"
13
+
14
+ verify :gid, "GID must be an integer" do |value|
15
+ value.is_a? Integer
16
+ end
17
+
18
+ verify :groups, "Groups must be comma-separated" do |value|
19
+ value !~ /\s/
20
+ end
21
+
22
+ def addcmd
23
+ cmd = [command(:pw), "useradd", @model[:name]]
24
+ @model.class.validproperties.each do |property|
25
+ next if property == :ensure
26
+ # the value needs to be quoted, mostly because -c might
27
+ # have spaces in it
28
+ if value = @model.should(property) and value != ""
29
+ cmd << flag(property) << value
30
+ end
31
+ end
32
+
33
+ if @model[:allowdupe] == :true
34
+ cmd << "-o"
35
+ end
36
+
37
+ return cmd
38
+ end
39
+ end
40
+
41
+ # $Id: pw.rb 2169 2007-02-07 06:47:10Z luke $
@@ -0,0 +1,67 @@
1
+ require 'puppet/provider/nameservice/objectadd'
2
+
3
+ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameService::ObjectAdd do
4
+ desc "User management via ``useradd`` and its ilk. Note that you'll have to install the ``Shadow Password`` library to manage user passwords."
5
+
6
+ commands :add => "useradd", :delete => "userdel", :modify => "usermod"
7
+
8
+ options :home, :flag => "-d", :method => :dir
9
+ options :comment, :method => :gecos
10
+ options :groups, :flag => "-G"
11
+
12
+ verify :gid, "GID must be an integer" do |value|
13
+ value.is_a? Integer
14
+ end
15
+
16
+ verify :groups, "Groups must be comma-separated" do |value|
17
+ value !~ /\s/
18
+ end
19
+
20
+ has_features :manages_homedir, :allows_duplicates
21
+
22
+ if Puppet.features.libshadow? and case Facter.value(:kernel)
23
+ when "Linux": true
24
+ else
25
+ false
26
+ end
27
+
28
+ has_features :manages_passwords
29
+ end
30
+
31
+ def addcmd
32
+ cmd = [command(:add)]
33
+ @model.class.validproperties.each do |property|
34
+ next if property == :ensure
35
+ # the value needs to be quoted, mostly because -c might
36
+ # have spaces in it
37
+ if value = @model.should(property) and value != ""
38
+ cmd << flag(property) << value
39
+ end
40
+ end
41
+
42
+ if @model.allowdupe?
43
+ cmd << "-o"
44
+ end
45
+
46
+ if @model.managehome?
47
+ cmd << "-m"
48
+ elsif %w{Fedora RedHat}.include?(Facter.value("operatingsystem"))
49
+ cmd << "-M"
50
+ end
51
+
52
+ cmd << @model[:name]
53
+
54
+ cmd
55
+ end
56
+
57
+ # Retrieve the password using the Shadow Password library
58
+ def password
59
+ if ent = Shadow::Passwd.getspnam(@model.name)
60
+ return ent.sp_pwdp
61
+ else
62
+ return :absent
63
+ end
64
+ end
65
+ end
66
+
67
+ # $Id: useradd.rb 2414 2007-04-25 20:59:00Z luke $
@@ -0,0 +1,208 @@
1
+ Puppet::Type.type(:zone).provide(:solaris) do
2
+ desc "Provider for Solaris Zones."
3
+
4
+ commands :adm => "/usr/sbin/zoneadm", :cfg => "/usr/sbin/zonecfg"
5
+ defaultfor :operatingsystem => :solaris
6
+
7
+ # Convert the output of a list into a hash
8
+ def self.line2hash(line)
9
+ fields = [:id, :name, :ensure, :path]
10
+
11
+ hash = {}
12
+ line.split(":").each_with_index { |value, index|
13
+ hash[fields[index]] = value
14
+ }
15
+
16
+ # Configured but not installed zones do not have IDs
17
+ if hash[:id] == "-"
18
+ hash.delete(:id)
19
+ end
20
+
21
+ return hash
22
+ end
23
+
24
+ def self.list
25
+ adm(:list, "-cp").split("\n").collect do |line|
26
+ hash = line2hash(line)
27
+
28
+ obj = nil
29
+ unless obj = @model[hash[:name]]
30
+ obj = @model.create(:name => hash[:name])
31
+ end
32
+
33
+ obj.setstatus(hash)
34
+
35
+ obj
36
+ end
37
+ end
38
+
39
+ # Perform all of our configuration steps.
40
+ def configure
41
+ # If the thing is entirely absent, then we need to create the config.
42
+ str = %{create -b
43
+ set zonepath=%s
44
+ } % @model[:path]
45
+
46
+ # Then perform all of our configuration steps. It's annoying
47
+ # that we need this much internal info on the model.
48
+ @model.send(:properties).each do |property|
49
+ if property.is_a? ZoneConfigProperty and ! property.insync?
50
+ str += property.configtext + "\n"
51
+ end
52
+ end
53
+
54
+ str += "commit\n"
55
+ setconfig(str)
56
+ end
57
+
58
+ def destroy
59
+ zonecfg :delete, "-F"
60
+ end
61
+
62
+ def install
63
+ zoneadm :install
64
+ end
65
+
66
+ # We need a way to test whether a zone is in process. Our 'ensure'
67
+ # property models the static states, but we need to handle the temporary ones.
68
+ def processing?
69
+ if hash = statushash()
70
+ case hash[:ensure]
71
+ when "incomplete", "ready", "shutting_down"
72
+ true
73
+ else
74
+ false
75
+ end
76
+ else
77
+ false
78
+ end
79
+ end
80
+
81
+ # Collect the configuration of the zone.
82
+ def getconfig
83
+ output = zonecfg :info
84
+
85
+ name = nil
86
+ current = nil
87
+ hash = {}
88
+ output.split("\n").each do |line|
89
+ case line
90
+ when /^(\S+):\s*$/:
91
+ name = $1
92
+ current = nil # reset it
93
+ when /^(\S+):\s*(.+)$/:
94
+ hash[$1.intern] = $2
95
+ #self.is = [$1.intern, $2]
96
+ when /^\s+(\S+):\s*(.+)$/:
97
+ if name
98
+ unless hash.include? name
99
+ hash[name] = []
100
+ end
101
+
102
+ unless current
103
+ current = {}
104
+ hash[name] << current
105
+ end
106
+ current[$1.intern] = $2
107
+ else
108
+ err "Ignoring '%s'" % line
109
+ end
110
+ else
111
+ debug "Ignoring zone output '%s'" % line
112
+ end
113
+ end
114
+ return hash
115
+ end
116
+
117
+ def retrieve
118
+ if hash = statushash()
119
+ setstatus(hash)
120
+
121
+ # Now retrieve the configuration itself and set appropriately.
122
+ getconfig()
123
+ else
124
+ @properties.each do |name, property|
125
+ property.is = :absent
126
+ end
127
+ end
128
+ end
129
+
130
+ # Execute a configuration string. Can't be private because it's called
131
+ # by the properties.
132
+ def setconfig(str)
133
+ command = "#{command(:cfg)} -z %s -f -" % @model[:name]
134
+ debug "Executing '%s' in zone %s with '%s'" % [command, @model[:name], str]
135
+ IO.popen(command, "w") do |pipe|
136
+ pipe.puts str
137
+ end
138
+
139
+ unless $? == 0
140
+ raise ArgumentError, "Failed to apply configuration"
141
+ end
142
+ end
143
+
144
+ def start
145
+ # Check the sysidcfg stuff
146
+ if cfg = @model[:sysidcfg]
147
+ path = File.join(@model[:path], "root", "etc", "sysidcfg")
148
+
149
+ unless File.exists?(path)
150
+ begin
151
+ File.open(path, "w", 0600) do |f|
152
+ f.puts cfg
153
+ end
154
+ rescue => detail
155
+ if Puppet[:debug]
156
+ puts detail.stacktrace
157
+ end
158
+ raise Puppet::Error, "Could not create sysidcfg: %s" % detail
159
+ end
160
+ end
161
+ end
162
+
163
+ zoneadm :boot
164
+ end
165
+
166
+ # Return a hash of the current status of this zone.
167
+ def statushash
168
+ begin
169
+ output = adm "-z", @model[:name], :list, "-p"
170
+ rescue Puppet::ExecutionFailure
171
+ return nil
172
+ end
173
+
174
+ return self.class.line2hash(output.chomp)
175
+ end
176
+
177
+ def stop
178
+ zoneadm :halt
179
+ end
180
+
181
+ def unconfigure
182
+ zonecfg :delete, "-F"
183
+ end
184
+
185
+ def uninstall
186
+ zoneadm :uninstall, "-F"
187
+ end
188
+
189
+ private
190
+
191
+ def zoneadm(*cmd)
192
+ begin
193
+ adm("-z", @model[:name], *cmd)
194
+ rescue Puppet::ExecutionFailure => detail
195
+ self.fail "Could not %s zone: %s" % [cmd[0], detail]
196
+ end
197
+ end
198
+
199
+ def zonecfg(*cmd)
200
+ begin
201
+ cfg("-z", @model[:name], *cmd)
202
+ rescue Puppet::ExecutionFailure => detail
203
+ self.fail "Could not %s zone: %s" % [cmd[0], detail]
204
+ end
205
+ end
206
+ end
207
+
208
+ # $Id: solaris.rb 2169 2007-02-07 06:47:10Z luke $