chef 16.0.257-universal-mingw32 → 16.2.44-universal-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) 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/distro/powershell/chef/chef.psm1 +3 -3
  7. data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
  8. data/lib/chef/application/apply.rb +2 -2
  9. data/lib/chef/application/base.rb +1 -1
  10. data/lib/chef/application/client.rb +1 -1
  11. data/lib/chef/application/exit_code.rb +2 -2
  12. data/lib/chef/application/windows_service_manager.rb +1 -1
  13. data/lib/chef/chef_fs/chef_fs_data_store.rb +3 -3
  14. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  17. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +1 -1
  18. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +1 -1
  19. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
  20. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  21. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  22. data/lib/chef/chef_fs/path_utils.rb +4 -4
  23. data/lib/chef/cookbook/chefignore.rb +1 -1
  24. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  25. data/lib/chef/cookbook/metadata.rb +2 -2
  26. data/lib/chef/cookbook_loader.rb +1 -1
  27. data/lib/chef/cookbook_manifest.rb +1 -1
  28. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  29. data/lib/chef/cookbook_version.rb +7 -7
  30. data/lib/chef/data_bag.rb +4 -4
  31. data/lib/chef/data_collector.rb +1 -1
  32. data/lib/chef/data_collector/error_handlers.rb +1 -1
  33. data/lib/chef/decorator/lazy_array.rb +2 -2
  34. data/lib/chef/deprecated.rb +5 -1
  35. data/lib/chef/digester.rb +4 -4
  36. data/lib/chef/dsl/declare_resource.rb +1 -1
  37. data/lib/chef/dsl/platform_introspection.rb +1 -1
  38. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  39. data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
  40. data/lib/chef/file_access_control.rb +1 -1
  41. data/lib/chef/formatters/base.rb +1 -1
  42. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +1 -1
  43. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
  44. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
  45. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +3 -3
  46. data/lib/chef/http.rb +18 -3
  47. data/lib/chef/http/decompressor.rb +1 -1
  48. data/lib/chef/http/http_request.rb +1 -1
  49. data/lib/chef/http/json_output.rb +1 -1
  50. data/lib/chef/http/ssl_policies.rb +18 -0
  51. data/lib/chef/json_compat.rb +1 -1
  52. data/lib/chef/key.rb +1 -1
  53. data/lib/chef/knife.rb +2 -2
  54. data/lib/chef/knife/bootstrap.rb +13 -16
  55. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  56. data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
  57. data/lib/chef/knife/bootstrap/templates/chef-full.erb +9 -9
  58. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +3 -1
  59. data/lib/chef/knife/client_bulk_delete.rb +1 -1
  60. data/lib/chef/knife/config_get.rb +1 -1
  61. data/lib/chef/knife/cookbook_delete.rb +1 -1
  62. data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
  63. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  64. data/lib/chef/knife/core/node_presenter.rb +1 -1
  65. data/lib/chef/knife/core/status_presenter.rb +1 -1
  66. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  67. data/lib/chef/knife/core/windows_bootstrap_context.rb +18 -3
  68. data/lib/chef/knife/data_bag_create.rb +1 -1
  69. data/lib/chef/knife/environment_compare.rb +1 -1
  70. data/lib/chef/knife/key_create_base.rb +1 -1
  71. data/lib/chef/knife/key_edit_base.rb +1 -1
  72. data/lib/chef/knife/list.rb +1 -1
  73. data/lib/chef/knife/node_bulk_delete.rb +1 -1
  74. data/lib/chef/knife/node_run_list_remove.rb +1 -1
  75. data/lib/chef/knife/role_bulk_delete.rb +1 -1
  76. data/lib/chef/knife/ssh.rb +2 -2
  77. data/lib/chef/knife/supermarket_install.rb +1 -1
  78. data/lib/chef/knife/supermarket_share.rb +1 -1
  79. data/lib/chef/knife/supermarket_unshare.rb +1 -1
  80. data/lib/chef/knife/{user_invite_recind.rb → user_invite_rescind.rb} +6 -6
  81. data/lib/chef/knife/yaml_convert.rb +2 -2
  82. data/lib/chef/log.rb +1 -1
  83. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  84. data/lib/chef/mixin/checksum.rb +0 -1
  85. data/lib/chef/mixin/create_path.rb +8 -8
  86. data/lib/chef/mixin/openssl_helper.rb +4 -4
  87. data/lib/chef/mixin/properties.rb +4 -2
  88. data/lib/chef/mixin/securable.rb +2 -2
  89. data/lib/chef/mixin/shell_out.rb +1 -1
  90. data/lib/chef/node/attribute.rb +2 -2
  91. data/lib/chef/node/immutable_collections.rb +1 -1
  92. data/lib/chef/node/mixin/deep_merge_cache.rb +7 -7
  93. data/lib/chef/policy_builder/policyfile.rb +1 -1
  94. data/lib/chef/powershell.rb +1 -1
  95. data/lib/chef/property.rb +2 -2
  96. data/lib/chef/provider.rb +3 -3
  97. data/lib/chef/provider/batch.rb +3 -10
  98. data/lib/chef/provider/cron.rb +2 -14
  99. data/lib/chef/provider/directory.rb +1 -1
  100. data/lib/chef/provider/execute.rb +3 -2
  101. data/lib/chef/provider/file.rb +1 -1
  102. data/lib/chef/provider/group/dscl.rb +2 -2
  103. data/lib/chef/provider/group/windows.rb +1 -1
  104. data/lib/chef/provider/ifconfig.rb +7 -7
  105. data/lib/chef/provider/launchd.rb +28 -32
  106. data/lib/chef/provider/mount/aix.rb +1 -1
  107. data/lib/chef/provider/mount/windows.rb +2 -2
  108. data/lib/chef/provider/noop.rb +1 -1
  109. data/lib/chef/provider/package/cab.rb +1 -1
  110. data/lib/chef/provider/package/chocolatey.rb +1 -1
  111. data/lib/chef/provider/package/dpkg.rb +1 -1
  112. data/lib/chef/provider/package/freebsd/base.rb +2 -1
  113. data/lib/chef/provider/package/homebrew.rb +1 -1
  114. data/lib/chef/provider/package/macports.rb +0 -2
  115. data/lib/chef/provider/package/openbsd.rb +1 -1
  116. data/lib/chef/provider/package/portage.rb +3 -2
  117. data/lib/chef/provider/package/powershell.rb +6 -2
  118. data/lib/chef/provider/package/rubygems.rb +3 -3
  119. data/lib/chef/provider/package/snap.rb +96 -27
  120. data/lib/chef/provider/package/windows.rb +27 -52
  121. data/lib/chef/provider/package/windows/msi.rb +3 -3
  122. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +1 -1
  123. data/lib/chef/provider/package/yum.rb +1 -1
  124. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  125. data/lib/chef/provider/powershell_script.rb +11 -15
  126. data/lib/chef/provider/remote_directory.rb +2 -2
  127. data/lib/chef/provider/remote_file/http.rb +4 -1
  128. data/lib/chef/provider/script.rb +4 -75
  129. data/lib/chef/provider/service/arch.rb +2 -2
  130. data/lib/chef/provider/service/debian.rb +2 -2
  131. data/lib/chef/provider/service/macosx.rb +13 -2
  132. data/lib/chef/provider/service/openbsd.rb +4 -4
  133. data/lib/chef/provider/service/redhat.rb +1 -1
  134. data/lib/chef/provider/service/simple.rb +3 -3
  135. data/lib/chef/provider/service/upstart.rb +1 -1
  136. data/lib/chef/provider/service/windows.rb +1 -1
  137. data/lib/chef/provider/subversion.rb +2 -2
  138. data/lib/chef/provider/user/aix.rb +1 -1
  139. data/lib/chef/provider/user/dscl.rb +7 -7
  140. data/lib/chef/provider/user/linux.rb +3 -3
  141. data/lib/chef/provider/user/mac.rb +15 -11
  142. data/lib/chef/provider/windows_script.rb +87 -25
  143. data/lib/chef/provider/windows_task.rb +5 -3
  144. data/lib/chef/provider/zypper_repository.rb +30 -10
  145. data/lib/chef/resource.rb +25 -14
  146. data/lib/chef/resource/alternatives.rb +65 -4
  147. data/lib/chef/resource/apt_package.rb +31 -2
  148. data/lib/chef/resource/apt_preference.rb +34 -5
  149. data/lib/chef/resource/apt_repository.rb +22 -15
  150. data/lib/chef/resource/apt_update.rb +6 -4
  151. data/lib/chef/resource/archive_file.rb +33 -12
  152. data/lib/chef/resource/bash.rb +1 -2
  153. data/lib/chef/resource/batch.rb +5 -3
  154. data/lib/chef/resource/bff_package.rb +1 -1
  155. data/lib/chef/resource/breakpoint.rb +1 -1
  156. data/lib/chef/resource/build_essential.rb +8 -4
  157. data/lib/chef/resource/cab_package.rb +1 -1
  158. data/lib/chef/resource/chef_client_cron.rb +12 -9
  159. data/lib/chef/resource/chef_client_scheduled_task.rb +22 -7
  160. data/lib/chef/resource/chef_client_systemd_timer.rb +10 -7
  161. data/lib/chef/resource/chef_gem.rb +6 -2
  162. data/lib/chef/resource/chef_handler.rb +3 -3
  163. data/lib/chef/resource/chef_sleep.rb +7 -4
  164. data/lib/chef/resource/chef_vault_secret.rb +4 -4
  165. data/lib/chef/resource/chocolatey_config.rb +5 -3
  166. data/lib/chef/resource/chocolatey_feature.rb +5 -3
  167. data/lib/chef/resource/chocolatey_package.rb +5 -3
  168. data/lib/chef/resource/chocolatey_source.rb +5 -3
  169. data/lib/chef/resource/cookbook_file.rb +3 -2
  170. data/lib/chef/resource/cron/_cron_shared.rb +98 -0
  171. data/lib/chef/resource/cron/cron.rb +46 -0
  172. data/lib/chef/resource/{cron_d.rb → cron/cron_d.rb} +28 -94
  173. data/lib/chef/resource/cron_access.rb +17 -6
  174. data/lib/chef/resource/csh.rb +1 -2
  175. data/lib/chef/resource/directory.rb +1 -1
  176. data/lib/chef/resource/dmg_package.rb +18 -15
  177. data/lib/chef/resource/dnf_package.rb +1 -1
  178. data/lib/chef/resource/dpkg_package.rb +1 -1
  179. data/lib/chef/resource/execute.rb +479 -9
  180. data/lib/chef/resource/file.rb +11 -8
  181. data/lib/chef/resource/freebsd_package.rb +2 -2
  182. data/lib/chef/resource/gem_package.rb +6 -6
  183. data/lib/chef/resource/group.rb +1 -1
  184. data/lib/chef/resource/helpers/cron_validations.rb +6 -3
  185. data/lib/chef/resource/homebrew_cask.rb +1 -1
  186. data/lib/chef/resource/homebrew_package.rb +30 -1
  187. data/lib/chef/resource/homebrew_tap.rb +1 -1
  188. data/lib/chef/resource/homebrew_update.rb +107 -0
  189. data/lib/chef/resource/hostname.rb +11 -24
  190. data/lib/chef/resource/http_request.rb +1 -1
  191. data/lib/chef/resource/ifconfig.rb +7 -7
  192. data/lib/chef/resource/ips_package.rb +1 -1
  193. data/lib/chef/resource/kernel_module.rb +15 -2
  194. data/lib/chef/resource/ksh.rb +1 -1
  195. data/lib/chef/resource/launchd.rb +5 -5
  196. data/lib/chef/resource/link.rb +4 -4
  197. data/lib/chef/resource/locale.rb +4 -4
  198. data/lib/chef/resource/log.rb +1 -1
  199. data/lib/chef/resource/macos_userdefaults.rb +15 -10
  200. data/lib/chef/resource/macosx_service.rb +1 -1
  201. data/lib/chef/resource/macports_package.rb +1 -1
  202. data/lib/chef/resource/mdadm.rb +1 -1
  203. data/lib/chef/resource/mount.rb +2 -2
  204. data/lib/chef/resource/msu_package.rb +2 -2
  205. data/lib/chef/resource/ohai.rb +1 -1
  206. data/lib/chef/resource/ohai_hint.rb +1 -1
  207. data/lib/chef/resource/openbsd_package.rb +1 -1
  208. data/lib/chef/resource/openssl_dhparam.rb +1 -1
  209. data/lib/chef/resource/openssl_ec_private_key.rb +1 -1
  210. data/lib/chef/resource/openssl_ec_public_key.rb +1 -1
  211. data/lib/chef/resource/openssl_rsa_private_key.rb +1 -1
  212. data/lib/chef/resource/openssl_rsa_public_key.rb +1 -1
  213. data/lib/chef/resource/openssl_x509_certificate.rb +1 -1
  214. data/lib/chef/resource/openssl_x509_crl.rb +1 -1
  215. data/lib/chef/resource/openssl_x509_request.rb +1 -1
  216. data/lib/chef/resource/osx_profile.rb +1 -1
  217. data/lib/chef/resource/package.rb +1 -1
  218. data/lib/chef/resource/pacman_package.rb +1 -1
  219. data/lib/chef/resource/paludis_package.rb +1 -1
  220. data/lib/chef/resource/perl.rb +1 -2
  221. data/lib/chef/resource/plist.rb +24 -5
  222. data/lib/chef/resource/portage_package.rb +1 -1
  223. data/lib/chef/resource/powershell_package.rb +1 -1
  224. data/lib/chef/resource/powershell_package_source.rb +1 -1
  225. data/lib/chef/resource/powershell_script.rb +5 -3
  226. data/lib/chef/resource/python.rb +1 -2
  227. data/lib/chef/resource/reboot.rb +1 -1
  228. data/lib/chef/resource/registry_key.rb +1 -1
  229. data/lib/chef/resource/remote_directory.rb +1 -1
  230. data/lib/chef/resource/remote_file.rb +26 -11
  231. data/lib/chef/resource/rhsm_errata.rb +1 -3
  232. data/lib/chef/resource/rhsm_errata_level.rb +1 -1
  233. data/lib/chef/resource/rhsm_register.rb +1 -2
  234. data/lib/chef/resource/rhsm_repo.rb +1 -2
  235. data/lib/chef/resource/rhsm_subscription.rb +1 -3
  236. data/lib/chef/resource/route.rb +1 -1
  237. data/lib/chef/resource/rpm_package.rb +5 -2
  238. data/lib/chef/resource/ruby.rb +1 -2
  239. data/lib/chef/resource/ruby_block.rb +1 -4
  240. data/lib/chef/resource/scm/_scm.rb +4 -3
  241. data/lib/chef/resource/scm/git.rb +2 -2
  242. data/lib/chef/resource/scm/subversion.rb +2 -2
  243. data/lib/chef/resource/script.rb +1 -1
  244. data/lib/chef/resource/service.rb +1 -1
  245. data/lib/chef/resource/smartos_package.rb +1 -1
  246. data/lib/chef/resource/snap_package.rb +1 -1
  247. data/lib/chef/resource/solaris_package.rb +1 -1
  248. data/lib/chef/resource/ssh_known_hosts_entry.rb +1 -1
  249. data/lib/chef/resource/sudo.rb +4 -4
  250. data/lib/chef/resource/swap_file.rb +2 -2
  251. data/lib/chef/resource/sysctl.rb +61 -2
  252. data/lib/chef/resource/systemd_unit.rb +2 -2
  253. data/lib/chef/resource/template.rb +1 -1
  254. data/lib/chef/resource/timezone.rb +1 -1
  255. data/lib/chef/resource/user.rb +2 -2
  256. data/lib/chef/resource/user_ulimit.rb +24 -22
  257. data/lib/chef/resource/windows_ad_join.rb +31 -2
  258. data/lib/chef/resource/windows_audit_policy.rb +227 -0
  259. data/lib/chef/resource/windows_auto_run.rb +13 -2
  260. data/lib/chef/resource/windows_certificate.rb +28 -2
  261. data/lib/chef/resource/windows_dfs_folder.rb +1 -1
  262. data/lib/chef/resource/windows_dfs_namespace.rb +1 -1
  263. data/lib/chef/resource/windows_dfs_server.rb +2 -2
  264. data/lib/chef/resource/windows_env.rb +10 -1
  265. data/lib/chef/resource/windows_feature.rb +57 -2
  266. data/lib/chef/resource/windows_feature_dism.rb +15 -2
  267. data/lib/chef/resource/windows_feature_powershell.rb +29 -2
  268. data/lib/chef/resource/windows_firewall_rule.rb +11 -7
  269. data/lib/chef/resource/windows_font.rb +13 -4
  270. data/lib/chef/resource/windows_package.rb +66 -6
  271. data/lib/chef/resource/windows_pagefile.rb +32 -4
  272. data/lib/chef/resource/windows_path.rb +18 -1
  273. data/lib/chef/resource/windows_printer.rb +26 -6
  274. data/lib/chef/resource/windows_printer_port.rb +29 -1
  275. data/lib/chef/resource/windows_script.rb +2 -16
  276. data/lib/chef/resource/windows_security_policy.rb +47 -16
  277. data/lib/chef/resource/windows_service.rb +1 -1
  278. data/lib/chef/resource/windows_share.rb +23 -3
  279. data/lib/chef/resource/windows_shortcut.rb +13 -3
  280. data/lib/chef/resource/windows_task.rb +143 -29
  281. data/lib/chef/resource/windows_uac.rb +20 -1
  282. data/lib/chef/resource/windows_user_privilege.rb +45 -3
  283. data/lib/chef/resource/windows_workgroup.rb +19 -3
  284. data/lib/chef/resource/yum_package.rb +88 -6
  285. data/lib/chef/resource/yum_repository.rb +36 -19
  286. data/lib/chef/resource/zypper_package.rb +29 -3
  287. data/lib/chef/resource/zypper_repository.rb +17 -5
  288. data/lib/chef/resource_inspector.rb +5 -4
  289. data/lib/chef/resources.rb +4 -2
  290. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  291. data/lib/chef/scan_access_control.rb +1 -1
  292. data/lib/chef/search/query.rb +1 -1
  293. data/lib/chef/shell/ext.rb +1 -1
  294. data/lib/chef/util/diff.rb +2 -2
  295. data/lib/chef/util/dsc/lcm_output_parser.rb +3 -3
  296. data/lib/chef/util/windows/net_user.rb +1 -1
  297. data/lib/chef/util/windows/volume.rb +1 -1
  298. data/lib/chef/version.rb +1 -1
  299. data/lib/chef/win32/api.rb +2 -2
  300. data/lib/chef/win32/api/error.rb +3 -1
  301. data/lib/chef/win32/api/file.rb +18 -18
  302. data/lib/chef/win32/api/net.rb +1 -0
  303. data/lib/chef/win32/file.rb +1 -1
  304. data/lib/chef/win32/mutex.rb +1 -1
  305. data/lib/chef/win32/net.rb +1 -0
  306. data/lib/chef/win32/process.rb +2 -2
  307. data/lib/chef/win32/registry.rb +2 -2
  308. data/lib/chef/win32/security.rb +1 -1
  309. data/lib/chef/win32/security/sid.rb +4 -4
  310. data/spec/data/lwrp/providers/buck_passer.rb +1 -1
  311. data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
  312. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
  313. data/spec/functional/resource/cron_spec.rb +10 -0
  314. data/spec/functional/resource/dnf_package_spec.rb +2 -2
  315. data/spec/functional/resource/git_spec.rb +6 -6
  316. data/spec/functional/resource/launchd_spec.rb +232 -0
  317. data/spec/functional/resource/link_spec.rb +3 -3
  318. data/spec/functional/resource/remote_file_spec.rb +3 -3
  319. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  320. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  321. data/spec/functional/resource/windows_task_spec.rb +12 -12
  322. data/spec/integration/knife/raw_spec.rb +4 -4
  323. data/spec/integration/knife/redirection_spec.rb +2 -2
  324. data/spec/support/chef_helpers.rb +1 -1
  325. data/spec/support/platform_helpers.rb +1 -14
  326. data/spec/support/platforms/win32/spec_service.rb +1 -1
  327. data/spec/support/shared/functional/execute_resource.rb +1 -1
  328. data/spec/support/shared/functional/file_resource.rb +1 -1
  329. data/spec/support/shared/functional/http.rb +2 -2
  330. data/spec/support/shared/functional/windows_script.rb +1 -1
  331. data/spec/support/shared/unit/execute_resource.rb +1 -1
  332. data/spec/support/shared/unit/mock_shellout.rb +1 -1
  333. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
  334. data/spec/unit/application_spec.rb +7 -0
  335. data/spec/unit/data_bag_spec.rb +1 -1
  336. data/spec/unit/file_access_control_spec.rb +1 -1
  337. data/spec/unit/http/ssl_policies_spec.rb +20 -0
  338. data/spec/unit/knife/bootstrap_spec.rb +2 -2
  339. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +7 -1
  340. data/spec/unit/knife/role_env_run_list_add_spec.rb +6 -6
  341. data/spec/unit/knife/role_env_run_list_clear_spec.rb +4 -4
  342. data/spec/unit/knife/role_env_run_list_remove_spec.rb +4 -4
  343. data/spec/unit/knife/role_env_run_list_replace_spec.rb +4 -4
  344. data/spec/unit/knife/role_env_run_list_set_spec.rb +4 -4
  345. data/spec/unit/knife/role_run_list_add_spec.rb +6 -6
  346. data/spec/unit/knife/role_run_list_clear_spec.rb +4 -4
  347. data/spec/unit/knife/role_run_list_remove_spec.rb +4 -4
  348. data/spec/unit/knife/role_run_list_replace_spec.rb +4 -4
  349. data/spec/unit/knife/role_run_list_set_spec.rb +4 -4
  350. data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
  351. data/spec/unit/mixin/shell_out_spec.rb +25 -31
  352. data/spec/unit/mixin/user_context_spec.rb +1 -9
  353. data/spec/unit/node/attribute_spec.rb +1 -1
  354. data/spec/unit/property_spec.rb +1 -1
  355. data/spec/unit/provider/apt_repository_spec.rb +27 -27
  356. data/spec/unit/provider/batch_spec.rb +130 -0
  357. data/spec/unit/provider/cron_spec.rb +9 -49
  358. data/spec/unit/provider/git_spec.rb +3 -3
  359. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  360. data/spec/unit/provider/launchd_spec.rb +8 -50
  361. data/spec/unit/provider/osx_profile_spec.rb +2 -2
  362. data/spec/unit/provider/package/msu_spec.rb +3 -3
  363. data/spec/unit/provider/package/portage_spec.rb +2 -2
  364. data/spec/unit/provider/package/powershell_spec.rb +96 -87
  365. data/spec/unit/provider/package/snap_spec.rb +1 -1
  366. data/spec/unit/provider/powershell_script_spec.rb +3 -45
  367. data/spec/unit/provider/script_spec.rb +20 -110
  368. data/spec/unit/provider/service/gentoo_service_spec.rb +1 -1
  369. data/spec/unit/provider/zypper_repository_spec.rb +75 -25
  370. data/spec/unit/provider_resolver_spec.rb +11 -11
  371. data/spec/unit/resource/archive_file_spec.rb +11 -2
  372. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +17 -7
  373. data/spec/unit/resource/cron_spec.rb +2 -2
  374. data/spec/unit/resource/helpers/cron_validations_spec.rb +5 -1
  375. data/spec/unit/resource/homebrew_update_spec.rb +30 -0
  376. data/spec/unit/resource/powershell_script_spec.rb +10 -15
  377. data/spec/unit/resource/timezone_spec.rb +1 -1
  378. data/spec/unit/resource/windows_audit_policy_spec.rb +64 -0
  379. data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
  380. data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
  381. data/spec/unit/resource/windows_package_spec.rb +10 -0
  382. data/spec/unit/resource/windows_task_spec.rb +1 -1
  383. data/spec/unit/resource/windows_uac_spec.rb +2 -2
  384. data/spec/unit/resource/yum_repository_spec.rb +21 -21
  385. data/spec/unit/resource_spec.rb +67 -1
  386. data/spec/unit/run_context_spec.rb +1 -1
  387. data/spec/unit/util/dsc/configuration_generator_spec.rb +1 -1
  388. data/spec/unit/util/threaded_job_queue_spec.rb +9 -0
  389. data/spec/unit/win32/registry_spec.rb +1 -1
  390. metadata +28 -27
  391. data/lib/chef/resource/cron.rb +0 -157
@@ -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
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  # TODO: Allow new_resource.source to be a Product Code as a GUID for uninstall / network install
20
20
 
21
- require_relative "../../../win32/api/installer" if RUBY_PLATFORM =~ /mswin|mingw32|windows/
21
+ require_relative "../../../win32/api/installer" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
22
22
  require_relative "../../../mixin/shell_out"
23
23
 
24
24
  class Chef
@@ -26,7 +26,7 @@ class Chef
26
26
  class Package
27
27
  class Windows
28
28
  class MSI
29
- include Chef::ReservedNames::Win32::API::Installer if RUBY_PLATFORM =~ /mswin|mingw32|windows/
29
+ include Chef::ReservedNames::Win32::API::Installer if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
30
30
  include Chef::Mixin::ShellOut
31
31
 
32
32
  def initialize(resource, uninstall_entries)
@@ -84,7 +84,7 @@ class Chef
84
84
  .map(&:uninstall_string).uniq.each do |uninstall_string|
85
85
  uninstall_string = "msiexec /x #{uninstall_string.match(/{.*}/)}"
86
86
  uninstall_string += expand_options(new_resource.options)
87
- uninstall_string += " /q" unless uninstall_string.downcase =~ %r{ /q}
87
+ uninstall_string += " /q" unless %r{ /q}.match?(uninstall_string.downcase)
88
88
  logger.trace("#{new_resource} removing MSI package version using '#{uninstall_string}'")
89
89
  shell_out!(uninstall_string, default_env: false, timeout: new_resource.timeout, returns: new_resource.returns)
90
90
  end
@@ -17,7 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
 
20
- require "win32/registry" if RUBY_PLATFORM =~ /mswin|mingw32|windows/
20
+ require "win32/registry" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
21
21
 
22
22
  class Chef
23
23
  class Provider
@@ -100,7 +100,7 @@ class Chef
100
100
 
101
101
  # If this is a package like the kernel that can be installed multiple times, we'll skip over this logic
102
102
  if new_resource.allow_downgrade && version_gt?(iv.version_with_arch, av.version_with_arch) && !python_helper.install_only_packages(name)
103
- # We allow downgrading only in the evenit of single-package
103
+ # We allow downgrading only in the event of single-package
104
104
  # rules where the user explicitly allowed it
105
105
  method = "downgrade"
106
106
  end
@@ -22,7 +22,7 @@ require "singleton" unless defined?(Singleton)
22
22
 
23
23
  #
24
24
  # These are largely historical APIs, the YumCache object no longer exists and this is a
25
- # fascade over the python helper class. It should be considered deprecated-lite and
25
+ # facade over the python helper class. It should be considered deprecated-lite and
26
26
  # no new APIs should be added and should be added to the python_helper instead.
27
27
  #
28
28
 
@@ -26,19 +26,12 @@ class Chef
26
26
 
27
27
  provides :powershell_script
28
28
 
29
- def initialize(new_resource, run_context)
30
- super(new_resource, run_context, ".ps1")
31
- add_exit_status_wrapper
32
- end
33
-
34
29
  action :run do
35
30
  validate_script_syntax!
36
31
  super()
37
32
  end
38
33
 
39
34
  def command
40
- basepath = is_forced_32bit ? wow64_directory : run_context.node["kernel"]["os_info"]["system_directory"]
41
-
42
35
  # Powershell.exe is always in "v1.0" folder (for backwards compatibility)
43
36
  interpreter_path = Chef::Util::PathHelper.join(basepath, "WindowsPowerShell", "v1.0", interpreter)
44
37
 
@@ -48,21 +41,19 @@ class Chef
48
41
  # error status of a failed Windows process that ran at the
49
42
  # end of the script, it gets changed to '1'.
50
43
  #
51
- "\"#{interpreter_path}\" #{new_resource.flags} -File \"#{script_file.path}\""
44
+ "\"#{interpreter_path}\" #{new_resource.flags} -File \"#{script_file_path}\""
52
45
  end
53
46
 
54
47
  protected
55
48
 
56
- # Process exit codes are strange with PowerShell and require
57
- # special handling to cover common use cases.
58
- def add_exit_status_wrapper
59
- self.code = wrapper_script
49
+ def code
50
+ code = wrapper_script
60
51
  logger.trace("powershell_script provider called with script code:\n\n#{new_resource.code}\n")
61
52
  logger.trace("powershell_script provider will execute transformed code:\n\n#{code}\n")
53
+ code
62
54
  end
63
55
 
64
56
  def validate_script_syntax!
65
- interpreter_arguments = new_resource.flags
66
57
  Tempfile.open(["chef_powershell_script-user-code", ".ps1"]) do |user_script_file|
67
58
  # Wrap the user's code in a PowerShell script block so that
68
59
  # it isn't executed. However, syntactically invalid script
@@ -80,7 +71,7 @@ class Chef
80
71
  # written to the file system at this point, which is required since
81
72
  # the intent is to execute the code just written to it.
82
73
  user_script_file.close
83
- validation_command = "\"#{interpreter}\" #{interpreter_arguments} -Command \". '#{user_script_file.path}'\""
74
+ validation_command = "\"#{interpreter}\" #{new_resource.flags} -Command \". '#{user_script_file.path}'\""
84
75
 
85
76
  # Note that other script providers like bash allow syntax errors
86
77
  # to be suppressed by setting 'returns' to a value that the
@@ -94,11 +85,13 @@ class Chef
94
85
  # means a non-zero return and thus a syntactically invalid script.
95
86
 
96
87
  with_os_architecture(node, architecture: new_resource.architecture) do
97
- shell_out!(validation_command, { returns: [0] })
88
+ shell_out!(validation_command, returns: [0])
98
89
  end
99
90
  end
100
91
  end
101
92
 
93
+ # Process exit codes are strange with PowerShell and require
94
+ # special handling to cover common use cases.
102
95
  # A wrapper script is used to launch user-supplied script while
103
96
  # still obtaining useful process exit codes. Unless you
104
97
  # explicitly call exit in PowerShell, the powershell.exe
@@ -182,6 +175,9 @@ class Chef
182
175
  EOH
183
176
  end
184
177
 
178
+ def script_extension
179
+ ".ps1"
180
+ end
185
181
  end
186
182
  end
187
183
  end
@@ -147,7 +147,7 @@ class Chef
147
147
  new_resource.updated_by_last_action(true) if res.updated?
148
148
  end
149
149
 
150
- # Get the files to tranfer. This returns files in lexicographical sort order.
150
+ # Get the files to transfer. This returns files in lexicographical sort order.
151
151
  #
152
152
  # FIXME: it should do breadth-first, see CHEF-5080 (please use a performant sort)
153
153
  #
@@ -245,7 +245,7 @@ class Chef
245
245
  res = Chef::Resource::Directory.new(dir, run_context)
246
246
  res.cookbook_name = resource_cookbook
247
247
  if ChefUtils.windows? && rights
248
- # rights are only meant to be applied to the toppest-level directory;
248
+ # rights are only meant to be applied to the most top-level directory;
249
249
  # Windows will handle inheritance.
250
250
  if dir == path
251
251
  rights.each do |r|
@@ -130,10 +130,13 @@ class Chef
130
130
  # which tricks Chef::REST into decompressing the response body. In this
131
131
  # case you'd end up with a tar archive (no gzip) named, e.g., foo.tgz,
132
132
  # which is not what you wanted.
133
- if uri.to_s =~ /gz$/
133
+ if /gz$/.match?(uri.to_s)
134
134
  logger.trace("Turning gzip compression off due to filename ending in gz")
135
135
  opts[:disable_gzip] = true
136
136
  end
137
+ if new_resource.ssl_verify_mode
138
+ opts[:ssl_verify_mode] = new_resource.ssl_verify_mode
139
+ end
137
140
  opts
138
141
  end
139
142
 
@@ -16,9 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require "tempfile" unless defined?(Tempfile)
20
19
  require_relative "execute"
21
- require_relative "../win32/security" if ChefUtils.windows?
22
20
  require "forwardable" unless defined?(Forwardable)
23
21
 
24
22
  class Chef
@@ -34,84 +32,15 @@ class Chef
34
32
  provides :ruby
35
33
  provides :script
36
34
 
37
- def_delegators :new_resource, :interpreter, :flags
38
-
39
- attr_accessor :code
40
-
41
- def initialize(new_resource, run_context)
42
- super
43
- self.code = new_resource.code
44
- end
35
+ def_delegators :new_resource, :interpreter, :flags, :code
45
36
 
46
37
  def command
47
- "\"#{interpreter}\" #{flags} \"#{script_file.path}\""
48
- end
49
-
50
- def load_current_resource
51
- super
52
- end
53
-
54
- action :run do
55
- script_file.puts(code)
56
- script_file.close
57
-
58
- set_owner_and_group
59
-
60
- super()
61
-
62
- unlink_script_file
63
- end
64
-
65
- def set_owner_and_group
66
- if ChefUtils.windows?
67
- # And on Windows also this is a no-op if there is no user specified.
68
- grant_alternate_user_read_access
69
- else
70
- # FileUtils itself implements a no-op if +user+ or +group+ are nil
71
- # You can prove this by running FileUtils.chown(nil,nil,'/tmp/file')
72
- # as an unprivileged user.
73
- FileUtils.chown(new_resource.user, new_resource.group, script_file.path)
74
- end
38
+ "\"#{interpreter}\" #{flags}"
75
39
  end
76
40
 
77
- def grant_alternate_user_read_access
78
- # Do nothing if an alternate user isn't specified -- the file
79
- # will already have the correct permissions for the user as part
80
- # of the default ACL behavior on Windows.
81
- return if new_resource.user.nil?
82
-
83
- # Duplicate the script file's existing DACL
84
- # so we can add an ACE later
85
- securable_object = Chef::ReservedNames::Win32::Security::SecurableObject.new(script_file.path)
86
- aces = securable_object.security_descriptor.dacl.reduce([]) { |result, current| result.push(current) }
87
-
88
- username = new_resource.user
89
-
90
- if new_resource.domain
91
- username = new_resource.domain + '\\' + new_resource.user
92
- end
93
-
94
- # Create an ACE that allows the alternate user read access to the script
95
- # file so it can be read and executed.
96
- user_sid = Chef::ReservedNames::Win32::Security::SID.from_account(username)
97
- read_ace = Chef::ReservedNames::Win32::Security::ACE.access_allowed(user_sid, Chef::ReservedNames::Win32::API::Security::GENERIC_READ | Chef::ReservedNames::Win32::API::Security::GENERIC_EXECUTE, 0)
98
- aces.push(read_ace)
99
- acl = Chef::ReservedNames::Win32::Security::ACL.create(aces)
100
-
101
- # This actually applies the modified DACL to the file
102
- # Use parentheses to bypass RuboCop / ChefStyle warning
103
- # about useless setter
104
- (securable_object.dacl = acl)
41
+ def input
42
+ code
105
43
  end
106
-
107
- def script_file
108
- @script_file ||= Tempfile.open("chef-script")
109
- end
110
-
111
- def unlink_script_file
112
- script_file && script_file.close!
113
- end
114
-
115
44
  end
116
45
  end
117
46
  end
@@ -33,7 +33,7 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
33
33
 
34
34
  def load_current_resource
35
35
  raise Chef::Exceptions::Service, "Could not find /etc/rc.conf" unless ::File.exists?("/etc/rc.conf")
36
- raise Chef::Exceptions::Service, "No DAEMONS found in /etc/rc.conf" unless ::File.read("/etc/rc.conf") =~ /DAEMONS=\((.*)\)/m
36
+ raise Chef::Exceptions::Service, "No DAEMONS found in /etc/rc.conf" unless /DAEMONS=\((.*)\)/m.match?(::File.read("/etc/rc.conf"))
37
37
 
38
38
  super
39
39
 
@@ -42,7 +42,7 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
42
42
  end
43
43
 
44
44
  # Get list of all daemons from the file '/etc/rc.conf'.
45
- # Mutiple lines and background form are supported. Example:
45
+ # Multiple lines and background form are supported. Example:
46
46
  # DAEMONS=(\
47
47
  # foobar \
48
48
  # @example \
@@ -76,9 +76,9 @@ class Chef
76
76
 
77
77
  in_info = false
78
78
  ::File.readlines(path).each_with_object([]) do |line, acc|
79
- if line =~ /^### BEGIN INIT INFO/
79
+ if /^### BEGIN INIT INFO/.match?(line)
80
80
  in_info = true
81
- elsif line =~ /^### END INIT INFO/
81
+ elsif /^### END INIT INFO/.match?(line)
82
82
  break acc
83
83
  elsif in_info
84
84
  if line =~ /Default-(Start|Stop):\s+(\d.*)/
@@ -56,8 +56,10 @@ class Chef
56
56
  if @console_user
57
57
  @console_user = Etc.getpwuid(::File.stat("/dev/console").uid).name
58
58
  logger.trace("#{new_resource} console_user: '#{@console_user}'")
59
- cmd = "su -l"
60
- @base_user_cmd = cmd + "#{@console_user} -c"
59
+
60
+ @base_user_cmd = "su -l #{@console_user} -c"
61
+ logger.trace("#{new_resource} base_user_cmd: '#{@base_user_cmd}'")
62
+
61
63
  # Default LaunchAgent session should be Aqua
62
64
  @session_type = "Aqua" if @session_type.nil?
63
65
  end
@@ -140,6 +142,15 @@ class Chef
140
142
  #
141
143
  # This makes some sense on macOS since launchctl is an "init"-style
142
144
  # supervisor that will restart daemons that are crashing, etc.
145
+ #
146
+ # FIXME: Does this make any sense at all? The difference between enabled and
147
+ # running as state would seem to only be useful for completely broken
148
+ # services (enabled, not restarting, but not running => totally broken?).
149
+ #
150
+ # It seems like otherwise :enable is equivalent to :start, and :disable is
151
+ # equivalent to :stop? But just with strangely different behavior in the
152
+ # face of a broken service?
153
+ #
143
154
  def enable_service
144
155
  if @current_resource.enabled
145
156
  logger.trace("#{@new_resource} already enabled, not enabling")