chef 15.17.4-universal-mingw32 → 16.0.257-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 (571) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +14 -20
  3. data/README.md +6 -6
  4. data/Rakefile +18 -23
  5. data/chef-universal-mingw32.gemspec +4 -4
  6. data/chef.gemspec +10 -26
  7. data/distro/powershell/chef/chef.psm1 +3 -3
  8. data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
  9. data/lib/chef/action_collection.rb +16 -5
  10. data/lib/chef/api_client/registration.rb +2 -2
  11. data/lib/chef/application.rb +33 -54
  12. data/lib/chef/application/apply.rb +20 -3
  13. data/lib/chef/application/base.rb +8 -3
  14. data/lib/chef/application/exit_code.rb +2 -2
  15. data/lib/chef/application/knife.rb +1 -1
  16. data/lib/chef/chef_class.rb +4 -4
  17. data/lib/chef/chef_fs/chef_fs_data_store.rb +3 -3
  18. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +1 -1
  19. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +1 -1
  20. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +6 -2
  21. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
  22. data/lib/chef/chef_fs/file_system/repository/base_file.rb +0 -1
  23. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
  24. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
  25. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +5 -5
  26. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  27. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
  28. data/lib/chef/chef_fs/path_utils.rb +3 -3
  29. data/lib/chef/client.rb +16 -14
  30. data/lib/chef/config.rb +1 -1
  31. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  32. data/lib/chef/cookbook/gem_installer.rb +1 -1
  33. data/lib/chef/cookbook/metadata.rb +45 -22
  34. data/lib/chef/cookbook_version.rb +40 -5
  35. data/lib/chef/data_bag.rb +2 -2
  36. data/lib/chef/data_collector/error_handlers.rb +1 -1
  37. data/lib/chef/data_collector/run_end_message.rb +7 -1
  38. data/lib/chef/deprecated.rb +1 -9
  39. data/lib/chef/dist.rb +8 -0
  40. data/lib/chef/dsl/chef_vault.rb +84 -0
  41. data/lib/chef/dsl/declare_resource.rb +7 -5
  42. data/lib/chef/dsl/platform_introspection.rb +2 -3
  43. data/lib/chef/dsl/recipe.rb +7 -12
  44. data/lib/chef/dsl/universal.rb +3 -7
  45. data/lib/chef/environment.rb +2 -2
  46. data/lib/chef/event_dispatch/base.rb +3 -0
  47. data/lib/chef/exceptions.rb +0 -3
  48. data/lib/chef/formatters/doc.rb +1 -1
  49. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
  50. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
  51. data/lib/chef/formatters/indentable_output_stream.rb +7 -16
  52. data/lib/chef/http.rb +1 -2
  53. data/lib/chef/http/http_request.rb +3 -2
  54. data/lib/chef/knife.rb +1 -3
  55. data/lib/chef/knife/acl_add.rb +57 -0
  56. data/lib/chef/knife/acl_base.rb +183 -0
  57. data/lib/chef/knife/acl_bulk_add.rb +78 -0
  58. data/lib/chef/knife/acl_bulk_remove.rb +83 -0
  59. data/lib/chef/knife/acl_remove.rb +62 -0
  60. data/lib/chef/knife/acl_show.rb +56 -0
  61. data/lib/chef/knife/bootstrap.rb +93 -97
  62. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  63. data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
  64. data/lib/chef/knife/bootstrap/templates/chef-full.erb +20 -20
  65. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +13 -15
  66. data/lib/chef/knife/bootstrap/train_connector.rb +0 -1
  67. data/lib/chef/knife/cookbook_download.rb +1 -1
  68. data/lib/chef/knife/cookbook_metadata.rb +1 -1
  69. data/lib/chef/knife/core/bootstrap_context.rb +63 -60
  70. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  71. data/lib/chef/knife/core/generic_presenter.rb +4 -3
  72. data/lib/chef/knife/core/hashed_command_loader.rb +2 -3
  73. data/lib/chef/knife/core/node_presenter.rb +2 -2
  74. data/lib/chef/knife/core/status_presenter.rb +5 -5
  75. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  76. data/lib/chef/knife/core/ui.rb +17 -1
  77. data/lib/chef/knife/core/windows_bootstrap_context.rb +45 -58
  78. data/lib/chef/knife/data_bag_secret_options.rb +18 -45
  79. data/lib/chef/knife/environment_compare.rb +1 -1
  80. data/lib/chef/knife/exec.rb +2 -2
  81. data/lib/chef/knife/group_add.rb +55 -0
  82. data/lib/chef/knife/{cookbook_site_download.rb → group_create.rb} +21 -12
  83. data/lib/chef/knife/group_destroy.rb +53 -0
  84. data/lib/chef/knife/{cookbook_site_list.rb → group_list.rb} +14 -11
  85. data/lib/chef/knife/group_remove.rb +56 -0
  86. data/lib/chef/knife/{cookbook_site_install.rb → group_show.rb} +21 -12
  87. data/lib/chef/knife/list.rb +1 -1
  88. data/lib/chef/knife/ssh.rb +12 -50
  89. data/lib/chef/knife/status.rb +3 -3
  90. data/lib/chef/knife/supermarket_download.rb +1 -2
  91. data/lib/chef/knife/supermarket_install.rb +1 -2
  92. data/lib/chef/knife/supermarket_list.rb +1 -2
  93. data/lib/chef/knife/supermarket_search.rb +1 -2
  94. data/lib/chef/knife/supermarket_share.rb +1 -2
  95. data/lib/chef/knife/supermarket_show.rb +1 -2
  96. data/lib/chef/knife/supermarket_unshare.rb +1 -2
  97. data/lib/chef/knife/{cookbook_site_show.rb → user_dissociate.rb} +15 -13
  98. data/lib/chef/knife/{cookbook_site_search.rb → user_invite_add.rb} +16 -13
  99. data/lib/chef/knife/user_invite_list.rb +34 -0
  100. data/lib/chef/knife/user_invite_recind.rb +63 -0
  101. data/lib/chef/knife/yaml_convert.rb +91 -0
  102. data/lib/chef/log.rb +1 -1
  103. data/lib/chef/mixin/create_path.rb +8 -8
  104. data/lib/chef/mixin/openssl_helper.rb +3 -26
  105. data/lib/chef/mixin/powershell_exec.rb +10 -1
  106. data/lib/chef/mixin/powershell_out.rb +1 -1
  107. data/lib/chef/mixin/properties.rb +13 -1
  108. data/lib/chef/mixin/shell_out.rb +0 -4
  109. data/lib/chef/mixin/template.rb +0 -1
  110. data/lib/chef/monkey_patches/net_http.rb +0 -4
  111. data/lib/chef/node.rb +18 -6
  112. data/lib/chef/node/mixin/deep_merge_cache.rb +7 -7
  113. data/lib/chef/node/mixin/immutablize_array.rb +4 -0
  114. data/lib/chef/node/mixin/immutablize_hash.rb +3 -0
  115. data/lib/chef/node_map.rb +7 -36
  116. data/lib/chef/platform/priority_map.rb +4 -4
  117. data/lib/chef/platform/query_helpers.rb +6 -34
  118. data/lib/chef/powershell.rb +14 -0
  119. data/lib/chef/property.rb +22 -4
  120. data/lib/chef/provider.rb +40 -6
  121. data/lib/chef/provider/cron.rb +2 -2
  122. data/lib/chef/provider/directory.rb +2 -2
  123. data/lib/chef/provider/dsc_resource.rb +1 -1
  124. data/lib/chef/provider/dsc_script.rb +1 -1
  125. data/lib/chef/provider/execute.rb +2 -8
  126. data/lib/chef/provider/file.rb +5 -5
  127. data/lib/chef/provider/git.rb +84 -27
  128. data/lib/chef/provider/group.rb +4 -4
  129. data/lib/chef/provider/http_request.rb +6 -6
  130. data/lib/chef/provider/ifconfig.rb +4 -4
  131. data/lib/chef/provider/launchd.rb +36 -51
  132. data/lib/chef/provider/link.rb +2 -2
  133. data/lib/chef/provider/mount.rb +5 -5
  134. data/lib/chef/provider/mount/solaris.rb +1 -0
  135. data/lib/chef/provider/osx_profile.rb +7 -3
  136. data/lib/chef/provider/package.rb +2 -2
  137. data/lib/chef/provider/package/cab.rb +3 -4
  138. data/lib/chef/provider/package/chocolatey.rb +1 -3
  139. data/lib/chef/provider/package/dnf.rb +66 -10
  140. data/lib/chef/provider/package/dnf/dnf_helper.py +84 -30
  141. data/lib/chef/provider/package/dnf/python_helper.rb +79 -36
  142. data/lib/chef/provider/package/dnf/version.rb +5 -1
  143. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -3
  144. data/lib/chef/provider/package/homebrew.rb +106 -42
  145. data/lib/chef/provider/package/msu.rb +3 -1
  146. data/lib/chef/provider/package/pacman.rb +25 -34
  147. data/lib/chef/provider/package/powershell.rb +2 -6
  148. data/lib/chef/provider/package/rubygems.rb +29 -2
  149. data/lib/chef/provider/package/snap.rb +27 -96
  150. data/lib/chef/provider/package/windows.rb +3 -2
  151. data/lib/chef/provider/package/windows/msi.rb +2 -2
  152. data/lib/chef/provider/package/yum.rb +0 -8
  153. data/lib/chef/provider/package/yum/yum_helper.py +0 -4
  154. data/lib/chef/provider/package/zypper.rb +1 -1
  155. data/lib/chef/provider/powershell_script.rb +4 -10
  156. data/lib/chef/provider/registry_key.rb +4 -4
  157. data/lib/chef/provider/remote_directory.rb +3 -3
  158. data/lib/chef/provider/remote_file/ftp.rb +3 -2
  159. data/lib/chef/provider/remote_file/local_file.rb +2 -1
  160. data/lib/chef/provider/remote_file/sftp.rb +3 -2
  161. data/lib/chef/provider/route.rb +5 -3
  162. data/lib/chef/provider/ruby_block.rb +1 -1
  163. data/lib/chef/provider/script.rb +2 -2
  164. data/lib/chef/provider/service.rb +8 -8
  165. data/lib/chef/provider/service/aixinit.rb +1 -1
  166. data/lib/chef/provider/service/arch.rb +2 -2
  167. data/lib/chef/provider/service/debian.rb +31 -29
  168. data/lib/chef/provider/service/gentoo.rb +2 -2
  169. data/lib/chef/provider/service/macosx.rb +7 -12
  170. data/lib/chef/provider/service/openbsd.rb +1 -1
  171. data/lib/chef/provider/service/redhat.rb +2 -2
  172. data/lib/chef/provider/service/simple.rb +3 -3
  173. data/lib/chef/provider/service/systemd.rb +12 -12
  174. data/lib/chef/provider/service/upstart.rb +1 -1
  175. data/lib/chef/provider/service/windows.rb +5 -11
  176. data/lib/chef/provider/subversion.rb +25 -5
  177. data/lib/chef/provider/systemd_unit.rb +26 -25
  178. data/lib/chef/provider/user.rb +6 -6
  179. data/lib/chef/provider/user/dscl.rb +3 -3
  180. data/lib/chef/provider/user/mac.rb +10 -9
  181. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  182. data/lib/chef/provider/windows_env.rb +3 -3
  183. data/lib/chef/provider/windows_script.rb +2 -2
  184. data/lib/chef/provider/windows_task.rb +7 -9
  185. data/lib/chef/provider/yum_repository.rb +1 -1
  186. data/lib/chef/provider/zypper_repository.rb +11 -31
  187. data/lib/chef/providers.rb +0 -6
  188. data/lib/chef/recipe.rb +36 -0
  189. data/lib/chef/resource.rb +41 -56
  190. data/lib/chef/resource/action_class.rb +24 -22
  191. data/lib/chef/resource/alternatives.rb +149 -0
  192. data/lib/chef/resource/apt_package.rb +2 -1
  193. data/lib/chef/resource/apt_preference.rb +69 -2
  194. data/lib/chef/resource/apt_repository.rb +337 -5
  195. data/lib/chef/resource/apt_update.rb +52 -1
  196. data/lib/chef/resource/archive_file.rb +9 -29
  197. data/lib/chef/resource/bash.rb +2 -0
  198. data/lib/chef/resource/bff_package.rb +9 -1
  199. data/lib/chef/resource/breakpoint.rb +0 -1
  200. data/lib/chef/resource/build_essential.rb +42 -48
  201. data/lib/chef/resource/cab_package.rb +8 -1
  202. data/lib/chef/resource/chef_client_cron.rb +225 -0
  203. data/lib/chef/resource/chef_client_scheduled_task.rb +198 -0
  204. data/lib/chef/resource/chef_client_systemd_timer.rb +177 -0
  205. data/lib/chef/resource/chef_gem.rb +9 -16
  206. data/lib/chef/resource/chef_handler.rb +2 -1
  207. data/lib/chef/resource/chef_sleep.rb +0 -1
  208. data/lib/chef/resource/chef_vault_secret.rb +135 -0
  209. data/lib/chef/resource/chocolatey_config.rb +3 -1
  210. data/lib/chef/resource/chocolatey_feature.rb +2 -1
  211. data/lib/chef/resource/chocolatey_package.rb +2 -1
  212. data/lib/chef/resource/chocolatey_source.rb +2 -1
  213. data/lib/chef/resource/cookbook_file.rb +1 -1
  214. data/lib/chef/resource/cron.rb +22 -68
  215. data/lib/chef/resource/cron_access.rb +8 -15
  216. data/lib/chef/resource/cron_d.rb +9 -75
  217. data/lib/chef/resource/csh.rb +2 -0
  218. data/lib/chef/resource/directory.rb +2 -2
  219. data/lib/chef/resource/dmg_package.rb +4 -4
  220. data/lib/chef/resource/dnf_package.rb +2 -3
  221. data/lib/chef/resource/dpkg_package.rb +2 -1
  222. data/lib/chef/resource/dsc_resource.rb +6 -4
  223. data/lib/chef/resource/dsc_script.rb +3 -2
  224. data/lib/chef/resource/execute.rb +13 -12
  225. data/lib/chef/resource/file.rb +3 -1
  226. data/lib/chef/resource/freebsd_package.rb +2 -1
  227. data/lib/chef/resource/gem_package.rb +14 -6
  228. data/lib/chef/resource/group.rb +4 -1
  229. data/lib/chef/resource/helpers/cron_validations.rb +98 -0
  230. data/lib/chef/resource/homebrew_cask.rb +5 -4
  231. data/lib/chef/resource/homebrew_package.rb +4 -2
  232. data/lib/chef/resource/homebrew_tap.rb +2 -1
  233. data/lib/chef/resource/hostname.rb +41 -36
  234. data/lib/chef/resource/http_request.rb +0 -1
  235. data/lib/chef/resource/ifconfig.rb +1 -1
  236. data/lib/chef/resource/ips_package.rb +10 -2
  237. data/lib/chef/resource/kernel_module.rb +29 -29
  238. data/lib/chef/resource/ksh.rb +2 -0
  239. data/lib/chef/resource/launchd.rb +6 -6
  240. data/lib/chef/resource/link.rb +1 -23
  241. data/lib/chef/resource/locale.rb +58 -24
  242. data/lib/chef/resource/log.rb +12 -1
  243. data/lib/chef/resource/lwrp_base.rb +1 -8
  244. data/lib/chef/resource/macos_userdefaults.rb +9 -6
  245. data/lib/chef/resource/macosx_service.rb +2 -1
  246. data/lib/chef/resource/macports_package.rb +10 -2
  247. data/lib/chef/resource/mdadm.rb +62 -2
  248. data/lib/chef/resource/mount.rb +3 -0
  249. data/lib/chef/resource/msu_package.rb +13 -1
  250. data/lib/chef/resource/notify_group.rb +8 -3
  251. data/lib/chef/resource/ohai.rb +19 -3
  252. data/lib/chef/resource/ohai_hint.rb +3 -12
  253. data/lib/chef/resource/openbsd_package.rb +9 -1
  254. data/lib/chef/resource/openssl_dhparam.rb +10 -1
  255. data/lib/chef/resource/openssl_ec_private_key.rb +23 -1
  256. data/lib/chef/resource/openssl_ec_public_key.rb +21 -1
  257. data/lib/chef/resource/openssl_rsa_private_key.rb +20 -1
  258. data/lib/chef/resource/openssl_rsa_public_key.rb +22 -1
  259. data/lib/chef/resource/openssl_x509_certificate.rb +37 -1
  260. data/lib/chef/resource/openssl_x509_crl.rb +12 -1
  261. data/lib/chef/resource/openssl_x509_request.rb +37 -1
  262. data/lib/chef/resource/osx_profile.rb +3 -2
  263. data/lib/chef/resource/package.rb +2 -1
  264. data/lib/chef/resource/pacman_package.rb +2 -1
  265. data/lib/chef/resource/paludis_package.rb +12 -3
  266. data/lib/chef/resource/perl.rb +2 -0
  267. data/lib/chef/resource/plist.rb +207 -0
  268. data/lib/chef/resource/portage_package.rb +13 -3
  269. data/lib/chef/resource/powershell_package.rb +1 -3
  270. data/lib/chef/resource/powershell_package_source.rb +3 -1
  271. data/lib/chef/resource/powershell_script.rb +7 -17
  272. data/lib/chef/resource/python.rb +2 -0
  273. data/lib/chef/resource/reboot.rb +0 -1
  274. data/lib/chef/resource/registry_key.rb +1 -2
  275. data/lib/chef/resource/remote_directory.rb +2 -0
  276. data/lib/chef/resource/remote_file.rb +2 -0
  277. data/lib/chef/resource/rhsm_errata.rb +0 -1
  278. data/lib/chef/resource/rhsm_errata_level.rb +0 -1
  279. data/lib/chef/resource/rhsm_register.rb +2 -1
  280. data/lib/chef/resource/rhsm_repo.rb +3 -1
  281. data/lib/chef/resource/rhsm_subscription.rb +4 -1
  282. data/lib/chef/resource/route.rb +5 -1
  283. data/lib/chef/resource/rpm_package.rb +9 -2
  284. data/lib/chef/resource/ruby.rb +2 -0
  285. data/lib/chef/resource/ruby_block.rb +1 -1
  286. data/lib/chef/resource/scm/_scm.rb +48 -0
  287. data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
  288. data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +8 -5
  289. data/lib/chef/resource/script.rb +6 -3
  290. data/lib/chef/resource/service.rb +6 -7
  291. data/lib/chef/resource/smartos_package.rb +9 -1
  292. data/lib/chef/resource/snap_package.rb +3 -1
  293. data/lib/chef/resource/solaris_package.rb +9 -1
  294. data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
  295. data/lib/chef/resource/sudo.rb +9 -9
  296. data/lib/chef/resource/support/cron.d.erb +1 -1
  297. data/lib/chef/resource/support/cron_access.erb +1 -1
  298. data/lib/chef/resource/support/sudoer.erb +1 -2
  299. data/lib/chef/resource/support/ulimit.erb +41 -0
  300. data/lib/chef/resource/swap_file.rb +5 -3
  301. data/lib/chef/resource/sysctl.rb +2 -2
  302. data/lib/chef/resource/systemd_unit.rb +4 -2
  303. data/lib/chef/resource/template.rb +0 -1
  304. data/lib/chef/resource/timezone.rb +7 -18
  305. data/lib/chef/resource/user.rb +1 -3
  306. data/lib/chef/resource/user/aix_user.rb +0 -2
  307. data/lib/chef/resource/user/dscl_user.rb +1 -1
  308. data/lib/chef/resource/user/linux_user.rb +0 -2
  309. data/lib/chef/resource/user/mac_user.rb +1 -1
  310. data/lib/chef/resource/user/pw_user.rb +0 -2
  311. data/lib/chef/resource/user/solaris_user.rb +0 -2
  312. data/lib/chef/resource/user/windows_user.rb +0 -2
  313. data/lib/chef/resource/user_ulimit.rb +114 -0
  314. data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
  315. data/lib/chef/resource/windows_ad_join.rb +19 -6
  316. data/lib/chef/resource/windows_auto_run.rb +0 -1
  317. data/lib/chef/resource/windows_certificate.rb +1 -1
  318. data/lib/chef/resource/windows_dfs_folder.rb +0 -1
  319. data/lib/chef/resource/windows_dfs_namespace.rb +0 -1
  320. data/lib/chef/resource/windows_dfs_server.rb +0 -1
  321. data/lib/chef/resource/windows_dns_record.rb +0 -1
  322. data/lib/chef/resource/windows_dns_zone.rb +0 -1
  323. data/lib/chef/resource/windows_env.rb +2 -3
  324. data/lib/chef/resource/windows_feature.rb +2 -2
  325. data/lib/chef/resource/windows_feature_dism.rb +9 -22
  326. data/lib/chef/resource/windows_feature_powershell.rb +17 -82
  327. data/lib/chef/resource/windows_firewall_rule.rb +119 -10
  328. data/lib/chef/resource/windows_font.rb +1 -3
  329. data/lib/chef/resource/windows_package.rb +13 -4
  330. data/lib/chef/resource/windows_pagefile.rb +0 -1
  331. data/lib/chef/resource/windows_path.rb +0 -1
  332. data/lib/chef/resource/windows_printer.rb +0 -1
  333. data/lib/chef/resource/windows_printer_port.rb +0 -1
  334. data/lib/chef/resource/windows_script.rb +3 -4
  335. data/lib/chef/resource/windows_security_policy.rb +90 -0
  336. data/lib/chef/resource/windows_service.rb +45 -31
  337. data/lib/chef/resource/windows_share.rb +3 -7
  338. data/lib/chef/resource/windows_shortcut.rb +0 -1
  339. data/lib/chef/resource/windows_task.rb +14 -15
  340. data/lib/chef/resource/windows_uac.rb +0 -1
  341. data/lib/chef/resource/windows_user_privilege.rb +157 -0
  342. data/lib/chef/resource/windows_workgroup.rb +0 -1
  343. data/lib/chef/resource/yum_package.rb +3 -1
  344. data/lib/chef/resource/yum_repository.rb +2 -1
  345. data/lib/chef/resource/zypper_package.rb +3 -2
  346. data/lib/chef/resource/zypper_repository.rb +2 -1
  347. data/lib/chef/resource_builder.rb +8 -0
  348. data/lib/chef/resource_inspector.rb +6 -6
  349. data/lib/chef/resource_resolver.rb +7 -14
  350. data/lib/chef/resources.rb +11 -3
  351. data/lib/chef/role.rb +2 -2
  352. data/lib/chef/run_context/cookbook_compiler.rb +29 -5
  353. data/lib/chef/shell.rb +23 -32
  354. data/lib/chef/shell/shell_session.rb +0 -2
  355. data/lib/chef/util/diff.rb +1 -1
  356. data/lib/chef/util/dsc/configuration_generator.rb +1 -1
  357. data/lib/chef/util/dsc/lcm_output_parser.rb +3 -3
  358. data/lib/chef/util/powershell/cmdlet.rb +1 -1
  359. data/lib/chef/version.rb +2 -2
  360. data/lib/chef/version_string.rb +1 -1
  361. data/lib/chef/win32/api/file.rb +18 -18
  362. data/lib/chef/win32/api/security.rb +6 -0
  363. data/lib/chef/win32/file.rb +3 -11
  364. data/lib/chef/win32/process.rb +2 -2
  365. data/lib/chef/win32/security.rb +40 -2
  366. data/spec/functional/assets/inittest +8 -7
  367. data/spec/functional/knife/ssh_spec.rb +27 -23
  368. data/spec/functional/resource/aix_service_spec.rb +1 -0
  369. data/spec/functional/resource/aixinit_service_spec.rb +8 -7
  370. data/spec/functional/resource/apt_package_spec.rb +1 -0
  371. data/spec/functional/resource/bff_spec.rb +2 -2
  372. data/spec/functional/resource/cookbook_file_spec.rb +1 -1
  373. data/spec/functional/resource/cron_spec.rb +11 -29
  374. data/spec/functional/resource/dnf_package_spec.rb +441 -156
  375. data/spec/functional/resource/dsc_resource_spec.rb +1 -1
  376. data/spec/functional/resource/git_spec.rb +184 -134
  377. data/spec/functional/resource/insserv_spec.rb +6 -5
  378. data/spec/functional/resource/link_spec.rb +17 -17
  379. data/spec/functional/resource/locale_spec.rb +13 -2
  380. data/spec/functional/resource/powershell_script_spec.rb +7 -68
  381. data/spec/functional/resource/rpm_spec.rb +2 -2
  382. data/spec/functional/resource/user/dscl_spec.rb +2 -2
  383. data/spec/functional/resource/user/mac_user_spec.rb +2 -2
  384. data/spec/functional/resource/windows_certificate_spec.rb +3 -3
  385. data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
  386. data/spec/functional/resource/windows_task_spec.rb +8 -8
  387. data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
  388. data/spec/functional/run_lock_spec.rb +1 -2
  389. data/spec/functional/shell_spec.rb +6 -6
  390. data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
  391. data/spec/functional/version_spec.rb +1 -1
  392. data/spec/functional/win32/registry_spec.rb +0 -6
  393. data/spec/functional/win32/security_spec.rb +22 -0
  394. data/spec/functional/win32/service_manager_spec.rb +1 -1
  395. data/spec/integration/client/client_spec.rb +123 -2
  396. data/spec/integration/knife/cookbook_show_spec.rb +28 -26
  397. data/spec/integration/knife/data_bag_show_spec.rb +1 -1
  398. data/spec/integration/knife/raw_spec.rb +30 -2
  399. data/spec/integration/knife/show_spec.rb +32 -3
  400. data/spec/integration/recipes/accumulator_spec.rb +1 -1
  401. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -5
  402. data/spec/integration/recipes/lwrp_spec.rb +1 -1
  403. data/spec/integration/recipes/noop_resource_spec.rb +1 -1
  404. data/spec/integration/recipes/notifies_spec.rb +50 -21
  405. data/spec/integration/recipes/notifying_block_spec.rb +9 -6
  406. data/spec/integration/recipes/provider_choice.rb +2 -0
  407. data/spec/integration/recipes/recipe_dsl_spec.rb +46 -144
  408. data/spec/integration/recipes/resource_action_spec.rb +16 -11
  409. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -3
  410. data/spec/integration/recipes/resource_load_spec.rb +133 -13
  411. data/spec/integration/recipes/unified_mode_spec.rb +1 -1
  412. data/spec/integration/recipes/use_partial_spec.rb +112 -0
  413. data/spec/integration/solo/solo_spec.rb +3 -3
  414. data/spec/scripts/ssl-serve.rb +1 -1
  415. data/spec/spec_helper.rb +11 -14
  416. data/spec/support/chef_helpers.rb +2 -2
  417. data/spec/support/lib/chef/resource/zen_follower.rb +2 -0
  418. data/spec/support/platform_helpers.rb +44 -19
  419. data/spec/support/platforms/win32/spec_service.rb +1 -1
  420. data/spec/support/recipe_dsl_helper.rb +83 -0
  421. data/spec/support/shared/functional/directory_resource.rb +1 -1
  422. data/spec/support/shared/functional/execute_resource.rb +1 -1
  423. data/spec/support/shared/functional/file_resource.rb +3 -3
  424. data/spec/support/shared/functional/win32_service.rb +1 -1
  425. data/spec/support/shared/functional/windows_script.rb +5 -18
  426. data/spec/support/shared/integration/knife_support.rb +14 -8
  427. data/spec/unit/application/apply_spec.rb +3 -0
  428. data/spec/unit/application/client_spec.rb +5 -1
  429. data/spec/unit/application_spec.rb +1 -9
  430. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +4 -2
  431. data/spec/unit/client_spec.rb +7 -5
  432. data/spec/unit/cookbook/gem_installer_spec.rb +3 -4
  433. data/spec/unit/cookbook/metadata_spec.rb +38 -19
  434. data/spec/unit/data_bag_spec.rb +1 -1
  435. data/spec/unit/data_collector_spec.rb +38 -17
  436. data/spec/unit/dsl/platform_introspection_spec.rb +0 -1
  437. data/spec/unit/environment_spec.rb +7 -7
  438. data/spec/unit/event_dispatch/dispatcher_spec.rb +0 -3
  439. data/spec/unit/file_access_control_spec.rb +1 -1
  440. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +15 -15
  441. data/spec/unit/knife/bootstrap/client_builder_spec.rb +9 -9
  442. data/spec/unit/knife/bootstrap_spec.rb +36 -54
  443. data/spec/unit/knife/cookbook_download_spec.rb +4 -4
  444. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
  445. data/spec/unit/knife/cookbook_show_spec.rb +1 -0
  446. data/spec/unit/knife/cookbook_upload_spec.rb +6 -5
  447. data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
  448. data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
  449. data/spec/unit/knife/core/ui_spec.rb +16 -0
  450. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +8 -68
  451. data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
  452. data/spec/unit/knife/role_env_run_list_add_spec.rb +6 -6
  453. data/spec/unit/knife/role_env_run_list_clear_spec.rb +4 -4
  454. data/spec/unit/knife/role_env_run_list_remove_spec.rb +4 -4
  455. data/spec/unit/knife/role_env_run_list_replace_spec.rb +4 -4
  456. data/spec/unit/knife/role_env_run_list_set_spec.rb +4 -4
  457. data/spec/unit/knife/role_run_list_add_spec.rb +6 -6
  458. data/spec/unit/knife/role_run_list_clear_spec.rb +4 -4
  459. data/spec/unit/knife/role_run_list_remove_spec.rb +4 -4
  460. data/spec/unit/knife/role_run_list_replace_spec.rb +4 -4
  461. data/spec/unit/knife/role_run_list_set_spec.rb +4 -4
  462. data/spec/unit/knife/ssh_spec.rb +10 -113
  463. data/spec/unit/knife/status_spec.rb +1 -1
  464. data/spec/unit/knife/supermarket_share_spec.rb +3 -5
  465. data/spec/unit/knife_spec.rb +18 -0
  466. data/spec/unit/lwrp_spec.rb +4 -4
  467. data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
  468. data/spec/unit/mixin/securable_spec.rb +1 -0
  469. data/spec/unit/mixin/user_context_spec.rb +9 -1
  470. data/spec/unit/node/attribute_spec.rb +2 -2
  471. data/spec/unit/node_spec.rb +24 -0
  472. data/spec/unit/platform/query_helpers_spec.rb +0 -143
  473. data/spec/unit/property/state_spec.rb +12 -7
  474. data/spec/unit/property/validation_spec.rb +25 -1
  475. data/spec/unit/property_spec.rb +18 -15
  476. data/spec/unit/provider/apt_preference_spec.rb +14 -10
  477. data/spec/unit/provider/apt_repository_spec.rb +9 -11
  478. data/spec/unit/provider/apt_update_spec.rb +12 -11
  479. data/spec/unit/provider/cookbook_file_spec.rb +4 -4
  480. data/spec/unit/provider/cron_spec.rb +2 -2
  481. data/spec/unit/provider/directory_spec.rb +4 -15
  482. data/spec/unit/provider/file_spec.rb +4 -4
  483. data/spec/unit/provider/git_spec.rb +44 -4
  484. data/spec/unit/provider/link_spec.rb +0 -1
  485. data/spec/unit/provider/log_spec.rb +3 -3
  486. data/spec/unit/provider/mdadm_spec.rb +3 -3
  487. data/spec/unit/provider/osx_profile_spec.rb +2 -2
  488. data/spec/unit/provider/package/dnf/python_helper_spec.rb +2 -2
  489. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
  490. data/spec/unit/provider/package/homebrew_spec.rb +280 -174
  491. data/spec/unit/provider/package/msu_spec.rb +3 -3
  492. data/spec/unit/provider/package/pacman_spec.rb +65 -147
  493. data/spec/unit/provider/package/powershell_spec.rb +88 -96
  494. data/spec/unit/provider/package/rubygems_spec.rb +221 -31
  495. data/spec/unit/provider/package/snap_spec.rb +1 -1
  496. data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
  497. data/spec/unit/provider/package/windows_spec.rb +53 -30
  498. data/spec/unit/provider/powershell_script_spec.rb +21 -61
  499. data/spec/unit/provider/remote_file_spec.rb +3 -4
  500. data/spec/unit/provider/service/arch_service_spec.rb +2 -3
  501. data/spec/unit/provider/service/debian_service_spec.rb +35 -14
  502. data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
  503. data/spec/unit/provider/service/macosx_spec.rb +210 -214
  504. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  505. data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
  506. data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
  507. data/spec/unit/provider/service/windows_spec.rb +6 -2
  508. data/spec/unit/provider/subversion_spec.rb +4 -2
  509. data/spec/unit/provider/systemd_unit_spec.rb +24 -28
  510. data/spec/unit/provider/template_spec.rb +3 -4
  511. data/spec/unit/provider/zypper_repository_spec.rb +25 -75
  512. data/spec/unit/provider_resolver_spec.rb +11 -11
  513. data/spec/unit/provider_spec.rb +0 -1
  514. data/spec/unit/recipe_spec.rb +68 -0
  515. data/spec/unit/resource/alternatives_spec.rb +120 -0
  516. data/spec/unit/resource/apt_preference_spec.rb +0 -18
  517. data/spec/unit/resource/apt_repository_spec.rb +0 -18
  518. data/spec/unit/resource/apt_update_spec.rb +0 -18
  519. data/spec/unit/resource/archive_file_spec.rb +2 -11
  520. data/spec/unit/resource/chef_client_cron_spec.rb +119 -0
  521. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +102 -0
  522. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +70 -0
  523. data/spec/unit/resource/chef_vault_secret_spec.rb +40 -0
  524. data/spec/unit/resource/chocolatey_source_spec.rb +2 -1
  525. data/spec/unit/resource/cron_d_spec.rb +6 -48
  526. data/spec/unit/resource/cron_spec.rb +4 -10
  527. data/spec/unit/resource/gem_package_spec.rb +3 -3
  528. data/spec/unit/resource/helpers/cron_validations_spec.rb +77 -0
  529. data/spec/unit/resource/link_spec.rb +0 -4
  530. data/spec/unit/resource/locale_spec.rb +0 -34
  531. data/spec/unit/resource/ohai_spec.rb +56 -2
  532. data/spec/unit/resource/plist_spec.rb +130 -0
  533. data/spec/unit/resource/powershell_script_spec.rb +0 -5
  534. data/spec/unit/resource/{git_spec.rb → scm/git_spec.rb} +50 -2
  535. data/spec/unit/resource/{scm_spec.rb → scm/scm.rb} +1 -52
  536. data/spec/unit/resource/{subversion_spec.rb → scm/subversion_spec.rb} +2 -3
  537. data/spec/unit/resource/service_spec.rb +4 -0
  538. data/spec/unit/resource/user_spec.rb +2 -2
  539. data/spec/unit/resource/user_ulimit_spec.rb +53 -0
  540. data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
  541. data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
  542. data/spec/unit/resource/windows_feature_dism_spec.rb +2 -17
  543. data/spec/unit/resource/windows_feature_powershell_spec.rb +6 -47
  544. data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
  545. data/spec/unit/resource/windows_package_spec.rb +4 -1
  546. data/spec/unit/resource/windows_service_spec.rb +9 -0
  547. data/spec/unit/resource/windows_task_spec.rb +1 -1
  548. data/spec/unit/resource/windows_uac_spec.rb +2 -2
  549. data/spec/unit/resource/yum_repository_spec.rb +21 -21
  550. data/spec/unit/resource_reporter_spec.rb +1 -5
  551. data/spec/unit/resource_spec.rb +11 -4
  552. data/spec/unit/role_spec.rb +11 -11
  553. data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -1
  554. data/spec/unit/run_context_spec.rb +1 -1
  555. data/spec/unit/search/query_spec.rb +1 -1
  556. data/spec/unit/util/threaded_job_queue_spec.rb +0 -9
  557. data/spec/unit/win32/security_spec.rb +3 -4
  558. data/tasks/rspec.rb +1 -1
  559. metadata +116 -87
  560. data/lib/chef/dsl/core.rb +0 -52
  561. data/lib/chef/knife/cookbook_site_share.rb +0 -41
  562. data/lib/chef/knife/cookbook_site_unshare.rb +0 -41
  563. data/lib/chef/provider/apt_preference.rb +0 -93
  564. data/lib/chef/provider/apt_repository.rb +0 -358
  565. data/lib/chef/provider/apt_update.rb +0 -79
  566. data/lib/chef/provider/log.rb +0 -43
  567. data/lib/chef/provider/mdadm.rb +0 -85
  568. data/lib/chef/provider/ohai.rb +0 -45
  569. data/lib/chef/resource/git.rb +0 -37
  570. data/spec/functional/resource/windows_font_spec.rb +0 -49
  571. data/spec/unit/provider/ohai_spec.rb +0 -84
@@ -39,7 +39,10 @@ module KnifeSupport
39
39
 
40
40
  # Work on machines where we can't access /var
41
41
  Dir.mktmpdir("checksums") do |checksums_cache_dir|
42
- Chef::Config[:syntax_check_cache_path] = checksums_cache_dir
42
+ Chef::Config[:cache_options] = {
43
+ path: checksums_cache_dir,
44
+ skip_expires: true,
45
+ }
43
46
 
44
47
  # This is Chef::Knife.run without load_commands--we'll load stuff
45
48
  # ourselves, thank you very much
@@ -114,7 +117,7 @@ module KnifeSupport
114
117
  ensure
115
118
  Chef::Log.use_log_devices(old_loggers)
116
119
  Chef::Log.level = old_log_level
117
- Chef::Config.delete(:syntax_check_cache_path)
120
+ Chef::Config.delete(:cache_options)
118
121
  Chef::Config.delete(:concurrency)
119
122
  end
120
123
 
@@ -167,21 +170,24 @@ module KnifeSupport
167
170
 
168
171
  def should_result_in(expected)
169
172
  expected[:stdout] = "" unless expected[:stdout]
173
+ expected[:stdout] = expected[:stdout].is_a?(String) ? expected[:stdout].gsub(/[ \t\f\v]+$/, "") : expected[:stdout]
170
174
  expected[:stderr] = "" unless expected[:stderr]
175
+ expected[:stderr] = expected[:stderr].is_a?(String) ? expected[:stderr].gsub(/[ \t\f\v]+$/, "") : expected[:stderr]
171
176
  expected[:exit_code] = 0 unless expected[:exit_code]
172
177
  # TODO make this go away
173
178
  stderr_actual = @stderr.sub(/^WARNING: No knife configuration file found\n/, "")
174
-
175
- if expected[:stderr].is_a?(Regexp)
176
- expect(stderr_actual).to match(expected[:stderr])
177
- else
178
- expect(stderr_actual).to eq(expected[:stderr])
179
- end
179
+ stderr_actual = stderr_actual.gsub(/[ \t\f\v]+$/, "")
180
180
  stdout_actual = @stdout
181
+ stdout_actual = stdout_actual.gsub(/[ \t\f\v]+$/, "")
181
182
  if ChefUtils.windows?
182
183
  stderr_actual = stderr_actual.gsub("\r\n", "\n")
183
184
  stdout_actual = stdout_actual.gsub("\r\n", "\n")
184
185
  end
186
+ if expected[:stderr].is_a?(Regexp)
187
+ expect(stderr_actual).to match(expected[:stderr])
188
+ else
189
+ expect(stderr_actual).to eq(expected[:stderr])
190
+ end
185
191
  expect(@exit_code).to eq(expected[:exit_code])
186
192
  if expected[:stdout].is_a?(Regexp)
187
193
  expect(stdout_actual).to match(expected[:stdout])
@@ -46,6 +46,7 @@ describe Chef::Application::Apply do
46
46
  it "should read text properly" do
47
47
  expect(@app.read_recipe_file(@recipe_file_name)[0]).to eq(@recipe_text)
48
48
  end
49
+
49
50
  it "should return a file_handle" do
50
51
  expect(@app.read_recipe_file(@recipe_file_name)[1]).to be_instance_of(RSpec::Mocks::Double)
51
52
  end
@@ -57,6 +58,7 @@ describe Chef::Application::Apply do
57
58
  @app.read_recipe_file(nil)
58
59
  end
59
60
  end
61
+
60
62
  describe "when recipe doesn't exist" do
61
63
  before do
62
64
  allow(File).to receive(:exist?).with(@recipe_path).and_return(false)
@@ -68,6 +70,7 @@ describe Chef::Application::Apply do
68
70
  end
69
71
  end
70
72
  end
73
+
71
74
  describe "temp_recipe_file" do
72
75
  before do
73
76
  @app.instance_variable_set(:@recipe_text, @recipe_text)
@@ -303,8 +303,12 @@ describe Chef::Application::Client, "reconfigure" do
303
303
  context "when there is no new config" do
304
304
  let(:config_exists) { false }
305
305
 
306
- it "does not updates the config" do
306
+ it "does not update the config" do
307
307
  expect(Chef::Config).not_to receive(:from_string)
308
+ .with(
309
+ "new_config",
310
+ File.join("the_path_to_the_repo", ".chef/config.rb")
311
+ )
308
312
 
309
313
  app.reconfigure
310
314
  end
@@ -94,13 +94,6 @@ describe Chef::Application do
94
94
  end
95
95
  end
96
96
 
97
- describe "when enforce_license is set to false" do
98
- it "should not check the license acceptance" do
99
- expect(@app).to_not receive(:check_license_acceptance)
100
- @app.run(enforce_license: false)
101
- end
102
- end
103
-
104
97
  it "should run the actual application" do
105
98
  expect(@app).to receive(:run_application).and_return(true)
106
99
  @app.run
@@ -201,7 +194,6 @@ describe Chef::Application do
201
194
  it "should initialise the chef logger" do
202
195
  allow(Chef::Log).to receive(:level=)
203
196
  @monologger = double("Monologger")
204
- expect(MonoLogger).to receive(:new).with(Chef::Config[:log_location]).and_return(@monologger)
205
197
  allow(MonoLogger).to receive(:new).with(STDOUT).and_return(@monologger)
206
198
  allow(@monologger).to receive(:formatter=).with(Chef::Log.logger.formatter)
207
199
  expect(Chef::Log).to receive(:init).with(@monologger)
@@ -279,7 +271,7 @@ describe Chef::Application do
279
271
  it "it sets log_location to an instance of #{expected_class}" do
280
272
  expect(expected_class).to receive(:new).with no_args
281
273
  @app.configure_logging
282
- expect(Chef::Config[:log_location]).to be logger_instance
274
+ expect(Chef::Config[:log_location]).to eq([ logger_instance, STDOUT ])
283
275
  end
284
276
  end
285
277
  end
@@ -25,9 +25,11 @@ describe Chef::ChefFS::FileSystem::OperationFailedError do
25
25
 
26
26
  context "has a cause attribute and HTTP result code is 400" do
27
27
  it "include error cause" do
28
+ allow_message_expectations_on_nil
28
29
  response_body = '{"error":["Invalid key test in request body"]}'
29
- response = double(:response, code: "400", body: response_body)
30
- exception = Net::HTTPClientException.new("(exception) unauthorized", response)
30
+ allow(@response).to receive(:code).and_return("400")
31
+ allow(@response).to receive(:body).and_return(response_body)
32
+ exception = Net::HTTPClientException.new("(exception) unauthorized", @response)
31
33
  expect do
32
34
  raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, exception), error_message
33
35
  end.to raise_error(Chef::ChefFS::FileSystem::OperationFailedError, "#{error_message} cause: #{response_body}")
@@ -308,13 +308,15 @@ describe Chef::Client do
308
308
  end
309
309
 
310
310
  describe "eol release warning" do
311
- it "warns when the date is after April 30, 2021" do
311
+ it "warns when running an EOL release" do
312
+ stub_const("Chef::VERSION", 15)
312
313
  allow(Time).to receive(:now).and_return(Time.new(2021, 5, 1, 5))
313
314
  expect(logger).to receive(:warn).with(/This release of.*became end of life \(EOL\) on May 1st 2021/)
314
315
  client.warn_if_eol
315
316
  end
316
317
 
317
- it "does not warn when date is before May 1st 2021" do
318
+ it "does not warn when running an non-EOL release" do
319
+ stub_const("Chef::VERSION", 15)
318
320
  allow(Time).to receive(:now).and_return(Time.new(2021, 4, 31))
319
321
  expect(logger).to_not receive(:warn).with(/became end of life/)
320
322
  client.warn_if_eol
@@ -349,7 +351,7 @@ describe Chef::Client do
349
351
  describe "configuring output formatters" do
350
352
  context "when no formatter has been configured" do
351
353
  it "configures the :doc formatter" do
352
- expect(client.formatters_for_run).to eq([[:doc]])
354
+ expect(client.formatters_for_run).to eq([[:doc, nil]])
353
355
  end
354
356
 
355
357
  context "and force_logger is set" do
@@ -368,7 +370,7 @@ describe Chef::Client do
368
370
  end
369
371
 
370
372
  it "configures the :doc formatter" do
371
- expect(client.formatters_for_run).to eq([[:doc]])
373
+ expect(client.formatters_for_run).to eq([[:doc, nil]])
372
374
  end
373
375
  end
374
376
 
@@ -379,7 +381,7 @@ describe Chef::Client do
379
381
  end
380
382
 
381
383
  it "configures the :doc formatter" do
382
- expect(client.formatters_for_run).to eq([[:doc]])
384
+ expect(client.formatters_for_run).to eq([[:doc, nil]])
383
385
  end
384
386
  end
385
387
  end
@@ -78,7 +78,7 @@ describe Chef::Cookbook::GemInstaller do
78
78
 
79
79
  it "generates a valid Gemfile when Chef::Config[:rubygems_url] is set to a String" do
80
80
  expect(gem_installer).to receive(:shell_out!).and_return(shell_out)
81
- Chef::Config[:rubygems_url] = "https://www.rubygems.org"
81
+ Chef::Config[:rubygems_url] = "https://rubygems.org"
82
82
  expect { gem_installer.install }.to_not raise_error
83
83
 
84
84
  expect(bundler_dsl.dependencies.find { |d| d.name == "httpclient" }.requirements_list.length).to eql(2)
@@ -86,7 +86,7 @@ describe Chef::Cookbook::GemInstaller do
86
86
 
87
87
  it "generates a valid Gemfile when Chef::Config[:rubygems_url] is set to an Array" do
88
88
  expect(gem_installer).to receive(:shell_out!).and_return(shell_out)
89
- Chef::Config[:rubygems_url] = [ "https://www.rubygems.org" ]
89
+ Chef::Config[:rubygems_url] = [ "https://rubygems.org" ]
90
90
 
91
91
  expect { gem_installer.install }.to_not raise_error
92
92
 
@@ -95,8 +95,7 @@ describe Chef::Cookbook::GemInstaller do
95
95
 
96
96
  it "skip metadata installation when Chef::Config[:skip_gem_metadata_installation] is set to true" do
97
97
  Chef::Config[:skip_gem_metadata_installation] = true
98
- expect(gem_installer).to_not receive(:shell_out!)
99
- expect(gem_installer.install).to be_nil
98
+ expect(gem_installer.install).to_not receive(:shell_out!)
100
99
  end
101
100
 
102
101
  it "install metadata when Chef::Config[:skip_gem_metadata_installation] is not true" do
@@ -29,7 +29,7 @@ describe Chef::Cookbook::Metadata do
29
29
  @fields = %i{name description long_description maintainer
30
30
  maintainer_email license platforms dependencies
31
31
  providing recipes version source_url issues_url
32
- privacy ohai_versions chef_versions gems}
32
+ privacy ohai_versions chef_versions gems eager_load_libraries}
33
33
  end
34
34
 
35
35
  it "does not depend on object identity for equality" do
@@ -127,6 +127,10 @@ describe Chef::Cookbook::Metadata do
127
127
  it "is not private" do
128
128
  expect(metadata.privacy).to eq(false)
129
129
  end
130
+
131
+ it "has eager_load_libraries set to true" do
132
+ expect(metadata.eager_load_libraries).to eq(true)
133
+ end
130
134
  end
131
135
 
132
136
  describe "validation" do
@@ -179,6 +183,7 @@ describe Chef::Cookbook::Metadata do
179
183
  source_url: "http://example.com",
180
184
  issues_url: "http://example.com/issues",
181
185
  privacy: true,
186
+ eager_load_libraries: false,
182
187
  }
183
188
  params.sort_by(&:to_s).each do |field, field_value|
184
189
  describe field do
@@ -269,8 +274,33 @@ describe Chef::Cookbook::Metadata do
269
274
 
270
275
  it "errors on self-dependencies" do
271
276
  metadata.name("foo")
272
- expect { metadata.depends("foo") }.to raise_error
273
- # FIXME: add the error type
277
+ expect { metadata.depends("foo") }.to raise_error(RuntimeError, /Cookbook depends on itself/)
278
+ end
279
+ end
280
+
281
+ describe "eager_load_libraries" do
282
+ it "can be set to true" do
283
+ metadata.send(:eager_load_libraries, true)
284
+ expect(metadata.send(:eager_load_libraries)).to eql(true)
285
+ end
286
+
287
+ it "can be set to false" do
288
+ metadata.send(:eager_load_libraries, false)
289
+ expect(metadata.send(:eager_load_libraries)).to eql(false)
290
+ end
291
+
292
+ it "can be set to a string" do
293
+ metadata.send(:eager_load_libraries, "default.rb")
294
+ expect(metadata.send(:eager_load_libraries)).to eql("default.rb")
295
+ end
296
+
297
+ it "can be set to an array" do
298
+ metadata.send(:eager_load_libraries, [ "default.rb", "foo/*/**.rb" ])
299
+ expect(metadata.send(:eager_load_libraries)).to eql([ "default.rb", "foo/*/**.rb" ])
300
+ end
301
+
302
+ it "cannot be set to a number" do
303
+ expect { metadata.send(:eager_load_libraries, 1) }.to raise_error(Chef::Exceptions::ValidationFailed)
274
304
  end
275
305
  end
276
306
 
@@ -448,10 +478,11 @@ describe Chef::Cookbook::Metadata do
448
478
  metadata.version "1.2.3"
449
479
  metadata.gem "foo", "~> 1.2"
450
480
  metadata.gem "bar", ">= 2.2", "< 4.0"
451
- metadata.chef_version ">= 11.14.2", "< 11.18.10"
452
- metadata.chef_version ">= 12.2.1", "< 12.5.1"
453
- metadata.ohai_version ">= 7.1.0", "< 7.5.0"
454
- metadata.ohai_version ">= 8.0.1", "< 8.6.0"
481
+ metadata.chef_version "< 11.18.10", ">= 11.14.2"
482
+ metadata.chef_version "< 12.5.1", ">= 12.2.1"
483
+ metadata.ohai_version "< 7.5.0", ">= 7.1.0"
484
+ metadata.ohai_version "< 8.6.0", ">= 8.0.1"
485
+ metadata.eager_load_libraries [ "default.rb", "foo/*/**.rb" ]
455
486
  end
456
487
 
457
488
  it "should produce the same output from to_json and Chef::JSONCompat" do
@@ -537,18 +568,6 @@ describe Chef::Cookbook::Metadata do
537
568
  @hash = metadata.to_hash
538
569
  end
539
570
 
540
- it "should transform deprecated greater than syntax for :dependencies" do
541
- @hash[:dependencies.to_s]["foo::bar"] = ">> 0.2"
542
- deserial = Chef::Cookbook::Metadata.from_hash(@hash)
543
- expect(deserial.send(:dependencies)["foo::bar"]).to eq("> 0.2")
544
- end
545
-
546
- it "should transform deprecated less than syntax for :dependencies" do
547
- @hash[:dependencies.to_s]["foo::bar"] = "<< 0.2"
548
- deserial = Chef::Cookbook::Metadata.from_hash(@hash)
549
- expect(deserial.send(:dependencies)["foo::bar"]).to eq("< 0.2")
550
- end
551
-
552
571
  it "should ignore multiple dependency constraints for :dependencies" do
553
572
  @hash[:dependencies.to_s]["foo::bar"] = [ ">= 1.0", "<= 5.2" ]
554
573
  deserial = Chef::Cookbook::Metadata.from_hash(@hash)
@@ -243,7 +243,7 @@ describe Chef::DataBag do
243
243
 
244
244
  expect do
245
245
  Chef::DataBag.load("foo")
246
- end.to raise_error Chef::Exceptions::InvalidDataBagPath, "Data bag path '/var/chef/data_bags' not found. Please create this directory."
246
+ end.to raise_error Chef::Exceptions::InvalidDataBagPath, "Data bag path '/var/chef/data_bags' is invalid"
247
247
  end
248
248
 
249
249
  end
@@ -19,6 +19,12 @@ require_relative "../spec_helper"
19
19
  require "chef/data_collector"
20
20
  require "socket"
21
21
 
22
+ #
23
+ # FIXME FIXME FIXME: What we need to do here is have the ability to construct a real resource collection
24
+ # with some test resources that will correctly be up-to-date/updated/skipped/failed/unprocessed and really
25
+ # converge a client with them (sort of chefspec-like construction of a Chef::Client but with the actions
26
+ # actually running -- another testing requirement similar to the integration testing framework in cheffish as well)
27
+ #
22
28
  describe Chef::DataCollector do
23
29
  before(:each) do
24
30
  Chef::Config[:enable_reporting] = true
@@ -30,9 +36,23 @@ describe Chef::DataCollector do
30
36
 
31
37
  let(:data_collector) { Chef::DataCollector::Reporter.new(events) }
32
38
 
33
- let(:new_resource) { Chef::Resource::File.new("/tmp/a-file.txt") }
39
+ let(:new_resource) do
40
+ new_resource = Chef::Resource::File.new("/tmp/a-file.txt")
41
+ new_resource.checksum nil
42
+ new_resource
43
+ end
44
+
45
+ let(:current_resource) do
46
+ current_resource = Chef::Resource::File.new("/tmp/a-file.txt")
47
+ current_resource.checksum "1234123412341234123412341234123412341234123412341234123412341234"
48
+ current_resource
49
+ end
34
50
 
35
- let(:current_resource) { Chef::Resource::File.new("/tmp/a-file.txt") }
51
+ let(:after_resource) do
52
+ after_resource = Chef::Resource::File.new("/tmp/a-file.txt")
53
+ after_resource.checksum "6789678967896789678967896789678967896789678967896789678967896789"
54
+ after_resource
55
+ end
36
56
 
37
57
  let(:events) { Chef::EventDispatch::Dispatcher.new }
38
58
 
@@ -130,10 +150,10 @@ describe Chef::DataCollector do
130
150
  new_resource.respond_to?(:diff) && %w{updated failed}.include?(status)
131
151
  end
132
152
 
133
- def resource_record_for(current_resource, new_resource, action, status, duration)
153
+ def resource_record_for(new_resource, before_resource, after_resource, action, status, duration)
134
154
  {
135
- "after" => new_resource.state_for_resource_reporter,
136
- "before" => current_resource&.state_for_resource_reporter,
155
+ "after" => after_resource&.state_for_resource_reporter || {},
156
+ "before" => before_resource&.state_for_resource_reporter || {},
137
157
  "cookbook_name" => cookbook_name,
138
158
  "cookbook_version" => cookbook_version.version,
139
159
  "delta" => resource_has_diff(new_resource, status) ? new_resource.diff : "",
@@ -634,13 +654,14 @@ describe Chef::DataCollector do
634
654
  context "when the run contains a file resource that is up-to-date" do
635
655
  let(:total_resource_count) { 1 }
636
656
  let(:updated_resource_count) { 0 }
637
- let(:resource_record) { [ resource_record_for(current_resource, new_resource, :create, "up-to-date", "1234") ] }
657
+ let(:resource_record) { [ resource_record_for(new_resource, current_resource, after_resource, :create, "up-to-date", "1234") ] }
638
658
  let(:status) { "success" }
639
659
 
640
660
  before do
641
661
  events.resource_action_start(new_resource, :create)
642
662
  events.resource_current_state_loaded(new_resource, :create, current_resource)
643
663
  events.resource_up_to_date(new_resource, :create)
664
+ events.resource_after_state_loaded(new_resource, :create, after_resource)
644
665
  new_resource.instance_variable_set(:@elapsed_time, 1.2345)
645
666
  events.resource_completed(new_resource)
646
667
  events.converge_complete
@@ -653,13 +674,14 @@ describe Chef::DataCollector do
653
674
  context "when the run contains a file resource that is updated" do
654
675
  let(:total_resource_count) { 1 }
655
676
  let(:updated_resource_count) { 1 }
656
- let(:resource_record) { [ resource_record_for(current_resource, new_resource, :create, "updated", "1234") ] }
677
+ let(:resource_record) { [ resource_record_for(new_resource, current_resource, after_resource, :create, "updated", "1234") ] }
657
678
  let(:status) { "success" }
658
679
 
659
680
  before do
660
681
  events.resource_action_start(new_resource, :create)
661
682
  events.resource_current_state_loaded(new_resource, :create, current_resource)
662
683
  events.resource_updated(new_resource, :create)
684
+ events.resource_after_state_loaded(new_resource, :create, after_resource)
663
685
  new_resource.instance_variable_set(:@elapsed_time, 1.2345)
664
686
  events.resource_completed(new_resource)
665
687
  events.converge_complete
@@ -679,7 +701,7 @@ describe Chef::DataCollector do
679
701
  allow(r).to receive(:cookbook_version).and_return(cookbook_version)
680
702
  r
681
703
  end
682
- let(:resource_record) { [ resource_record_for(implementation_resource, implementation_resource, :create, "updated", "2345"), resource_record_for(current_resource, new_resource, :create, "updated", "1234") ] }
704
+ let(:resource_record) { [ resource_record_for(implementation_resource, implementation_resource, implementation_resource, :create, "updated", "2345"), resource_record_for(new_resource, current_resource, after_resource, :create, "updated", "1234") ] }
683
705
  let(:status) { "success" }
684
706
 
685
707
  before do
@@ -689,10 +711,12 @@ describe Chef::DataCollector do
689
711
  events.resource_action_start(implementation_resource , :create)
690
712
  events.resource_current_state_loaded(implementation_resource, :create, implementation_resource)
691
713
  events.resource_updated(implementation_resource, :create)
714
+ events.resource_after_state_loaded(implementation_resource, :create, implementation_resource)
692
715
  implementation_resource.instance_variable_set(:@elapsed_time, 2.3456)
693
716
  events.resource_completed(implementation_resource)
694
717
 
695
718
  events.resource_updated(new_resource, :create)
719
+ events.resource_after_state_loaded(new_resource, :create, after_resource)
696
720
  new_resource.instance_variable_set(:@elapsed_time, 1.2345)
697
721
  events.resource_completed(new_resource)
698
722
  events.converge_complete
@@ -706,7 +730,7 @@ describe Chef::DataCollector do
706
730
  let(:total_resource_count) { 1 }
707
731
  let(:updated_resource_count) { 0 }
708
732
  let(:resource_record) do
709
- rec = resource_record_for(current_resource, new_resource, :create, "skipped", "1234")
733
+ rec = resource_record_for(new_resource, nil, nil, :create, "skipped", "1234")
710
734
  rec["conditional"] = "not_if { #code block }" # FIXME: "#code block" is poor, is there some way to fix this?
711
735
  [ rec ]
712
736
  end
@@ -715,7 +739,6 @@ describe Chef::DataCollector do
715
739
  before do
716
740
  conditional = (new_resource.not_if { true }).first
717
741
  events.resource_action_start(new_resource, :create)
718
- events.resource_current_state_loaded(new_resource, :create, current_resource)
719
742
  events.resource_skipped(new_resource, :create, conditional)
720
743
  new_resource.instance_variable_set(:@elapsed_time, 1.2345)
721
744
  events.resource_completed(new_resource)
@@ -730,7 +753,7 @@ describe Chef::DataCollector do
730
753
  let(:total_resource_count) { 1 }
731
754
  let(:updated_resource_count) { 0 }
732
755
  let(:resource_record) do
733
- rec = resource_record_for(current_resource, new_resource, :create, "skipped", "1234")
756
+ rec = resource_record_for(new_resource, nil, nil, :create, "skipped", "1234")
734
757
  rec["conditional"] = 'not_if "true"'
735
758
  [ rec ]
736
759
  end
@@ -739,7 +762,6 @@ describe Chef::DataCollector do
739
762
  before do
740
763
  conditional = (new_resource.not_if "true").first
741
764
  events.resource_action_start(new_resource, :create)
742
- events.resource_current_state_loaded(new_resource, :create, current_resource)
743
765
  events.resource_skipped(new_resource, :create, conditional)
744
766
  new_resource.instance_variable_set(:@elapsed_time, 1.2345)
745
767
  events.resource_completed(new_resource)
@@ -756,7 +778,7 @@ describe Chef::DataCollector do
756
778
  let(:total_resource_count) { 1 }
757
779
  let(:updated_resource_count) { 0 }
758
780
  let(:resource_record) do
759
- rec = resource_record_for(current_resource, new_resource, :create, "failed", "1234")
781
+ rec = resource_record_for(new_resource, current_resource, nil, :create, "failed", "1234")
760
782
  rec["error_message"] = "imperial to metric conversion error"
761
783
  [ rec ]
762
784
  end
@@ -783,7 +805,7 @@ describe Chef::DataCollector do
783
805
  let(:total_resource_count) { 1 }
784
806
  let(:updated_resource_count) { 0 }
785
807
  let(:resource_record) do
786
- rec = resource_record_for(current_resource, new_resource, :create, "failed", "1234")
808
+ rec = resource_record_for(new_resource, nil, nil, :create, "failed", "1234")
787
809
  rec["before"] = {}
788
810
  rec["error_message"] = "imperial to metric conversion error"
789
811
  [ rec ]
@@ -818,10 +840,9 @@ describe Chef::DataCollector do
818
840
  res
819
841
  end
820
842
  let(:resource_record) do
821
- rec1 = resource_record_for(current_resource, new_resource, :create, "failed", "1234")
843
+ rec1 = resource_record_for(new_resource, current_resource, nil, :create, "failed", "1234")
822
844
  rec1["error_message"] = "imperial to metric conversion error"
823
- rec2 = resource_record_for(nil, unprocessed_resource, :nothing, "unprocessed", "")
824
- rec2["before"] = {}
845
+ rec2 = resource_record_for(unprocessed_resource, nil, nil, :nothing, "unprocessed", "")
825
846
  [ rec1, rec2 ]
826
847
  end
827
848
  let(:status) { "failure" }