puppet 3.5.1-x86-mingw32 → 3.6.0.rc1-x86-mingw32

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 (342) hide show
  1. data/CONTRIBUTING.md +5 -0
  2. data/Gemfile +17 -9
  3. data/README.md +1 -0
  4. data/conf/fileserver.conf +4 -3
  5. data/ext/README.environment +8 -0
  6. data/ext/build_defaults.yaml +1 -1
  7. data/ext/debian/control +2 -2
  8. data/ext/debian/puppet-common.dirs +4 -0
  9. data/ext/debian/rules +4 -0
  10. data/ext/emacs/puppet-mode-init.el +1 -1
  11. data/ext/emacs/puppet-mode.el +36 -17
  12. data/ext/redhat/client.init +3 -3
  13. data/ext/redhat/puppet.spec.erb +9 -0
  14. data/ext/systemd/puppet.service +3 -4
  15. data/ext/systemd/puppetmaster.service +1 -3
  16. data/install.rb +1 -1
  17. data/lib/puppet.rb +2 -1
  18. data/lib/puppet/agent.rb +1 -1
  19. data/lib/puppet/application.rb +17 -17
  20. data/lib/puppet/application/doc.rb +1 -1
  21. data/lib/puppet/configurer.rb +4 -1
  22. data/lib/puppet/configurer/downloader.rb +13 -12
  23. data/lib/puppet/configurer/plugin_handler.rb +3 -3
  24. data/lib/puppet/context.rb +6 -1
  25. data/lib/puppet/defaults.rb +82 -12
  26. data/lib/puppet/environments.rb +169 -13
  27. data/lib/puppet/external/nagios/grammar.ry +2 -0
  28. data/lib/puppet/external/nagios/parser.rb +28 -19
  29. data/lib/puppet/face/config.rb +19 -6
  30. data/lib/puppet/face/module/generate.rb +209 -7
  31. data/lib/puppet/face/module/install.rb +17 -16
  32. data/lib/puppet/face/module/list.rb +83 -82
  33. data/lib/puppet/face/module/search.rb +1 -1
  34. data/lib/puppet/face/module/upgrade.rb +10 -9
  35. data/lib/puppet/face/parser.rb +3 -2
  36. data/lib/puppet/face/plugin.rb +8 -4
  37. data/lib/puppet/file_bucket/dipper.rb +6 -3
  38. data/lib/puppet/file_bucket/file.rb +4 -2
  39. data/lib/puppet/file_serving/metadata.rb +1 -1
  40. data/lib/puppet/file_system/memory_file.rb +27 -1
  41. data/lib/puppet/file_system/memory_impl.rb +15 -1
  42. data/lib/puppet/forge.rb +148 -52
  43. data/lib/puppet/forge/cache.rb +5 -1
  44. data/lib/puppet/forge/errors.rb +10 -0
  45. data/lib/puppet/forge/repository.rb +61 -26
  46. data/lib/puppet/functions.rb +548 -0
  47. data/lib/puppet/functions/assert_type.rb +42 -0
  48. data/lib/puppet/functions/import.rb +7 -0
  49. data/lib/puppet/indirector/facts/facter.rb +1 -1
  50. data/lib/puppet/indirector/file_bucket_file/file.rb +3 -2
  51. data/lib/puppet/indirector/rest.rb +18 -0
  52. data/lib/puppet/loaders.rb +20 -0
  53. data/lib/puppet/module.rb +2 -2
  54. data/lib/puppet/module_tool.rb +40 -14
  55. data/lib/puppet/module_tool/applications.rb +0 -1
  56. data/lib/puppet/module_tool/applications/application.rb +35 -26
  57. data/lib/puppet/module_tool/applications/builder.rb +16 -6
  58. data/lib/puppet/module_tool/applications/checksummer.rb +25 -19
  59. data/lib/puppet/module_tool/applications/installer.rb +196 -35
  60. data/lib/puppet/module_tool/applications/searcher.rb +1 -0
  61. data/lib/puppet/module_tool/applications/uninstaller.rb +7 -1
  62. data/lib/puppet/module_tool/applications/unpacker.rb +57 -31
  63. data/lib/puppet/module_tool/applications/upgrader.rb +221 -65
  64. data/lib/puppet/module_tool/checksums.rb +5 -8
  65. data/lib/puppet/module_tool/errors/installer.rb +12 -44
  66. data/lib/puppet/module_tool/errors/shared.rb +84 -11
  67. data/lib/puppet/module_tool/errors/upgrader.rb +16 -45
  68. data/lib/puppet/module_tool/install_directory.rb +7 -6
  69. data/lib/puppet/module_tool/installed_modules.rb +92 -0
  70. data/lib/puppet/module_tool/local_tarball.rb +91 -0
  71. data/lib/puppet/module_tool/metadata.rb +119 -115
  72. data/lib/puppet/module_tool/modulefile.rb +9 -9
  73. data/lib/puppet/module_tool/shared_behaviors.rb +19 -7
  74. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +79 -0
  75. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +18 -0
  76. data/lib/puppet/module_tool/skeleton/templates/generator/metadata.json.erb +1 -0
  77. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +7 -0
  78. data/lib/puppet/module_tool/tar.rb +3 -7
  79. data/lib/puppet/module_tool/tar/gnu.rb +21 -9
  80. data/lib/puppet/module_tool/tar/mini.rb +2 -8
  81. data/lib/puppet/network/http/api/v1.rb +1 -1
  82. data/lib/puppet/network/http/api/v2/authorization.rb +4 -2
  83. data/lib/puppet/network/http/issues.rb +1 -0
  84. data/lib/puppet/network/http_pool.rb +15 -6
  85. data/lib/puppet/node/environment.rb +91 -20
  86. data/lib/puppet/parser/ast/pops_bridge.rb +44 -3
  87. data/lib/puppet/parser/collector.rb +1 -1
  88. data/lib/puppet/parser/compiler.rb +50 -7
  89. data/lib/puppet/parser/functions.rb +6 -0
  90. data/lib/puppet/parser/functions/generate.rb +1 -1
  91. data/lib/puppet/parser/resource.rb +1 -1
  92. data/lib/puppet/pops.rb +22 -1
  93. data/lib/puppet/pops/adapters.rb +8 -1
  94. data/lib/puppet/pops/binder/bindings_composer.rb +1 -1
  95. data/lib/puppet/pops/binder/bindings_factory.rb +1 -1
  96. data/lib/puppet/pops/binder/config/binder_config_checker.rb +1 -1
  97. data/lib/puppet/pops/binder/producers.rb +2 -2
  98. data/lib/puppet/pops/evaluator/access_operator.rb +65 -25
  99. data/lib/puppet/pops/evaluator/callable_signature.rb +101 -0
  100. data/lib/puppet/pops/evaluator/closure.rb +57 -2
  101. data/lib/puppet/pops/evaluator/compare_operator.rb +1 -1
  102. data/lib/puppet/pops/evaluator/evaluator_impl.rb +9 -11
  103. data/lib/puppet/pops/evaluator/runtime3_support.rb +72 -21
  104. data/lib/puppet/pops/functions/dispatch.rb +71 -0
  105. data/lib/puppet/pops/functions/dispatcher.rb +237 -0
  106. data/lib/puppet/pops/functions/function.rb +77 -0
  107. data/lib/puppet/pops/issues.rb +12 -0
  108. data/lib/puppet/pops/loader/base_loader.rb +102 -0
  109. data/lib/puppet/pops/loader/dependency_loader.rb +60 -0
  110. data/lib/puppet/pops/loader/gem_support.rb +49 -0
  111. data/lib/puppet/pops/loader/loader.rb +180 -0
  112. data/lib/puppet/pops/loader/loader_paths.rb +137 -0
  113. data/lib/puppet/pops/loader/module_loaders.rb +242 -0
  114. data/lib/puppet/pops/loader/null_loader.rb +44 -0
  115. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +34 -0
  116. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +109 -0
  117. data/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
  118. data/lib/puppet/pops/loader/static_loader.rb +69 -0
  119. data/lib/puppet/pops/loader/uri_helper.rb +22 -0
  120. data/lib/puppet/pops/loaders.rb +240 -0
  121. data/lib/puppet/pops/model/factory.rb +13 -5
  122. data/lib/puppet/pops/model/model_tree_dumper.rb +12 -4
  123. data/lib/puppet/pops/parser/egrammar.ra +31 -18
  124. data/lib/puppet/pops/parser/eparser.rb +1137 -1106
  125. data/lib/puppet/pops/parser/lexer2.rb +17 -16
  126. data/lib/puppet/pops/semantic_error.rb +17 -0
  127. data/lib/puppet/pops/types/type_calculator.rb +150 -15
  128. data/lib/puppet/pops/types/type_factory.rb +69 -0
  129. data/lib/puppet/pops/types/type_parser.rb +9 -0
  130. data/lib/puppet/pops/types/types.rb +65 -4
  131. data/lib/puppet/pops/validation/checker4_0.rb +1 -1
  132. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -1
  133. data/lib/puppet/property/list.rb +1 -1
  134. data/lib/puppet/provider/augeas/augeas.rb +2 -2
  135. data/lib/puppet/provider/cron/crontab.rb +13 -2
  136. data/lib/puppet/provider/package.rb +24 -0
  137. data/lib/puppet/provider/package/apt.rb +6 -1
  138. data/lib/puppet/provider/package/gem.rb +8 -2
  139. data/lib/puppet/provider/package/msi.rb +0 -15
  140. data/lib/puppet/provider/package/openbsd.rb +0 -24
  141. data/lib/puppet/provider/package/rpm.rb +3 -29
  142. data/lib/puppet/provider/package/windows.rb +0 -15
  143. data/lib/puppet/provider/package/yum.rb +101 -24
  144. data/lib/puppet/provider/package/yumhelper.py +31 -1
  145. data/lib/puppet/provider/package/zypper.rb +10 -28
  146. data/lib/puppet/provider/service/debian.rb +1 -1
  147. data/lib/puppet/provider/service/init.rb +3 -0
  148. data/lib/puppet/provider/service/openbsd.rb +318 -0
  149. data/lib/puppet/provider/service/redhat.rb +6 -3
  150. data/lib/puppet/provider/service/systemd.rb +2 -2
  151. data/lib/puppet/provider/yumrepo/inifile.rb +115 -42
  152. data/lib/puppet/resource.rb +13 -9
  153. data/lib/puppet/resource/catalog.rb +12 -6
  154. data/lib/puppet/resource/type_collection.rb +3 -3
  155. data/lib/puppet/settings.rb +57 -36
  156. data/lib/puppet/settings/config_file.rb +5 -0
  157. data/lib/puppet/settings/environment_conf.rb +147 -0
  158. data/lib/puppet/settings/ttl_setting.rb +48 -0
  159. data/lib/puppet/ssl/certificate_authority.rb +2 -3
  160. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +1 -1
  161. data/lib/puppet/ssl/certificate_request.rb +4 -4
  162. data/lib/puppet/ssl/validator/default_validator.rb +2 -2
  163. data/lib/puppet/status.rb +1 -1
  164. data/lib/puppet/test/test_helper.rb +1 -0
  165. data/lib/puppet/type/augeas.rb +13 -1
  166. data/lib/puppet/type/cron.rb +32 -18
  167. data/lib/puppet/type/file.rb +4 -2
  168. data/lib/puppet/type/file/checksum.rb +15 -5
  169. data/lib/puppet/type/file/content.rb +3 -1
  170. data/lib/puppet/type/file/source.rb +5 -5
  171. data/lib/puppet/type/package.rb +12 -17
  172. data/lib/puppet/type/resources.rb +3 -1
  173. data/lib/puppet/type/scheduled_task.rb +4 -5
  174. data/lib/puppet/type/service.rb +12 -2
  175. data/lib/puppet/type/user.rb +106 -0
  176. data/lib/puppet/type/yumrepo.rb +9 -1
  177. data/lib/puppet/util/checksums.rb +60 -1
  178. data/lib/puppet/util/diff.rb +3 -1
  179. data/lib/puppet/util/execution.rb +20 -16
  180. data/lib/puppet/util/feature.rb +3 -0
  181. data/lib/puppet/util/logging.rb +19 -12
  182. data/lib/puppet/util/rubygems.rb +10 -0
  183. data/lib/puppet/util/watched_file.rb +1 -1
  184. data/lib/puppet/util/windows/security.rb +5 -3
  185. data/lib/puppet/vendor/load_semantic.rb +1 -0
  186. data/lib/puppet/vendor/require_vendored.rb +2 -0
  187. data/lib/puppet/vendor/semantic/Gemfile +20 -0
  188. data/lib/puppet/vendor/semantic/Rakefile +69 -0
  189. data/lib/puppet/vendor/semantic/lib/semantic.rb +7 -0
  190. data/lib/puppet/vendor/semantic/lib/semantic/dependency.rb +181 -0
  191. data/lib/puppet/vendor/semantic/lib/semantic/dependency/graph.rb +60 -0
  192. data/lib/puppet/vendor/semantic/lib/semantic/dependency/graph_node.rb +117 -0
  193. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +46 -0
  194. data/lib/puppet/vendor/semantic/lib/semantic/dependency/source.rb +25 -0
  195. data/lib/puppet/vendor/semantic/lib/semantic/dependency/unsatisfiable_graph.rb +31 -0
  196. data/lib/puppet/vendor/semantic/lib/semantic/version.rb +168 -0
  197. data/lib/puppet/vendor/semantic/lib/semantic/version_range.rb +424 -0
  198. data/lib/puppet/vendor/semantic/spec/spec_helper.rb +24 -0
  199. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +141 -0
  200. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +162 -0
  201. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +143 -0
  202. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +5 -0
  203. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +44 -0
  204. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +383 -0
  205. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +307 -0
  206. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +608 -0
  207. data/lib/puppet/version.rb +1 -1
  208. data/spec/fixtures/java.tgz +0 -0
  209. data/spec/fixtures/stdlib.tgz +0 -0
  210. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/usee/lib/puppet/functions/usee/callee.rb +5 -0
  211. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/user/lib/puppet/functions/user/caller.rb +5 -0
  212. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/user/metadata.json +9 -0
  213. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/lib/puppet/functions/modulea/rb_func_a.rb +5 -0
  214. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/lib/puppet/functions/rb_func_a.rb +5 -0
  215. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/manifests/init.pp +3 -0
  216. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/metadata.json +19 -0
  217. data/spec/fixtures/unit/pops/loaders/loaders/wo_metadata_module/modules/moduleb/lib/puppet/functions/moduleb/rb_func_b.rb +6 -0
  218. data/spec/fixtures/unit/pops/loaders/loaders/wo_metadata_module/modules/moduleb/manifests/init.pp +3 -0
  219. data/spec/fixtures/unit/provider/naginator/define_empty_param +6 -0
  220. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +7 -0
  221. data/spec/fixtures/unit/type/user/authorized_keys +5 -0
  222. data/spec/integration/application/apply_spec.rb +1 -2
  223. data/spec/integration/configurer_spec.rb +2 -2
  224. data/spec/integration/faces/plugin_spec.rb +62 -0
  225. data/spec/integration/indirector/catalog/compiler_spec.rb +1 -1
  226. data/spec/integration/indirector/catalog/queue_spec.rb +1 -1
  227. data/spec/integration/node/environment_spec.rb +2 -2
  228. data/spec/integration/parser/future_compiler_spec.rb +96 -142
  229. data/spec/integration/parser/ruby_manifest_spec.rb +0 -5
  230. data/spec/integration/provider/cron/crontab_spec.rb +35 -0
  231. data/spec/integration/type/file_spec.rb +74 -72
  232. data/spec/integration/util/windows/security_spec.rb +17 -0
  233. data/spec/lib/matchers/resource.rb +45 -13
  234. data/spec/lib/puppet_spec/files.rb +18 -0
  235. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +56 -0
  236. data/spec/lib/puppet_spec/module_tool/stub_source.rb +133 -0
  237. data/spec/shared_contexts/checksums.rb +55 -0
  238. data/spec/unit/application/apply_spec.rb +10 -7
  239. data/spec/unit/application/doc_spec.rb +17 -10
  240. data/spec/unit/application/indirection_base_spec.rb +18 -10
  241. data/spec/unit/application/inspect_spec.rb +22 -20
  242. data/spec/unit/configurer/downloader_spec.rb +7 -6
  243. data/spec/unit/configurer/plugin_handler_spec.rb +5 -8
  244. data/spec/unit/configurer_spec.rb +1 -1
  245. data/spec/unit/context_spec.rb +23 -0
  246. data/spec/unit/environments_spec.rb +274 -16
  247. data/spec/unit/face/config_spec.rb +111 -11
  248. data/spec/unit/face/module/install_spec.rb +14 -85
  249. data/spec/unit/face/module/list_spec.rb +108 -62
  250. data/spec/unit/face/module/search_spec.rb +1 -1
  251. data/spec/unit/face/module/uninstall_spec.rb +21 -42
  252. data/spec/unit/face/parser_spec.rb +5 -2
  253. data/spec/unit/file_bucket/dipper_spec.rb +92 -86
  254. data/spec/unit/file_bucket/file_spec.rb +23 -75
  255. data/spec/unit/file_serving/metadata_spec.rb +74 -74
  256. data/spec/unit/forge/module_release_spec.rb +131 -0
  257. data/spec/unit/forge/repository_spec.rb +21 -20
  258. data/spec/unit/forge_spec.rb +99 -23
  259. data/spec/unit/functions/assert_type_spec.rb +59 -0
  260. data/spec/unit/functions4_spec.rb +671 -0
  261. data/spec/unit/indirector/catalog/static_compiler_spec.rb +2 -2
  262. data/spec/unit/indirector/facts/facter_spec.rb +9 -3
  263. data/spec/unit/indirector/file_bucket_file/file_spec.rb +156 -155
  264. data/spec/unit/indirector/rest_spec.rb +8 -0
  265. data/spec/unit/interface/face_collection_spec.rb +35 -23
  266. data/spec/unit/module_spec.rb +20 -8
  267. data/spec/unit/module_tool/applications/builder_spec.rb +40 -12
  268. data/spec/unit/module_tool/applications/checksummer_spec.rb +86 -105
  269. data/spec/unit/module_tool/applications/installer_spec.rb +293 -261
  270. data/spec/unit/module_tool/applications/searcher_spec.rb +1 -1
  271. data/spec/unit/module_tool/applications/uninstaller_spec.rb +90 -154
  272. data/spec/unit/module_tool/applications/unpacker_spec.rb +12 -12
  273. data/spec/unit/module_tool/applications/upgrader_spec.rb +286 -18
  274. data/spec/unit/module_tool/metadata_spec.rb +223 -14
  275. data/spec/unit/module_tool/tar/gnu_spec.rb +12 -9
  276. data/spec/unit/module_tool/tar/mini_spec.rb +1 -1
  277. data/spec/unit/module_tool/tar_spec.rb +4 -18
  278. data/spec/unit/module_tool_spec.rb +123 -27
  279. data/spec/unit/network/formats_spec.rb +2 -2
  280. data/spec/unit/network/http_pool_spec.rb +21 -0
  281. data/spec/unit/network/rights_spec.rb +10 -8
  282. data/spec/unit/node/environment_spec.rb +27 -2
  283. data/spec/unit/parser/collector_spec.rb +1 -1
  284. data/spec/unit/parser/compiler_spec.rb +1 -1
  285. data/spec/unit/parser/functions/generate_spec.rb +4 -0
  286. data/spec/unit/pops/evaluator/access_ops_spec.rb +50 -11
  287. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +25 -0
  288. data/spec/unit/pops/loaders/dependency_loader_spec.rb +44 -0
  289. data/spec/unit/pops/loaders/loader_paths_spec.rb +66 -0
  290. data/spec/unit/pops/loaders/loaders_spec.rb +105 -0
  291. data/spec/unit/pops/loaders/module_loaders_spec.rb +119 -0
  292. data/spec/unit/pops/loaders/static_loader_spec.rb +46 -0
  293. data/spec/unit/pops/types/type_calculator_spec.rb +145 -10
  294. data/spec/unit/pops/types/type_factory_spec.rb +101 -0
  295. data/spec/unit/pops/types/type_parser_spec.rb +22 -0
  296. data/spec/unit/property/list_spec.rb +9 -1
  297. data/spec/unit/provider/augeas/augeas_spec.rb +58 -11
  298. data/spec/unit/provider/cron/crontab_spec.rb +1 -0
  299. data/spec/unit/provider/cron/parsed_spec.rb +15 -0
  300. data/spec/unit/provider/naginator_spec.rb +14 -0
  301. data/spec/unit/provider/package/apt_spec.rb +78 -64
  302. data/spec/unit/provider/package/gem_spec.rb +15 -0
  303. data/spec/unit/provider/package/rpm_spec.rb +6 -6
  304. data/spec/unit/provider/package/windows_spec.rb +1 -1
  305. data/spec/unit/provider/package/yum_spec.rb +199 -104
  306. data/spec/unit/provider/package/zypper_spec.rb +41 -15
  307. data/spec/unit/provider/service/openbsd_spec.rb +129 -22
  308. data/spec/unit/provider/service/redhat_spec.rb +18 -4
  309. data/spec/unit/provider/service/systemd_spec.rb +5 -9
  310. data/spec/unit/provider/service/upstart_spec.rb +1 -1
  311. data/spec/unit/provider/user/directoryservice_spec.rb +10 -0
  312. data/spec/unit/provider/yumrepo/inifile_spec.rb +171 -15
  313. data/spec/unit/resource/catalog_spec.rb +20 -104
  314. data/spec/unit/resource/type_collection_spec.rb +10 -9
  315. data/spec/unit/settings/config_file_spec.rb +29 -6
  316. data/spec/unit/settings/environment_conf_spec.rb +51 -0
  317. data/spec/unit/settings_spec.rb +97 -12
  318. data/spec/unit/ssl/certificate_authority_spec.rb +2 -0
  319. data/spec/unit/type/augeas_spec.rb +1 -1
  320. data/spec/unit/type/cron_spec.rb +6 -7
  321. data/spec/unit/type/file/checksum_spec.rb +6 -0
  322. data/spec/unit/type/file/content_spec.rb +277 -207
  323. data/spec/unit/type/file_spec.rb +9 -7
  324. data/spec/unit/type/user_spec.rb +106 -18
  325. data/spec/unit/type/yumrepo_spec.rb +8 -0
  326. data/spec/unit/util/checksums_spec.rb +12 -5
  327. data/spec/unit/util/diff_spec.rb +8 -0
  328. data/spec/unit/util/execution_spec.rb +4 -4
  329. data/spec/unit/util/feature_spec.rb +2 -0
  330. data/spec/unit/util/logging_spec.rb +14 -4
  331. data/spec/unit/util/rdoc/parser_spec.rb +5 -4
  332. data/spec/unit/util/rubygems_spec.rb +14 -0
  333. data/tasks/parallel.rake +2 -2
  334. metadata +154 -21
  335. checksums.yaml +0 -7
  336. data/lib/puppet/module_tool/applications/generator.rb +0 -142
  337. data/lib/puppet/module_tool/skeleton.rb +0 -37
  338. data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +0 -11
  339. data/lib/puppet/module_tool/skeleton/templates/generator/README.erb +0 -16
  340. data/lib/puppet/module_tool/tar/solaris.rb +0 -5
  341. data/spec/fixtures/unit/provider/service/systemd/list_units_services +0 -17
  342. data/spec/unit/module_tool/tar/solaris_spec.rb +0 -22
@@ -9,25 +9,35 @@ Puppet::Type.type(:file).newparam(:checksum) do
9
9
 
10
10
  The default checksum type is md5."
11
11
 
12
- newvalues "md5", "md5lite", "mtime", "ctime", "none"
12
+ newvalues "md5", "md5lite", "sha256", "sha256lite", "mtime", "ctime", "none"
13
13
 
14
- defaultto :md5
14
+ defaultto do
15
+ Puppet[:digest_algorithm].to_sym
16
+ end
15
17
 
16
18
  def sum(content)
17
- type = value || :md5 # because this might be called before defaults are set
19
+ type = digest_algorithm()
18
20
  "{#{type}}" + send(type, content)
19
21
  end
20
22
 
21
23
  def sum_file(path)
22
- type = value || :md5 # because this might be called before defaults are set
24
+ type = digest_algorithm()
23
25
  method = type.to_s + "_file"
24
26
  "{#{type}}" + send(method, path).to_s
25
27
  end
26
28
 
27
29
  def sum_stream(&block)
28
- type = value || :md5 # same comment as above
30
+ type = digest_algorithm()
29
31
  method = type.to_s + "_stream"
30
32
  checksum = send(method, &block)
31
33
  "{#{type}}#{checksum}"
32
34
  end
35
+
36
+ private
37
+
38
+ # Return the appropriate digest algorithm with fallbacks in case puppet defaults have not
39
+ # been initialized.
40
+ def digest_algorithm
41
+ value || Puppet[:digest_algorithm].to_sym
42
+ end
33
43
  end
@@ -206,7 +206,9 @@ module Puppet
206
206
  end
207
207
 
208
208
  def get_from_source(source_or_content, &block)
209
- request = Puppet::Indirector::Request.new(:file_content, :find, source_or_content.full_path.sub(/^\//,''), nil, :environment => resource.catalog.environment)
209
+ source = source_or_content.uri
210
+
211
+ request = Puppet::Indirector::Request.new(:file_content, :find, source.to_s, nil, :environment => resource.catalog.environment)
210
212
 
211
213
  request.do_request(:fileserver) do |req|
212
214
  connection = Puppet::Network::HttpPool.http_instance(req.server, req.port)
@@ -207,17 +207,17 @@ module Puppet
207
207
  def port
208
208
  (uri and uri.port) or Puppet.settings[:masterport]
209
209
  end
210
- private
211
-
212
- def scheme
213
- (uri and uri.scheme)
214
- end
215
210
 
216
211
  def uri
217
212
  @uri ||= URI.parse(URI.escape(metadata.source))
218
213
  end
219
214
 
220
215
  private
216
+
217
+ def scheme
218
+ (uri and uri.scheme)
219
+ end
220
+
221
221
  def found?
222
222
  ! (metadata.nil? or metadata.ftype.nil?)
223
223
  end
@@ -239,30 +239,25 @@ module Puppet
239
239
  end
240
240
 
241
241
  newproperty(:package_settings, :required_features=>:package_settings) do
242
- desc "Package settings. The definition of package settings is provider
243
- specific. In general, these are certain properties which alter contents
244
- of a package being installed. An example of package settings are the
245
- FreeBSD ports options.
242
+ desc "Settings that can change the contents or configuration of a package.
246
243
 
247
- The package_settings attribute is a property. This means that the options
248
- can be enforced during package installation and verified/retrieved
249
- for packages that are already installed.
244
+ The formatting and effects of package_settings are provider-specific; any
245
+ provider that implements them must explain how to use them in its
246
+ documentation. (Our general expectation is that if a package is
247
+ installed but its settings are out of sync, the provider should
248
+ re-install that package with the desired settings.)
250
249
 
251
- For example, ports provider on FreeBSD implements the package settings
252
- as port build options (the ones you normally set with make config).
253
- There is a simple usage example for this particular provider:
250
+ An example of how package_settings could be used is FreeBSD's port build
251
+ options --- a future version of the provider could accept a hash of options,
252
+ and would reinstall the port if the installed version lacked the correct
253
+ settings.
254
254
 
255
255
  package { 'www/apache22':
256
256
  package_settings => { 'SUEXEC' => false }
257
257
  }
258
258
 
259
- The above manifest ensures, that apache22 is compiled without SUEXEC
260
- module.
261
-
262
- Despite the package_settings are provider specific, the typical
263
- behavior, when you change package's package_settings in your manifest,
264
- is to reinstall package with new settings.
265
- "
259
+ Again, check the documentation of your platform's package provider to see
260
+ the actual usage."
266
261
 
267
262
  validate do |value|
268
263
  if provider.respond_to?(:package_settings_validate)
@@ -21,7 +21,9 @@ Puppet::Type.newtype(:resources) do
21
21
  newparam(:purge, :boolean => true, :parent => Puppet::Parameter::Boolean) do
22
22
  desc "Purge unmanaged resources. This will delete any resource
23
23
  that is not specified in your configuration
24
- and is not required by any specified resources."
24
+ and is not required by any specified resources.
25
+ Purging ssh_authorized_keys this way is deprecated; see the
26
+ purge_ssh_keys parameter of the user type for a better alternative."
25
27
 
26
28
  defaultto :false
27
29
 
@@ -98,9 +98,8 @@ Puppet::Type.newtype(:scheduled_task) do
98
98
  first become active. Several time formats will work, but we
99
99
  suggest 24-hour time formatted as HH:MM.
100
100
  * `start_date` --- The date when the trigger should first become active.
101
- Defaults to "today." Several date formats will work, including
102
- special dates like "today," but we suggest formatting dates as
103
- YYYY-MM-DD.
101
+ Defaults to the current date. You should format dates as YYYY-MM-DD,
102
+ although other date formats may work. (Under the hood, this uses `Date.parse`.)
104
103
  * For daily triggers:
105
104
  * `every` --- How often the task should run, as a number of days. Defaults
106
105
  to 1. ("2" means every other day, "3" means every three days, etc.)
@@ -132,7 +131,7 @@ Puppet::Type.newtype(:scheduled_task) do
132
131
  # May, July, September, and November, starting after August 31st, 2011.
133
132
  trigger => {
134
133
  schedule => monthly,
135
- start_date => '2011-08-31', # Defaults to 'today'
134
+ start_date => '2011-08-31', # Defaults to current date
136
135
  start_time => '08:00', # Must be specified
137
136
  months => [1,3,5,7,9,11], # Defaults to all
138
137
  on => [1, 15, last], # Must be specified
@@ -142,7 +141,7 @@ Puppet::Type.newtype(:scheduled_task) do
142
141
  # starting after August 31st, 2011.
143
142
  trigger => {
144
143
  schedule => monthly,
145
- start_date => '2011-08-31', # Defaults to 'today'
144
+ start_date => '2011-08-31', # Defaults to current date
146
145
  start_time => '08:00', # Must be specified
147
146
  months => [1,3,5], # Defaults to all
148
147
  which_occurrence => first, # Must be specified
@@ -17,7 +17,10 @@ module Puppet
17
17
  Puppet 2.7 and newer expect init scripts to have a working status command.
18
18
  If this isn't the case for any of your services' init scripts, you will
19
19
  need to set `hasstatus` to false and possibly specify a custom status
20
- command in the `status` attribute.
20
+ command in the `status` attribute. As a last resort, Puppet will attempt to
21
+ search the process table by calling whatever command is listed in the `ps`
22
+ fact. The default search pattern is the name of the service, but you can
23
+ specify it with the `pattern` attribute.
21
24
 
22
25
  **Refresh:** `service` resources can respond to refresh events (via
23
26
  `notify`, `subscribe`, or the `~>` arrow). If a `service` receives an
@@ -37,6 +40,8 @@ module Puppet
37
40
 
38
41
  feature :controllable, "The provider uses a control variable."
39
42
 
43
+ feature :flaggable, "The provider can pass flags to the service."
44
+
40
45
  newproperty(:enable, :required_features => :enableable) do
41
46
  desc "Whether a service should be enabled to start at boot.
42
47
  This property behaves quite differently depending on the platform;
@@ -97,6 +102,10 @@ module Puppet
97
102
  end
98
103
  end
99
104
 
105
+ newproperty(:flags, :required_features => :flaggable) do
106
+ desc "Specify a string of flags to pass to the startup script."
107
+ end
108
+
100
109
  newparam(:binary) do
101
110
  desc "The path to the daemon. This is only used for
102
111
  systems that do not support init scripts. This binary will be
@@ -158,7 +167,8 @@ module Puppet
158
167
  command.
159
168
 
160
169
  Defaults to the name of the service. The pattern can be a simple string
161
- or any legal Ruby pattern."
170
+ or any legal Ruby pattern, including regular expressions (which should
171
+ be quoted without enclosing slashes)."
162
172
 
163
173
  defaultto { @resource[:binary] || @resource[:name] }
164
174
  end
@@ -571,5 +571,111 @@ module Puppet
571
571
  being managed by some other NSS"
572
572
  defaultto false
573
573
  end
574
+
575
+ def eval_generate
576
+ return [] if self[:purge_ssh_keys].empty?
577
+ find_unmanaged_keys
578
+ end
579
+
580
+ newparam(:purge_ssh_keys) do
581
+ desc "Purge ssh keys authorized for the user
582
+ if they are not managed via ssh_authorized_keys. When true,
583
+ looks for keys in .ssh/authorized_keys in the user's home
584
+ directory. Possible values are true, false, or an array of
585
+ paths to file to search for authorized keys. If a path starts
586
+ with ~ or %h, this token is replaced with the user's home directory."
587
+
588
+ defaultto :false
589
+
590
+ # Use Symbols instead of booleans until PUP-1967 is resolved.
591
+ newvalues(:true, :false)
592
+
593
+ validate do |value|
594
+ if [ :true, :false ].include? value.to_s.intern
595
+ return
596
+ end
597
+ value = [ value ] if value.is_a?(String)
598
+ if value.is_a?(Array)
599
+ value.each do |entry|
600
+
601
+ raise ArgumentError, "Each entry for purge_ssh_keys must be a string, not a #{entry.class}" unless entry.is_a?(String)
602
+
603
+ valid_home = Puppet::Util.absolute_path?(entry) || entry =~ %r{^~/|^%h/}
604
+ raise ArgumentError, "Paths to keyfiles must be absolute, not #{entry}" unless valid_home
605
+ end
606
+ return
607
+ end
608
+ raise ArgumentError, "purge_ssh_keys must be true, false, or an array of file names, not #{value.inspect}"
609
+ end
610
+
611
+ munge do |value|
612
+ # Resolve string, boolean and symbol forms of true and false to a
613
+ # single representation.
614
+ test_sym = value.to_s.intern
615
+ value = test_sym if [:true, :false].include? test_sym
616
+
617
+ return [] if value == :false
618
+ home = resource[:home]
619
+ if value == :true and not home
620
+ raise ArgumentError, "purge_ssh_keys can only be true for users with a defined home directory"
621
+ end
622
+
623
+ return [ "#{home}/.ssh/authorized_keys" ] if value == :true
624
+ # value is an array - munge each value
625
+ [ value ].flatten.map do |entry|
626
+ if entry =~ /^~|^%h/ and not home
627
+ raise ArgumentError, "purge_ssh_keys value '#{value}' meta character ~ or %h only allowed for users with a defined home directory"
628
+ end
629
+ entry.gsub!(/^~\//, "#{home}/")
630
+ entry.gsub!(/^%h\//, "#{home}/")
631
+ entry
632
+ end
633
+ end
634
+ end
635
+
636
+ # Generate ssh_authorized_keys resources for purging. The key files are
637
+ # taken from the purge_ssh_keys parameter. The generated resources inherit
638
+ # all metaparameters from the parent user resource.
639
+ #
640
+ # @return [Array<Puppet::Type::Ssh_authorized_key] a list of resources
641
+ # representing the found keys
642
+ # @see eval_generate
643
+ # @api private
644
+ def find_unmanaged_keys
645
+ self[:purge_ssh_keys].
646
+ select { |f| File.readable?(f) }.
647
+ map { |f| unknown_keys_in_file(f) }.
648
+ flatten.each do |res|
649
+ res[:ensure] = :absent
650
+ @parameters.each do |name, param|
651
+ res[name] = param.value if param.metaparam?
652
+ end
653
+ end
654
+ end
655
+
656
+ # Parse an ssh authorized keys file superficially, extract the comments
657
+ # on the keys. These are considered names of possible ssh_authorized_keys
658
+ # resources. Keys that are managed by the present catalog are ignored.
659
+ #
660
+ # @see eval_generate
661
+ # @api private
662
+ # @return [Array<Puppet::Type::Ssh_authorized_key] a list of resources
663
+ # representing the found keys
664
+ def unknown_keys_in_file(keyfile)
665
+ names = []
666
+ File.new(keyfile).each do |line|
667
+ next if line.strip.empty?
668
+ next if line =~ /^\s*#/
669
+ names << line.strip.split.last
670
+ end
671
+
672
+ names.map { |keyname|
673
+ Puppet::Type.type(:ssh_authorized_key).new(
674
+ :name => keyname,
675
+ :target => keyfile)
676
+ }.reject { |res|
677
+ catalog.resource_refs.include? res.ref
678
+ }
679
+ end
574
680
  end
575
681
  end
@@ -211,7 +211,8 @@ Puppet::Type.newtype(:yumrepo) do
211
211
 
212
212
  newvalues(/.*/, :absent)
213
213
  validate do |value|
214
- unless value == :absent or (1..99).include?(value.to_i)
214
+ next if value.to_s == 'absent'
215
+ unless (1..99).include?(value.to_i)
215
216
  fail("Must be within range 1-99")
216
217
  end
217
218
  end
@@ -301,4 +302,11 @@ Puppet::Type.newtype(:yumrepo) do
301
302
  end
302
303
  end
303
304
 
305
+ newproperty(:skip_if_unavailable) do
306
+ desc "Should yum skip this repository if unable to reach it.
307
+ #{YUM_BOOLEAN_DOC}
308
+ #{ABSENT_DOC}"
309
+
310
+ newvalues(YUM_BOOLEAN, :absent)
311
+ end
304
312
  end
@@ -4,6 +4,18 @@ require 'digest/sha1'
4
4
  # A stand-alone module for calculating checksums
5
5
  # in a generic way.
6
6
  module Puppet::Util::Checksums
7
+ # @deprecated
8
+ # In Puppet 4 we should switch this to `module_function` to make these methods
9
+ # private when this class is included.
10
+ extend self
11
+
12
+ # It's not a good idea to use some of these in some contexts: for example, I
13
+ # wouldn't try bucketing a file using the :none checksum type.
14
+ def known_checksum_types
15
+ [:sha256, :sha256lite, :md5, :md5lite, :sha1, :sha1lite,
16
+ :mtime, :ctime, :none]
17
+ end
18
+
7
19
  class FakeChecksum
8
20
  def <<(*args)
9
21
  self
@@ -12,7 +24,8 @@ module Puppet::Util::Checksums
12
24
 
13
25
  # Is the provided string a checksum?
14
26
  def checksum?(string)
15
- string =~ /^\{(\w{3,5})\}\S+/
27
+ # 'sha256lite'.length == 10
28
+ string =~ /^\{(\w{3,10})\}\S+/
16
29
  end
17
30
 
18
31
  # Strip the checksum type from an existing checksum
@@ -25,6 +38,41 @@ module Puppet::Util::Checksums
25
38
  checksum =~ /^\{(\w+)\}/ ? $1 : nil
26
39
  end
27
40
 
41
+ # Calculate a checksum using Digest::SHA256.
42
+ def sha256(content)
43
+ require 'digest/sha2'
44
+ Digest::SHA256.hexdigest(content)
45
+ end
46
+
47
+ def sha256lite(content)
48
+ sha256(content[0..511])
49
+ end
50
+
51
+ def sha256_file(filename, lite = false)
52
+ require 'digest/sha2'
53
+
54
+ digest = Digest::SHA256.new
55
+ checksum_file(digest, filename, lite)
56
+ end
57
+
58
+ def sha256lite_file(filename)
59
+ sha256_file(filename, true)
60
+ end
61
+
62
+ def sha256_stream(&block)
63
+ require 'digest/sha2'
64
+ digest = Digest::SHA256.new
65
+ yield digest
66
+ digest.hexdigest
67
+ end
68
+
69
+ def sha256_hex_length
70
+ 64
71
+ end
72
+
73
+ alias :sha256lite_stream :sha256_stream
74
+ alias :sha256lite_hex_length :sha256_hex_length
75
+
28
76
  # Calculate a checksum using Digest::MD5.
29
77
  def md5(content)
30
78
  Digest::MD5.hexdigest(content)
@@ -52,7 +100,12 @@ module Puppet::Util::Checksums
52
100
  digest.hexdigest
53
101
  end
54
102
 
103
+ def md5_hex_length
104
+ 32
105
+ end
106
+
55
107
  alias :md5lite_stream :md5_stream
108
+ alias :md5lite_hex_length :md5_hex_length
56
109
 
57
110
  # Return the :mtime timestamp of a file.
58
111
  def mtime_file(filename)
@@ -98,7 +151,12 @@ module Puppet::Util::Checksums
98
151
  digest.hexdigest
99
152
  end
100
153
 
154
+ def sha1_hex_length
155
+ 40
156
+ end
157
+
101
158
  alias :sha1lite_stream :sha1_stream
159
+ alias :sha1lite_hex_length :sha1_hex_length
102
160
 
103
161
  # Return the :ctime of a file.
104
162
  def ctime_file(filename)
@@ -140,4 +198,5 @@ module Puppet::Util::Checksums
140
198
 
141
199
  digest.hexdigest
142
200
  end
201
+
143
202
  end
@@ -10,7 +10,9 @@ module Puppet::Util::Diff
10
10
 
11
11
  command = [diff_cmd]
12
12
  if args = Puppet[:diff_args] and args != ""
13
- command << args
13
+ args.split(' ').each do|arg|
14
+ command << arg
15
+ end
14
16
  end
15
17
  command << old << new
16
18
  Puppet::Util::Execution.execute(command, :failonfail => false, :combine => false)