chef 15.17.4 → 16.0.257

Sign up to get free protection for your applications and to get access to all the features.
Files changed (569) 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/lib/chef/action_collection.rb +16 -5
  8. data/lib/chef/api_client/registration.rb +2 -2
  9. data/lib/chef/application.rb +33 -54
  10. data/lib/chef/application/apply.rb +20 -3
  11. data/lib/chef/application/base.rb +8 -3
  12. data/lib/chef/application/exit_code.rb +2 -2
  13. data/lib/chef/application/knife.rb +1 -1
  14. data/lib/chef/chef_class.rb +4 -4
  15. data/lib/chef/chef_fs/chef_fs_data_store.rb +3 -3
  16. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +1 -1
  17. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +1 -1
  18. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +6 -2
  19. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
  20. data/lib/chef/chef_fs/file_system/repository/base_file.rb +0 -1
  21. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
  22. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
  23. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +5 -5
  24. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  25. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
  26. data/lib/chef/chef_fs/path_utils.rb +3 -3
  27. data/lib/chef/client.rb +16 -14
  28. data/lib/chef/config.rb +1 -1
  29. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  30. data/lib/chef/cookbook/gem_installer.rb +1 -1
  31. data/lib/chef/cookbook/metadata.rb +45 -22
  32. data/lib/chef/cookbook_version.rb +40 -5
  33. data/lib/chef/data_bag.rb +2 -2
  34. data/lib/chef/data_collector/error_handlers.rb +1 -1
  35. data/lib/chef/data_collector/run_end_message.rb +7 -1
  36. data/lib/chef/deprecated.rb +1 -9
  37. data/lib/chef/dist.rb +8 -0
  38. data/lib/chef/dsl/chef_vault.rb +84 -0
  39. data/lib/chef/dsl/declare_resource.rb +7 -5
  40. data/lib/chef/dsl/platform_introspection.rb +2 -3
  41. data/lib/chef/dsl/recipe.rb +7 -12
  42. data/lib/chef/dsl/universal.rb +3 -7
  43. data/lib/chef/environment.rb +2 -2
  44. data/lib/chef/event_dispatch/base.rb +3 -0
  45. data/lib/chef/exceptions.rb +0 -3
  46. data/lib/chef/formatters/doc.rb +1 -1
  47. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
  48. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
  49. data/lib/chef/formatters/indentable_output_stream.rb +7 -16
  50. data/lib/chef/http.rb +1 -2
  51. data/lib/chef/http/http_request.rb +3 -2
  52. data/lib/chef/knife.rb +1 -3
  53. data/lib/chef/knife/acl_add.rb +57 -0
  54. data/lib/chef/knife/acl_base.rb +183 -0
  55. data/lib/chef/knife/acl_bulk_add.rb +78 -0
  56. data/lib/chef/knife/acl_bulk_remove.rb +83 -0
  57. data/lib/chef/knife/acl_remove.rb +62 -0
  58. data/lib/chef/knife/acl_show.rb +56 -0
  59. data/lib/chef/knife/bootstrap.rb +93 -97
  60. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  61. data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
  62. data/lib/chef/knife/bootstrap/templates/chef-full.erb +20 -20
  63. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +13 -15
  64. data/lib/chef/knife/bootstrap/train_connector.rb +0 -1
  65. data/lib/chef/knife/cookbook_download.rb +1 -1
  66. data/lib/chef/knife/cookbook_metadata.rb +1 -1
  67. data/lib/chef/knife/core/bootstrap_context.rb +63 -60
  68. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  69. data/lib/chef/knife/core/generic_presenter.rb +4 -3
  70. data/lib/chef/knife/core/hashed_command_loader.rb +2 -3
  71. data/lib/chef/knife/core/node_presenter.rb +2 -2
  72. data/lib/chef/knife/core/status_presenter.rb +5 -5
  73. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  74. data/lib/chef/knife/core/ui.rb +17 -1
  75. data/lib/chef/knife/core/windows_bootstrap_context.rb +45 -58
  76. data/lib/chef/knife/data_bag_secret_options.rb +18 -45
  77. data/lib/chef/knife/environment_compare.rb +1 -1
  78. data/lib/chef/knife/exec.rb +2 -2
  79. data/lib/chef/knife/group_add.rb +55 -0
  80. data/lib/chef/knife/{cookbook_site_download.rb → group_create.rb} +21 -12
  81. data/lib/chef/knife/group_destroy.rb +53 -0
  82. data/lib/chef/knife/{cookbook_site_list.rb → group_list.rb} +14 -11
  83. data/lib/chef/knife/group_remove.rb +56 -0
  84. data/lib/chef/knife/{cookbook_site_install.rb → group_show.rb} +21 -12
  85. data/lib/chef/knife/list.rb +1 -1
  86. data/lib/chef/knife/ssh.rb +12 -50
  87. data/lib/chef/knife/status.rb +3 -3
  88. data/lib/chef/knife/supermarket_download.rb +1 -2
  89. data/lib/chef/knife/supermarket_install.rb +1 -2
  90. data/lib/chef/knife/supermarket_list.rb +1 -2
  91. data/lib/chef/knife/supermarket_search.rb +1 -2
  92. data/lib/chef/knife/supermarket_share.rb +1 -2
  93. data/lib/chef/knife/supermarket_show.rb +1 -2
  94. data/lib/chef/knife/supermarket_unshare.rb +1 -2
  95. data/lib/chef/knife/{cookbook_site_show.rb → user_dissociate.rb} +15 -13
  96. data/lib/chef/knife/{cookbook_site_search.rb → user_invite_add.rb} +16 -13
  97. data/lib/chef/knife/user_invite_list.rb +34 -0
  98. data/lib/chef/knife/user_invite_recind.rb +63 -0
  99. data/lib/chef/knife/yaml_convert.rb +91 -0
  100. data/lib/chef/log.rb +1 -1
  101. data/lib/chef/mixin/create_path.rb +8 -8
  102. data/lib/chef/mixin/openssl_helper.rb +3 -26
  103. data/lib/chef/mixin/powershell_exec.rb +10 -1
  104. data/lib/chef/mixin/powershell_out.rb +1 -1
  105. data/lib/chef/mixin/properties.rb +13 -1
  106. data/lib/chef/mixin/shell_out.rb +0 -4
  107. data/lib/chef/mixin/template.rb +0 -1
  108. data/lib/chef/monkey_patches/net_http.rb +0 -4
  109. data/lib/chef/node.rb +18 -6
  110. data/lib/chef/node/mixin/deep_merge_cache.rb +7 -7
  111. data/lib/chef/node/mixin/immutablize_array.rb +4 -0
  112. data/lib/chef/node/mixin/immutablize_hash.rb +3 -0
  113. data/lib/chef/node_map.rb +7 -36
  114. data/lib/chef/platform/priority_map.rb +4 -4
  115. data/lib/chef/platform/query_helpers.rb +6 -34
  116. data/lib/chef/powershell.rb +14 -0
  117. data/lib/chef/property.rb +22 -4
  118. data/lib/chef/provider.rb +40 -6
  119. data/lib/chef/provider/cron.rb +2 -2
  120. data/lib/chef/provider/directory.rb +2 -2
  121. data/lib/chef/provider/dsc_resource.rb +1 -1
  122. data/lib/chef/provider/dsc_script.rb +1 -1
  123. data/lib/chef/provider/execute.rb +2 -8
  124. data/lib/chef/provider/file.rb +5 -5
  125. data/lib/chef/provider/git.rb +84 -27
  126. data/lib/chef/provider/group.rb +4 -4
  127. data/lib/chef/provider/http_request.rb +6 -6
  128. data/lib/chef/provider/ifconfig.rb +4 -4
  129. data/lib/chef/provider/launchd.rb +36 -51
  130. data/lib/chef/provider/link.rb +2 -2
  131. data/lib/chef/provider/mount.rb +5 -5
  132. data/lib/chef/provider/mount/solaris.rb +1 -0
  133. data/lib/chef/provider/osx_profile.rb +7 -3
  134. data/lib/chef/provider/package.rb +2 -2
  135. data/lib/chef/provider/package/cab.rb +3 -4
  136. data/lib/chef/provider/package/chocolatey.rb +1 -3
  137. data/lib/chef/provider/package/dnf.rb +66 -10
  138. data/lib/chef/provider/package/dnf/dnf_helper.py +84 -30
  139. data/lib/chef/provider/package/dnf/python_helper.rb +79 -36
  140. data/lib/chef/provider/package/dnf/version.rb +5 -1
  141. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -3
  142. data/lib/chef/provider/package/homebrew.rb +106 -42
  143. data/lib/chef/provider/package/msu.rb +3 -1
  144. data/lib/chef/provider/package/pacman.rb +25 -34
  145. data/lib/chef/provider/package/powershell.rb +2 -6
  146. data/lib/chef/provider/package/rubygems.rb +29 -2
  147. data/lib/chef/provider/package/snap.rb +27 -96
  148. data/lib/chef/provider/package/windows.rb +3 -2
  149. data/lib/chef/provider/package/windows/msi.rb +2 -2
  150. data/lib/chef/provider/package/yum.rb +0 -8
  151. data/lib/chef/provider/package/yum/yum_helper.py +0 -4
  152. data/lib/chef/provider/package/zypper.rb +1 -1
  153. data/lib/chef/provider/powershell_script.rb +4 -10
  154. data/lib/chef/provider/registry_key.rb +4 -4
  155. data/lib/chef/provider/remote_directory.rb +3 -3
  156. data/lib/chef/provider/remote_file/ftp.rb +3 -2
  157. data/lib/chef/provider/remote_file/local_file.rb +2 -1
  158. data/lib/chef/provider/remote_file/sftp.rb +3 -2
  159. data/lib/chef/provider/route.rb +5 -3
  160. data/lib/chef/provider/ruby_block.rb +1 -1
  161. data/lib/chef/provider/script.rb +2 -2
  162. data/lib/chef/provider/service.rb +8 -8
  163. data/lib/chef/provider/service/aixinit.rb +1 -1
  164. data/lib/chef/provider/service/arch.rb +2 -2
  165. data/lib/chef/provider/service/debian.rb +31 -29
  166. data/lib/chef/provider/service/gentoo.rb +2 -2
  167. data/lib/chef/provider/service/macosx.rb +7 -12
  168. data/lib/chef/provider/service/openbsd.rb +1 -1
  169. data/lib/chef/provider/service/redhat.rb +2 -2
  170. data/lib/chef/provider/service/simple.rb +3 -3
  171. data/lib/chef/provider/service/systemd.rb +12 -12
  172. data/lib/chef/provider/service/upstart.rb +1 -1
  173. data/lib/chef/provider/service/windows.rb +5 -11
  174. data/lib/chef/provider/subversion.rb +25 -5
  175. data/lib/chef/provider/systemd_unit.rb +26 -25
  176. data/lib/chef/provider/user.rb +6 -6
  177. data/lib/chef/provider/user/dscl.rb +3 -3
  178. data/lib/chef/provider/user/mac.rb +10 -9
  179. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  180. data/lib/chef/provider/windows_env.rb +3 -3
  181. data/lib/chef/provider/windows_script.rb +2 -2
  182. data/lib/chef/provider/windows_task.rb +7 -9
  183. data/lib/chef/provider/yum_repository.rb +1 -1
  184. data/lib/chef/provider/zypper_repository.rb +11 -31
  185. data/lib/chef/providers.rb +0 -6
  186. data/lib/chef/recipe.rb +36 -0
  187. data/lib/chef/resource.rb +41 -56
  188. data/lib/chef/resource/action_class.rb +24 -22
  189. data/lib/chef/resource/alternatives.rb +149 -0
  190. data/lib/chef/resource/apt_package.rb +2 -1
  191. data/lib/chef/resource/apt_preference.rb +69 -2
  192. data/lib/chef/resource/apt_repository.rb +337 -5
  193. data/lib/chef/resource/apt_update.rb +52 -1
  194. data/lib/chef/resource/archive_file.rb +9 -29
  195. data/lib/chef/resource/bash.rb +2 -0
  196. data/lib/chef/resource/bff_package.rb +9 -1
  197. data/lib/chef/resource/breakpoint.rb +0 -1
  198. data/lib/chef/resource/build_essential.rb +42 -48
  199. data/lib/chef/resource/cab_package.rb +8 -1
  200. data/lib/chef/resource/chef_client_cron.rb +225 -0
  201. data/lib/chef/resource/chef_client_scheduled_task.rb +198 -0
  202. data/lib/chef/resource/chef_client_systemd_timer.rb +177 -0
  203. data/lib/chef/resource/chef_gem.rb +9 -16
  204. data/lib/chef/resource/chef_handler.rb +2 -1
  205. data/lib/chef/resource/chef_sleep.rb +0 -1
  206. data/lib/chef/resource/chef_vault_secret.rb +135 -0
  207. data/lib/chef/resource/chocolatey_config.rb +3 -1
  208. data/lib/chef/resource/chocolatey_feature.rb +2 -1
  209. data/lib/chef/resource/chocolatey_package.rb +2 -1
  210. data/lib/chef/resource/chocolatey_source.rb +2 -1
  211. data/lib/chef/resource/cookbook_file.rb +1 -1
  212. data/lib/chef/resource/cron.rb +22 -68
  213. data/lib/chef/resource/cron_access.rb +8 -15
  214. data/lib/chef/resource/cron_d.rb +9 -75
  215. data/lib/chef/resource/csh.rb +2 -0
  216. data/lib/chef/resource/directory.rb +2 -2
  217. data/lib/chef/resource/dmg_package.rb +4 -4
  218. data/lib/chef/resource/dnf_package.rb +2 -3
  219. data/lib/chef/resource/dpkg_package.rb +2 -1
  220. data/lib/chef/resource/dsc_resource.rb +6 -4
  221. data/lib/chef/resource/dsc_script.rb +3 -2
  222. data/lib/chef/resource/execute.rb +13 -12
  223. data/lib/chef/resource/file.rb +3 -1
  224. data/lib/chef/resource/freebsd_package.rb +2 -1
  225. data/lib/chef/resource/gem_package.rb +14 -6
  226. data/lib/chef/resource/group.rb +4 -1
  227. data/lib/chef/resource/helpers/cron_validations.rb +98 -0
  228. data/lib/chef/resource/homebrew_cask.rb +5 -4
  229. data/lib/chef/resource/homebrew_package.rb +4 -2
  230. data/lib/chef/resource/homebrew_tap.rb +2 -1
  231. data/lib/chef/resource/hostname.rb +41 -36
  232. data/lib/chef/resource/http_request.rb +0 -1
  233. data/lib/chef/resource/ifconfig.rb +1 -1
  234. data/lib/chef/resource/ips_package.rb +10 -2
  235. data/lib/chef/resource/kernel_module.rb +29 -29
  236. data/lib/chef/resource/ksh.rb +2 -0
  237. data/lib/chef/resource/launchd.rb +6 -6
  238. data/lib/chef/resource/link.rb +1 -23
  239. data/lib/chef/resource/locale.rb +58 -24
  240. data/lib/chef/resource/log.rb +12 -1
  241. data/lib/chef/resource/lwrp_base.rb +1 -8
  242. data/lib/chef/resource/macos_userdefaults.rb +9 -6
  243. data/lib/chef/resource/macosx_service.rb +2 -1
  244. data/lib/chef/resource/macports_package.rb +10 -2
  245. data/lib/chef/resource/mdadm.rb +62 -2
  246. data/lib/chef/resource/mount.rb +3 -0
  247. data/lib/chef/resource/msu_package.rb +13 -1
  248. data/lib/chef/resource/notify_group.rb +8 -3
  249. data/lib/chef/resource/ohai.rb +19 -3
  250. data/lib/chef/resource/ohai_hint.rb +3 -12
  251. data/lib/chef/resource/openbsd_package.rb +9 -1
  252. data/lib/chef/resource/openssl_dhparam.rb +10 -1
  253. data/lib/chef/resource/openssl_ec_private_key.rb +23 -1
  254. data/lib/chef/resource/openssl_ec_public_key.rb +21 -1
  255. data/lib/chef/resource/openssl_rsa_private_key.rb +20 -1
  256. data/lib/chef/resource/openssl_rsa_public_key.rb +22 -1
  257. data/lib/chef/resource/openssl_x509_certificate.rb +37 -1
  258. data/lib/chef/resource/openssl_x509_crl.rb +12 -1
  259. data/lib/chef/resource/openssl_x509_request.rb +37 -1
  260. data/lib/chef/resource/osx_profile.rb +3 -2
  261. data/lib/chef/resource/package.rb +2 -1
  262. data/lib/chef/resource/pacman_package.rb +2 -1
  263. data/lib/chef/resource/paludis_package.rb +12 -3
  264. data/lib/chef/resource/perl.rb +2 -0
  265. data/lib/chef/resource/plist.rb +207 -0
  266. data/lib/chef/resource/portage_package.rb +13 -3
  267. data/lib/chef/resource/powershell_package.rb +1 -3
  268. data/lib/chef/resource/powershell_package_source.rb +3 -1
  269. data/lib/chef/resource/powershell_script.rb +7 -17
  270. data/lib/chef/resource/python.rb +2 -0
  271. data/lib/chef/resource/reboot.rb +0 -1
  272. data/lib/chef/resource/registry_key.rb +1 -2
  273. data/lib/chef/resource/remote_directory.rb +2 -0
  274. data/lib/chef/resource/remote_file.rb +2 -0
  275. data/lib/chef/resource/rhsm_errata.rb +0 -1
  276. data/lib/chef/resource/rhsm_errata_level.rb +0 -1
  277. data/lib/chef/resource/rhsm_register.rb +2 -1
  278. data/lib/chef/resource/rhsm_repo.rb +3 -1
  279. data/lib/chef/resource/rhsm_subscription.rb +4 -1
  280. data/lib/chef/resource/route.rb +5 -1
  281. data/lib/chef/resource/rpm_package.rb +9 -2
  282. data/lib/chef/resource/ruby.rb +2 -0
  283. data/lib/chef/resource/ruby_block.rb +1 -1
  284. data/lib/chef/resource/scm/_scm.rb +48 -0
  285. data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
  286. data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +8 -5
  287. data/lib/chef/resource/script.rb +6 -3
  288. data/lib/chef/resource/service.rb +6 -7
  289. data/lib/chef/resource/smartos_package.rb +9 -1
  290. data/lib/chef/resource/snap_package.rb +3 -1
  291. data/lib/chef/resource/solaris_package.rb +9 -1
  292. data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
  293. data/lib/chef/resource/sudo.rb +9 -9
  294. data/lib/chef/resource/support/cron.d.erb +1 -1
  295. data/lib/chef/resource/support/cron_access.erb +1 -1
  296. data/lib/chef/resource/support/sudoer.erb +1 -2
  297. data/lib/chef/resource/support/ulimit.erb +41 -0
  298. data/lib/chef/resource/swap_file.rb +5 -3
  299. data/lib/chef/resource/sysctl.rb +2 -2
  300. data/lib/chef/resource/systemd_unit.rb +4 -2
  301. data/lib/chef/resource/template.rb +0 -1
  302. data/lib/chef/resource/timezone.rb +7 -18
  303. data/lib/chef/resource/user.rb +1 -3
  304. data/lib/chef/resource/user/aix_user.rb +0 -2
  305. data/lib/chef/resource/user/dscl_user.rb +1 -1
  306. data/lib/chef/resource/user/linux_user.rb +0 -2
  307. data/lib/chef/resource/user/mac_user.rb +1 -1
  308. data/lib/chef/resource/user/pw_user.rb +0 -2
  309. data/lib/chef/resource/user/solaris_user.rb +0 -2
  310. data/lib/chef/resource/user/windows_user.rb +0 -2
  311. data/lib/chef/resource/user_ulimit.rb +114 -0
  312. data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
  313. data/lib/chef/resource/windows_ad_join.rb +19 -6
  314. data/lib/chef/resource/windows_auto_run.rb +0 -1
  315. data/lib/chef/resource/windows_certificate.rb +1 -1
  316. data/lib/chef/resource/windows_dfs_folder.rb +0 -1
  317. data/lib/chef/resource/windows_dfs_namespace.rb +0 -1
  318. data/lib/chef/resource/windows_dfs_server.rb +0 -1
  319. data/lib/chef/resource/windows_dns_record.rb +0 -1
  320. data/lib/chef/resource/windows_dns_zone.rb +0 -1
  321. data/lib/chef/resource/windows_env.rb +2 -3
  322. data/lib/chef/resource/windows_feature.rb +2 -2
  323. data/lib/chef/resource/windows_feature_dism.rb +9 -22
  324. data/lib/chef/resource/windows_feature_powershell.rb +17 -82
  325. data/lib/chef/resource/windows_firewall_rule.rb +119 -10
  326. data/lib/chef/resource/windows_font.rb +1 -3
  327. data/lib/chef/resource/windows_package.rb +13 -4
  328. data/lib/chef/resource/windows_pagefile.rb +0 -1
  329. data/lib/chef/resource/windows_path.rb +0 -1
  330. data/lib/chef/resource/windows_printer.rb +0 -1
  331. data/lib/chef/resource/windows_printer_port.rb +0 -1
  332. data/lib/chef/resource/windows_script.rb +3 -4
  333. data/lib/chef/resource/windows_security_policy.rb +90 -0
  334. data/lib/chef/resource/windows_service.rb +45 -31
  335. data/lib/chef/resource/windows_share.rb +3 -7
  336. data/lib/chef/resource/windows_shortcut.rb +0 -1
  337. data/lib/chef/resource/windows_task.rb +14 -15
  338. data/lib/chef/resource/windows_uac.rb +0 -1
  339. data/lib/chef/resource/windows_user_privilege.rb +157 -0
  340. data/lib/chef/resource/windows_workgroup.rb +0 -1
  341. data/lib/chef/resource/yum_package.rb +3 -1
  342. data/lib/chef/resource/yum_repository.rb +2 -1
  343. data/lib/chef/resource/zypper_package.rb +3 -2
  344. data/lib/chef/resource/zypper_repository.rb +2 -1
  345. data/lib/chef/resource_builder.rb +8 -0
  346. data/lib/chef/resource_inspector.rb +6 -6
  347. data/lib/chef/resource_resolver.rb +7 -14
  348. data/lib/chef/resources.rb +11 -3
  349. data/lib/chef/role.rb +2 -2
  350. data/lib/chef/run_context/cookbook_compiler.rb +29 -5
  351. data/lib/chef/shell.rb +23 -32
  352. data/lib/chef/shell/shell_session.rb +0 -2
  353. data/lib/chef/util/diff.rb +1 -1
  354. data/lib/chef/util/dsc/configuration_generator.rb +1 -1
  355. data/lib/chef/util/dsc/lcm_output_parser.rb +3 -3
  356. data/lib/chef/util/powershell/cmdlet.rb +1 -1
  357. data/lib/chef/version.rb +2 -2
  358. data/lib/chef/version_string.rb +1 -1
  359. data/lib/chef/win32/api/file.rb +18 -18
  360. data/lib/chef/win32/api/security.rb +6 -0
  361. data/lib/chef/win32/file.rb +3 -11
  362. data/lib/chef/win32/process.rb +2 -2
  363. data/lib/chef/win32/security.rb +40 -2
  364. data/spec/functional/assets/inittest +8 -7
  365. data/spec/functional/knife/ssh_spec.rb +27 -23
  366. data/spec/functional/resource/aix_service_spec.rb +1 -0
  367. data/spec/functional/resource/aixinit_service_spec.rb +8 -7
  368. data/spec/functional/resource/apt_package_spec.rb +1 -0
  369. data/spec/functional/resource/bff_spec.rb +2 -2
  370. data/spec/functional/resource/cookbook_file_spec.rb +1 -1
  371. data/spec/functional/resource/cron_spec.rb +11 -29
  372. data/spec/functional/resource/dnf_package_spec.rb +441 -156
  373. data/spec/functional/resource/dsc_resource_spec.rb +1 -1
  374. data/spec/functional/resource/git_spec.rb +184 -134
  375. data/spec/functional/resource/insserv_spec.rb +6 -5
  376. data/spec/functional/resource/link_spec.rb +17 -17
  377. data/spec/functional/resource/locale_spec.rb +13 -2
  378. data/spec/functional/resource/powershell_script_spec.rb +7 -68
  379. data/spec/functional/resource/rpm_spec.rb +2 -2
  380. data/spec/functional/resource/user/dscl_spec.rb +2 -2
  381. data/spec/functional/resource/user/mac_user_spec.rb +2 -2
  382. data/spec/functional/resource/windows_certificate_spec.rb +3 -3
  383. data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
  384. data/spec/functional/resource/windows_task_spec.rb +8 -8
  385. data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
  386. data/spec/functional/run_lock_spec.rb +1 -2
  387. data/spec/functional/shell_spec.rb +6 -6
  388. data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
  389. data/spec/functional/version_spec.rb +1 -1
  390. data/spec/functional/win32/registry_spec.rb +0 -6
  391. data/spec/functional/win32/security_spec.rb +22 -0
  392. data/spec/functional/win32/service_manager_spec.rb +1 -1
  393. data/spec/integration/client/client_spec.rb +123 -2
  394. data/spec/integration/knife/cookbook_show_spec.rb +28 -26
  395. data/spec/integration/knife/data_bag_show_spec.rb +1 -1
  396. data/spec/integration/knife/raw_spec.rb +30 -2
  397. data/spec/integration/knife/show_spec.rb +32 -3
  398. data/spec/integration/recipes/accumulator_spec.rb +1 -1
  399. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -5
  400. data/spec/integration/recipes/lwrp_spec.rb +1 -1
  401. data/spec/integration/recipes/noop_resource_spec.rb +1 -1
  402. data/spec/integration/recipes/notifies_spec.rb +50 -21
  403. data/spec/integration/recipes/notifying_block_spec.rb +9 -6
  404. data/spec/integration/recipes/provider_choice.rb +2 -0
  405. data/spec/integration/recipes/recipe_dsl_spec.rb +46 -144
  406. data/spec/integration/recipes/resource_action_spec.rb +16 -11
  407. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -3
  408. data/spec/integration/recipes/resource_load_spec.rb +133 -13
  409. data/spec/integration/recipes/unified_mode_spec.rb +1 -1
  410. data/spec/integration/recipes/use_partial_spec.rb +112 -0
  411. data/spec/integration/solo/solo_spec.rb +3 -3
  412. data/spec/scripts/ssl-serve.rb +1 -1
  413. data/spec/spec_helper.rb +11 -14
  414. data/spec/support/chef_helpers.rb +2 -2
  415. data/spec/support/lib/chef/resource/zen_follower.rb +2 -0
  416. data/spec/support/platform_helpers.rb +44 -19
  417. data/spec/support/platforms/win32/spec_service.rb +1 -1
  418. data/spec/support/recipe_dsl_helper.rb +83 -0
  419. data/spec/support/shared/functional/directory_resource.rb +1 -1
  420. data/spec/support/shared/functional/execute_resource.rb +1 -1
  421. data/spec/support/shared/functional/file_resource.rb +3 -3
  422. data/spec/support/shared/functional/win32_service.rb +1 -1
  423. data/spec/support/shared/functional/windows_script.rb +5 -18
  424. data/spec/support/shared/integration/knife_support.rb +14 -8
  425. data/spec/unit/application/apply_spec.rb +3 -0
  426. data/spec/unit/application/client_spec.rb +5 -1
  427. data/spec/unit/application_spec.rb +1 -9
  428. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +4 -2
  429. data/spec/unit/client_spec.rb +7 -5
  430. data/spec/unit/cookbook/gem_installer_spec.rb +3 -4
  431. data/spec/unit/cookbook/metadata_spec.rb +38 -19
  432. data/spec/unit/data_bag_spec.rb +1 -1
  433. data/spec/unit/data_collector_spec.rb +38 -17
  434. data/spec/unit/dsl/platform_introspection_spec.rb +0 -1
  435. data/spec/unit/environment_spec.rb +7 -7
  436. data/spec/unit/event_dispatch/dispatcher_spec.rb +0 -3
  437. data/spec/unit/file_access_control_spec.rb +1 -1
  438. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +15 -15
  439. data/spec/unit/knife/bootstrap/client_builder_spec.rb +9 -9
  440. data/spec/unit/knife/bootstrap_spec.rb +36 -54
  441. data/spec/unit/knife/cookbook_download_spec.rb +4 -4
  442. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
  443. data/spec/unit/knife/cookbook_show_spec.rb +1 -0
  444. data/spec/unit/knife/cookbook_upload_spec.rb +6 -5
  445. data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
  446. data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
  447. data/spec/unit/knife/core/ui_spec.rb +16 -0
  448. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +8 -68
  449. data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
  450. data/spec/unit/knife/role_env_run_list_add_spec.rb +6 -6
  451. data/spec/unit/knife/role_env_run_list_clear_spec.rb +4 -4
  452. data/spec/unit/knife/role_env_run_list_remove_spec.rb +4 -4
  453. data/spec/unit/knife/role_env_run_list_replace_spec.rb +4 -4
  454. data/spec/unit/knife/role_env_run_list_set_spec.rb +4 -4
  455. data/spec/unit/knife/role_run_list_add_spec.rb +6 -6
  456. data/spec/unit/knife/role_run_list_clear_spec.rb +4 -4
  457. data/spec/unit/knife/role_run_list_remove_spec.rb +4 -4
  458. data/spec/unit/knife/role_run_list_replace_spec.rb +4 -4
  459. data/spec/unit/knife/role_run_list_set_spec.rb +4 -4
  460. data/spec/unit/knife/ssh_spec.rb +10 -113
  461. data/spec/unit/knife/status_spec.rb +1 -1
  462. data/spec/unit/knife/supermarket_share_spec.rb +3 -5
  463. data/spec/unit/knife_spec.rb +18 -0
  464. data/spec/unit/lwrp_spec.rb +4 -4
  465. data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
  466. data/spec/unit/mixin/securable_spec.rb +1 -0
  467. data/spec/unit/mixin/user_context_spec.rb +9 -1
  468. data/spec/unit/node/attribute_spec.rb +2 -2
  469. data/spec/unit/node_spec.rb +24 -0
  470. data/spec/unit/platform/query_helpers_spec.rb +0 -143
  471. data/spec/unit/property/state_spec.rb +12 -7
  472. data/spec/unit/property/validation_spec.rb +25 -1
  473. data/spec/unit/property_spec.rb +18 -15
  474. data/spec/unit/provider/apt_preference_spec.rb +14 -10
  475. data/spec/unit/provider/apt_repository_spec.rb +9 -11
  476. data/spec/unit/provider/apt_update_spec.rb +12 -11
  477. data/spec/unit/provider/cookbook_file_spec.rb +4 -4
  478. data/spec/unit/provider/cron_spec.rb +2 -2
  479. data/spec/unit/provider/directory_spec.rb +4 -15
  480. data/spec/unit/provider/file_spec.rb +4 -4
  481. data/spec/unit/provider/git_spec.rb +44 -4
  482. data/spec/unit/provider/link_spec.rb +0 -1
  483. data/spec/unit/provider/log_spec.rb +3 -3
  484. data/spec/unit/provider/mdadm_spec.rb +3 -3
  485. data/spec/unit/provider/osx_profile_spec.rb +2 -2
  486. data/spec/unit/provider/package/dnf/python_helper_spec.rb +2 -2
  487. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
  488. data/spec/unit/provider/package/homebrew_spec.rb +280 -174
  489. data/spec/unit/provider/package/msu_spec.rb +3 -3
  490. data/spec/unit/provider/package/pacman_spec.rb +65 -147
  491. data/spec/unit/provider/package/powershell_spec.rb +88 -96
  492. data/spec/unit/provider/package/rubygems_spec.rb +221 -31
  493. data/spec/unit/provider/package/snap_spec.rb +1 -1
  494. data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
  495. data/spec/unit/provider/package/windows_spec.rb +53 -30
  496. data/spec/unit/provider/powershell_script_spec.rb +21 -61
  497. data/spec/unit/provider/remote_file_spec.rb +3 -4
  498. data/spec/unit/provider/service/arch_service_spec.rb +2 -3
  499. data/spec/unit/provider/service/debian_service_spec.rb +35 -14
  500. data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
  501. data/spec/unit/provider/service/macosx_spec.rb +210 -214
  502. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  503. data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
  504. data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
  505. data/spec/unit/provider/service/windows_spec.rb +6 -2
  506. data/spec/unit/provider/subversion_spec.rb +4 -2
  507. data/spec/unit/provider/systemd_unit_spec.rb +24 -28
  508. data/spec/unit/provider/template_spec.rb +3 -4
  509. data/spec/unit/provider/zypper_repository_spec.rb +25 -75
  510. data/spec/unit/provider_resolver_spec.rb +11 -11
  511. data/spec/unit/provider_spec.rb +0 -1
  512. data/spec/unit/recipe_spec.rb +68 -0
  513. data/spec/unit/resource/alternatives_spec.rb +120 -0
  514. data/spec/unit/resource/apt_preference_spec.rb +0 -18
  515. data/spec/unit/resource/apt_repository_spec.rb +0 -18
  516. data/spec/unit/resource/apt_update_spec.rb +0 -18
  517. data/spec/unit/resource/archive_file_spec.rb +2 -11
  518. data/spec/unit/resource/chef_client_cron_spec.rb +119 -0
  519. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +102 -0
  520. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +70 -0
  521. data/spec/unit/resource/chef_vault_secret_spec.rb +40 -0
  522. data/spec/unit/resource/chocolatey_source_spec.rb +2 -1
  523. data/spec/unit/resource/cron_d_spec.rb +6 -48
  524. data/spec/unit/resource/cron_spec.rb +4 -10
  525. data/spec/unit/resource/gem_package_spec.rb +3 -3
  526. data/spec/unit/resource/helpers/cron_validations_spec.rb +77 -0
  527. data/spec/unit/resource/link_spec.rb +0 -4
  528. data/spec/unit/resource/locale_spec.rb +0 -34
  529. data/spec/unit/resource/ohai_spec.rb +56 -2
  530. data/spec/unit/resource/plist_spec.rb +130 -0
  531. data/spec/unit/resource/powershell_script_spec.rb +0 -5
  532. data/spec/unit/resource/{git_spec.rb → scm/git_spec.rb} +50 -2
  533. data/spec/unit/resource/{scm_spec.rb → scm/scm.rb} +1 -52
  534. data/spec/unit/resource/{subversion_spec.rb → scm/subversion_spec.rb} +2 -3
  535. data/spec/unit/resource/service_spec.rb +4 -0
  536. data/spec/unit/resource/user_spec.rb +2 -2
  537. data/spec/unit/resource/user_ulimit_spec.rb +53 -0
  538. data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
  539. data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
  540. data/spec/unit/resource/windows_feature_dism_spec.rb +2 -17
  541. data/spec/unit/resource/windows_feature_powershell_spec.rb +6 -47
  542. data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
  543. data/spec/unit/resource/windows_package_spec.rb +4 -1
  544. data/spec/unit/resource/windows_service_spec.rb +9 -0
  545. data/spec/unit/resource/windows_task_spec.rb +1 -1
  546. data/spec/unit/resource/windows_uac_spec.rb +2 -2
  547. data/spec/unit/resource/yum_repository_spec.rb +21 -21
  548. data/spec/unit/resource_reporter_spec.rb +1 -5
  549. data/spec/unit/resource_spec.rb +11 -4
  550. data/spec/unit/role_spec.rb +11 -11
  551. data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -1
  552. data/spec/unit/run_context_spec.rb +1 -1
  553. data/spec/unit/search/query_spec.rb +1 -1
  554. data/spec/unit/util/threaded_job_queue_spec.rb +0 -9
  555. data/spec/unit/win32/security_spec.rb +3 -4
  556. data/tasks/rspec.rb +1 -1
  557. metadata +110 -75
  558. data/lib/chef/dsl/core.rb +0 -52
  559. data/lib/chef/knife/cookbook_site_share.rb +0 -41
  560. data/lib/chef/knife/cookbook_site_unshare.rb +0 -41
  561. data/lib/chef/provider/apt_preference.rb +0 -93
  562. data/lib/chef/provider/apt_repository.rb +0 -358
  563. data/lib/chef/provider/apt_update.rb +0 -79
  564. data/lib/chef/provider/log.rb +0 -43
  565. data/lib/chef/provider/mdadm.rb +0 -85
  566. data/lib/chef/provider/ohai.rb +0 -45
  567. data/lib/chef/resource/git.rb +0 -37
  568. data/spec/functional/resource/windows_font_spec.rb +0 -49
  569. data/spec/unit/provider/ohai_spec.rb +0 -84
@@ -106,25 +106,30 @@ describe Chef::Provider::Package::Rubygems::CurrentGemEnvironment do
106
106
  context "new default rubygems behavior" do
107
107
  before do
108
108
  Chef::Config[:rubygems_cache_enabled] = false
109
-
110
- dep_installer = Gem::DependencyInstaller.new
111
- expect(dep_installer).not_to receive(:find_gems_with_sources)
112
- allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
113
109
  end
114
110
 
115
111
  it "finds a matching gem candidate version on rubygems 2.0.0+" do
116
112
  dep = Gem::Dependency.new("rspec", ">= 0")
113
+ dep_installer = Gem::DependencyInstaller.new
114
+ allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
115
+ expect(dep_installer).not_to receive(:find_gems_with_sources).with(dep).and_call_original
117
116
  expect(@gem_env.candidate_version_from_remote(dep)).to be_kind_of(Gem::Version)
118
117
  end
119
118
 
120
119
  it "gives the candidate version as nil if none is found" do
121
120
  dep = Gem::Dependency.new("lksdjflksdjflsdkfj", ">= 0")
121
+ dep_installer = Gem::DependencyInstaller.new
122
+ allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
123
+ expect(dep_installer).not_to receive(:find_gems_with_sources).with(dep).and_call_original
122
124
  expect(@gem_env.candidate_version_from_remote(dep)).to be_nil
123
125
  end
124
126
 
125
127
  it "finds a matching gem from a specific gemserver when explicit sources are given (to a server that doesn't respond to api requests)" do
126
128
  dep = Gem::Dependency.new("rspec", ">= 0")
127
- expect(@gem_env.candidate_version_from_remote(dep, "https://rubygems.org")).to be_kind_of(Gem::Version)
129
+ dep_installer = Gem::DependencyInstaller.new
130
+ allow(@gem_env).to receive(:dependency_installer).and_return(dep_installer)
131
+ expect(dep_installer).not_to receive(:find_gems_with_sources).with(dep).and_call_original
132
+ expect(@gem_env.candidate_version_from_remote(dep, "http://production.cf.rubygems.org")).to be_kind_of(Gem::Version)
128
133
  end
129
134
  end
130
135
 
@@ -358,7 +363,7 @@ describe Chef::Provider::Package::Rubygems do
358
363
  let(:bindir) { "/usr/bin" }
359
364
  let(:options) { nil }
360
365
  let(:source) { nil }
361
- let(:include_default_source) { true }
366
+ let(:include_default_source) { nil }
362
367
 
363
368
  let(:new_resource) do
364
369
  new_resource = Chef::Resource::GemPackage.new(gem_name)
@@ -580,7 +585,7 @@ describe Chef::Provider::Package::Rubygems do
580
585
 
581
586
  it "determines the candidate version by querying the remote gem servers" do
582
587
  expect(provider.gem_env).to receive(:candidate_version_from_remote)
583
- .with(gem_dep, source, Chef::Config[:rubygems_url])
588
+ .with(gem_dep, source)
584
589
  .and_return(Gem::Version.new(target_version))
585
590
  expect(provider.candidate_version).to eq(target_version)
586
591
  end
@@ -600,7 +605,7 @@ describe Chef::Provider::Package::Rubygems do
600
605
 
601
606
  it "determines the candidate version by querying the remote gem servers" do
602
607
  expect(provider.gem_env).to receive(:candidate_version_from_remote)
603
- .with(gem_dep, *[source, Chef::Config[:rubygems_url] ].flatten)
608
+ .with(gem_dep, *source)
604
609
  .and_return(Gem::Version.new(target_version))
605
610
  expect(provider.candidate_version).to eq(target_version)
606
611
  end
@@ -640,13 +645,13 @@ describe Chef::Provider::Package::Rubygems do
640
645
 
641
646
  before do
642
647
  expected_source = [ source ]
643
- expected_source << Chef::Config[:rubygems_url] if include_default_source
648
+ expected_source << "https://rubygems.org" if provider.include_default_source?
644
649
  allow(provider.gem_env).to receive(:candidate_version_from_remote).with(gem_dep, *expected_source.flatten.compact).and_return(version)
645
650
  end
646
651
 
647
652
  describe "in the current gem environment" do
648
653
  it "installs the gem via the gems api when no explicit options are used" do
649
- expect(provider.gem_env).to receive(:install).with(gem_dep, sources: [ Chef::Config[:rubygems_url] ])
654
+ expect(provider.gem_env).to receive(:install).with(gem_dep, sources: [ "https://rubygems.org" ])
650
655
  provider.run_action(:install)
651
656
  expect(new_resource).to be_updated_by_last_action
652
657
  end
@@ -655,7 +660,7 @@ describe Chef::Provider::Package::Rubygems do
655
660
  let(:source) { "http://gems.example.org" }
656
661
 
657
662
  it "installs the gem via the gems api" do
658
- expect(provider.gem_env).to receive(:install).with(gem_dep, sources: [source, Chef::Config[:rubygems_url]])
663
+ expect(provider.gem_env).to receive(:install).with(gem_dep, sources: [source])
659
664
  provider.run_action(:install)
660
665
  expect(new_resource).to be_updated_by_last_action
661
666
  end
@@ -686,7 +691,7 @@ describe Chef::Provider::Package::Rubygems do
686
691
  it "installs the gem via the gems api, when the package has no file separator characters in it, but a matching file exists in cwd" do
687
692
  allow(::File).to receive(:exist?).and_return(true)
688
693
  new_resource.package_name("rspec-core")
689
- expect(provider.gem_env).to receive(:install).with(gem_dep, sources: [ Chef::Config[:rubygems_url] ])
694
+ expect(provider.gem_env).to receive(:install).with(gem_dep, sources: [ "https://rubygems.org" ])
690
695
  provider.run_action(:install)
691
696
  expect(new_resource).to be_updated_by_last_action
692
697
  end
@@ -695,14 +700,14 @@ describe Chef::Provider::Package::Rubygems do
695
700
  let(:options) { "-i /alt/install/location" }
696
701
 
697
702
  it "installs the gem by shelling out when options are provided as a String" do
698
- expected = "gem install rspec-core -q --no-document -v \"#{target_version}\" --source=https://www.rubygems.org #{options}"
703
+ expected = "gem install rspec-core -q --no-document -v \"#{target_version}\" --source=https://rubygems.org #{options}"
699
704
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
700
705
  provider.run_action(:install)
701
706
  expect(new_resource).to be_updated_by_last_action
702
707
  end
703
708
 
704
709
  it "unmockening needs_nodocument?" do
705
- expected = "gem install rspec-core -q --no-document -v \"#{target_version}\" --source=https://www.rubygems.org #{options}"
710
+ expected = "gem install rspec-core -q --no-document -v \"#{target_version}\" --source=https://rubygems.org #{options}"
706
711
  expect(provider).to receive(:needs_nodocument?).and_call_original
707
712
  stub_const("Gem::VERSION", "3.0.0")
708
713
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
@@ -711,7 +716,7 @@ describe Chef::Provider::Package::Rubygems do
711
716
  end
712
717
 
713
718
  it "when the rubygems_version is old it uses the old flags" do
714
- expected = "gem install rspec-core -q --no-rdoc --no-ri -v \"#{target_version}\" --source=https://www.rubygems.org #{options}"
719
+ expected = "gem install rspec-core -q --no-rdoc --no-ri -v \"#{target_version}\" --source=https://rubygems.org #{options}"
715
720
  expect(provider).to receive(:needs_nodocument?).and_call_original
716
721
  stub_const("Gem::VERSION", "2.8.0")
717
722
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
@@ -723,10 +728,10 @@ describe Chef::Provider::Package::Rubygems do
723
728
  context "when the Chef::Config[:rubygems_url] option is provided" do
724
729
  let(:gem_binary) { "/foo/bar" }
725
730
 
726
- it "installs the gem with rubygems.org as an added source" do
731
+ it "installs the gem" do
727
732
  Chef::Config[:rubygems_url] = "https://mirror1"
728
- expect(provider.gem_env).to receive(:candidate_version_from_remote).with(gem_dep, Chef::Config[:rubygems_url]).and_return(version)
729
- expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --source=https://mirror1"
733
+ expect(provider.gem_env).to receive(:candidate_version_from_remote).with(gem_dep, "https://mirror1").and_return(version)
734
+ expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --clear-sources --source=https://mirror1"
730
735
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
731
736
  provider.run_action(:install)
732
737
  expect(new_resource).to be_updated_by_last_action
@@ -737,19 +742,30 @@ describe Chef::Provider::Package::Rubygems do
737
742
  let(:source) { "http://mirror.ops.rhcloud.com/mirror/ruby" }
738
743
  let(:gem_binary) { "/foo/bar" }
739
744
 
740
- it "installs the gem with rubygems.org as an added source" do
741
- expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --source=#{source} --source=https://www.rubygems.org"
745
+ it "installs the gem" do
746
+ expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --clear-sources --source=#{source}"
742
747
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
743
748
  provider.run_action(:install)
744
749
  expect(new_resource).to be_updated_by_last_action
745
750
  end
746
751
 
752
+ context "with include_default_source true" do
753
+ let(:include_default_source) { true }
754
+
755
+ it "ignores the Chef::Config setting" do
756
+ expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --clear-sources --source=#{source} --source=https://rubygems.org"
757
+ expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
758
+ provider.run_action(:install)
759
+ expect(new_resource).to be_updated_by_last_action
760
+ end
761
+ end
762
+
747
763
  context "with include_default_source false" do
748
764
  let(:include_default_source) { false }
749
765
 
750
766
  it "ignores the Chef::Config setting" do
751
767
  Chef::Config[:rubygems_url] = "https://ignored"
752
- expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --source=#{source}"
768
+ expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --clear-sources --source=#{source}"
753
769
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
754
770
  provider.run_action(:install)
755
771
  expect(new_resource).to be_updated_by_last_action
@@ -762,18 +778,29 @@ describe Chef::Provider::Package::Rubygems do
762
778
  let(:gem_binary) { "/foo/bar" }
763
779
 
764
780
  it "installs the gem with an array as an added source" do
765
- expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --source=https://mirror1 --source=https://mirror2 --source=https://www.rubygems.org"
781
+ expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --clear-sources --source=https://mirror1 --source=https://mirror2"
766
782
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
767
783
  provider.run_action(:install)
768
784
  expect(new_resource).to be_updated_by_last_action
769
785
  end
770
786
 
787
+ context "with include_default_source true" do
788
+ let(:include_default_source) { true }
789
+
790
+ it "installs the gem with rubygems as a source" do
791
+ expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --clear-sources --source=https://mirror1 --source=https://mirror2 --source=https://rubygems.org"
792
+ expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
793
+ provider.run_action(:install)
794
+ expect(new_resource).to be_updated_by_last_action
795
+ end
796
+ end
797
+
771
798
  context "with include_default_source false" do
772
799
  let(:include_default_source) { false }
773
800
 
774
801
  it "ignores the Chef::Config setting" do
775
802
  Chef::Config[:rubygems_url] = "https://ignored"
776
- expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --source=https://mirror1 --source=https://mirror2"
803
+ expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --clear-sources --source=https://mirror1 --source=https://mirror2"
777
804
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
778
805
  provider.run_action(:install)
779
806
  expect(new_resource).to be_updated_by_last_action
@@ -781,13 +808,26 @@ describe Chef::Provider::Package::Rubygems do
781
808
  end
782
809
  end
783
810
 
784
- context "when we have cleared sources and an explict source is specified" do
811
+ context "when clear_sources is set true and an explicit source is specified" do
785
812
  let(:gem_binary) { "/foo/bar" }
786
813
  let(:source) { "http://mirror.ops.rhcloud.com/mirror/ruby" }
787
814
 
788
815
  it "installs the gem" do
789
816
  new_resource.clear_sources(true)
790
- expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --clear-sources --source=#{source} --source=https://www.rubygems.org"
817
+ expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --clear-sources --source=#{source}"
818
+ expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
819
+ provider.run_action(:install)
820
+ expect(new_resource).to be_updated_by_last_action
821
+ end
822
+ end
823
+
824
+ context "when clear_sources is set false and an explicit source is specified" do
825
+ let(:gem_binary) { "/foo/bar" }
826
+ let(:source) { "http://mirror.ops.rhcloud.com/mirror/ruby" }
827
+
828
+ it "installs the gem" do
829
+ new_resource.clear_sources(false)
830
+ expected = "#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --source=#{source}"
791
831
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
792
832
  provider.run_action(:install)
793
833
  expect(new_resource).to be_updated_by_last_action
@@ -799,7 +839,7 @@ describe Chef::Provider::Package::Rubygems do
799
839
  let(:options) { "-i /alt/install/location" }
800
840
 
801
841
  it "installs the gem by shelling out when options are provided but no version is given" do
802
- expected = "gem install rspec-core -q --no-document -v \"#{candidate_version}\" --source=https://www.rubygems.org #{options}"
842
+ expected = "gem install rspec-core -q --no-document -v \"#{candidate_version}\" --source=https://rubygems.org #{options}"
803
843
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
804
844
  provider.run_action(:install)
805
845
  expect(new_resource).to be_updated_by_last_action
@@ -810,7 +850,7 @@ describe Chef::Provider::Package::Rubygems do
810
850
  let(:options) { { install_dir: "/alt/install/location" } }
811
851
 
812
852
  it "installs the gem via the gems api when options are given as a Hash" do
813
- expect(provider.gem_env).to receive(:install).with(gem_dep, { sources: [ Chef::Config[:rubygems_url] ] }.merge(options))
853
+ expect(provider.gem_env).to receive(:install).with(gem_dep, { sources: [ "https://rubygems.org" ] }.merge(options))
814
854
  provider.run_action(:install)
815
855
  expect(new_resource).to be_updated_by_last_action
816
856
  end
@@ -820,7 +860,7 @@ describe Chef::Provider::Package::Rubygems do
820
860
  let(:target_version) { "9000.0.2" }
821
861
 
822
862
  it "installs the gem via the gems api" do
823
- expect(provider.gem_env).to receive(:install).with(gem_dep, sources: [ Chef::Config[:rubygems_url] ] )
863
+ expect(provider.gem_env).to receive(:install).with(gem_dep, sources: [ "https://rubygems.org" ] )
824
864
  provider.run_action(:install)
825
865
  expect(new_resource).to be_updated_by_last_action
826
866
  end
@@ -863,7 +903,7 @@ describe Chef::Provider::Package::Rubygems do
863
903
  let(:gem_binary) { "/usr/weird/bin/gem" }
864
904
 
865
905
  it "installs the gem by shelling out to gem install" do
866
- expect(provider).to receive(:shell_out_compacted!).with("#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --source=https://www.rubygems.org", env: nil, timeout: 900)
906
+ expect(provider).to receive(:shell_out_compacted!).with("#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --source=https://rubygems.org", env: nil, timeout: 900)
867
907
  provider.run_action(:install)
868
908
  expect(new_resource).to be_updated_by_last_action
869
909
  end
@@ -871,7 +911,7 @@ describe Chef::Provider::Package::Rubygems do
871
911
  it "unmockening needs_nodocument?" do
872
912
  expect(provider).to receive(:needs_nodocument?).and_call_original
873
913
  expect(provider.gem_env).to receive(:shell_out!).with("#{gem_binary} --version").and_return(instance_double(Mixlib::ShellOut, stdout: "3.0.0\n"))
874
- expect(provider).to receive(:shell_out_compacted!).with("#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --source=https://www.rubygems.org", env: nil, timeout: 900)
914
+ expect(provider).to receive(:shell_out_compacted!).with("#{gem_binary} install rspec-core -q --no-document -v \"#{target_version}\" --source=https://rubygems.org", env: nil, timeout: 900)
875
915
  provider.run_action(:install)
876
916
  expect(new_resource).to be_updated_by_last_action
877
917
  end
@@ -879,7 +919,7 @@ describe Chef::Provider::Package::Rubygems do
879
919
  it "when the rubygems_version is old it uses the old flags" do
880
920
  expect(provider).to receive(:needs_nodocument?).and_call_original
881
921
  expect(provider.gem_env).to receive(:shell_out!).with("#{gem_binary} --version").and_return(instance_double(Mixlib::ShellOut, stdout: "2.8.0\n"))
882
- expect(provider).to receive(:shell_out_compacted!).with("#{gem_binary} install rspec-core -q --no-rdoc --no-ri -v \"#{target_version}\" --source=https://www.rubygems.org", env: nil, timeout: 900)
922
+ expect(provider).to receive(:shell_out_compacted!).with("#{gem_binary} install rspec-core -q --no-rdoc --no-ri -v \"#{target_version}\" --source=https://rubygems.org", env: nil, timeout: 900)
883
923
  provider.run_action(:install)
884
924
  expect(new_resource).to be_updated_by_last_action
885
925
  end
@@ -974,3 +1014,153 @@ describe Chef::Provider::Package::Rubygems do
974
1014
  end
975
1015
  end
976
1016
  end
1017
+
1018
+ describe Chef::Provider::Package::Rubygems, "clear_sources?" do
1019
+ let(:new_resource) do
1020
+ Chef::Resource::GemPackage.new("foo")
1021
+ end
1022
+
1023
+ let(:provider) do
1024
+ run_context = Chef::RunContext.new(Chef::Node.new, {}, Chef::EventDispatch::Dispatcher.new)
1025
+ Chef::Provider::Package::Rubygems.new(new_resource, run_context)
1026
+ end
1027
+
1028
+ it "is false when clear_sources is unset" do
1029
+ expect(provider.clear_sources?).to be false
1030
+ end
1031
+
1032
+ it "is false when clear_sources is set false" do
1033
+ new_resource.clear_sources(false)
1034
+ expect(provider.clear_sources?).to be false
1035
+ end
1036
+
1037
+ it "is true when clear_sources is set true" do
1038
+ new_resource.clear_sources(true)
1039
+ expect(provider.clear_sources?).to be true
1040
+ end
1041
+
1042
+ context "when a source is set" do
1043
+ before do
1044
+ new_resource.source("http://mirror.ops.rhcloud.com/mirror/ruby")
1045
+ end
1046
+
1047
+ it "is true when clear_sources is unset" do
1048
+ expect(provider.clear_sources?).to be true
1049
+ end
1050
+
1051
+ it "is false when clear_sources is set false" do
1052
+ new_resource.clear_sources(false)
1053
+ expect(provider.clear_sources?).to be false
1054
+ end
1055
+
1056
+ it "is true when clear_sources is set true" do
1057
+ new_resource.clear_sources(true)
1058
+ expect(provider.clear_sources?).to be true
1059
+ end
1060
+ end
1061
+
1062
+ context "when Chef::Config[:rubygems_url] is set" do
1063
+ before do
1064
+ Chef::Config.rubygems_url = "https://example.com/"
1065
+ end
1066
+
1067
+ it "is true when clear_sources is unset" do
1068
+ expect(provider.clear_sources?).to be true
1069
+ end
1070
+
1071
+ it "is false when clear_sources is set false" do
1072
+ new_resource.clear_sources(false)
1073
+ expect(provider.clear_sources?).to be false
1074
+ end
1075
+
1076
+ it "is true when clear_sources is set true" do
1077
+ new_resource.clear_sources(true)
1078
+ expect(provider.clear_sources?).to be true
1079
+ end
1080
+ end
1081
+ end
1082
+
1083
+ describe Chef::Provider::Package::Rubygems, "include_default_source?" do
1084
+ let(:new_resource) do
1085
+ Chef::Resource::GemPackage.new("foo")
1086
+ end
1087
+
1088
+ let(:provider) do
1089
+ run_context = Chef::RunContext.new(Chef::Node.new, {}, Chef::EventDispatch::Dispatcher.new)
1090
+ Chef::Provider::Package::Rubygems.new(new_resource, run_context)
1091
+ end
1092
+
1093
+ it "is true when include_default_source is unset" do
1094
+ expect(provider.include_default_source?).to be true
1095
+ end
1096
+
1097
+ it "is false when include_default_source is set false" do
1098
+ new_resource.include_default_source(false)
1099
+ expect(provider.include_default_source?).to be false
1100
+ end
1101
+
1102
+ it "is true when include_default_source is set true" do
1103
+ new_resource.include_default_source(true)
1104
+ expect(provider.include_default_source?).to be true
1105
+ end
1106
+
1107
+ context "when a source is set" do
1108
+ before do
1109
+ new_resource.source("http://mirror.ops.rhcloud.com/mirror/ruby")
1110
+ end
1111
+
1112
+ it "is false when include_default_source is unset" do
1113
+ expect(provider.include_default_source?).to be false
1114
+ end
1115
+
1116
+ it "is false when include_default_source is set false" do
1117
+ new_resource.include_default_source(false)
1118
+ expect(provider.include_default_source?).to be false
1119
+ end
1120
+
1121
+ it "is true when include_default_source is set true" do
1122
+ new_resource.include_default_source(true)
1123
+ expect(provider.include_default_source?).to be true
1124
+ end
1125
+ end
1126
+
1127
+ context "when Chef::Config[:rubygems_url] is set" do
1128
+ before do
1129
+ Chef::Config.rubygems_url = "https://example.com/"
1130
+ end
1131
+
1132
+ it "is true when include_default_source is unset" do
1133
+ expect(provider.include_default_source?).to be true
1134
+ end
1135
+
1136
+ it "is false when include_default_source is set false" do
1137
+ new_resource.include_default_source(false)
1138
+ expect(provider.include_default_source?).to be false
1139
+ end
1140
+
1141
+ it "is true when include_default_source is set true" do
1142
+ new_resource.include_default_source(true)
1143
+ expect(provider.include_default_source?).to be true
1144
+ end
1145
+ end
1146
+
1147
+ context "when clear_sources is set" do
1148
+ before do
1149
+ new_resource.clear_sources(true)
1150
+ end
1151
+
1152
+ it "is false when include_default_source is unset" do
1153
+ expect(provider.include_default_source?).to be false
1154
+ end
1155
+
1156
+ it "is false when include_default_source is set false" do
1157
+ new_resource.include_default_source(false)
1158
+ expect(provider.include_default_source?).to be false
1159
+ end
1160
+
1161
+ it "is true when include_default_source is set true" do
1162
+ new_resource.include_default_source(true)
1163
+ expect(provider.include_default_source?).to be true
1164
+ end
1165
+ end
1166
+ end
@@ -169,7 +169,7 @@ describe Chef::Provider::Package::Snap do
169
169
 
170
170
  it "does not throw an error if installed version not found" do
171
171
  provider.load_current_resource
172
- expect(provider.get_current_versions).to eq([])
172
+ expect(provider.get_current_versions).to eq([nil])
173
173
  end
174
174
  end
175
175
  end
@@ -126,7 +126,7 @@ describe Chef::Provider::Package::Windows::Exe do
126
126
  it "removes installed package and quotes uninstall string" do
127
127
  new_resource.timeout = 300
128
128
  allow(::File).to receive(:exist?).with("uninst_dir/uninst_file").and_return(true)
129
- expect(provider).to receive(:shell_out!).with(%r{start \"\" /wait \"uninst_dir/uninst_file\" /S /NCRC & exit %%%%ERRORLEVEL%%%%}, default_env: false, timeout: 300, returns: [0])
129
+ expect(provider).to receive(:shell_out!).with(%r{start \"\" /wait \"uninst_dir/uninst_file\" /S /NCRC & exit %%%%ERRORLEVEL%%%%}, default_env: false, timeout: 300, returns: [0, 3010])
130
130
  provider.remove_package
131
131
  end
132
132
  end
@@ -42,7 +42,7 @@ describe Chef::Provider::Package::Windows, :windows_only do
42
42
  let(:cache_path) { 'c:\\cache\\' }
43
43
 
44
44
  before(:each) do
45
- allow(::File).to receive(:exist?).with(new_resource.source).and_return(true)
45
+ allow(::File).to receive(:exist?).with(provider.new_resource.source).and_return(true)
46
46
  end
47
47
 
48
48
  describe "load_current_resource" do
@@ -66,22 +66,20 @@ describe Chef::Provider::Package::Windows, :windows_only do
66
66
 
67
67
  it "sets the version to be installed" do
68
68
  provider.load_current_resource
69
- expect(new_resource.version).to eql("2.0")
69
+ expect(provider.new_resource.version).to eql("2.0")
70
70
  end
71
71
  end
72
72
 
73
- context "when the source is not present it loads from cache" do
74
- context "when the package is not installed" do
73
+ context "when the source is a uri" do
74
+ let(:resource_source) { "https://foo.bar/calculator.msi" }
75
+
76
+ context "when the source has not been downloaded" do
75
77
  before(:each) do
76
- allow(provider).to receive(:uri_scheme?).and_return(false)
77
- allow(provider.package_provider).to receive(:get_product_property).and_return(nil)
78
- allow(provider.package_provider).to receive(:get_installed_version).and_return(nil)
79
- allow(provider.package_provider).to receive(:package_version).and_return(nil)
78
+ allow(provider).to receive(:downloadable_file_missing?).and_return(true)
80
79
  end
81
-
82
- it "sets the current version nil" do
80
+ it "sets the current version to unknown" do
83
81
  provider.load_current_resource
84
- expect(provider.current_resource.version).to eql(nil)
82
+ expect(provider.current_resource.version).to eql("unknown")
85
83
  end
86
84
  end
87
85
 
@@ -235,9 +233,9 @@ describe Chef::Provider::Package::Windows, :windows_only do
235
233
  end
236
234
  end
237
235
 
238
- it "returns the resource's installer_type if it is set" do
239
- new_resource.installer_type(:nsis)
240
- expect(provider.installer_type).to eql(:nsis)
236
+ it "returns @installer_type if it is set" do
237
+ provider.new_resource.installer_type(:downeaster)
238
+ expect(provider.installer_type).to eql(:downeaster)
241
239
  end
242
240
 
243
241
  it "sets installer_type to inno if the source contains inno" do
@@ -277,7 +275,7 @@ describe Chef::Provider::Package::Windows, :windows_only do
277
275
 
278
276
  it "raises an error" do
279
277
  allow(::Kernel).to receive(:open).and_yield(StringIO.new(""))
280
- new_resource.installer_type(nil)
278
+ provider.new_resource.installer_type(nil)
281
279
  expect { provider.installer_type }.to raise_error(Chef::Exceptions::CannotDetermineWindowsInstallerType)
282
280
  end
283
281
  end
@@ -314,10 +312,7 @@ describe Chef::Provider::Package::Windows, :windows_only do
314
312
  let(:resource_source) { "https://foo.bar/calculator.exe" }
315
313
 
316
314
  it "downloads the http resource" do
317
- allow(provider).to receive(:uri_scheme?).and_return(true)
318
- allow(provider).to receive(:installer_type).and_return(nil)
319
- allow(File).to receive(:exist?).with("https\\foo.bar\\calculator.exe").and_return(false)
320
- allow(provider).to receive(:compile_and_converge_action)
315
+ allow(File).to receive(:exist?).with('c:\cache\calculator.exe').and_return(false)
321
316
  expect(provider).to receive(:download_source_file)
322
317
  provider.run_action(:install)
323
318
  end
@@ -405,7 +400,7 @@ describe Chef::Provider::Package::Windows, :windows_only do
405
400
  let(:resource_source) { "C:/a_missing_file.exe" }
406
401
  let(:installer_type) { nil }
407
402
  before do
408
- allow(::File).to receive(:exist?).with(new_resource.source).and_return(false)
403
+ allow(::File).to receive(:exist?).with(provider.new_resource.source).and_return(false)
409
404
  provider.load_current_resource
410
405
  end
411
406
 
@@ -419,23 +414,51 @@ describe Chef::Provider::Package::Windows, :windows_only do
419
414
  Chef::Config[:why_run] = false
420
415
  end
421
416
  end
417
+ end
422
418
 
423
- it "does not raise an error with a valid checksum" do
424
- expect(Chef::Digester).to receive(:checksum_for_file).with(new_resource.source).and_return("abcdef1234567890")
425
- expect(provider).to receive(:install_package)
419
+ shared_context "valid checksum" do
420
+ context "checksum is valid" do
421
+ before do
422
+ allow(provider).to receive(:checksum).and_return("jiie00u3bbs92vsbhvgvklb2lasgh20ah")
423
+ end
426
424
 
427
- new_resource.checksum("abcdef1234567890")
425
+ it "does not raise the checksum mismatch exception" do
426
+ expect { provider.send(:validate_content!) }.to_not raise_error
427
+ end
428
+ end
429
+ end
430
+
431
+ shared_context "invalid checksum" do
432
+ context "checksum is invalid" do
433
+ before do
434
+ allow(provider).to receive(:checksum).and_return("kiie30u3bbs92vsbhvgvklb2lasgh20ah")
435
+ end
428
436
 
429
- provider.run_action(:install)
437
+ it "raises the checksum mismatch exception" do
438
+ expect { provider.send(:validate_content!) }.to raise_error(
439
+ Chef::Exceptions::ChecksumMismatch
440
+ )
441
+ end
430
442
  end
443
+ end
431
444
 
432
- it "raises an error with an invalid checksum" do
433
- expect(Chef::Digester).to receive(:checksum_for_file).with(new_resource.source).and_return("abcdef1234567890")
434
- expect(provider).not_to receive(:install_package)
445
+ describe "validate_content!" do
446
+ before(:each) do
447
+ new_resource.checksum("jiie00u3bbs92vsbhvgvklb2lasgh20ah")
448
+ end
449
+
450
+ context "checksum is in lowercase" do
451
+ include_context "valid checksum"
452
+ include_context "invalid checksum"
453
+ end
435
454
 
436
- new_resource.checksum("ffffffffffffffff")
455
+ context "checksum is in uppercase" do
456
+ before do
457
+ new_resource.checksum = new_resource.checksum.upcase
458
+ end
437
459
 
438
- expect { provider.run_action(:install) }.to raise_error(Chef::Exceptions::Package)
460
+ include_context "valid checksum"
461
+ include_context "invalid checksum"
439
462
  end
440
463
  end
441
464
  end