chef 15.11.3-universal-mingw32 → 16.1.16-universal-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (513) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -7
  3. data/README.md +1 -1
  4. data/Rakefile +44 -16
  5. data/chef.gemspec +6 -4
  6. data/distro/powershell/chef/chef.psm1 +3 -3
  7. data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
  8. data/lib/chef/action_collection.rb +16 -5
  9. data/lib/chef/application.rb +33 -54
  10. data/lib/chef/application/apply.rb +18 -1
  11. data/lib/chef/application/base.rb +8 -3
  12. data/lib/chef/application/knife.rb +1 -1
  13. data/lib/chef/chef_class.rb +4 -4
  14. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +6 -2
  17. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +3 -3
  18. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  19. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  20. data/lib/chef/chef_fs/path_utils.rb +3 -3
  21. data/lib/chef/client.rb +16 -14
  22. data/lib/chef/config.rb +1 -1
  23. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  24. data/lib/chef/cookbook/gem_installer.rb +1 -1
  25. data/lib/chef/cookbook/metadata.rb +45 -22
  26. data/lib/chef/cookbook_loader.rb +1 -1
  27. data/lib/chef/cookbook_manifest.rb +1 -1
  28. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  29. data/lib/chef/cookbook_version.rb +38 -3
  30. data/lib/chef/data_collector.rb +1 -1
  31. data/lib/chef/data_collector/error_handlers.rb +1 -1
  32. data/lib/chef/data_collector/run_end_message.rb +7 -1
  33. data/lib/chef/decorator/lazy_array.rb +2 -2
  34. data/lib/chef/deprecated.rb +4 -0
  35. data/lib/chef/digester.rb +4 -4
  36. data/lib/chef/dist.rb +8 -0
  37. data/lib/chef/dsl/chef_vault.rb +84 -0
  38. data/lib/chef/dsl/declare_resource.rb +7 -5
  39. data/lib/chef/dsl/platform_introspection.rb +3 -2
  40. data/lib/chef/dsl/recipe.rb +7 -12
  41. data/lib/chef/dsl/universal.rb +3 -7
  42. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  43. data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
  44. data/lib/chef/event_dispatch/base.rb +3 -0
  45. data/lib/chef/formatters/base.rb +1 -1
  46. data/lib/chef/formatters/doc.rb +1 -1
  47. data/lib/chef/formatters/indentable_output_stream.rb +7 -16
  48. data/lib/chef/http.rb +1 -1
  49. data/lib/chef/http/decompressor.rb +1 -1
  50. data/lib/chef/http/http_request.rb +3 -2
  51. data/lib/chef/json_compat.rb +1 -1
  52. data/lib/chef/key.rb +1 -1
  53. data/lib/chef/knife.rb +2 -4
  54. data/lib/chef/knife/acl_add.rb +57 -0
  55. data/lib/chef/knife/acl_base.rb +183 -0
  56. data/lib/chef/knife/acl_bulk_add.rb +78 -0
  57. data/lib/chef/knife/acl_bulk_remove.rb +83 -0
  58. data/lib/chef/knife/acl_remove.rb +62 -0
  59. data/lib/chef/knife/acl_show.rb +56 -0
  60. data/lib/chef/knife/bootstrap.rb +84 -90
  61. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +2 -2
  62. data/lib/chef/knife/bootstrap/client_builder.rb +2 -2
  63. data/lib/chef/knife/bootstrap/templates/chef-full.erb +11 -11
  64. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +12 -12
  65. data/lib/chef/knife/core/bootstrap_context.rb +63 -60
  66. data/lib/chef/knife/core/generic_presenter.rb +4 -3
  67. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  68. data/lib/chef/knife/core/node_presenter.rb +2 -2
  69. data/lib/chef/knife/core/status_presenter.rb +5 -5
  70. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  71. data/lib/chef/knife/core/ui.rb +17 -1
  72. data/lib/chef/knife/core/windows_bootstrap_context.rb +44 -42
  73. data/lib/chef/knife/data_bag_secret_options.rb +18 -45
  74. data/lib/chef/knife/group_add.rb +55 -0
  75. data/lib/chef/knife/{cookbook_site_download.rb → group_create.rb} +21 -12
  76. data/lib/chef/knife/group_destroy.rb +53 -0
  77. data/lib/chef/knife/{cookbook_site_list.rb → group_list.rb} +14 -11
  78. data/lib/chef/knife/group_remove.rb +56 -0
  79. data/lib/chef/knife/{cookbook_site_install.rb → group_show.rb} +21 -12
  80. data/lib/chef/knife/key_create_base.rb +1 -1
  81. data/lib/chef/knife/key_edit_base.rb +1 -1
  82. data/lib/chef/knife/ssh.rb +12 -31
  83. data/lib/chef/knife/status.rb +3 -3
  84. data/lib/chef/knife/supermarket_download.rb +1 -2
  85. data/lib/chef/knife/supermarket_install.rb +2 -3
  86. data/lib/chef/knife/supermarket_list.rb +1 -2
  87. data/lib/chef/knife/supermarket_search.rb +1 -2
  88. data/lib/chef/knife/supermarket_share.rb +1 -2
  89. data/lib/chef/knife/supermarket_show.rb +1 -2
  90. data/lib/chef/knife/supermarket_unshare.rb +1 -2
  91. data/lib/chef/knife/{cookbook_site_show.rb → user_dissociate.rb} +15 -13
  92. data/lib/chef/knife/{cookbook_site_search.rb → user_invite_add.rb} +16 -13
  93. data/lib/chef/knife/user_invite_list.rb +34 -0
  94. data/lib/chef/knife/user_invite_rescind.rb +63 -0
  95. data/lib/chef/knife/yaml_convert.rb +91 -0
  96. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  97. data/lib/chef/mixin/checksum.rb +0 -1
  98. data/lib/chef/mixin/openssl_helper.rb +4 -4
  99. data/lib/chef/mixin/powershell_exec.rb +10 -1
  100. data/lib/chef/mixin/powershell_out.rb +1 -1
  101. data/lib/chef/mixin/properties.rb +16 -2
  102. data/lib/chef/mixin/shell_out.rb +1 -5
  103. data/lib/chef/monkey_patches/net_http.rb +0 -4
  104. data/lib/chef/node.rb +18 -6
  105. data/lib/chef/node/attribute.rb +2 -2
  106. data/lib/chef/node/immutable_collections.rb +1 -1
  107. data/lib/chef/node/mixin/immutablize_array.rb +4 -0
  108. data/lib/chef/node/mixin/immutablize_hash.rb +3 -0
  109. data/lib/chef/node_map.rb +5 -31
  110. data/lib/chef/platform/priority_map.rb +4 -4
  111. data/lib/chef/platform/query_helpers.rb +6 -34
  112. data/lib/chef/policy_builder/policyfile.rb +1 -1
  113. data/lib/chef/powershell.rb +14 -0
  114. data/lib/chef/property.rb +24 -6
  115. data/lib/chef/provider.rb +40 -6
  116. data/lib/chef/provider/cron.rb +2 -2
  117. data/lib/chef/provider/directory.rb +3 -3
  118. data/lib/chef/provider/dsc_resource.rb +1 -1
  119. data/lib/chef/provider/dsc_script.rb +1 -1
  120. data/lib/chef/provider/execute.rb +3 -9
  121. data/lib/chef/provider/file.rb +6 -6
  122. data/lib/chef/provider/git.rb +84 -27
  123. data/lib/chef/provider/group.rb +4 -4
  124. data/lib/chef/provider/http_request.rb +6 -6
  125. data/lib/chef/provider/ifconfig.rb +4 -4
  126. data/lib/chef/provider/launchd.rb +45 -64
  127. data/lib/chef/provider/link.rb +2 -2
  128. data/lib/chef/provider/mount.rb +5 -5
  129. data/lib/chef/provider/osx_profile.rb +7 -3
  130. data/lib/chef/provider/package.rb +2 -2
  131. data/lib/chef/provider/package/cab.rb +5 -6
  132. data/lib/chef/provider/package/chocolatey.rb +1 -3
  133. data/lib/chef/provider/package/dnf.rb +66 -10
  134. data/lib/chef/provider/package/dnf/dnf_helper.py +85 -26
  135. data/lib/chef/provider/package/dnf/python_helper.rb +79 -36
  136. data/lib/chef/provider/package/dnf/version.rb +5 -1
  137. data/lib/chef/provider/package/dpkg.rb +1 -1
  138. data/lib/chef/provider/package/freebsd/base.rb +2 -1
  139. data/lib/chef/provider/package/homebrew.rb +107 -43
  140. data/lib/chef/provider/package/macports.rb +0 -2
  141. data/lib/chef/provider/package/msu.rb +4 -1
  142. data/lib/chef/provider/package/pacman.rb +25 -34
  143. data/lib/chef/provider/package/portage.rb +1 -0
  144. data/lib/chef/provider/package/powershell.rb +1 -1
  145. data/lib/chef/provider/package/rubygems.rb +30 -3
  146. data/lib/chef/provider/package/windows.rb +29 -53
  147. data/lib/chef/provider/package/windows/msi.rb +2 -2
  148. data/lib/chef/provider/package/yum.rb +1 -9
  149. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  150. data/lib/chef/provider/package/zypper.rb +0 -1
  151. data/lib/chef/provider/powershell_script.rb +5 -11
  152. data/lib/chef/provider/registry_key.rb +4 -4
  153. data/lib/chef/provider/remote_directory.rb +5 -5
  154. data/lib/chef/provider/remote_file/ftp.rb +3 -2
  155. data/lib/chef/provider/remote_file/local_file.rb +2 -1
  156. data/lib/chef/provider/remote_file/sftp.rb +3 -2
  157. data/lib/chef/provider/route.rb +5 -3
  158. data/lib/chef/provider/ruby_block.rb +1 -1
  159. data/lib/chef/provider/script.rb +2 -2
  160. data/lib/chef/provider/service.rb +8 -8
  161. data/lib/chef/provider/service/aixinit.rb +1 -1
  162. data/lib/chef/provider/service/arch.rb +1 -1
  163. data/lib/chef/provider/service/debian.rb +30 -28
  164. data/lib/chef/provider/service/macosx.rb +16 -10
  165. data/lib/chef/provider/service/systemd.rb +12 -12
  166. data/lib/chef/provider/service/upstart.rb +1 -1
  167. data/lib/chef/provider/service/windows.rb +5 -11
  168. data/lib/chef/provider/subversion.rb +25 -5
  169. data/lib/chef/provider/systemd_unit.rb +26 -25
  170. data/lib/chef/provider/user.rb +6 -6
  171. data/lib/chef/provider/user/aix.rb +1 -1
  172. data/lib/chef/provider/user/dscl.rb +6 -6
  173. data/lib/chef/provider/user/mac.rb +20 -15
  174. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  175. data/lib/chef/provider/windows_env.rb +3 -3
  176. data/lib/chef/provider/windows_script.rb +2 -2
  177. data/lib/chef/provider/windows_task.rb +10 -10
  178. data/lib/chef/providers.rb +0 -6
  179. data/lib/chef/recipe.rb +36 -0
  180. data/lib/chef/resource.rb +44 -57
  181. data/lib/chef/resource/action_class.rb +24 -22
  182. data/lib/chef/resource/alternatives.rb +210 -0
  183. data/lib/chef/resource/apt_package.rb +33 -3
  184. data/lib/chef/resource/apt_preference.rb +103 -7
  185. data/lib/chef/resource/apt_repository.rb +357 -18
  186. data/lib/chef/resource/apt_update.rb +58 -5
  187. data/lib/chef/resource/archive_file.rb +6 -5
  188. data/lib/chef/resource/bash.rb +3 -1
  189. data/lib/chef/resource/batch.rb +1 -1
  190. data/lib/chef/resource/bff_package.rb +10 -2
  191. data/lib/chef/resource/breakpoint.rb +1 -2
  192. data/lib/chef/resource/build_essential.rb +49 -51
  193. data/lib/chef/resource/cab_package.rb +9 -2
  194. data/lib/chef/resource/chef_client_cron.rb +228 -0
  195. data/lib/chef/resource/chef_client_scheduled_task.rb +201 -0
  196. data/lib/chef/resource/chef_client_systemd_timer.rb +180 -0
  197. data/lib/chef/resource/chef_gem.rb +15 -18
  198. data/lib/chef/resource/chef_handler.rb +5 -4
  199. data/lib/chef/resource/chef_sleep.rb +7 -5
  200. data/lib/chef/resource/chef_vault_secret.rb +135 -0
  201. data/lib/chef/resource/chocolatey_config.rb +8 -4
  202. data/lib/chef/resource/chocolatey_feature.rb +7 -4
  203. data/lib/chef/resource/chocolatey_package.rb +7 -4
  204. data/lib/chef/resource/chocolatey_source.rb +7 -4
  205. data/lib/chef/resource/cookbook_file.rb +4 -3
  206. data/lib/chef/resource/cron.rb +34 -80
  207. data/lib/chef/resource/cron_access.rb +10 -6
  208. data/lib/chef/resource/cron_d.rb +44 -95
  209. data/lib/chef/resource/csh.rb +3 -1
  210. data/lib/chef/resource/directory.rb +3 -3
  211. data/lib/chef/resource/dmg_package.rb +22 -19
  212. data/lib/chef/resource/dnf_package.rb +3 -4
  213. data/lib/chef/resource/dpkg_package.rb +3 -2
  214. data/lib/chef/resource/dsc_resource.rb +6 -4
  215. data/lib/chef/resource/dsc_script.rb +3 -2
  216. data/lib/chef/resource/execute.rb +15 -14
  217. data/lib/chef/resource/file.rb +14 -9
  218. data/lib/chef/resource/freebsd_package.rb +3 -2
  219. data/lib/chef/resource/gem_package.rb +19 -11
  220. data/lib/chef/resource/group.rb +5 -2
  221. data/lib/chef/resource/helpers/cron_validations.rb +98 -0
  222. data/lib/chef/resource/homebrew_cask.rb +3 -2
  223. data/lib/chef/resource/homebrew_package.rb +5 -3
  224. data/lib/chef/resource/homebrew_tap.rb +3 -2
  225. data/lib/chef/resource/hostname.rb +26 -20
  226. data/lib/chef/resource/http_request.rb +1 -2
  227. data/lib/chef/resource/ifconfig.rb +8 -8
  228. data/lib/chef/resource/ips_package.rb +11 -3
  229. data/lib/chef/resource/kernel_module.rb +30 -30
  230. data/lib/chef/resource/ksh.rb +3 -1
  231. data/lib/chef/resource/launchd.rb +3 -3
  232. data/lib/chef/resource/link.rb +5 -27
  233. data/lib/chef/resource/locale.rb +60 -26
  234. data/lib/chef/resource/log.rb +13 -2
  235. data/lib/chef/resource/lwrp_base.rb +1 -1
  236. data/lib/chef/resource/macos_userdefaults.rb +18 -10
  237. data/lib/chef/resource/macosx_service.rb +3 -2
  238. data/lib/chef/resource/macports_package.rb +10 -2
  239. data/lib/chef/resource/mdadm.rb +63 -3
  240. data/lib/chef/resource/mount.rb +4 -1
  241. data/lib/chef/resource/msu_package.rb +19 -2
  242. data/lib/chef/resource/notify_group.rb +8 -3
  243. data/lib/chef/resource/ohai.rb +20 -4
  244. data/lib/chef/resource/ohai_hint.rb +4 -13
  245. data/lib/chef/resource/openbsd_package.rb +10 -2
  246. data/lib/chef/resource/openssl_dhparam.rb +11 -2
  247. data/lib/chef/resource/openssl_ec_private_key.rb +24 -2
  248. data/lib/chef/resource/openssl_ec_public_key.rb +22 -2
  249. data/lib/chef/resource/openssl_rsa_private_key.rb +21 -2
  250. data/lib/chef/resource/openssl_rsa_public_key.rb +23 -2
  251. data/lib/chef/resource/openssl_x509_certificate.rb +38 -2
  252. data/lib/chef/resource/openssl_x509_crl.rb +13 -2
  253. data/lib/chef/resource/openssl_x509_request.rb +38 -2
  254. data/lib/chef/resource/osx_profile.rb +4 -3
  255. data/lib/chef/resource/package.rb +3 -2
  256. data/lib/chef/resource/pacman_package.rb +3 -2
  257. data/lib/chef/resource/paludis_package.rb +13 -4
  258. data/lib/chef/resource/perl.rb +3 -1
  259. data/lib/chef/resource/plist.rb +207 -0
  260. data/lib/chef/resource/portage_package.rb +14 -4
  261. data/lib/chef/resource/powershell_package.rb +2 -4
  262. data/lib/chef/resource/powershell_package_source.rb +4 -2
  263. data/lib/chef/resource/powershell_script.rb +8 -18
  264. data/lib/chef/resource/python.rb +3 -1
  265. data/lib/chef/resource/reboot.rb +1 -2
  266. data/lib/chef/resource/registry_key.rb +2 -3
  267. data/lib/chef/resource/remote_directory.rb +3 -1
  268. data/lib/chef/resource/remote_file.rb +3 -2
  269. data/lib/chef/resource/rhsm_errata.rb +1 -4
  270. data/lib/chef/resource/rhsm_errata_level.rb +1 -2
  271. data/lib/chef/resource/rhsm_register.rb +3 -3
  272. data/lib/chef/resource/rhsm_repo.rb +4 -3
  273. data/lib/chef/resource/rhsm_subscription.rb +5 -4
  274. data/lib/chef/resource/route.rb +6 -2
  275. data/lib/chef/resource/rpm_package.rb +13 -3
  276. data/lib/chef/resource/ruby.rb +3 -1
  277. data/lib/chef/resource/ruby_block.rb +2 -5
  278. data/lib/chef/resource/scm/_scm.rb +49 -0
  279. data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
  280. data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +10 -7
  281. data/lib/chef/resource/script.rb +7 -4
  282. data/lib/chef/resource/service.rb +7 -8
  283. data/lib/chef/resource/smartos_package.rb +10 -2
  284. data/lib/chef/resource/snap_package.rb +4 -2
  285. data/lib/chef/resource/solaris_package.rb +10 -2
  286. data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
  287. data/lib/chef/resource/sudo.rb +11 -11
  288. data/lib/chef/resource/support/cron.d.erb +1 -1
  289. data/lib/chef/resource/support/cron_access.erb +1 -1
  290. data/lib/chef/resource/support/sudoer.erb +1 -2
  291. data/lib/chef/resource/support/ulimit.erb +41 -0
  292. data/lib/chef/resource/swap_file.rb +7 -5
  293. data/lib/chef/resource/sysctl.rb +63 -4
  294. data/lib/chef/resource/systemd_unit.rb +6 -4
  295. data/lib/chef/resource/template.rb +0 -1
  296. data/lib/chef/resource/timezone.rb +8 -19
  297. data/lib/chef/resource/user.rb +3 -5
  298. data/lib/chef/resource/user/aix_user.rb +0 -2
  299. data/lib/chef/resource/user/dscl_user.rb +1 -1
  300. data/lib/chef/resource/user/linux_user.rb +0 -2
  301. data/lib/chef/resource/user/mac_user.rb +1 -1
  302. data/lib/chef/resource/user/pw_user.rb +0 -2
  303. data/lib/chef/resource/user/solaris_user.rb +0 -2
  304. data/lib/chef/resource/user/windows_user.rb +0 -2
  305. data/lib/chef/resource/user_ulimit.rb +116 -0
  306. data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
  307. data/lib/chef/resource/windows_ad_join.rb +20 -7
  308. data/lib/chef/resource/windows_auto_run.rb +2 -3
  309. data/lib/chef/resource/windows_certificate.rb +3 -3
  310. data/lib/chef/resource/windows_dfs_folder.rb +1 -2
  311. data/lib/chef/resource/windows_dfs_namespace.rb +1 -2
  312. data/lib/chef/resource/windows_dfs_server.rb +2 -3
  313. data/lib/chef/resource/windows_dns_record.rb +0 -1
  314. data/lib/chef/resource/windows_dns_zone.rb +0 -1
  315. data/lib/chef/resource/windows_env.rb +12 -4
  316. data/lib/chef/resource/windows_feature.rb +59 -4
  317. data/lib/chef/resource/windows_feature_dism.rb +24 -24
  318. data/lib/chef/resource/windows_feature_powershell.rb +44 -78
  319. data/lib/chef/resource/windows_firewall_rule.rb +121 -8
  320. data/lib/chef/resource/windows_font.rb +10 -2
  321. data/lib/chef/resource/windows_package.rb +76 -7
  322. data/lib/chef/resource/windows_pagefile.rb +31 -4
  323. data/lib/chef/resource/windows_path.rb +18 -2
  324. data/lib/chef/resource/windows_printer.rb +26 -7
  325. data/lib/chef/resource/windows_printer_port.rb +29 -2
  326. data/lib/chef/resource/windows_script.rb +3 -4
  327. data/lib/chef/resource/windows_security_policy.rb +119 -0
  328. data/lib/chef/resource/windows_service.rb +46 -32
  329. data/lib/chef/resource/windows_share.rb +22 -6
  330. data/lib/chef/resource/windows_shortcut.rb +13 -3
  331. data/lib/chef/resource/windows_task.rb +129 -16
  332. data/lib/chef/resource/windows_uac.rb +20 -2
  333. data/lib/chef/resource/windows_user_privilege.rb +199 -0
  334. data/lib/chef/resource/windows_workgroup.rb +19 -4
  335. data/lib/chef/resource/yum_package.rb +91 -7
  336. data/lib/chef/resource/yum_repository.rb +30 -12
  337. data/lib/chef/resource/zypper_package.rb +32 -5
  338. data/lib/chef/resource/zypper_repository.rb +19 -6
  339. data/lib/chef/resource_builder.rb +8 -0
  340. data/lib/chef/resource_inspector.rb +3 -2
  341. data/lib/chef/resource_resolver.rb +7 -14
  342. data/lib/chef/resources.rb +11 -3
  343. data/lib/chef/run_context/cookbook_compiler.rb +29 -5
  344. data/lib/chef/scan_access_control.rb +1 -1
  345. data/lib/chef/shell.rb +22 -0
  346. data/lib/chef/shell/ext.rb +1 -1
  347. data/lib/chef/version.rb +1 -1
  348. data/lib/chef/win32/api.rb +2 -2
  349. data/lib/chef/win32/api/error.rb +3 -1
  350. data/lib/chef/win32/api/file.rb +1 -1
  351. data/lib/chef/win32/api/net.rb +1 -0
  352. data/lib/chef/win32/api/security.rb +6 -0
  353. data/lib/chef/win32/file.rb +1 -9
  354. data/lib/chef/win32/mutex.rb +1 -1
  355. data/lib/chef/win32/net.rb +1 -0
  356. data/lib/chef/win32/security.rb +40 -2
  357. data/lib/chef/win32/security/sid.rb +4 -4
  358. data/spec/functional/assets/inittest +8 -7
  359. data/spec/functional/knife/ssh_spec.rb +23 -19
  360. data/spec/functional/resource/cron_spec.rb +10 -29
  361. data/spec/functional/resource/dnf_package_spec.rb +441 -156
  362. data/spec/functional/resource/git_spec.rb +184 -134
  363. data/spec/functional/resource/insserv_spec.rb +1 -1
  364. data/spec/functional/resource/launchd_spec.rb +232 -0
  365. data/spec/functional/resource/link_spec.rb +3 -3
  366. data/spec/functional/resource/locale_spec.rb +13 -2
  367. data/spec/functional/resource/msu_package_spec.rb +5 -2
  368. data/spec/functional/resource/powershell_script_spec.rb +7 -68
  369. data/spec/functional/resource/remote_file_spec.rb +1 -1
  370. data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
  371. data/spec/functional/resource/windows_task_spec.rb +4 -4
  372. data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
  373. data/spec/functional/run_lock_spec.rb +1 -1
  374. data/spec/functional/shell_spec.rb +1 -1
  375. data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
  376. data/spec/functional/version_spec.rb +1 -1
  377. data/spec/functional/win32/registry_spec.rb +0 -6
  378. data/spec/functional/win32/security_spec.rb +22 -0
  379. data/spec/integration/client/client_spec.rb +123 -2
  380. data/spec/integration/knife/cookbook_show_spec.rb +28 -26
  381. data/spec/integration/knife/data_bag_show_spec.rb +1 -1
  382. data/spec/integration/knife/raw_spec.rb +34 -6
  383. data/spec/integration/knife/redirection_spec.rb +2 -2
  384. data/spec/integration/knife/show_spec.rb +32 -3
  385. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +3 -3
  386. data/spec/integration/recipes/noop_resource_spec.rb +1 -1
  387. data/spec/integration/recipes/notifies_spec.rb +49 -20
  388. data/spec/integration/recipes/notifying_block_spec.rb +8 -5
  389. data/spec/integration/recipes/provider_choice.rb +2 -0
  390. data/spec/integration/recipes/recipe_dsl_spec.rb +45 -143
  391. data/spec/integration/recipes/resource_action_spec.rb +16 -11
  392. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -1
  393. data/spec/integration/recipes/resource_load_spec.rb +133 -12
  394. data/spec/integration/recipes/use_partial_spec.rb +112 -0
  395. data/spec/integration/solo/solo_spec.rb +3 -3
  396. data/spec/spec_helper.rb +18 -3
  397. data/spec/support/chef_helpers.rb +2 -2
  398. data/spec/support/lib/chef/resource/zen_follower.rb +2 -0
  399. data/spec/support/platform_helpers.rb +2 -20
  400. data/spec/support/recipe_dsl_helper.rb +83 -0
  401. data/spec/support/shared/functional/http.rb +2 -2
  402. data/spec/support/shared/functional/windows_script.rb +3 -16
  403. data/spec/support/shared/integration/knife_support.rb +9 -6
  404. data/spec/support/shared/unit/mock_shellout.rb +1 -1
  405. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
  406. data/spec/unit/application/apply_spec.rb +3 -0
  407. data/spec/unit/application/client_spec.rb +5 -1
  408. data/spec/unit/application_spec.rb +1 -2
  409. data/spec/unit/client_spec.rb +7 -5
  410. data/spec/unit/cookbook/gem_installer_spec.rb +2 -2
  411. data/spec/unit/cookbook/metadata_spec.rb +38 -19
  412. data/spec/unit/data_collector_spec.rb +39 -18
  413. data/spec/unit/file_access_control_spec.rb +1 -1
  414. data/spec/unit/json_compat_spec.rb +1 -1
  415. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +15 -15
  416. data/spec/unit/knife/bootstrap/client_builder_spec.rb +9 -9
  417. data/spec/unit/knife/bootstrap_spec.rb +20 -38
  418. data/spec/unit/knife/cookbook_show_spec.rb +1 -0
  419. data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
  420. data/spec/unit/knife/core/ui_spec.rb +16 -0
  421. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +9 -63
  422. data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
  423. data/spec/unit/knife/ssh_spec.rb +8 -111
  424. data/spec/unit/knife/status_spec.rb +1 -1
  425. data/spec/unit/knife_spec.rb +18 -0
  426. data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
  427. data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
  428. data/spec/unit/mixin/shell_out_spec.rb +25 -31
  429. data/spec/unit/node/attribute_spec.rb +3 -3
  430. data/spec/unit/node_spec.rb +24 -0
  431. data/spec/unit/platform/query_helpers_spec.rb +0 -143
  432. data/spec/unit/property/state_spec.rb +12 -7
  433. data/spec/unit/property/validation_spec.rb +25 -1
  434. data/spec/unit/property_spec.rb +12 -9
  435. data/spec/unit/provider/apt_preference_spec.rb +14 -10
  436. data/spec/unit/provider/apt_repository_spec.rb +34 -36
  437. data/spec/unit/provider/apt_update_spec.rb +12 -11
  438. data/spec/unit/provider/cookbook_file_spec.rb +4 -4
  439. data/spec/unit/provider/cron_spec.rb +2 -2
  440. data/spec/unit/provider/directory_spec.rb +4 -15
  441. data/spec/unit/provider/file_spec.rb +4 -4
  442. data/spec/unit/provider/git_spec.rb +41 -1
  443. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  444. data/spec/unit/provider/launchd_spec.rb +8 -50
  445. data/spec/unit/provider/link_spec.rb +0 -1
  446. data/spec/unit/provider/log_spec.rb +3 -3
  447. data/spec/unit/provider/mdadm_spec.rb +3 -3
  448. data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
  449. data/spec/unit/provider/package/homebrew_spec.rb +280 -174
  450. data/spec/unit/provider/package/pacman_spec.rb +65 -147
  451. data/spec/unit/provider/package/portage_spec.rb +2 -2
  452. data/spec/unit/provider/package/powershell_spec.rb +3 -2
  453. data/spec/unit/provider/package/rubygems_spec.rb +211 -26
  454. data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
  455. data/spec/unit/provider/powershell_script_spec.rb +21 -61
  456. data/spec/unit/provider/remote_file_spec.rb +3 -4
  457. data/spec/unit/provider/service/debian_service_spec.rb +34 -13
  458. data/spec/unit/provider/service/macosx_spec.rb +210 -214
  459. data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
  460. data/spec/unit/provider/subversion_spec.rb +4 -2
  461. data/spec/unit/provider/template_spec.rb +3 -4
  462. data/spec/unit/provider/zypper_repository_spec.rb +17 -17
  463. data/spec/unit/provider_resolver_spec.rb +4 -4
  464. data/spec/unit/recipe_spec.rb +68 -0
  465. data/spec/unit/resource/alternatives_spec.rb +120 -0
  466. data/spec/unit/resource/apt_preference_spec.rb +0 -18
  467. data/spec/unit/resource/apt_repository_spec.rb +0 -18
  468. data/spec/unit/resource/apt_update_spec.rb +0 -18
  469. data/spec/unit/resource/chef_client_cron_spec.rb +119 -0
  470. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +102 -0
  471. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +70 -0
  472. data/spec/unit/resource/chef_vault_secret_spec.rb +40 -0
  473. data/spec/unit/resource/chocolatey_source_spec.rb +2 -1
  474. data/spec/unit/resource/cron_d_spec.rb +6 -48
  475. data/spec/unit/resource/cron_spec.rb +4 -10
  476. data/spec/unit/resource/gem_package_spec.rb +3 -3
  477. data/spec/unit/resource/helpers/cron_validations_spec.rb +77 -0
  478. data/spec/unit/resource/link_spec.rb +0 -4
  479. data/spec/unit/resource/locale_spec.rb +0 -34
  480. data/spec/unit/resource/msu_package_spec.rb +4 -0
  481. data/spec/unit/resource/ohai_spec.rb +56 -2
  482. data/spec/unit/resource/plist_spec.rb +130 -0
  483. data/spec/unit/resource/powershell_script_spec.rb +0 -5
  484. data/spec/unit/resource/{git_spec.rb → scm/git_spec.rb} +50 -2
  485. data/spec/unit/resource/{scm_spec.rb → scm/scm.rb} +1 -52
  486. data/spec/unit/resource/{subversion_spec.rb → scm/subversion_spec.rb} +2 -3
  487. data/spec/unit/resource/service_spec.rb +4 -0
  488. data/spec/unit/resource/user_spec.rb +2 -2
  489. data/spec/unit/resource/user_ulimit_spec.rb +53 -0
  490. data/spec/unit/resource/windows_feature_dism_spec.rb +2 -17
  491. data/spec/unit/resource/windows_feature_powershell_spec.rb +2 -17
  492. data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
  493. data/spec/unit/resource/windows_package_spec.rb +14 -0
  494. data/spec/unit/resource/windows_service_spec.rb +9 -0
  495. data/spec/unit/resource_reporter_spec.rb +2 -6
  496. data/spec/unit/resource_spec.rb +10 -3
  497. data/spec/unit/run_lock_spec.rb +1 -1
  498. data/spec/unit/scan_access_control_spec.rb +1 -1
  499. data/spec/unit/search/query_spec.rb +1 -1
  500. data/spec/unit/win32/registry_spec.rb +1 -1
  501. data/tasks/rspec.rb +6 -14
  502. metadata +92 -37
  503. data/lib/chef/dsl/core.rb +0 -52
  504. data/lib/chef/knife/cookbook_site_share.rb +0 -41
  505. data/lib/chef/knife/cookbook_site_unshare.rb +0 -41
  506. data/lib/chef/provider/apt_preference.rb +0 -93
  507. data/lib/chef/provider/apt_repository.rb +0 -358
  508. data/lib/chef/provider/apt_update.rb +0 -79
  509. data/lib/chef/provider/log.rb +0 -43
  510. data/lib/chef/provider/mdadm.rb +0 -85
  511. data/lib/chef/provider/ohai.rb +0 -45
  512. data/lib/chef/resource/git.rb +0 -37
  513. data/spec/unit/provider/ohai_spec.rb +0 -84
@@ -15,179 +15,97 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
  #
18
-
19
18
  require "spec_helper"
20
19
 
21
- describe Chef::Provider::Package::Pacman do
20
+ def create_provider_for(name)
21
+ @new_resource = Chef::Resource::Package.new(name)
22
+ provider = Chef::Provider::Package::Pacman.new(@new_resource, @run_context)
23
+ allow(provider).to receive(:shell_out_compacted).and_return(@status)
24
+ provider
25
+ end
26
+
27
+ RSpec.shared_examples "current_resource" do |pkg, version, candidate|
28
+ let(:current_resource) { @provider.load_current_resource }
22
29
  before(:each) do
23
- @node = Chef::Node.new
24
- @events = Chef::EventDispatch::Dispatcher.new
25
- @run_context = Chef::RunContext.new(@node, {}, @events)
26
- @new_resource = Chef::Resource::Package.new("nano")
27
- @current_resource = Chef::Resource::Package.new("nano")
28
-
29
- @status = double(stdout: "", exitstatus: 0)
30
- @provider = Chef::Provider::Package::Pacman.new(@new_resource, @run_context)
31
- allow(Chef::Resource::Package).to receive(:new).and_return(@current_resource)
32
-
33
- allow(@provider).to receive(:shell_out_compacted).and_return(@status)
34
- @stdin = StringIO.new
35
- @stdout = StringIO.new(<<~ERR)
36
- error: package "nano" not found
37
- ERR
38
- @stderr = StringIO.new
39
- @pid = 2342
30
+ @provider = create_provider_for(pkg)
40
31
  end
41
32
 
42
- describe "when determining the current package state" do
43
- it "should create a current resource with the name of the new_resource" do
44
- expect(Chef::Resource::Package).to receive(:new).and_return(@current_resource)
45
- @provider.load_current_resource
46
- end
47
-
48
- it "should set the current resources package name to the new resources package name" do
49
- expect(@current_resource).to receive(:package_name).with(@new_resource.package_name)
50
- @provider.load_current_resource
51
- end
52
-
53
- it "should run pacman query with the package name" do
54
- expect(@provider).to receive(:shell_out_compacted).with("pacman", "-Qi", @new_resource.package_name, { timeout: 900 }).and_return(@status)
55
- @provider.load_current_resource
56
- end
57
-
58
- it "should read stdout on pacman" do
59
- allow(@provider).to receive(:shell_out_compacted).and_return(@status)
60
- @provider.load_current_resource
61
- end
62
-
63
- it "should set the installed version to nil on the current resource if pacman installed version not exists" do
64
- allow(@provider).to receive(:shell_out_compacted).and_return(@status)
65
- @provider.load_current_resource
66
- end
67
-
68
- it "should set the installed version if pacman has one" do
69
- stdout = <<~PACMAN
70
- Name : nano
71
- Version : 2.2.2-1
72
- URL : http://www.nano-editor.org
73
- Licenses : GPL
74
- Groups : base
75
- Provides : None
76
- Depends On : glibc ncurses
77
- Optional Deps : None
78
- Required By : None
79
- Conflicts With : None
80
- Replaces : None
81
- Installed Size : 1496.00 K
82
- Packager : Andreas Radke <andyrtr@archlinux.org>
83
- Architecture : i686
84
- Build Date : Mon 18 Jan 2010 06:16:16 PM CET
85
- Install Date : Mon 01 Feb 2010 10:06:30 PM CET
86
- Install Reason : Explicitly installed
87
- Install Script : Yes
88
- Description : Pico editor clone with enhancements
89
- PACMAN
90
-
91
- status = double(stdout: stdout, exitstatus: 0)
92
- allow(@provider).to receive(:shell_out_compacted).and_return(status)
93
- @provider.load_current_resource
94
- expect(@current_resource.version).to eq("2.2.2-1")
95
- end
96
-
97
- it "should set the candidate version if pacman has one" do
98
- status = double(stdout: "core nano 2.2.3-1", exitstatus: 0)
99
- allow(@provider).to receive(:shell_out_compacted).and_return(status)
100
- @provider.load_current_resource
101
- expect(@provider.candidate_version).to eql("2.2.3-1")
102
- end
103
-
104
- it "should use pacman.conf to determine valid repo names for package versions" do
105
- @pacman_conf = <<~PACMAN_CONF
106
- [options]
107
- HoldPkg = pacman glibc
108
- Architecture = auto
33
+ it "sets current_resource name" do
34
+ expect(current_resource.package_name).to eql(pkg)
35
+ end
109
36
 
110
- [customrepo]
111
- Server = https://my.custom.repo
37
+ it "sets current_resource version" do
38
+ expect(current_resource.version).to eql(version)
39
+ end
112
40
 
113
- [core]
114
- Include = /etc/pacman.d/mirrorlist
41
+ it "sets candidate version" do
42
+ current_resource
43
+ expect(@provider.candidate_version).to eql(candidate)
44
+ end
45
+ end
115
46
 
116
- [extra]
117
- Include = /etc/pacman.d/mirrorlist
47
+ describe Chef::Provider::Package::Pacman do
48
+ before(:each) do
49
+ @node = Chef::Node.new
50
+ @events = Chef::EventDispatch::Dispatcher.new
51
+ @run_context = Chef::RunContext.new(@node, {}, @events)
52
+ @pacman_conf = <<~PACMAN_CONF
53
+ [options]
54
+ HoldPkg = pacman glibc
55
+ Architecture = auto
118
56
 
119
- [community]
120
- Include = /etc/pacman.d/mirrorlist
121
- PACMAN_CONF
57
+ [customrepo]
58
+ Server = https://my.custom.repo
122
59
 
123
- status = double(stdout: "customrepo nano 1.2.3-4", exitstatus: 0)
124
- allow(::File).to receive(:exist?).with("/etc/pacman.conf").and_return(true)
125
- allow(::File).to receive(:read).with("/etc/pacman.conf").and_return(@pacman_conf)
126
- allow(@provider).to receive(:shell_out_compacted).and_return(status)
60
+ [core]
61
+ Include = /etc/pacman.d/mirrorlist
127
62
 
128
- @provider.load_current_resource
129
- expect(@provider.candidate_version).to eql("1.2.3-4")
130
- end
63
+ [extra]
64
+ Include = /etc/pacman.d/mirrorlist
131
65
 
132
- it "should raise an exception if pacman fails" do
133
- expect(@status).to receive(:exitstatus).and_return(2)
134
- expect { @provider.load_current_resource }.to raise_error(Chef::Exceptions::Package)
135
- end
66
+ [community]
67
+ Include = /etc/pacman.d/mirrorlist
68
+ PACMAN_CONF
136
69
 
137
- it "should not raise an exception if pacman succeeds" do
138
- expect(@status).to receive(:exitstatus).and_return(0)
139
- expect { @provider.load_current_resource }.not_to raise_error
140
- end
70
+ allow(::File).to receive(:exist?).with("/etc/pacman.conf").and_return(true)
71
+ allow(::File).to receive(:read).with("/etc/pacman.conf").and_return(@pacman_conf)
141
72
 
142
- it "should raise an exception if pacman does not return a candidate version" do
143
- allow(@provider).to receive(:shell_out_compacted).and_return(@status)
144
- expect { @provider.candidate_version }.to raise_error(Chef::Exceptions::Package)
145
- end
73
+ pacman_out = <<~PACMAN_OUT
74
+ extra nano 3.450-1
75
+ extra emacs 0.12.0-1 [installed]
76
+ core sed 3.234-2 [installed: 3.234-1]
77
+ PACMAN_OUT
78
+ @status = double(stdout: pacman_out, exitstatus: 0)
146
79
 
147
- it "should return the current resouce" do
148
- expect(@provider.load_current_resource).to eql(@current_resource)
149
- end
150
80
  end
151
81
 
152
- describe Chef::Provider::Package::Pacman, "install_package" do
153
- it "should run pacman install with the package name and version" do
154
- expect(@provider).to receive(:shell_out_compacted!).with("pacman", "--sync", "--noconfirm", "--noprogressbar", "nano", { timeout: 900 })
155
- @provider.install_package("nano", "1.0")
156
- end
157
-
158
- it "should run pacman install with the package name and version and options if specified" do
159
- expect(@provider).to receive(:shell_out_compacted!).with("pacman", "--sync", "--noconfirm", "--noprogressbar", "--debug", "nano", { timeout: 900 })
160
- @new_resource.options("--debug")
82
+ describe "loading the current resource" do
161
83
 
162
- @provider.install_package("nano", "1.0")
84
+ describe "for an existing and installed but upgradable package" do
85
+ include_examples "current_resource", ["sed"], ["3.234-1"], ["3.234-2"]
163
86
  end
164
- end
165
87
 
166
- describe Chef::Provider::Package::Pacman, "upgrade_package" do
167
- it "should run install_package with the name and version" do
168
- expect(@provider).to receive(:install_package).with("nano", "1.0")
169
- @provider.upgrade_package("nano", "1.0")
88
+ describe "for an existing and installed package" do
89
+ include_examples "current_resource", ["emacs"], ["0.12.0-1"], ["0.12.0-1"]
170
90
  end
171
- end
172
91
 
173
- describe Chef::Provider::Package::Pacman, "remove_package" do
174
- it "should run pacman remove with the package name" do
175
- expect(@provider).to receive(:shell_out_compacted!).with("pacman", "--remove", "--noconfirm", "--noprogressbar", "nano", { timeout: 900 })
176
- @provider.remove_package("nano", "1.0")
92
+ describe "for an existing non installed package" do
93
+ include_examples "current_resource", ["nano"], [nil], ["3.450-1"]
177
94
  end
178
95
 
179
- it "should run pacman remove with the package name and options if specified" do
180
- expect(@provider).to receive(:shell_out_compacted!).with("pacman", "--remove", "--noconfirm", "--noprogressbar", "--debug", "nano", { timeout: 900 })
181
- @new_resource.options("--debug")
182
-
183
- @provider.remove_package("nano", "1.0")
96
+ describe "for a non existing and an upgradable package" do
97
+ include_examples "current_resource", %w{nano sed}, [nil, "3.234-1"], ["3.450-1", "3.234-2"]
184
98
  end
185
- end
186
99
 
187
- describe Chef::Provider::Package::Pacman, "purge_package" do
188
- it "should run remove_package with the name and version" do
189
- expect(@provider).to receive(:remove_package).with("nano", "1.0")
190
- @provider.purge_package("nano", "1.0")
100
+ describe "for a non existing package" do
101
+ let(:current_resource) { @provider.load_current_resource }
102
+ before(:each) do
103
+ @provider = create_provider_for("vim")
104
+ end
105
+
106
+ it "raises an error" do
107
+ expect { current_resource }.to raise_error(Chef::Exceptions::Package)
108
+ end
191
109
  end
192
110
 
193
111
  end
@@ -118,13 +118,13 @@ describe Chef::Provider::Package::Portage, "load_current_resource" do
118
118
  expect { @provider.candidate_version }.to raise_error(Chef::Exceptions::Package)
119
119
  end
120
120
 
121
- it "should find the candidate_version if a category is specifed and there are no duplicates" do
121
+ it "should find the candidate_version if a category is specified and there are no duplicates" do
122
122
  status = double(stdout: "dev-vcs/git-2.16.2", exitstatus: 0)
123
123
  expect(@provider).to receive(:shell_out_compacted).and_return(status)
124
124
  expect(@provider.candidate_version).to eq("2.16.2")
125
125
  end
126
126
 
127
- it "should find the candidate_version if a category is not specifed and there are no duplicates" do
127
+ it "should find the candidate_version if a category is not specified and there are no duplicates" do
128
128
  status = double(stdout: "dev-vcs/git-2.16.2", exitstatus: 0)
129
129
  @provider = Chef::Provider::Package::Portage.new(@new_resource_without_category, @run_context)
130
130
  expect(@provider).to receive(:shell_out_compacted).and_return(status)
@@ -19,7 +19,7 @@
19
19
  require "spec_helper"
20
20
  require "chef/mixin/powershell_out"
21
21
 
22
- describe Chef::Provider::Package::Powershell do
22
+ describe Chef::Provider::Package::Powershell, :windows_only do
23
23
  include Chef::Mixin::PowershellOut
24
24
  let(:timeout) { 900 }
25
25
  let(:source) { nil }
@@ -28,6 +28,7 @@ describe Chef::Provider::Package::Powershell do
28
28
 
29
29
  let(:provider) do
30
30
  node = Chef::Node.new
31
+ node.consume_external_attrs(OHAI_SYSTEM.data.dup, {})
31
32
  events = Chef::EventDispatch::Dispatcher.new
32
33
  run_context = Chef::RunContext.new(node, {}, events)
33
34
  Chef::Provider::Package::Powershell.new(new_resource, run_context)
@@ -130,7 +131,7 @@ describe Chef::Provider::Package::Powershell do
130
131
  expect(provider.candidate_version).to eql(["2.12.0.0"])
131
132
  end
132
133
 
133
- it "should set the candidate_version to the latest version when not pinning and package name is space seperated" do
134
+ it "should set the candidate_version to the latest version when not pinning and package name is space separated" do
134
135
  allow(provider).to receive(:powershell_out).with("( Find-Package '7-Zip 16.02 (x64)' -Force -ForceBootstrap ).Version", { timeout: new_resource.timeout }).and_return(package_7zip_available)
135
136
  new_resource.package_name(["7-Zip 16.02 (x64)"])
136
137
  new_resource.version(nil)
@@ -363,7 +363,7 @@ describe Chef::Provider::Package::Rubygems do
363
363
  let(:bindir) { "/usr/bin" }
364
364
  let(:options) { nil }
365
365
  let(:source) { nil }
366
- let(:include_default_source) { true }
366
+ let(:include_default_source) { nil }
367
367
 
368
368
  let(:new_resource) do
369
369
  new_resource = Chef::Resource::GemPackage.new(gem_name)
@@ -585,7 +585,7 @@ describe Chef::Provider::Package::Rubygems do
585
585
 
586
586
  it "determines the candidate version by querying the remote gem servers" do
587
587
  expect(provider.gem_env).to receive(:candidate_version_from_remote)
588
- .with(gem_dep, source, Chef::Config[:rubygems_url])
588
+ .with(gem_dep, source)
589
589
  .and_return(Gem::Version.new(target_version))
590
590
  expect(provider.candidate_version).to eq(target_version)
591
591
  end
@@ -605,7 +605,7 @@ describe Chef::Provider::Package::Rubygems do
605
605
 
606
606
  it "determines the candidate version by querying the remote gem servers" do
607
607
  expect(provider.gem_env).to receive(:candidate_version_from_remote)
608
- .with(gem_dep, *[source, Chef::Config[:rubygems_url] ].flatten)
608
+ .with(gem_dep, *source)
609
609
  .and_return(Gem::Version.new(target_version))
610
610
  expect(provider.candidate_version).to eq(target_version)
611
611
  end
@@ -645,13 +645,13 @@ describe Chef::Provider::Package::Rubygems do
645
645
 
646
646
  before do
647
647
  expected_source = [ source ]
648
- expected_source << Chef::Config[:rubygems_url] if include_default_source
648
+ expected_source << "https://rubygems.org" if provider.include_default_source?
649
649
  allow(provider.gem_env).to receive(:candidate_version_from_remote).with(gem_dep, *expected_source.flatten.compact).and_return(version)
650
650
  end
651
651
 
652
652
  describe "in the current gem environment" do
653
653
  it "installs the gem via the gems api when no explicit options are used" do
654
- 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" ])
655
655
  provider.run_action(:install)
656
656
  expect(new_resource).to be_updated_by_last_action
657
657
  end
@@ -660,7 +660,7 @@ describe Chef::Provider::Package::Rubygems do
660
660
  let(:source) { "http://gems.example.org" }
661
661
 
662
662
  it "installs the gem via the gems api" do
663
- 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])
664
664
  provider.run_action(:install)
665
665
  expect(new_resource).to be_updated_by_last_action
666
666
  end
@@ -691,7 +691,7 @@ describe Chef::Provider::Package::Rubygems do
691
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
692
692
  allow(::File).to receive(:exist?).and_return(true)
693
693
  new_resource.package_name("rspec-core")
694
- 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" ])
695
695
  provider.run_action(:install)
696
696
  expect(new_resource).to be_updated_by_last_action
697
697
  end
@@ -700,14 +700,14 @@ describe Chef::Provider::Package::Rubygems do
700
700
  let(:options) { "-i /alt/install/location" }
701
701
 
702
702
  it "installs the gem by shelling out when options are provided as a String" do
703
- 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}"
704
704
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
705
705
  provider.run_action(:install)
706
706
  expect(new_resource).to be_updated_by_last_action
707
707
  end
708
708
 
709
709
  it "unmockening needs_nodocument?" do
710
- 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}"
711
711
  expect(provider).to receive(:needs_nodocument?).and_call_original
712
712
  stub_const("Gem::VERSION", "3.0.0")
713
713
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
@@ -716,7 +716,7 @@ describe Chef::Provider::Package::Rubygems do
716
716
  end
717
717
 
718
718
  it "when the rubygems_version is old it uses the old flags" do
719
- 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}"
720
720
  expect(provider).to receive(:needs_nodocument?).and_call_original
721
721
  stub_const("Gem::VERSION", "2.8.0")
722
722
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
@@ -728,10 +728,10 @@ describe Chef::Provider::Package::Rubygems do
728
728
  context "when the Chef::Config[:rubygems_url] option is provided" do
729
729
  let(:gem_binary) { "/foo/bar" }
730
730
 
731
- it "installs the gem with rubygems.org as an added source" do
731
+ it "installs the gem" do
732
732
  Chef::Config[:rubygems_url] = "https://mirror1"
733
- expect(provider.gem_env).to receive(:candidate_version_from_remote).with(gem_dep, Chef::Config[:rubygems_url]).and_return(version)
734
- 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"
735
735
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
736
736
  provider.run_action(:install)
737
737
  expect(new_resource).to be_updated_by_last_action
@@ -742,19 +742,30 @@ describe Chef::Provider::Package::Rubygems do
742
742
  let(:source) { "http://mirror.ops.rhcloud.com/mirror/ruby" }
743
743
  let(:gem_binary) { "/foo/bar" }
744
744
 
745
- it "installs the gem with rubygems.org as an added source" do
746
- 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}"
747
747
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
748
748
  provider.run_action(:install)
749
749
  expect(new_resource).to be_updated_by_last_action
750
750
  end
751
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
+
752
763
  context "with include_default_source false" do
753
764
  let(:include_default_source) { false }
754
765
 
755
766
  it "ignores the Chef::Config setting" do
756
767
  Chef::Config[:rubygems_url] = "https://ignored"
757
- 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}"
758
769
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
759
770
  provider.run_action(:install)
760
771
  expect(new_resource).to be_updated_by_last_action
@@ -767,18 +778,29 @@ describe Chef::Provider::Package::Rubygems do
767
778
  let(:gem_binary) { "/foo/bar" }
768
779
 
769
780
  it "installs the gem with an array as an added source" do
770
- 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"
771
782
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
772
783
  provider.run_action(:install)
773
784
  expect(new_resource).to be_updated_by_last_action
774
785
  end
775
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
+
776
798
  context "with include_default_source false" do
777
799
  let(:include_default_source) { false }
778
800
 
779
801
  it "ignores the Chef::Config setting" do
780
802
  Chef::Config[:rubygems_url] = "https://ignored"
781
- 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"
782
804
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
783
805
  provider.run_action(:install)
784
806
  expect(new_resource).to be_updated_by_last_action
@@ -786,13 +808,26 @@ describe Chef::Provider::Package::Rubygems do
786
808
  end
787
809
  end
788
810
 
789
- 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
790
812
  let(:gem_binary) { "/foo/bar" }
791
813
  let(:source) { "http://mirror.ops.rhcloud.com/mirror/ruby" }
792
814
 
793
815
  it "installs the gem" do
794
816
  new_resource.clear_sources(true)
795
- 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}"
796
831
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
797
832
  provider.run_action(:install)
798
833
  expect(new_resource).to be_updated_by_last_action
@@ -804,7 +839,7 @@ describe Chef::Provider::Package::Rubygems do
804
839
  let(:options) { "-i /alt/install/location" }
805
840
 
806
841
  it "installs the gem by shelling out when options are provided but no version is given" do
807
- 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}"
808
843
  expect(provider).to receive(:shell_out_compacted!).with(expected, env: nil, timeout: 900)
809
844
  provider.run_action(:install)
810
845
  expect(new_resource).to be_updated_by_last_action
@@ -815,7 +850,7 @@ describe Chef::Provider::Package::Rubygems do
815
850
  let(:options) { { install_dir: "/alt/install/location" } }
816
851
 
817
852
  it "installs the gem via the gems api when options are given as a Hash" do
818
- 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))
819
854
  provider.run_action(:install)
820
855
  expect(new_resource).to be_updated_by_last_action
821
856
  end
@@ -825,7 +860,7 @@ describe Chef::Provider::Package::Rubygems do
825
860
  let(:target_version) { "9000.0.2" }
826
861
 
827
862
  it "installs the gem via the gems api" do
828
- 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" ] )
829
864
  provider.run_action(:install)
830
865
  expect(new_resource).to be_updated_by_last_action
831
866
  end
@@ -868,7 +903,7 @@ describe Chef::Provider::Package::Rubygems do
868
903
  let(:gem_binary) { "/usr/weird/bin/gem" }
869
904
 
870
905
  it "installs the gem by shelling out to gem install" do
871
- 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)
872
907
  provider.run_action(:install)
873
908
  expect(new_resource).to be_updated_by_last_action
874
909
  end
@@ -876,7 +911,7 @@ describe Chef::Provider::Package::Rubygems do
876
911
  it "unmockening needs_nodocument?" do
877
912
  expect(provider).to receive(:needs_nodocument?).and_call_original
878
913
  expect(provider.gem_env).to receive(:shell_out!).with("#{gem_binary} --version").and_return(instance_double(Mixlib::ShellOut, stdout: "3.0.0\n"))
879
- 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)
880
915
  provider.run_action(:install)
881
916
  expect(new_resource).to be_updated_by_last_action
882
917
  end
@@ -884,7 +919,7 @@ describe Chef::Provider::Package::Rubygems do
884
919
  it "when the rubygems_version is old it uses the old flags" do
885
920
  expect(provider).to receive(:needs_nodocument?).and_call_original
886
921
  expect(provider.gem_env).to receive(:shell_out!).with("#{gem_binary} --version").and_return(instance_double(Mixlib::ShellOut, stdout: "2.8.0\n"))
887
- 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)
888
923
  provider.run_action(:install)
889
924
  expect(new_resource).to be_updated_by_last_action
890
925
  end
@@ -979,3 +1014,153 @@ describe Chef::Provider::Package::Rubygems do
979
1014
  end
980
1015
  end
981
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