puppet 0.24.9 → 0.25.0

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 (910) hide show
  1. data/CHANGELOG +18680 -1241
  2. data/CHANGELOG.old +1705 -0
  3. data/LICENSE +2 -2
  4. data/README +1 -1
  5. data/README.queueing +126 -0
  6. data/README.rst +4 -4
  7. data/Rakefile +62 -216
  8. data/bin/filebucket +6 -117
  9. data/bin/pi +50 -0
  10. data/bin/puppet +7 -188
  11. data/bin/puppetdoc +7 -198
  12. data/bin/ralsh +4 -191
  13. data/conf/auth.conf +94 -0
  14. data/conf/gentoo/init.d/puppetmaster +30 -30
  15. data/conf/osx/PackageInfo.plist +30 -30
  16. data/conf/osx/createpackage.sh +23 -18
  17. data/conf/osx/preflight +8 -0
  18. data/conf/puppet-queue.conf +10 -0
  19. data/conf/redhat/client.init +52 -41
  20. data/conf/redhat/logrotate +1 -0
  21. data/conf/redhat/puppet.spec +74 -36
  22. data/conf/redhat/rundir-perms.patch +28 -0
  23. data/conf/redhat/server.init +48 -43
  24. data/conf/redhat/server.sysconfig +4 -4
  25. data/conf/solaris/smf/puppetd.xml +53 -53
  26. data/conf/solaris/smf/puppetmasterd.xml +53 -53
  27. data/conf/solaris/smf/svc-puppetd +4 -4
  28. data/conf/solaris/smf/svc-puppetmasterd +3 -3
  29. data/conf/suse/client.init +4 -4
  30. data/conf/suse/puppet.spec +14 -14
  31. data/conf/suse/server.init +17 -17
  32. data/examples/etc/init.d/sleeper +8 -8
  33. data/examples/mac_dscl.pp +2 -2
  34. data/examples/mac_dscl_revert.pp +1 -1
  35. data/examples/mcx_dock_default.pp +108 -108
  36. data/examples/mcx_dock_full.pp +108 -108
  37. data/examples/mcx_nogroup.pp +108 -108
  38. data/examples/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +5 -5
  39. data/examples/modules/sample-module/manifests/init.pp +2 -2
  40. data/examples/relationships +1 -1
  41. data/ext/autotest/config +6 -6
  42. data/ext/bin/sleeper +12 -12
  43. data/ext/dbfix.sql +21 -21
  44. data/ext/emacs/puppet-mode.el +42 -41
  45. data/ext/extlookup.rb +183 -0
  46. data/ext/ldap/puppet.schema +2 -1
  47. data/ext/logcheck/puppet +1 -1
  48. data/ext/module_puppet +7 -7
  49. data/ext/nagios/check_puppet.rb +83 -83
  50. data/ext/nagios/naggen +302 -0
  51. data/ext/puppet-test +61 -18
  52. data/ext/puppetlisten/puppetlisten.rb +76 -0
  53. data/ext/puppetlisten/puppetrun.rb +39 -0
  54. data/ext/puppetstoredconfigclean.rb +29 -29
  55. data/ext/rack/README +73 -0
  56. data/ext/rack/files/apache2.conf +38 -0
  57. data/ext/rack/files/config.ru +18 -0
  58. data/ext/rack/manifest.pp +59 -0
  59. data/ext/vim/syntax/puppet.vim +54 -35
  60. data/install.rb +37 -26
  61. data/lib/puppet.rb +15 -227
  62. data/lib/puppet/agent.rb +134 -0
  63. data/lib/puppet/agent/locker.rb +42 -0
  64. data/lib/puppet/agent/runner.rb +65 -0
  65. data/lib/puppet/application.rb +313 -0
  66. data/lib/puppet/application/filebucket.rb +87 -0
  67. data/lib/puppet/application/pi.rb +214 -0
  68. data/lib/puppet/application/puppet.rb +177 -0
  69. data/lib/puppet/application/puppetca.rb +71 -0
  70. data/lib/puppet/application/puppetd.rb +256 -0
  71. data/lib/puppet/application/puppetdoc.rb +222 -0
  72. data/lib/puppet/application/puppetmasterd.rb +168 -0
  73. data/lib/puppet/application/puppetqd.rb +96 -0
  74. data/lib/puppet/application/puppetrun.rb +219 -0
  75. data/lib/puppet/application/ralsh.rb +168 -0
  76. data/lib/puppet/configurer.rb +177 -0
  77. data/lib/puppet/configurer/downloader.rb +79 -0
  78. data/lib/puppet/configurer/fact_handler.rb +68 -0
  79. data/lib/puppet/configurer/plugin_handler.rb +26 -0
  80. data/lib/puppet/daemon.rb +78 -28
  81. data/lib/puppet/defaults.rb +239 -166
  82. data/lib/puppet/dsl.rb +7 -7
  83. data/lib/puppet/external/dot.rb +271 -271
  84. data/lib/puppet/external/event-loop/better-definers.rb +298 -298
  85. data/lib/puppet/external/event-loop/event-loop.rb +274 -274
  86. data/lib/puppet/external/event-loop/signal-system.rb +163 -163
  87. data/lib/puppet/external/lock.rb +1 -1
  88. data/lib/puppet/external/nagios.rb +20 -20
  89. data/lib/puppet/external/nagios/base.rb +3 -3
  90. data/lib/puppet/external/nagios/grammar.ry +185 -0
  91. data/lib/puppet/external/nagios/makefile +9 -0
  92. data/lib/puppet/external/nagios/parser.rb +1 -1
  93. data/lib/puppet/feature/json.rb +2 -0
  94. data/lib/puppet/feature/rack.rb +24 -0
  95. data/lib/puppet/feature/rails.rb +23 -33
  96. data/lib/puppet/feature/rubygems.rb +6 -0
  97. data/lib/puppet/feature/stomp.rb +6 -0
  98. data/lib/puppet/file_serving/{file_base.rb → base.rb} +10 -9
  99. data/lib/puppet/file_serving/configuration.rb +61 -61
  100. data/lib/puppet/file_serving/configuration/parser.rb +24 -29
  101. data/lib/puppet/file_serving/content.rb +26 -11
  102. data/lib/puppet/file_serving/fileset.rb +54 -19
  103. data/lib/puppet/file_serving/indirection_hooks.rb +12 -24
  104. data/lib/puppet/file_serving/metadata.rb +8 -8
  105. data/lib/puppet/file_serving/mount.rb +9 -151
  106. data/lib/puppet/file_serving/mount/file.rb +126 -0
  107. data/lib/puppet/file_serving/mount/modules.rb +25 -0
  108. data/lib/puppet/file_serving/mount/plugins.rb +27 -0
  109. data/lib/puppet/file_serving/terminus_helper.rb +9 -4
  110. data/lib/puppet/indirector.rb +6 -4
  111. data/lib/puppet/indirector/active_record.rb +28 -0
  112. data/lib/puppet/indirector/catalog/active_record.rb +36 -0
  113. data/lib/puppet/indirector/catalog/compiler.rb +50 -24
  114. data/lib/puppet/indirector/catalog/queue.rb +5 -0
  115. data/lib/puppet/indirector/catalog/rest.rb +6 -0
  116. data/lib/puppet/indirector/catalog/yaml.rb +2 -4
  117. data/lib/puppet/indirector/certificate/ca.rb +9 -0
  118. data/lib/puppet/indirector/certificate/file.rb +9 -0
  119. data/lib/puppet/indirector/certificate/rest.rb +9 -0
  120. data/lib/puppet/indirector/certificate_request/ca.rb +14 -0
  121. data/lib/puppet/indirector/certificate_request/file.rb +8 -0
  122. data/lib/puppet/indirector/certificate_request/rest.rb +9 -0
  123. data/lib/puppet/indirector/certificate_revocation_list/ca.rb +8 -0
  124. data/lib/puppet/indirector/certificate_revocation_list/file.rb +8 -0
  125. data/lib/puppet/indirector/certificate_revocation_list/rest.rb +9 -0
  126. data/lib/puppet/indirector/direct_file_server.rb +4 -8
  127. data/lib/puppet/indirector/exec.rb +2 -6
  128. data/lib/puppet/indirector/facts/active_record.rb +36 -0
  129. data/lib/puppet/indirector/facts/facter.rb +30 -22
  130. data/lib/puppet/indirector/facts/rest.rb +6 -0
  131. data/lib/puppet/indirector/file.rb +1 -0
  132. data/lib/puppet/indirector/file_content/rest.rb +0 -1
  133. data/lib/puppet/indirector/file_metadata/file.rb +2 -2
  134. data/lib/puppet/indirector/file_metadata/rest.rb +0 -1
  135. data/lib/puppet/indirector/file_server.rb +31 -18
  136. data/lib/puppet/indirector/indirection.rb +46 -33
  137. data/lib/puppet/indirector/key/ca.rb +12 -0
  138. data/lib/puppet/indirector/key/file.rb +42 -0
  139. data/lib/puppet/indirector/node/active_record.rb +13 -0
  140. data/lib/puppet/indirector/node/ldap.rb +1 -1
  141. data/lib/puppet/indirector/queue.rb +83 -0
  142. data/lib/puppet/indirector/report/processor.rb +1 -1
  143. data/lib/puppet/indirector/report/rest.rb +7 -0
  144. data/lib/puppet/indirector/request.rb +158 -15
  145. data/lib/puppet/indirector/rest.rb +74 -36
  146. data/lib/puppet/indirector/runner/rest.rb +7 -0
  147. data/lib/puppet/indirector/ssl_file.rb +174 -0
  148. data/lib/puppet/indirector/terminus.rb +4 -4
  149. data/lib/puppet/indirector/yaml.rb +1 -1
  150. data/lib/puppet/metatype/manager.rb +3 -3
  151. data/lib/puppet/module.rb +99 -124
  152. data/lib/puppet/network/authconfig.rb +57 -42
  153. data/lib/puppet/network/authstore.rb +58 -10
  154. data/lib/puppet/network/client.rb +0 -2
  155. data/lib/puppet/network/client/ca.rb +1 -1
  156. data/lib/puppet/network/client/dipper.rb +7 -2
  157. data/lib/puppet/network/format.rb +123 -0
  158. data/lib/puppet/network/format_handler.rb +156 -0
  159. data/lib/puppet/network/formats.rb +123 -0
  160. data/lib/puppet/network/handler/filebucket.rb +1 -1
  161. data/lib/puppet/network/handler/fileserver.rb +43 -35
  162. data/lib/puppet/network/handler/master.rb +4 -4
  163. data/lib/puppet/network/handler/report.rb +1 -1
  164. data/lib/puppet/network/handler/resource.rb +16 -20
  165. data/lib/puppet/network/handler/runner.rb +9 -42
  166. data/lib/puppet/network/http.rb +4 -4
  167. data/lib/puppet/network/http/api.rb +4 -0
  168. data/lib/puppet/network/http/api/v1.rb +65 -0
  169. data/lib/puppet/network/http/handler.rb +163 -56
  170. data/lib/puppet/network/http/mongrel.rb +19 -15
  171. data/lib/puppet/network/http/mongrel/rest.rb +35 -17
  172. data/lib/puppet/network/http/rack.rb +62 -0
  173. data/lib/puppet/network/http/rack/httphandler.rb +34 -0
  174. data/lib/puppet/network/http/rack/rest.rb +79 -0
  175. data/lib/puppet/network/http/rack/xmlrpc.rb +65 -0
  176. data/lib/puppet/network/http/webrick.rb +89 -16
  177. data/lib/puppet/network/http/webrick/rest.rb +24 -11
  178. data/lib/puppet/network/http_pool.rb +28 -29
  179. data/lib/puppet/network/http_server/mongrel.rb +8 -10
  180. data/lib/puppet/network/http_server/webrick.rb +1 -3
  181. data/lib/puppet/network/rest_authconfig.rb +89 -0
  182. data/lib/puppet/network/rest_authorization.rb +25 -0
  183. data/lib/puppet/network/rights.rb +230 -27
  184. data/lib/puppet/network/server.rb +133 -31
  185. data/lib/puppet/network/xmlrpc/client.rb +5 -5
  186. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +6 -6
  187. data/lib/puppet/node.rb +28 -21
  188. data/lib/puppet/node/environment.rb +48 -0
  189. data/lib/puppet/node/facts.rb +21 -0
  190. data/lib/puppet/parameter.rb +291 -219
  191. data/lib/puppet/parser/ast.rb +1 -0
  192. data/lib/puppet/parser/ast/astarray.rb +5 -1
  193. data/lib/puppet/parser/ast/boolean_operator.rb +3 -3
  194. data/lib/puppet/parser/ast/caseopt.rb +10 -0
  195. data/lib/puppet/parser/ast/casestatement.rb +12 -27
  196. data/lib/puppet/parser/ast/collection.rb +31 -0
  197. data/lib/puppet/parser/ast/collexpr.rb +18 -11
  198. data/lib/puppet/parser/ast/comparison_operator.rb +1 -1
  199. data/lib/puppet/parser/ast/definition.rb +6 -2
  200. data/lib/puppet/parser/ast/function.rb +7 -2
  201. data/lib/puppet/parser/ast/ifstatement.rb +11 -6
  202. data/lib/puppet/parser/ast/leaf.rb +106 -3
  203. data/lib/puppet/parser/ast/match_operator.rb +31 -0
  204. data/lib/puppet/parser/ast/node.rb +10 -6
  205. data/lib/puppet/parser/ast/resource_defaults.rb +2 -2
  206. data/lib/puppet/parser/ast/resource_override.rb +1 -1
  207. data/lib/puppet/parser/ast/resource_reference.rb +11 -3
  208. data/lib/puppet/parser/ast/selector.rb +14 -32
  209. data/lib/puppet/parser/ast/vardef.rb +1 -1
  210. data/lib/puppet/parser/collector.rb +67 -15
  211. data/lib/puppet/parser/compiler.rb +21 -53
  212. data/lib/puppet/parser/files.rb +92 -0
  213. data/lib/puppet/parser/functions.rb +3 -3
  214. data/lib/puppet/parser/functions/defined.rb +3 -3
  215. data/lib/puppet/parser/functions/fqdn_rand.rb +3 -3
  216. data/lib/puppet/parser/functions/inline_template.rb +4 -4
  217. data/lib/puppet/parser/functions/regsubst.rb +37 -35
  218. data/lib/puppet/parser/functions/require.rb +34 -0
  219. data/lib/puppet/parser/functions/shellquote.rb +41 -0
  220. data/lib/puppet/parser/functions/split.rb +29 -0
  221. data/lib/puppet/parser/functions/sprintf.rb +6 -6
  222. data/lib/puppet/parser/functions/template.rb +4 -4
  223. data/lib/puppet/parser/functions/versioncmp.rb +22 -1
  224. data/lib/puppet/parser/grammar.ra +812 -0
  225. data/lib/puppet/parser/interpreter.rb +4 -4
  226. data/lib/puppet/parser/lexer.rb +44 -15
  227. data/lib/puppet/parser/loaded_code.rb +115 -0
  228. data/lib/puppet/parser/makefile +8 -0
  229. data/lib/puppet/parser/parser.rb +1080 -928
  230. data/lib/puppet/parser/parser_support.rb +118 -96
  231. data/lib/puppet/parser/resource.rb +56 -126
  232. data/lib/puppet/parser/resource/param.rb +2 -76
  233. data/lib/puppet/parser/resource/reference.rb +15 -8
  234. data/lib/puppet/parser/scope.rb +68 -35
  235. data/lib/puppet/parser/templatewrapper.rb +8 -8
  236. data/lib/puppet/parser/yaml_trimmer.rb +11 -0
  237. data/lib/puppet/property.rb +69 -124
  238. data/lib/puppet/property/list.rb +3 -3
  239. data/lib/puppet/provider.rb +5 -5
  240. data/lib/puppet/provider/augeas/augeas.rb +119 -118
  241. data/lib/puppet/provider/computer/computer.rb +3 -3
  242. data/lib/puppet/provider/confine/variable.rb +1 -1
  243. data/lib/puppet/provider/cron/crontab.rb +8 -7
  244. data/lib/puppet/provider/group/directoryservice.rb +2 -2
  245. data/lib/puppet/provider/group/groupadd.rb +1 -1
  246. data/lib/puppet/provider/group/ldap.rb +3 -3
  247. data/lib/puppet/provider/group/pw.rb +1 -1
  248. data/lib/puppet/provider/host/parsed.rb +3 -3
  249. data/lib/puppet/provider/ldap.rb +1 -3
  250. data/lib/puppet/provider/macauthorization/macauthorization.rb +62 -55
  251. data/lib/puppet/provider/mailalias/aliases.rb +9 -1
  252. data/lib/puppet/provider/maillist/mailman.rb +8 -4
  253. data/lib/puppet/provider/mcx/mcxcontent.rb +11 -11
  254. data/lib/puppet/provider/mount/parsed.rb +2 -2
  255. data/lib/puppet/provider/nameservice.rb +6 -6
  256. data/lib/puppet/provider/nameservice/directoryservice.rb +83 -87
  257. data/lib/puppet/provider/package/appdmg.rb +10 -9
  258. data/lib/puppet/provider/package/apple.rb +1 -3
  259. data/lib/puppet/provider/package/apt.rb +5 -5
  260. data/lib/puppet/provider/package/aptitude.rb +1 -1
  261. data/lib/puppet/provider/package/aptrpm.rb +1 -1
  262. data/lib/puppet/provider/package/darwinport.rb +1 -1
  263. data/lib/puppet/provider/package/dpkg.rb +2 -2
  264. data/lib/puppet/provider/package/fink.rb +6 -6
  265. data/lib/puppet/provider/package/freebsd.rb +1 -1
  266. data/lib/puppet/provider/package/gem.rb +2 -2
  267. data/lib/puppet/provider/package/hpux.rb +5 -5
  268. data/lib/puppet/provider/package/pkgdmg.rb +30 -22
  269. data/lib/puppet/provider/package/portage.rb +1 -1
  270. data/lib/puppet/provider/package/ports.rb +1 -1
  271. data/lib/puppet/provider/package/rpm.rb +5 -5
  272. data/lib/puppet/provider/package/rug.rb +1 -1
  273. data/lib/puppet/provider/package/sun.rb +7 -7
  274. data/lib/puppet/provider/package/up2date.rb +1 -1
  275. data/lib/puppet/provider/package/yum.rb +2 -2
  276. data/lib/puppet/provider/package/yumhelper.py +2 -2
  277. data/lib/puppet/provider/port/parsed.rb +1 -1
  278. data/lib/puppet/provider/selmodule/semodule.rb +3 -3
  279. data/lib/puppet/provider/service/base.rb +21 -12
  280. data/lib/puppet/provider/service/daemontools.rb +86 -49
  281. data/lib/puppet/provider/service/debian.rb +20 -12
  282. data/lib/puppet/provider/service/freebsd.rb +5 -5
  283. data/lib/puppet/provider/service/gentoo.rb +2 -2
  284. data/lib/puppet/provider/service/init.rb +21 -33
  285. data/lib/puppet/provider/service/launchd.rb +120 -48
  286. data/lib/puppet/provider/service/redhat.rb +12 -21
  287. data/lib/puppet/provider/service/runit.rb +19 -9
  288. data/lib/puppet/provider/service/smf.rb +49 -34
  289. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +34 -0
  290. data/lib/puppet/provider/sshkey/parsed.rb +2 -2
  291. data/lib/puppet/provider/user/directoryservice.rb +12 -29
  292. data/lib/puppet/provider/user/hpux.rb +3 -3
  293. data/lib/puppet/provider/user/ldap.rb +2 -2
  294. data/lib/puppet/provider/zfs/solaris.rb +1 -1
  295. data/lib/puppet/provider/zone/solaris.rb +4 -4
  296. data/lib/puppet/provider/zpool/solaris.rb +3 -3
  297. data/lib/puppet/rails.rb +9 -9
  298. data/lib/puppet/rails/benchmark.rb +69 -0
  299. data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +5 -5
  300. data/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +2 -2
  301. data/lib/puppet/rails/database/003_add_environment_to_host.rb +1 -1
  302. data/lib/puppet/rails/database/schema.rb +8 -8
  303. data/lib/puppet/rails/fact_value.rb +1 -1
  304. data/lib/puppet/rails/host.rb +211 -93
  305. data/lib/puppet/rails/param_name.rb +5 -1
  306. data/lib/puppet/rails/param_value.rb +29 -2
  307. data/lib/puppet/rails/puppet_tag.rb +5 -0
  308. data/lib/puppet/rails/resource.rb +120 -20
  309. data/lib/puppet/rails/resource_tag.rb +1 -1
  310. data/lib/puppet/rails/source_file.rb +1 -1
  311. data/lib/puppet/reference/configuration.rb +14 -14
  312. data/lib/puppet/reference/function.rb +1 -1
  313. data/lib/puppet/reference/metaparameter.rb +48 -0
  314. data/lib/puppet/reference/providers.rb +6 -6
  315. data/lib/puppet/reference/type.rb +1 -37
  316. data/lib/puppet/relationship.rb +57 -30
  317. data/lib/puppet/reports/rrdgraph.rb +4 -4
  318. data/lib/puppet/reports/store.rb +3 -3
  319. data/lib/puppet/reports/tagmail.rb +15 -15
  320. data/lib/puppet/resource.rb +265 -0
  321. data/lib/puppet/{node → resource}/catalog.rb +188 -112
  322. data/lib/puppet/{resource_reference.rb → resource/reference.rb} +46 -24
  323. data/lib/puppet/simple_graph.rb +165 -27
  324. data/lib/puppet/ssl.rb +7 -0
  325. data/lib/puppet/ssl/base.rb +62 -0
  326. data/lib/puppet/ssl/certificate.rb +34 -0
  327. data/lib/puppet/ssl/certificate_authority.rb +298 -0
  328. data/lib/puppet/ssl/certificate_authority/interface.rb +118 -0
  329. data/lib/puppet/ssl/certificate_factory.rb +145 -0
  330. data/lib/puppet/ssl/certificate_request.rb +51 -0
  331. data/lib/puppet/ssl/certificate_revocation_list.rb +86 -0
  332. data/lib/puppet/ssl/host.rb +271 -0
  333. data/lib/puppet/ssl/inventory.rb +52 -0
  334. data/lib/puppet/ssl/key.rb +56 -0
  335. data/lib/puppet/sslcertificates.rb +6 -6
  336. data/lib/puppet/sslcertificates/ca.rb +15 -15
  337. data/lib/puppet/sslcertificates/certificate.rb +4 -4
  338. data/lib/puppet/sslcertificates/inventory.rb +3 -3
  339. data/lib/puppet/transaction.rb +113 -139
  340. data/lib/puppet/transaction/change.rb +6 -6
  341. data/lib/puppet/transaction/event.rb +1 -1
  342. data/lib/puppet/transaction/report.rb +7 -1
  343. data/lib/puppet/transportable.rb +28 -28
  344. data/lib/puppet/type.rb +263 -688
  345. data/lib/puppet/type/augeas.rb +3 -2
  346. data/lib/puppet/type/component.rb +28 -95
  347. data/lib/puppet/type/computer.rb +10 -10
  348. data/lib/puppet/type/cron.rb +19 -14
  349. data/lib/puppet/type/exec.rb +21 -20
  350. data/lib/puppet/type/file.rb +306 -633
  351. data/lib/puppet/type/file/checksum.rb +10 -11
  352. data/lib/puppet/type/file/content.rb +83 -22
  353. data/lib/puppet/type/file/ensure.rb +15 -9
  354. data/lib/puppet/type/file/group.rb +7 -1
  355. data/lib/puppet/type/file/mode.rb +1 -1
  356. data/lib/puppet/type/file/owner.rb +9 -3
  357. data/lib/puppet/type/file/selcontext.rb +4 -4
  358. data/lib/puppet/type/file/source.rb +78 -179
  359. data/lib/puppet/type/file/target.rb +3 -3
  360. data/lib/puppet/type/file/type.rb +2 -2
  361. data/lib/puppet/type/filebucket.rb +33 -54
  362. data/lib/puppet/type/group.rb +8 -8
  363. data/lib/puppet/type/host.rb +7 -7
  364. data/lib/puppet/type/k5login.rb +2 -2
  365. data/lib/puppet/type/macauthorization.rb +77 -52
  366. data/lib/puppet/type/mailalias.rb +2 -2
  367. data/lib/puppet/type/maillist.rb +2 -2
  368. data/lib/puppet/type/mcx.rb +3 -3
  369. data/lib/puppet/type/mount.rb +16 -11
  370. data/lib/puppet/type/notify.rb +4 -4
  371. data/lib/puppet/type/package.rb +6 -28
  372. data/lib/puppet/type/port.rb +1 -1
  373. data/lib/puppet/type/resources.rb +19 -19
  374. data/lib/puppet/type/schedule.rb +18 -20
  375. data/lib/puppet/type/selmodule.rb +1 -1
  376. data/lib/puppet/type/service.rb +11 -7
  377. data/lib/puppet/type/ssh_authorized_key.rb +26 -9
  378. data/lib/puppet/type/sshkey.rb +2 -2
  379. data/lib/puppet/type/tidy.rb +285 -289
  380. data/lib/puppet/type/user.rb +9 -7
  381. data/lib/puppet/type/yumrepo.rb +17 -16
  382. data/lib/puppet/type/zone.rb +8 -7
  383. data/lib/puppet/util.rb +11 -36
  384. data/lib/puppet/util/autoload.rb +31 -19
  385. data/lib/puppet/util/autoload/file_cache.rb +115 -0
  386. data/lib/puppet/util/backups.rb +86 -0
  387. data/lib/puppet/util/cacher.rb +135 -0
  388. data/lib/puppet/util/checksums.rb +11 -1
  389. data/lib/puppet/util/classgen.rb +1 -1
  390. data/lib/puppet/util/config_store.rb +2 -2
  391. data/lib/puppet/util/constant_inflector.rb +1 -1
  392. data/lib/puppet/util/diff.rb +2 -2
  393. data/lib/puppet/util/docs.rb +9 -3
  394. data/lib/puppet/util/execution.rb +1 -1
  395. data/lib/puppet/util/feature.rb +27 -20
  396. data/lib/puppet/util/fileparsing.rb +3 -3
  397. data/lib/puppet/util/filetype.rb +8 -6
  398. data/lib/puppet/util/graph.rb +5 -5
  399. data/lib/puppet/util/inifile.rb +5 -5
  400. data/lib/puppet/util/json.rb +13 -0
  401. data/lib/puppet/util/ldap/connection.rb +2 -2
  402. data/lib/puppet/util/log.rb +48 -31
  403. data/lib/puppet/util/metric.rb +4 -4
  404. data/lib/puppet/util/monkey_patches.rb +43 -0
  405. data/lib/puppet/util/nagios_maker.rb +1 -1
  406. data/lib/puppet/util/package.rb +4 -4
  407. data/lib/puppet/util/pidlock.rb +59 -59
  408. data/lib/puppet/util/posix.rb +13 -52
  409. data/lib/puppet/util/provider_features.rb +3 -3
  410. data/lib/puppet/util/queue.rb +96 -0
  411. data/lib/puppet/util/queue/stomp.rb +47 -0
  412. data/lib/puppet/util/rails/cache_accumulator.rb +65 -0
  413. data/lib/puppet/util/rails/collection_merger.rb +0 -39
  414. data/lib/puppet/util/rails/reference_serializer.rb +17 -3
  415. data/lib/puppet/util/rdoc.rb +1 -0
  416. data/lib/puppet/util/rdoc/code_objects.rb +5 -1
  417. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +5 -5
  418. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +13 -13
  419. data/lib/puppet/util/rdoc/parser.rb +28 -32
  420. data/lib/puppet/util/reference.rb +29 -8
  421. data/lib/puppet/util/resource_template.rb +1 -1
  422. data/lib/puppet/util/selinux.rb +12 -6
  423. data/lib/puppet/util/settings.rb +203 -578
  424. data/lib/puppet/util/settings/boolean_setting.rb +33 -0
  425. data/lib/puppet/util/settings/file_setting.rb +119 -0
  426. data/lib/puppet/util/settings/setting.rb +110 -0
  427. data/lib/puppet/util/subclass_loader.rb +1 -1
  428. data/lib/puppet/util/suidmanager.rb +2 -2
  429. data/lib/puppet/util/tagging.rb +1 -1
  430. data/lib/puppet/util/warnings.rb +17 -9
  431. data/man/man8/filebucket.8 +2 -2
  432. data/man/man8/pi.8 +2 -2
  433. data/man/man8/puppet.8 +3 -4
  434. data/man/man8/puppet.conf.8 +63 -63
  435. data/man/man8/puppetca.8 +2 -2
  436. data/man/man8/puppetd.8 +2 -2
  437. data/man/man8/puppetdoc.8 +2 -2
  438. data/man/man8/puppetmasterd.8 +2 -2
  439. data/man/man8/puppetrun.8 +2 -2
  440. data/man/man8/ralsh.8 +3 -3
  441. data/sbin/puppetca +102 -0
  442. data/sbin/puppetd +159 -0
  443. data/sbin/puppetmasterd +66 -0
  444. data/sbin/puppetqd +53 -0
  445. data/sbin/puppetrun +130 -0
  446. data/spec/Rakefile +2 -2
  447. data/spec/integration/application/puppet.rb +33 -0
  448. data/spec/integration/bin/puppetmasterd.rb +110 -0
  449. data/spec/integration/configurer.rb +18 -0
  450. data/spec/integration/defaults.rb +158 -7
  451. data/spec/integration/file_serving/content.rb +2 -0
  452. data/spec/integration/file_serving/fileset.rb +14 -0
  453. data/spec/integration/file_serving/metadata.rb +2 -0
  454. data/spec/integration/file_serving/terminus_helper.rb +22 -0
  455. data/spec/integration/indirector/catalog/compiler.rb +67 -0
  456. data/spec/integration/indirector/catalog/queue.rb +61 -0
  457. data/spec/integration/indirector/certificate/rest.rb +69 -0
  458. data/spec/integration/indirector/certificate_request/rest.rb +89 -0
  459. data/spec/integration/indirector/certificate_revocation_list/rest.rb +77 -0
  460. data/spec/integration/indirector/direct_file_server.rb +16 -23
  461. data/spec/integration/indirector/file_content/file_server.rb +75 -0
  462. data/spec/integration/indirector/report/rest.rb +95 -0
  463. data/spec/integration/indirector/rest.rb +207 -147
  464. data/spec/integration/network/client.rb +19 -0
  465. data/spec/integration/network/formats.rb +110 -0
  466. data/spec/integration/network/handler.rb +25 -0
  467. data/spec/integration/network/server/mongrel.rb +26 -8
  468. data/spec/integration/network/server/webrick.rb +49 -11
  469. data/spec/integration/node/environment.rb +58 -0
  470. data/spec/integration/node/facts.rb +4 -2
  471. data/spec/integration/parser/compiler.rb +29 -0
  472. data/spec/integration/parser/functions/require.rb +67 -0
  473. data/spec/integration/provider/mailalias/aliases.rb +25 -0
  474. data/spec/integration/{node → resource}/catalog.rb +17 -10
  475. data/spec/integration/ssl/certificate_authority.rb +135 -0
  476. data/spec/integration/ssl/certificate_request.rb +59 -0
  477. data/spec/integration/ssl/certificate_revocation_list.rb +42 -0
  478. data/spec/integration/ssl/host.rb +90 -0
  479. data/spec/integration/transaction.rb +66 -0
  480. data/spec/integration/transaction/report.rb +2 -5
  481. data/spec/integration/type.rb +22 -0
  482. data/spec/integration/type/file.rb +458 -0
  483. data/spec/integration/type/package.rb +1 -1
  484. data/spec/integration/type/tidy.rb +27 -0
  485. data/spec/integration/util/autoload.rb +114 -0
  486. data/spec/integration/util/feature.rb +54 -0
  487. data/spec/integration/util/file_locking.rb +2 -1
  488. data/spec/integration/util/settings.rb +27 -0
  489. data/spec/lib/puppet_spec/files.rb +9 -0
  490. data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +1 -0
  491. data/spec/monkey_patches/alias_should_to_must.rb +1 -0
  492. data/spec/shared_behaviours/file_server_terminus.rb +14 -11
  493. data/spec/shared_behaviours/file_serving.rb +13 -17
  494. data/spec/spec_helper.rb +22 -5
  495. data/spec/unit/agent.rb +259 -0
  496. data/spec/unit/agent/locker.rb +100 -0
  497. data/spec/unit/agent/runner.rb +118 -0
  498. data/spec/unit/application.rb +420 -0
  499. data/spec/unit/application/filebucket.rb +220 -0
  500. data/spec/unit/application/pi.rb +84 -0
  501. data/spec/unit/application/puppet.rb +404 -0
  502. data/spec/unit/application/puppetca.rb +142 -0
  503. data/spec/unit/application/puppetd.rb +502 -0
  504. data/spec/unit/application/puppetdoc.rb +345 -0
  505. data/spec/unit/application/puppetmasterd.rb +456 -0
  506. data/spec/unit/application/puppetqd.rb +186 -0
  507. data/spec/unit/application/puppetrun.rb +279 -0
  508. data/spec/unit/application/ralsh.rb +237 -0
  509. data/spec/unit/configurer.rb +232 -0
  510. data/spec/unit/configurer/downloader.rb +188 -0
  511. data/spec/unit/configurer/fact_handler.rb +150 -0
  512. data/spec/unit/configurer/plugin_handler.rb +112 -0
  513. data/spec/unit/daemon.rb +287 -0
  514. data/spec/unit/file_serving/{file_base.rb → base.rb} +39 -31
  515. data/spec/unit/file_serving/configuration.rb +104 -93
  516. data/spec/unit/file_serving/configuration/parser.rb +64 -18
  517. data/spec/unit/file_serving/content.rb +65 -26
  518. data/spec/unit/file_serving/fileset.rb +116 -14
  519. data/spec/unit/file_serving/indirection_hooks.rb +34 -95
  520. data/spec/unit/file_serving/metadata.rb +27 -40
  521. data/spec/unit/file_serving/mount.rb +7 -118
  522. data/spec/unit/file_serving/mount/file.rb +188 -0
  523. data/spec/unit/file_serving/mount/modules.rb +63 -0
  524. data/spec/unit/file_serving/mount/plugins.rb +61 -0
  525. data/spec/unit/file_serving/terminus_helper.rb +39 -27
  526. data/spec/unit/indirector.rb +6 -1
  527. data/spec/unit/indirector/active_record.rb +76 -0
  528. data/spec/unit/indirector/catalog/active_record.rb +122 -0
  529. data/spec/unit/indirector/catalog/compiler.rb +222 -118
  530. data/spec/unit/indirector/catalog/queue.rb +20 -0
  531. data/spec/unit/indirector/catalog/rest.rb +11 -0
  532. data/spec/unit/indirector/catalog/yaml.rb +6 -6
  533. data/spec/unit/indirector/certificate/ca.rb +28 -0
  534. data/spec/unit/indirector/certificate/file.rb +28 -0
  535. data/spec/unit/indirector/certificate/rest.rb +23 -0
  536. data/spec/unit/indirector/certificate_request/ca.rb +19 -0
  537. data/spec/unit/indirector/certificate_request/file.rb +19 -0
  538. data/spec/unit/indirector/certificate_request/rest.rb +23 -0
  539. data/spec/unit/indirector/certificate_revocation_list/ca.rb +21 -0
  540. data/spec/unit/indirector/certificate_revocation_list/file.rb +20 -0
  541. data/spec/unit/indirector/certificate_revocation_list/rest.rb +23 -0
  542. data/spec/unit/indirector/direct_file_server.rb +3 -8
  543. data/spec/unit/indirector/exec.rb +6 -1
  544. data/spec/unit/indirector/facts/active_record.rb +104 -0
  545. data/spec/unit/indirector/facts/facter.rb +53 -12
  546. data/spec/unit/indirector/facts/rest.rb +11 -0
  547. data/spec/unit/indirector/file.rb +8 -1
  548. data/spec/unit/indirector/file_metadata/file.rb +5 -5
  549. data/spec/unit/indirector/file_server.rb +181 -98
  550. data/spec/unit/indirector/indirection.rb +102 -38
  551. data/spec/unit/indirector/key/ca.rb +28 -0
  552. data/spec/unit/indirector/key/file.rb +104 -0
  553. data/spec/unit/indirector/node/active_record.rb +34 -0
  554. data/spec/unit/indirector/node/ldap.rb +1 -1
  555. data/spec/unit/indirector/node/rest.rb +2 -2
  556. data/spec/unit/indirector/queue.rb +123 -0
  557. data/spec/unit/indirector/report/rest.rb +28 -0
  558. data/spec/unit/indirector/request.rb +221 -0
  559. data/spec/unit/indirector/rest.rb +343 -334
  560. data/spec/unit/indirector/runner/rest.rb +11 -0
  561. data/spec/unit/indirector/ssl_file.rb +280 -0
  562. data/spec/unit/module.rb +180 -180
  563. data/spec/unit/network/authconfig.rb +292 -0
  564. data/spec/unit/network/authstore.rb +94 -0
  565. data/spec/unit/network/client.rb +2 -2
  566. data/spec/unit/network/client/dipper.rb +16 -0
  567. data/spec/unit/network/format.rb +191 -0
  568. data/spec/unit/network/format_handler.rb +306 -0
  569. data/spec/unit/network/formats.rb +249 -0
  570. data/spec/unit/network/handler/fileserver.rb +2 -5
  571. data/spec/unit/network/http.rb +3 -3
  572. data/spec/unit/network/http/api/v1.rb +122 -0
  573. data/spec/unit/network/http/handler.rb +448 -0
  574. data/spec/unit/network/http/mongrel.rb +46 -32
  575. data/spec/unit/network/http/mongrel/rest.rb +174 -319
  576. data/spec/unit/network/http/rack.rb +102 -0
  577. data/spec/unit/network/http/rack/rest.rb +199 -0
  578. data/spec/unit/network/http/rack/xmlrpc.rb +157 -0
  579. data/spec/unit/network/http/webrick.rb +249 -37
  580. data/spec/unit/network/http/webrick/rest.rb +113 -279
  581. data/spec/unit/network/http_pool.rb +86 -110
  582. data/spec/unit/network/rest_authconfig.rb +146 -0
  583. data/spec/unit/network/rest_authorization.rb +43 -0
  584. data/spec/unit/network/rights.rb +519 -0
  585. data/spec/unit/network/server.rb +475 -257
  586. data/spec/unit/node.rb +43 -10
  587. data/spec/unit/node/environment.rb +143 -9
  588. data/spec/unit/node/facts.rb +77 -24
  589. data/spec/unit/other/selinux.rb +85 -0
  590. data/spec/unit/other/transbucket.rb +29 -13
  591. data/spec/unit/other/transobject.rb +35 -15
  592. data/spec/unit/parameter.rb +378 -5
  593. data/spec/unit/parser/ast.rb +1 -1
  594. data/spec/unit/parser/ast/arithmetic_operator.rb +17 -17
  595. data/spec/unit/parser/ast/astarray.rb +16 -10
  596. data/spec/unit/parser/ast/boolean_operator.rb +2 -2
  597. data/spec/unit/parser/ast/casestatement.rb +143 -0
  598. data/spec/unit/parser/ast/collection.rb +63 -0
  599. data/spec/unit/parser/ast/collexpr.rb +31 -8
  600. data/spec/unit/parser/ast/comparison_operator.rb +9 -9
  601. data/spec/unit/parser/ast/definition.rb +18 -0
  602. data/spec/unit/parser/ast/function.rb +6 -0
  603. data/spec/unit/parser/ast/ifstatement.rb +75 -0
  604. data/spec/unit/parser/ast/leaf.rb +261 -0
  605. data/spec/unit/parser/ast/match_operator.rb +50 -0
  606. data/spec/unit/parser/ast/minus.rb +1 -1
  607. data/spec/unit/parser/ast/node.rb +20 -0
  608. data/spec/unit/parser/ast/not.rb +1 -1
  609. data/spec/unit/parser/ast/resource_override.rb +5 -5
  610. data/spec/unit/parser/ast/resource_reference.rb +11 -5
  611. data/spec/unit/parser/ast/selector.rb +156 -0
  612. data/spec/unit/parser/ast/vardef.rb +11 -11
  613. data/spec/unit/parser/collector.rb +167 -48
  614. data/spec/unit/parser/compiler.rb +128 -104
  615. data/spec/unit/parser/files.rb +190 -0
  616. data/spec/unit/parser/functions/inline_template.rb +0 -0
  617. data/spec/unit/parser/functions/regsubst.rb +42 -42
  618. data/spec/unit/parser/functions/require.rb +36 -0
  619. data/spec/unit/parser/functions/shellquote.rb +92 -0
  620. data/spec/unit/parser/functions/split.rb +51 -0
  621. data/spec/unit/parser/functions/sprintf.rb +11 -11
  622. data/spec/unit/parser/functions/template.rb +0 -0
  623. data/spec/unit/parser/functions/versioncmp.rb +2 -2
  624. data/spec/unit/parser/interpreter.rb +16 -7
  625. data/spec/unit/parser/lexer.rb +72 -12
  626. data/spec/unit/parser/loaded_code.rb +198 -0
  627. data/spec/unit/parser/parser.rb +215 -28
  628. data/spec/unit/parser/resource.rb +131 -22
  629. data/spec/unit/parser/scope.rb +207 -12
  630. data/spec/unit/parser/templatewrapper.rb +8 -3
  631. data/spec/unit/property.rb +270 -16
  632. data/spec/unit/property/list.rb +12 -6
  633. data/spec/unit/provider.rb +31 -0
  634. data/spec/unit/provider/augeas/augeas.rb +61 -33
  635. data/spec/unit/provider/macauthorization.rb +29 -29
  636. data/spec/unit/provider/mcx/mcxcontent.rb +4 -4
  637. data/spec/unit/provider/mount/parsed.rb +5 -8
  638. data/spec/unit/provider/naginator.rb +0 -0
  639. data/spec/unit/provider/package/apt.rb +6 -6
  640. data/spec/unit/provider/package/pkgdmg.rb +73 -0
  641. data/spec/unit/provider/selboolean.rb +1 -1
  642. data/spec/unit/provider/selmodule.rb +2 -2
  643. data/spec/unit/provider/service/daemontools.rb +40 -15
  644. data/spec/unit/provider/service/debian.rb +89 -0
  645. data/spec/unit/provider/service/init.rb +106 -0
  646. data/spec/unit/provider/service/launchd.rb +71 -13
  647. data/spec/unit/provider/service/redhat.rb +94 -0
  648. data/spec/unit/provider/service/runit.rb +14 -2
  649. data/spec/unit/provider/ssh_authorized_key/parsed.rb +66 -2
  650. data/spec/unit/provider/user/ldap.rb +1 -1
  651. data/spec/unit/provider/user/user_role_add.rb +1 -1
  652. data/spec/unit/provider/zfs/solaris.rb +18 -6
  653. data/spec/unit/provider/zone/solaris.rb +1 -1
  654. data/spec/unit/rails.rb +16 -22
  655. data/spec/unit/rails/host.rb +163 -0
  656. data/spec/unit/rails/param_value.rb +49 -0
  657. data/spec/unit/rails/resource.rb +87 -0
  658. data/spec/unit/relationship.rb +141 -29
  659. data/spec/unit/resource.rb +504 -0
  660. data/spec/unit/resource/catalog.rb +1061 -0
  661. data/spec/unit/resource/reference.rb +111 -0
  662. data/spec/unit/simple_graph.rb +448 -191
  663. data/spec/unit/ssl/certificate.rb +124 -0
  664. data/spec/unit/ssl/certificate_authority.rb +741 -0
  665. data/spec/unit/ssl/certificate_authority/interface.rb +269 -0
  666. data/spec/unit/ssl/certificate_factory.rb +107 -0
  667. data/spec/unit/ssl/certificate_request.rb +193 -0
  668. data/spec/unit/ssl/certificate_revocation_list.rb +180 -0
  669. data/spec/unit/ssl/host.rb +704 -0
  670. data/spec/unit/ssl/inventory.rb +180 -0
  671. data/spec/unit/ssl/key.rb +198 -0
  672. data/spec/unit/transaction.rb +65 -2
  673. data/spec/unit/transaction/change.rb +1 -1
  674. data/spec/unit/transaction/report.rb +1 -1
  675. data/spec/unit/type.rb +361 -8
  676. data/spec/unit/type/augeas.rb +30 -37
  677. data/spec/unit/type/component.rb +63 -0
  678. data/spec/unit/type/computer.rb +17 -21
  679. data/spec/unit/type/exec.rb +27 -2
  680. data/spec/unit/type/file.rb +704 -83
  681. data/spec/unit/type/file/content.rb +253 -15
  682. data/spec/unit/type/file/ensure.rb +65 -2
  683. data/spec/unit/type/file/group.rb +5 -0
  684. data/spec/unit/type/file/owner.rb +5 -0
  685. data/spec/unit/type/file/selinux.rb +12 -16
  686. data/spec/unit/type/file/source.rb +264 -0
  687. data/spec/unit/type/filebucket.rb +74 -0
  688. data/spec/unit/type/group.rb +1 -5
  689. data/spec/unit/type/macauthorization.rb +59 -26
  690. data/spec/unit/type/mcx.rb +8 -16
  691. data/spec/unit/type/mount.rb +8 -16
  692. data/spec/unit/type/noop_metaparam.rb +0 -2
  693. data/spec/unit/type/package.rb +13 -23
  694. data/spec/unit/type/resources.rb +4 -7
  695. data/spec/unit/type/schedule.rb +1 -7
  696. data/spec/unit/type/selboolean.rb +4 -6
  697. data/spec/unit/type/service.rb +23 -33
  698. data/spec/unit/type/ssh_authorized_key.rb +25 -14
  699. data/spec/unit/type/tidy.rb +329 -21
  700. data/spec/unit/type/user.rb +18 -10
  701. data/spec/unit/type/zfs.rb +6 -6
  702. data/spec/unit/util/autoload.rb +94 -3
  703. data/spec/unit/util/autoload/file_cache.rb +183 -0
  704. data/spec/unit/util/backups.rb +159 -0
  705. data/spec/unit/util/cache_accumulator.rb +69 -0
  706. data/spec/unit/util/cacher.rb +185 -0
  707. data/spec/unit/util/checksums.rb +9 -1
  708. data/spec/unit/util/feature.rb +72 -0
  709. data/spec/unit/util/filetype.rb +1 -11
  710. data/spec/unit/util/json.rb +21 -0
  711. data/spec/unit/util/log.rb +45 -0
  712. data/spec/unit/util/package.rb +2 -2
  713. data/spec/unit/util/queue.rb +88 -0
  714. data/spec/unit/util/queue/stomp.rb +140 -0
  715. data/spec/unit/util/reference_serializer.rb +52 -0
  716. data/spec/unit/util/selinux.rb +5 -3
  717. data/spec/unit/util/settings.rb +413 -264
  718. data/spec/unit/util/settings/file_setting.rb +223 -0
  719. data/spec/unit/util/storage.rb +11 -11
  720. data/spec/unit/util/warnings.rb +21 -17
  721. data/test/Rakefile +6 -5
  722. data/test/certmgr/ca.rb +5 -5
  723. data/test/certmgr/certmgr.rb +4 -4
  724. data/test/data/providers/cron/crontab.allthree +2 -2
  725. data/test/data/providers/cron/crontab.envNcomment +1 -1
  726. data/test/data/providers/cron/crontab.envNname +1 -1
  727. data/test/data/providers/cron/crontab.multirecords +1 -1
  728. data/test/data/providers/cron/crontab_collections.yaml +14 -14
  729. data/test/data/providers/cron/crontab_multiple_with_env.yaml +6 -6
  730. data/test/data/providers/cron/crontab_sample_records.yaml +102 -102
  731. data/test/data/providers/mailalias/aliases/test1 +28 -0
  732. data/test/data/providers/package/testpackages.yaml +6 -6
  733. data/test/data/reports/1.yaml +17 -17
  734. data/test/data/reports/tagmail_passers.conf +2 -2
  735. data/test/data/snippets/append.pp +5 -5
  736. data/test/data/snippets/casestatement.pp +9 -2
  737. data/test/data/snippets/classincludes.pp +1 -1
  738. data/test/data/snippets/collection_override.pp +8 -0
  739. data/test/data/snippets/fqparents.pp +2 -2
  740. data/test/data/snippets/ifexpression.pp +12 -0
  741. data/test/data/snippets/multilinecomments.pp +5 -1
  742. data/test/data/snippets/selectorvalues.pp +7 -0
  743. data/test/data/types/hosts/1 +1 -1
  744. data/test/data/types/hosts/2 +3 -3
  745. data/test/data/types/hosts/solaris +2 -2
  746. data/test/data/types/mount/freebsd.fstab +7 -7
  747. data/test/data/types/mount/solaris.fstab +10 -10
  748. data/test/data/types/port/1 +472 -472
  749. data/test/data/types/port/darwin +4347 -4347
  750. data/test/language/ast.rb +3 -2
  751. data/test/language/ast/casestatement.rb +12 -12
  752. data/test/language/ast/resource.rb +4 -4
  753. data/test/language/ast/resource_reference.rb +5 -5
  754. data/test/language/ast/selector.rb +11 -11
  755. data/test/language/ast/variable.rb +4 -4
  756. data/test/language/functions.rb +16 -16
  757. data/test/language/parser.rb +89 -111
  758. data/test/language/resource.rb +3 -88
  759. data/test/language/scope.rb +14 -55
  760. data/test/language/snippets.rb +31 -31
  761. data/test/lib/puppettest.rb +12 -12
  762. data/test/lib/puppettest/certificates.rb +2 -2
  763. data/test/lib/puppettest/exetest.rb +0 -1
  764. data/test/lib/puppettest/fakes.rb +1 -1
  765. data/test/lib/puppettest/parsertesting.rb +9 -4
  766. data/test/lib/puppettest/railstesting.rb +3 -3
  767. data/test/lib/puppettest/servertest.rb +1 -1
  768. data/test/lib/puppettest/support/assertions.rb +2 -2
  769. data/test/lib/puppettest/support/collection.rb +1 -1
  770. data/test/lib/puppettest/support/resources.rb +7 -7
  771. data/test/lib/puppettest/support/utils.rb +10 -16
  772. data/test/lib/puppettest/testcase.rb +2 -1
  773. data/test/network/authconfig.rb +1 -1
  774. data/test/network/authorization.rb +1 -1
  775. data/test/network/authstore.rb +57 -14
  776. data/test/network/client/ca.rb +1 -0
  777. data/test/network/client/resource.rb +12 -50
  778. data/test/network/client_request.rb +1 -1
  779. data/test/network/handler/bucket.rb +2 -2
  780. data/test/network/handler/fileserver.rb +17 -21
  781. data/test/network/handler/master.rb +5 -5
  782. data/test/network/handler/report.rb +3 -3
  783. data/test/network/handler/resource.rb +29 -75
  784. data/test/network/handler/runner.rb +8 -58
  785. data/test/network/rights.rb +1 -1
  786. data/test/network/server/mongrel_test.rb +15 -1
  787. data/test/network/server/webrick.rb +0 -36
  788. data/test/network/xmlrpc/webrick_servlet.rb +5 -5
  789. data/test/other/dsl.rb +3 -3
  790. data/test/other/events.rb +15 -15
  791. data/test/other/puppet.rb +2 -32
  792. data/test/other/relationships.rb +21 -148
  793. data/test/other/report.rb +20 -23
  794. data/test/other/transactions.rb +110 -298
  795. data/test/puppet/defaults.rb +1 -1
  796. data/test/puppet/tc_suidmanager.rb +1 -1
  797. data/test/rails/railsparameter.rb +4 -4
  798. data/test/ral/manager/attributes.rb +12 -68
  799. data/test/ral/manager/instances.rb +3 -19
  800. data/test/ral/manager/manager.rb +7 -7
  801. data/test/ral/manager/provider.rb +7 -7
  802. data/test/ral/manager/type.rb +54 -349
  803. data/test/ral/providers/cron/crontab.rb +14 -14
  804. data/test/ral/providers/group.rb +5 -6
  805. data/test/ral/providers/host/parsed.rb +3 -3
  806. data/test/ral/providers/mailalias/aliases.rb +4 -4
  807. data/test/ral/providers/package.rb +3 -3
  808. data/test/ral/providers/package/aptitude.rb +55 -55
  809. data/test/ral/providers/package/aptrpm.rb +7 -7
  810. data/test/ral/providers/parsedfile.rb +10 -14
  811. data/test/ral/providers/port/parsed.rb +6 -6
  812. data/test/ral/providers/provider.rb +10 -10
  813. data/test/ral/providers/service/base.rb +32 -32
  814. data/test/ral/providers/sshkey/parsed.rb +14 -14
  815. data/test/ral/providers/user.rb +16 -17
  816. data/test/ral/providers/user/useradd.rb +19 -22
  817. data/test/ral/type/cron.rb +21 -28
  818. data/test/ral/type/exec.rb +57 -60
  819. data/test/ral/type/file.rb +88 -862
  820. data/test/ral/type/file/target.rb +21 -70
  821. data/test/ral/type/fileignoresource.rb +37 -44
  822. data/test/ral/type/filesources.rb +43 -473
  823. data/test/ral/type/group.rb +6 -7
  824. data/test/ral/type/host.rb +14 -30
  825. data/test/ral/type/mailalias.rb +3 -3
  826. data/test/ral/type/port.rb +5 -5
  827. data/test/ral/type/resources.rb +37 -37
  828. data/test/ral/type/service.rb +3 -3
  829. data/test/ral/type/sshkey.rb +34 -39
  830. data/test/ral/type/user.rb +15 -14
  831. data/test/ral/type/yumrepo.rb +18 -17
  832. data/test/ral/type/zone.rb +4 -6
  833. data/test/test +9 -9
  834. data/test/util/fileparsing.rb +10 -10
  835. data/test/util/inifile.rb +6 -6
  836. data/test/util/instance_loader.rb +1 -1
  837. data/test/util/log.rb +2 -2
  838. data/test/util/metrics.rb +1 -6
  839. data/test/util/package.rb +1 -1
  840. data/test/util/pidlock.rb +116 -116
  841. data/test/util/settings.rb +40 -429
  842. data/test/util/storage.rb +5 -5
  843. data/test/util/subclass_loader.rb +0 -7
  844. data/test/util/utiltest.rb +10 -29
  845. metadata +1369 -941
  846. data/bin/puppetca +0 -363
  847. data/bin/puppetd +0 -439
  848. data/bin/puppetmasterd +0 -289
  849. data/bin/puppetrun +0 -369
  850. data/conf/redhat/lsb-config.patch +0 -51
  851. data/conf/redhat/no-chuser-0.15.1.patch +0 -38
  852. data/conf/redhat/no-lockdir.patch +0 -13
  853. data/examples/mac_netinfo.pp +0 -5
  854. data/ext/passenger/README +0 -63
  855. data/ext/passenger/apache2.conf +0 -29
  856. data/ext/passenger/config.ru +0 -40
  857. data/lib/puppet/config_stores/rest.rb +0 -60
  858. data/lib/puppet/executables/client/certhandler.rb +0 -82
  859. data/lib/puppet/indirector/file_content/modules.rb +0 -11
  860. data/lib/puppet/indirector/file_metadata/modules.rb +0 -17
  861. data/lib/puppet/indirector/module_files.rb +0 -82
  862. data/lib/puppet/indirector/ssl_rsa.rb +0 -5
  863. data/lib/puppet/indirector/ssl_rsa/file.rb +0 -33
  864. data/lib/puppet/network/client/master.rb +0 -524
  865. data/lib/puppet/network/http_server/rack.rb +0 -148
  866. data/lib/puppet/pgraph.rb +0 -121
  867. data/lib/puppet/provider/group/netinfo.rb +0 -15
  868. data/lib/puppet/provider/host/netinfo.rb +0 -19
  869. data/lib/puppet/provider/mount/netinfo.rb +0 -37
  870. data/lib/puppet/provider/nameservice/netinfo.rb +0 -224
  871. data/lib/puppet/provider/user/netinfo.rb +0 -111
  872. data/lib/puppet/util/fact_store.rb +0 -59
  873. data/lib/puppet/util/uri_helper.rb +0 -22
  874. data/spec/integration/file_serving/configuration.rb +0 -43
  875. data/spec/integration/indirector/module_files.rb +0 -57
  876. data/spec/unit/executables/client/certhandler.rb +0 -135
  877. data/spec/unit/indirector/file_content/modules.rb +0 -18
  878. data/spec/unit/indirector/file_metadata/modules.rb +0 -42
  879. data/spec/unit/indirector/module_files.rb +0 -259
  880. data/spec/unit/indirector/ssl_rsa/file.rb +0 -121
  881. data/spec/unit/network/client/master.rb +0 -442
  882. data/spec/unit/node/catalog.rb +0 -865
  883. data/spec/unit/other/pgraph.rb +0 -210
  884. data/spec/unit/resource_reference.rb +0 -73
  885. data/spec/unit/util/uri_helper.rb +0 -41
  886. data/test/data/snippets/ifexpression.rb +0 -6
  887. data/test/executables/filebucket.rb +0 -51
  888. data/test/executables/puppetbin.rb +0 -104
  889. data/test/executables/puppetca.rb +0 -115
  890. data/test/executables/puppetd.rb +0 -55
  891. data/test/executables/puppetmasterd.rb +0 -147
  892. data/test/network/client/client.rb +0 -195
  893. data/test/network/client/master.rb +0 -490
  894. data/test/network/daemon.rb +0 -70
  895. data/test/network/handler/handler.rb +0 -63
  896. data/test/other/overrides.rb +0 -107
  897. data/test/puppet/conffiles.rb +0 -107
  898. data/test/rails/ast.rb +0 -73
  899. data/test/rails/configuration.rb +0 -71
  900. data/test/rails/host.rb +0 -154
  901. data/test/rails/railsresource.rb +0 -251
  902. data/test/ral/providers/host/netinfo.rb +0 -56
  903. data/test/ral/providers/mount/netinfo.rb +0 -79
  904. data/test/ral/type/basic.rb +0 -85
  905. data/test/ral/type/filebucket.rb +0 -157
  906. data/test/ral/type/parameter.rb +0 -174
  907. data/test/ral/type/property.rb +0 -388
  908. data/test/ral/type/tidy.rb +0 -291
  909. data/test/util/autoload.rb +0 -145
  910. data/test/util/features.rb +0 -95
@@ -6,105 +6,21 @@
6
6
  require File.dirname(__FILE__) + '/../../spec_helper'
7
7
  require 'puppet/network/http_pool'
8
8
 
9
- describe Puppet::Network::HttpPool, " when adding certificate information to http instances" do
10
- before do
11
- @http = mock 'http'
12
- [:cert_store=, :verify_mode=, :ca_file=, :cert=, :key=].each { |m| @http.stubs(m) }
13
- @store = stub 'store'
14
- [:add_file,:purpose=].each { |m| @store.stubs(m) }
9
+ describe Puppet::Network::HttpPool do
10
+ after do
11
+ Puppet::Util::Cacher.expire
12
+ Puppet::Network::HttpPool.clear_http_instances
13
+ Puppet::Network::HttpPool.instance_variable_set("@ssl_host", nil)
15
14
  end
16
15
 
17
16
  it "should have keep-alive disabled" do
18
17
  Puppet::Network::HttpPool::HTTP_KEEP_ALIVE.should be_false
19
18
  end
20
19
 
21
- it "should do nothing if no certificate is available" do
22
- Puppet::Network::HttpPool.expects(:read_cert).returns(false)
23
- @http.expects(:cert=).never
24
- Puppet::Network::HttpPool.cert_setup(@http)
25
- end
26
-
27
- it "should add a certificate store" do
28
- Puppet::Network::HttpPool.stubs(:read_cert).returns(true)
29
- Puppet::Network::HttpPool.stubs(:key).returns(:mykey)
30
- OpenSSL::X509::Store.expects(:new).returns(@store)
31
- @http.expects(:cert_store=).with(@store)
32
-
33
- Puppet::Network::HttpPool.cert_setup(@http)
34
- end
35
-
36
- it "should add the local CA cert to the certificate store" do
37
- Puppet::Network::HttpPool.stubs(:read_cert).returns(true)
38
- OpenSSL::X509::Store.expects(:new).returns(@store)
39
- Puppet.settings.stubs(:value).with(:localcacert).returns("/some/file")
40
- Puppet.settings.stubs(:value).with(:localcacert).returns("/some/file")
41
- @store.expects(:add_file).with("/some/file")
42
-
43
- Puppet::Network::HttpPool.stubs(:key).returns(:whatever)
44
-
45
- Puppet::Network::HttpPool.cert_setup(@http)
46
- end
47
-
48
- it "should set the purpose of the cert store to OpenSSL::X509::PURPOSE_SSL_CLIENT" do
49
- Puppet::Network::HttpPool.stubs(:read_cert).returns(true)
50
- Puppet::Network::HttpPool.stubs(:key).returns(:mykey)
51
- OpenSSL::X509::Store.expects(:new).returns(@store)
52
-
53
- @store.expects(:purpose=).with(OpenSSL::X509::PURPOSE_SSL_CLIENT)
54
-
55
- Puppet::Network::HttpPool.cert_setup(@http)
56
- end
57
-
58
- it "should add the client certificate" do
59
- Puppet::Network::HttpPool.stubs(:read_cert).returns(true)
60
- Puppet::Network::HttpPool.stubs(:cert).returns(:mycert)
61
- Puppet::Network::HttpPool.stubs(:key).returns(:mykey)
62
- OpenSSL::X509::Store.expects(:new).returns(@store)
63
-
64
- @http.expects(:cert=).with(:mycert)
65
-
66
- Puppet::Network::HttpPool.cert_setup(@http)
67
- end
68
-
69
- it "should add the client key" do
70
- Puppet::Network::HttpPool.stubs(:read_cert).returns(true)
71
- Puppet::Network::HttpPool.stubs(:key).returns(:mykey)
72
- OpenSSL::X509::Store.expects(:new).returns(@store)
73
-
74
- @http.expects(:key=).with(:mykey)
75
-
76
- Puppet::Network::HttpPool.cert_setup(@http)
77
- end
78
-
79
- it "should set the verify mode to OpenSSL::SSL::VERIFY_PEER" do
80
- Puppet::Network::HttpPool.stubs(:read_cert).returns(true)
81
- Puppet::Network::HttpPool.stubs(:key).returns(:mykey)
82
- OpenSSL::X509::Store.expects(:new).returns(@store)
83
-
84
- @http.expects(:verify_mode=).with(OpenSSL::SSL::VERIFY_PEER)
85
-
86
- Puppet::Network::HttpPool.cert_setup(@http)
87
- end
88
-
89
- it "should set the ca file" do
90
- Puppet::Network::HttpPool.stubs(:read_cert).returns(true)
91
- Puppet.settings.stubs(:value).with(:localcacert).returns("/some/file")
92
- OpenSSL::X509::Store.expects(:new).returns(@store)
93
-
94
- @http.expects(:ca_file=).with("/some/file")
95
-
96
- Puppet::Network::HttpPool.stubs(:key).returns(:whatever)
97
-
98
- Puppet::Network::HttpPool.cert_setup(@http)
99
- end
100
-
101
- it "should set up certificate information when creating http instances" do
102
- Puppet::Network::HttpPool.expects(:cert_setup).with { |i| i.is_a?(Net::HTTP) }
103
- Puppet::Network::HttpPool.http_instance("one", "two")
104
- end
105
-
106
- after do
107
- Puppet::Network::HttpPool.clear_http_instances
20
+ it "should use the global SSL::Host instance to get its certificate information" do
21
+ host = mock 'host'
22
+ Puppet::SSL::Host.expects(:localhost).with().returns host
23
+ Puppet::Network::HttpPool.ssl_host.should equal(host)
108
24
  end
109
25
 
110
26
  describe "when managing http instances" do
@@ -115,7 +31,7 @@ describe Puppet::Network::HttpPool, " when adding certificate information to htt
115
31
  end
116
32
 
117
33
  before do
118
- # All of hte cert stuff is tested elsewhere
34
+ # All of the cert stuff is tested elsewhere
119
35
  Puppet::Network::HttpPool.stubs(:cert_setup)
120
36
  end
121
37
 
@@ -150,7 +66,7 @@ describe Puppet::Network::HttpPool, " when adding certificate information to htt
150
66
  Puppet::Network::HttpPool.http_instance("me", 54321).open_timeout.should == 120
151
67
  end
152
68
 
153
- describe "when http keep-alive is enabled" do
69
+ describe "and http keep-alive is enabled" do
154
70
  before do
155
71
  Puppet::Network::HttpPool.stubs(:keep_alive?).returns true
156
72
  end
@@ -201,7 +117,7 @@ describe Puppet::Network::HttpPool, " when adding certificate information to htt
201
117
  end
202
118
  end
203
119
 
204
- describe "when http keep-alive is disabled" do
120
+ describe "and http keep-alive is disabled" do
205
121
  before do
206
122
  Puppet::Network::HttpPool.stubs(:keep_alive?).returns false
207
123
  end
@@ -213,26 +129,86 @@ describe Puppet::Network::HttpPool, " when adding certificate information to htt
213
129
  end
214
130
  end
215
131
 
216
- # We mostly have to do this for testing, since in real life people
217
- # won't change certs within a single process.
218
- it "should remove its loaded certificate when clearing the cache" do
219
- Puppet::Network::HttpPool.instance_variable_set("@cert", :yay)
132
+ after do
220
133
  Puppet::Network::HttpPool.clear_http_instances
221
- # Can't use the accessor, because it will read the cert in
222
- Puppet::Network::HttpPool.instance_variable_get("@cert").should be_nil
223
134
  end
135
+ end
224
136
 
225
- # We mostly have to do this for testing, since in real life people
226
- # won't change certs within a single process.
227
- it "should remove its loaded key when clearing the cache" do
228
- Puppet::Network::HttpPool.instance_variable_set("@key", :yay)
229
- Puppet::Network::HttpPool.clear_http_instances
230
- # Can't use the accessor, because it will read the cert in
231
- Puppet::Network::HttpPool.instance_variable_get("@key").should be_nil
137
+ describe "when adding certificate information to http instances" do
138
+ before do
139
+ @http = mock 'http'
140
+ [:cert_store=, :verify_mode=, :ca_file=, :cert=, :key=].each { |m| @http.stubs(m) }
141
+ @store = stub 'store'
142
+
143
+ @cert = stub 'cert', :content => "real_cert"
144
+ @key = stub 'key', :content => "real_key"
145
+ @host = stub 'host', :certificate => @cert, :key => @key, :ssl_store => @store
146
+
147
+ Puppet[:confdir] = "/sometthing/else"
148
+ Puppet.settings.stubs(:value).returns "/some/file"
149
+ Puppet.settings.stubs(:value).with(:hostcert).returns "/host/cert"
150
+ Puppet.settings.stubs(:value).with(:localcacert).returns "/local/ca/cert"
151
+
152
+ FileTest.stubs(:exist?).with("/host/cert").returns true
153
+ FileTest.stubs(:exist?).with("/local/ca/cert").returns true
154
+
155
+ Puppet::Network::HttpPool.stubs(:ssl_host).returns @host
232
156
  end
233
157
 
234
158
  after do
235
- Puppet::Network::HttpPool.clear_http_instances
159
+ Puppet.settings.clear
160
+ end
161
+
162
+ it "should do nothing if no host certificate is on disk" do
163
+ FileTest.expects(:exist?).with("/host/cert").returns false
164
+ @http.expects(:cert=).never
165
+ Puppet::Network::HttpPool.cert_setup(@http)
166
+ end
167
+
168
+ it "should do nothing if no local certificate is on disk" do
169
+ FileTest.expects(:exist?).with("/local/ca/cert").returns false
170
+ @http.expects(:cert=).never
171
+ Puppet::Network::HttpPool.cert_setup(@http)
172
+ end
173
+
174
+ it "should add a certificate store from the ssl host" do
175
+ @http.expects(:cert_store=).with(@store)
176
+
177
+ Puppet::Network::HttpPool.cert_setup(@http)
178
+ end
179
+
180
+ it "should add the client certificate" do
181
+ @http.expects(:cert=).with("real_cert")
182
+
183
+ Puppet::Network::HttpPool.cert_setup(@http)
184
+ end
185
+
186
+ it "should add the client key" do
187
+ @http.expects(:key=).with("real_key")
188
+
189
+ Puppet::Network::HttpPool.cert_setup(@http)
190
+ end
191
+
192
+ it "should set the verify mode to OpenSSL::SSL::VERIFY_PEER" do
193
+ @http.expects(:verify_mode=).with(OpenSSL::SSL::VERIFY_PEER)
194
+
195
+ Puppet::Network::HttpPool.cert_setup(@http)
196
+ end
197
+
198
+ it "should set the ca file" do
199
+ Puppet.settings.stubs(:value).returns "/some/file"
200
+ FileTest.stubs(:exist?).with(Puppet[:hostcert]).returns true
201
+
202
+ Puppet.settings.stubs(:value).with(:localcacert).returns "/ca/cert/file"
203
+ FileTest.stubs(:exist?).with("/ca/cert/file").returns true
204
+ @http.expects(:ca_file=).with("/ca/cert/file")
205
+
206
+ Puppet::Network::HttpPool.cert_setup(@http)
207
+ end
208
+
209
+ it "should set up certificate information when creating http instances" do
210
+ Puppet::Network::HttpPool.expects(:cert_setup).with { |i| i.is_a?(Net::HTTP) }
211
+ Puppet::Network::HttpPool.http_instance("one", "two")
236
212
  end
237
213
  end
238
214
  end
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+
5
+ require 'puppet/network/rest_authconfig'
6
+
7
+ describe Puppet::Network::RestAuthConfig do
8
+
9
+ DEFAULT_ACL = [
10
+ { :acl => "~ ^\/catalog\/([^\/]+)$", :method => :find, :allow => '$1', :authenticated => true },
11
+ # this one will allow all file access, and thus delegate
12
+ # to fileserver.conf
13
+ { :acl => "/file" },
14
+ { :acl => "/certificate_revocation_list/ca", :method => :find, :authenticated => true },
15
+ { :acl => "/report", :method => :save, :authenticated => true },
16
+ { :acl => "/certificate/ca", :method => :find, :authenticated => false },
17
+ { :acl => "/certificate/", :method => :find, :authenticated => false },
18
+ { :acl => "/certificate_request", :method => [:find, :save], :authenticated => false },
19
+ ]
20
+
21
+ before :each do
22
+ FileTest.stubs(:exists?).returns(true)
23
+ File.stubs(:stat).returns(stub('stat', :ctime => :now))
24
+ Time.stubs(:now).returns :now
25
+
26
+ @authconfig = Puppet::Network::RestAuthConfig.new("dummy", false)
27
+ @authconfig.stubs(:read)
28
+
29
+ @acl = stub_everything 'rights'
30
+ @authconfig.rights = @acl
31
+
32
+ @request = stub 'request', :indirection_name => "path", :key => "to/resource", :ip => "127.0.0.1",
33
+ :node => "me", :method => :save, :environment => :env, :authenticated => true
34
+ end
35
+
36
+ it "should use the puppet default rest authorization file" do
37
+ Puppet.expects(:[]).with(:rest_authconfig).returns("dummy")
38
+
39
+ Puppet::Network::RestAuthConfig.new(nil, false)
40
+ end
41
+
42
+ it "should read the config file when needed" do
43
+ @authconfig.expects(:read)
44
+
45
+ @authconfig.allowed?(@request)
46
+ end
47
+
48
+ it "should ask for authorization to the ACL subsystem" do
49
+ @acl.expects(:fail_on_deny).with("/path/to/resource", :node => "me", :ip => "127.0.0.1", :method => :save, :environment => :env, :authenticated => true)
50
+
51
+ @authconfig.allowed?(@request)
52
+ end
53
+
54
+ describe "when defining an acl with mk_acl" do
55
+ it "should create a new right for each default acl" do
56
+ @acl.expects(:newright).with(:path)
57
+ @authconfig.mk_acl(:acl => :path)
58
+ end
59
+
60
+ it "should allow everyone for each default right" do
61
+ @acl.expects(:allow).with(:path, "*")
62
+ @authconfig.mk_acl(:acl => :path)
63
+ end
64
+
65
+ it "should restrict the ACL to a method" do
66
+ @acl.expects(:restrict_method).with(:path, :method)
67
+ @authconfig.mk_acl(:acl => :path, :method => :method)
68
+ end
69
+
70
+ it "should restrict the ACL to a specific authentication state" do
71
+ @acl.expects(:restrict_authenticated).with(:path, :authentication)
72
+ @authconfig.mk_acl(:acl => :path, :authenticated => :authentication)
73
+ end
74
+ end
75
+
76
+ describe "when parsing the configuration file" do
77
+ it "should check for missing ACL after reading the authconfig file" do
78
+ File.stubs(:open)
79
+
80
+ @authconfig.expects(:insert_default_acl)
81
+
82
+ @authconfig.parse()
83
+ end
84
+ end
85
+
86
+ DEFAULT_ACL.each do |acl|
87
+ it "should insert #{acl} if not present" do
88
+ @authconfig.rights.stubs(:[]).returns(true)
89
+ @authconfig.rights.stubs(:[]).with(acl[:acl]).returns(nil)
90
+
91
+ @authconfig.expects(:mk_acl).with { |h| h[:acl] == acl[:acl] }
92
+
93
+ @authconfig.insert_default_acl
94
+ end
95
+
96
+ it "should not insert #{acl} if present" do
97
+ @authconfig.rights.stubs(:[]).returns(true)
98
+ @authconfig.rights.stubs(:[]).with(acl).returns(true)
99
+
100
+ @authconfig.expects(:mk_acl).never
101
+
102
+ @authconfig.insert_default_acl
103
+ end
104
+ end
105
+
106
+ it "should create default ACL entries if no file have been read" do
107
+ Puppet::Network::RestAuthConfig.any_instance.stubs(:exists?).returns(false)
108
+
109
+ Puppet::Network::RestAuthConfig.any_instance.expects(:insert_default_acl)
110
+
111
+ Puppet::Network::RestAuthConfig.main
112
+ end
113
+
114
+ describe "when adding default ACLs" do
115
+
116
+ DEFAULT_ACL.each do |acl|
117
+ it "should create a default right for #{acl[:acl]}" do
118
+ @authconfig.stubs(:mk_acl)
119
+ @authconfig.expects(:mk_acl).with(acl)
120
+ @authconfig.insert_default_acl
121
+ end
122
+ end
123
+
124
+ it "should log at info loglevel" do
125
+ Puppet.expects(:info).at_least_once
126
+ @authconfig.insert_default_acl
127
+ end
128
+
129
+ it "should create a last catch-all deny all rule" do
130
+ @authconfig.stubs(:mk_acl)
131
+ @acl.expects(:newright).with("/")
132
+ @authconfig.insert_default_acl
133
+ end
134
+
135
+ it "should create a last catch-all deny all rule for any authenticated request state" do
136
+ @authconfig.stubs(:mk_acl)
137
+ @acl.stubs(:newright).with("/")
138
+
139
+ @acl.expects(:restrict_authenticated).with("/", :any)
140
+
141
+ @authconfig.insert_default_acl
142
+ end
143
+
144
+ end
145
+
146
+ end
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+
5
+ require 'puppet/network/rest_authorization'
6
+
7
+ class RestAuthorized
8
+ include Puppet::Network::RestAuthorization
9
+ end
10
+
11
+
12
+ describe Puppet::Network::RestAuthorization do
13
+ before :each do
14
+ @auth = RestAuthorized.new
15
+ @authconig = stub 'authconfig'
16
+ @auth.stubs(:authconfig).returns(@authconfig)
17
+
18
+ @request = stub_everything 'request'
19
+ @request.stubs(:method).returns(:find)
20
+ @request.stubs(:node).returns("node")
21
+ @request.stubs(:ip).returns("ip")
22
+ end
23
+
24
+ describe "when testing request authorization" do
25
+ it "should delegate to the current rest authconfig" do
26
+ @authconfig.expects(:allowed?).with(@request).returns(true)
27
+
28
+ @auth.check_authorization(@request)
29
+ end
30
+
31
+ it "should raise an AuthorizationError if authconfig raises an AuthorizationError" do
32
+ @authconfig.expects(:allowed?).with(@request).raises(Puppet::Network::AuthorizationError.new("forbidden"))
33
+
34
+ lambda { @auth.check_authorization(@request) }.should raise_error(Puppet::Network::AuthorizationError)
35
+ end
36
+
37
+ it "should not raise an AuthorizationError if request is allowed" do
38
+ @authconfig.expects(:allowed?).with(@request).returns(true)
39
+
40
+ lambda { @auth.check_authorization(@request) }.should_not raise_error(Puppet::Network::AuthorizationError)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,519 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+
5
+ require 'puppet/network/rights'
6
+
7
+ describe Puppet::Network::Rights do
8
+ before do
9
+ @right = Puppet::Network::Rights.new
10
+ end
11
+
12
+ [:allow, :deny, :restrict_method, :restrict_environment, :restrict_authenticated].each do |m|
13
+ it "should have a #{m} method" do
14
+ @right.should respond_to(m)
15
+ end
16
+
17
+ describe "when using #{m}" do
18
+ it "should delegate to the correct acl" do
19
+ acl = stub 'acl'
20
+ @right.stubs(:[]).returns(acl)
21
+
22
+ acl.expects(m).with("me")
23
+
24
+ @right.send(m, 'thisacl', "me")
25
+ end
26
+ end
27
+ end
28
+
29
+ it "should throw an error if type can't be determined" do
30
+ lambda { @right.newright("name") }.should raise_error
31
+ end
32
+
33
+ describe "when creating new namespace ACLs" do
34
+
35
+ it "should throw an error if the ACL already exists" do
36
+ @right.newright("[name]")
37
+
38
+ lambda { @right.newright("[name]") }.should raise_error
39
+ end
40
+
41
+ it "should create a new ACL with the correct name" do
42
+ @right.newright("[name]")
43
+
44
+ @right["name"].key.should == :name
45
+ end
46
+
47
+ it "should create an ACL of type Puppet::Network::AuthStore" do
48
+ @right.newright("[name]")
49
+
50
+ @right["name"].should be_a_kind_of(Puppet::Network::AuthStore)
51
+ end
52
+ end
53
+
54
+ describe "when creating new path ACLs" do
55
+ it "should not throw an error if the ACL already exists" do
56
+ @right.newright("/name")
57
+
58
+ lambda { @right.newright("/name")}.should_not raise_error
59
+ end
60
+
61
+ it "should throw an error if the acl uri path is not absolute" do
62
+ lambda { @right.newright("name")}.should raise_error
63
+ end
64
+
65
+ it "should create a new ACL with the correct path" do
66
+ @right.newright("/name")
67
+
68
+ @right["/name"].should_not be_nil
69
+ end
70
+
71
+ it "should create an ACL of type Puppet::Network::AuthStore" do
72
+ @right.newright("/name")
73
+
74
+ @right["/name"].should be_a_kind_of(Puppet::Network::AuthStore)
75
+ end
76
+ end
77
+
78
+ describe "when creating new regex ACLs" do
79
+ it "should not throw an error if the ACL already exists" do
80
+ @right.newright("~ .rb$")
81
+
82
+ lambda { @right.newright("~ .rb$")}.should_not raise_error
83
+ end
84
+
85
+ it "should create a new ACL with the correct regex" do
86
+ @right.newright("~ .rb$")
87
+
88
+ @right.include?(".rb$").should_not be_nil
89
+ end
90
+
91
+ it "should be able to lookup the regex" do
92
+ @right.newright("~ .rb$")
93
+
94
+ @right[".rb$"].should_not be_nil
95
+ end
96
+
97
+ it "should be able to lookup the regex by its full name" do
98
+ @right.newright("~ .rb$")
99
+
100
+ @right["~ .rb$"].should_not be_nil
101
+ end
102
+
103
+ it "should create an ACL of type Puppet::Network::AuthStore" do
104
+ @right.newright("~ .rb$").should be_a_kind_of(Puppet::Network::AuthStore)
105
+ end
106
+ end
107
+
108
+ describe "when checking ACLs existence" do
109
+ it "should return false if there are no matching rights" do
110
+ @right.include?("name").should be_false
111
+ end
112
+
113
+ it "should return true if a namespace rights exist" do
114
+ @right.newright("[name]")
115
+
116
+ @right.include?("name").should be_true
117
+ end
118
+
119
+ it "should return false if no matching namespace rights exist" do
120
+ @right.newright("[name]")
121
+
122
+ @right.include?("notname").should be_false
123
+ end
124
+
125
+ it "should return true if a path right exists" do
126
+ @right.newright("/name")
127
+
128
+ @right.include?("/name").should be_true
129
+ end
130
+
131
+ it "should return false if no matching path rights exist" do
132
+ @right.newright("/name")
133
+
134
+ @right.include?("/differentname").should be_false
135
+ end
136
+
137
+ it "should return true if a regex right exists" do
138
+ @right.newright("~ .rb$")
139
+
140
+ @right.include?(".rb$").should be_true
141
+ end
142
+
143
+ it "should return false if no matching path rights exist" do
144
+ @right.newright("~ .rb$")
145
+
146
+ @right.include?(".pp$").should be_false
147
+ end
148
+ end
149
+
150
+ describe "when checking if right is allowed" do
151
+ before :each do
152
+ @right.stubs(:right).returns(nil)
153
+
154
+ @pathacl = stub 'pathacl', :acl_type => :regex, :"<=>" => 1, :line => 0, :file => 'dummy'
155
+ Puppet::Network::Rights::Right.stubs(:new).returns(@pathacl)
156
+ end
157
+
158
+ it "should delegate to fail_on_deny" do
159
+ @right.expects(:fail_on_deny).with("namespace", :node => "host.domain.com", :ip => "127.0.0.1")
160
+
161
+ @right.allowed?("namespace", "host.domain.com", "127.0.0.1")
162
+ end
163
+
164
+ it "should return true if fail_on_deny doesn't fail" do
165
+ @right.stubs(:fail_on_deny)
166
+ @right.allowed?("namespace", :args).should be_true
167
+ end
168
+
169
+ it "should return false if fail_on_deny raises an AuthorizationError" do
170
+ @right.stubs(:fail_on_deny).raises(Puppet::Network::AuthorizationError.new("forbidden"))
171
+ @right.allowed?("namespace", :args1, :args2).should be_false
172
+ end
173
+
174
+ it "should first check namespace rights" do
175
+ acl = stub 'acl', :acl_type => :name, :key => :namespace
176
+ Puppet::Network::Rights::Right.stubs(:new).returns(acl)
177
+
178
+ @right.newright("[namespace]")
179
+ acl.expects(:match?).returns(true)
180
+ acl.expects(:allowed?).with { |node,ip,h| node == "node" and ip == "ip" }.returns(true)
181
+
182
+ @right.fail_on_deny("namespace", { :node => "node", :ip => "ip" } )
183
+ end
184
+
185
+ it "should then check for path rights if no namespace match" do
186
+ acl = stub 'nmacl', :acl_type => :name, :key => :namespace, :"<=>" => -1, :line => 0, :file => 'dummy'
187
+ acl.stubs(:match?).returns(false)
188
+ Puppet::Network::Rights::Right.stubs(:new).with("[namespace]").returns(acl)
189
+
190
+ @right.newright("[namespace]")
191
+ @right.newright("/path/to/there", 0, nil)
192
+
193
+ @pathacl.stubs(:match?).returns(true)
194
+
195
+ acl.expects(:allowed?).never
196
+ @pathacl.expects(:allowed?).returns(true)
197
+
198
+ @right.fail_on_deny("/path/to/there", {})
199
+ end
200
+
201
+ it "should pass the match? return to allowed?" do
202
+ @right.newright("/path/to/there")
203
+
204
+ @pathacl.expects(:match?).returns(:match)
205
+ @pathacl.expects(:allowed?).with { |node,ip,h| h[:match] == :match }.returns(true)
206
+
207
+ @right.fail_on_deny("/path/to/there", {})
208
+ end
209
+
210
+ describe "with namespace acls" do
211
+ it "should raise an error if this namespace right doesn't exist" do
212
+ lambda{ @right.fail_on_deny("namespace") }.should raise_error
213
+ end
214
+ end
215
+
216
+ describe "with path acls" do
217
+ before :each do
218
+ @long_acl = stub 'longpathacl', :name => "/path/to/there", :acl_type => :regex, :line => 0, :file => 'dummy'
219
+ Puppet::Network::Rights::Right.stubs(:new).with("/path/to/there", 0, nil).returns(@long_acl)
220
+
221
+ @short_acl = stub 'shortpathacl', :name => "/path/to", :acl_type => :regex, :line => 0, :file => 'dummy'
222
+ Puppet::Network::Rights::Right.stubs(:new).with("/path/to", 0, nil).returns(@short_acl)
223
+
224
+ @long_acl.stubs(:"<=>").with(@short_acl).returns(0)
225
+ @short_acl.stubs(:"<=>").with(@long_acl).returns(0)
226
+ end
227
+
228
+ it "should select the first match" do
229
+ @right.newright("/path/to/there", 0)
230
+ @right.newright("/path/to", 0)
231
+
232
+ @long_acl.stubs(:match?).returns(true)
233
+ @short_acl.stubs(:match?).returns(true)
234
+
235
+ @long_acl.expects(:allowed?).returns(true)
236
+ @short_acl.expects(:allowed?).never
237
+
238
+ @right.fail_on_deny("/path/to/there/and/there", {})
239
+ end
240
+
241
+ it "should select the first match that doesn't return :dunno" do
242
+ @right.newright("/path/to/there", 0, nil)
243
+ @right.newright("/path/to", 0, nil)
244
+
245
+ @long_acl.stubs(:match?).returns(true)
246
+ @short_acl.stubs(:match?).returns(true)
247
+
248
+ @long_acl.expects(:allowed?).returns(:dunno)
249
+ @short_acl.expects(:allowed?).returns(true)
250
+
251
+ @right.fail_on_deny("/path/to/there/and/there", {})
252
+ end
253
+
254
+ it "should not select an ACL that doesn't match" do
255
+ @right.newright("/path/to/there", 0)
256
+ @right.newright("/path/to", 0)
257
+
258
+ @long_acl.stubs(:match?).returns(false)
259
+ @short_acl.stubs(:match?).returns(true)
260
+
261
+ @long_acl.expects(:allowed?).never
262
+ @short_acl.expects(:allowed?).returns(true)
263
+
264
+ @right.fail_on_deny("/path/to/there/and/there", {})
265
+ end
266
+
267
+ it "should not raise an AuthorizationError if allowed" do
268
+ @right.newright("/path/to/there", 0)
269
+
270
+ @long_acl.stubs(:match?).returns(true)
271
+ @long_acl.stubs(:allowed?).returns(true)
272
+
273
+ lambda { @right.fail_on_deny("/path/to/there/and/there", {}) }.should_not raise_error(Puppet::Network::AuthorizationError)
274
+ end
275
+
276
+ it "should raise an AuthorizationError if the match is denied" do
277
+ @right.newright("/path/to/there", 0, nil)
278
+
279
+ @long_acl.stubs(:match?).returns(true)
280
+ @long_acl.stubs(:allowed?).returns(false)
281
+
282
+ lambda{ @right.fail_on_deny("/path/to/there", {}) }.should raise_error(Puppet::Network::AuthorizationError)
283
+ end
284
+
285
+ it "should raise an AuthorizationError if no path match" do
286
+ lambda { @right.fail_on_deny("/nomatch", {}) }.should raise_error(Puppet::Network::AuthorizationError)
287
+ end
288
+ end
289
+
290
+ describe "with regex acls" do
291
+ before :each do
292
+ @regex_acl1 = stub 'regex_acl1', :name => "/files/(.*)/myfile", :acl_type => :regex, :line => 0, :file => 'dummy'
293
+ Puppet::Network::Rights::Right.stubs(:new).with("~ /files/(.*)/myfile", 0, nil).returns(@regex_acl1)
294
+
295
+ @regex_acl2 = stub 'regex_acl2', :name => "/files/(.*)/myfile/", :acl_type => :regex, :line => 0, :file => 'dummy'
296
+ Puppet::Network::Rights::Right.stubs(:new).with("~ /files/(.*)/myfile/", 0, nil).returns(@regex_acl2)
297
+
298
+ @regex_acl1.stubs(:"<=>").with(@regex_acl2).returns(0)
299
+ @regex_acl2.stubs(:"<=>").with(@regex_acl1).returns(0)
300
+ end
301
+
302
+ it "should select the first match" do
303
+ @right.newright("~ /files/(.*)/myfile", 0)
304
+ @right.newright("~ /files/(.*)/myfile/", 0)
305
+
306
+ @regex_acl1.stubs(:match?).returns(true)
307
+ @regex_acl2.stubs(:match?).returns(true)
308
+
309
+ @regex_acl1.expects(:allowed?).returns(true)
310
+ @regex_acl2.expects(:allowed?).never
311
+
312
+ @right.fail_on_deny("/files/repository/myfile/other", {})
313
+ end
314
+
315
+ it "should select the first match that doesn't return :dunno" do
316
+ @right.newright("~ /files/(.*)/myfile", 0)
317
+ @right.newright("~ /files/(.*)/myfile/", 0)
318
+
319
+ @regex_acl1.stubs(:match?).returns(true)
320
+ @regex_acl2.stubs(:match?).returns(true)
321
+
322
+ @regex_acl1.expects(:allowed?).returns(:dunno)
323
+ @regex_acl2.expects(:allowed?).returns(true)
324
+
325
+ @right.fail_on_deny("/files/repository/myfile/other", {})
326
+ end
327
+
328
+ it "should not select an ACL that doesn't match" do
329
+ @right.newright("~ /files/(.*)/myfile", 0)
330
+ @right.newright("~ /files/(.*)/myfile/", 0)
331
+
332
+ @regex_acl1.stubs(:match?).returns(false)
333
+ @regex_acl2.stubs(:match?).returns(true)
334
+
335
+ @regex_acl1.expects(:allowed?).never
336
+ @regex_acl2.expects(:allowed?).returns(true)
337
+
338
+ @right.fail_on_deny("/files/repository/myfile/other", {})
339
+ end
340
+
341
+ it "should not raise an AuthorizationError if allowed" do
342
+ @right.newright("~ /files/(.*)/myfile", 0)
343
+
344
+ @regex_acl1.stubs(:match?).returns(true)
345
+ @regex_acl1.stubs(:allowed?).returns(true)
346
+
347
+ lambda { @right.fail_on_deny("/files/repository/myfile/other", {}) }.should_not raise_error(Puppet::Network::AuthorizationError)
348
+ end
349
+
350
+ it "should raise an error if no regex acl match" do
351
+ lambda{ @right.fail_on_deny("/path", {}) }.should raise_error(Puppet::Network::AuthorizationError)
352
+ end
353
+
354
+ it "should raise an AuthorizedError on deny" do
355
+ lambda { @right.fail_on_deny("/path", {}) }.should raise_error(Puppet::Network::AuthorizationError)
356
+ end
357
+
358
+ end
359
+ end
360
+
361
+ describe Puppet::Network::Rights::Right do
362
+ before :each do
363
+ @acl = Puppet::Network::Rights::Right.new("/path",0, nil)
364
+ end
365
+
366
+ describe "with path" do
367
+ it "should say it's a regex ACL" do
368
+ @acl.acl_type.should == :regex
369
+ end
370
+
371
+ it "should match up to its path length" do
372
+ @acl.match?("/path/that/works").should_not be_nil
373
+ end
374
+
375
+ it "should match up to its path length" do
376
+ @acl.match?("/paththatalsoworks").should_not be_nil
377
+ end
378
+
379
+ it "should return nil if no match" do
380
+ @acl.match?("/notpath").should be_nil
381
+ end
382
+ end
383
+
384
+ describe "with regex" do
385
+ before :each do
386
+ @acl = Puppet::Network::Rights::Right.new("~ .rb$",0, nil)
387
+ end
388
+
389
+ it "should say it's a regex ACL" do
390
+ @acl.acl_type.should == :regex
391
+ end
392
+
393
+ it "should match as a regex" do
394
+ @acl.match?("this shoud work.rb").should_not be_nil
395
+ end
396
+
397
+ it "should return nil if no match" do
398
+ @acl.match?("do not match").should be_nil
399
+ end
400
+ end
401
+
402
+ it "should allow all rest methods by default" do
403
+ @acl.methods.should == Puppet::Network::Rights::Right::ALL
404
+ end
405
+
406
+ it "should allow only authenticated request by default" do
407
+ @acl.authentication.should be_true
408
+ end
409
+
410
+ it "should allow modification of the methods filters" do
411
+ @acl.restrict_method(:save)
412
+
413
+ @acl.methods.should == [:save]
414
+ end
415
+
416
+ it "should stack methods filters" do
417
+ @acl.restrict_method(:save)
418
+ @acl.restrict_method(:destroy)
419
+
420
+ @acl.methods.should == [:save, :destroy]
421
+ end
422
+
423
+ it "should raise an error if the method is already filtered" do
424
+ @acl.restrict_method(:save)
425
+
426
+ lambda { @acl.restrict_method(:save) }.should raise_error
427
+ end
428
+
429
+ it "should allow setting an environment filters" do
430
+ Puppet::Node::Environment.stubs(:new).with(:environment).returns(:env)
431
+
432
+ @acl.restrict_environment(:environment)
433
+
434
+ @acl.environment.should == [:env]
435
+ end
436
+
437
+ ["on", "yes", "true", true].each do |auth|
438
+ it "should allow filtering on authenticated requests with '#{auth}'" do
439
+ @acl.restrict_authenticated(auth)
440
+
441
+ @acl.authentication.should be_true
442
+ end
443
+ end
444
+
445
+ ["off", "no", "false", false].each do |auth|
446
+ it "should allow filtering on unauthenticated requests with '#{auth}'" do
447
+ @acl.restrict_authenticated(auth)
448
+
449
+ @acl.authentication.should be_false
450
+ end
451
+ end
452
+
453
+ ["all", "any", :all, :any].each do |auth|
454
+ it "should not use request authenticated state filtering with '#{auth}'" do
455
+ @acl.restrict_authenticated(auth)
456
+
457
+ @acl.authentication.should be_nil
458
+ end
459
+ end
460
+
461
+ describe "when checking right authorization" do
462
+ it "should return :dunno if this right is not restricted to the given method" do
463
+ @acl.restrict_method(:destroy)
464
+
465
+ @acl.allowed?("me","127.0.0.1", { :method => :save } ).should == :dunno
466
+ end
467
+
468
+ it "should return allow/deny if this right is restricted to the given method" do
469
+ @acl.restrict_method(:save)
470
+ @acl.allow("127.0.0.1")
471
+
472
+ @acl.allowed?("me","127.0.0.1", { :method => :save }).should be_true
473
+ end
474
+
475
+ it "should return :dunno if this right is not restricted to the given environment" do
476
+ Puppet::Node::Environment.stubs(:new).returns(:production)
477
+
478
+ @acl.restrict_environment(:production)
479
+
480
+ @acl.allowed?("me","127.0.0.1", { :method => :save, :environment => :development }).should == :dunno
481
+ end
482
+
483
+ it "should return :dunno if this right is not restricted to the given request authentication state" do
484
+ @acl.restrict_authenticated(true)
485
+
486
+ @acl.allowed?("me","127.0.0.1", { :method => :save, :authenticated => false }).should == :dunno
487
+ end
488
+
489
+ it "should return allow/deny if this right is restricted to the given request authentication state" do
490
+ @acl.restrict_authenticated(false)
491
+ @acl.allow("127.0.0.1")
492
+
493
+ @acl.allowed?("me","127.0.0.1", { :authenticated => false }).should be_true
494
+ end
495
+
496
+ it "should interpolate allow/deny patterns with the given match" do
497
+ @acl.expects(:interpolate).with(:match)
498
+
499
+ @acl.allowed?("me","127.0.0.1", { :method => :save, :match => :match, :authenticated => true })
500
+ end
501
+
502
+ it "should reset interpolation after the match" do
503
+ @acl.expects(:reset_interpolation)
504
+
505
+ @acl.allowed?("me","127.0.0.1", { :method => :save, :match => :match, :authenticated => true })
506
+ end
507
+
508
+ # mocha doesn't allow testing super...
509
+ # it "should delegate to the AuthStore for the result" do
510
+ # @acl.method(:save)
511
+ #
512
+ # @acl.expects(:allowed?).with("me","127.0.0.1")
513
+ #
514
+ # @acl.allowed?("me","127.0.0.1", :save)
515
+ # end
516
+ end
517
+ end
518
+
519
+ end