puppet 3.3.2 → 3.4.0.rc1

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 (589) hide show
  1. data/CONTRIBUTING.md +22 -0
  2. data/Gemfile +11 -2
  3. data/README.md +13 -17
  4. data/README_DEVELOPER.md +1 -1
  5. data/Rakefile +1 -1
  6. data/examples/hiera/README.md +4 -4
  7. data/ext/debian/puppetmaster.init +1 -0
  8. data/ext/debian/rules +2 -5
  9. data/ext/nagios/check_puppet.rb +7 -7
  10. data/ext/osx/file_mapping.yaml +1 -1
  11. data/ext/osx/preflight.erb +34 -19
  12. data/ext/rack/{files/config.ru → config.ru} +0 -0
  13. data/ext/rack/{files/apache2.conf → example-passenger-vhost.conf} +6 -0
  14. data/ext/redhat/puppet.spec.erb +20 -2
  15. data/ext/systemd/{puppetagent.service → puppet.service} +0 -0
  16. data/lib/hiera_puppet.rb +2 -2
  17. data/lib/puppet/agent.rb +1 -6
  18. data/lib/puppet/application.rb +15 -2
  19. data/lib/puppet/application/agent.rb +2 -7
  20. data/lib/puppet/application/apply.rb +8 -13
  21. data/lib/puppet/application/cert.rb +47 -7
  22. data/lib/puppet/application/device.rb +1 -6
  23. data/lib/puppet/application/face_base.rb +1 -1
  24. data/lib/puppet/application/filebucket.rb +1 -1
  25. data/lib/puppet/application/inspect.rb +3 -12
  26. data/lib/puppet/application/master.rb +1 -6
  27. data/lib/puppet/application/queue.rb +1 -6
  28. data/lib/puppet/application/resource.rb +2 -6
  29. data/lib/puppet/coercion.rb +11 -0
  30. data/lib/puppet/configurer.rb +5 -3
  31. data/lib/puppet/configurer/downloader.rb +3 -1
  32. data/lib/puppet/configurer/plugin_handler.rb +10 -0
  33. data/lib/puppet/confine.rb +80 -0
  34. data/lib/puppet/{provider/confine → confine}/exists.rb +3 -3
  35. data/lib/puppet/{provider/confine → confine}/false.rb +2 -2
  36. data/lib/puppet/{provider/confine → confine}/feature.rb +2 -2
  37. data/lib/puppet/{provider/confine → confine}/true.rb +2 -2
  38. data/lib/puppet/{provider/confine → confine}/variable.rb +2 -2
  39. data/lib/puppet/{provider/confine_collection.rb → confine_collection.rb} +4 -4
  40. data/lib/puppet/{provider/confiner.rb → confiner.rb} +4 -4
  41. data/lib/puppet/daemon.rb +2 -6
  42. data/lib/puppet/data_binding.rb +2 -30
  43. data/lib/puppet/defaults.rb +283 -174
  44. data/lib/puppet/error.rb +1 -0
  45. data/lib/puppet/external/nagios.rb +0 -2
  46. data/lib/puppet/external/nagios/base.rb +4 -3
  47. data/lib/puppet/external/nagios/grammar.ry +173 -112
  48. data/lib/puppet/external/nagios/parser.rb +233 -184
  49. data/lib/puppet/face/file/store.rb +1 -1
  50. data/lib/puppet/face/module/generate.rb +5 -7
  51. data/lib/puppet/face/parser.rb +12 -2
  52. data/lib/puppet/face/plugin.rb +6 -0
  53. data/lib/puppet/feature/base.rb +16 -0
  54. data/lib/puppet/feature/external_facts.rb +5 -0
  55. data/lib/puppet/feature/libuser.rb +1 -1
  56. data/lib/puppet/feature/msgpack.rb +1 -0
  57. data/lib/puppet/feature/rails.rb +2 -2
  58. data/lib/puppet/file_bucket/dipper.rb +8 -6
  59. data/lib/puppet/file_bucket/file.rb +17 -1
  60. data/lib/puppet/file_serving/base.rb +21 -10
  61. data/lib/puppet/file_serving/configuration.rb +5 -7
  62. data/lib/puppet/file_serving/configuration/parser.rb +1 -1
  63. data/lib/puppet/file_serving/content.rb +1 -1
  64. data/lib/puppet/file_serving/fileset.rb +3 -3
  65. data/lib/puppet/file_serving/metadata.rb +22 -18
  66. data/lib/puppet/file_serving/mount/file.rb +1 -1
  67. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  68. data/lib/puppet/file_system.rb +3 -0
  69. data/lib/puppet/file_system/file.rb +261 -0
  70. data/lib/puppet/file_system/file18.rb +5 -0
  71. data/lib/puppet/file_system/file19.rb +5 -0
  72. data/lib/puppet/file_system/file19windows.rb +113 -0
  73. data/lib/puppet/file_system/memory_file.rb +31 -0
  74. data/lib/puppet/file_system/tempfile.rb +20 -0
  75. data/lib/puppet/indirector/active_record.rb +1 -0
  76. data/lib/puppet/indirector/catalog/compiler.rb +28 -0
  77. data/lib/puppet/indirector/certificate_request/memory.rb +6 -0
  78. data/lib/puppet/indirector/data_binding/hiera.rb +46 -2
  79. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  80. data/lib/puppet/indirector/facts/facter.rb +25 -0
  81. data/lib/puppet/indirector/file_bucket_file/file.rb +60 -74
  82. data/lib/puppet/indirector/indirection.rb +5 -1
  83. data/lib/puppet/indirector/json.rb +1 -1
  84. data/lib/puppet/indirector/key/ca.rb +4 -0
  85. data/lib/puppet/indirector/key/file.rb +7 -3
  86. data/lib/puppet/indirector/key/memory.rb +6 -0
  87. data/lib/puppet/indirector/node/write_only_yaml.rb +2 -2
  88. data/lib/puppet/indirector/request.rb +17 -11
  89. data/lib/puppet/indirector/resource/ral.rb +5 -0
  90. data/lib/puppet/indirector/resource/rest.rb +1 -0
  91. data/lib/puppet/indirector/resource/store_configs.rb +4 -0
  92. data/lib/puppet/indirector/rest.rb +2 -1
  93. data/lib/puppet/indirector/ssl_file.rb +7 -7
  94. data/lib/puppet/indirector/terminus.rb +4 -0
  95. data/lib/puppet/indirector/yaml.rb +3 -3
  96. data/lib/puppet/interface/documentation.rb +4 -11
  97. data/lib/puppet/module.rb +19 -6
  98. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  99. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  100. data/lib/puppet/module_tool/checksums.rb +1 -1
  101. data/lib/puppet/module_tool/dependency.rb +7 -3
  102. data/lib/puppet/module_tool/metadata.rb +6 -2
  103. data/lib/puppet/module_tool/tar.rb +2 -1
  104. data/lib/puppet/module_tool/tar/gnu.rb +6 -2
  105. data/lib/puppet/module_tool/tar/mini.rb +2 -0
  106. data/lib/puppet/module_tool/tar/solaris.rb +2 -5
  107. data/lib/puppet/network/authconfig.rb +0 -2
  108. data/lib/puppet/network/authentication.rb +1 -1
  109. data/lib/puppet/network/authstore.rb +6 -7
  110. data/lib/puppet/network/format.rb +2 -3
  111. data/lib/puppet/network/format_handler.rb +16 -11
  112. data/lib/puppet/network/format_support.rb +14 -0
  113. data/lib/puppet/network/formats.rb +26 -0
  114. data/lib/puppet/network/http/connection.rb +8 -41
  115. data/lib/puppet/network/http/handler.rb +28 -32
  116. data/lib/puppet/network/http/webrick.rb +15 -22
  117. data/lib/puppet/network/http_pool.rb +43 -9
  118. data/lib/puppet/network/rights.rb +0 -0
  119. data/lib/puppet/node.rb +24 -8
  120. data/lib/puppet/node/environment.rb +18 -20
  121. data/lib/puppet/node/facts.rb +23 -6
  122. data/lib/puppet/parameter.rb +15 -2
  123. data/lib/puppet/parameter/boolean.rb +5 -0
  124. data/lib/puppet/parameter/value_collection.rb +6 -4
  125. data/lib/puppet/parser/ast/resourceparam.rb +2 -1
  126. data/lib/puppet/parser/compiler.rb +25 -9
  127. data/lib/puppet/parser/files.rb +1 -1
  128. data/lib/puppet/parser/functions.rb +12 -21
  129. data/lib/puppet/parser/functions/collect.rb +6 -35
  130. data/lib/puppet/parser/functions/contain.rb +26 -0
  131. data/lib/puppet/parser/functions/create_resources.rb +5 -0
  132. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  133. data/lib/puppet/parser/functions/file.rb +1 -1
  134. data/lib/puppet/parser/functions/{reject.rb → filter.rb} +13 -12
  135. data/lib/puppet/parser/functions/fqdn_rand.rb +13 -5
  136. data/lib/puppet/parser/functions/include.rb +18 -1
  137. data/lib/puppet/parser/functions/map.rb +44 -0
  138. data/lib/puppet/parser/functions/select.rb +6 -38
  139. data/lib/puppet/parser/lexer.rb +1 -1
  140. data/lib/puppet/parser/parser_support.rb +1 -1
  141. data/lib/puppet/parser/resource.rb +6 -45
  142. data/lib/puppet/parser/scope.rb +33 -2
  143. data/lib/puppet/parser/type_loader.rb +4 -60
  144. data/lib/puppet/pops/binder/bindings_loader.rb +1 -1
  145. data/lib/puppet/pops/binder/config/binder_config.rb +3 -3
  146. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +1 -1
  148. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +2 -2
  149. data/lib/puppet/pops/issues.rb +4 -0
  150. data/lib/puppet/pops/model/ast_transformer.rb +4 -1
  151. data/lib/puppet/pops/model/model_label_provider.rb +1 -1
  152. data/lib/puppet/pops/parser/egrammar.ra +5 -24
  153. data/lib/puppet/pops/parser/eparser.rb +859 -902
  154. data/lib/puppet/pops/parser/lexer.rb +48 -30
  155. data/lib/puppet/pops/parser/parser_support.rb +1 -1
  156. data/lib/puppet/pops/patterns.rb +4 -4
  157. data/lib/puppet/pops/utils.rb +1 -1
  158. data/lib/puppet/pops/validation/checker3_1.rb +25 -20
  159. data/lib/puppet/provider.rb +23 -6
  160. data/lib/puppet/provider/aixobject.rb +0 -0
  161. data/lib/puppet/provider/augeas/augeas.rb +21 -5
  162. data/lib/puppet/provider/confine.rb +5 -79
  163. data/lib/puppet/provider/cron/crontab.rb +0 -0
  164. data/lib/puppet/provider/exec.rb +9 -7
  165. data/lib/puppet/provider/exec/posix.rb +10 -1
  166. data/lib/puppet/provider/exec/windows.rb +1 -1
  167. data/lib/puppet/provider/file/posix.rb +1 -0
  168. data/lib/puppet/provider/file/windows.rb +16 -5
  169. data/lib/puppet/provider/group/aix.rb +0 -0
  170. data/lib/puppet/provider/group/windows_adsi.rb +33 -1
  171. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  172. data/lib/puppet/provider/mailalias/aliases.rb +0 -0
  173. data/lib/puppet/provider/maillist/mailman.rb +0 -0
  174. data/lib/puppet/provider/mount/parsed.rb +0 -0
  175. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  176. data/lib/puppet/provider/package/appdmg.rb +1 -1
  177. data/lib/puppet/provider/package/apple.rb +1 -1
  178. data/lib/puppet/provider/package/apt.rb +1 -1
  179. data/lib/puppet/provider/package/aptitude.rb +0 -0
  180. data/lib/puppet/provider/package/blastwave.rb +1 -1
  181. data/lib/puppet/provider/package/dpkg.rb +1 -1
  182. data/lib/puppet/provider/package/fink.rb +1 -1
  183. data/lib/puppet/provider/package/freebsd.rb +0 -0
  184. data/lib/puppet/provider/package/gem.rb +0 -0
  185. data/lib/puppet/provider/package/macports.rb +0 -0
  186. data/lib/puppet/provider/package/msi.rb +4 -10
  187. data/lib/puppet/provider/package/nim.rb +8 -8
  188. data/lib/puppet/provider/package/openbsd.rb +1 -1
  189. data/lib/puppet/provider/package/opkg.rb +0 -0
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  192. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  193. data/lib/puppet/provider/package/ports.rb +0 -0
  194. data/lib/puppet/provider/package/rpm.rb +39 -3
  195. data/lib/puppet/provider/package/sun.rb +3 -3
  196. data/lib/puppet/provider/package/sunfreeware.rb +0 -0
  197. data/lib/puppet/provider/package/windows.rb +12 -19
  198. data/lib/puppet/provider/package/windows/package.rb +1 -1
  199. data/lib/puppet/provider/package/yum.rb +2 -2
  200. data/lib/puppet/provider/parsedfile.rb +0 -0
  201. data/lib/puppet/provider/port/parsed.rb +0 -0
  202. data/lib/puppet/provider/service/base.rb +0 -0
  203. data/lib/puppet/provider/service/bsd.rb +3 -3
  204. data/lib/puppet/provider/service/daemontools.rb +8 -8
  205. data/lib/puppet/provider/service/debian.rb +0 -0
  206. data/lib/puppet/provider/service/freebsd.rb +3 -3
  207. data/lib/puppet/provider/service/init.rb +5 -4
  208. data/lib/puppet/provider/service/launchd.rb +35 -24
  209. data/lib/puppet/provider/service/openbsd.rb +23 -0
  210. data/lib/puppet/provider/service/redhat.rb +0 -0
  211. data/lib/puppet/provider/service/runit.rb +3 -3
  212. data/lib/puppet/provider/service/smf.rb +0 -0
  213. data/lib/puppet/provider/service/src.rb +0 -0
  214. data/lib/puppet/provider/service/systemd.rb +0 -0
  215. data/lib/puppet/provider/service/upstart.rb +3 -3
  216. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  217. data/lib/puppet/provider/sshkey/parsed.rb +0 -0
  218. data/lib/puppet/provider/user/aix.rb +0 -0
  219. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  220. data/lib/puppet/provider/user/useradd.rb +1 -1
  221. data/lib/puppet/provider/zone/solaris.rb +1 -1
  222. data/lib/puppet/rails/benchmark.rb +1 -1
  223. data/lib/puppet/reference/configuration.rb +1 -2
  224. data/lib/puppet/reference/indirection.rb +12 -14
  225. data/lib/puppet/relationship.rb +7 -4
  226. data/lib/puppet/reports.rb +2 -2
  227. data/lib/puppet/reports/rrdgraph.rb +1 -1
  228. data/lib/puppet/reports/store.rb +3 -3
  229. data/lib/puppet/reports/tagmail.rb +2 -2
  230. data/lib/puppet/resource.rb +66 -8
  231. data/lib/puppet/resource/catalog.rb +18 -25
  232. data/lib/puppet/resource/status.rb +10 -4
  233. data/lib/puppet/run.rb +6 -2
  234. data/lib/puppet/settings.rb +39 -119
  235. data/lib/puppet/settings/base_setting.rb +8 -9
  236. data/lib/puppet/settings/directory_setting.rb +8 -0
  237. data/lib/puppet/settings/file_setting.rb +35 -1
  238. data/lib/puppet/settings/priority_setting.rb +42 -0
  239. data/lib/puppet/ssl.rb +4 -0
  240. data/lib/puppet/ssl/certificate.rb +18 -0
  241. data/lib/puppet/ssl/certificate_authority.rb +101 -72
  242. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +44 -0
  243. data/lib/puppet/ssl/certificate_authority/interface.rb +21 -17
  244. data/lib/puppet/ssl/certificate_factory.rb +38 -12
  245. data/lib/puppet/ssl/certificate_request.rb +201 -47
  246. data/lib/puppet/ssl/certificate_request_attributes.rb +34 -0
  247. data/lib/puppet/ssl/certificate_revocation_list.rb +2 -2
  248. data/lib/puppet/ssl/host.rb +21 -10
  249. data/lib/puppet/ssl/inventory.rb +6 -10
  250. data/lib/puppet/ssl/key.rb +1 -1
  251. data/lib/puppet/ssl/oids.rb +78 -0
  252. data/lib/puppet/ssl/validator.rb +41 -97
  253. data/lib/puppet/ssl/validator/default_validator.rb +153 -0
  254. data/lib/puppet/ssl/validator/no_validator.rb +17 -0
  255. data/lib/puppet/status.rb +4 -0
  256. data/lib/puppet/test/test_helper.rb +5 -0
  257. data/lib/puppet/transaction.rb +13 -0
  258. data/lib/puppet/transaction/event.rb +8 -3
  259. data/lib/puppet/transaction/report.rb +6 -2
  260. data/lib/puppet/transaction/resource_harness.rb +173 -115
  261. data/lib/puppet/type.rb +30 -13
  262. data/lib/puppet/type/augeas.rb +12 -46
  263. data/lib/puppet/type/component.rb +1 -7
  264. data/lib/puppet/type/cron.rb +0 -0
  265. data/lib/puppet/type/exec.rb +13 -1
  266. data/lib/puppet/type/file.rb +19 -10
  267. data/lib/puppet/type/file/checksum.rb +0 -0
  268. data/lib/puppet/type/file/content.rb +3 -0
  269. data/lib/puppet/type/file/ensure.rb +33 -15
  270. data/lib/puppet/type/file/group.rb +0 -0
  271. data/lib/puppet/type/file/mode.rb +6 -2
  272. data/lib/puppet/type/file/owner.rb +0 -0
  273. data/lib/puppet/type/file/source.rb +65 -14
  274. data/lib/puppet/type/file/target.rb +6 -6
  275. data/lib/puppet/type/file/type.rb +0 -0
  276. data/lib/puppet/type/filebucket.rb +0 -0
  277. data/lib/puppet/type/group.rb +18 -0
  278. data/lib/puppet/type/host.rb +0 -0
  279. data/lib/puppet/type/k5login.rb +4 -4
  280. data/lib/puppet/type/mailalias.rb +0 -0
  281. data/lib/puppet/type/maillist.rb +0 -0
  282. data/lib/puppet/type/mount.rb +15 -1
  283. data/lib/puppet/type/package.rb +7 -1
  284. data/lib/puppet/type/port.rb +0 -0
  285. data/lib/puppet/type/schedule.rb +9 -4
  286. data/lib/puppet/type/service.rb +1 -1
  287. data/lib/puppet/type/sshkey.rb +0 -0
  288. data/lib/puppet/type/tidy.rb +1 -1
  289. data/lib/puppet/type/user.rb +3 -0
  290. data/lib/puppet/type/yumrepo.rb +8 -6
  291. data/lib/puppet/type/zpool.rb +0 -0
  292. data/lib/puppet/util.rb +4 -31
  293. data/lib/puppet/util/adsi.rb +73 -17
  294. data/lib/puppet/util/autoload.rb +3 -3
  295. data/lib/puppet/util/backups.rb +4 -4
  296. data/lib/puppet/util/cacher.rb +7 -13
  297. data/lib/puppet/util/checksums.rb +2 -2
  298. data/lib/puppet/util/classgen.rb +3 -1
  299. data/lib/puppet/util/colors.rb +1 -0
  300. data/lib/puppet/util/command_line.rb +5 -0
  301. data/lib/puppet/util/docs.rb +33 -27
  302. data/lib/puppet/util/execution.rb +42 -18
  303. data/lib/puppet/util/filetype.rb +3 -3
  304. data/lib/puppet/util/instance_loader.rb +2 -2
  305. data/lib/puppet/util/instrumentation.rb +23 -42
  306. data/lib/puppet/util/instrumentation/data.rb +11 -4
  307. data/lib/puppet/util/instrumentation/indirection_probe.rb +11 -4
  308. data/lib/puppet/util/instrumentation/instrumentable.rb +7 -14
  309. data/lib/puppet/util/instrumentation/listener.rb +15 -8
  310. data/lib/puppet/util/instrumentation/listeners/log.rb +4 -10
  311. data/lib/puppet/util/instrumentation/listeners/performance.rb +8 -14
  312. data/lib/puppet/util/limits.rb +12 -0
  313. data/lib/puppet/util/lockfile.rb +2 -2
  314. data/lib/puppet/util/log.rb +14 -6
  315. data/lib/puppet/util/log/destinations.rb +23 -1
  316. data/lib/puppet/util/metric.rb +9 -3
  317. data/lib/puppet/util/monkey_patches.rb +7 -2
  318. data/lib/puppet/util/network_device/config.rb +1 -1
  319. data/lib/puppet/util/plugins.rb +1 -1
  320. data/lib/puppet/util/posix.rb +0 -0
  321. data/lib/puppet/util/profiler.rb +7 -2
  322. data/lib/puppet/util/provider_features.rb +2 -2
  323. data/lib/puppet/util/rdoc.rb +28 -30
  324. data/lib/puppet/util/rdoc/code_objects.rb +75 -25
  325. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  326. data/lib/puppet/util/rdoc/parser.rb +12 -487
  327. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +477 -0
  328. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc1.rb +19 -0
  329. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  330. data/lib/puppet/util/reference.rb +1 -1
  331. data/lib/puppet/util/resource_template.rb +1 -1
  332. data/lib/puppet/util/selinux.rb +1 -1
  333. data/lib/puppet/util/storage.rb +2 -2
  334. data/lib/puppet/util/suidmanager.rb +1 -1
  335. data/lib/puppet/util/tag_set.rb +29 -0
  336. data/lib/puppet/util/tagging.rb +8 -24
  337. data/lib/puppet/util/watched_file.rb +1 -1
  338. data/lib/puppet/util/watcher.rb +1 -1
  339. data/lib/puppet/util/windows.rb +3 -0
  340. data/lib/puppet/util/windows/access_control_entry.rb +84 -0
  341. data/lib/puppet/util/windows/access_control_list.rb +106 -0
  342. data/lib/puppet/util/windows/file.rb +213 -0
  343. data/lib/puppet/util/windows/process.rb +199 -0
  344. data/lib/puppet/util/windows/root_certs.rb +52 -37
  345. data/lib/puppet/util/windows/security.rb +270 -245
  346. data/lib/puppet/util/windows/security_descriptor.rb +62 -0
  347. data/lib/puppet/util/windows/sid.rb +26 -4
  348. data/lib/puppet/version.rb +2 -2
  349. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
  350. data/spec/fixtures/unit/indirector/{hiera → data_binding/hiera}/global.yaml +0 -0
  351. data/spec/fixtures/unit/indirector/data_binding/hiera/invalid.yaml +1 -0
  352. data/spec/fixtures/unit/module/trailing-comma.json +24 -0
  353. data/spec/fixtures/unit/util/monkey_patches/x509.pem +32 -0
  354. data/spec/integration/application/apply_spec.rb +1 -1
  355. data/spec/integration/application/doc_spec.rb +1 -1
  356. data/spec/integration/configurer_spec.rb +4 -2
  357. data/spec/integration/data_binding.rb +100 -0
  358. data/spec/integration/indirector/catalog/compiler_spec.rb +16 -13
  359. data/spec/integration/indirector/direct_file_server_spec.rb +3 -5
  360. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  361. data/spec/integration/node/facts_spec.rb +1 -1
  362. data/spec/integration/node_spec.rb +1 -1
  363. data/spec/integration/parser/compiler_spec.rb +90 -0
  364. data/spec/integration/parser/parser_spec.rb +2 -2
  365. data/spec/integration/provider/cron/crontab_spec.rb +3 -5
  366. data/spec/integration/resource/catalog_spec.rb +1 -1
  367. data/spec/integration/ssl/autosign_spec.rb +90 -0
  368. data/spec/integration/ssl/certificate_authority_spec.rb +62 -69
  369. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  370. data/spec/integration/ssl/host_spec.rb +1 -1
  371. data/spec/integration/transaction_spec.rb +13 -13
  372. data/spec/integration/type/exec_spec.rb +2 -2
  373. data/spec/integration/type/file_spec.rb +287 -45
  374. data/spec/integration/type/tidy_spec.rb +3 -3
  375. data/spec/integration/util/rdoc/parser_spec.rb +236 -35
  376. data/spec/integration/util/settings_spec.rb +1 -1
  377. data/spec/integration/util/windows/process_spec.rb +22 -0
  378. data/spec/integration/util/windows/security_spec.rb +316 -106
  379. data/spec/lib/matchers/containment_matchers.rb +52 -0
  380. data/spec/lib/puppet_spec/compiler.rb +6 -0
  381. data/spec/lib/puppet_spec/files.rb +20 -21
  382. data/spec/shared_behaviours/documentation_on_faces.rb +3 -3
  383. data/spec/shared_behaviours/file_server_terminus.rb +2 -2
  384. data/spec/shared_contexts/platform.rb +1 -0
  385. data/spec/spec_helper.rb +13 -1
  386. data/spec/unit/agent_spec.rb +0 -12
  387. data/spec/unit/application/agent_spec.rb +4 -4
  388. data/spec/unit/application/apply_spec.rb +18 -2
  389. data/spec/unit/application/cert_spec.rb +8 -6
  390. data/spec/unit/application/device_spec.rb +1 -1
  391. data/spec/unit/application/filebucket_spec.rb +1 -1
  392. data/spec/unit/application/inspect_spec.rb +1 -1
  393. data/spec/unit/application_spec.rb +24 -0
  394. data/spec/unit/configurer/downloader_spec.rb +8 -7
  395. data/spec/unit/configurer/fact_handler_spec.rb +23 -0
  396. data/spec/unit/configurer/plugin_handler_spec.rb +7 -2
  397. data/spec/unit/configurer_spec.rb +15 -5
  398. data/spec/unit/{provider/confine → confine}/exists_spec.rb +12 -12
  399. data/spec/unit/{provider/confine → confine}/false_spec.rb +9 -9
  400. data/spec/unit/{provider/confine → confine}/feature_spec.rb +10 -10
  401. data/spec/unit/{provider/confine → confine}/true_spec.rb +7 -7
  402. data/spec/unit/{provider/confine → confine}/variable_spec.rb +16 -16
  403. data/spec/unit/{provider/confine_collection_spec.rb → confine_collection_spec.rb} +30 -30
  404. data/spec/unit/{provider/confine_spec.rb → confine_spec.rb} +11 -11
  405. data/spec/unit/{provider/confiner_spec.rb → confiner_spec.rb} +4 -4
  406. data/spec/unit/face/parser_spec.rb +54 -0
  407. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  408. data/spec/unit/file_serving/base_spec.rb +32 -9
  409. data/spec/unit/file_serving/configuration_spec.rb +7 -7
  410. data/spec/unit/file_serving/content_spec.rb +12 -7
  411. data/spec/unit/file_serving/fileset_spec.rb +57 -27
  412. data/spec/unit/file_serving/metadata_spec.rb +74 -12
  413. data/spec/unit/file_serving/mount/file_spec.rb +10 -10
  414. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +73 -0
  415. data/spec/unit/file_system/file_spec.rb +486 -0
  416. data/spec/unit/file_system/tempfile_spec.rb +48 -0
  417. data/spec/unit/graph/relationship_graph_spec.rb +0 -6
  418. data/spec/unit/hiera_puppet_spec.rb +2 -2
  419. data/spec/unit/indirector/catalog/compiler_spec.rb +15 -19
  420. data/spec/unit/indirector/certificate_status/file_spec.rb +30 -40
  421. data/spec/unit/indirector/data_binding/hiera_spec.rb +95 -2
  422. data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
  423. data/spec/unit/indirector/facts/facter_spec.rb +33 -0
  424. data/spec/unit/indirector/file_bucket_file/file_spec.rb +61 -52
  425. data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
  426. data/spec/unit/indirector/file_server_spec.rb +4 -4
  427. data/spec/unit/indirector/json_spec.rb +4 -4
  428. data/spec/unit/indirector/key/file_spec.rb +13 -14
  429. data/spec/unit/indirector/resource/ral_spec.rb +7 -0
  430. data/spec/unit/indirector/resource/store_configs_spec.rb +11 -0
  431. data/spec/unit/indirector/rest_spec.rb +7 -3
  432. data/spec/unit/indirector/ssl_file_spec.rb +14 -17
  433. data/spec/unit/indirector/yaml_spec.rb +4 -4
  434. data/spec/unit/module_spec.rb +43 -15
  435. data/spec/unit/module_tool/tar/gnu_spec.rb +2 -2
  436. data/spec/unit/module_tool/tar/solaris_spec.rb +2 -2
  437. data/spec/unit/module_tool/tar_spec.rb +45 -0
  438. data/spec/unit/network/authconfig_spec.rb +2 -1
  439. data/spec/unit/network/authentication_spec.rb +2 -2
  440. data/spec/unit/network/format_handler_spec.rb +2 -2
  441. data/spec/unit/network/formats_spec.rb +24 -0
  442. data/spec/unit/network/http/connection_spec.rb +76 -199
  443. data/spec/unit/network/http/handler_spec.rb +33 -34
  444. data/spec/unit/network/http_pool_spec.rb +8 -5
  445. data/spec/unit/node/environment_spec.rb +76 -90
  446. data/spec/unit/node/facts_spec.rb +20 -3
  447. data/spec/unit/node_spec.rb +43 -0
  448. data/spec/unit/parameter/boolean_spec.rb +22 -12
  449. data/spec/unit/parser/ast/resourceparam_spec.rb +51 -0
  450. data/spec/unit/parser/compiler_spec.rb +103 -35
  451. data/spec/unit/parser/eparser_adapter_spec.rb +12 -12
  452. data/spec/unit/parser/files_spec.rb +11 -11
  453. data/spec/unit/parser/functions/contain_spec.rb +185 -0
  454. data/spec/unit/parser/functions/create_resources_spec.rb +13 -5
  455. data/spec/unit/parser/functions/generate_spec.rb +1 -1
  456. data/spec/unit/parser/functions_spec.rb +2 -2
  457. data/spec/unit/parser/lexer_spec.rb +1 -1
  458. data/spec/unit/parser/methods/each_spec.rb +1 -1
  459. data/spec/unit/parser/methods/{select_spec.rb → filter_spec.rb} +11 -11
  460. data/spec/unit/parser/methods/map_spec.rb +95 -0
  461. data/spec/unit/parser/methods/reduce_spec.rb +12 -11
  462. data/spec/unit/parser/methods/shared.rb +5 -5
  463. data/spec/unit/parser/methods/slice_spec.rb +13 -13
  464. data/spec/unit/parser/parser_spec.rb +1 -1
  465. data/spec/unit/parser/resource/param_spec.rb +44 -0
  466. data/spec/unit/parser/resource_spec.rb +16 -15
  467. data/spec/unit/pops/model/ast_transformer_spec.rb +18 -4
  468. data/spec/unit/pops/parser/lexer_spec.rb +22 -5
  469. data/spec/unit/pops/parser/parse_calls_spec.rb +5 -5
  470. data/spec/unit/pops/transformer/transform_calls_spec.rb +6 -6
  471. data/spec/unit/pops/transformer/transform_containers_spec.rb +2 -2
  472. data/spec/unit/pops/validator/validator_spec.rb +31 -0
  473. data/spec/unit/provider/augeas/augeas_spec.rb +57 -2
  474. data/spec/unit/provider/exec/posix_spec.rb +8 -3
  475. data/spec/unit/provider/file/posix_spec.rb +2 -2
  476. data/spec/unit/provider/group/windows_adsi_spec.rb +70 -3
  477. data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
  478. data/spec/unit/provider/package/apt_spec.rb +1 -1
  479. data/spec/unit/provider/package/msi_spec.rb +15 -42
  480. data/spec/unit/provider/package/openbsd_spec.rb +3 -3
  481. data/spec/unit/provider/package/rpm_spec.rb +56 -13
  482. data/spec/unit/provider/package/windows_spec.rb +15 -19
  483. data/spec/unit/provider/service/base_spec.rb +1 -1
  484. data/spec/unit/provider/service/daemontools_spec.rb +18 -8
  485. data/spec/unit/provider/service/freebsd_spec.rb +3 -3
  486. data/spec/unit/provider/service/gentoo_spec.rb +5 -2
  487. data/spec/unit/provider/service/init_spec.rb +17 -17
  488. data/spec/unit/provider/service/launchd_spec.rb +76 -23
  489. data/spec/unit/provider/service/openbsd_spec.rb +125 -0
  490. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  491. data/spec/unit/provider/service/runit_spec.rb +12 -5
  492. data/spec/unit/provider/service/upstart_spec.rb +4 -4
  493. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +5 -5
  494. data/spec/unit/provider/user/directoryservice_spec.rb +4 -4
  495. data/spec/unit/provider/zone/solaris_spec.rb +1 -1
  496. data/spec/unit/provider_spec.rb +2 -2
  497. data/spec/unit/reports/http_spec.rb +19 -34
  498. data/spec/unit/reports/store_spec.rb +2 -2
  499. data/spec/unit/resource/catalog_spec.rb +81 -11
  500. data/spec/unit/resource/status_spec.rb +11 -1
  501. data/spec/unit/resource/type_spec.rb +30 -1
  502. data/spec/unit/resource_spec.rb +40 -4
  503. data/spec/unit/settings/file_setting_spec.rb +2 -2
  504. data/spec/unit/settings/path_setting_spec.rb +2 -2
  505. data/spec/unit/settings/priority_setting_spec.rb +66 -0
  506. data/spec/unit/settings_spec.rb +16 -31
  507. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +30 -0
  508. data/spec/unit/ssl/certificate_authority_spec.rb +129 -134
  509. data/spec/unit/ssl/certificate_factory_spec.rb +18 -0
  510. data/spec/unit/ssl/certificate_request_attributes_spec.rb +61 -0
  511. data/spec/unit/ssl/certificate_request_spec.rb +103 -0
  512. data/spec/unit/ssl/certificate_spec.rb +31 -18
  513. data/spec/unit/ssl/host_spec.rb +34 -8
  514. data/spec/unit/ssl/inventory_spec.rb +27 -62
  515. data/spec/unit/ssl/key_spec.rb +4 -4
  516. data/spec/unit/ssl/oids_spec.rb +48 -0
  517. data/spec/unit/ssl/validator_spec.rb +49 -6
  518. data/spec/unit/status_spec.rb +9 -0
  519. data/spec/unit/transaction/event_spec.rb +1 -9
  520. data/spec/unit/transaction/report_spec.rb +20 -1
  521. data/spec/unit/transaction/resource_harness_spec.rb +60 -210
  522. data/spec/unit/transaction_spec.rb +54 -8
  523. data/spec/unit/type/component_spec.rb +2 -2
  524. data/spec/unit/type/exec_spec.rb +14 -7
  525. data/spec/unit/type/file/content_spec.rb +13 -2
  526. data/spec/unit/type/file/ctime_spec.rb +1 -1
  527. data/spec/unit/type/file/mode_spec.rb +48 -2
  528. data/spec/unit/type/file/mtime_spec.rb +1 -1
  529. data/spec/unit/type/file/source_spec.rb +177 -7
  530. data/spec/unit/type/file_spec.rb +63 -71
  531. data/spec/unit/type/group_spec.rb +20 -0
  532. data/spec/unit/type/k5login_spec.rb +3 -3
  533. data/spec/unit/type/mount_spec.rb +53 -0
  534. data/spec/unit/type/nagios_spec.rb +216 -0
  535. data/spec/unit/type/package_spec.rb +7 -1
  536. data/spec/unit/type/schedule_spec.rb +6 -0
  537. data/spec/unit/type/service_spec.rb +3 -3
  538. data/spec/unit/type/tidy_spec.rb +14 -14
  539. data/spec/unit/type/user_spec.rb +9 -0
  540. data/spec/unit/type_spec.rb +86 -4
  541. data/spec/unit/util/adsi_spec.rb +120 -12
  542. data/spec/unit/util/autoload_spec.rb +14 -14
  543. data/spec/unit/util/backups_spec.rb +29 -21
  544. data/spec/unit/util/checksums_spec.rb +2 -1
  545. data/spec/unit/util/command_line_spec.rb +41 -0
  546. data/spec/unit/util/docs_spec.rb +91 -0
  547. data/spec/unit/util/execution_spec.rb +26 -2
  548. data/spec/unit/util/filetype_spec.rb +7 -7
  549. data/spec/unit/util/lockfile_spec.rb +2 -2
  550. data/spec/unit/util/log/destinations_spec.rb +32 -0
  551. data/spec/unit/util/monkey_patches_spec.rb +41 -0
  552. data/spec/unit/util/pidlock_spec.rb +6 -6
  553. data/spec/unit/util/rdoc/parser_spec.rb +15 -13
  554. data/spec/unit/util/rdoc_spec.rb +18 -24
  555. data/spec/unit/util/resource_template_spec.rb +3 -3
  556. data/spec/unit/util/selinux_spec.rb +4 -2
  557. data/spec/unit/util/storage_spec.rb +4 -4
  558. data/spec/unit/util/suidmanager_spec.rb +7 -0
  559. data/spec/unit/util/tag_set_spec.rb +46 -0
  560. data/spec/unit/util/tagging_spec.rb +82 -45
  561. data/spec/unit/util/watcher_spec.rb +4 -1
  562. data/spec/unit/util/windows/access_control_entry_spec.rb +67 -0
  563. data/spec/unit/util/windows/access_control_list_spec.rb +133 -0
  564. data/spec/unit/util/windows/root_certs_spec.rb +10 -8
  565. data/spec/unit/util/windows/security_descriptor_spec.rb +117 -0
  566. data/spec/unit/util/windows/sid_spec.rb +69 -0
  567. data/spec/unit/util_spec.rb +7 -7
  568. data/tasks/ci.rake +17 -36
  569. metadata +2811 -2746
  570. checksums.yaml +0 -7
  571. data/examples/mac_automount.pp +0 -16
  572. data/examples/mcx_dock_absent.pp +0 -4
  573. data/examples/mcx_dock_default.pp +0 -118
  574. data/examples/mcx_dock_full.pp +0 -125
  575. data/examples/mcx_dock_invalid.pp +0 -9
  576. data/examples/mcx_nogroup.pp +0 -118
  577. data/examples/mcx_notexists_absent.pp +0 -4
  578. data/ext/rack/README +0 -58
  579. data/ext/rack/manifest.pp +0 -59
  580. data/lib/puppet/external/lock.rb +0 -63
  581. data/lib/puppet/indirector/hiera.rb +0 -39
  582. data/lib/puppet/parser/functions/foreach.rb +0 -95
  583. data/spec/integration/network/server/webrick_spec.rb +0 -76
  584. data/spec/integration/parser/functions_spec.rb +0 -16
  585. data/spec/unit/indirector/hiera_spec.rb +0 -154
  586. data/spec/unit/parser/methods/collect_spec.rb +0 -153
  587. data/spec/unit/parser/methods/foreach_spec.rb +0 -91
  588. data/spec/unit/parser/methods/reject_spec.rb +0 -73
  589. data/spec/unit/resource/resource_type.json +0 -34
@@ -1,6 +1,7 @@
1
1
  require 'puppet/network/format_handler'
2
2
 
3
3
  # Provides network serialization support when included
4
+ # @api public
4
5
  module Puppet::Network::FormatSupport
5
6
  def self.included(klass)
6
7
  klass.extend(ClassMethods)
@@ -83,6 +84,10 @@ module Puppet::Network::FormatSupport
83
84
  end
84
85
  end
85
86
 
87
+ def to_msgpack(*args)
88
+ to_data_hash.to_msgpack(*args)
89
+ end
90
+
86
91
  def render(format = nil)
87
92
  format ||= self.class.default_format
88
93
 
@@ -102,5 +107,14 @@ module Puppet::Network::FormatSupport
102
107
  def support_format?(name)
103
108
  self.class.support_format?(name)
104
109
  end
110
+
111
+ # @comment Document to_data_hash here as it is called as a hook from to_msgpack if it exists
112
+ # @!method to_data_hash(*args)
113
+ # @api public
114
+ # @abstract
115
+ # This method may be implemented to return a hash object that is used for serializing.
116
+ # The object returned by this method should contain all the info needed to instantiate it again.
117
+ # If the method exists it will be called from to_msgpack and other serialization methods.
118
+ # @return [Hash]
105
119
  end
106
120
 
@@ -1,5 +1,31 @@
1
1
  require 'puppet/network/format_handler'
2
2
 
3
+ Puppet::Network::FormatHandler.create_serialized_formats(:msgpack, :weight => 20, :mime => "application/x-msgpack", :required_methods => [:render_method, :intern_method]) do
4
+ def intern(klass, text)
5
+ data = MessagePack.unpack(text)
6
+ return data if data.is_a?(klass)
7
+ klass.from_pson(data)
8
+ end
9
+
10
+ def intern_multiple(klass, text)
11
+ MessagePack.unpack(text).collect do |data|
12
+ klass.from_pson(data)
13
+ end
14
+ end
15
+
16
+ def render(instance)
17
+ instance.to_msgpack
18
+ end
19
+
20
+ def render_multiple(instances)
21
+ instances.to_msgpack
22
+ end
23
+
24
+ def supported?(klass)
25
+ Puppet.features.msgpack? && klass.method_defined?(:to_msgpack)
26
+ end
27
+ end
28
+
3
29
  Puppet::Network::FormatHandler.create_serialized_formats(:yaml) do
4
30
  def intern(klass, text)
5
31
  data = YAML.load(text, :safe => true, :deserialize_symbols => true)
@@ -24,17 +24,17 @@ module Puppet::Network::HTTP
24
24
 
25
25
  OPTION_DEFAULTS = {
26
26
  :use_ssl => true,
27
- :verify_peer => true,
27
+ :verify => nil,
28
28
  :redirect_limit => 10
29
29
  }
30
30
 
31
- # Creates a new HTTP client connection to `host`:`port`.
31
+ # Creates a new HTTP client connection to `host`:`port`.
32
32
  # @param host [String] the host to which this client will connect to
33
33
  # @param port [Fixnum] the port to which this client will connect to
34
34
  # @param options [Hash] options influencing the properties of the created connection,
35
35
  # the following options are recognized:
36
36
  # :use_ssl [Boolean] true to connect with SSL, false otherwise, defaults to true
37
- # :verify_peer [Boolean] true to verify the peer's certificate, false otherwise, defaults to true
37
+ # :verify [#setup_connection] An object that will configure any verification to do on the connection
38
38
  # :redirect_limit [Fixnum] the number of allowed redirections, defaults to 10
39
39
  # passing any other option in the options hash results in a Puppet::Error exception
40
40
  # @note the HTTP connection itself happens lazily only when {#request}, or one of the {#get}, {#post}, {#delete}, {#head} or {#put} is called
@@ -48,7 +48,7 @@ module Puppet::Network::HTTP
48
48
 
49
49
  options = OPTION_DEFAULTS.merge(options)
50
50
  @use_ssl = options[:use_ssl]
51
- @verify_peer = options[:verify_peer]
51
+ @verify = options[:verify]
52
52
  @redirect_limit = options[:redirect_limit]
53
53
  end
54
54
 
@@ -128,23 +128,19 @@ module Puppet::Network::HTTP
128
128
  end
129
129
 
130
130
  def execute_request(method, *args)
131
- ssl_validator = Puppet::SSL::Validator.new(:ssl_configuration => ssl_configuration)
132
- # Perform our own validation of the SSL connection in addition to OpenSSL
133
- ssl_validator.register_verify_callback(connection)
134
-
135
131
  response = connection.send(method, *args)
136
132
 
137
133
  # Check the peer certs and warn if they're nearing expiration.
138
- warn_if_near_expiration(*ssl_validator.peer_certs)
134
+ warn_if_near_expiration(*@verify.peer_certs)
139
135
 
140
136
  response
141
137
  rescue OpenSSL::SSL::SSLError => error
142
138
  if error.message.include? "certificate verify failed"
143
139
  msg = error.message
144
- msg << ": [" + ssl_validator.verify_errors.join('; ') + "]"
140
+ msg << ": [" + @verify.verify_errors.join('; ') + "]"
145
141
  raise Puppet::Error, msg
146
142
  elsif error.message =~ /hostname (\w+ )?not match/
147
- leaf_ssl_cert = ssl_validator.peer_certs.last
143
+ leaf_ssl_cert = @verify.peer_certs.last
148
144
 
149
145
  valid_certnames = [leaf_ssl_cert.name, *leaf_ssl_cert.subject_alt_names].uniq
150
146
  msg = valid_certnames.length > 1 ? "one of #{valid_certnames.join(', ')}" : valid_certnames.first
@@ -181,23 +177,7 @@ module Puppet::Network::HTTP
181
177
 
182
178
  # Use cert information from a Puppet client to set up the http object.
183
179
  def cert_setup
184
- if @verify_peer and FileTest.exist?(Puppet[:hostcert]) and FileTest.exist?(ssl_configuration.ca_auth_file)
185
- @connection.cert_store = ssl_host.ssl_store
186
- @connection.ca_file = ssl_configuration.ca_auth_file
187
- @connection.cert = ssl_host.certificate.content
188
- @connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
189
- @connection.key = ssl_host.key.content
190
- else
191
- # We don't have the local certificates, so we don't do any verification
192
- # or setup at this early stage. REVISIT: Shouldn't we supply the local
193
- # certificate details if we have them? The original code didn't.
194
- # --daniel 2012-06-03
195
-
196
- # Ruby 1.8 defaulted to this, but 1.9 defaults to peer verify,
197
- # and we almost always talk to a dedicated, not-standard CA that
198
- # isn't trusted out of the box. This forces the expected state.
199
- @connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
200
- end
180
+ @verify.setup_connection(@connection)
201
181
  end
202
182
 
203
183
  # This method largely exists for testing purposes, so that we can
@@ -205,18 +185,5 @@ module Puppet::Network::HTTP
205
185
  def create_connection(*args)
206
186
  Net::HTTP.new(*args)
207
187
  end
208
-
209
- # Use the global localhost instance.
210
- def ssl_host
211
- Puppet::SSL::Host.localhost
212
- end
213
-
214
- def ssl_configuration
215
- @ssl_configuration ||= Puppet::SSL::Configuration.new(
216
- Puppet[:localcacert],
217
- :ca_chain_file => Puppet[:ssl_client_ca_chain],
218
- :ca_auth_file => Puppet[:ssl_client_ca_auth]
219
- )
220
- end
221
188
  end
222
189
  end
@@ -89,15 +89,20 @@ module Puppet::Network::HTTP::Handler
89
89
  configure_profiler(request_headers, request_params)
90
90
 
91
91
  Puppet::Util::Profiler.profile("Processed request #{request_method} #{request_path}") do
92
- indirection, method, key, params = uri2indirection(request_method, request_path, request_params)
92
+ indirection_name, method, key, params = uri2indirection(request_method, request_path, request_params)
93
93
 
94
- check_authorization(indirection, method, key, params)
94
+ check_authorization(indirection_name, method, key, params)
95
95
  warn_if_near_expiration(client_cert(request))
96
96
 
97
+ indirection = Puppet::Indirector::Indirection.instance(indirection_name.to_sym)
98
+ raise ArgumentError, "Could not find indirection '#{indirection_name}'" unless indirection
99
+
100
+ if !indirection.allow_remote_requests?
101
+ raise HTTPNotFoundError, "No handler for #{indirection.name}"
102
+ end
103
+
97
104
  send("do_#{method}", indirection, key, params, request, response)
98
105
  end
99
- rescue SystemExit,NoMemoryError
100
- raise
101
106
  rescue HTTPError => e
102
107
  return do_http_control_exception(response, e)
103
108
  rescue Exception => e
@@ -129,19 +134,13 @@ module Puppet::Network::HTTP::Handler
129
134
  set_response(response, exception.to_s, status)
130
135
  end
131
136
 
132
- def model(indirection_name)
133
- raise ArgumentError, "Could not find indirection '#{indirection_name}'" unless indirection = Puppet::Indirector::Indirection.instance(indirection_name.to_sym)
134
- indirection.model
135
- end
136
-
137
137
  # Execute our find.
138
- def do_find(indirection_name, key, params, request, response)
139
- model_class = model(indirection_name)
140
- unless result = model_class.indirection.find(key, params)
141
- raise HTTPNotFoundError, "Could not find #{indirection_name} #{key}"
138
+ def do_find(indirection, key, params, request, response)
139
+ unless result = indirection.find(key, params)
140
+ raise HTTPNotFoundError, "Could not find #{indirection.name} #{key}"
142
141
  end
143
142
 
144
- format = accepted_response_formatter_for(model_class, request)
143
+ format = accepted_response_formatter_for(indirection.model, request)
145
144
  set_content_type(response, format)
146
145
 
147
146
  rendered_result = result
@@ -157,9 +156,9 @@ module Puppet::Network::HTTP::Handler
157
156
  end
158
157
 
159
158
  # Execute our head.
160
- def do_head(indirection_name, key, params, request, response)
161
- unless self.model(indirection_name).indirection.head(key, params)
162
- raise HTTPNotFoundError, "Could not find #{indirection_name} #{key}"
159
+ def do_head(indirection, key, params, request, response)
160
+ unless indirection.head(key, params)
161
+ raise HTTPNotFoundError, "Could not find #{indirection.name} #{key}"
163
162
  end
164
163
 
165
164
  # No need to set a response because no response is expected from a
@@ -167,38 +166,35 @@ module Puppet::Network::HTTP::Handler
167
166
  end
168
167
 
169
168
  # Execute our search.
170
- def do_search(indirection_name, key, params, request, response)
171
- model = self.model(indirection_name)
172
- result = model.indirection.search(key, params)
169
+ def do_search(indirection, key, params, request, response)
170
+ result = indirection.search(key, params)
173
171
 
174
172
  if result.nil?
175
- raise HTTPNotFoundError, "Could not find instances in #{indirection_name} with '#{key}'"
173
+ raise HTTPNotFoundError, "Could not find instances in #{indirection.name} with '#{key}'"
176
174
  end
177
175
 
178
- format = accepted_response_formatter_for(model, request)
176
+ format = accepted_response_formatter_for(indirection.model, request)
179
177
  set_content_type(response, format)
180
178
 
181
- set_response(response, model.render_multiple(format, result))
179
+ set_response(response, indirection.model.render_multiple(format, result))
182
180
  end
183
181
 
184
182
  # Execute our destroy.
185
- def do_destroy(indirection_name, key, params, request, response)
186
- model_class = model(indirection_name)
187
- formatter = accepted_response_formatter_or_yaml_for(model_class, request)
183
+ def do_destroy(indirection, key, params, request, response)
184
+ formatter = accepted_response_formatter_or_yaml_for(indirection.model, request)
188
185
 
189
- result = model_class.indirection.destroy(key, params)
186
+ result = indirection.destroy(key, params)
190
187
 
191
188
  set_content_type(response, formatter)
192
189
  set_response(response, formatter.render(result))
193
190
  end
194
191
 
195
192
  # Execute our save.
196
- def do_save(indirection_name, key, params, request, response)
197
- model_class = model(indirection_name)
198
- formatter = accepted_response_formatter_or_yaml_for(model_class, request)
199
- sent_object = read_body_into_model(model_class, request)
193
+ def do_save(indirection, key, params, request, response)
194
+ formatter = accepted_response_formatter_or_yaml_for(indirection.model, request)
195
+ sent_object = read_body_into_model(indirection.model, request)
200
196
 
201
- result = model_class.indirection.save(sent_object, key)
197
+ result = indirection.save(sent_object, key)
202
198
 
203
199
  set_content_type(response, formatter)
204
200
  set_response(response, formatter.render(result))
@@ -10,7 +10,6 @@ require 'puppet/ssl/configuration'
10
10
  class Puppet::Network::HTTP::WEBrick
11
11
  def initialize
12
12
  @listening = false
13
- @mutex = Mutex.new
14
13
  end
15
14
 
16
15
  def listen(address, port)
@@ -25,34 +24,28 @@ class Puppet::Network::HTTP::WEBrick
25
24
 
26
25
  @server.mount('/', Puppet::Network::HTTP::WEBrickREST, :this_value_is_apparently_necessary_but_unused)
27
26
 
28
- @mutex.synchronize do
29
- raise "WEBrick server is already listening" if @listening
30
- @listening = true
31
- @thread = Thread.new {
32
- @server.start { |sock|
33
- raise "Client disconnected before connection could be established" unless IO.select([sock],nil,nil,6.2)
34
- sock.accept
35
- @server.run(sock)
36
- }
37
- }
38
- sleep 0.1 until @server.status == :Running
27
+ raise "WEBrick server is already listening" if @listening
28
+ @listening = true
29
+ @thread = Thread.new do
30
+ @server.start do |sock|
31
+ raise "Client disconnected before connection could be established" unless IO.select([sock],nil,nil,6.2)
32
+ sock.accept
33
+ @server.run(sock)
34
+ end
39
35
  end
36
+ sleep 0.1 until @server.status == :Running
40
37
  end
41
38
 
42
39
  def unlisten
43
- @mutex.synchronize do
44
- raise "WEBrick server is not listening" unless @listening
45
- @server.shutdown
46
- wait_for_shutdown
47
- @server = nil
48
- @listening = false
49
- end
40
+ raise "WEBrick server is not listening" unless @listening
41
+ @server.shutdown
42
+ wait_for_shutdown
43
+ @server = nil
44
+ @listening = false
50
45
  end
51
46
 
52
47
  def listening?
53
- @mutex.synchronize do
54
- @listening
55
- end
48
+ @listening
56
49
  end
57
50
 
58
51
  def wait_for_shutdown
@@ -2,18 +2,52 @@ require 'puppet/network/http/connection'
2
2
 
3
3
  module Puppet::Network; end
4
4
 
5
- # This class is basically a placeholder for managing a pool of HTTP connections;
6
- # at present it does not actually attempt to pool them. Historically, it did
7
- # attempt to do so, but this didn't work well based on Puppet's threading model.
8
- # The pooling functionality has been removed, but this abstraction is still here
9
- # because the API is used in various places and because it could be useful
10
- # should we decide to implement pooling at some point in the future.
5
+ # This module contains the factory methods that should be used for getting a
6
+ # Puppet::Network::HTTP::Connection instance.
7
+ #
8
+ # The name "HttpPool" is a misnomer, and a leftover of history, but we would
9
+ # like to make this cache connections in the future.
10
+ #
11
+ # @api public
12
+ #
11
13
  module Puppet::Network::HttpPool
12
14
 
13
- # Retrieve a cached http instance if caching is enabled, else return
14
- # a new one.
15
+ # Retrieve a connection for the given host and port.
16
+ #
17
+ # @param host [String] The hostname to connect to
18
+ # @param port [Integer] The port on the host to connect to
19
+ # @param use_ssl [Boolean] Whether to use an SSL connection
20
+ # @param verify_peer [Boolean] Whether to verify the peer credentials, if possible. Verification will not take place if the CA certificate is missing.
21
+ # @return [Puppet::Network::HTTP::Connection]
22
+ #
23
+ # @api public
24
+ #
15
25
  def self.http_instance(host, port, use_ssl = true, verify_peer = true)
16
- Puppet::Network::HTTP::Connection.new(host, port, :use_ssl => use_ssl, :verify_peer => verify_peer)
26
+ verifier = if verify_peer
27
+ Puppet::SSL::Validator.default_validator()
28
+ else
29
+ Puppet::SSL::Validator.no_validator()
30
+ end
31
+
32
+ Puppet::Network::HTTP::Connection.new(host, port,
33
+ :use_ssl => use_ssl,
34
+ :verify => verifier)
17
35
  end
18
36
 
37
+ # Get an http connection that will be secured with SSL and have the
38
+ # connection verified with the given verifier
39
+ #
40
+ # @param host [String] the DNS name to connect to
41
+ # @param port [Integer] the port to connect to
42
+ # @param verifier [#setup_connection, #peer_certs, #verify_errors] An object that will setup the appropriate
43
+ # verification on a Net::HTTP instance and report any errors and the certificates used.
44
+ # @return [Puppet::Network::HTTP::Connection]
45
+ #
46
+ # @api public
47
+ #
48
+ def self.http_ssl_instance(host, port, verifier = Puppet::SSL::Validator.default_validator())
49
+ Puppet::Network::HTTP::Connection.new(host, port,
50
+ :use_ssl => true,
51
+ :verify => verifier)
52
+ end
19
53
  end
File without changes
@@ -16,7 +16,7 @@ class Puppet::Node
16
16
  indirects :node, :terminus_setting => :node_terminus, :doc => "Where to find node information.
17
17
  A node is composed of its name, its facts, and its environment."
18
18
 
19
- attr_accessor :name, :classes, :source, :ipaddress, :parameters
19
+ attr_accessor :name, :classes, :source, :ipaddress, :parameters, :trusted_data
20
20
  attr_reader :time, :facts
21
21
 
22
22
  ::PSON.register_document_type('Node',self)
@@ -31,17 +31,25 @@ class Puppet::Node
31
31
  node
32
32
  end
33
33
 
34
- def to_pson(*args)
34
+ def to_data_hash
35
35
  result = {
36
+ 'name' => name,
37
+ 'environment' => environment.name,
38
+ }
39
+ result['classes'] = classes unless classes.empty?
40
+ result['parameters'] = parameters unless parameters.empty?
41
+ result
42
+ end
43
+
44
+ def to_pson_data_hash(*args)
45
+ {
36
46
  'document_type' => "Node",
37
- 'data' => {}
47
+ 'data' => to_data_hash,
38
48
  }
39
- result['data']['name'] = name
40
- result['data']['classes'] = classes unless classes.empty?
41
- result['data']['parameters'] = parameters unless parameters.empty?
42
- result['data']['environment'] = environment.name
49
+ end
43
50
 
44
- result.to_pson(*args)
51
+ def to_pson(*args)
52
+ to_pson_data_hash.to_pson(*args)
45
53
  end
46
54
 
47
55
  def environment
@@ -84,6 +92,7 @@ class Puppet::Node
84
92
  # Merge the node facts with parameters from the node source.
85
93
  def fact_merge
86
94
  if @facts = Puppet::Node::Facts.indirection.find(name, :environment => environment)
95
+ @facts.sanitize
87
96
  merge(@facts.values)
88
97
  end
89
98
  rescue => detail
@@ -143,4 +152,11 @@ class Puppet::Node
143
152
  end
144
153
  tmp.reverse
145
154
  end
155
+
156
+ # Ensures the data is frozen
157
+ #
158
+ def trusted_data=(data)
159
+ Puppet.warning("Trusted node data modified for node #{name}") unless @trusted_data.nil?
160
+ @trusted_data = data.freeze
161
+ end
146
162
  end