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
@@ -196,7 +196,7 @@ class Puppet::Provider::AixObject < Puppet::Provider
196
196
  end
197
197
 
198
198
  attrs.each { |val|
199
- key = key_list.shift.downcase.to_sym
199
+ key = key_list.shift.to_sym
200
200
  properties = self.load_attribute(key, val, mapping, properties)
201
201
  }
202
202
  properties.empty? ? nil : properties
@@ -5,7 +5,7 @@
5
5
  # you may not use this file except in compliance with the License.
6
6
  # You may obtain a copy of the License at
7
7
  #
8
- # http://www.apache.org/licenses/LICENSE-2.0
8
+ # https://www.apache.org/licenses/LICENSE-2.0
9
9
  #
10
10
  # Unless required by applicable law or agreed to in writing, software
11
11
  # distributed under the License is distributed on an "AS IS" BASIS,
@@ -9,7 +9,7 @@ Puppet::Type.type(:cron).provide(:crontab, :parent => Puppet::Provider::ParsedFi
9
9
 
10
10
  text_line :blank, :match => %r{^\s*$}
11
11
 
12
- text_line :environment, :match => %r{^\s*\w+=}
12
+ text_line :environment, :match => %r{^\s*\w+\s*=}
13
13
 
14
14
  def self.filetype
15
15
  tabname = case Facter.value(:osfamily)
@@ -45,7 +45,7 @@ Puppet::Type.type(:exec).provide :windows, :parent => Puppet::Provider::Exec do
45
45
  end
46
46
 
47
47
  if resource[:path]
48
- Puppet::Util.withenv :PATH => resource[:path].join(File::PATH_SEPARATOR) do
48
+ Puppet::Util.withenv( {'PATH' => resource[:path].join(File::PATH_SEPARATOR)}, :windows) do
49
49
  return if which(exe)
50
50
  end
51
51
  end
@@ -1,5 +1,5 @@
1
1
  require 'facter'
2
- require 'plist'
2
+ require 'puppet/util/plist' if Puppet.features.cfpropertylist?
3
3
  require 'puppet'
4
4
  require 'tempfile'
5
5
 
@@ -12,6 +12,7 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
12
12
  commands :security => "/usr/bin/security"
13
13
 
14
14
  confine :operatingsystem => :darwin
15
+ confine :feature => :cfpropertylist
15
16
 
16
17
  defaultfor :operatingsystem => :darwin
17
18
 
@@ -50,7 +51,7 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
50
51
  end
51
52
 
52
53
  def populate_rules_rights
53
- auth_plist = Plist::parse_xml(AuthDB)
54
+ auth_plist = Puppet::Util::Plist.parse_plist(AuthDB)
54
55
  raise Puppet::Error.new("Cannot parse: #{AuthDB}") if not auth_plist
55
56
  self.rights = auth_plist["rights"].dup
56
57
  self.rules = auth_plist["rules"].dup
@@ -124,12 +125,12 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
124
125
  end
125
126
 
126
127
  def destroy_rule
127
- authdb = Plist::parse_xml(AuthDB)
128
+ authdb = Puppet::Util::Plist.parse_plist(AuthDB)
128
129
  authdb_rules = authdb["rules"].dup
129
130
  if authdb_rules[resource[:name]]
130
131
  begin
131
132
  authdb["rules"].delete(resource[:name])
132
- Plist::Emit.save_plist(authdb, AuthDB)
133
+ Puppet::Util::Plist.write_plist_file(authdb, AuthDB)
133
134
  rescue Errno::EACCES => e
134
135
  raise Puppet::Error.new("Error saving #{AuthDB}: #{e}", e)
135
136
  end
@@ -144,7 +145,7 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
144
145
  cmds = []
145
146
  cmds << :security << "authorizationdb" << "read" << resource[:name]
146
147
  output = execute(cmds, :failonfail => false, :combine => false)
147
- current_values = Plist::parse_xml(output)
148
+ current_values = Puppet::Util::Plist.parse_plist(output)
148
149
  current_values ||= {}
149
150
  specified_values = convert_plist_to_native_attributes(@property_hash)
150
151
 
@@ -155,7 +156,7 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
155
156
  end
156
157
 
157
158
  def flush_rule
158
- authdb = Plist::parse_xml(AuthDB)
159
+ authdb = Puppet::Util::Plist.parse_plist(AuthDB)
159
160
  authdb_rules = authdb["rules"].dup
160
161
  current_values = {}
161
162
  current_values = authdb_rules[resource[:name]] if authdb_rules[resource[:name]]
@@ -171,7 +172,7 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
171
172
  values = convert_plist_to_native_attributes(values)
172
173
  tmp = Tempfile.new('puppet_macauthorization')
173
174
  begin
174
- Plist::Emit.save_plist(values, tmp.path)
175
+ Puppet::Util::Plist.write_plist_file(values, tmp.path)
175
176
  cmds = []
176
177
  cmds << :security << "authorizationdb" << "write" << name
177
178
  execute(cmds, :failonfail => false, :combine => false, :stdinfile => tmp.path.to_s)
@@ -189,11 +190,11 @@ Puppet::Type.type(:macauthorization).provide :macauthorization, :parent => Puppe
189
190
  # support modifying rules at all so we have to twiddle the whole
190
191
  # plist... :( See Apple Bug #6386000
191
192
  values = convert_plist_to_native_attributes(values)
192
- authdb = Plist::parse_xml(AuthDB)
193
+ authdb = Puppet::Util::Plist.parse_plist(AuthDB)
193
194
  authdb["rules"][name] = values
194
195
 
195
196
  begin
196
- Plist::Emit.save_plist(authdb, AuthDB)
197
+ Puppet::Util::Plist.write_plist_file(authdb, AuthDB)
197
198
  rescue
198
199
  raise Puppet::Error.new("Error writing to: #{AuthDB}")
199
200
  end
@@ -1,6 +1,6 @@
1
1
  require 'puppet'
2
2
  require 'puppet/provider/nameservice'
3
- require 'plist'
3
+ require 'puppet/util/plist' if Puppet.features.cfpropertylist?
4
4
  require 'fileutils'
5
5
 
6
6
  class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameService
@@ -18,8 +18,8 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
18
18
  commands :dscl => "/usr/bin/dscl"
19
19
  commands :dseditgroup => "/usr/sbin/dseditgroup"
20
20
  commands :sw_vers => "/usr/bin/sw_vers"
21
- commands :plutil => '/usr/bin/plutil'
22
21
  confine :operatingsystem => :darwin
22
+ confine :feature => :cfpropertylist
23
23
  defaultfor :operatingsystem => :darwin
24
24
 
25
25
 
@@ -97,7 +97,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
97
97
  end
98
98
 
99
99
  def self.parse_dscl_plist_data(dscl_output)
100
- Plist.parse_xml(dscl_output)
100
+ Puppet::Util::Plist.parse_plist(dscl_output)
101
101
  end
102
102
 
103
103
  def self.generate_attribute_hash(input_hash, *type_properties)
@@ -160,7 +160,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
160
160
  def self.get_exec_preamble(ds_action, resource_name = nil)
161
161
  # JJM 2007-07-24
162
162
  # DSCL commands are often repetitive and contain the same positional
163
- # arguments over and over. See http://developer.apple.com/documentation/Porting/Conceptual/PortingUnix/additionalfeatures/chapter_10_section_9.html
163
+ # arguments over and over. See https://developer.apple.com/documentation/Porting/Conceptual/PortingUnix/additionalfeatures/chapter_10_section_9.html
164
164
  # for an example of what I mean.
165
165
  # This method spits out proper DSCL commands for us.
166
166
  # We EXPECT name to be @resource[:name] when called from an instance object.
@@ -192,92 +192,77 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
192
192
  Please check your password and try again.")
193
193
  end
194
194
 
195
- if Puppet::FileSystem.exist?("#{users_plist_dir}/#{resource_name}.plist")
195
+ plist_file = "#{users_plist_dir}/#{resource_name}.plist"
196
+ if Puppet::FileSystem.exist?(plist_file)
196
197
  # If a plist already exists in /var/db/dslocal/nodes/Default/users, then
197
198
  # we will need to extract the binary plist from the 'ShadowHashData'
198
199
  # key, log the new password into the resultant plist's 'SALTED-SHA512'
199
200
  # key, and then save the entire structure back.
200
- users_plist = Plist::parse_xml(plutil( '-convert', 'xml1', '-o', '/dev/stdout', \
201
- "#{users_plist_dir}/#{resource_name}.plist"))
201
+ users_plist = Puppet::Util::Plist.read_plist_file(plist_file)
202
202
 
203
- # users_plist['ShadowHashData'][0].string is actually a binary plist
203
+ # users_plist['ShadowHashData'][0] is actually a binary plist
204
204
  # that's nested INSIDE the user's plist (which itself is a binary
205
205
  # plist). If we encounter a user plist that DOESN'T have a
206
206
  # ShadowHashData field, create one.
207
207
  if users_plist['ShadowHashData']
208
- password_hash_plist = users_plist['ShadowHashData'][0].string
209
- converted_hash_plist = convert_binary_to_xml(password_hash_plist)
208
+ password_hash_plist = users_plist['ShadowHashData'][0]
209
+ converted_hash_plist = convert_binary_to_hash(password_hash_plist)
210
210
  else
211
- users_plist['ShadowHashData'] = [StringIO.new]
212
- converted_hash_plist = {'SALTED-SHA512' => StringIO.new}
211
+ users_plist['ShadowHashData'] = ''
212
+ converted_hash_plist = {'SALTED-SHA512' => ''}
213
213
  end
214
214
 
215
- # converted_hash_plist['SALTED-SHA512'].string expects a Base64 encoded
215
+ # converted_hash_plist['SALTED-SHA512'] expects a Base64 encoded
216
216
  # string. The password_hash provided as a resource attribute is a
217
217
  # hex value. We need to convert the provided hex value to a Base64
218
218
  # encoded string to nest it in the converted hash plist.
219
- converted_hash_plist['SALTED-SHA512'].string = \
219
+ converted_hash_plist['SALTED-SHA512'] = \
220
220
  password_hash.unpack('a2'*(password_hash.size/2)).collect { |i| i.hex.chr }.join
221
221
 
222
222
  # Finally, we can convert the nested plist back to binary, embed it
223
223
  # into the user's plist, and convert the resultant plist back to
224
224
  # a binary plist.
225
- changed_plist = convert_xml_to_binary(converted_hash_plist)
226
- users_plist['ShadowHashData'][0].string = changed_plist
227
- Plist::Emit.save_plist(users_plist, "#{users_plist_dir}/#{resource_name}.plist")
228
- plutil('-convert', 'binary1', "#{users_plist_dir}/#{resource_name}.plist")
225
+ changed_plist = convert_hash_to_binary(converted_hash_plist)
226
+ users_plist['ShadowHashData'][0] = changed_plist
227
+ Puppet::Util::Plist.write_plist_file(users_plist, plist_file, :binary)
229
228
  end
230
229
  end
231
230
 
232
231
  def self.get_password(guid, username)
233
- if Puppet::FileSystem.exist?("#{users_plist_dir}/#{username}.plist")
232
+ plist_file = "#{users_plist_dir}/#{username}.plist"
233
+ if Puppet::FileSystem.exist?(plist_file)
234
234
  # If a plist exists in /var/db/dslocal/nodes/Default/users, we will
235
235
  # extract the binary plist from the 'ShadowHashData' key, decode the
236
236
  # salted-SHA512 password hash, and then return it.
237
- users_plist = Plist::parse_xml(plutil('-convert', 'xml1', '-o', '/dev/stdout', "#{users_plist_dir}/#{username}.plist"))
237
+ users_plist = Puppet::Util::Plist.read_plist_file(plist_file)
238
+
238
239
  if users_plist['ShadowHashData']
239
- # users_plist['ShadowHashData'][0].string is actually a binary plist
240
+ # users_plist['ShadowHashData'][0] is actually a binary plist
240
241
  # that's nested INSIDE the user's plist (which itself is a binary
241
242
  # plist).
242
- password_hash_plist = users_plist['ShadowHashData'][0].string
243
- converted_hash_plist = convert_binary_to_xml(password_hash_plist)
243
+ password_hash_plist = users_plist['ShadowHashData'][0]
244
+ converted_hash_plist = convert_binary_to_hash(password_hash_plist)
244
245
 
245
- # converted_hash_plist['SALTED-SHA512'].string is a Base64 encoded
246
+ # converted_hash_plist['SALTED-SHA512'] is a Base64 encoded
246
247
  # string. The password_hash provided as a resource attribute is a
247
248
  # hex value. We need to convert the Base64 encoded string to a
248
249
  # hex value and provide it back to Puppet.
249
- password_hash = converted_hash_plist['SALTED-SHA512'].string.unpack("H*")[0]
250
+ password_hash = converted_hash_plist['SALTED-SHA512'].unpack("H*")[0]
250
251
  password_hash
251
252
  end
252
253
  end
253
254
  end
254
255
 
255
- # This method will accept a hash that has been returned from Plist::parse_xml
256
- # and convert it to a binary plist (string value).
257
- def self.convert_xml_to_binary(plist_data)
258
- Puppet.debug('Converting XML plist to binary')
259
- Puppet.debug('Executing: \'plutil -convert binary1 -o - -\'')
260
- IO.popen('plutil -convert binary1 -o - -', 'r+') do |io|
261
- io.write plist_data.to_plist
262
- io.close_write
263
- @converted_plist = io.read
264
- end
265
- @converted_plist
256
+ # This method will accept a hash and convert it to a binary plist (string value).
257
+ def self.convert_hash_to_binary(plist_data)
258
+ Puppet.debug('Converting plist hash to binary')
259
+ Puppet::Util::Plist.dump_plist(plist_data, :binary)
266
260
  end
267
261
 
268
- # This method will accept a binary plist (as a string) and convert it to a
269
- # hash via Plist::parse_xml.
270
- def self.convert_binary_to_xml(plist_data)
271
- Puppet.debug('Converting binary plist to XML')
272
- Puppet.debug('Executing: \'plutil -convert xml1 -o - -\'')
273
- IO.popen('plutil -convert xml1 -o - -', 'r+') do |io|
274
- io.write plist_data
275
- io.close_write
276
- @converted_plist = io.read
277
- end
278
- Puppet.debug('Converting XML values to a hash.')
279
- @plist_hash = Plist::parse_xml(@converted_plist)
280
- @plist_hash
262
+ # This method will accept a binary plist (as a string) and convert it to a hash.
263
+ def self.convert_binary_to_hash(plist_data)
264
+ Puppet.debug('Converting binary plist to hash')
265
+ Puppet::Util::Plist.parse_plist(plist_data)
281
266
  end
282
267
 
283
268
  # Unlike most other *nixes, OS X doesn't provide built in functionality
@@ -333,7 +318,7 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
333
318
  exec_arg_vector << ns_to_ds_attribute_map[:guid]
334
319
  begin
335
320
  guid_output = execute(exec_arg_vector)
336
- guid_plist = Plist.parse_xml(guid_output)
321
+ guid_plist = Puppet::Util::Plist.parse_plist(guid_output)
337
322
  # Although GeneratedUID like all DirectoryService values can be multi-valued
338
323
  # according to the schema, in practice user accounts cannot have multiple UUIDs
339
324
  # otherwise Bad Things Happen, so we just deal with the first value.
@@ -13,10 +13,12 @@
13
13
  # in /var/db/.puppet_appdmg_installed_<name>
14
14
 
15
15
  require 'puppet/provider/package'
16
+ require 'puppet/util/plist' if Puppet.features.cfpropertylist?
16
17
  Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Package) do
17
18
  desc "Package management which copies application bundles to a target."
18
19
 
19
20
  confine :operatingsystem => :darwin
21
+ confine :feature => :cfpropertylist
20
22
 
21
23
  commands :hdiutil => "/usr/bin/hdiutil"
22
24
  commands :curl => "/usr/bin/curl"
@@ -50,7 +52,6 @@ Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Packag
50
52
 
51
53
  def self.installpkgdmg(source, name)
52
54
  require 'open-uri'
53
- require 'plist'
54
55
  cached_source = source
55
56
  tmpdir = Dir.mktmpdir
56
57
  begin
@@ -67,7 +68,7 @@ Puppet::Type.type(:package).provide(:appdmg, :parent => Puppet::Provider::Packag
67
68
 
68
69
  open(cached_source) do |dmg|
69
70
  xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-mountrandom", "/tmp", dmg.path
70
- ptable = Plist::parse_xml xml_str
71
+ ptable = Puppet::Util::Plist::parse_plist(xml_str)
71
72
  # JJM Filter out all mount-paths into a single array, discard the rest.
72
73
  mounts = ptable['system-entities'].collect { |entity|
73
74
  entity['mount-point']
@@ -28,7 +28,7 @@ Puppet::Type.type(:package).provide :dnf, :parent => :yum do
28
28
  end
29
29
  end
30
30
 
31
- defaultfor :operatingsystem => :fedora, :operatingsystemmajrelease => '22'
31
+ defaultfor :operatingsystem => :fedora, :operatingsystemmajrelease => ['22', '23']
32
32
 
33
33
  # The value to pass to DNF as its error output level.
34
34
  # DNF differs from Yum slightly with regards to error outputting.
@@ -30,7 +30,8 @@ Puppet::Type.type(:package).provide :pip,
30
30
  # that's managed by `pip` or an empty array if `pip` is not available.
31
31
  def self.instances
32
32
  packages = []
33
- pip_cmd = which(cmd) or return []
33
+ pip_cmd = cmd.map { |c| which(c) }.find { |c| c != nil }
34
+ return [] unless pip_cmd
34
35
  execpipe "#{pip_cmd} freeze" do |process|
35
36
  process.collect do |line|
36
37
  next unless options = parse(line)
@@ -41,11 +42,7 @@ Puppet::Type.type(:package).provide :pip,
41
42
  end
42
43
 
43
44
  def self.cmd
44
- if Facter.value(:osfamily) == "RedHat" and Facter.value(:operatingsystemmajrelease).to_i < 7
45
- "pip-python"
46
- else
47
- "pip"
48
- end
45
+ ["pip", "pip-python"]
49
46
  end
50
47
 
51
48
  # Return structured information about a particular package or `nil` if
@@ -123,11 +120,11 @@ Puppet::Type.type(:package).provide :pip,
123
120
  def lazy_pip(*args)
124
121
  pip *args
125
122
  rescue NoMethodError => e
126
- if pathname = which(self.class.cmd)
123
+ if pathname = self.class.cmd.map { |c| which(c) }.find { |c| c != nil }
127
124
  self.class.commands :pip => pathname
128
125
  pip *args
129
126
  else
130
- raise e, "Could not locate the #{self.class.cmd} command.", e.backtrace
127
+ raise e, "Could not locate command #{self.class.cmd.join(' and ')}.", e.backtrace
131
128
  end
132
129
  end
133
130
 
@@ -13,6 +13,6 @@ Puppet::Type.type(:package).provide :pip3,
13
13
  or an array where each element is either a string or a hash."
14
14
 
15
15
  def self.cmd
16
- "pip3"
16
+ ["pip3"]
17
17
  end
18
18
  end
@@ -2,7 +2,7 @@ require 'puppet/provider/package'
2
2
 
3
3
  Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package do
4
4
  desc "OpenSolaris image packaging system. See pkg(5) for more information"
5
- # http://docs.oracle.com/cd/E19963-01/html/820-6572/managepkgs.html
5
+ # https://docs.oracle.com/cd/E19963-01/html/820-6572/managepkgs.html
6
6
  # A few notes before we start :
7
7
  # Opensolaris pkg has two slightly different formats (as of now.)
8
8
  # The first one is what is distributed with the Solaris 11 Express 11/10 dvd
@@ -9,7 +9,7 @@
9
9
  # in /var/db/.puppet_pkgdmg_installed_<name>
10
10
 
11
11
  require 'puppet/provider/package'
12
- require 'plist'
12
+ require 'puppet/util/plist' if Puppet.features.cfpropertylist?
13
13
  require 'puppet/util/http_proxy'
14
14
 
15
15
  Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Package do
@@ -36,6 +36,7 @@ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Packag
36
36
  package, you must create a new DMG with a different filename."
37
37
 
38
38
  confine :operatingsystem => :darwin
39
+ confine :feature => :cfpropertylist
39
40
  defaultfor :operatingsystem => :darwin
40
41
  commands :installer => "/usr/sbin/installer"
41
42
  commands :hdiutil => "/usr/bin/hdiutil"
@@ -102,7 +103,7 @@ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Packag
102
103
  # If you fix this to use open-uri again, you must update the docs above. -NF
103
104
  File.open(cached_source) do |dmg|
104
105
  xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-noidme", "-mountrandom", "/tmp", dmg.path
105
- hdiutil_info = Plist::parse_xml(xml_str)
106
+ hdiutil_info = Puppet::Util::Plist.parse_plist(xml_str)
106
107
  raise Puppet::Error.new("No disk entities returned by mount at #{dmg.path}") unless hdiutil_info.has_key?("system-entities")
107
108
  mounts = hdiutil_info["system-entities"].collect { |entity|
108
109
  entity["mount-point"]
@@ -20,8 +20,8 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
20
20
  pkg(['version', '-voRL='])
21
21
  end
22
22
 
23
- def self.get_latest_version(origin)
24
- if latest_version = self.get_version_list.lines.find { |l| l =~ /^#{origin} / }
23
+ def self.get_latest_version(origin, version_list)
24
+ if latest_version = version_list.lines.find { |l| l =~ /^#{origin} / }
25
25
  latest_version = latest_version.split(' ').last.split(')').first
26
26
  return latest_version
27
27
  end
@@ -32,6 +32,7 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
32
32
  packages = []
33
33
  begin
34
34
  info = self.get_query
35
+ version_list = self.get_version_list
35
36
 
36
37
  unless info
37
38
  return packages
@@ -40,7 +41,7 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
40
41
  info.lines.each do |line|
41
42
 
42
43
  name, version, origin = line.chomp.split(" ", 3)
43
- latest_version = get_latest_version(origin) || version
44
+ latest_version = get_latest_version(origin, version_list) || version
44
45
 
45
46
  pkg = {
46
47
  :ensure => version,
@@ -84,7 +85,15 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
84
85
  when true, false, Symbol
85
86
  installname = resource[:name]
86
87
  else
87
- installname = resource[:name] + '-' + resource[:ensure]
88
+ # If resource[:name] is actually an origin (e.g. 'www/curl' instead of
89
+ # just 'curl'), drop the category prefix. pkgng doesn't support version
90
+ # pinning with the origin syntax (pkg install curl-1.2.3 is valid, but
91
+ # pkg install www/curl-1.2.3 is not).
92
+ if resource[:name] =~ /\//
93
+ installname = resource[:name].split('/')[1] + '-' + resource[:ensure]
94
+ else
95
+ installname = resource[:name] + '-' + resource[:ensure]
96
+ end
88
97
  end
89
98
 
90
99
  if not source # install using default repo logic
@@ -75,7 +75,7 @@ Puppet::Type.type(:package).provide(:windows, :parent => Puppet::Provider::Packa
75
75
  check_result(output.exitstatus)
76
76
  end
77
77
 
78
- # http://msdn.microsoft.com/en-us/library/windows/desktop/aa368542(v=vs.85).aspx
78
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa368542(v=vs.85).aspx
79
79
  self::ERROR_SUCCESS = 0
80
80
  self::ERROR_SUCCESS_REBOOT_INITIATED = 1641
81
81
  self::ERROR_SUCCESS_REBOOT_REQUIRED = 3010