chef 16.0.257 → 16.2.44

Sign up to get free protection for your applications and to get access to all the features.
Files changed (389) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -1
  3. data/README.md +3 -3
  4. data/Rakefile +44 -16
  5. data/chef.gemspec +4 -4
  6. data/lib/chef/application/apply.rb +2 -2
  7. data/lib/chef/application/base.rb +1 -1
  8. data/lib/chef/application/client.rb +1 -1
  9. data/lib/chef/application/exit_code.rb +2 -2
  10. data/lib/chef/application/windows_service_manager.rb +1 -1
  11. data/lib/chef/chef_fs/chef_fs_data_store.rb +3 -3
  12. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  13. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
  14. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +1 -1
  17. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
  18. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  19. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  20. data/lib/chef/chef_fs/path_utils.rb +4 -4
  21. data/lib/chef/cookbook/chefignore.rb +1 -1
  22. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  23. data/lib/chef/cookbook/metadata.rb +2 -2
  24. data/lib/chef/cookbook_loader.rb +1 -1
  25. data/lib/chef/cookbook_manifest.rb +1 -1
  26. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  27. data/lib/chef/cookbook_version.rb +7 -7
  28. data/lib/chef/data_bag.rb +4 -4
  29. data/lib/chef/data_collector.rb +1 -1
  30. data/lib/chef/data_collector/error_handlers.rb +1 -1
  31. data/lib/chef/decorator/lazy_array.rb +2 -2
  32. data/lib/chef/deprecated.rb +5 -1
  33. data/lib/chef/digester.rb +4 -4
  34. data/lib/chef/dsl/declare_resource.rb +1 -1
  35. data/lib/chef/dsl/platform_introspection.rb +1 -1
  36. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  37. data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
  38. data/lib/chef/file_access_control.rb +1 -1
  39. data/lib/chef/formatters/base.rb +1 -1
  40. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +1 -1
  41. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
  42. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
  43. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +3 -3
  44. data/lib/chef/http.rb +18 -3
  45. data/lib/chef/http/decompressor.rb +1 -1
  46. data/lib/chef/http/http_request.rb +1 -1
  47. data/lib/chef/http/json_output.rb +1 -1
  48. data/lib/chef/http/ssl_policies.rb +18 -0
  49. data/lib/chef/json_compat.rb +1 -1
  50. data/lib/chef/key.rb +1 -1
  51. data/lib/chef/knife.rb +2 -2
  52. data/lib/chef/knife/bootstrap.rb +13 -16
  53. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  54. data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
  55. data/lib/chef/knife/bootstrap/templates/chef-full.erb +9 -9
  56. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +3 -1
  57. data/lib/chef/knife/client_bulk_delete.rb +1 -1
  58. data/lib/chef/knife/config_get.rb +1 -1
  59. data/lib/chef/knife/cookbook_delete.rb +1 -1
  60. data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
  61. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  62. data/lib/chef/knife/core/node_presenter.rb +1 -1
  63. data/lib/chef/knife/core/status_presenter.rb +1 -1
  64. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  65. data/lib/chef/knife/core/windows_bootstrap_context.rb +18 -3
  66. data/lib/chef/knife/data_bag_create.rb +1 -1
  67. data/lib/chef/knife/environment_compare.rb +1 -1
  68. data/lib/chef/knife/key_create_base.rb +1 -1
  69. data/lib/chef/knife/key_edit_base.rb +1 -1
  70. data/lib/chef/knife/list.rb +1 -1
  71. data/lib/chef/knife/node_bulk_delete.rb +1 -1
  72. data/lib/chef/knife/node_run_list_remove.rb +1 -1
  73. data/lib/chef/knife/role_bulk_delete.rb +1 -1
  74. data/lib/chef/knife/ssh.rb +2 -2
  75. data/lib/chef/knife/supermarket_install.rb +1 -1
  76. data/lib/chef/knife/supermarket_share.rb +1 -1
  77. data/lib/chef/knife/supermarket_unshare.rb +1 -1
  78. data/lib/chef/knife/{user_invite_recind.rb → user_invite_rescind.rb} +6 -6
  79. data/lib/chef/knife/yaml_convert.rb +2 -2
  80. data/lib/chef/log.rb +1 -1
  81. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  82. data/lib/chef/mixin/checksum.rb +0 -1
  83. data/lib/chef/mixin/create_path.rb +8 -8
  84. data/lib/chef/mixin/openssl_helper.rb +4 -4
  85. data/lib/chef/mixin/properties.rb +4 -2
  86. data/lib/chef/mixin/securable.rb +2 -2
  87. data/lib/chef/mixin/shell_out.rb +1 -1
  88. data/lib/chef/node/attribute.rb +2 -2
  89. data/lib/chef/node/immutable_collections.rb +1 -1
  90. data/lib/chef/node/mixin/deep_merge_cache.rb +7 -7
  91. data/lib/chef/policy_builder/policyfile.rb +1 -1
  92. data/lib/chef/powershell.rb +1 -1
  93. data/lib/chef/property.rb +2 -2
  94. data/lib/chef/provider.rb +3 -3
  95. data/lib/chef/provider/batch.rb +3 -10
  96. data/lib/chef/provider/cron.rb +2 -14
  97. data/lib/chef/provider/directory.rb +1 -1
  98. data/lib/chef/provider/execute.rb +3 -2
  99. data/lib/chef/provider/file.rb +1 -1
  100. data/lib/chef/provider/group/dscl.rb +2 -2
  101. data/lib/chef/provider/group/windows.rb +1 -1
  102. data/lib/chef/provider/ifconfig.rb +7 -7
  103. data/lib/chef/provider/launchd.rb +28 -32
  104. data/lib/chef/provider/mount/aix.rb +1 -1
  105. data/lib/chef/provider/mount/windows.rb +2 -2
  106. data/lib/chef/provider/noop.rb +1 -1
  107. data/lib/chef/provider/package/cab.rb +1 -1
  108. data/lib/chef/provider/package/chocolatey.rb +1 -1
  109. data/lib/chef/provider/package/dpkg.rb +1 -1
  110. data/lib/chef/provider/package/freebsd/base.rb +2 -1
  111. data/lib/chef/provider/package/homebrew.rb +1 -1
  112. data/lib/chef/provider/package/macports.rb +0 -2
  113. data/lib/chef/provider/package/openbsd.rb +1 -1
  114. data/lib/chef/provider/package/portage.rb +3 -2
  115. data/lib/chef/provider/package/powershell.rb +6 -2
  116. data/lib/chef/provider/package/rubygems.rb +3 -3
  117. data/lib/chef/provider/package/snap.rb +96 -27
  118. data/lib/chef/provider/package/windows.rb +27 -52
  119. data/lib/chef/provider/package/windows/msi.rb +3 -3
  120. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +1 -1
  121. data/lib/chef/provider/package/yum.rb +1 -1
  122. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  123. data/lib/chef/provider/powershell_script.rb +11 -15
  124. data/lib/chef/provider/remote_directory.rb +2 -2
  125. data/lib/chef/provider/remote_file/http.rb +4 -1
  126. data/lib/chef/provider/script.rb +4 -75
  127. data/lib/chef/provider/service/arch.rb +2 -2
  128. data/lib/chef/provider/service/debian.rb +2 -2
  129. data/lib/chef/provider/service/macosx.rb +13 -2
  130. data/lib/chef/provider/service/openbsd.rb +4 -4
  131. data/lib/chef/provider/service/redhat.rb +1 -1
  132. data/lib/chef/provider/service/simple.rb +3 -3
  133. data/lib/chef/provider/service/upstart.rb +1 -1
  134. data/lib/chef/provider/service/windows.rb +1 -1
  135. data/lib/chef/provider/subversion.rb +2 -2
  136. data/lib/chef/provider/user/aix.rb +1 -1
  137. data/lib/chef/provider/user/dscl.rb +7 -7
  138. data/lib/chef/provider/user/linux.rb +3 -3
  139. data/lib/chef/provider/user/mac.rb +15 -11
  140. data/lib/chef/provider/windows_script.rb +87 -25
  141. data/lib/chef/provider/windows_task.rb +5 -3
  142. data/lib/chef/provider/zypper_repository.rb +30 -10
  143. data/lib/chef/resource.rb +25 -14
  144. data/lib/chef/resource/alternatives.rb +65 -4
  145. data/lib/chef/resource/apt_package.rb +31 -2
  146. data/lib/chef/resource/apt_preference.rb +34 -5
  147. data/lib/chef/resource/apt_repository.rb +22 -15
  148. data/lib/chef/resource/apt_update.rb +6 -4
  149. data/lib/chef/resource/archive_file.rb +33 -12
  150. data/lib/chef/resource/bash.rb +1 -2
  151. data/lib/chef/resource/batch.rb +5 -3
  152. data/lib/chef/resource/bff_package.rb +1 -1
  153. data/lib/chef/resource/breakpoint.rb +1 -1
  154. data/lib/chef/resource/build_essential.rb +8 -4
  155. data/lib/chef/resource/cab_package.rb +1 -1
  156. data/lib/chef/resource/chef_client_cron.rb +12 -9
  157. data/lib/chef/resource/chef_client_scheduled_task.rb +22 -7
  158. data/lib/chef/resource/chef_client_systemd_timer.rb +10 -7
  159. data/lib/chef/resource/chef_gem.rb +6 -2
  160. data/lib/chef/resource/chef_handler.rb +3 -3
  161. data/lib/chef/resource/chef_sleep.rb +7 -4
  162. data/lib/chef/resource/chef_vault_secret.rb +4 -4
  163. data/lib/chef/resource/chocolatey_config.rb +5 -3
  164. data/lib/chef/resource/chocolatey_feature.rb +5 -3
  165. data/lib/chef/resource/chocolatey_package.rb +5 -3
  166. data/lib/chef/resource/chocolatey_source.rb +5 -3
  167. data/lib/chef/resource/cookbook_file.rb +3 -2
  168. data/lib/chef/resource/cron/_cron_shared.rb +98 -0
  169. data/lib/chef/resource/cron/cron.rb +46 -0
  170. data/lib/chef/resource/{cron_d.rb → cron/cron_d.rb} +28 -94
  171. data/lib/chef/resource/cron_access.rb +17 -6
  172. data/lib/chef/resource/csh.rb +1 -2
  173. data/lib/chef/resource/directory.rb +1 -1
  174. data/lib/chef/resource/dmg_package.rb +18 -15
  175. data/lib/chef/resource/dnf_package.rb +1 -1
  176. data/lib/chef/resource/dpkg_package.rb +1 -1
  177. data/lib/chef/resource/execute.rb +479 -9
  178. data/lib/chef/resource/file.rb +11 -8
  179. data/lib/chef/resource/freebsd_package.rb +2 -2
  180. data/lib/chef/resource/gem_package.rb +6 -6
  181. data/lib/chef/resource/group.rb +1 -1
  182. data/lib/chef/resource/helpers/cron_validations.rb +6 -3
  183. data/lib/chef/resource/homebrew_cask.rb +1 -1
  184. data/lib/chef/resource/homebrew_package.rb +30 -1
  185. data/lib/chef/resource/homebrew_tap.rb +1 -1
  186. data/lib/chef/resource/homebrew_update.rb +107 -0
  187. data/lib/chef/resource/hostname.rb +11 -24
  188. data/lib/chef/resource/http_request.rb +1 -1
  189. data/lib/chef/resource/ifconfig.rb +7 -7
  190. data/lib/chef/resource/ips_package.rb +1 -1
  191. data/lib/chef/resource/kernel_module.rb +15 -2
  192. data/lib/chef/resource/ksh.rb +1 -1
  193. data/lib/chef/resource/launchd.rb +5 -5
  194. data/lib/chef/resource/link.rb +4 -4
  195. data/lib/chef/resource/locale.rb +4 -4
  196. data/lib/chef/resource/log.rb +1 -1
  197. data/lib/chef/resource/macos_userdefaults.rb +15 -10
  198. data/lib/chef/resource/macosx_service.rb +1 -1
  199. data/lib/chef/resource/macports_package.rb +1 -1
  200. data/lib/chef/resource/mdadm.rb +1 -1
  201. data/lib/chef/resource/mount.rb +2 -2
  202. data/lib/chef/resource/msu_package.rb +2 -2
  203. data/lib/chef/resource/ohai.rb +1 -1
  204. data/lib/chef/resource/ohai_hint.rb +1 -1
  205. data/lib/chef/resource/openbsd_package.rb +1 -1
  206. data/lib/chef/resource/openssl_dhparam.rb +1 -1
  207. data/lib/chef/resource/openssl_ec_private_key.rb +1 -1
  208. data/lib/chef/resource/openssl_ec_public_key.rb +1 -1
  209. data/lib/chef/resource/openssl_rsa_private_key.rb +1 -1
  210. data/lib/chef/resource/openssl_rsa_public_key.rb +1 -1
  211. data/lib/chef/resource/openssl_x509_certificate.rb +1 -1
  212. data/lib/chef/resource/openssl_x509_crl.rb +1 -1
  213. data/lib/chef/resource/openssl_x509_request.rb +1 -1
  214. data/lib/chef/resource/osx_profile.rb +1 -1
  215. data/lib/chef/resource/package.rb +1 -1
  216. data/lib/chef/resource/pacman_package.rb +1 -1
  217. data/lib/chef/resource/paludis_package.rb +1 -1
  218. data/lib/chef/resource/perl.rb +1 -2
  219. data/lib/chef/resource/plist.rb +24 -5
  220. data/lib/chef/resource/portage_package.rb +1 -1
  221. data/lib/chef/resource/powershell_package.rb +1 -1
  222. data/lib/chef/resource/powershell_package_source.rb +1 -1
  223. data/lib/chef/resource/powershell_script.rb +5 -3
  224. data/lib/chef/resource/python.rb +1 -2
  225. data/lib/chef/resource/reboot.rb +1 -1
  226. data/lib/chef/resource/registry_key.rb +1 -1
  227. data/lib/chef/resource/remote_directory.rb +1 -1
  228. data/lib/chef/resource/remote_file.rb +26 -11
  229. data/lib/chef/resource/rhsm_errata.rb +1 -3
  230. data/lib/chef/resource/rhsm_errata_level.rb +1 -1
  231. data/lib/chef/resource/rhsm_register.rb +1 -2
  232. data/lib/chef/resource/rhsm_repo.rb +1 -2
  233. data/lib/chef/resource/rhsm_subscription.rb +1 -3
  234. data/lib/chef/resource/route.rb +1 -1
  235. data/lib/chef/resource/rpm_package.rb +5 -2
  236. data/lib/chef/resource/ruby.rb +1 -2
  237. data/lib/chef/resource/ruby_block.rb +1 -4
  238. data/lib/chef/resource/scm/_scm.rb +4 -3
  239. data/lib/chef/resource/scm/git.rb +2 -2
  240. data/lib/chef/resource/scm/subversion.rb +2 -2
  241. data/lib/chef/resource/script.rb +1 -1
  242. data/lib/chef/resource/service.rb +1 -1
  243. data/lib/chef/resource/smartos_package.rb +1 -1
  244. data/lib/chef/resource/snap_package.rb +1 -1
  245. data/lib/chef/resource/solaris_package.rb +1 -1
  246. data/lib/chef/resource/ssh_known_hosts_entry.rb +1 -1
  247. data/lib/chef/resource/sudo.rb +4 -4
  248. data/lib/chef/resource/swap_file.rb +2 -2
  249. data/lib/chef/resource/sysctl.rb +61 -2
  250. data/lib/chef/resource/systemd_unit.rb +2 -2
  251. data/lib/chef/resource/template.rb +1 -1
  252. data/lib/chef/resource/timezone.rb +1 -1
  253. data/lib/chef/resource/user.rb +2 -2
  254. data/lib/chef/resource/user_ulimit.rb +24 -22
  255. data/lib/chef/resource/windows_ad_join.rb +31 -2
  256. data/lib/chef/resource/windows_audit_policy.rb +227 -0
  257. data/lib/chef/resource/windows_auto_run.rb +13 -2
  258. data/lib/chef/resource/windows_certificate.rb +28 -2
  259. data/lib/chef/resource/windows_dfs_folder.rb +1 -1
  260. data/lib/chef/resource/windows_dfs_namespace.rb +1 -1
  261. data/lib/chef/resource/windows_dfs_server.rb +2 -2
  262. data/lib/chef/resource/windows_env.rb +10 -1
  263. data/lib/chef/resource/windows_feature.rb +57 -2
  264. data/lib/chef/resource/windows_feature_dism.rb +15 -2
  265. data/lib/chef/resource/windows_feature_powershell.rb +29 -2
  266. data/lib/chef/resource/windows_firewall_rule.rb +11 -7
  267. data/lib/chef/resource/windows_font.rb +13 -4
  268. data/lib/chef/resource/windows_package.rb +66 -6
  269. data/lib/chef/resource/windows_pagefile.rb +32 -4
  270. data/lib/chef/resource/windows_path.rb +18 -1
  271. data/lib/chef/resource/windows_printer.rb +26 -6
  272. data/lib/chef/resource/windows_printer_port.rb +29 -1
  273. data/lib/chef/resource/windows_script.rb +2 -16
  274. data/lib/chef/resource/windows_security_policy.rb +47 -16
  275. data/lib/chef/resource/windows_service.rb +1 -1
  276. data/lib/chef/resource/windows_share.rb +23 -3
  277. data/lib/chef/resource/windows_shortcut.rb +13 -3
  278. data/lib/chef/resource/windows_task.rb +143 -29
  279. data/lib/chef/resource/windows_uac.rb +20 -1
  280. data/lib/chef/resource/windows_user_privilege.rb +45 -3
  281. data/lib/chef/resource/windows_workgroup.rb +19 -3
  282. data/lib/chef/resource/yum_package.rb +88 -6
  283. data/lib/chef/resource/yum_repository.rb +36 -19
  284. data/lib/chef/resource/zypper_package.rb +29 -3
  285. data/lib/chef/resource/zypper_repository.rb +17 -5
  286. data/lib/chef/resource_inspector.rb +5 -4
  287. data/lib/chef/resources.rb +4 -2
  288. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  289. data/lib/chef/scan_access_control.rb +1 -1
  290. data/lib/chef/search/query.rb +1 -1
  291. data/lib/chef/shell/ext.rb +1 -1
  292. data/lib/chef/util/diff.rb +2 -2
  293. data/lib/chef/util/dsc/lcm_output_parser.rb +3 -3
  294. data/lib/chef/util/windows/net_user.rb +1 -1
  295. data/lib/chef/util/windows/volume.rb +1 -1
  296. data/lib/chef/version.rb +1 -1
  297. data/lib/chef/win32/api.rb +2 -2
  298. data/lib/chef/win32/api/error.rb +3 -1
  299. data/lib/chef/win32/api/file.rb +18 -18
  300. data/lib/chef/win32/api/net.rb +1 -0
  301. data/lib/chef/win32/file.rb +1 -1
  302. data/lib/chef/win32/mutex.rb +1 -1
  303. data/lib/chef/win32/net.rb +1 -0
  304. data/lib/chef/win32/process.rb +2 -2
  305. data/lib/chef/win32/registry.rb +2 -2
  306. data/lib/chef/win32/security.rb +1 -1
  307. data/lib/chef/win32/security/sid.rb +4 -4
  308. data/spec/data/lwrp/providers/buck_passer.rb +1 -1
  309. data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
  310. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
  311. data/spec/functional/resource/cron_spec.rb +10 -0
  312. data/spec/functional/resource/dnf_package_spec.rb +2 -2
  313. data/spec/functional/resource/git_spec.rb +6 -6
  314. data/spec/functional/resource/launchd_spec.rb +232 -0
  315. data/spec/functional/resource/link_spec.rb +3 -3
  316. data/spec/functional/resource/remote_file_spec.rb +3 -3
  317. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  318. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  319. data/spec/functional/resource/windows_task_spec.rb +12 -12
  320. data/spec/integration/knife/raw_spec.rb +4 -4
  321. data/spec/integration/knife/redirection_spec.rb +2 -2
  322. data/spec/support/chef_helpers.rb +1 -1
  323. data/spec/support/platform_helpers.rb +1 -14
  324. data/spec/support/platforms/win32/spec_service.rb +1 -1
  325. data/spec/support/shared/functional/execute_resource.rb +1 -1
  326. data/spec/support/shared/functional/file_resource.rb +1 -1
  327. data/spec/support/shared/functional/http.rb +2 -2
  328. data/spec/support/shared/functional/windows_script.rb +1 -1
  329. data/spec/support/shared/unit/execute_resource.rb +1 -1
  330. data/spec/support/shared/unit/mock_shellout.rb +1 -1
  331. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
  332. data/spec/unit/application_spec.rb +7 -0
  333. data/spec/unit/data_bag_spec.rb +1 -1
  334. data/spec/unit/file_access_control_spec.rb +1 -1
  335. data/spec/unit/http/ssl_policies_spec.rb +20 -0
  336. data/spec/unit/knife/bootstrap_spec.rb +2 -2
  337. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +7 -1
  338. data/spec/unit/knife/role_env_run_list_add_spec.rb +6 -6
  339. data/spec/unit/knife/role_env_run_list_clear_spec.rb +4 -4
  340. data/spec/unit/knife/role_env_run_list_remove_spec.rb +4 -4
  341. data/spec/unit/knife/role_env_run_list_replace_spec.rb +4 -4
  342. data/spec/unit/knife/role_env_run_list_set_spec.rb +4 -4
  343. data/spec/unit/knife/role_run_list_add_spec.rb +6 -6
  344. data/spec/unit/knife/role_run_list_clear_spec.rb +4 -4
  345. data/spec/unit/knife/role_run_list_remove_spec.rb +4 -4
  346. data/spec/unit/knife/role_run_list_replace_spec.rb +4 -4
  347. data/spec/unit/knife/role_run_list_set_spec.rb +4 -4
  348. data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
  349. data/spec/unit/mixin/shell_out_spec.rb +25 -31
  350. data/spec/unit/mixin/user_context_spec.rb +1 -9
  351. data/spec/unit/node/attribute_spec.rb +1 -1
  352. data/spec/unit/property_spec.rb +1 -1
  353. data/spec/unit/provider/apt_repository_spec.rb +27 -27
  354. data/spec/unit/provider/batch_spec.rb +130 -0
  355. data/spec/unit/provider/cron_spec.rb +9 -49
  356. data/spec/unit/provider/git_spec.rb +3 -3
  357. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  358. data/spec/unit/provider/launchd_spec.rb +8 -50
  359. data/spec/unit/provider/osx_profile_spec.rb +2 -2
  360. data/spec/unit/provider/package/msu_spec.rb +3 -3
  361. data/spec/unit/provider/package/portage_spec.rb +2 -2
  362. data/spec/unit/provider/package/powershell_spec.rb +96 -87
  363. data/spec/unit/provider/package/snap_spec.rb +1 -1
  364. data/spec/unit/provider/powershell_script_spec.rb +3 -45
  365. data/spec/unit/provider/script_spec.rb +20 -110
  366. data/spec/unit/provider/service/gentoo_service_spec.rb +1 -1
  367. data/spec/unit/provider/zypper_repository_spec.rb +75 -25
  368. data/spec/unit/provider_resolver_spec.rb +11 -11
  369. data/spec/unit/resource/archive_file_spec.rb +11 -2
  370. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +17 -7
  371. data/spec/unit/resource/cron_spec.rb +2 -2
  372. data/spec/unit/resource/helpers/cron_validations_spec.rb +5 -1
  373. data/spec/unit/resource/homebrew_update_spec.rb +30 -0
  374. data/spec/unit/resource/powershell_script_spec.rb +10 -15
  375. data/spec/unit/resource/timezone_spec.rb +1 -1
  376. data/spec/unit/resource/windows_audit_policy_spec.rb +64 -0
  377. data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
  378. data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
  379. data/spec/unit/resource/windows_package_spec.rb +10 -0
  380. data/spec/unit/resource/windows_task_spec.rb +1 -1
  381. data/spec/unit/resource/windows_uac_spec.rb +2 -2
  382. data/spec/unit/resource/yum_repository_spec.rb +21 -21
  383. data/spec/unit/resource_spec.rb +67 -1
  384. data/spec/unit/run_context_spec.rb +1 -1
  385. data/spec/unit/util/dsc/configuration_generator_spec.rb +1 -1
  386. data/spec/unit/util/threaded_job_queue_spec.rb +9 -0
  387. data/spec/unit/win32/registry_spec.rb +1 -1
  388. metadata +28 -27
  389. data/lib/chef/resource/cron.rb +0 -157
@@ -197,7 +197,7 @@ class Chef
197
197
  ::File.open("/etc/filesystems", "r").each_line do |line|
198
198
  case line
199
199
  when %r{^/.+:\s*$}
200
- if line =~ /#{Regexp.escape(@new_resource.mount_point)}+:/
200
+ if /#{Regexp.escape(@new_resource.mount_point)}+:/.match?(line)
201
201
  found_device = true
202
202
  else
203
203
  found_device = false
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require_relative "../mount"
20
- if RUBY_PLATFORM =~ /mswin|mingw32|windows/
20
+ if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
21
21
  require_relative "../../util/windows/net_use"
22
22
  require_relative "../../util/windows/volume"
23
23
  end
@@ -30,7 +30,7 @@ class Chef
30
30
  provides :mount, os: "windows"
31
31
 
32
32
  def is_volume(name)
33
- name =~ /^\\\\\?\\Volume\{[\w-]+\}\\$/ ? true : false
33
+ /^\\\\\?\\Volume\{[\w-]+\}\\$/.match?(name) ? true : false
34
34
  end
35
35
 
36
36
  def initialize(new_resource, run_context)
@@ -26,7 +26,7 @@ class Chef
26
26
  end
27
27
 
28
28
  def method_missing(method_sym, *arguments, &block)
29
- if method_sym.to_s =~ /^action_/
29
+ if /^action_/.match?(method_sym.to_s)
30
30
  logger.trace("NoOp-ing for #{method_sym}")
31
31
  else
32
32
  super
@@ -74,7 +74,7 @@ class Chef
74
74
 
75
75
  def dism_command(command)
76
76
  with_os_architecture(nil) do
77
- result = shell_out("dism.exe /Online /English #{command} /NoRestart", { timeout: new_resource.timeout })
77
+ result = shell_out("dism.exe /Online /English #{command} /NoRestart", timeout: new_resource.timeout)
78
78
  if result.exitstatus == -2146498530
79
79
  raise Chef::Exceptions::Package, "The specified package is not applicable to this image." if result.stdout.include?("0x800f081e")
80
80
 
@@ -249,7 +249,7 @@ class Chef
249
249
  end
250
250
 
251
251
  # Helper to convert choco.exe list output to a Hash
252
- # (names are downcased for case-insenstive matching)
252
+ # (names are downcased for case-insensitive matching)
253
253
  #
254
254
  # @param cmd [String] command to run
255
255
  # @return [Hash] list output converted to ruby Hash
@@ -149,7 +149,7 @@ class Chef
149
149
  resolved_source_array.all? { |s| s && ::File.exist?(s) }
150
150
  end
151
151
 
152
- # Helper to return all the nanes of the missing sources for error messages.
152
+ # Helper to return all the names of the missing sources for error messages.
153
153
  #
154
154
  # @return [Array<String>] Array of missing sources
155
155
  def missing_sources
@@ -58,7 +58,8 @@ class Chef
58
58
 
59
59
  def makefile_variable_value(variable, dir = nil)
60
60
  options = dir ? { cwd: dir } : {}
61
- make_v = shell_out!("make", "-V", variable, options.merge!(env: nil, returns: [0, 1]))
61
+ options.merge!(env: nil, returns: [0, 1])
62
+ make_v = shell_out!("make", "-V", variable, **options)
62
63
  make_v.exitstatus == 0 ? make_v.stdout.strip.split($OUTPUT_RECORD_SEPARATOR).first : nil # $\ is the line separator, i.e. newline.
63
64
  end
64
65
  end
@@ -27,7 +27,7 @@ class Chef
27
27
  allow_nils
28
28
  use_multipackage_api
29
29
 
30
- provides :package, os: "darwin", override: true
30
+ provides :package, os: "darwin"
31
31
  provides :homebrew_package
32
32
 
33
33
  include Chef::Mixin::HomebrewUser
@@ -2,8 +2,6 @@ class Chef
2
2
  class Provider
3
3
  class Package
4
4
  class Macports < Chef::Provider::Package
5
-
6
- provides :package, os: "darwin"
7
5
  provides :macports_package
8
6
 
9
7
  def load_current_resource
@@ -57,7 +57,7 @@ class Chef
57
57
  end
58
58
  requirements.assert(:all_actions) do |a|
59
59
  a.assertion do
60
- if new_resource.package_name =~ /^(.+?)--(.+)/
60
+ if /^(.+?)--(.+)/.match?(new_resource.package_name)
61
61
  !new_resource.version
62
62
  else
63
63
  true
@@ -70,7 +70,8 @@ class Chef
70
70
 
71
71
  if pkginfo.exitstatus != 0
72
72
  pkginfo.stderr.each_line do |line|
73
- if line =~ /[Uu]nqualified atom .*match.* multiple/
73
+ # cspell:disable-next-line
74
+ if /[Uu]nqualified atom .*match.* multiple/.match?(line)
74
75
  raise_error_for_query("matched multiple packages (please specify a category):\n#{pkginfo.inspect}")
75
76
  end
76
77
  end
@@ -87,7 +88,7 @@ class Chef
87
88
  end
88
89
 
89
90
  pkginfo.stdout.chomp!
90
- if pkginfo.stdout =~ /-r\d+$/
91
+ if /-r\d+$/.match?(pkginfo.stdout)
91
92
  # Latest/Best version of the package is a revision (-rX).
92
93
  @candidate_version = pkginfo.stdout.split(/(?<=-)/).last(2).join
93
94
  else
@@ -53,10 +53,13 @@ class Chef
53
53
 
54
54
  # Installs the package specified with the version passed else latest version will be installed
55
55
  def install_package(names, versions)
56
+ # To enable tls 1.2, which is disabled by default in some OS
57
+ powershell_out("[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12")
58
+
56
59
  names.each_with_index do |name, index|
57
60
  cmd = powershell_out(build_powershell_package_command("Install-Package '#{name}'", versions[index]), timeout: new_resource.timeout)
58
61
  next if cmd.nil?
59
- raise Chef::Exceptions::PowershellCmdletException, "Failed to install package due to catalog signing error, use skip_publisher_check to force install" if cmd.stderr =~ /SkipPublisherCheck/
62
+ raise Chef::Exceptions::PowershellCmdletException, "Failed to install package due to catalog signing error, use skip_publisher_check to force install" if /SkipPublisherCheck/.match?(cmd.stderr)
60
63
  end
61
64
  end
62
65
 
@@ -115,7 +118,8 @@ class Chef
115
118
  command = [command] unless command.is_a?(Array)
116
119
  cmdlet_name = command.first
117
120
  command.unshift("(")
118
- %w{-Force -ForceBootstrap}.each do |arg|
121
+ # -WarningAction SilentlyContinue is used to suppress the warnings from stdout
122
+ %w{-Force -ForceBootstrap -WarningAction SilentlyContinue}.each do |arg|
119
123
  command.push(arg)
120
124
  end
121
125
  command.push("-RequiredVersion #{version}") if version
@@ -250,7 +250,7 @@ class Chef
250
250
  private
251
251
 
252
252
  def logger
253
- Chef::Log.with_child({ subsytem: "gem_installer_environment" })
253
+ Chef::Log.with_child({ subsystem: "gem_installer_environment" })
254
254
  end
255
255
 
256
256
  end
@@ -420,7 +420,7 @@ class Chef
420
420
  end
421
421
 
422
422
  def is_omnibus?
423
- if RbConfig::CONFIG["bindir"] =~ %r{/(opscode|chef|chefdk)/embedded/bin}
423
+ if %r{/(opscode|chef|chefdk)/embedded/bin}.match?(RbConfig::CONFIG["bindir"])
424
424
  logger.trace("#{new_resource} detected omnibus installation in #{RbConfig::CONFIG["bindir"]}")
425
425
  # Omnibus installs to a static path because of linking on unix, find it.
426
426
  true
@@ -447,7 +447,7 @@ class Chef
447
447
 
448
448
  scheme = URI.parse(new_resource.source).scheme
449
449
  # URI.parse gets confused by MS Windows paths with forward slashes.
450
- scheme = nil if scheme =~ /^[a-z]$/
450
+ scheme = nil if /^[a-z]$/.match?(scheme)
451
451
  %w{http https}.include?(scheme)
452
452
  rescue URI::InvalidURIError
453
453
  logger.trace("#{new_resource} failed to parse source '#{new_resource.source}' as a URI, assuming a local path")
@@ -59,15 +59,14 @@ class Chef
59
59
  def get_current_versions
60
60
  package_name_array.each_with_index.map do |pkg, i|
61
61
  installed_version(i)
62
- end
62
+ end.compact
63
63
  end
64
64
 
65
65
  def install_package(names, versions)
66
66
  if new_resource.source
67
67
  install_snap_from_source(names, new_resource.source)
68
68
  else
69
- resolved_names = names.each_with_index.map { |name, i| available_version(i).to_s unless name.nil? }
70
- install_snaps(resolved_names)
69
+ install_snaps(names)
71
70
  end
72
71
  end
73
72
 
@@ -75,14 +74,16 @@ class Chef
75
74
  if new_resource.source
76
75
  install_snap_from_source(names, new_resource.source)
77
76
  else
78
- resolved_names = names.each_with_index.map { |name, i| available_version(i).to_s unless name.nil? }
79
- update_snaps(resolved_names)
77
+ if get_current_versions.empty?
78
+ install_snaps(names, versions)
79
+ else
80
+ update_snaps(names)
81
+ end
80
82
  end
81
83
  end
82
84
 
83
85
  def remove_package(names, versions)
84
- resolved_names = names.each_with_index.map { |name, i| installed_version(i).to_s unless name.nil? }
85
- uninstall_snaps(resolved_names)
86
+ uninstall_snaps(names)
86
87
  end
87
88
 
88
89
  alias purge_package remove_package
@@ -129,19 +130,73 @@ class Chef
129
130
  "Accept: application/json\r\n" +
130
131
  "Content-Type: application/json\r\n"
131
132
  if method == "POST"
132
- request.concat("Content-Length: #{post_data.bytesize}\r\n\r\n#{post_data}")
133
+ pdata = post_data.to_json.to_s
134
+ request.concat("Content-Length: #{pdata.bytesize}\r\n\r\n#{pdata}")
133
135
  end
134
136
  request.concat("\r\n")
135
- # While it is expected to allow clients to connect using HTTPS over a TCP socket,
136
- # at this point only a UNIX socket is supported. The socket is /run/snapd.socket
137
- # Note - UNIXSocket is not defined on windows systems
137
+
138
+ # while it is expected to allow clients to connect using https over
139
+ # a tcp socket, at this point only a unix socket is supported. the
140
+ # socket is /run/snapd.socket note - unix socket is not defined on
141
+ # windows systems
138
142
  if defined?(::UNIXSocket)
139
143
  UNIXSocket.open("/run/snapd.socket") do |socket|
140
- # Send request, read the response, split the response and parse the body
141
- socket.print(request)
142
- response = socket.read
143
- headers, body = response.split("\r\n\r\n", 2)
144
- JSON.parse(body)
144
+ # send request, read the response, split the response and parse
145
+ # the body
146
+ socket.write(request)
147
+
148
+ # WARNING!!! HERE BE DRAGONs
149
+ #
150
+ # So snapd doesn't return an EOF at the end of its body, so
151
+ # doing a normal read will just hang forever.
152
+ #
153
+ # Well, sort of. if, after it writes everything, you then send
154
+ # yet-another newline, it'll then send its EOF and promptly
155
+ # disconnect closing the pipe and preventing reading. so, you
156
+ # have to read first, and therein lies the EOF problem.
157
+ #
158
+ # So you can do non-blocking reads with selects, but it
159
+ # makes every read take about 5 seconds. If, instead, we
160
+ # read the last line char-by-char, it's about half a second.
161
+ #
162
+ # Reading a character at a time isn't efficient, and since we
163
+ # know that http headers always have a blank line after them,
164
+ # we can read lines until we find a blank line and *then* read
165
+ # a character at a time. snap returns all the json on a single
166
+ # line, so once you pass headers you must read a character a
167
+ # time.
168
+ #
169
+ # - jaymzh
170
+
171
+ Chef::Log.trace(
172
+ "snap_package[#{new_resource.package_name}]: reading headers"
173
+ )
174
+ loop do
175
+ response = socket.readline
176
+ break if response.strip.empty? # finished headers
177
+ end
178
+ Chef::Log.trace(
179
+ "snap_package[#{new_resource.package_name}]: past headers, " +
180
+ "onto the body..."
181
+ )
182
+ result = nil
183
+ body = ""
184
+ socket.each_char do |c|
185
+ body << c
186
+ # we know we're not done if we don't have a char that
187
+ # can end JSON
188
+ next unless ["}", "]"].include?(c)
189
+
190
+ begin
191
+ result = JSON.parse(body)
192
+ # if we get here, we were able to parse the json so we
193
+ # are done reading
194
+ break
195
+ rescue JSON::ParserError
196
+ next
197
+ end
198
+ end
199
+ result
145
200
  end
146
201
  end
147
202
  end
@@ -211,20 +266,22 @@ class Chef
211
266
  response.error!
212
267
  end
213
268
 
214
- def install_snaps(snap_names)
215
- response = post_snaps(snap_names, "install", new_resource.channel, new_resource.options)
216
- id = get_id_from_async_response(response)
217
- wait_for_completion(id)
269
+ def install_snaps(snap_names, versions)
270
+ snap_names.each do |snap|
271
+ response = post_snap(snap, "install", new_resource.channel, new_resource.options)
272
+ id = get_id_from_async_response(response)
273
+ wait_for_completion(id)
274
+ end
218
275
  end
219
276
 
220
277
  def update_snaps(snap_names)
221
- response = post_snaps(snap_names, "refresh", new_resource.channel, new_resource.options)
278
+ response = post_snaps(snap_names, "refresh", nil, new_resource.options)
222
279
  id = get_id_from_async_response(response)
223
280
  wait_for_completion(id)
224
281
  end
225
282
 
226
283
  def uninstall_snaps(snap_names)
227
- response = post_snaps(snap_names, "remove", new_resource.channel, new_resource.options)
284
+ response = post_snaps(snap_names, "remove", nil, new_resource.options)
228
285
  id = get_id_from_async_response(response)
229
286
  wait_for_completion(id)
230
287
  end
@@ -278,18 +335,20 @@ class Chef
278
335
  "action" => action,
279
336
  "snaps" => snap_names,
280
337
  }
281
- if %w{install refresh switch}.include?(action)
338
+ if %w{install refresh switch}.include?(action) && channel
282
339
  request["channel"] = channel
283
340
  end
284
341
 
285
342
  # No defensive handling of params
286
343
  # Snap will throw the proper exception if called improperly
287
344
  # And we can provide that exception to the end user
288
- request["classic"] = true if options["classic"]
289
- request["devmode"] = true if options["devmode"]
290
- request["jailmode"] = true if options["jailmode"]
345
+ if options
346
+ request["classic"] = true if options.include?("classic")
347
+ request["devmode"] = true if options.include?("devmode")
348
+ request["jailmode"] = true if options.include?("jailmode")
349
+ request["ignore_validation"] = true if options.include?("ignore-validation")
350
+ end
291
351
  request["revision"] = revision unless revision.nil?
292
- request["ignore_validation"] = true if options["ignore-validation"]
293
352
  request
294
353
  end
295
354
 
@@ -305,12 +364,22 @@ class Chef
305
364
  call_snap_api("POST", "/v2/snaps", json)
306
365
  end
307
366
 
367
+ def post_snap(snap_name, action, channel, options, revision = nil)
368
+ json = generate_snap_json(snap_name, action, channel, options, revision = nil)
369
+ json.delete("snaps")
370
+ call_snap_api("POST", "/v2/snaps/#{snap_name}", json)
371
+ end
372
+
308
373
  def get_latest_package_version(name, channel)
309
374
  json = call_snap_api("GET", "/v2/find?name=#{name}")
310
375
  if json["status-code"] != 200
311
376
  raise Chef::Exceptions::Package, json["result"], caller
312
377
  end
313
378
 
379
+ unless json["result"][0]["channels"]["latest/#{channel}"]
380
+ raise Chef::Exceptions::Package, "No version of #{name} in channel #{channel}", caller
381
+ end
382
+
314
383
  # Return the version matching the channel
315
384
  json["result"][0]["channels"]["latest/#{channel}"]["version"]
316
385
  end
@@ -36,6 +36,13 @@ class Chef
36
36
  require "chef/provider/package/windows/registry_uninstall_entry.rb"
37
37
 
38
38
  def define_resource_requirements
39
+ if new_resource.checksum
40
+ requirements.assert(:install) do |a|
41
+ a.assertion { new_resource.checksum == checksum(source_location) }
42
+ a.failure_message Chef::Exceptions::Package, "Checksum on resource (#{short_cksum(new_resource.checksum)}) does not match checksum on content (#{short_cksum(source_location)})"
43
+ end
44
+ end
45
+
39
46
  requirements.assert(:install) do |a|
40
47
  a.assertion { new_resource.source || msi? }
41
48
  a.failure_message Chef::Exceptions::NoWindowsPackageSource, "Source for package #{new_resource.package_name} must be specified in the resource's source property for package to be installed because the package_name property is used to test for the package installation state for this package type."
@@ -50,27 +57,15 @@ class Chef
50
57
  end
51
58
  end
52
59
 
53
- # load_current_resource is run in Chef::Provider#run_action when not in whyrun_mode?
54
60
  def load_current_resource
55
- @current_resource = Chef::Resource::WindowsPackage.new(new_resource.name)
56
- if downloadable_file_missing?
57
- logger.trace("We do not know the version of #{new_resource.source} because the file is not downloaded")
58
- # FIXME: this label should not be used. It could be set to nil. Probably what should happen is that
59
- # if the file hasn't been downloaded then load_current_resource must download the file here, and then
60
- # the else clause to set current_resource.version can always be run. Relying on a side-effect here
61
- # produces at least less readable code, if not outright buggy... (and I'm assuming that this isn't
62
- # wholly just a bug -- since if we only need the package_name to determine if its installed then we
63
- # need this, so I'm assuming we need to download the file to pull out the name in order to check
64
- # the registry -- which it still feels like we get wrong in the sense we're forcing always downloading
65
- # and then always installing(?) which violates idempotency -- and I'm having to think way too hard
66
- # about this and would need to go surfing around the code to determine what actually happens, probably
67
- # in every different package_provider...)
68
- current_resource.version(:unknown.to_s)
69
- else
70
- current_resource.version(package_provider.installed_version)
71
- new_resource.version(package_provider.package_version) if package_provider.package_version
61
+ if uri_scheme?(new_resource.source) && action == :install
62
+ download_source_file
72
63
  end
73
64
 
65
+ @current_resource = Chef::Resource::WindowsPackage.new(new_resource.name)
66
+ current_resource.version(package_provider.installed_version)
67
+ new_resource.version(package_provider.package_version) if package_provider.package_version
68
+
74
69
  current_resource
75
70
  end
76
71
 
@@ -139,17 +134,6 @@ class Chef
139
134
  end
140
135
  end
141
136
 
142
- action :install do
143
- if uri_scheme?(new_resource.source)
144
- download_source_file
145
- load_current_resource
146
- else
147
- validate_content!
148
- end
149
-
150
- super
151
- end
152
-
153
137
  # Chef::Provider::Package action_install + action_remove call install_package + remove_package
154
138
  # Pass those calls to the correct sub-provider
155
139
  def install_package(name, version)
@@ -185,7 +169,7 @@ class Chef
185
169
  # is not multipackage. The existing implementation of package_provider.installed_version should probably
186
170
  # be what `uninstall_version_array` is, and then that list should be sorted and last/first'd into the
187
171
  # current_resource.version. The current_version_array method was not intended to be overwritten by
188
- # sublasses (but ruby provides no feature to block doing so -- it is already marked as private).
172
+ # subclasses (but ruby provides no feature to block doing so -- it is already marked as private).
189
173
  #
190
174
  def current_version_array
191
175
  [ current_resource.version ]
@@ -245,6 +229,7 @@ class Chef
245
229
  end
246
230
 
247
231
  def resource_for_provider
232
+ # XXX: this is crazy
248
233
  @resource_for_provider = Chef::Resource::WindowsPackage.new(new_resource.name).tap do |r|
249
234
  r.source(Chef::Util::PathHelper.validate_path(source_location)) unless source_location.nil?
250
235
  r.cookbook_name = new_resource.cookbook_name
@@ -257,23 +242,22 @@ class Chef
257
242
  end
258
243
 
259
244
  def download_source_file
260
- source_resource.run_action(:create)
261
- logger.trace("#{new_resource} fetched source file to #{source_resource.path}")
262
- end
263
-
264
- def source_resource
265
- @source_resource ||= Chef::Resource::RemoteFile.new(default_download_cache_path, run_context).tap do |r|
266
- r.source(new_resource.source)
267
- r.cookbook_name = new_resource.cookbook_name
268
- r.checksum(new_resource.checksum)
269
- r.backup(false)
245
+ # It seems correct that this is a build_resource rather than declare_resource/DSL use since updating should not trigger a notification
246
+ # unless the downloaded file is actually installed. The case where the remote_file downloads the package but the package is already
247
+ # installed on the target should not trigger a notification since the running state did not change.
248
+ build_resource(:remote_file, default_download_cache_path) do
249
+ source(new_resource.source)
250
+ cookbook_name = new_resource.cookbook_name
251
+ checksum(new_resource.checksum)
252
+ backup(false)
270
253
 
271
254
  if new_resource.remote_file_attributes
272
255
  new_resource.remote_file_attributes.each do |(k, v)|
273
- r.send(k.to_sym, v)
256
+ send(k.to_sym, v)
274
257
  end
275
258
  end
276
- end
259
+ end.run_action(:create)
260
+ logger.trace("#{new_resource} fetched source file to #{default_download_cache_path}")
277
261
  end
278
262
 
279
263
  def default_download_cache_path
@@ -287,22 +271,13 @@ class Chef
287
271
  if new_resource.source.nil?
288
272
  nil
289
273
  elsif uri_scheme?(new_resource.source)
290
- source_resource.path
274
+ default_download_cache_path
291
275
  else
292
276
  new_source = Chef::Util::PathHelper.cleanpath(new_resource.source)
293
277
  ::File.exist?(new_source) ? new_source : nil
294
278
  end
295
279
  end
296
280
 
297
- def validate_content!
298
- if new_resource.checksum
299
- source_checksum = checksum(source_location)
300
- if new_resource.checksum.downcase != source_checksum
301
- raise Chef::Exceptions::ChecksumMismatch.new(short_cksum(new_resource.checksum), short_cksum(source_checksum))
302
- end
303
- end
304
- end
305
-
306
281
  def msi?
307
282
  return true if new_resource.installer_type == :msi
308
283