puppet 0.24.6 → 0.24.7

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 (383) hide show
  1. data/CHANGELOG +115 -0
  2. data/Rakefile +43 -14
  3. data/bin/puppetca +6 -5
  4. data/bin/puppetdoc +109 -15
  5. data/bin/ralsh +3 -1
  6. data/conf/redhat/puppet.spec +74 -48
  7. data/examples/mcx_dock_absent.pp +4 -0
  8. data/examples/mcx_dock_default.pp +118 -0
  9. data/examples/mcx_dock_full.pp +125 -0
  10. data/examples/mcx_dock_invalid.pp +9 -0
  11. data/examples/mcx_nogroup.pp +118 -0
  12. data/examples/mcx_notexists_absent.pp +4 -0
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/lib/puppet.rb +1 -1
  15. data/lib/puppet/external/nagios/base.rb +114 -71
  16. data/lib/puppet/feature/base.rb +6 -0
  17. data/lib/puppet/indirector/yaml.rb +12 -3
  18. data/lib/puppet/module.rb +1 -1
  19. data/lib/puppet/network/client/master.rb +1 -1
  20. data/lib/puppet/network/xmlrpc/client.rb +3 -1
  21. data/lib/puppet/parameter.rb +1 -1
  22. data/lib/puppet/parser/ast.rb +15 -0
  23. data/lib/puppet/parser/ast/astarray.rb +1 -2
  24. data/lib/puppet/parser/ast/casestatement.rb +2 -0
  25. data/lib/puppet/parser/ast/collection.rb +2 -0
  26. data/lib/puppet/parser/ast/comparison_operator.rb +4 -0
  27. data/lib/puppet/parser/ast/definition.rb +2 -0
  28. data/lib/puppet/parser/ast/else.rb +3 -0
  29. data/lib/puppet/parser/ast/function.rb +19 -12
  30. data/lib/puppet/parser/ast/hostclass.rb +9 -1
  31. data/lib/puppet/parser/ast/ifstatement.rb +3 -0
  32. data/lib/puppet/parser/ast/node.rb +3 -0
  33. data/lib/puppet/parser/ast/resource.rb +3 -0
  34. data/lib/puppet/parser/ast/resource_defaults.rb +2 -0
  35. data/lib/puppet/parser/ast/resource_override.rb +3 -0
  36. data/lib/puppet/parser/ast/vardef.rb +3 -0
  37. data/lib/puppet/parser/functions.rb +14 -0
  38. data/lib/puppet/parser/functions/inline_template.rb +21 -0
  39. data/lib/puppet/parser/functions/template.rb +3 -2
  40. data/lib/puppet/parser/lexer.rb +56 -7
  41. data/lib/puppet/parser/parser.rb +114 -98
  42. data/lib/puppet/parser/parser_support.rb +24 -4
  43. data/lib/puppet/parser/resource/reference.rb +4 -3
  44. data/lib/puppet/parser/templatewrapper.rb +30 -22
  45. data/lib/puppet/property.rb +1 -1
  46. data/lib/puppet/property/list.rb +7 -2
  47. data/lib/puppet/property/ordered_list.rb +22 -0
  48. data/lib/puppet/provider/augeas/augeas.rb +189 -0
  49. data/lib/puppet/provider/computer/computer.rb +22 -0
  50. data/lib/puppet/provider/confine.rb +4 -1
  51. data/lib/puppet/provider/confine/variable.rb +13 -2
  52. data/lib/puppet/provider/confine_collection.rb +4 -1
  53. data/lib/puppet/provider/confiner.rb +1 -1
  54. data/lib/puppet/provider/group/directoryservice.rb +6 -3
  55. data/lib/puppet/provider/group/groupadd.rb +5 -2
  56. data/lib/puppet/provider/group/ldap.rb +11 -9
  57. data/lib/puppet/provider/group/netinfo.rb +8 -4
  58. data/lib/puppet/provider/group/pw.rb +5 -1
  59. data/lib/puppet/provider/host/netinfo.rb +5 -2
  60. data/lib/puppet/provider/macauthorization/macauthorization.rb +315 -0
  61. data/lib/puppet/provider/mcx/mcxcontent.rb +201 -0
  62. data/lib/puppet/provider/nameservice/directoryservice.rb +210 -107
  63. data/lib/puppet/provider/nameservice/netinfo.rb +7 -2
  64. data/lib/puppet/provider/package/appdmg.rb +0 -3
  65. data/lib/puppet/provider/package/apt.rb +6 -0
  66. data/lib/puppet/provider/package/rpm.rb +2 -0
  67. data/lib/puppet/provider/package/yum.rb +5 -1
  68. data/lib/puppet/provider/package/yumhelper.py +9 -0
  69. data/lib/puppet/provider/service/base.rb +9 -6
  70. data/lib/puppet/provider/service/daemontools.rb +25 -15
  71. data/lib/puppet/provider/service/debian.rb +6 -2
  72. data/lib/puppet/provider/service/freebsd.rb +5 -2
  73. data/lib/puppet/provider/service/gentoo.rb +6 -3
  74. data/lib/puppet/provider/service/init.rb +31 -21
  75. data/lib/puppet/provider/service/launchd.rb +195 -0
  76. data/lib/puppet/provider/service/redhat.rb +5 -2
  77. data/lib/puppet/provider/service/runit.rb +30 -20
  78. data/lib/puppet/provider/service/smf.rb +7 -4
  79. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +21 -1
  80. data/lib/puppet/provider/user/directoryservice.rb +1 -0
  81. data/lib/puppet/provider/user/netinfo.rb +9 -3
  82. data/lib/puppet/provider/user/user_role_add.rb +43 -6
  83. data/lib/puppet/provider/zfs/solaris.rb +45 -0
  84. data/lib/puppet/provider/zone/solaris.rb +8 -4
  85. data/lib/puppet/provider/zpool/solaris.rb +116 -0
  86. data/lib/puppet/rails/database/003_add_environment_to_host.rb +9 -0
  87. data/lib/puppet/rails/database/schema.rb +1 -0
  88. data/lib/puppet/rails/host.rb +4 -0
  89. data/lib/puppet/reference/configuration.rb +1 -1
  90. data/lib/puppet/reports/tagmail.rb +15 -6
  91. data/lib/puppet/transaction/change.rb +3 -5
  92. data/lib/puppet/transportable.rb +1 -0
  93. data/lib/puppet/type/augeas.rb +155 -0
  94. data/lib/puppet/type/computer.rb +62 -0
  95. data/lib/puppet/type/exec.rb +2 -1
  96. data/lib/puppet/type/file.rb +1 -1
  97. data/lib/puppet/type/file/ensure.rb +8 -5
  98. data/lib/puppet/type/file/mode.rb +0 -14
  99. data/lib/puppet/type/file/owner.rb +32 -64
  100. data/lib/puppet/type/file/selcontext.rb +3 -8
  101. data/lib/puppet/type/group.rb +27 -45
  102. data/lib/puppet/type/k5login.rb +1 -1
  103. data/lib/puppet/type/macauthorization.rb +141 -0
  104. data/lib/puppet/type/mcx.rb +115 -0
  105. data/lib/puppet/type/mount.rb +1 -1
  106. data/lib/puppet/type/nagios_hostdependency.rb +3 -0
  107. data/lib/puppet/type/ssh_authorized_key.rb +16 -0
  108. data/lib/puppet/type/tidy.rb +43 -14
  109. data/lib/puppet/type/user.rb +25 -1
  110. data/lib/puppet/type/zfs.rb +51 -0
  111. data/lib/puppet/type/zone.rb +8 -0
  112. data/lib/puppet/type/zpool.rb +93 -0
  113. data/lib/puppet/util.rb +17 -38
  114. data/lib/puppet/util/file_locking.rb +44 -0
  115. data/lib/puppet/util/filetype.rb +3 -3
  116. data/lib/puppet/util/log.rb +1 -16
  117. data/lib/puppet/util/metric.rb +0 -5
  118. data/lib/puppet/util/rdoc.rb +85 -0
  119. data/lib/puppet/util/rdoc/code_objects.rb +219 -0
  120. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +829 -0
  121. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1051 -0
  122. data/lib/puppet/util/rdoc/parser.rb +437 -0
  123. data/lib/puppet/util/selinux.rb +135 -63
  124. data/lib/puppet/util/settings.rb +136 -126
  125. data/lib/puppet/util/storage.rb +4 -2
  126. data/spec/Rakefile +91 -0
  127. data/spec/integration/checksum.rb +47 -0
  128. data/spec/integration/defaults.rb +47 -0
  129. data/spec/integration/file_serving/configuration.rb +43 -0
  130. data/spec/integration/file_serving/content.rb +18 -0
  131. data/spec/integration/file_serving/metadata.rb +18 -0
  132. data/spec/integration/indirector/direct_file_server.rb +80 -0
  133. data/spec/integration/indirector/file_content/file_server.rb +18 -0
  134. data/spec/integration/indirector/file_metadata/file_server.rb +18 -0
  135. data/spec/integration/indirector/module_files.rb +57 -0
  136. data/spec/integration/indirector/node/ldap.rb +15 -0
  137. data/spec/integration/indirector/rest.rb +464 -0
  138. data/spec/integration/network/server/mongrel.rb +48 -0
  139. data/spec/integration/network/server/webrick.rb +48 -0
  140. data/spec/integration/node.rb +93 -0
  141. data/spec/integration/node/catalog.rb +54 -0
  142. data/spec/integration/node/facts.rb +45 -0
  143. data/spec/integration/provider/package.rb +26 -0
  144. data/spec/integration/provider/service/init.rb +32 -0
  145. data/spec/integration/reference/providers.rb +17 -0
  146. data/spec/integration/reports.rb +14 -0
  147. data/spec/integration/transaction/report.rb +26 -0
  148. data/spec/integration/type/package.rb +22 -0
  149. data/spec/integration/util/file_locking.rb +36 -0
  150. data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +46 -0
  151. data/spec/monkey_patches/alias_should_to_must.rb +5 -0
  152. data/spec/shared_behaviours/file_server_terminus.rb +42 -0
  153. data/spec/shared_behaviours/file_serving.rb +64 -0
  154. data/spec/shared_behaviours/memory_terminus.rb +32 -0
  155. data/spec/spec.opts +5 -0
  156. data/spec/spec_helper.rb +36 -0
  157. data/spec/unit/executables/client/certhandler.rb +122 -0
  158. data/spec/unit/file_serving/configuration.rb +224 -0
  159. data/spec/unit/file_serving/configuration/parser.rb +135 -0
  160. data/spec/unit/file_serving/content.rb +71 -0
  161. data/spec/unit/file_serving/file_base.rb +124 -0
  162. data/spec/unit/file_serving/fileset.rb +239 -0
  163. data/spec/unit/file_serving/indirection_hooks.rb +124 -0
  164. data/spec/unit/file_serving/metadata.rb +187 -0
  165. data/spec/unit/file_serving/mount.rb +143 -0
  166. data/spec/unit/file_serving/terminus_helper.rb +76 -0
  167. data/spec/unit/indirector.rb +152 -0
  168. data/spec/unit/indirector/catalog/compiler.rb +156 -0
  169. data/spec/unit/indirector/catalog/yaml.rb +25 -0
  170. data/spec/unit/indirector/checksum/file.rb +139 -0
  171. data/spec/unit/indirector/code.rb +33 -0
  172. data/spec/unit/indirector/direct_file_server.rb +89 -0
  173. data/spec/unit/indirector/envelope.rb +47 -0
  174. data/spec/unit/indirector/exec.rb +51 -0
  175. data/spec/unit/indirector/facts/facter.rb +76 -0
  176. data/spec/unit/indirector/facts/yaml.rb +26 -0
  177. data/spec/unit/indirector/file.rb +154 -0
  178. data/spec/unit/indirector/file_content/file.rb +18 -0
  179. data/spec/unit/indirector/file_content/file_server.rb +18 -0
  180. data/spec/unit/indirector/file_content/modules.rb +18 -0
  181. data/spec/unit/indirector/file_content/rest.rb +11 -0
  182. data/spec/unit/indirector/file_metadata/file.rb +52 -0
  183. data/spec/unit/indirector/file_metadata/file_server.rb +18 -0
  184. data/spec/unit/indirector/file_metadata/modules.rb +42 -0
  185. data/spec/unit/indirector/file_metadata/rest.rb +9 -0
  186. data/spec/unit/indirector/file_server.rb +184 -0
  187. data/spec/unit/indirector/indirection.rb +731 -0
  188. data/spec/unit/indirector/ldap.rb +143 -0
  189. data/spec/unit/indirector/memory.rb +29 -0
  190. data/spec/unit/indirector/module_files.rb +259 -0
  191. data/spec/unit/indirector/node/exec.rb +69 -0
  192. data/spec/unit/indirector/node/ldap.rb +424 -0
  193. data/spec/unit/indirector/node/memory.rb +19 -0
  194. data/spec/unit/indirector/node/plain.rb +19 -0
  195. data/spec/unit/indirector/node/rest.rb +13 -0
  196. data/spec/unit/indirector/node/yaml.rb +25 -0
  197. data/spec/unit/indirector/plain.rb +29 -0
  198. data/spec/unit/indirector/report/processor.rb +81 -0
  199. data/spec/unit/indirector/request.rb +87 -0
  200. data/spec/unit/indirector/rest.rb +372 -0
  201. data/spec/unit/indirector/ssl_rsa/file.rb +116 -0
  202. data/spec/unit/indirector/terminus.rb +245 -0
  203. data/spec/unit/indirector/yaml.rb +145 -0
  204. data/spec/unit/module.rb +247 -0
  205. data/spec/unit/network/client.rb +45 -0
  206. data/spec/unit/network/client/master.rb +442 -0
  207. data/spec/unit/network/handler/fileserver.rb +179 -0
  208. data/spec/unit/network/http.rb +35 -0
  209. data/spec/unit/network/http/mongrel.rb +117 -0
  210. data/spec/unit/network/http/mongrel/rest.rb +377 -0
  211. data/spec/unit/network/http/mongrel/xmlrpc.rb +0 -0
  212. data/spec/unit/network/http/webrick.rb +127 -0
  213. data/spec/unit/network/http/webrick/rest.rb +323 -0
  214. data/spec/unit/network/http/webrick/xmlrpc.rb +0 -0
  215. data/spec/unit/network/http_pool.rb +238 -0
  216. data/spec/unit/network/server.rb +316 -0
  217. data/spec/unit/network/xmlrpc/client.rb +13 -0
  218. data/spec/unit/node.rb +167 -0
  219. data/spec/unit/node/catalog.rb +864 -0
  220. data/spec/unit/node/environment.rb +37 -0
  221. data/spec/unit/node/facts.rb +44 -0
  222. data/spec/unit/other/checksum.rb +92 -0
  223. data/spec/unit/other/pgraph.rb +210 -0
  224. data/spec/unit/other/transaction.rb +33 -0
  225. data/spec/unit/other/transbucket.rb +172 -0
  226. data/spec/unit/other/transobject.rb +92 -0
  227. data/spec/unit/parameter.rb +24 -0
  228. data/spec/unit/parser/ast.rb +37 -0
  229. data/spec/unit/parser/ast/arithmetic_operator.rb +73 -0
  230. data/spec/unit/parser/ast/astarray.rb +66 -0
  231. data/spec/unit/parser/ast/boolean_operator.rb +53 -0
  232. data/spec/unit/parser/ast/collexpr.rb +92 -0
  233. data/spec/unit/parser/ast/comparison_operator.rb +92 -0
  234. data/spec/unit/parser/ast/definition.rb +195 -0
  235. data/spec/unit/parser/ast/function.rb +77 -0
  236. data/spec/unit/parser/ast/hostclass.rb +148 -0
  237. data/spec/unit/parser/ast/minus.rb +36 -0
  238. data/spec/unit/parser/ast/node.rb +125 -0
  239. data/spec/unit/parser/ast/nop.rb +20 -0
  240. data/spec/unit/parser/ast/not.rb +30 -0
  241. data/spec/unit/parser/ast/resource_override.rb +51 -0
  242. data/spec/unit/parser/ast/resource_reference.rb +63 -0
  243. data/spec/unit/parser/ast/vardef.rb +47 -0
  244. data/spec/unit/parser/collector.rb +426 -0
  245. data/spec/unit/parser/compiler.rb +561 -0
  246. data/spec/unit/parser/functions.rb +83 -0
  247. data/spec/unit/parser/functions/inline_template.rb +59 -0
  248. data/spec/unit/parser/functions/template.rb +62 -0
  249. data/spec/unit/parser/interpreter.rb +138 -0
  250. data/spec/unit/parser/lexer.rb +646 -0
  251. data/spec/unit/parser/parser.rb +228 -0
  252. data/spec/unit/parser/resource.rb +336 -0
  253. data/spec/unit/parser/resource/reference.rb +95 -0
  254. data/spec/unit/parser/scope.rb +87 -0
  255. data/spec/unit/parser/templatewrapper.rb +129 -0
  256. data/spec/unit/property.rb +35 -0
  257. data/spec/unit/property/keyvalue.rb +168 -0
  258. data/spec/unit/property/list.rb +156 -0
  259. data/spec/unit/property/ordered_list.rb +64 -0
  260. data/spec/unit/provider/augeas/augeas.rb +238 -0
  261. data/spec/unit/provider/confine.rb +78 -0
  262. data/spec/unit/provider/confine/exists.rb +81 -0
  263. data/spec/unit/provider/confine/false.rb +53 -0
  264. data/spec/unit/provider/confine/feature.rb +60 -0
  265. data/spec/unit/provider/confine/true.rb +53 -0
  266. data/spec/unit/provider/confine/variable.rb +107 -0
  267. data/spec/unit/provider/confine_collection.rb +134 -0
  268. data/spec/unit/provider/confiner.rb +63 -0
  269. data/spec/unit/provider/group/groupadd.rb +31 -0
  270. data/spec/unit/provider/group/ldap.rb +105 -0
  271. data/spec/unit/provider/ldap.rb +248 -0
  272. data/spec/unit/provider/macauthorization.rb +147 -0
  273. data/spec/unit/provider/mcx/mcxcontent.rb +175 -0
  274. data/spec/unit/provider/mount.rb +130 -0
  275. data/spec/unit/provider/mount/parsed.rb +185 -0
  276. data/spec/unit/provider/package/apt.rb +138 -0
  277. data/spec/unit/provider/package/dpkg.rb +163 -0
  278. data/spec/unit/provider/package/gem.rb +87 -0
  279. data/spec/unit/provider/package/hpux.rb +52 -0
  280. data/spec/unit/provider/selboolean.rb +37 -0
  281. data/spec/unit/provider/selmodule-example.pp +0 -0
  282. data/spec/unit/provider/selmodule.rb +66 -0
  283. data/spec/unit/provider/service/daemontools.rb +124 -0
  284. data/spec/unit/provider/service/launchd.rb +134 -0
  285. data/spec/unit/provider/service/runit.rb +117 -0
  286. data/spec/unit/provider/ssh_authorized_key/parsed.rb +102 -0
  287. data/spec/unit/provider/user/hpux.rb +25 -0
  288. data/spec/unit/provider/user/ldap.rb +279 -0
  289. data/spec/unit/provider/user/user_role_add.rb +249 -0
  290. data/spec/unit/provider/user/useradd.rb +115 -0
  291. data/spec/unit/provider/zfs/solaris.rb +87 -0
  292. data/spec/unit/provider/zone/solaris.rb +42 -0
  293. data/spec/unit/provider/zpool/solaris.rb +179 -0
  294. data/spec/unit/rails.rb +125 -0
  295. data/spec/unit/relationship.rb +149 -0
  296. data/spec/unit/reports.rb +61 -0
  297. data/spec/unit/resource_reference.rb +73 -0
  298. data/spec/unit/simple_graph.rb +280 -0
  299. data/spec/unit/transaction/change.rb +187 -0
  300. data/spec/unit/transaction/event.rb +25 -0
  301. data/spec/unit/transaction/report.rb +40 -0
  302. data/spec/unit/type.rb +64 -0
  303. data/spec/unit/type/augeas.rb +113 -0
  304. data/spec/unit/type/computer.rb +82 -0
  305. data/spec/unit/type/exec.rb +91 -0
  306. data/spec/unit/type/file.rb +155 -0
  307. data/spec/unit/type/file/ensure.rb +21 -0
  308. data/spec/unit/type/file/group.rb +118 -0
  309. data/spec/unit/type/file/owner.rb +132 -0
  310. data/spec/unit/type/file/selinux.rb +82 -0
  311. data/spec/unit/type/group.rb +40 -0
  312. data/spec/unit/type/macauthorization.rb +78 -0
  313. data/spec/unit/type/mcx.rb +108 -0
  314. data/spec/unit/type/mount.rb +219 -0
  315. data/spec/unit/type/nagios.rb +63 -0
  316. data/spec/unit/type/noop_metaparam.rb +38 -0
  317. data/spec/unit/type/package.rb +246 -0
  318. data/spec/unit/type/resources.rb +27 -0
  319. data/spec/unit/type/schedule.rb +339 -0
  320. data/spec/unit/type/selboolean.rb +47 -0
  321. data/spec/unit/type/selmodule.rb +18 -0
  322. data/spec/unit/type/service.rb +254 -0
  323. data/spec/unit/type/ssh_authorized_key.rb +106 -0
  324. data/spec/unit/type/tidy.rb +68 -0
  325. data/spec/unit/type/user.rb +260 -0
  326. data/spec/unit/type/zfs.rb +45 -0
  327. data/spec/unit/type/zone.rb +20 -0
  328. data/spec/unit/type/zpool.rb +110 -0
  329. data/spec/unit/util/checksums.rb +99 -0
  330. data/spec/unit/util/constant_inflector.rb +70 -0
  331. data/spec/unit/util/file_locking.rb +115 -0
  332. data/spec/unit/util/ldap/connection.rb +169 -0
  333. data/spec/unit/util/ldap/generator.rb +54 -0
  334. data/spec/unit/util/ldap/manager.rb +654 -0
  335. data/spec/unit/util/loadedfile.rb +65 -0
  336. data/spec/unit/util/log.rb +107 -0
  337. data/spec/unit/util/metric.rb +95 -0
  338. data/spec/unit/util/nagios_maker.rb +128 -0
  339. data/spec/unit/util/posix.rb +256 -0
  340. data/spec/unit/util/resource_template.rb +58 -0
  341. data/spec/unit/util/selinux.rb +219 -0
  342. data/spec/unit/util/settings.rb +847 -0
  343. data/spec/unit/util/storage.rb +248 -0
  344. data/spec/unit/util/tagging.rb +92 -0
  345. data/spec/unit/util/uri_helper.rb +41 -0
  346. data/spec/unit/util/user_attr.rb +47 -0
  347. data/spec/unit/util/warnings.rb +35 -0
  348. data/test/certmgr/support.rb +0 -6
  349. data/test/data/providers/ssh_authorized_key/parsed/authorized_keys +1 -0
  350. data/test/data/snippets/multilinecomments.pp +6 -0
  351. data/test/data/snippets/multipleclass.pp +9 -0
  352. data/test/language/functions.rb +11 -1
  353. data/test/language/snippets.rb +16 -0
  354. data/test/lib/puppettest/runnable_test.rb +1 -1
  355. data/test/network/handler/fileserver.rb +5 -0
  356. data/test/other/report.rb +0 -4
  357. data/test/ral/type/resources.rb +2 -19
  358. data/test/util/settings.rb +4 -4
  359. data/test/util/storage.rb +0 -24
  360. data/test/util/utiltest.rb +0 -33
  361. metadata +319 -26
  362. data/conf/debian/README.source +0 -2
  363. data/conf/debian/TODO.Debian +0 -1
  364. data/conf/debian/changelog +0 -257
  365. data/conf/debian/compat +0 -1
  366. data/conf/debian/control +0 -45
  367. data/conf/debian/copyright +0 -17
  368. data/conf/debian/docs +0 -1
  369. data/conf/debian/fileserver.conf +0 -12
  370. data/conf/debian/puppet.NEWS +0 -63
  371. data/conf/debian/puppet.conf +0 -8
  372. data/conf/debian/puppet.dirs +0 -7
  373. data/conf/debian/puppet.files +0 -6
  374. data/conf/debian/puppet.init +0 -64
  375. data/conf/debian/puppet.logrotate +0 -11
  376. data/conf/debian/puppet.postinst +0 -9
  377. data/conf/debian/puppet.postrm +0 -21
  378. data/conf/debian/puppet.preinst +0 -25
  379. data/conf/debian/puppetmaster.files +0 -4
  380. data/conf/debian/puppetmaster.init +0 -58
  381. data/conf/debian/rules +0 -115
  382. data/conf/debian/watch +0 -2
  383. data/lib/puppet/type/nagios_hostgroupescalation.rb +0 -3
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created by Rick Bradley on 2007-10-15.
4
+ # Copyright (c) 2007. All rights reserved.
5
+
6
+ require File.dirname(__FILE__) + '/../../../spec_helper'
7
+ require 'puppet/network/http'
8
+ require 'puppet/network/http/webrick'
9
+
10
+ describe Puppet::Network::HTTP::WEBrick, "after initializing" do
11
+ it "should not be listening" do
12
+ Puppet::Network::HTTP::WEBrick.new.should_not be_listening
13
+ end
14
+ end
15
+
16
+ describe Puppet::Network::HTTP::WEBrick, "when turning on listening" do
17
+ before do
18
+ @mock_webrick = stub('webrick', :[] => {})
19
+ [:mount, :start, :shutdown].each {|meth| @mock_webrick.stubs(meth)}
20
+ WEBrick::HTTPServer.stubs(:new).returns(@mock_webrick)
21
+ @server = Puppet::Network::HTTP::WEBrick.new
22
+ @listen_params = { :address => "127.0.0.1", :port => 31337, :handlers => [ :node, :catalog ], :protocols => [ :rest ] }
23
+ end
24
+
25
+ it "should fail if already listening" do
26
+ @server.listen(@listen_params)
27
+ Proc.new { @server.listen(@listen_params) }.should raise_error(RuntimeError)
28
+ end
29
+
30
+ it "should require at least one handler" do
31
+ Proc.new { @server.listen(@listen_params.delete_if {|k,v| :handlers == k}) }.should raise_error(ArgumentError)
32
+ end
33
+
34
+ it "should require at least one protocol" do
35
+ Proc.new { @server.listen(@listen_params.delete_if {|k,v| :protocols == k}) }.should raise_error(ArgumentError)
36
+ end
37
+
38
+ it "should require a listening address to be specified" do
39
+ Proc.new { @server.listen(@listen_params.delete_if {|k,v| :address == k})}.should raise_error(ArgumentError)
40
+ end
41
+
42
+ it "should require a listening port to be specified" do
43
+ Proc.new { @server.listen(@listen_params.delete_if {|k,v| :port == k})}.should raise_error(ArgumentError)
44
+ end
45
+
46
+ it "should order a webrick server to start" do
47
+ @mock_webrick.expects(:start)
48
+ @server.listen(@listen_params)
49
+ end
50
+
51
+ it "should tell webrick to listen on the specified address and port" do
52
+ WEBrick::HTTPServer.expects(:new).with {|args|
53
+ args[:Port] == 31337 and args[:BindAddress] == "127.0.0.1"
54
+ }.returns(@mock_webrick)
55
+ @server.listen(@listen_params)
56
+ end
57
+
58
+ it "should be listening" do
59
+ @server.listen(@listen_params)
60
+ @server.should be_listening
61
+ end
62
+
63
+ it "should instantiate a handler for each protocol+handler pair to configure web server routing" do
64
+ @listen_params[:protocols].each do |protocol|
65
+ mock_handler = mock("handler instance for [#{protocol}]")
66
+ mock_handler_class = mock("handler class for [#{protocol}]")
67
+ @listen_params[:handlers].each do |handler|
68
+ @mock_webrick.expects(:mount)
69
+ end
70
+ end
71
+ @server.listen(@listen_params)
72
+ end
73
+
74
+ it "should use a WEBrick + REST class to configure WEBrick when REST services are requested" do
75
+ Puppet::Network::HTTP::WEBrick.expects(:class_for_protocol).with(:rest).at_least_once
76
+ @server.listen(@listen_params.merge(:protocols => [:rest]))
77
+ end
78
+
79
+ it "should fail if services from an unknown protocol are requested" do
80
+ Proc.new { @server.listen(@listen_params.merge(:protocols => [ :foo ]))}.should raise_error
81
+ end
82
+ end
83
+
84
+
85
+ describe Puppet::Network::HTTP::WEBrick, "when looking up the class to handle a protocol" do
86
+ it "should require a protocol" do
87
+ lambda { Puppet::Network::HTTP::WEBrick.class_for_protocol }.should raise_error(ArgumentError)
88
+ end
89
+
90
+ it "should accept a protocol" do
91
+ lambda { Puppet::Network::HTTP::WEBrick.class_for_protocol("bob") }.should_not raise_error(ArgumentError)
92
+ end
93
+
94
+ it "should use a WEBrick + REST class when a REST protocol is specified" do
95
+ Puppet::Network::HTTP::WEBrick.class_for_protocol("rest").should == Puppet::Network::HTTP::WEBrickREST
96
+ end
97
+
98
+ it "should fail when an unknown protocol is specified" do
99
+ lambda { Puppet::Network::HTTP::WEBrick.class_for_protocol("abcdefg") }.should raise_error
100
+ end
101
+ end
102
+
103
+ describe Puppet::Network::HTTP::WEBrick, "when turning off listening" do
104
+ before do
105
+ @mock_webrick = stub('webrick', :[] => {})
106
+ [:mount, :start, :shutdown].each {|meth| @mock_webrick.stubs(meth)}
107
+ WEBrick::HTTPServer.stubs(:new).returns(@mock_webrick)
108
+ @server = Puppet::Network::HTTP::WEBrick.new
109
+ @listen_params = { :address => "127.0.0.1", :port => 31337, :handlers => [ :node, :catalog ], :protocols => [ :rest ] }
110
+ end
111
+
112
+ it "should fail unless listening" do
113
+ Proc.new { @server.unlisten }.should raise_error(RuntimeError)
114
+ end
115
+
116
+ it "should order webrick server to stop" do
117
+ @mock_webrick.expects(:shutdown)
118
+ @server.listen(@listen_params)
119
+ @server.unlisten
120
+ end
121
+
122
+ it "should no longer be listening" do
123
+ @server.listen(@listen_params)
124
+ @server.unlisten
125
+ @server.should_not be_listening
126
+ end
127
+ end
@@ -0,0 +1,323 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../../../spec_helper'
4
+ require 'puppet/network/http'
5
+ require 'puppet/network/http/webrick/rest'
6
+
7
+ describe Puppet::Network::HTTP::WEBrickREST, "when initializing" do
8
+ before do
9
+ @mock_webrick = stub('WEBrick server', :mount => true, :[] => {})
10
+ @mock_model = mock('indirected model')
11
+ Puppet::Indirector::Indirection.stubs(:model).returns(@mock_model)
12
+ @params = [ @mock_webrick, :foo ]
13
+ end
14
+
15
+ it "should require access to a WEBrick server" do
16
+ Proc.new {
17
+ @params[0] = nil
18
+ Puppet::Network::HTTP::WEBrickREST.new(*@params)
19
+ }.should raise_error(ArgumentError)
20
+ end
21
+
22
+ it "should require an indirection name" do
23
+ Proc.new { Puppet::Network::HTTP::WEBrickREST.new(@params.first) }.should raise_error(ArgumentError)
24
+ end
25
+
26
+ it "should look up the indirection model from the indirection name" do
27
+ Puppet::Indirector::Indirection.expects(:model).returns(@mock_model)
28
+ Puppet::Network::HTTP::WEBrickREST.new(*@params)
29
+ end
30
+
31
+ it "should fail if the indirection is not known" do
32
+ Puppet::Indirector::Indirection.expects(:model).returns(nil)
33
+ Proc.new { Puppet::Network::HTTP::WEBrickREST.new(*@params) }.should raise_error(ArgumentError)
34
+ end
35
+ end
36
+
37
+ describe Puppet::Network::HTTP::WEBrickREST, "when receiving a request" do
38
+ before do
39
+ @mock_request = stub('webrick http request', :query => {}, :peeraddr => %w{eh boo host ip}, :client_cert => nil)
40
+ @mock_response = stub('webrick http response', :status= => true, :body= => true)
41
+ @mock_model_class = stub('indirected model class')
42
+ @mock_webrick = stub('webrick http server', :mount => true, :[] => {})
43
+ Puppet::Indirector::Indirection.stubs(:model).with(:foo).returns(@mock_model_class)
44
+ @handler = Puppet::Network::HTTP::WEBrickREST.new(@mock_webrick, :foo)
45
+ end
46
+
47
+ def setup_find_request
48
+ @mock_request.stubs(:request_method).returns('GET')
49
+ @mock_request.stubs(:path).returns('/foo/key')
50
+ @mock_model_class.stubs(:find)
51
+ end
52
+
53
+ def setup_search_request
54
+ @mock_request.stubs(:request_method).returns('GET')
55
+ @mock_request.stubs(:path).returns('/foos')
56
+ @mock_model_class.stubs(:search).returns([])
57
+ end
58
+
59
+ def setup_destroy_request
60
+ @mock_request.stubs(:request_method).returns('DELETE')
61
+ @mock_request.stubs(:path).returns('/foo/key')
62
+ @mock_model_class.stubs(:destroy)
63
+ end
64
+
65
+ def setup_save_request
66
+ @mock_request.stubs(:request_method).returns('PUT')
67
+ @mock_request.stubs(:path).returns('/foo')
68
+ @mock_request.stubs(:body).returns('This is a fake request body')
69
+ @mock_model_instance = stub('indirected model instance', :save => true)
70
+ @mock_model_class.stubs(:from_yaml).returns(@mock_model_instance)
71
+ end
72
+
73
+ def setup_bad_request
74
+ @mock_request.stubs(:request_method).returns('POST')
75
+ @mock_request.stubs(:path).returns('/foos')
76
+ end
77
+
78
+ it "should delegate its :service method to its :process method" do
79
+ @handler.expects(:process).with(@mock_request, @mock_response).returns "stuff"
80
+ @handler.service(@mock_request, @mock_response).should == "stuff"
81
+ end
82
+
83
+ it "should call the model find method if the request represents a singular HTTP GET" do
84
+ setup_find_request
85
+ @mock_model_class.expects(:find).with { |key, args| key == 'key' }
86
+ @handler.process(@mock_request, @mock_response)
87
+ end
88
+
89
+ it "should call the model search method if the request represents a plural HTTP GET" do
90
+ setup_search_request
91
+ @mock_model_class.expects(:search).returns([])
92
+ @handler.process(@mock_request, @mock_response)
93
+ end
94
+
95
+ it "should call the model destroy method if the request represents an HTTP DELETE" do
96
+ setup_destroy_request
97
+ @mock_model_class.expects(:destroy).with { |key, args| key == 'key' }
98
+ @handler.process(@mock_request, @mock_response)
99
+ end
100
+
101
+ it "should call the model save method if the request represents an HTTP PUT" do
102
+ setup_save_request
103
+ @mock_model_instance.expects(:save)
104
+ @handler.process(@mock_request, @mock_response)
105
+ end
106
+
107
+ it "should fail if the HTTP method isn't supported" do
108
+ @mock_request.stubs(:request_method).returns('POST')
109
+ @mock_request.stubs(:path).returns('/foo')
110
+ @mock_response.expects(:status=).with(404)
111
+ @handler.process(@mock_request, @mock_response)
112
+ end
113
+
114
+ it "should fail if delete request's pluralization is wrong" do
115
+ @mock_request.stubs(:request_method).returns('DELETE')
116
+ @mock_request.stubs(:path).returns('/foos/key')
117
+ @mock_response.expects(:status=).with(404)
118
+ @handler.process(@mock_request, @mock_response)
119
+ end
120
+
121
+ it "should fail if put request's pluralization is wrong" do
122
+ @mock_request.stubs(:request_method).returns('PUT')
123
+ @mock_request.stubs(:path).returns('/foos/key')
124
+ @mock_response.expects(:status=).with(404)
125
+ @handler.process(@mock_request, @mock_response)
126
+ end
127
+
128
+ it "should fail if the request is for an unknown path" do
129
+ @mock_request.stubs(:request_method).returns('GET')
130
+ @mock_request.stubs(:path).returns('/bar/key')
131
+ @mock_response.expects(:status=).with(404)
132
+ @handler.process(@mock_request, @mock_response)
133
+ end
134
+
135
+ describe "and determining the request parameters" do
136
+ it "should include the HTTP request parameters" do
137
+ @mock_request.stubs(:query).returns(:foo => :baz, :bar => :xyzzy)
138
+ result = @handler.params(@mock_request)
139
+ result[:foo].should == :baz
140
+ result[:bar].should == :xyzzy
141
+ end
142
+
143
+ it "should pass the client's ip address to model find" do
144
+ @mock_request.stubs(:peeraddr).returns(%w{noidea dunno hostname ipaddress})
145
+ @handler.params(@mock_request)[:ip].should == "ipaddress"
146
+ end
147
+
148
+ it "should set 'authenticated' to true if a certificate is present" do
149
+ cert = stub 'cert', :subject => [%w{CN host.domain.com}]
150
+ @mock_request.stubs(:client_cert).returns cert
151
+ @handler.params(@mock_request)[:authenticated].should be_true
152
+ end
153
+
154
+ it "should set 'authenticated' to false if no certificate is present" do
155
+ @mock_request.stubs(:client_cert).returns nil
156
+ @handler.params(@mock_request)[:authenticated].should be_false
157
+ end
158
+
159
+ it "should pass the client's certificate name to model method if a certificate is present" do
160
+ cert = stub 'cert', :subject => [%w{CN host.domain.com}]
161
+ @mock_request.stubs(:client_cert).returns cert
162
+ @handler.params(@mock_request)[:node].should == "host.domain.com"
163
+ end
164
+
165
+ it "should not pass a node name to model method if no certificate is present" do
166
+ @mock_request.stubs(:client_cert).returns nil
167
+ @handler.params(@mock_request).should_not be_include(:node)
168
+ end
169
+ end
170
+
171
+ describe "when finding a model instance" do |variable|
172
+ it "should fail to find model if key is not specified" do
173
+ @mock_request.stubs(:request_method).returns('GET')
174
+ @mock_request.stubs(:path).returns('/foo')
175
+ @mock_response.expects(:status=).with(404)
176
+ @handler.process(@mock_request, @mock_response)
177
+ end
178
+
179
+ it "should use a common method for determining the request parameters" do
180
+ setup_find_request
181
+ @handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
182
+ @mock_model_class.expects(:find).with do |key, args|
183
+ args[:foo] == :baz and args[:bar] == :xyzzy
184
+ end
185
+ @handler.process(@mock_request, @mock_response)
186
+ end
187
+
188
+ it "should generate a 200 response when a model find call succeeds" do
189
+ setup_find_request
190
+ @mock_response.expects(:status=).with(200)
191
+ @handler.process(@mock_request, @mock_response)
192
+ end
193
+
194
+ it "should return a serialized object when a model find call succeeds" do
195
+ setup_find_request
196
+ @mock_model_instance = stub('model instance')
197
+ @mock_model_instance.expects(:to_yaml)
198
+ @mock_model_class.stubs(:find).returns(@mock_model_instance)
199
+ @handler.process(@mock_request, @mock_response)
200
+ end
201
+
202
+ it "should serialize a controller exception when an exception is thrown by find" do
203
+ setup_find_request
204
+ @mock_model_class.expects(:find).raises(ArgumentError)
205
+ @mock_response.expects(:status=).with(404)
206
+ @handler.process(@mock_request, @mock_response)
207
+ end
208
+ end
209
+
210
+ describe "when destroying a model instance" do |variable|
211
+ it "should fail to destroy model if key is not specified" do
212
+ @mock_request.stubs(:request_method).returns('DELETE')
213
+ @mock_request.stubs(:path).returns('/foo')
214
+ @mock_response.expects(:status=).with(404)
215
+ @handler.process(@mock_request, @mock_response)
216
+ end
217
+
218
+ it "should use a common method for determining the request parameters" do
219
+ setup_destroy_request
220
+ @handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
221
+ @mock_model_class.expects(:destroy).with do |key, args|
222
+ args[:foo] == :baz and args[:bar] == :xyzzy
223
+ end
224
+ @handler.process(@mock_request, @mock_response)
225
+ end
226
+
227
+ it "should generate a 200 response when a model destroy call succeeds" do
228
+ setup_destroy_request
229
+ @mock_response.expects(:status=).with(200)
230
+ @handler.process(@mock_request, @mock_response)
231
+ end
232
+
233
+ it "should return a serialized success result when a model destroy call succeeds" do
234
+ setup_destroy_request
235
+ @mock_model_class.stubs(:destroy).returns(true)
236
+ @mock_response.expects(:body=).with("--- true\n")
237
+ @handler.process(@mock_request, @mock_response)
238
+ end
239
+
240
+ it "should serialize a controller exception when an exception is thrown by destroy" do
241
+ setup_destroy_request
242
+ @mock_model_class.expects(:destroy).raises(ArgumentError)
243
+ @mock_response.expects(:status=).with(404)
244
+ @handler.process(@mock_request, @mock_response)
245
+ end
246
+ end
247
+
248
+ describe "when saving a model instance" do
249
+ it "should fail to save model if data is not specified" do
250
+ @mock_request.stubs(:request_method).returns('PUT')
251
+ @mock_request.stubs(:path).returns('/foo')
252
+ @mock_request.stubs(:body).returns('')
253
+ @mock_response.expects(:status=).with(404)
254
+ @handler.process(@mock_request, @mock_response)
255
+ end
256
+
257
+ it "should use a common method for determining the request parameters" do
258
+ setup_save_request
259
+ @handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
260
+ @mock_model_instance.expects(:save).with do |args|
261
+ args[:foo] == :baz and args[:bar] == :xyzzy
262
+ end
263
+ @handler.process(@mock_request, @mock_response)
264
+ end
265
+
266
+ it "should generate a 200 response when a model save call succeeds" do
267
+ setup_save_request
268
+ @mock_response.expects(:status=).with(200)
269
+ @handler.process(@mock_request, @mock_response)
270
+ end
271
+
272
+ it "should return a serialized object when a model save call succeeds" do
273
+ setup_save_request
274
+ @mock_model_instance.stubs(:save).returns(@mock_model_instance)
275
+ @mock_model_instance.expects(:to_yaml).returns('foo')
276
+ @handler.process(@mock_request, @mock_response)
277
+ end
278
+
279
+ it "should serialize a controller exception when an exception is thrown by save" do
280
+ setup_save_request
281
+ @mock_model_instance.expects(:save).raises(ArgumentError)
282
+ @mock_response.expects(:status=).with(404)
283
+ @handler.process(@mock_request, @mock_response)
284
+ end
285
+ end
286
+
287
+ describe "when searching for model instances" do
288
+ it "should use a common method for determining the request parameters" do
289
+ setup_search_request
290
+ @handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
291
+ @mock_model_class.expects(:search).with do |args|
292
+ args[:foo] == :baz and args[:bar] == :xyzzy
293
+ end
294
+ @handler.process(@mock_request, @mock_response)
295
+ end
296
+
297
+ it "should generate a 200 response when a model search call succeeds" do
298
+ setup_search_request
299
+ @mock_response.expects(:status=).with(200)
300
+ @handler.process(@mock_request, @mock_response)
301
+ end
302
+
303
+ it "should return a list of serialized objects when a model search call succeeds" do
304
+ setup_search_request
305
+ mock_matches = [1..5].collect {|i| mock("model instance #{i}", :to_yaml => "model instance #{i}") }
306
+ @mock_model_class.stubs(:search).returns(mock_matches)
307
+ @handler.process(@mock_request, @mock_response)
308
+ end
309
+
310
+ it "should serialize a controller exception when an exception is thrown by search" do
311
+ setup_search_request
312
+ @mock_model_class.expects(:search).raises(ArgumentError)
313
+ @mock_response.expects(:status=).with(404)
314
+ @handler.process(@mock_request, @mock_response)
315
+ end
316
+ end
317
+
318
+ it "should serialize a controller exception if the request fails" do
319
+ setup_bad_request
320
+ @mock_response.expects(:status=).with(404)
321
+ @handler.process(@mock_request, @mock_response)
322
+ end
323
+ end