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
@@ -11,7 +11,7 @@ Puppet::Face.define(:file, '0.0.1') do
11
11
  EOT
12
12
 
13
13
  when_invoked do |path, options|
14
- file = Puppet::FileBucket::File.new(IO.binread(path))
14
+ file = Puppet::FileBucket::File.new(Puppet::FileSystem::File.new(path).binread)
15
15
 
16
16
  Puppet::FileBucket::File.indirection.terminus_class = :file
17
17
  Puppet::FileBucket::File.indirection.save file
@@ -17,16 +17,14 @@ Puppet::Face.define(:module, '1.0.0') do
17
17
  $ puppet module generate puppetlabs-ssh
18
18
  notice: Generating module at /Users/kelseyhightower/puppetlabs-ssh
19
19
  puppetlabs-ssh
20
- puppetlabs-ssh/tests
21
- puppetlabs-ssh/tests/init.pp
22
- puppetlabs-ssh/spec
23
- puppetlabs-ssh/spec/spec_helper.rb
24
- puppetlabs-ssh/spec/spec.opts
25
- puppetlabs-ssh/README
26
20
  puppetlabs-ssh/Modulefile
27
- puppetlabs-ssh/metadata.json
21
+ puppetlabs-ssh/README
28
22
  puppetlabs-ssh/manifests
29
23
  puppetlabs-ssh/manifests/init.pp
24
+ puppetlabs-ssh/spec
25
+ puppetlabs-ssh/spec/spec_helper.rb
26
+ puppetlabs-ssh/tests
27
+ puppetlabs-ssh/tests/init.pp
30
28
  EOT
31
29
 
32
30
  arguments "<name>"
@@ -35,17 +35,27 @@ Puppet::Face.define(:parser, '0.0.1') do
35
35
  if files.empty?
36
36
  if not STDIN.tty?
37
37
  Puppet[:code] = STDIN.read
38
- Puppet::Node::Environment.new(Puppet[:environment]).known_resource_types.clear
38
+ validate_manifest
39
39
  else
40
40
  files << Puppet[:manifest]
41
41
  Puppet.notice "No manifest specified. Validating the default manifest #{Puppet[:manifest]}"
42
42
  end
43
43
  end
44
+ missing_files = []
44
45
  files.each do |file|
46
+ missing_files << file if ! Puppet::FileSystem::File.exist?(file)
45
47
  Puppet[:manifest] = file
46
- Puppet::Node::Environment.new(Puppet[:environment]).known_resource_types.clear
48
+ validate_manifest
47
49
  end
50
+ raise Puppet::Error, "One or more file(s) specified did not exist:\n#{missing_files.collect {|f| " " * 3 + f + "\n"}}" if ! missing_files.empty?
48
51
  nil
49
52
  end
50
53
  end
54
+
55
+ def validate_manifest
56
+ Puppet::Node::Environment.new(Puppet[:environment]).known_resource_types.clear
57
+ rescue => detail
58
+ Puppet.log_exception(detail)
59
+ exit(1)
60
+ end
51
61
  end
@@ -42,6 +42,12 @@ Puppet::Face.define(:plugin, '0.0.1') do
42
42
  Puppet[:plugindest],
43
43
  Puppet[:pluginsource],
44
44
  Puppet[:pluginsignore]).evaluate
45
+ if Puppet.features.external_facts?
46
+ Puppet::Configurer::Downloader.new("pluginfacts",
47
+ Puppet[:pluginfactdest],
48
+ Puppet[:pluginfactsource],
49
+ Puppet[:pluginsignore]).evaluate
50
+ end
45
51
  end
46
52
 
47
53
  when_rendering :console do |value|
@@ -70,3 +70,19 @@ Puppet.features.add(:sqlite, :libs => ["sqlite3"])
70
70
  Puppet.features.add(:hiera, :libs => ["hiera"])
71
71
 
72
72
  Puppet.features.add(:minitar, :libs => ["archive/tar/minitar"])
73
+
74
+ # We can manage symlinks
75
+ Puppet.features.add(:manages_symlinks) do
76
+ if ! Puppet::Util::Platform.windows?
77
+ true
78
+ else
79
+ begin
80
+ require 'Win32API'
81
+ Win32API.new('kernel32', 'CreateSymbolicLink', 'SSL', 'B')
82
+ true
83
+ rescue LoadError => err
84
+ Puppet.debug("CreateSymbolicLink is not available")
85
+ false
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,5 @@
1
+ require 'facter/util/config'
2
+
3
+ Puppet.features.add(:external_facts) {
4
+ Facter::Util::Config.respond_to?(:external_facts_dirs=)
5
+ }
@@ -4,5 +4,5 @@ require 'puppet/util/libuser'
4
4
  Puppet.features.add(:libuser) {
5
5
  File.executable?("/usr/sbin/lgroupadd") and
6
6
  File.executable?("/usr/sbin/luseradd") and
7
- File.exists?(Puppet::Util::Libuser.getconf)
7
+ Puppet::FileSystem::File.exist?(Puppet::Util::Libuser.getconf)
8
8
  }
@@ -0,0 +1 @@
1
+ Puppet.features.add(:msgpack, :libs => ["msgpack"])
@@ -24,11 +24,11 @@ Puppet.features.add(:rails) do
24
24
  require 'active_record'
25
25
  require 'active_record/version'
26
26
  rescue LoadError
27
- if FileTest.exists?("/usr/share/rails")
27
+ if Puppet::FileSystem::File.exist?("/usr/share/rails")
28
28
  count = 0
29
29
  Dir.entries("/usr/share/rails").each do |dir|
30
30
  libdir = File.join("/usr/share/rails", dir, "lib")
31
- if FileTest.exists?(libdir) and ! $LOAD_PATH.include?(libdir)
31
+ if Puppet::FileSystem::File.exist?(libdir) and ! $LOAD_PATH.include?(libdir)
32
32
  count += 1
33
33
  $LOAD_PATH << libdir
34
34
  end
@@ -31,8 +31,9 @@ class Puppet::FileBucket::Dipper
31
31
 
32
32
  # Back up a file to our bucket
33
33
  def backup(file)
34
- raise(ArgumentError, "File #{file} does not exist") unless ::File.exist?(file)
35
- contents = IO.binread(file)
34
+ file_handle = Puppet::FileSystem::File.new(file)
35
+ raise(ArgumentError, "File #{file} does not exist") unless file_handle.exist?
36
+ contents = file_handle.binread
36
37
  begin
37
38
  file_bucket_file = Puppet::FileBucket::File.new(contents, :bucket_path => @local_path)
38
39
  files_original_path = absolutize_path(file)
@@ -65,8 +66,9 @@ class Puppet::FileBucket::Dipper
65
66
  # Restore the file
66
67
  def restore(file,sum)
67
68
  restore = true
68
- if FileTest.exists?(file)
69
- cursum = Digest::MD5.hexdigest(IO.binread(file))
69
+ file_handle = Puppet::FileSystem::File.new(file)
70
+ if file_handle.exist?
71
+ cursum = Digest::MD5.hexdigest(file_handle.binread)
70
72
 
71
73
  # if the checksum has changed...
72
74
  # this might be extra effort
@@ -79,8 +81,8 @@ class Puppet::FileBucket::Dipper
79
81
  if newcontents = getfile(sum)
80
82
  newsum = Digest::MD5.hexdigest(newcontents)
81
83
  changed = nil
82
- if FileTest.exists?(file) and ! FileTest.writable?(file)
83
- changed = ::File.stat(file).mode
84
+ if file_handle.exist? and ! file_handle.writable?
85
+ changed = Puppet::FileSystem::File.new(file).stat.mode
84
86
  ::File.chmod(changed | 0200, file)
85
87
  end
86
88
  ::File.open(file, ::File::WRONLY|::File::TRUNC|::File::CREAT) { |of|
@@ -2,6 +2,7 @@ require 'puppet/file_bucket'
2
2
  require 'puppet/indirector'
3
3
  require 'puppet/util/checksums'
4
4
  require 'digest/md5'
5
+ require 'stringio'
5
6
 
6
7
  class Puppet::FileBucket::File
7
8
  # This class handles the abstract notion of a file in a filebucket.
@@ -34,6 +35,16 @@ class Puppet::FileBucket::File
34
35
  raise ArgumentError.new("Unknown option(s): #{options.keys.join(', ')}") unless options.empty?
35
36
  end
36
37
 
38
+ # @return [Num] The size of the contents
39
+ def size
40
+ contents.size
41
+ end
42
+
43
+ # @return [IO] A stream that reads the contents
44
+ def stream
45
+ StringIO.new(contents)
46
+ end
47
+
37
48
  def checksum_type
38
49
  'md5'
39
50
  end
@@ -60,7 +71,11 @@ class Puppet::FileBucket::File
60
71
 
61
72
  def to_pson
62
73
  Puppet.deprecation_warning("Serializing Puppet::FileBucket::File objects to pson is deprecated.")
63
- { "contents" => contents }.to_pson
74
+ to_data_hash.to_pson
75
+ end
76
+
77
+ def to_data_hash
78
+ { "contents" => contents }
64
79
  end
65
80
 
66
81
  # This method is deprecated, but cannot be removed for awhile, otherwise
@@ -69,4 +84,5 @@ class Puppet::FileBucket::File
69
84
  Puppet.deprecation_warning("Deserializing Puppet::FileBucket::File objects from pson is deprecated. Upgrade to a newer version.")
70
85
  self.new(pson["contents"])
71
86
  end
87
+
72
88
  end
@@ -21,11 +21,18 @@ class Puppet::FileServing::Base
21
21
 
22
22
  # Return the full path to our file. Fails if there's no path set.
23
23
  def full_path(dummy_argument=:work_arround_for_ruby_GC_bug)
24
- (if relative_path.nil? or relative_path == "" or relative_path == "."
25
- path
24
+ if relative_path.nil? or relative_path == "" or relative_path == "."
25
+ full_path = path
26
26
  else
27
- File.join(path, relative_path)
28
- end).gsub(%r{//+}, "/")
27
+ full_path = File.join(path, relative_path)
28
+ end
29
+
30
+ if Puppet.features.microsoft_windows?
31
+ # Replace multiple slashes as long as they aren't at the beginning of a filename
32
+ full_path.gsub(%r{(./)/+}, '\1')
33
+ else
34
+ full_path.gsub(%r{//+}, '/')
35
+ end
29
36
  end
30
37
 
31
38
  def initialize(path, options = {})
@@ -61,17 +68,21 @@ class Puppet::FileServing::Base
61
68
  # Stat our file, using the appropriate link-sensitive method.
62
69
  def stat
63
70
  @stat_method ||= self.links == :manage ? :lstat : :stat
64
- File.send(@stat_method, full_path)
71
+ Puppet::FileSystem::File.new(full_path).send(@stat_method)
72
+ end
73
+
74
+ def to_data_hash
75
+ {
76
+ 'path' => @path,
77
+ 'relative_path' => @relative_path,
78
+ 'links' => @links
79
+ }
65
80
  end
66
81
 
67
82
  def to_pson_data_hash
68
83
  {
69
84
  # No 'document_type' since we don't send these bare
70
- 'data' => {
71
- 'path' => @path,
72
- 'relative_path' => @relative_path,
73
- 'links' => @links
74
- },
85
+ 'data' => to_data_hash,
75
86
  'metadata' => {
76
87
  'api_version' => 1
77
88
  }
@@ -1,20 +1,16 @@
1
- require 'monitor'
2
1
  require 'puppet'
3
2
  require 'puppet/file_serving'
4
3
  require 'puppet/file_serving/mount'
5
4
  require 'puppet/file_serving/mount/file'
6
5
  require 'puppet/file_serving/mount/modules'
7
6
  require 'puppet/file_serving/mount/plugins'
7
+ require 'puppet/file_serving/mount/pluginfacts'
8
8
 
9
9
  class Puppet::FileServing::Configuration
10
10
  require 'puppet/file_serving/configuration/parser'
11
11
 
12
- extend MonitorMixin
13
-
14
12
  def self.configuration
15
- synchronize do
16
- @configuration ||= new
17
- end
13
+ @configuration ||= new
18
14
  end
19
15
 
20
16
  Mount = Puppet::FileServing::Mount
@@ -84,13 +80,15 @@ class Puppet::FileServing::Configuration
84
80
  @mounts["modules"].allow('*') if @mounts["modules"].empty?
85
81
  @mounts["plugins"] ||= Mount::Plugins.new("plugins")
86
82
  @mounts["plugins"].allow('*') if @mounts["plugins"].empty?
83
+ @mounts["pluginfacts"] ||= Mount::PluginFacts.new("pluginfacts")
84
+ @mounts["pluginfacts"].allow('*') if @mounts["pluginfacts"].empty?
87
85
  end
88
86
 
89
87
  # Read the configuration file.
90
88
  def readconfig(check = true)
91
89
  config = Puppet[:fileserverconfig]
92
90
 
93
- return unless FileTest.exists?(config)
91
+ return unless Puppet::FileSystem::File.exist?(config)
94
92
 
95
93
  @parser ||= Puppet::FileServing::Configuration::Parser.new(config)
96
94
 
@@ -7,7 +7,7 @@ class Puppet::FileServing::Configuration::Parser
7
7
 
8
8
  # Parse our configuration file.
9
9
  def parse
10
- raise("File server configuration #{@file} does not exist") unless FileTest.exists?(@file)
10
+ raise("File server configuration #{@file} does not exist") unless Puppet::FileSystem::File.exist?(@file)
11
11
  raise("Cannot read file server configuration #{@file}") unless FileTest.readable?(@file)
12
12
 
13
13
  @mounts = {}
@@ -34,7 +34,7 @@ class Puppet::FileServing::Content < Puppet::FileServing::Base
34
34
  # This stat can raise an exception, too.
35
35
  raise(ArgumentError, "Cannot read the contents of links unless following links") if stat.ftype == "symlink"
36
36
 
37
- @content = IO.binread(full_path)
37
+ @content = Puppet::FileSystem::File.new(full_path).binread
38
38
  end
39
39
  @content
40
40
  end
@@ -77,7 +77,7 @@ class Puppet::FileServing::Fileset
77
77
  links = links.to_sym
78
78
  raise(ArgumentError, "Invalid :links value '#{links}'") unless [:manage, :follow].include?(links)
79
79
  @links = links
80
- @stat_method = File.method(@links == :manage ? :lstat : :stat)
80
+ @stat_method = @links == :manage ? :lstat : :stat
81
81
  end
82
82
 
83
83
  private
@@ -133,7 +133,7 @@ class Puppet::FileServing::Fileset
133
133
  end
134
134
 
135
135
  def directory?
136
- stat_method.call(path).directory?
136
+ Puppet::FileSystem::File.new(path).send(stat_method).directory?
137
137
  rescue Errno::ENOENT, Errno::EACCES
138
138
  false
139
139
  end
@@ -159,7 +159,7 @@ class Puppet::FileServing::Fileset
159
159
  end
160
160
 
161
161
  def valid?(path)
162
- @stat_method.call(path)
162
+ Puppet::FileSystem::File.new(path).send(@stat_method)
163
163
  true
164
164
  rescue Errno::ENOENT, Errno::EACCES
165
165
  false
@@ -65,8 +65,8 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::Base
65
65
  end
66
66
 
67
67
  # Retrieve the attributes for this file, relative to a base directory.
68
- # Note that File.stat raises Errno::ENOENT if the file is absent and this
69
- # method does not catch that exception.
68
+ # Note that Puppet::FileSystem::File.new(path).stat raises Errno::ENOENT
69
+ # if the file is absent and this method does not catch that exception.
70
70
  def collect
71
71
  real_path = full_path
72
72
 
@@ -85,7 +85,7 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::Base
85
85
  @checksum_type = "ctime"
86
86
  @checksum = ("{#{@checksum_type}}") + send("#{@checksum_type}_file", path).to_s
87
87
  when "link"
88
- @destination = File.readlink(real_path)
88
+ @destination = Puppet::FileSystem::File.new(real_path).readlink
89
89
  @checksum = ("{#{@checksum_type}}") + send("#{@checksum_type}_file", real_path).to_s rescue nil
90
90
  else
91
91
  raise ArgumentError, "Cannot manage files of type #{stat.ftype}"
@@ -106,25 +106,29 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::Base
106
106
  super(path,data)
107
107
  end
108
108
 
109
- PSON.register_document_type('FileMetadata',self)
110
- def to_pson_data_hash
111
- {
112
- 'document_type' => 'FileMetadata',
113
-
114
- 'data' => super['data'].update(
115
- {
116
- 'owner' => owner,
117
- 'group' => group,
118
- 'mode' => mode,
119
- 'checksum' => {
120
- 'type' => checksum_type,
121
- 'value' => checksum
109
+ def to_data_hash
110
+ super.update(
111
+ {
112
+ 'owner' => owner,
113
+ 'group' => group,
114
+ 'mode' => mode,
115
+ 'checksum' => {
116
+ 'type' => checksum_type,
117
+ 'value' => checksum
122
118
  },
123
119
  'type' => ftype,
124
120
  'destination' => destination,
125
121
 
126
- }),
127
- 'metadata' => {
122
+ }
123
+ )
124
+ end
125
+
126
+ PSON.register_document_type('FileMetadata',self)
127
+ def to_pson_data_hash
128
+ {
129
+ 'document_type' => 'FileMetadata',
130
+ 'data' => to_data_hash,
131
+ 'metadata' => {
128
132
  'api_version' => 1
129
133
  }
130
134
  }
@@ -22,7 +22,7 @@ class Puppet::FileServing::Mount::File < Puppet::FileServing::Mount
22
22
 
23
23
  file = ::File.join(full_path, relative_path)
24
24
 
25
- if !(FileTest.exist?(file) or FileTest.symlink?(file))
25
+ if !(Puppet::FileSystem::File.exist?(file) or Puppet::FileSystem::File.new(file).symlink?)
26
26
  Puppet.info("File does not exist or is not accessible: #{file}")
27
27
  return nil
28
28
  end
@@ -0,0 +1,35 @@
1
+ require 'puppet/file_serving/mount'
2
+
3
+ # Find files in the modules' pluginfacts directories.
4
+ # This is a very strange mount because it merges
5
+ # many directories into one.
6
+ class Puppet::FileServing::Mount::PluginFacts < Puppet::FileServing::Mount
7
+ # Return an instance of the appropriate class.
8
+ def find(relative_path, request)
9
+ return nil unless mod = request.environment.modules.find { |mod| mod.pluginfact(relative_path) }
10
+
11
+ path = mod.pluginfact(relative_path)
12
+
13
+ path
14
+ end
15
+
16
+ def search(relative_path, request)
17
+ # We currently only support one kind of search on plugins - return
18
+ # them all.
19
+ Puppet.debug("Warning: calling Plugins.search with empty module path.") if request.environment.modules.empty?
20
+ paths = request.environment.modules.find_all { |mod| mod.pluginfacts? }.collect { |mod| mod.plugin_fact_directory }
21
+ if paths.empty?
22
+ # If the modulepath is valid then we still need to return a valid root
23
+ # directory for the search, but make sure nothing inside it is
24
+ # returned.
25
+ request.options[:recurse] = false
26
+ request.environment.modulepath.empty? ? nil : request.environment.modulepath
27
+ else
28
+ paths
29
+ end
30
+ end
31
+
32
+ def valid?
33
+ true
34
+ end
35
+ end