puppet 4.3.2 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (487) hide show
  1. checksums.yaml +4 -4
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/debian/README.source +1 -1
  9. data/ext/debian/control +1 -1
  10. data/ext/debian/copyright +4 -4
  11. data/ext/debian/puppetmaster.README.debian +11 -9
  12. data/ext/emacs/puppet-mode.el +1 -1
  13. data/ext/envpuppet +2 -2
  14. data/ext/ips/puppetagent.xml +1 -1
  15. data/ext/ips/puppetmaster.xml +1 -1
  16. data/ext/project_data.yaml +8 -0
  17. data/ext/puppet-test +3 -3
  18. data/ext/rack/example-passenger-vhost.conf +1 -1
  19. data/ext/redhat/puppet.spec.erb +2 -2
  20. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  21. data/ext/solaris/pkginfo +1 -1
  22. data/ext/solaris/smf/puppet.xml +1 -1
  23. data/ext/suse/puppet.spec +2 -2
  24. data/ext/upload_facts.rb +1 -1
  25. data/ext/windows/puppet_interactive.bat +6 -0
  26. data/ext/windows/puppet_shell.bat +9 -0
  27. data/ext/windows/run_puppet_interactive.bat +9 -0
  28. data/ext/yaml_nodes.rb +1 -1
  29. data/install.rb +30 -20
  30. data/lib/puppet/agent.rb +1 -1
  31. data/lib/puppet/application/agent.rb +4 -2
  32. data/lib/puppet/application/apply.rb +7 -4
  33. data/lib/puppet/application/cert.rb +1 -1
  34. data/lib/puppet/application/device.rb +1 -1
  35. data/lib/puppet/application/filebucket.rb +1 -1
  36. data/lib/puppet/application/inspect.rb +1 -1
  37. data/lib/puppet/application/lookup.rb +4 -4
  38. data/lib/puppet/application/master.rb +2 -2
  39. data/lib/puppet/application/resource.rb +1 -1
  40. data/lib/puppet/configurer.rb +100 -22
  41. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  42. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  43. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  44. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  45. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  46. data/lib/puppet/defaults.rb +65 -19
  47. data/lib/puppet/environments.rb +3 -1
  48. data/lib/puppet/face/config.rb +1 -1
  49. data/lib/puppet/face/epp.rb +1 -1
  50. data/lib/puppet/face/help/man.erb +1 -1
  51. data/lib/puppet/face/module/install.rb +6 -6
  52. data/lib/puppet/face/parser.rb +12 -9
  53. data/lib/puppet/face/status.rb +2 -1
  54. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  55. data/lib/puppet/feature/telnet.rb +9 -0
  56. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  57. data/lib/puppet/file_serving/metadata.rb +18 -2
  58. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  59. data/lib/puppet/file_system.rb +2 -2
  60. data/lib/puppet/file_system/file_impl.rb +2 -2
  61. data/lib/puppet/file_system/memory_impl.rb +1 -1
  62. data/lib/puppet/file_system/uniquefile.rb +1 -1
  63. data/lib/puppet/forge.rb +1 -1
  64. data/lib/puppet/forge/repository.rb +1 -31
  65. data/lib/puppet/functions.rb +45 -6
  66. data/lib/puppet/functions/assert_type.rb +9 -9
  67. data/lib/puppet/functions/each.rb +5 -13
  68. data/lib/puppet/functions/filter.rb +5 -14
  69. data/lib/puppet/functions/map.rb +6 -14
  70. data/lib/puppet/functions/reduce.rb +5 -13
  71. data/lib/puppet/functions/reverse_each.rb +82 -0
  72. data/lib/puppet/functions/scanf.rb +15 -18
  73. data/lib/puppet/functions/slice.rb +22 -36
  74. data/lib/puppet/functions/split.rb +2 -2
  75. data/lib/puppet/functions/step.rb +88 -0
  76. data/lib/puppet/functions/type.rb +70 -0
  77. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  78. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  79. data/lib/puppet/indirector/file_content/http.rb +15 -0
  80. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  81. data/lib/puppet/indirector/generic_http.rb +16 -0
  82. data/lib/puppet/indirector/node/exec.rb +1 -1
  83. data/lib/puppet/indirector/node/ldap.rb +1 -1
  84. data/lib/puppet/indirector/rest.rb +2 -1
  85. data/lib/puppet/info_service/class_information_service.rb +13 -12
  86. data/lib/puppet/loaders.rb +1 -0
  87. data/lib/puppet/module.rb +3 -0
  88. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  89. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  90. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  91. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  92. data/lib/puppet/network/http/pool.rb +9 -0
  93. data/lib/puppet/node.rb +1 -1
  94. data/lib/puppet/node/environment.rb +11 -2
  95. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  96. data/lib/puppet/parser/compiler.rb +3 -3
  97. data/lib/puppet/parser/environment_compiler.rb +0 -1
  98. data/lib/puppet/parser/functions.rb +28 -16
  99. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  100. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  101. data/lib/puppet/parser/functions/map.rb +1 -1
  102. data/lib/puppet/parser/functions/scanf.rb +15 -26
  103. data/lib/puppet/parser/functions/slice.rb +17 -24
  104. data/lib/puppet/parser/functions/split.rb +1 -1
  105. data/lib/puppet/parser/resource.rb +19 -17
  106. data/lib/puppet/parser/scope.rb +176 -5
  107. data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
  108. data/lib/puppet/pops.rb +0 -8
  109. data/lib/puppet/pops/adaptable.rb +4 -1
  110. data/lib/puppet/pops/adapters.rb +38 -13
  111. data/lib/puppet/pops/binder/binder.rb +21 -17
  112. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  113. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  114. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  115. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  116. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  117. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  118. data/lib/puppet/pops/binder/injector.rb +53 -48
  119. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  120. data/lib/puppet/pops/binder/producers.rb +67 -62
  121. data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
  122. data/lib/puppet/pops/evaluator/closure.rb +84 -68
  123. data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
  124. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  125. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  126. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  127. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  128. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  129. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  130. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  131. data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
  132. data/lib/puppet/pops/issue_reporter.rb +6 -4
  133. data/lib/puppet/pops/issues.rb +34 -11
  134. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  135. data/lib/puppet/pops/loader/loader.rb +1 -1
  136. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  137. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  138. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
  139. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  140. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  141. data/lib/puppet/pops/loaders.rb +51 -9
  142. data/lib/puppet/pops/lookup.rb +14 -12
  143. data/lib/puppet/pops/merge_strategy.rb +16 -19
  144. data/lib/puppet/pops/model/factory.rb +26 -2
  145. data/lib/puppet/pops/model/model.rb +8 -8
  146. data/lib/puppet/pops/model/model_label_provider.rb +13 -7
  147. data/lib/puppet/pops/model/model_meta.rb +17 -0
  148. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  149. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  150. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  151. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  152. data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
  153. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  154. data/lib/puppet/pops/parser/lexer2.rb +26 -19
  155. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  156. data/lib/puppet/pops/parser/locator.rb +21 -0
  157. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  158. data/lib/puppet/pops/parser/slurp_support.rb +11 -7
  159. data/lib/puppet/pops/types/class_loader.rb +23 -19
  160. data/lib/puppet/pops/types/enumeration.rb +9 -26
  161. data/lib/puppet/pops/types/iterable.rb +308 -0
  162. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  163. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  164. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  165. data/lib/puppet/pops/types/type_calculator.rb +138 -381
  166. data/lib/puppet/pops/types/type_factory.rb +91 -57
  167. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  168. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  169. data/lib/puppet/pops/types/type_parser.rb +159 -112
  170. data/lib/puppet/pops/types/types.rb +2057 -1247
  171. data/lib/puppet/pops/utils.rb +11 -10
  172. data/lib/puppet/pops/validation.rb +11 -9
  173. data/lib/puppet/pops/validation/checker4_0.rb +83 -55
  174. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  175. data/lib/puppet/provider/aixobject.rb +1 -1
  176. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  177. data/lib/puppet/provider/cron/crontab.rb +1 -1
  178. data/lib/puppet/provider/exec/windows.rb +1 -1
  179. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  180. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  181. data/lib/puppet/provider/package/appdmg.rb +3 -2
  182. data/lib/puppet/provider/package/dnf.rb +1 -1
  183. data/lib/puppet/provider/package/pip.rb +5 -8
  184. data/lib/puppet/provider/package/pip3.rb +1 -1
  185. data/lib/puppet/provider/package/pkg.rb +1 -1
  186. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  187. data/lib/puppet/provider/package/pkgng.rb +13 -4
  188. data/lib/puppet/provider/package/windows.rb +1 -1
  189. data/lib/puppet/provider/package/yum.rb +1 -1
  190. data/lib/puppet/provider/package/zypper.rb +19 -0
  191. data/lib/puppet/provider/service/debian.rb +2 -2
  192. data/lib/puppet/provider/service/launchd.rb +6 -18
  193. data/lib/puppet/provider/service/systemd.rb +9 -2
  194. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  195. data/lib/puppet/provider/user/aix.rb +1 -1
  196. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  197. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  198. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  199. data/lib/puppet/reference/configuration.rb +1 -1
  200. data/lib/puppet/reference/providers.rb +1 -1
  201. data/lib/puppet/resource.rb +15 -12
  202. data/lib/puppet/resource/capability_finder.rb +20 -13
  203. data/lib/puppet/resource/catalog.rb +60 -3
  204. data/lib/puppet/resource/status.rb +11 -2
  205. data/lib/puppet/resource/type.rb +28 -38
  206. data/lib/puppet/settings.rb +1 -1
  207. data/lib/puppet/settings/config_file.rb +1 -1
  208. data/lib/puppet/settings/environment_conf.rb +13 -5
  209. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  210. data/lib/puppet/ssl/certificate_request.rb +4 -4
  211. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  212. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  213. data/lib/puppet/test/test_helper.rb +16 -4
  214. data/lib/puppet/transaction.rb +15 -2
  215. data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
  216. data/lib/puppet/transaction/report.rb +31 -1
  217. data/lib/puppet/transaction/resource_harness.rb +0 -25
  218. data/lib/puppet/type.rb +11 -11
  219. data/lib/puppet/type/augeas.rb +1 -1
  220. data/lib/puppet/type/cron.rb +12 -12
  221. data/lib/puppet/type/file.rb +91 -39
  222. data/lib/puppet/type/file/checksum_value.rb +53 -0
  223. data/lib/puppet/type/file/content.rb +26 -111
  224. data/lib/puppet/type/file/data_sync.rb +84 -0
  225. data/lib/puppet/type/file/ensure.rb +17 -14
  226. data/lib/puppet/type/file/selcontext.rb +1 -1
  227. data/lib/puppet/type/file/source.rb +103 -18
  228. data/lib/puppet/type/filebucket.rb +1 -1
  229. data/lib/puppet/type/interface.rb +8 -3
  230. data/lib/puppet/type/macauthorization.rb +1 -1
  231. data/lib/puppet/type/package.rb +6 -0
  232. data/lib/puppet/type/schedule.rb +1 -1
  233. data/lib/puppet/type/stage.rb +1 -1
  234. data/lib/puppet/type/user.rb +19 -17
  235. data/lib/puppet/type/yumrepo.rb +20 -0
  236. data/lib/puppet/util.rb +109 -22
  237. data/lib/puppet/util/autoload.rb +16 -11
  238. data/lib/puppet/util/checksums.rb +74 -31
  239. data/lib/puppet/util/execution.rb +1 -1
  240. data/lib/puppet/util/http_proxy.rb +72 -0
  241. data/lib/puppet/util/log.rb +2 -0
  242. data/lib/puppet/util/logging.rb +43 -1
  243. data/lib/puppet/util/monkey_patches.rb +2 -2
  244. data/lib/puppet/util/multi_match.rb +51 -0
  245. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  246. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  247. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  248. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  249. data/lib/puppet/util/plist.rb +130 -0
  250. data/lib/puppet/util/resource_template.rb +1 -1
  251. data/lib/puppet/util/run_mode.rb +2 -2
  252. data/lib/puppet/util/skip_tags.rb +9 -0
  253. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  254. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  255. data/lib/puppet/util/windows/adsi.rb +4 -4
  256. data/lib/puppet/util/windows/api_types.rb +24 -18
  257. data/lib/puppet/util/windows/com.rb +3 -3
  258. data/lib/puppet/util/windows/error.rb +1 -1
  259. data/lib/puppet/util/windows/file.rb +8 -8
  260. data/lib/puppet/util/windows/principal.rb +23 -14
  261. data/lib/puppet/util/windows/process.rb +78 -11
  262. data/lib/puppet/util/windows/registry.rb +1 -1
  263. data/lib/puppet/util/windows/root_certs.rb +5 -5
  264. data/lib/puppet/util/windows/security.rb +33 -35
  265. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  266. data/lib/puppet/util/windows/sid.rb +42 -4
  267. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  268. data/lib/puppet/util/windows/user.rb +10 -10
  269. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  270. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  271. data/lib/puppet/vendor/pathspec/README.md +1 -1
  272. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  273. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  274. data/lib/puppet/version.rb +1 -1
  275. data/lib/semver.rb +17 -1
  276. data/man/man5/puppet.conf.5 +12 -12
  277. data/man/man8/extlookup2hiera.8 +1 -1
  278. data/man/man8/puppet-agent.8 +2 -2
  279. data/man/man8/puppet-apply.8 +2 -2
  280. data/man/man8/puppet-ca.8 +2 -2
  281. data/man/man8/puppet-catalog.8 +2 -2
  282. data/man/man8/puppet-cert.8 +2 -2
  283. data/man/man8/puppet-certificate.8 +2 -2
  284. data/man/man8/puppet-certificate_request.8 +2 -2
  285. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  286. data/man/man8/puppet-config.8 +3 -3
  287. data/man/man8/puppet-describe.8 +1 -1
  288. data/man/man8/puppet-device.8 +1 -1
  289. data/man/man8/puppet-doc.8 +1 -1
  290. data/man/man8/puppet-epp.8 +2 -2
  291. data/man/man8/puppet-facts.8 +2 -2
  292. data/man/man8/puppet-file.8 +2 -2
  293. data/man/man8/puppet-filebucket.8 +2 -2
  294. data/man/man8/puppet-help.8 +2 -2
  295. data/man/man8/puppet-inspect.8 +2 -2
  296. data/man/man8/puppet-key.8 +2 -2
  297. data/man/man8/puppet-man.8 +2 -2
  298. data/man/man8/puppet-master.8 +2 -2
  299. data/man/man8/puppet-module.8 +9 -9
  300. data/man/man8/puppet-node.8 +2 -2
  301. data/man/man8/puppet-parser.8 +2 -2
  302. data/man/man8/puppet-plugin.8 +2 -2
  303. data/man/man8/puppet-report.8 +2 -2
  304. data/man/man8/puppet-resource.8 +2 -2
  305. data/man/man8/puppet-resource_type.8 +2 -2
  306. data/man/man8/puppet-status.8 +3 -3
  307. data/man/man8/puppet.8 +1 -1
  308. data/spec/fixtures/module.tar.gz +0 -0
  309. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  310. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  311. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  312. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  313. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  314. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  315. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  316. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  317. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  318. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  319. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  320. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  321. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
  322. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  323. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  324. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  325. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  326. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  327. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  328. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  329. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  330. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  331. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  332. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  333. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  334. data/spec/integration/defaults_spec.rb +14 -2
  335. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  336. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  337. data/spec/integration/node/environment_spec.rb +13 -0
  338. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  339. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  340. data/spec/integration/parser/undef_param_spec.rb +8 -0
  341. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  342. data/spec/integration/test/test_helper_spec.rb +28 -0
  343. data/spec/integration/transaction/report_spec.rb +16 -0
  344. data/spec/integration/transaction_spec.rb +11 -0
  345. data/spec/integration/type/file_spec.rb +194 -4
  346. data/spec/integration/type/package_spec.rb +5 -1
  347. data/spec/integration/type/tidy_spec.rb +21 -9
  348. data/spec/integration/util/execution_spec.rb +22 -0
  349. data/spec/integration/util/windows/principal_spec.rb +90 -4
  350. data/spec/integration/util/windows/process_spec.rb +31 -0
  351. data/spec/integration/util/windows/security_spec.rb +6 -6
  352. data/spec/integration/util/windows/user_spec.rb +1 -1
  353. data/spec/integration/util_spec.rb +49 -27
  354. data/spec/lib/puppet_spec/compiler.rb +17 -0
  355. data/spec/lib/puppet_spec/files.rb +2 -2
  356. data/spec/lib/puppet_spec/pops.rb +13 -0
  357. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  358. data/spec/shared_contexts/types_setup.rb +96 -0
  359. data/spec/unit/agent_spec.rb +1 -0
  360. data/spec/unit/application/agent_spec.rb +10 -0
  361. data/spec/unit/application/apply_spec.rb +9 -0
  362. data/spec/unit/configurer/downloader_spec.rb +5 -5
  363. data/spec/unit/configurer_spec.rb +271 -39
  364. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  365. data/spec/unit/defaults_spec.rb +15 -0
  366. data/spec/unit/environments_spec.rb +24 -4
  367. data/spec/unit/face/parser_spec.rb +43 -2
  368. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  369. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  370. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  371. data/spec/unit/file_system_spec.rb +26 -0
  372. data/spec/unit/functions/assert_type_spec.rb +36 -2
  373. data/spec/unit/functions/defined_spec.rb +2 -2
  374. data/spec/unit/functions/epp_spec.rb +11 -3
  375. data/spec/unit/functions/lookup_spec.rb +58 -13
  376. data/spec/unit/functions/regsubst_spec.rb +1 -1
  377. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  378. data/spec/unit/functions/step_spec.rb +113 -0
  379. data/spec/unit/functions/type_spec.rb +35 -0
  380. data/spec/unit/functions4_spec.rb +61 -5
  381. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  382. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  383. data/spec/unit/indirector/indirection_spec.rb +1 -1
  384. data/spec/unit/info_service_spec.rb +94 -32
  385. data/spec/unit/module_spec.rb +14 -0
  386. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  387. data/spec/unit/network/authstore_spec.rb +1 -1
  388. data/spec/unit/network/http/connection_spec.rb +1 -0
  389. data/spec/unit/network/http/pool_spec.rb +30 -0
  390. data/spec/unit/node_spec.rb +1 -1
  391. data/spec/unit/parser/compiler_spec.rb +16 -0
  392. data/spec/unit/parser/scope_spec.rb +28 -11
  393. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  394. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  395. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
  396. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  397. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  398. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  399. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  400. data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
  401. data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
  402. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  403. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  404. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  405. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  406. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  407. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  408. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  409. data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
  410. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  411. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  412. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  413. data/spec/unit/pops/types/types_spec.rb +241 -0
  414. data/spec/unit/pops/validator/validator_spec.rb +100 -43
  415. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  416. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  417. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  418. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  419. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  420. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  421. data/spec/unit/provider/package/pip_spec.rb +47 -34
  422. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  423. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  424. data/spec/unit/provider/package/yum_spec.rb +11 -0
  425. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  426. data/spec/unit/provider/service/launchd_spec.rb +17 -35
  427. data/spec/unit/provider/service/systemd_spec.rb +7 -0
  428. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  429. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  430. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  431. data/spec/unit/resource/catalog_spec.rb +33 -1
  432. data/spec/unit/resource/type_spec.rb +149 -7
  433. data/spec/unit/resource_spec.rb +96 -57
  434. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  435. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  436. data/spec/unit/transaction/report_spec.rb +27 -0
  437. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  438. data/spec/unit/transaction_spec.rb +5 -0
  439. data/spec/unit/type/file/checksum_spec.rb +6 -0
  440. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  441. data/spec/unit/type/file/content_spec.rb +12 -193
  442. data/spec/unit/type/file/source_spec.rb +211 -119
  443. data/spec/unit/type/file_spec.rb +133 -34
  444. data/spec/unit/type/interface_spec.rb +32 -0
  445. data/spec/unit/type/macauthorization_spec.rb +4 -1
  446. data/spec/unit/type/yumrepo_spec.rb +2 -2
  447. data/spec/unit/util/filetype_spec.rb +1 -1
  448. data/spec/unit/util/http_proxy_spec.rb +2 -2
  449. data/spec/unit/util/log/destinations_spec.rb +0 -2
  450. data/spec/unit/util/logging_spec.rb +69 -0
  451. data/spec/unit/util/multi_match_spec.rb +39 -0
  452. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  453. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  454. data/spec/unit/util/plist_spec.rb +110 -0
  455. data/spec/unit/util/resource_template_spec.rb +2 -2
  456. data/spec/unit/util/run_mode_spec.rb +27 -3
  457. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  458. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  459. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  460. data/spec/unit/util/windows/sid_spec.rb +1 -1
  461. data/spec/unit/util_spec.rb +123 -13
  462. data/tasks/cfpropertylist.rake +15 -0
  463. metadata +114 -26
  464. data/lib/puppet/vendor/load_plist.rb +0 -1
  465. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  466. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  467. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  468. data/lib/puppet/vendor/plist/README +0 -36
  469. data/lib/puppet/vendor/plist/Rakefile +0 -144
  470. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  471. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  472. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  473. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  474. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  475. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  476. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  477. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  478. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  479. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  480. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  481. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  482. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  483. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  484. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  485. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  486. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  487. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -91,7 +91,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
91
91
 
92
92
  updates = Hash.new { |h, k| h[k] = [] }
93
93
  body.split.each_slice(3) do |tuple|
94
- break if tuple[0] =~ /^(Obsoleting|Security:)/
94
+ break if tuple[0] =~ /^(Obsoleting|Security:|Update)/
95
95
  hash = update_to_hash(*tuple[0..1])
96
96
  # Create entries for both the package name without a version and a
97
97
  # version since yum considers those as mostly interchangeable.
@@ -123,4 +123,23 @@ Puppet::Type.type(:package).provide :zypper, :parent => :rpm do
123
123
  # zypper install can be used for update, too
124
124
  self.install
125
125
  end
126
+
127
+ def uninstall
128
+ #extract version numbers and convert to integers
129
+ major, minor, patch = zypper_version.scan(/\d+/).map{ |x| x.to_i }
130
+
131
+ if major < 1
132
+ super
133
+ else
134
+ options = [:remove, '--no-confirm']
135
+ if major == 1 && minor < 6
136
+ options << '--force-resolution'
137
+ end
138
+
139
+ options << @resource[:name]
140
+
141
+ zypper *options
142
+ end
143
+
144
+ end
126
145
  end
@@ -12,7 +12,7 @@ Puppet::Type.type(:service).provide :debian, :parent => :init do
12
12
 
13
13
  commands :update_rc => "/usr/sbin/update-rc.d"
14
14
  # note this isn't being used as a command until
15
- # http://projects.reductivelabs.com/issues/2538
15
+ # https://projects.puppetlabs.com/issues/2538
16
16
  # is resolved.
17
17
  commands :invoke_rc => "/usr/sbin/invoke-rc.d"
18
18
  commands :service => "/usr/sbin/service"
@@ -32,7 +32,7 @@ Puppet::Type.type(:service).provide :debian, :parent => :init do
32
32
 
33
33
  def enabled?
34
34
  # TODO: Replace system call when Puppet::Util::Execution.execute gives us a way
35
- # to determine exit status. http://projects.reductivelabs.com/issues/2538
35
+ # to determine exit status. https://projects.puppetlabs.com/issues/2538
36
36
  system("/usr/sbin/invoke-rc.d", "--quiet", "--query", @resource[:name], "start")
37
37
 
38
38
  # 104 is the exit status when you query start an enabled service.
@@ -1,4 +1,4 @@
1
- require 'plist'
1
+ require 'puppet/util/plist' if Puppet.features.cfpropertylist?
2
2
  Puppet::Type.type(:service).provide :launchd, :parent => :base do
3
3
  desc <<-'EOT'
4
4
  This provider manages jobs with `launchd`, which is the default service
@@ -6,7 +6,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
6
6
 
7
7
  For `launchd` documentation, see:
8
8
 
9
- * <http://developer.apple.com/macosx/launchd.html>
9
+ * <https://developer.apple.com/macosx/launchd.html>
10
10
  * <http://launchd.macosforge.org/>
11
11
 
12
12
  This provider reads plists out of the following directories:
@@ -42,10 +42,10 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
42
42
  include Puppet::Util::Warnings
43
43
 
44
44
  commands :launchctl => "/bin/launchctl"
45
- commands :plutil => "/usr/bin/plutil"
46
45
 
47
46
  defaultfor :operatingsystem => :darwin
48
47
  confine :operatingsystem => :darwin
48
+ confine :feature => :cfpropertylist
49
49
 
50
50
  has_feature :enableable
51
51
  has_feature :refreshable
@@ -193,19 +193,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
193
193
  # Read a plist, whether its format is XML or in Apple's "binary1"
194
194
  # format.
195
195
  def self.read_plist(path)
196
- begin
197
- return Plist::parse_xml(path)
198
- rescue ArgumentError => detail
199
- Puppet.debug("Error reading #{path}: #{detail}. Retrying with plutil.")
200
- end
201
-
202
- begin
203
- Plist::parse_xml(plutil('-convert', 'xml1', '-o', '/dev/stdout', path))
204
- rescue Puppet::ExecutionFailure => detail
205
- Puppet.warning("Cannot read file #{path}; Puppet is skipping it. \n" +
206
- "Details: #{detail}")
207
- return nil
208
- end
196
+ Puppet::Util::Plist.read_plist_file(path)
209
197
  end
210
198
 
211
199
  # Clean out the @property_hash variable containing the cached list of services
@@ -328,7 +316,7 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
328
316
  else
329
317
  overrides[resource[:name]] = false
330
318
  end
331
- Plist::Emit.save_plist(overrides, self.class.launchd_overrides)
319
+ Puppet::Util::Plist.write_plist_file(overrides, self.class.launchd_overrides)
332
320
  end
333
321
 
334
322
  def disable
@@ -338,6 +326,6 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
338
326
  else
339
327
  overrides[resource[:name]] = true
340
328
  end
341
- Plist::Emit.save_plist(overrides, self.class.launchd_overrides)
329
+ Puppet::Util::Plist.write_plist_file(overrides, self.class.launchd_overrides)
342
330
  end
343
331
  end
@@ -5,14 +5,21 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
5
5
 
6
6
  commands :systemctl => "systemctl"
7
7
 
8
- confine :exists => "/run/systemd/system"
8
+ if Facter.value(:osfamily).downcase == 'debian'
9
+ # With multiple init systems on Debian, it is possible to have
10
+ # pieces of systemd around (e.g. systemctl) but not really be
11
+ # using systemd. We do not do this on other platforms as it can
12
+ # cause issues when running in a chroot without /run mounted
13
+ # (PUP-5577)
14
+ confine :exists => "/run/systemd/system"
15
+ end
9
16
 
10
17
  defaultfor :osfamily => [:archlinux]
11
18
  defaultfor :osfamily => :redhat, :operatingsystemmajrelease => "7"
12
19
  defaultfor :osfamily => :redhat, :operatingsystem => :fedora
13
20
  defaultfor :osfamily => :suse
14
21
  defaultfor :operatingsystem => :debian, :operatingsystemmajrelease => "8"
15
- defaultfor :operatingsystem => :ubuntu, :operatingsystemmajrelease => ["15.04","15.10"]
22
+ defaultfor :operatingsystem => :ubuntu, :operatingsystemmajrelease => ["15.04","15.10","16.04"]
16
23
 
17
24
  def self.instances
18
25
  i = []
@@ -8,7 +8,7 @@ Puppet::Type.type(:sshkey).provide(
8
8
  desc "Parse and generate host-wide known hosts files for SSH."
9
9
 
10
10
  text_line :comment, :match => /^#/
11
- text_line :blank, :match => /^\s+/
11
+ text_line :blank, :match => /^\s*$/
12
12
 
13
13
  record_line :parsed, :fields => %w{name type key},
14
14
  :post_parse => proc { |hash|
@@ -7,7 +7,7 @@
7
7
  # but puppet does not allow it. There is a ticket open for that (#5431)
8
8
  # - AIX maximum password age is in WEEKs, not days
9
9
  #
10
- # See http://docs.puppetlabs.com/guides/provider_development.html
10
+ # See https://docs.puppetlabs.com/guides/provider_development.html
11
11
  # for more information
12
12
  #
13
13
  # Author:: Hector Rivas Gandara <keymon@gmail.com>
@@ -1,5 +1,5 @@
1
1
  require 'puppet'
2
- require 'plist'
2
+ require 'puppet/util/plist' if Puppet.features.cfpropertylist?
3
3
  require 'base64'
4
4
 
5
5
  Puppet::Type.type(:user).provide :directoryservice do
@@ -13,11 +13,11 @@ Puppet::Type.type(:user).provide :directoryservice do
13
13
  commands :uuidgen => '/usr/bin/uuidgen'
14
14
  commands :dsimport => '/usr/bin/dsimport'
15
15
  commands :dscl => '/usr/bin/dscl'
16
- commands :plutil => '/usr/bin/plutil'
17
16
  commands :dscacheutil => '/usr/bin/dscacheutil'
18
17
 
19
18
  # Provider confines and defaults
20
19
  confine :operatingsystem => :darwin
20
+ confine :feature => :cfpropertylist
21
21
  defaultfor :operatingsystem => :darwin
22
22
 
23
23
  # Need this to create getter/setter methods automagically
@@ -91,7 +91,7 @@ Puppet::Type.type(:user).provide :directoryservice do
91
91
  # Return an array of hashes containing information about every user on
92
92
  # the system.
93
93
  def self.get_all_users
94
- Plist.parse_xml(dscl '-plist', '.', 'readall', '/Users')
94
+ Puppet::Util::Plist.parse_plist(dscl '-plist', '.', 'readall', '/Users')
95
95
  end
96
96
 
97
97
  # This method accepts an individual user plist, passed as a hash, and
@@ -164,14 +164,14 @@ Puppet::Type.type(:user).provide :directoryservice do
164
164
  # Use dscl to retrieve an array of hashes containing attributes about all
165
165
  # of the local groups on the machine.
166
166
  def self.get_list_of_groups
167
- @groups ||= Plist.parse_xml(dscl '-plist', '.', 'readall', '/Groups')
167
+ @groups ||= Puppet::Util::Plist.parse_plist(dscl '-plist', '.', 'readall', '/Groups')
168
168
  end
169
169
 
170
170
  # Perform a dscl lookup at the path specified for the specific keyname
171
171
  # value. The value returned is the first item within the array returned
172
172
  # from dscl
173
173
  def self.get_attribute_from_dscl(path, username, keyname)
174
- Plist.parse_xml(dscl '-plist', '.', 'read', "/#{path}/#{username}", keyname)
174
+ Puppet::Util::Plist.parse_plist(dscl '-plist', '.', 'read', "/#{path}/#{username}", keyname)
175
175
  end
176
176
 
177
177
  # The plist embedded in the ShadowHashData key is a binary plist. The
@@ -179,40 +179,25 @@ Puppet::Type.type(:user).provide :directoryservice do
179
179
  # extract the binary plist, convert it to XML, and return it.
180
180
  def self.get_embedded_binary_plist(shadow_hash_data)
181
181
  embedded_binary_plist = Array(shadow_hash_data['dsAttrTypeNative:ShadowHashData'][0].delete(' ')).pack('H*')
182
- convert_binary_to_xml(embedded_binary_plist)
183
- end
184
-
185
- # This method will accept a hash that has been returned from Plist::parse_xml
186
- # and convert it to a binary plist (string value).
187
- def self.convert_xml_to_binary(plist_data)
188
- Puppet.debug('Converting XML plist to binary')
189
- Puppet.debug('Executing: \'plutil -convert binary1 -o - -\'')
190
- IO.popen('plutil -convert binary1 -o - -', 'r+') do |io|
191
- io.write Plist::Emit.dump(plist_data)
192
- io.close_write
193
- @converted_plist = io.read
194
- end
195
- @converted_plist
196
- end
197
-
198
- # This method will accept a binary plist (as a string) and convert it to a
199
- # hash via Plist::parse_xml.
200
- def self.convert_binary_to_xml(plist_data)
201
- Puppet.debug('Converting binary plist to XML')
202
- Puppet.debug('Executing: \'plutil -convert xml1 -o - -\'')
203
- IO.popen('plutil -convert xml1 -o - -', 'r+') do |io|
204
- io.write plist_data
205
- io.close_write
206
- @converted_plist = io.read
207
- end
208
- Puppet.debug('Converting XML values to a hash.')
209
- Plist::parse_xml(@converted_plist)
182
+ convert_binary_to_hash(embedded_binary_plist)
183
+ end
184
+
185
+ # This method will accept a hash and convert it to a binary plist (string value).
186
+ def self.convert_hash_to_binary(plist_data)
187
+ Puppet.debug('Converting plist hash to binary')
188
+ Puppet::Util::Plist.dump_plist(plist_data, :binary)
189
+ end
190
+
191
+ # This method will accept a binary plist (as a string) and convert it to a hash.
192
+ def self.convert_binary_to_hash(plist_data)
193
+ Puppet.debug('Converting binary plist to hash')
194
+ Puppet::Util::Plist.parse_plist(plist_data)
210
195
  end
211
196
 
212
197
  # The salted-SHA512 password hash in 10.7 is stored in the 'SALTED-SHA512'
213
198
  # key as binary data. That data is extracted and converted to a hex string.
214
199
  def self.get_salted_sha512(embedded_binary_plist)
215
- embedded_binary_plist['SALTED-SHA512'].string.unpack("H*")[0]
200
+ embedded_binary_plist['SALTED-SHA512'].unpack("H*")[0]
216
201
  end
217
202
 
218
203
  # This method reads the passed embedded_binary_plist hash and returns values
@@ -222,7 +207,7 @@ Puppet::Type.type(:user).provide :directoryservice do
222
207
  def self.get_salted_sha512_pbkdf2(field, embedded_binary_plist)
223
208
  case field
224
209
  when 'salt', 'entropy'
225
- embedded_binary_plist['SALTED-SHA512-PBKDF2'][field].string.unpack('H*').first
210
+ embedded_binary_plist['SALTED-SHA512-PBKDF2'][field].unpack('H*').first
226
211
  when 'iterations'
227
212
  Integer(embedded_binary_plist['SALTED-SHA512-PBKDF2'][field])
228
213
  else
@@ -549,15 +534,16 @@ Puppet::Type.type(:user).provide :directoryservice do
549
534
  def get_users_plist(username)
550
535
  # This method will retrieve the data stored in a user's plist and
551
536
  # return it as a native Ruby hash.
552
- Plist::parse_xml(plutil('-convert', 'xml1', '-o', '/dev/stdout', "#{users_plist_dir}/#{username}.plist"))
537
+ path = "#{users_plist_dir}/#{username}.plist"
538
+ Puppet::Util::Plist.read_plist_file(path)
553
539
  end
554
540
 
555
541
  # This method will return the binary plist that's embedded in the
556
542
  # ShadowHashData key of a user's plist, or false if it doesn't exist.
557
543
  def get_shadow_hash_data(users_plist)
558
544
  if users_plist['ShadowHashData']
559
- password_hash_plist = users_plist['ShadowHashData'][0].string
560
- self.class.convert_binary_to_xml(password_hash_plist)
545
+ password_hash_plist = users_plist['ShadowHashData'][0]
546
+ self.class.convert_binary_to_hash(password_hash_plist)
561
547
  else
562
548
  false
563
549
  end
@@ -568,22 +554,13 @@ Puppet::Type.type(:user).provide :directoryservice do
568
554
  # into the ShadowHashData key of the user's plist.
569
555
  def set_shadow_hash_data(users_plist, binary_plist)
570
556
  if users_plist.has_key?('ShadowHashData')
571
- users_plist['ShadowHashData'][0].string = binary_plist
557
+ users_plist['ShadowHashData'][0] = binary_plist
572
558
  else
573
- users_plist['ShadowHashData'] = [new_stringio_object(binary_plist)]
559
+ users_plist['ShadowHashData'] = [binary_plist]
574
560
  end
575
561
  write_users_plist_to_disk(users_plist)
576
562
  end
577
563
 
578
- # This method returns a new StringIO object. Why does it exist?
579
- # Well, StringIO objects have their own 'serial number', so when
580
- # writing rspec tests it's difficult to compare StringIO objects
581
- # due to this serial number. If this action is wrapped in its own
582
- # method, it can be mocked for easier testing.
583
- def new_stringio_object(value = '')
584
- StringIO.new(value)
585
- end
586
-
587
564
  # This method accepts an argument of a hex password hash, and base64
588
565
  # decodes it into a format that OS X 10.7 and 10.8 will store
589
566
  # in the user's plist.
@@ -598,17 +575,17 @@ Puppet::Type.type(:user).provide :directoryservice do
598
575
  def set_salted_sha512(users_plist, shadow_hash_data, value)
599
576
  unless shadow_hash_data
600
577
  shadow_hash_data = Hash.new
601
- shadow_hash_data['SALTED-SHA512'] = new_stringio_object
578
+ shadow_hash_data['SALTED-SHA512'] = ''
602
579
  end
603
- shadow_hash_data['SALTED-SHA512'].string = base64_decode_string(value)
604
- binary_plist = self.class.convert_xml_to_binary(shadow_hash_data)
580
+ shadow_hash_data['SALTED-SHA512'] = base64_decode_string(value)
581
+ binary_plist = self.class.convert_hash_to_binary(shadow_hash_data)
605
582
  set_shadow_hash_data(users_plist, binary_plist)
606
583
  end
607
584
 
608
585
  # This method accepts a passed value and one of three fields: 'salt',
609
586
  # 'entropy', or 'iterations'. These fields correspond with the fields
610
587
  # utilized in a PBKDF2 password hashing system
611
- # (see http://en.wikipedia.org/wiki/PBKDF2 ) where 'entropy' is the
588
+ # (see https://en.wikipedia.org/wiki/PBKDF2 ) where 'entropy' is the
612
589
  # password hash, 'salt' is the password hash salt value, and 'iterations'
613
590
  # is an integer recommended to be > 10,000. The remaining arguments are
614
591
  # the user's plist itself, and the shadow_hash_data hash containing the
@@ -618,8 +595,7 @@ Puppet::Type.type(:user).provide :directoryservice do
618
595
  shadow_hash_data['SALTED-SHA512-PBKDF2'] = Hash.new unless shadow_hash_data['SALTED-SHA512-PBKDF2']
619
596
  case field
620
597
  when 'salt', 'entropy'
621
- shadow_hash_data['SALTED-SHA512-PBKDF2'][field] = new_stringio_object unless shadow_hash_data['SALTED-SHA512-PBKDF2'][field]
622
- shadow_hash_data['SALTED-SHA512-PBKDF2'][field].string = base64_decode_string(value)
598
+ shadow_hash_data['SALTED-SHA512-PBKDF2'][field] = base64_decode_string(value)
623
599
  when 'iterations'
624
600
  shadow_hash_data['SALTED-SHA512-PBKDF2'][field] = Integer(value)
625
601
  else
@@ -633,15 +609,14 @@ Puppet::Type.type(:user).provide :directoryservice do
633
609
  # Convert shadow_hash_data to a binary plist, and call the
634
610
  # set_shadow_hash_data method to serialize and write the data
635
611
  # back to the user's plist.
636
- binary_plist = self.class.convert_xml_to_binary(shadow_hash_data)
612
+ binary_plist = self.class.convert_hash_to_binary(shadow_hash_data)
637
613
  set_shadow_hash_data(users_plist, binary_plist)
638
614
  end
639
615
 
640
616
  # This method will accept a plist in XML format, save it to disk, convert
641
617
  # the plist to a binary format, and flush the dscl cache.
642
618
  def write_users_plist_to_disk(users_plist)
643
- Plist::Emit.save_plist(users_plist, "#{users_plist_dir}/#{@resource.name}.plist")
644
- plutil'-convert', 'binary1', "#{users_plist_dir}/#{@resource.name}.plist"
619
+ Puppet::Util::Plist.write_plist_file(users_plist, "#{users_plist_dir}/#{@resource.name}.plist", :binary)
645
620
  end
646
621
 
647
622
  # This is a simple wrapper method for writing values to a file.
@@ -40,7 +40,7 @@ Puppet::Type.type(:zfs).provide(:zfs) do
40
40
 
41
41
  PARAMETER_UNSET_OR_NOT_AVAILABLE = '-'
42
42
 
43
- # http://docs.oracle.com/cd/E19963-01/html/821-1448/gbscy.html
43
+ # https://docs.oracle.com/cd/E19963-01/html/821-1448/gbscy.html
44
44
  # shareiscsi (added in build 120) was removed from S11 build 136
45
45
  # aclmode was removed from S11 in build 139 but it may have been added back
46
46
  # http://webcache.googleusercontent.com/search?q=cache:-p74K0DVsdwJ:developers.slashdot.org/story/11/11/09/2343258/solaris-11-released+&cd=13
@@ -48,7 +48,7 @@ Puppet::Type.type(:zpool).provide(:zpool) do
48
48
  end
49
49
 
50
50
  def get_pool_data
51
- # http://docs.oracle.com/cd/E19082-01/817-2271/gbcve/index.html
51
+ # https://docs.oracle.com/cd/E19082-01/817-2271/gbcve/index.html
52
52
  # we could also use zpool iostat -v mypool for a (little bit) cleaner output
53
53
  out = execute("zpool status #{@resource[:pool]}", :failonfail => false, :combine => false)
54
54
  zpool_data = out.lines.select { |line| line.index("\t") == 0 }.collect { |l| l.strip.split("\s")[0] }
@@ -73,7 +73,7 @@ config.header = <<EOT
73
73
 
74
74
  See the [configuration guide][confguide] for more details.
75
75
 
76
- [confguide]: http://docs.puppetlabs.com/guides/configuring.html
76
+ [confguide]: http://docs.puppetlabs.com/puppet/latest/reference/config_about_settings.html
77
77
 
78
78
  * * *
79
79
 
@@ -91,7 +91,7 @@ providers = Puppet::Util::Reference.newreference :providers, :title => "Provider
91
91
 
92
92
  ret << markdown_header(type.name.to_s + "_", 2)
93
93
 
94
- ret << "[#{type.name}](http://docs.puppetlabs.com/references/stable/type.html##{type.name})\n\n"
94
+ ret << "[#{type.name}](https://docs.puppetlabs.com/references/stable/type.html##{type.name})\n\n"
95
95
  ret << option("Default provider", default)
96
96
  ret << doctable(headers, table_data)
97
97
 
@@ -438,19 +438,22 @@ class Puppet::Resource
438
438
  end
439
439
 
440
440
  missing_arguments.collect do |param, default|
441
- # Using 'send' since this private method moved from here to type. The caller method is deprecated
442
- # and doesn't really motivate making the callee public
443
- external_value = resource_type.send(:lookup_external_default_for, param, scope)
444
-
445
- if external_value.nil? && default.nil?
446
- next
447
- elsif external_value.nil?
448
- value = default.safeevaluate(scope)
449
- else
450
- value = external_value
441
+ rtype = resource_type
442
+ if rtype.type == :hostclass
443
+ using_bound_value = false
444
+ catch(:no_such_key) do
445
+ bound_value = Puppet::Pops::Lookup.search_and_merge("#{rtype.name}::#{param}", Puppet::Pops::Lookup::Invocation.new(scope), nil)
446
+ # Assign bound value but don't let an undef trump a default expression
447
+ unless bound_value.nil? && !default.nil?
448
+ self[param.to_sym] = bound_value
449
+ using_bound_value = true
450
+ end
451
+ end
452
+ end
453
+ unless using_bound_value
454
+ next if default.nil?
455
+ self[param.to_sym] = default.safeevaluate(scope)
451
456
  end
452
-
453
- self[param.to_sym] = value
454
457
  param
455
458
  end.compact
456
459
  end
@@ -35,15 +35,10 @@ module Puppet::Resource::CapabilityFinder
35
35
  ['select_catalogs',
36
36
  ['=', 'code_id', code_id]]]]
37
37
  end
38
- query = query_terms.to_json
39
38
 
40
- Puppet.notice "Capability lookup #{cap}]: #{query}"
39
+ Puppet.notice "Capability lookup #{cap}]: #{query_terms}"
41
40
 
42
- http = Puppet::Util.const_get('Puppetdb').const_get('Http')
43
- response = http.action("/pdb/query/v4/resources?query=#{CGI.escape(query)}") do |conn, uri|
44
- conn.get(uri, { 'Accept' => 'application/json'})
45
- end
46
- json = response.body
41
+ data = query_puppetdb(query_terms)
47
42
 
48
43
  # The format of the response body is documented at
49
44
  # http://docs.puppetlabs.com/puppetdb/3.0/api/query/v4/resources.html#response-format
@@ -53,12 +48,6 @@ module Puppet::Resource::CapabilityFinder
53
48
  # ::Resource. If the array contains more than one entry, we have a
54
49
  # bug in the overall system, as we allowed multiple capabilities with
55
50
  # the same type and title to be produced in this environment.
56
- begin
57
- data = JSON.parse(json)
58
- rescue JSON::JSONError => e
59
- raise Puppet::DevError,
60
- "Invalid JSON from PuppetDB when looking up #{cap}\n#{e}\nRaw JSON was:\n#{json}"
61
- end
62
51
  unless data.is_a?(Array)
63
52
  raise Puppet::DevError,
64
53
  "Unexpected response from PuppetDB when looking up #{cap}: " +
@@ -92,4 +81,22 @@ module Puppet::Resource::CapabilityFinder
92
81
  return resource
93
82
  end
94
83
  end
84
+
85
+ def self.query_puppetdb(query)
86
+ # If using PuppetDB >= 4, use the API method query_puppetdb()
87
+ if Puppet::Util::Puppetdb.respond_to?(:query_puppetdb)
88
+ # PuppetDB 4 uses a unified query endpoint, so we have to specify what we're querying
89
+ Puppet::Util::Puppetdb.query_puppetdb(["from", "resources", query])
90
+ # For PuppetDB < 4, use the old internal method action()
91
+ else
92
+ url = "/pdb/query/v4/resource?query=#{CGI.escape(query.to_json)}"
93
+ response = Puppet::Util::Puppetdb::Http.action(url) do |conn, uri|
94
+ conn.get(uri, { 'Accept' => 'application/json'})
95
+ end
96
+ JSON.parse(response.body)
97
+ end
98
+ rescue JSON::JSONError => e
99
+ raise Puppet::DevError,
100
+ "Invalid JSON from PuppetDB when looking up #{cap}\n#{e}"
101
+ end
95
102
  end