puppet 0.18.4 → 0.22.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (673) hide show
  1. data/CHANGELOG +288 -0
  2. data/README +2 -2
  3. data/Rakefile +78 -5
  4. data/bin/puppet +28 -36
  5. data/bin/puppetca +81 -38
  6. data/bin/puppetd +65 -62
  7. data/bin/puppetdoc +409 -140
  8. data/bin/puppetmasterd +59 -47
  9. data/bin/puppetrun +38 -23
  10. data/conf/freebsd/puppetd +26 -0
  11. data/conf/freebsd/puppetmasterd +26 -0
  12. data/conf/gentoo/conf.d/puppet +5 -0
  13. data/conf/gentoo/conf.d/puppetmaster +12 -0
  14. data/conf/gentoo/init.d/puppet +38 -0
  15. data/conf/gentoo/init.d/puppetmaster +50 -0
  16. data/conf/gentoo/puppet/fileserver.conf +12 -0
  17. data/conf/gentoo/puppet/puppetca.conf +29 -0
  18. data/conf/gentoo/puppet/puppetd.conf +29 -0
  19. data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
  20. data/conf/redhat/client.init +10 -5
  21. data/conf/redhat/client.sysconfig +1 -1
  22. data/conf/redhat/fileserver.conf +2 -2
  23. data/conf/redhat/logrotate +1 -1
  24. data/conf/redhat/no-lockdir.patch +13 -0
  25. data/conf/redhat/puppet.spec +65 -8
  26. data/conf/redhat/puppetd.conf +0 -4
  27. data/conf/redhat/server.init +3 -6
  28. data/conf/solaris/pkginfo +1 -1
  29. data/conf/solaris/smf/svc-puppetd +2 -2
  30. data/conf/suse/client.init +142 -0
  31. data/conf/suse/puppet.spec +221 -0
  32. data/conf/suse/server.init +162 -0
  33. data/examples/code/mac_automount.pp +16 -0
  34. data/examples/root/bin/sleeper +3 -5
  35. data/examples/root/etc/init.d/sleeper +8 -2
  36. data/examples/root/etc/puppet/fileserver.conf +12 -2
  37. data/examples/root/etc/puppet/namespaceauth.conf +20 -0
  38. data/examples/root/etc/puppet/puppetd.conf +4 -0
  39. data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
  40. data/examples/root/etc/puppet/tagmail.conf +1 -0
  41. data/ext/emacs/puppet-mode.el +46 -1
  42. data/ext/logcheck/puppet +15 -0
  43. data/ext/module_puppet +15 -23
  44. data/ext/vim/puppet.vim +4 -2
  45. data/install.rb +2 -1
  46. data/lib/puppet.rb +76 -207
  47. data/lib/puppet/configuration.rb +331 -0
  48. data/lib/puppet/daemon.rb +63 -246
  49. data/lib/puppet/dsl.rb +371 -0
  50. data/lib/puppet/element.rb +8 -26
  51. data/lib/puppet/error.rb +54 -0
  52. data/lib/puppet/event.rb +8 -243
  53. data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
  54. data/lib/puppet/external/event-loop.rb +1 -0
  55. data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
  56. data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
  57. data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
  58. data/lib/puppet/external/gratr.rb +33 -0
  59. data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
  60. data/lib/puppet/external/gratr/base.rb +34 -0
  61. data/lib/puppet/external/gratr/biconnected.rb +116 -0
  62. data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
  63. data/lib/puppet/external/gratr/common.rb +73 -0
  64. data/lib/puppet/external/gratr/comparability.rb +92 -0
  65. data/lib/puppet/external/gratr/digraph.rb +116 -0
  66. data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
  67. data/lib/puppet/external/gratr/dot.rb +90 -0
  68. data/lib/puppet/external/gratr/edge.rb +145 -0
  69. data/lib/puppet/external/gratr/graph.rb +303 -0
  70. data/lib/puppet/external/gratr/graph_api.rb +83 -0
  71. data/lib/puppet/external/gratr/import.rb +44 -0
  72. data/lib/puppet/external/gratr/labels.rb +90 -0
  73. data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
  74. data/lib/puppet/external/gratr/rdot.rb +327 -0
  75. data/lib/puppet/external/gratr/search.rb +409 -0
  76. data/lib/puppet/external/gratr/strong_components.rb +127 -0
  77. data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
  78. data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
  79. data/lib/puppet/feature/base.rb +20 -0
  80. data/lib/puppet/feature/rails.rb +52 -0
  81. data/lib/puppet/metatype/attributes.rb +719 -0
  82. data/lib/puppet/metatype/closure.rb +111 -0
  83. data/lib/puppet/metatype/container.rb +94 -0
  84. data/lib/puppet/metatype/evaluation.rb +118 -0
  85. data/lib/puppet/metatype/instances.rb +261 -0
  86. data/lib/puppet/metatype/manager.rb +169 -0
  87. data/lib/puppet/metatype/metaparams.rb +409 -0
  88. data/lib/puppet/metatype/providers.rb +260 -0
  89. data/lib/puppet/metatype/relationships.rb +116 -0
  90. data/lib/puppet/metatype/schedules.rb +39 -0
  91. data/lib/puppet/metatype/tags.rb +39 -0
  92. data/lib/puppet/modules.rb +113 -0
  93. data/lib/puppet/network/authconfig.rb +168 -0
  94. data/lib/puppet/network/authorization.rb +84 -0
  95. data/lib/puppet/network/authstore.rb +293 -0
  96. data/lib/puppet/network/client.rb +187 -0
  97. data/lib/puppet/network/client/ca.rb +56 -0
  98. data/lib/puppet/network/client/dipper.rb +81 -0
  99. data/lib/puppet/network/client/file.rb +7 -0
  100. data/lib/puppet/network/client/logger.rb +6 -0
  101. data/lib/puppet/network/client/master.rb +644 -0
  102. data/lib/puppet/{client → network/client}/proxy.rb +3 -3
  103. data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
  104. data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
  105. data/lib/puppet/network/client/runner.rb +13 -0
  106. data/lib/puppet/network/client/status.rb +5 -0
  107. data/lib/puppet/network/client_request.rb +32 -0
  108. data/lib/puppet/network/handler.rb +33 -0
  109. data/lib/puppet/{server → network/handler}/ca.rb +5 -6
  110. data/lib/puppet/network/handler/filebucket.rb +180 -0
  111. data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
  112. data/lib/puppet/{server → network/handler}/logger.rb +3 -5
  113. data/lib/puppet/{server → network/handler}/master.rb +42 -8
  114. data/lib/puppet/network/handler/report.rb +158 -0
  115. data/lib/puppet/network/handler/resource.rb +190 -0
  116. data/lib/puppet/{server → network/handler}/runner.rb +17 -18
  117. data/lib/puppet/network/handler/status.rb +13 -0
  118. data/lib/puppet/network/rights.rb +74 -0
  119. data/lib/puppet/network/server.rb +5 -0
  120. data/lib/puppet/network/server/mongrel.rb +138 -0
  121. data/lib/puppet/network/server/webrick.rb +153 -0
  122. data/lib/puppet/network/xmlrpc/client.rb +129 -0
  123. data/lib/puppet/network/xmlrpc/processor.rb +91 -0
  124. data/lib/puppet/network/xmlrpc/server.rb +20 -0
  125. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
  126. data/lib/puppet/parameter.rb +390 -346
  127. data/lib/puppet/parser/ast.rb +116 -147
  128. data/lib/puppet/parser/ast/astarray.rb +17 -33
  129. data/lib/puppet/parser/ast/branch.rb +2 -0
  130. data/lib/puppet/parser/ast/caseopt.rb +7 -12
  131. data/lib/puppet/parser/ast/casestatement.rb +23 -32
  132. data/lib/puppet/parser/ast/collection.rb +19 -80
  133. data/lib/puppet/parser/ast/collexpr.rb +81 -0
  134. data/lib/puppet/parser/ast/component.rb +160 -89
  135. data/lib/puppet/parser/ast/else.rb +30 -0
  136. data/lib/puppet/parser/ast/function.rb +9 -2
  137. data/lib/puppet/parser/ast/hostclass.rb +47 -131
  138. data/lib/puppet/parser/ast/ifstatement.rb +43 -0
  139. data/lib/puppet/parser/ast/leaf.rb +10 -21
  140. data/lib/puppet/parser/ast/node.rb +32 -79
  141. data/lib/puppet/parser/ast/resourcedef.rb +222 -0
  142. data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
  143. data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
  144. data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
  145. data/lib/puppet/parser/ast/resourceref.rb +44 -0
  146. data/lib/puppet/parser/ast/selector.rb +16 -8
  147. data/lib/puppet/parser/ast/tag.rb +3 -1
  148. data/lib/puppet/parser/ast/vardef.rb +8 -12
  149. data/lib/puppet/parser/collector.rb +181 -0
  150. data/lib/puppet/parser/functions.rb +191 -36
  151. data/lib/puppet/parser/interpreter.rb +802 -380
  152. data/lib/puppet/parser/lexer.rb +86 -19
  153. data/lib/puppet/parser/parser.rb +1123 -960
  154. data/lib/puppet/parser/resource.rb +353 -0
  155. data/lib/puppet/parser/resource/param.rb +57 -0
  156. data/lib/puppet/parser/resource/reference.rb +71 -0
  157. data/lib/puppet/parser/scope.rb +573 -1000
  158. data/lib/puppet/parser/templatewrapper.rb +54 -0
  159. data/lib/puppet/pgraph.rb +208 -0
  160. data/lib/puppet/propertychange.rb +143 -0
  161. data/lib/puppet/provider.rb +302 -0
  162. data/lib/puppet/provider/cron/crontab.rb +187 -0
  163. data/lib/puppet/provider/group/groupadd.rb +29 -0
  164. data/lib/puppet/provider/group/netinfo.rb +12 -0
  165. data/lib/puppet/provider/group/pw.rb +31 -0
  166. data/lib/puppet/provider/host/netinfo.rb +18 -0
  167. data/lib/puppet/provider/host/parsed.rb +73 -0
  168. data/lib/puppet/provider/mount.rb +57 -0
  169. data/lib/puppet/provider/mount/netinfo.rb +38 -0
  170. data/lib/puppet/provider/mount/parsed.rb +37 -0
  171. data/lib/puppet/provider/nameservice.rb +344 -0
  172. data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
  173. data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
  174. data/lib/puppet/provider/nameservice/pw.rb +22 -0
  175. data/lib/puppet/provider/package/apple.rb +53 -0
  176. data/lib/puppet/provider/package/apt.rb +119 -0
  177. data/lib/puppet/provider/package/aptitude.rb +30 -0
  178. data/lib/puppet/provider/package/aptrpm.rb +79 -0
  179. data/lib/puppet/provider/package/blastwave.rb +114 -0
  180. data/lib/puppet/provider/package/darwinport.rb +88 -0
  181. data/lib/puppet/provider/package/dpkg.rb +109 -0
  182. data/lib/puppet/provider/package/freebsd.rb +43 -0
  183. data/lib/puppet/provider/package/gem.rb +104 -0
  184. data/lib/puppet/provider/package/openbsd.rb +93 -0
  185. data/lib/puppet/provider/package/pkgdmg.rb +119 -0
  186. data/lib/puppet/provider/package/portage.rb +112 -0
  187. data/lib/puppet/provider/package/ports.rb +94 -0
  188. data/lib/puppet/provider/package/rpm.rb +125 -0
  189. data/lib/puppet/provider/package/rug.rb +53 -0
  190. data/lib/puppet/provider/package/sun.rb +168 -0
  191. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  192. data/lib/puppet/provider/package/up2date.rb +45 -0
  193. data/lib/puppet/provider/package/yum.rb +54 -0
  194. data/lib/puppet/provider/parsedfile.rb +342 -0
  195. data/lib/puppet/provider/port/parsed.rb +174 -0
  196. data/lib/puppet/provider/service/base.rb +136 -0
  197. data/lib/puppet/provider/service/debian.rb +32 -0
  198. data/lib/puppet/provider/service/gentoo.rb +49 -0
  199. data/lib/puppet/{type → provider}/service/init.rb +42 -40
  200. data/lib/puppet/provider/service/redhat.rb +59 -0
  201. data/lib/puppet/{type → provider}/service/smf.rb +24 -13
  202. data/lib/puppet/provider/sshkey/parsed.rb +36 -0
  203. data/lib/puppet/provider/user/netinfo.rb +106 -0
  204. data/lib/puppet/provider/user/pw.rb +41 -0
  205. data/lib/puppet/provider/user/useradd.rb +67 -0
  206. data/lib/puppet/provider/zone/solaris.rb +208 -0
  207. data/lib/puppet/rails.rb +102 -66
  208. data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
  209. data/lib/puppet/rails/database/schema.rb +89 -0
  210. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
  211. data/lib/puppet/rails/external/tagging/init.rb +5 -0
  212. data/lib/puppet/rails/external/tagging/tag.rb +50 -0
  213. data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
  214. data/lib/puppet/rails/fact_name.rb +7 -0
  215. data/lib/puppet/rails/fact_value.rb +5 -0
  216. data/lib/puppet/rails/host.rb +95 -46
  217. data/lib/puppet/rails/param_name.rb +28 -0
  218. data/lib/puppet/rails/param_value.rb +5 -0
  219. data/lib/puppet/rails/puppet_class.rb +9 -0
  220. data/lib/puppet/rails/resource.rb +95 -0
  221. data/lib/puppet/rails/source_file.rb +5 -0
  222. data/lib/puppet/relationship.rb +63 -0
  223. data/lib/puppet/reports/log.rb +14 -0
  224. data/lib/puppet/reports/rrdgraph.rb +114 -10
  225. data/lib/puppet/reports/store.rb +64 -0
  226. data/lib/puppet/reports/tagmail.rb +144 -71
  227. data/lib/puppet/sslcertificates.rb +38 -5
  228. data/lib/puppet/sslcertificates/ca.rb +142 -37
  229. data/lib/puppet/sslcertificates/certificate.rb +3 -3
  230. data/lib/puppet/sslcertificates/inventory.rb +53 -0
  231. data/lib/puppet/sslcertificates/support.rb +128 -0
  232. data/lib/puppet/transaction.rb +568 -189
  233. data/lib/puppet/transaction/report.rb +14 -3
  234. data/lib/puppet/transportable.rb +18 -10
  235. data/lib/puppet/type.rb +279 -2299
  236. data/lib/puppet/type/component.rb +63 -63
  237. data/lib/puppet/type/cron.rb +294 -710
  238. data/lib/puppet/type/exec.rb +185 -129
  239. data/lib/puppet/type/group.rb +38 -89
  240. data/lib/puppet/type/host.rb +110 -0
  241. data/lib/puppet/type/mount.rb +189 -0
  242. data/lib/puppet/type/notify.rb +47 -0
  243. data/lib/puppet/type/package.rb +129 -257
  244. data/lib/puppet/type/parsedtype.rb +172 -297
  245. data/lib/puppet/type/pfile.rb +540 -319
  246. data/lib/puppet/type/pfile/checksum.rb +103 -76
  247. data/lib/puppet/type/pfile/content.rb +16 -10
  248. data/lib/puppet/type/pfile/ensure.rb +52 -34
  249. data/lib/puppet/type/pfile/group.rb +25 -18
  250. data/lib/puppet/type/pfile/mode.rb +7 -4
  251. data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
  252. data/lib/puppet/type/pfile/source.rb +119 -124
  253. data/lib/puppet/type/pfile/target.rb +29 -45
  254. data/lib/puppet/type/pfile/type.rb +2 -2
  255. data/lib/puppet/type/pfilebucket.rb +18 -14
  256. data/lib/puppet/type/port.rb +121 -0
  257. data/lib/puppet/type/property.rb +530 -0
  258. data/lib/puppet/type/resources.rb +150 -0
  259. data/lib/puppet/type/schedule.rb +38 -22
  260. data/lib/puppet/type/service.rb +70 -326
  261. data/lib/puppet/type/sshkey.rb +76 -0
  262. data/lib/puppet/type/tidy.rb +197 -97
  263. data/lib/puppet/type/user.rb +107 -183
  264. data/lib/puppet/type/yumrepo.rb +53 -34
  265. data/lib/puppet/type/zone.rb +55 -208
  266. data/lib/puppet/util.rb +239 -201
  267. data/lib/puppet/util/autoload.rb +107 -0
  268. data/lib/puppet/util/classgen.rb +208 -0
  269. data/lib/puppet/{config.rb → util/config.rb} +102 -54
  270. data/lib/puppet/util/docs.rb +104 -0
  271. data/lib/puppet/util/errors.rb +55 -0
  272. data/lib/puppet/util/execution.rb +22 -0
  273. data/lib/puppet/util/feature.rb +76 -0
  274. data/lib/puppet/util/fileparsing.rb +380 -0
  275. data/lib/puppet/util/filetype.rb +300 -0
  276. data/lib/puppet/util/graph.rb +39 -0
  277. data/lib/puppet/util/inifile.rb +209 -0
  278. data/lib/puppet/util/loadedfile.rb +71 -0
  279. data/lib/puppet/util/log.rb +549 -0
  280. data/lib/puppet/util/logging.rb +20 -0
  281. data/lib/puppet/util/metaid.rb +22 -0
  282. data/lib/puppet/util/methodhelper.rb +37 -0
  283. data/lib/puppet/util/metric.rb +160 -0
  284. data/lib/puppet/util/package.rb +31 -0
  285. data/lib/puppet/util/pidlock.rb +68 -0
  286. data/lib/puppet/util/plist.rb +24 -0
  287. data/lib/puppet/util/plist/generator.rb +226 -0
  288. data/lib/puppet/util/plist/parser.rb +227 -0
  289. data/lib/puppet/util/posix.rb +87 -0
  290. data/lib/puppet/util/provider_features.rb +170 -0
  291. data/lib/puppet/util/rails/collection_merger.rb +42 -0
  292. data/lib/puppet/util/storage.rb +103 -0
  293. data/lib/puppet/util/subclass_loader.rb +83 -0
  294. data/lib/puppet/util/suidmanager.rb +86 -0
  295. data/lib/puppet/util/variables.rb +39 -0
  296. data/lib/puppet/util/warnings.rb +15 -0
  297. data/test/Rakefile +97 -0
  298. data/test/certmgr/ca.rb +81 -0
  299. data/test/certmgr/certmgr.rb +77 -50
  300. data/test/certmgr/inventory.rb +79 -0
  301. data/test/certmgr/support.rb +81 -0
  302. data/test/executables/filebucket.rb +49 -0
  303. data/test/executables/puppetbin.rb +28 -12
  304. data/test/executables/puppetca.rb +75 -54
  305. data/test/executables/puppetd.rb +10 -13
  306. data/test/executables/puppetmasterd.rb +12 -17
  307. data/test/executables/puppetmodule.rb +18 -17
  308. data/test/language/ast.rb +242 -798
  309. data/test/language/ast/casestatement.rb +104 -0
  310. data/test/language/ast/component.rb +133 -0
  311. data/test/language/ast/hostclass.rb +162 -0
  312. data/test/language/ast/selector.rb +62 -0
  313. data/test/language/ast/variable.rb +31 -0
  314. data/test/language/collector.rb +369 -0
  315. data/test/language/functions.rb +305 -18
  316. data/test/language/interpreter.rb +894 -125
  317. data/test/language/lexer.rb +98 -12
  318. data/test/language/node.rb +37 -53
  319. data/test/language/parser.rb +455 -148
  320. data/test/language/resource.rb +535 -0
  321. data/test/language/scope.rb +451 -561
  322. data/test/language/snippets.rb +101 -111
  323. data/test/language/transportable.rb +6 -8
  324. data/test/lib/mocha.rb +19 -0
  325. data/test/lib/mocha/any_instance_method.rb +35 -0
  326. data/test/lib/mocha/auto_verify.rb +113 -0
  327. data/test/lib/mocha/central.rb +35 -0
  328. data/test/lib/mocha/class_method.rb +62 -0
  329. data/test/lib/mocha/expectation.rb +295 -0
  330. data/test/lib/mocha/expectation_error.rb +6 -0
  331. data/test/lib/mocha/infinite_range.rb +27 -0
  332. data/test/lib/mocha/inspect.rb +37 -0
  333. data/test/lib/mocha/instance_method.rb +8 -0
  334. data/test/lib/mocha/metaclass.rb +7 -0
  335. data/test/lib/mocha/mock.rb +20 -0
  336. data/test/lib/mocha/mock_methods.rb +122 -0
  337. data/test/lib/mocha/object.rb +100 -0
  338. data/test/lib/mocha/pretty_parameters.rb +28 -0
  339. data/test/lib/mocha/setup_and_teardown.rb +23 -0
  340. data/test/lib/mocha/standalone.rb +30 -0
  341. data/test/lib/mocha/test_case_adapter.rb +49 -0
  342. data/test/lib/mocha_standalone.rb +2 -0
  343. data/test/lib/puppettest.rb +294 -0
  344. data/test/lib/puppettest/certificates.rb +61 -0
  345. data/test/lib/puppettest/exetest.rb +123 -0
  346. data/test/lib/puppettest/fakes.rb +194 -0
  347. data/test/lib/puppettest/fileparsing.rb +33 -0
  348. data/test/lib/puppettest/filetesting.rb +231 -0
  349. data/test/lib/puppettest/graph.rb +41 -0
  350. data/test/lib/puppettest/parsertesting.rb +392 -0
  351. data/test/lib/puppettest/railstesting.rb +56 -0
  352. data/test/lib/puppettest/reporttesting.rb +19 -0
  353. data/test/lib/puppettest/resourcetesting.rb +73 -0
  354. data/test/lib/puppettest/servertest.rb +72 -0
  355. data/test/lib/puppettest/support.rb +8 -0
  356. data/test/lib/puppettest/support/assertions.rb +101 -0
  357. data/test/lib/puppettest/support/helpers.rb +23 -0
  358. data/test/lib/puppettest/support/resources.rb +37 -0
  359. data/test/lib/puppettest/support/utils.rb +160 -0
  360. data/test/lib/puppettest/testcase.rb +48 -0
  361. data/test/lib/rake/puppet_test_loader.rb +17 -0
  362. data/test/lib/rake/puppet_testtask.rb +17 -0
  363. data/test/lib/spec.rb +8 -0
  364. data/test/lib/spec/callback.rb +11 -0
  365. data/test/lib/spec/callback/callback_container.rb +60 -0
  366. data/test/lib/spec/callback/extensions/module.rb +24 -0
  367. data/test/lib/spec/callback/extensions/object.rb +37 -0
  368. data/test/lib/spec/deprecated.rb +3 -0
  369. data/test/lib/spec/expectations.rb +59 -0
  370. data/test/lib/spec/expectations/differs/default.rb +62 -0
  371. data/test/lib/spec/expectations/errors.rb +6 -0
  372. data/test/lib/spec/expectations/extensions.rb +3 -0
  373. data/test/lib/spec/expectations/extensions/object.rb +109 -0
  374. data/test/lib/spec/expectations/extensions/proc.rb +57 -0
  375. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  376. data/test/lib/spec/expectations/handler.rb +47 -0
  377. data/test/lib/spec/expectations/should.rb +5 -0
  378. data/test/lib/spec/expectations/should/base.rb +64 -0
  379. data/test/lib/spec/expectations/should/change.rb +69 -0
  380. data/test/lib/spec/expectations/should/have.rb +128 -0
  381. data/test/lib/spec/expectations/should/not.rb +74 -0
  382. data/test/lib/spec/expectations/should/should.rb +81 -0
  383. data/test/lib/spec/expectations/sugar.rb +47 -0
  384. data/test/lib/spec/matchers.rb +160 -0
  385. data/test/lib/spec/matchers/be.rb +161 -0
  386. data/test/lib/spec/matchers/be_close.rb +37 -0
  387. data/test/lib/spec/matchers/change.rb +120 -0
  388. data/test/lib/spec/matchers/eql.rb +43 -0
  389. data/test/lib/spec/matchers/equal.rb +43 -0
  390. data/test/lib/spec/matchers/has.rb +44 -0
  391. data/test/lib/spec/matchers/have.rb +140 -0
  392. data/test/lib/spec/matchers/include.rb +50 -0
  393. data/test/lib/spec/matchers/match.rb +41 -0
  394. data/test/lib/spec/matchers/raise_error.rb +100 -0
  395. data/test/lib/spec/matchers/respond_to.rb +35 -0
  396. data/test/lib/spec/matchers/satisfy.rb +47 -0
  397. data/test/lib/spec/matchers/throw_symbol.rb +75 -0
  398. data/test/lib/spec/mocks.rb +232 -0
  399. data/test/lib/spec/mocks/argument_expectation.rb +132 -0
  400. data/test/lib/spec/mocks/error_generator.rb +85 -0
  401. data/test/lib/spec/mocks/errors.rb +10 -0
  402. data/test/lib/spec/mocks/extensions/object.rb +3 -0
  403. data/test/lib/spec/mocks/message_expectation.rb +231 -0
  404. data/test/lib/spec/mocks/methods.rb +40 -0
  405. data/test/lib/spec/mocks/mock.rb +26 -0
  406. data/test/lib/spec/mocks/mock_handler.rb +166 -0
  407. data/test/lib/spec/mocks/order_group.rb +29 -0
  408. data/test/lib/spec/rake/spectask.rb +173 -0
  409. data/test/lib/spec/rake/verify_rcov.rb +47 -0
  410. data/test/lib/spec/runner.rb +132 -0
  411. data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
  412. data/test/lib/spec/runner/command_line.rb +34 -0
  413. data/test/lib/spec/runner/context.rb +154 -0
  414. data/test/lib/spec/runner/context_eval.rb +142 -0
  415. data/test/lib/spec/runner/context_runner.rb +55 -0
  416. data/test/lib/spec/runner/drb_command_line.rb +21 -0
  417. data/test/lib/spec/runner/execution_context.rb +17 -0
  418. data/test/lib/spec/runner/extensions/kernel.rb +17 -0
  419. data/test/lib/spec/runner/extensions/object.rb +32 -0
  420. data/test/lib/spec/runner/formatter.rb +5 -0
  421. data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
  422. data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
  423. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
  424. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
  425. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
  426. data/test/lib/spec/runner/heckle_runner.rb +71 -0
  427. data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
  428. data/test/lib/spec/runner/option_parser.rb +224 -0
  429. data/test/lib/spec/runner/reporter.rb +105 -0
  430. data/test/lib/spec/runner/spec_matcher.rb +25 -0
  431. data/test/lib/spec/runner/spec_parser.rb +41 -0
  432. data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
  433. data/test/lib/spec/runner/specification.rb +114 -0
  434. data/test/lib/spec/translator.rb +87 -0
  435. data/test/lib/spec/version.rb +30 -0
  436. data/test/lib/stubba.rb +2 -0
  437. data/test/network/authconfig.rb +72 -0
  438. data/test/network/authorization.rb +138 -0
  439. data/test/network/authstore.rb +450 -0
  440. data/test/network/client/ca.rb +38 -0
  441. data/test/{client → network/client}/client.rb +107 -24
  442. data/test/network/client/dipper.rb +35 -0
  443. data/test/network/client/master.rb +627 -0
  444. data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
  445. data/test/network/client_request.rb +39 -0
  446. data/test/network/daemon.rb +71 -0
  447. data/test/{server → network/handler}/bucket.rb +103 -27
  448. data/test/{server → network/handler}/ca.rb +14 -19
  449. data/test/{server → network/handler}/fileserver.rb +443 -68
  450. data/test/network/handler/handler.rb +64 -0
  451. data/test/{server → network/handler}/logger.rb +26 -26
  452. data/test/network/handler/master.rb +352 -0
  453. data/test/network/handler/report.rb +185 -0
  454. data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
  455. data/test/{server → network/handler}/runner.rb +17 -16
  456. data/test/network/rights.rb +38 -0
  457. data/test/network/server/webrick.rb +140 -0
  458. data/test/network/xmlrpc/client.rb +68 -0
  459. data/test/network/xmlrpc/processor.rb +80 -0
  460. data/test/network/xmlrpc/server.rb +28 -0
  461. data/test/network/xmlrpc/webrick_servlet.rb +26 -0
  462. data/test/other/dsl.rb +218 -0
  463. data/test/other/events.rb +22 -15
  464. data/test/other/overrides.rb +9 -14
  465. data/test/other/pgraph.rb +289 -0
  466. data/test/other/propertychange.rb +142 -0
  467. data/test/other/provider.rb +162 -0
  468. data/test/other/puppet.rb +63 -10
  469. data/test/other/relationship.rb +74 -0
  470. data/test/other/relationships.rb +199 -123
  471. data/test/other/report.rb +152 -23
  472. data/test/other/transactions.rb +824 -78
  473. data/test/puppet/conffiles.rb +16 -11
  474. data/test/puppet/defaults.rb +7 -10
  475. data/test/puppet/{error.rb → errortest.rb} +5 -8
  476. data/test/puppet/modules.rb +58 -0
  477. data/test/puppet/tc_suidmanager.rb +107 -0
  478. data/test/rails/host.rb +177 -0
  479. data/test/rails/rails.rb +27 -0
  480. data/test/rails/railsparameter.rb +62 -0
  481. data/test/rails/railsresource.rb +100 -0
  482. data/test/ral/manager/attributes.rb +296 -0
  483. data/test/ral/manager/manager.rb +55 -0
  484. data/test/ral/manager/provider.rb +54 -0
  485. data/test/ral/manager/type.rb +837 -0
  486. data/test/ral/providers/cron/crontab.rb +346 -0
  487. data/test/ral/providers/group.rb +252 -0
  488. data/test/ral/providers/host/netinfo.rb +58 -0
  489. data/test/ral/providers/host/parsed.rb +226 -0
  490. data/test/ral/providers/mount/netinfo.rb +80 -0
  491. data/test/ral/providers/mount/parsed.rb +223 -0
  492. data/test/ral/providers/nameservice.rb +33 -0
  493. data/test/ral/providers/package.rb +253 -0
  494. data/test/ral/providers/package/apt.rb +89 -0
  495. data/test/ral/providers/package/aptitude.rb +69 -0
  496. data/test/ral/providers/package/aptrpm.rb +89 -0
  497. data/test/ral/providers/package/dpkg.rb +64 -0
  498. data/test/ral/providers/parsedfile.rb +668 -0
  499. data/test/ral/providers/parsedport.rb +233 -0
  500. data/test/ral/providers/provider.rb +423 -0
  501. data/test/{types → ral/providers}/service.rb +20 -121
  502. data/test/ral/providers/service/base.rb +75 -0
  503. data/test/ral/providers/sshkey/parsed.rb +111 -0
  504. data/test/ral/providers/user.rb +567 -0
  505. data/test/ral/providers/user/useradd.rb +250 -0
  506. data/test/ral/types/basic.rb +90 -0
  507. data/test/ral/types/component.rb +113 -0
  508. data/test/ral/types/cron.rb +480 -0
  509. data/test/{types → ral/types}/exec.rb +278 -82
  510. data/test/ral/types/file.rb +1799 -0
  511. data/test/ral/types/file/target.rb +363 -0
  512. data/test/{types → ral/types}/filebucket.rb +15 -17
  513. data/test/{types → ral/types}/fileignoresource.rb +9 -15
  514. data/test/ral/types/filesources.rb +1046 -0
  515. data/test/ral/types/group.rb +169 -0
  516. data/test/ral/types/host.rb +155 -0
  517. data/test/ral/types/mount.rb +312 -0
  518. data/test/ral/types/package.rb +85 -0
  519. data/test/ral/types/parameter.rb +172 -0
  520. data/test/ral/types/port.rb +148 -0
  521. data/test/ral/types/property.rb +343 -0
  522. data/test/ral/types/resources.rb +221 -0
  523. data/test/{types → ral/types}/schedule.rb +34 -12
  524. data/test/ral/types/service.rb +37 -0
  525. data/test/{types → ral/types}/sshkey.rb +75 -65
  526. data/test/ral/types/tidy.rb +240 -0
  527. data/test/ral/types/user.rb +493 -0
  528. data/test/{types → ral/types}/yumrepo.rb +7 -11
  529. data/test/{types → ral/types}/zone.rb +45 -45
  530. data/test/tagging/tagging.rb +17 -26
  531. data/test/util/autoload.rb +130 -0
  532. data/test/util/classgen.rb +227 -0
  533. data/test/{other → util}/config.rb +373 -113
  534. data/test/util/execution.rb +34 -0
  535. data/test/util/features.rb +94 -0
  536. data/test/util/fileparsing.rb +677 -0
  537. data/test/{other → util}/filetype.rb +9 -12
  538. data/test/util/graph.rb +108 -0
  539. data/test/{other → util}/inifile.rb +24 -11
  540. data/test/util/loadedfile.rb +106 -0
  541. data/test/{other → util}/log.rb +96 -50
  542. data/test/{other → util}/metrics.rb +7 -17
  543. data/test/util/package.rb +27 -0
  544. data/test/util/pidlock.rb +126 -0
  545. data/test/util/posixtest.rb +173 -0
  546. data/test/util/storage.rb +123 -0
  547. data/test/util/subclass_loader.rb +100 -0
  548. data/test/util/utiltest.rb +368 -0
  549. metadata +449 -169
  550. data/examples/code/classing +0 -35
  551. data/examples/code/failers/badclassnoparam +0 -10
  552. data/examples/code/failers/badclassparam +0 -10
  553. data/examples/code/failers/badcompnoparam +0 -9
  554. data/examples/code/failers/badcompparam +0 -9
  555. data/examples/code/failers/badtypeparam +0 -3
  556. data/examples/code/failers/noobjectrvalue +0 -1
  557. data/examples/code/snippets/aliastest.pp +0 -16
  558. data/examples/code/snippets/argumentdefaults +0 -14
  559. data/examples/code/snippets/casestatement.pp +0 -58
  560. data/examples/code/snippets/classheirarchy.pp +0 -15
  561. data/examples/code/snippets/classincludes.pp +0 -17
  562. data/examples/code/snippets/classpathtest +0 -11
  563. data/examples/code/snippets/componentmetaparams.pp +0 -11
  564. data/examples/code/snippets/deepclassheirarchy.pp +0 -23
  565. data/examples/code/snippets/defineoverrides.pp +0 -17
  566. data/examples/code/snippets/dirchmod +0 -19
  567. data/examples/code/snippets/emptyclass.pp +0 -9
  568. data/examples/code/snippets/emptyexec.pp +0 -3
  569. data/examples/code/snippets/failmissingexecpath.pp +0 -13
  570. data/examples/code/snippets/falsevalues.pp +0 -3
  571. data/examples/code/snippets/filecreate +0 -11
  572. data/examples/code/snippets/implicititeration +0 -15
  573. data/examples/code/snippets/multipleinstances +0 -7
  574. data/examples/code/snippets/namevartest +0 -9
  575. data/examples/code/snippets/scopetest +0 -13
  576. data/examples/code/snippets/selectorvalues.pp +0 -42
  577. data/examples/code/snippets/simpledefaults +0 -5
  578. data/examples/code/snippets/simpleselector +0 -38
  579. data/examples/code/snippets/singleary.pp +0 -19
  580. data/examples/code/snippets/singlequote.pp +0 -11
  581. data/examples/code/snippets/singleselector.pp +0 -22
  582. data/examples/code/snippets/tag.pp +0 -9
  583. data/examples/code/snippets/tagged.pp +0 -35
  584. data/lib/puppet/client.rb +0 -177
  585. data/lib/puppet/client/ca.rb +0 -21
  586. data/lib/puppet/client/dipper.rb +0 -76
  587. data/lib/puppet/client/file.rb +0 -20
  588. data/lib/puppet/client/log.rb +0 -17
  589. data/lib/puppet/client/master.rb +0 -531
  590. data/lib/puppet/client/runner.rb +0 -17
  591. data/lib/puppet/client/status.rb +0 -7
  592. data/lib/puppet/event-loop.rb +0 -1
  593. data/lib/puppet/filetype.rb +0 -308
  594. data/lib/puppet/inifile.rb +0 -201
  595. data/lib/puppet/log.rb +0 -524
  596. data/lib/puppet/metric.rb +0 -132
  597. data/lib/puppet/networkclient.rb +0 -175
  598. data/lib/puppet/parsedfile.rb +0 -58
  599. data/lib/puppet/parser/ast/classdef.rb +0 -79
  600. data/lib/puppet/parser/ast/compdef.rb +0 -75
  601. data/lib/puppet/parser/ast/nodedef.rb +0 -73
  602. data/lib/puppet/parser/ast/objectdef.rb +0 -284
  603. data/lib/puppet/parser/ast/objectref.rb +0 -77
  604. data/lib/puppet/rails/database.rb +0 -40
  605. data/lib/puppet/rails/rails_object.rb +0 -42
  606. data/lib/puppet/rails/rails_parameter.rb +0 -5
  607. data/lib/puppet/server.rb +0 -196
  608. data/lib/puppet/server/authconfig.rb +0 -177
  609. data/lib/puppet/server/authstore.rb +0 -226
  610. data/lib/puppet/server/filebucket.rb +0 -155
  611. data/lib/puppet/server/pelement.rb +0 -188
  612. data/lib/puppet/server/report.rb +0 -184
  613. data/lib/puppet/server/rights.rb +0 -78
  614. data/lib/puppet/server/servlet.rb +0 -274
  615. data/lib/puppet/statechange.rb +0 -129
  616. data/lib/puppet/storage.rb +0 -98
  617. data/lib/puppet/type/nameservice.rb +0 -264
  618. data/lib/puppet/type/nameservice/netinfo.rb +0 -232
  619. data/lib/puppet/type/nameservice/objectadd.rb +0 -146
  620. data/lib/puppet/type/nameservice/posix.rb +0 -12
  621. data/lib/puppet/type/nameservice/pw.rb +0 -107
  622. data/lib/puppet/type/package/apple.rb +0 -41
  623. data/lib/puppet/type/package/apt.rb +0 -107
  624. data/lib/puppet/type/package/blastwave.rb +0 -136
  625. data/lib/puppet/type/package/darwinport.rb +0 -97
  626. data/lib/puppet/type/package/dpkg.rb +0 -113
  627. data/lib/puppet/type/package/freebsd.rb +0 -19
  628. data/lib/puppet/type/package/gem.rb +0 -119
  629. data/lib/puppet/type/package/openbsd.rb +0 -112
  630. data/lib/puppet/type/package/ports.rb +0 -103
  631. data/lib/puppet/type/package/rpm.rb +0 -121
  632. data/lib/puppet/type/package/sun.rb +0 -174
  633. data/lib/puppet/type/package/sunfreeware.rb +0 -7
  634. data/lib/puppet/type/package/yum.rb +0 -52
  635. data/lib/puppet/type/parsedtype/host.rb +0 -144
  636. data/lib/puppet/type/parsedtype/mount.rb +0 -271
  637. data/lib/puppet/type/parsedtype/port.rb +0 -261
  638. data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
  639. data/lib/puppet/type/service/base.rb +0 -12
  640. data/lib/puppet/type/service/debian.rb +0 -46
  641. data/lib/puppet/type/service/redhat.rb +0 -38
  642. data/lib/puppet/type/state.rb +0 -393
  643. data/lib/puppet/type/symlink.rb +0 -186
  644. data/test/client/master.rb +0 -207
  645. data/test/language/rails.rb +0 -105
  646. data/test/other/parsedfile.rb +0 -58
  647. data/test/other/storage.rb +0 -100
  648. data/test/puppet/utiltest.rb +0 -299
  649. data/test/puppettest.rb +0 -1170
  650. data/test/server/authconfig.rb +0 -56
  651. data/test/server/authstore.rb +0 -218
  652. data/test/server/master.rb +0 -201
  653. data/test/server/report.rb +0 -93
  654. data/test/server/rights.rb +0 -41
  655. data/test/server/server.rb +0 -152
  656. data/test/test +0 -61
  657. data/test/types/basic.rb +0 -117
  658. data/test/types/component.rb +0 -298
  659. data/test/types/cron.rb +0 -718
  660. data/test/types/file.rb +0 -1314
  661. data/test/types/filesources.rb +0 -590
  662. data/test/types/group.rb +0 -323
  663. data/test/types/host.rb +0 -186
  664. data/test/types/mount.rb +0 -294
  665. data/test/types/package.rb +0 -538
  666. data/test/types/parameter.rb +0 -107
  667. data/test/types/port.rb +0 -201
  668. data/test/types/query.rb +0 -101
  669. data/test/types/state.rb +0 -92
  670. data/test/types/symlink.rb +0 -120
  671. data/test/types/tidy.rb +0 -102
  672. data/test/types/type.rb +0 -469
  673. data/test/types/user.rb +0 -563
@@ -0,0 +1,153 @@
1
+ #--
2
+ # Copyright (c) 2006 Shawn Patrick Garbett
3
+ # Copyright (c) 2002,2004,2005 by Horst Duchene
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without modification,
6
+ # are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright notice(s),
9
+ # this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ # * Neither the name of the Shawn Garbett nor the names of its contributors
14
+ # may be used to endorse or promote products derived from this software
15
+ # without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
21
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ #++
28
+
29
+
30
+ require 'puppet/external/gratr/adjacency_graph'
31
+ require 'puppet/external/gratr/search'
32
+ require 'puppet/external/gratr/biconnected'
33
+ require 'puppet/external/gratr/comparability'
34
+ require 'set'
35
+
36
+ module GRATR
37
+ class UndirectedGraph
38
+ include AdjacencyGraph
39
+ include Graph::Search
40
+ include Graph::Biconnected
41
+ include Graph::Comparability
42
+
43
+ def initialize(*params)
44
+ raise ArgumentError if params.any? do |p|
45
+ !(p.kind_of? GRATR::Graph or p.kind_of? Array)
46
+ end if self.class == GRATR::UndirectedGraph
47
+ super(*params)
48
+ end
49
+
50
+ # UndirectedGraph is by definition undirected, always returns false
51
+ def directed?() false; end
52
+
53
+ # Redefine degree (default was sum)
54
+ def degree(v) in_degree(v); end
55
+
56
+ # A vertex of an undirected graph is balanced by definition
57
+ def balanced?(v) true; end
58
+
59
+ # UndirectedGraph uses UndirectedEdge for the edge class.
60
+ def edge_class() @parallel_edges ? GRATR::MultiUndirectedEdge : GRATR::UndirectedEdge; end
61
+
62
+ def remove_edge!(u, v=nil)
63
+ unless u.kind_of? GRATR::Edge
64
+ raise ArgumentError if @parallel_edges
65
+ u = edge_class[u,v]
66
+ end
67
+ super(u.reverse) unless u.source == u.target
68
+ super(u)
69
+ end
70
+
71
+ # A triangulated graph is an undirected perfect graph that every cycle of length greater than
72
+ # three possesses a chord. They have also been called chordal, rigid circuit, monotone transitive,
73
+ # and perfect elimination graphs.
74
+ #
75
+ # Implementation taken from Golumbic's, "Algorithmic Graph Theory and
76
+ # Perfect Graphs" pg. 90
77
+ def triangulated?
78
+ a = Hash.new {|h,k| h[k]=Set.new}; sigma=lexicograph_bfs
79
+ inv_sigma = sigma.inject({}) {|acc,val| acc[val] = sigma.index(val); acc}
80
+ sigma[0..-2].each do |v|
81
+ x = adjacent(v).select {|w| inv_sigma[v] < inv_sigma[w] }
82
+ unless x.empty?
83
+ u = sigma[x.map {|y| inv_sigma[y]}.min]
84
+ a[u].merge(x - [u])
85
+ end
86
+ return false unless a[v].all? {|z| adjacent?(v,z)}
87
+ end
88
+ true
89
+ end
90
+
91
+ def chromatic_number
92
+ return triangulated_chromatic_number if triangulated?
93
+ raise NotImplementedError
94
+ end
95
+
96
+ # An interval graph can have its vertices into one-to-one
97
+ # correspondence with a set of intervals F of a linearly ordered
98
+ # set (like the real line) such that two vertices are connected
99
+ # by an edge of G if and only if their corresponding intervals
100
+ # have nonempty intersection.
101
+ def interval?() triangulated? and complement.comparability?; end
102
+
103
+ # A permutation diagram consists of n points on each of two parallel
104
+ # lines and n straight line segments matchin the points. The intersection
105
+ # graph of the line segments is called a permutation graph.
106
+ def permutation?() comparability? and complement.comparability?; end
107
+
108
+ # An undirected graph is defined to be split if there is a partition
109
+ # V = S + K of its vertex set into a stable set S and a complete set K.
110
+ def split?() triangulated? and complement.triangulated?; end
111
+
112
+ private
113
+ # Implementation taken from Golumbic's, "Algorithmic Graph Theory and
114
+ # Perfect Graphs" pg. 99
115
+ def triangulated_chromatic_number
116
+ chi = 1; s= Hash.new {|h,k| h[k]=0}
117
+ sigma=lexicograph_bfs
118
+ inv_sigma = sigma.inject({}) {|acc,val| acc[val] = sigma.index(val); acc}
119
+ sigma.each do |v|
120
+ x = adjacent(v).select {|w| inv_sigma[v] < inv_sigma[w] }
121
+ unless x.empty?
122
+ u = sigma[x.map {|y| inv_sigma[y]}.min]
123
+ s[u] = [s[u], x.size-1].max
124
+ chi = [chi, x.size+1].max if s[v] < x.size
125
+ end
126
+ end; chi
127
+ end
128
+
129
+ end # UndirectedGraph
130
+
131
+ # This is a UndirectedGraph that allows for parallel edges, but does not
132
+ # allow loops
133
+ class UndirectedPseudoGraph < UndirectedGraph
134
+ def initialize(*params)
135
+ raise ArgumentError if params.any? do |p|
136
+ !(p.kind_of? Graph or p.kind_of? Array)
137
+ end
138
+ super(:parallel_edges, *params)
139
+ end
140
+ end
141
+
142
+ # This is a UndirectedGraph that allows for parallel edges and loops
143
+ class UndirectedMultiGraph < UndirectedGraph
144
+ def initialize(*params)
145
+ raise ArgumentError if params.any? do |p|
146
+ !(p.kind_of? Graph or p.kind_of? Array)
147
+ end
148
+ super(:parallel_edges, :loops, *params)
149
+ end
150
+ end
151
+
152
+
153
+ end # GRATR
@@ -61,4 +61,4 @@ class File
61
61
  end
62
62
  end
63
63
 
64
- # $Id: lock.rb 897 2006-02-12 18:08:39Z luke $
64
+ # $Id: lock.rb 2119 2007-01-30 05:27:56Z luke $
@@ -0,0 +1,20 @@
1
+ # Created by Luke Kanies on 2006-04-30.
2
+ # Copyright (c) 2006. All rights reserved.
3
+
4
+ require 'puppet/util/feature'
5
+
6
+ # Add the simple features, all in one file.
7
+
8
+ # We've got LDAP available.
9
+ Puppet.features.add(:ldap, :libs => ["ldap"])
10
+
11
+ # We have the Rdoc::Usage library.
12
+ Puppet.features.add(:usage, :libs => %w{rdoc/ri/ri_paths rdoc/usage})
13
+
14
+ # We have libshadow, useful for managing passwords.
15
+ Puppet.features.add(:libshadow, :libs => ["shadow"])
16
+
17
+ # We're running as root.
18
+ Puppet.features.add(:root) { require 'puppet/util/suidmanager'; Puppet::Util::SUIDManager.uid == 0 }
19
+
20
+ # $Id: base.rb 2441 2007-04-30 19:41:18Z luke $
@@ -0,0 +1,52 @@
1
+ # Created by Luke Kanies on 2006-11-07.
2
+ # Copyright (c) 2006. All rights reserved.
3
+
4
+ require 'puppet/util/feature'
5
+
6
+ Puppet.features.add(:rails) do
7
+ begin
8
+ require 'active_record'
9
+ rescue LoadError => detail
10
+ if Facter["operatingsystem"].value == "Debian" and
11
+ FileTest.exists?("/usr/share/rails")
12
+ count = 0
13
+ Dir.entries("/usr/share/rails").each do |dir|
14
+ libdir = File.join("/usr/share/rails", dir, "lib")
15
+ if FileTest.exists?(libdir) and ! $:.include?(libdir)
16
+ count += 1
17
+ $: << libdir
18
+ end
19
+ end
20
+
21
+ if count > 0
22
+ retry
23
+ end
24
+ else
25
+ #If ActiveRecord was installed only via rubygems this is required
26
+ require 'rubygems'
27
+ require 'active_record'
28
+ end
29
+ end
30
+
31
+ # If we couldn't find it the normal way, try using a Gem.
32
+ unless defined? ActiveRecord
33
+ begin
34
+ require 'rubygems'
35
+ require 'rails'
36
+ rescue LoadError
37
+ # Nothing
38
+ end
39
+ end
40
+
41
+ # We check a fairly specific class, so that we can be sure that we've
42
+ # loaded a new enough version of AR that will support the features we
43
+ # actually use.
44
+ if defined? ActiveRecord::Associations::BelongsToPolymorphicAssociation
45
+ require 'puppet/rails'
46
+ true
47
+ else
48
+ false
49
+ end
50
+ end
51
+
52
+ # $Id: rails.rb 2195 2007-02-15 22:36:38Z shadoi $
@@ -0,0 +1,719 @@
1
+ require 'puppet'
2
+ require 'puppet/type'
3
+
4
+ class Puppet::Type
5
+ class << self
6
+ include Puppet::Util::ClassGen
7
+ include Puppet::Util::Warnings
8
+ attr_reader :properties
9
+ end
10
+
11
+ def self.states
12
+ warnonce "The states method is deprecated; use properties"
13
+ properties()
14
+ end
15
+
16
+ # All parameters, in the appropriate order. The namevar comes first,
17
+ # then the properties, then the params and metaparams in the order they
18
+ # were specified in the files.
19
+ def self.allattrs
20
+ # now get all of the arguments, in a specific order
21
+ # Cache this, since it gets called so many times
22
+ namevar = self.namevar
23
+
24
+ order = [namevar]
25
+ if self.parameters.include?(:provider)
26
+ order << :provider
27
+ end
28
+ order << [self.properties.collect { |property| property.name },
29
+ self.parameters - [:provider],
30
+ self.metaparams].flatten.reject { |param|
31
+ # we don't want our namevar in there multiple times
32
+ param == namevar
33
+ }
34
+
35
+ order.flatten!
36
+
37
+ return order
38
+ end
39
+
40
+ # Retrieve an attribute alias, if there is one.
41
+ def self.attr_alias(param)
42
+ @attr_aliases[symbolize(param)]
43
+ end
44
+
45
+ # Create an alias to an existing attribute. This will cause the aliased
46
+ # attribute to be valid when setting and retrieving values on the instance.
47
+ def self.set_attr_alias(hash)
48
+ hash.each do |new, old|
49
+ @attr_aliases[symbolize(new)] = symbolize(old)
50
+ end
51
+ end
52
+
53
+ # Find the class associated with any given attribute.
54
+ def self.attrclass(name)
55
+ @attrclasses ||= {}
56
+
57
+ # We cache the value, since this method gets called such a huge number
58
+ # of times (as in, hundreds of thousands in a given run).
59
+ unless @attrclasses.include?(name)
60
+ @attrclasses[name] = case self.attrtype(name)
61
+ when :property: @validproperties[name]
62
+ when :meta: @@metaparamhash[name]
63
+ when :param: @paramhash[name]
64
+ end
65
+ end
66
+ @attrclasses[name]
67
+ end
68
+
69
+ # What type of parameter are we dealing with? Cache the results, because
70
+ # this method gets called so many times.
71
+ def self.attrtype(attr)
72
+ @attrtypes ||= {}
73
+ unless @attrtypes.include?(attr)
74
+ @attrtypes[attr] = case
75
+ when @validproperties.include?(attr): :property
76
+ when @paramhash.include?(attr): :param
77
+ when @@metaparamhash.include?(attr): :meta
78
+ else
79
+ raise Puppet::DevError,
80
+ "Invalid attribute '%s' for class '%s'" %
81
+ [attr, self.name]
82
+ end
83
+ end
84
+
85
+ @attrtypes[attr]
86
+ end
87
+
88
+ # Copy an existing class parameter. This allows other types to avoid
89
+ # duplicating a parameter definition, and is mostly used by subclasses
90
+ # of the File class.
91
+ def self.copyparam(klass, name)
92
+ param = klass.attrclass(name)
93
+
94
+ unless param
95
+ raise Puppet::DevError, "Class %s has no param %s" % [klass, name]
96
+ end
97
+ @parameters << param
98
+ @parameters.each { |p| @paramhash[name] = p }
99
+
100
+ if param.isnamevar?
101
+ @namevar = param.name
102
+ end
103
+ end
104
+
105
+ # A similar function but one that yields the class and type.
106
+ # This is mainly so that setdefaults doesn't call quite so many functions.
107
+ def self.eachattr(*ary)
108
+ if ary.empty?
109
+ ary = nil
110
+ end
111
+
112
+ # We have to do this in a specific order, so that defaults are
113
+ # created in that order (e.g., providers should be set up before
114
+ # anything else).
115
+ allattrs.each do |name|
116
+ next unless ary.nil? or ary.include?(name)
117
+ if obj = @properties.find { |p| p.name == name }
118
+ yield obj, :property
119
+ elsif obj = @parameters.find { |p| p.name == name }
120
+ yield obj, :param
121
+ elsif obj = @@metaparams.find { |p| p.name == name }
122
+ yield obj, :meta
123
+ else
124
+ raise Puppet::DevError, "Could not find parameter %s" % name
125
+ end
126
+ end
127
+ end
128
+
129
+ def self.eachmetaparam
130
+ @@metaparams.each { |p| yield p.name }
131
+ end
132
+
133
+ # Create the 'ensure' class. This is a separate method so other types
134
+ # can easily call it and create their own 'ensure' values.
135
+ def self.ensurable(&block)
136
+ if block_given?
137
+ self.newproperty(:ensure, :parent => Puppet::Property::Ensure, &block)
138
+ else
139
+ self.newproperty(:ensure, :parent => Puppet::Property::Ensure) do
140
+ self.defaultvalues
141
+ end
142
+ end
143
+ end
144
+
145
+ # Should we add the 'ensure' property to this class?
146
+ def self.ensurable?
147
+ # If the class has all three of these methods defined, then it's
148
+ # ensurable.
149
+ ens = [:exists?, :create, :destroy].inject { |set, method|
150
+ set &&= self.public_method_defined?(method)
151
+ }
152
+
153
+ return ens
154
+ end
155
+
156
+ # Deal with any options passed into parameters.
157
+ def self.handle_param_options(name, options)
158
+ # If it's a boolean parameter, create a method to test the value easily
159
+ if options[:boolean]
160
+ define_method(name.to_s + "?") do
161
+ val = self[name]
162
+ if val == :true or val == true
163
+ return true
164
+ end
165
+ end
166
+ end
167
+
168
+ # If this param handles relationships, store that information
169
+ end
170
+
171
+ # Is the parameter in question a meta-parameter?
172
+ def self.metaparam?(param)
173
+ @@metaparamhash.include?(symbolize(param))
174
+ end
175
+
176
+ # Find the metaparameter class associated with a given metaparameter name.
177
+ def self.metaparamclass(name)
178
+ @@metaparamhash[symbolize(name)]
179
+ end
180
+
181
+ def self.metaparams
182
+ @@metaparams.collect { |param| param.name }
183
+ end
184
+
185
+ def self.metaparamdoc(metaparam)
186
+ @@metaparamhash[metaparam].doc
187
+ end
188
+
189
+ # Create a new metaparam. Requires a block and a name, stores it in the
190
+ # @parameters array, and does some basic checking on it.
191
+ def self.newmetaparam(name, options = {}, &block)
192
+ @@metaparams ||= []
193
+ @@metaparamhash ||= {}
194
+ name = symbolize(name)
195
+
196
+ param = genclass(name,
197
+ :parent => options[:parent] || Puppet::Parameter,
198
+ :prefix => "MetaParam",
199
+ :hash => @@metaparamhash,
200
+ :array => @@metaparams,
201
+ :attributes => options[:attributes],
202
+ &block
203
+ )
204
+
205
+ # Grr.
206
+ if options[:required_features]
207
+ param.required_features = options[:required_features]
208
+ end
209
+
210
+ handle_param_options(name, options)
211
+
212
+ param.metaparam = true
213
+
214
+ return param
215
+ end
216
+
217
+ # Find the namevar
218
+ def self.namevar
219
+ unless defined? @namevar
220
+ params = @parameters.find_all { |param|
221
+ param.isnamevar? or param.name == :name
222
+ }
223
+
224
+ if params.length > 1
225
+ raise Puppet::DevError, "Found multiple namevars for %s" % self.name
226
+ elsif params.length == 1
227
+ @namevar = params[0].name
228
+ else
229
+ raise Puppet::DevError, "No namevar for %s" % self.name
230
+ end
231
+ end
232
+ @namevar
233
+ end
234
+
235
+ # Create a new parameter. Requires a block and a name, stores it in the
236
+ # @parameters array, and does some basic checking on it.
237
+ def self.newparam(name, options = {}, &block)
238
+ options[:attributes] ||= {}
239
+ options[:attributes][:element] = self
240
+ param = genclass(name,
241
+ :parent => options[:parent] || Puppet::Parameter,
242
+ :attributes => options[:attributes],
243
+ :block => block,
244
+ :prefix => "Parameter",
245
+ :array => @parameters,
246
+ :hash => @paramhash
247
+ )
248
+
249
+ handle_param_options(name, options)
250
+
251
+ # Grr.
252
+ if options[:required_features]
253
+ param.required_features = options[:required_features]
254
+ end
255
+
256
+ # These might be enabled later.
257
+ # define_method(name) do
258
+ # @parameters[name].value
259
+ # end
260
+ #
261
+ # define_method(name.to_s + "=") do |value|
262
+ # newparam(param, value)
263
+ # end
264
+
265
+ if param.isnamevar?
266
+ @namevar = param.name
267
+ end
268
+
269
+ return param
270
+ end
271
+
272
+ def self.newstate(name, options = {}, &block)
273
+ Puppet.warning "newstate() has been deprecrated; use newproperty(%s)" %
274
+ name
275
+ newproperty(name, options, &block)
276
+ end
277
+
278
+ # Create a new property. The first parameter must be the name of the property;
279
+ # this is how users will refer to the property when creating new instances.
280
+ # The second parameter is a hash of options; the options are:
281
+ # * <tt>:parent</tt>: The parent class for the property. Defaults to Puppet::Property.
282
+ # * <tt>:retrieve</tt>: The method to call on the provider or @parent object (if
283
+ # the provider is not set) to retrieve the current value.
284
+ def self.newproperty(name, options = {}, &block)
285
+ name = symbolize(name)
286
+
287
+ # This is here for types that might still have the old method of defining
288
+ # a parent class.
289
+ unless options.is_a? Hash
290
+ raise Puppet::DevError,
291
+ "Options must be a hash, not %s" % options.inspect
292
+ end
293
+
294
+ if @validproperties.include?(name)
295
+ raise Puppet::DevError, "Class %s already has a property named %s" %
296
+ [self.name, name]
297
+ end
298
+
299
+ # We have to create our own, new block here because we want to define
300
+ # an initial :retrieve method, if told to, and then eval the passed
301
+ # block if available.
302
+ prop = genclass(name,
303
+ :parent => options[:parent] || Puppet::Property,
304
+ :hash => @validproperties
305
+ ) do
306
+ # If they've passed a retrieve method, then override the retrieve
307
+ # method on the class.
308
+ if options[:retrieve]
309
+ define_method(:retrieve) do
310
+ instance_variable_set(
311
+ "@is", provider.send(options[:retrieve])
312
+ )
313
+ end
314
+ end
315
+
316
+ if block
317
+ class_eval(&block)
318
+ end
319
+ end
320
+
321
+ # If it's the 'ensure' property, always put it first.
322
+ if name == :ensure
323
+ @properties.unshift prop
324
+ else
325
+ @properties << prop
326
+ end
327
+
328
+ if options[:event]
329
+ prop.event = options[:event]
330
+ end
331
+
332
+ # Grr.
333
+ if options[:required_features]
334
+ prop.required_features = options[:required_features]
335
+ end
336
+
337
+ # define_method(name) do
338
+ # @parameters[name].should
339
+ # end
340
+ #
341
+ # define_method(name.to_s + "=") do |value|
342
+ # newproperty(name, :should => value)
343
+ # end
344
+
345
+ return prop
346
+ end
347
+
348
+ def self.paramdoc(param)
349
+ @paramhash[param].doc
350
+ end
351
+
352
+ # Return the parameter names
353
+ def self.parameters
354
+ return [] unless defined? @parameters
355
+ @parameters.collect { |klass| klass.name }
356
+ end
357
+
358
+ # Find the parameter class associated with a given parameter name.
359
+ def self.paramclass(name)
360
+ @paramhash[name]
361
+ end
362
+
363
+ # Return the property class associated with a name
364
+ def self.propertybyname(name)
365
+ @validproperties[name]
366
+ end
367
+
368
+ def self.validattr?(name)
369
+ name = symbolize(name)
370
+ return true if name == :name
371
+ @validattrs ||= {}
372
+
373
+ unless @validattrs.include?(name)
374
+ if self.validproperty?(name) or self.validparameter?(name) or self.metaparam?(name)
375
+ @validattrs[name] = true
376
+ else
377
+ @validattrs[name] = false
378
+ end
379
+ end
380
+
381
+ @validattrs[name]
382
+ end
383
+
384
+ # does the name reflect a valid property?
385
+ def self.validproperty?(name)
386
+ name = symbolize(name)
387
+ if @validproperties.include?(name)
388
+ return @validproperties[name]
389
+ else
390
+ return false
391
+ end
392
+ end
393
+
394
+ # Return the list of validproperties
395
+ def self.validproperties
396
+ return {} unless defined? @parameters
397
+
398
+ return @validproperties.keys
399
+ end
400
+
401
+ # does the name reflect a valid parameter?
402
+ def self.validparameter?(name)
403
+ unless defined? @parameters
404
+ raise Puppet::DevError, "Class %s has not defined parameters" % self
405
+ end
406
+ if @paramhash.include?(name) or @@metaparamhash.include?(name)
407
+ return true
408
+ else
409
+ return false
410
+ end
411
+ end
412
+
413
+ # fix any namevar => param translations
414
+ def argclean(oldhash)
415
+ # This duplication is here because it might be a transobject.
416
+ hash = oldhash.dup.to_hash
417
+
418
+ if hash.include?(:parent)
419
+ hash.delete(:parent)
420
+ end
421
+ namevar = self.class.namevar
422
+
423
+ # Do a simple translation for those cases where they've passed :name
424
+ # but that's not our namevar
425
+ if hash.include? :name and namevar != :name
426
+ if hash.include? namevar
427
+ raise ArgumentError, "Cannot provide both name and %s" % namevar
428
+ end
429
+ hash[namevar] = hash[:name]
430
+ hash.delete(:name)
431
+ end
432
+
433
+ # Make sure we have a name, one way or another
434
+ unless hash.include? namevar
435
+ if defined? @title and @title
436
+ hash[namevar] = @title
437
+ else
438
+ raise Puppet::Error,
439
+ "Was not passed a namevar or title"
440
+ end
441
+ end
442
+
443
+ return hash
444
+ end
445
+
446
+ # Return either the attribute alias or the attribute.
447
+ def attr_alias(name)
448
+ name = symbolize(name)
449
+ if synonym = self.class.attr_alias(name)
450
+ return synonym
451
+ else
452
+ return name
453
+ end
454
+ end
455
+
456
+ # Are we deleting this resource?
457
+ def deleting?
458
+ obj = @parameters[:ensure] and obj.should == :absent
459
+ end
460
+
461
+ # Allow an outside party to specify the 'is' value for a property. The
462
+ # arguments are an array because you can't use parens with 'is=' calls.
463
+ # Most classes won't use this.
464
+ def is=(ary)
465
+ param, value = ary
466
+ param = attr_alias(param)
467
+ if self.class.validproperty?(param)
468
+ unless prop = @parameters[param]
469
+ prop = self.newattr(param)
470
+ end
471
+ prop.is = value
472
+ else
473
+ self[param] = value
474
+ end
475
+ end
476
+
477
+ # abstract accessing parameters and properties, and normalize
478
+ # access to always be symbols, not strings
479
+ # This returns a value, not an object. It returns the 'is'
480
+ # value, but you can also specifically return 'is' and 'should'
481
+ # values using 'object.is(:property)' or 'object.should(:property)'.
482
+ def [](name)
483
+ name = attr_alias(name)
484
+
485
+ unless self.class.validattr?(name)
486
+ raise TypeError.new("Invalid parameter %s(%s)" % [name, name.inspect])
487
+ end
488
+
489
+ if name == :name
490
+ name = self.class.namevar
491
+ end
492
+
493
+ if obj = @parameters[name]
494
+ if obj.is_a?(Puppet::Type::Property)
495
+ return obj.is
496
+ else
497
+ return obj.value
498
+ end
499
+ else
500
+ return nil
501
+ end
502
+ end
503
+
504
+ # Abstract setting parameters and properties, and normalize
505
+ # access to always be symbols, not strings. This sets the 'should'
506
+ # value on properties, and otherwise just sets the appropriate parameter.
507
+ def []=(name,value)
508
+ name = attr_alias(name)
509
+
510
+ unless self.class.validattr?(name)
511
+ raise TypeError.new("Invalid parameter %s" % [name])
512
+ end
513
+
514
+ if name == :name
515
+ name = self.class.namevar
516
+ end
517
+ if value.nil?
518
+ raise Puppet::Error.new("Got nil value for %s" % name)
519
+ end
520
+
521
+ if obj = @parameters[name]
522
+ obj.value = value
523
+ return nil
524
+ else
525
+ self.newattr(name, :value => value)
526
+ end
527
+
528
+ nil
529
+ end
530
+
531
+ # remove a property from the object; useful in testing or in cleanup
532
+ # when an error has been encountered
533
+ def delete(attr)
534
+ attr = symbolize(attr)
535
+ case attr
536
+ when Puppet::Type
537
+ if @children.include?(attr)
538
+ @children.delete(attr)
539
+ end
540
+ else
541
+ if @parameters.has_key?(attr)
542
+ @parameters.delete(attr)
543
+ else
544
+ raise Puppet::DevError.new("Undefined attribute '#{attr}' in #{self}")
545
+ end
546
+ end
547
+ end
548
+
549
+ # iterate across the existing properties
550
+ def eachproperty
551
+ # properties() is a private method
552
+ properties().each { |property|
553
+ yield property
554
+ }
555
+ end
556
+
557
+ # retrieve the 'is' value for a specified property
558
+ def is(name)
559
+ name = attr_alias(name)
560
+ if prop = @parameters[name] and prop.is_a?(Puppet::Type::Property)
561
+ return prop.is
562
+ else
563
+ return nil
564
+ end
565
+ end
566
+
567
+ # retrieve the 'should' value for a specified property
568
+ def should(name)
569
+ name = attr_alias(name)
570
+ if prop = @parameters[name] and prop.is_a?(Puppet::Type::Property)
571
+ return prop.should
572
+ else
573
+ return nil
574
+ end
575
+ end
576
+
577
+ # Create the actual attribute instance. Requires either the attribute
578
+ # name or class as the first argument, then an optional hash of
579
+ # attributes to set during initialization.
580
+ def newattr(name, options = {})
581
+ if name.is_a?(Class)
582
+ klass = name
583
+ name = klass.name
584
+ end
585
+
586
+ unless klass = self.class.attrclass(name)
587
+ raise Puppet::Error, "Resource type %s does not support parameter %s" % [self.class.name, name]
588
+ end
589
+
590
+ if @parameters.include?(name)
591
+ raise Puppet::Error, "Parameter '%s' is already defined in %s" %
592
+ [name, self.ref]
593
+ end
594
+
595
+ if provider and ! provider.class.supports_parameter?(klass)
596
+ missing = klass.required_features.find_all { |f| ! provider.class.feature?(f) }
597
+ info "Provider %s does not support features %s; not managing attribute %s" % [provider.class.name, missing.join(", "), name]
598
+ return nil
599
+ end
600
+
601
+ # Add parent information at creation time, so it's available
602
+ # during validation.
603
+ options[:parent] = self
604
+ begin
605
+ # make sure the parameter doesn't have any errors
606
+ return @parameters[name] = klass.new(options)
607
+ rescue => detail
608
+ error = Puppet::Error.new("Parameter %s failed: %s" %
609
+ [name, detail])
610
+ error.set_backtrace(detail.backtrace)
611
+ raise error
612
+ end
613
+ end
614
+
615
+ # return the value of a parameter
616
+ def parameter(name)
617
+ unless name.is_a? Symbol
618
+ name = name.intern
619
+ end
620
+ return @parameters[name].value
621
+ end
622
+
623
+ # Is the named property defined?
624
+ def propertydefined?(name)
625
+ unless name.is_a? Symbol
626
+ name = name.intern
627
+ end
628
+ return @parameters.include?(name)
629
+ end
630
+
631
+ # return an actual type by name; to return the value, use 'inst[name]'
632
+ # FIXME this method should go away
633
+ def property(name)
634
+ if obj = @parameters[symbolize(name)] and obj.is_a?(Puppet::Type::Property)
635
+ return obj
636
+ else
637
+ return nil
638
+ end
639
+ end
640
+
641
+ # def set(name, value)
642
+ # send(name.to_s + "=", value)
643
+ # end
644
+ #
645
+ # def get(name)
646
+ # send(name)
647
+ # end
648
+
649
+ # For any parameters or properties that have defaults and have not yet been
650
+ # set, set them now. This method can be handed a list of attributes,
651
+ # and if so it will only set defaults for those attributes.
652
+ def setdefaults(*ary)
653
+ #self.class.eachattr(*ary) { |klass, type|
654
+ self.class.eachattr(*ary) { |klass, type|
655
+ # not many attributes will have defaults defined, so we short-circuit
656
+ # those away
657
+ next unless klass.method_defined?(:default)
658
+ next if @parameters[klass.name]
659
+
660
+ next unless obj = self.newattr(klass)
661
+
662
+ # We have to check for nil values, not "truth", so we allow defaults
663
+ # to false.
664
+ value = obj.default and ! value.nil?
665
+ if ! value.nil?
666
+ obj.value = value
667
+ else
668
+ @parameters.delete(obj.name)
669
+ end
670
+ }
671
+ end
672
+
673
+ # Convert our object to a hash. This just includes properties.
674
+ def to_hash
675
+ rethash = {}
676
+
677
+ @parameters.each do |name, obj|
678
+ rethash[name] = obj.value
679
+ end
680
+
681
+ rethash
682
+ end
683
+
684
+ # Return a specific value for an attribute.
685
+ def value(name)
686
+ name = attr_alias(name)
687
+
688
+ if obj = @parameters[name] and obj.respond_to?(:value)
689
+ return obj.value
690
+ else
691
+ return nil
692
+ end
693
+ end
694
+
695
+ # Meta-parameter methods: These methods deal with the results
696
+ # of specifying metaparameters
697
+
698
+ private
699
+
700
+ # Return all of the property objects, in the order specified in the
701
+ # class.
702
+ def properties
703
+ #debug "%s has %s properties" % [self,@parameters.length]
704
+ props = self.class.properties.collect { |prop|
705
+ @parameters[prop.name]
706
+ }.find_all { |p|
707
+ ! p.nil?
708
+ }.each do |prop|
709
+ unless prop.is_a?(Puppet::Type::Property)
710
+ raise Puppet::DevError, "got a non-property %s(%s)" %
711
+ [prop.class, prop.class.name]
712
+ end
713
+ end
714
+
715
+ props
716
+ end
717
+ end
718
+
719
+ # $Id: attributes.rb 2444 2007-05-01 03:14:09Z luke $