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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -36,7 +36,6 @@ class Chef
36
36
  label
37
37
  mode
38
38
  owner
39
- path
40
39
  source
41
40
  session_type
42
41
  type
@@ -44,7 +43,6 @@ class Chef
44
43
 
45
44
  def load_current_resource
46
45
  current_resource = Chef::Resource::Launchd.new(new_resource.name)
47
- @path = path ? path : gen_path_from_type
48
46
  end
49
47
 
50
48
  def gen_path_from_type
@@ -55,58 +53,68 @@ class Chef
55
53
  types[type]
56
54
  end
57
55
 
58
- def action_create
56
+ action :create do
59
57
  manage_plist(:create)
60
58
  end
61
59
 
62
- def action_create_if_missing
60
+ action :create_if_missing do
63
61
  manage_plist(:create_if_missing)
64
62
  end
65
63
 
66
- def action_delete
67
- # If you delete a service you want to make sure its not loaded or
68
- # the service will be in memory and you wont be able to stop it.
69
- if ::File.exists?(@path)
64
+ action :delete do
65
+ if ::File.exists?(path)
70
66
  manage_service(:disable)
71
67
  end
72
68
  manage_plist(:delete)
73
69
  end
74
70
 
75
- def action_enable
76
- if manage_plist(:create)
77
- manage_service(:restart)
78
- else
79
- manage_service(:enable)
71
+ action :enable do
72
+ manage_service(:nothing)
73
+ manage_plist(:create) do
74
+ notifies :restart, "macosx_service[#{label}]", :immediately
80
75
  end
76
+ manage_service(:enable)
81
77
  end
82
78
 
83
- def action_disable
79
+ action :disable do
80
+ return unless ::File.exist?(path)
81
+
84
82
  manage_service(:disable)
85
83
  end
86
84
 
87
- def action_restart
85
+ action :restart do
88
86
  manage_service(:restart)
89
87
  end
90
88
 
91
- def manage_plist(action)
92
- return unless manage_agent?(action)
93
-
89
+ def manage_plist(action, &block)
94
90
  if source
95
- res = cookbook_file_resource
91
+ cookbook_file path do
92
+ cookbook_name = new_resource.cookbook if new_resource.cookbook
93
+ copy_properties_from(new_resource, :backup, :group, :mode, :owner, :source)
94
+ action(action)
95
+ only_if { manage_agent?(action) }
96
+ instance_eval(&block) if block_given?
97
+ end
96
98
  else
97
- res = file_resource
99
+ file path do
100
+ copy_properties_from(new_resource, :backup, :group, :mode, :owner)
101
+ content(file_content) if file_content?
102
+ action(action)
103
+ only_if { manage_agent?(action) }
104
+ instance_eval(&block) if block_given?
105
+ end
98
106
  end
99
- res.run_action(action)
100
- new_resource.updated_by_last_action(true) if res.updated?
101
- res.updated
102
107
  end
103
108
 
104
109
  def manage_service(action)
105
- return unless manage_agent?(action)
106
-
107
- res = service_resource
108
- res.run_action(action)
109
- new_resource.updated_by_last_action(true) if res.updated?
110
+ plist_path = path
111
+ macosx_service label do
112
+ service_name(new_resource.label) if new_resource.label
113
+ plist(plist_path) if plist_path
114
+ copy_properties_from(new_resource, :session_type)
115
+ action(action)
116
+ only_if { manage_agent?(action) }
117
+ end
110
118
  end
111
119
 
112
120
  def manage_agent?(action)
@@ -127,38 +135,6 @@ class Chef
127
135
  true
128
136
  end
129
137
 
130
- def service_resource
131
- res = Chef::Resource::MacosxService.new(label, run_context)
132
- res.name(label) if label
133
- res.service_name(label) if label
134
- res.plist(@path) if @path
135
- res.session_type(session_type) if session_type
136
- res
137
- end
138
-
139
- def file_resource
140
- res = Chef::Resource::File.new(@path, run_context)
141
- res.name(@path) if @path
142
- res.backup(backup) if backup
143
- res.content(content) if content?
144
- res.group(group) if group
145
- res.mode(mode) if mode
146
- res.owner(owner) if owner
147
- res
148
- end
149
-
150
- def cookbook_file_resource
151
- res = Chef::Resource::CookbookFile.new(@path, run_context)
152
- res.cookbook_name = cookbook if cookbook
153
- res.name(@path) if @path
154
- res.backup(backup) if backup
155
- res.group(group) if group
156
- res.mode(mode) if mode
157
- res.owner(owner) if owner
158
- res.source(source) if source
159
- res
160
- end
161
-
162
138
  def define_resource_requirements
163
139
  requirements.assert(
164
140
  :create, :create_if_missing, :delete, :enable, :disable
@@ -170,13 +146,13 @@ class Chef
170
146
  end
171
147
  end
172
148
 
173
- def content?
174
- !!content
149
+ def file_content?
150
+ !!file_content
175
151
  end
176
152
 
177
- def content
153
+ def file_content
178
154
  plist_hash = new_resource.plist_hash || gen_hash
179
- Plist::Emit.dump(plist_hash) unless plist_hash.nil?
155
+ ::Plist::Emit.dump(plist_hash) unless plist_hash.nil?
180
156
  end
181
157
 
182
158
  def gen_hash
@@ -230,6 +206,11 @@ class Chef
230
206
  memo[val] = new_resource.send(key) if new_resource.send(key)
231
207
  end
232
208
  end
209
+
210
+ # @api private
211
+ def path
212
+ @path ||= new_resource.path ? new_resource.path : gen_path_from_type
213
+ end
233
214
  end
234
215
  end
235
216
  end
@@ -85,7 +85,7 @@ class Chef
85
85
  ChefUtils.windows? ? path.tr("/", '\\') : path
86
86
  end
87
87
 
88
- def action_create
88
+ action :create do
89
89
  # current_resource is the symlink that currently exists
90
90
  # new_resource is the symlink we need to create
91
91
  # to - the location to link to
@@ -141,7 +141,7 @@ class Chef
141
141
  end
142
142
  end
143
143
 
144
- def action_delete
144
+ action :delete do
145
145
  if current_resource.to # Exists
146
146
  if ChefUtils.windows? && ::File.directory?(current_resource.target_file)
147
147
  converge_by("delete link to dir at #{new_resource.target_file}") do
@@ -37,7 +37,7 @@ class Chef
37
37
  self.unmount_retries = 20
38
38
  end
39
39
 
40
- def action_mount
40
+ action :mount do
41
41
  unless current_resource.mounted
42
42
  converge_by("mount #{current_resource.device} to #{current_resource.mount_point}") do
43
43
  mount_fs
@@ -48,7 +48,7 @@ class Chef
48
48
  end
49
49
  end
50
50
 
51
- def action_umount
51
+ action :umount do
52
52
  if current_resource.mounted
53
53
  converge_by("unmount #{current_resource.device}") do
54
54
  umount_fs
@@ -59,7 +59,7 @@ class Chef
59
59
  end
60
60
  end
61
61
 
62
- def action_remount
62
+ action :remount do
63
63
  if current_resource.mounted
64
64
  if new_resource.supports[:remount]
65
65
  converge_by("remount #{current_resource.device}") do
@@ -82,7 +82,7 @@ class Chef
82
82
  end
83
83
  end
84
84
 
85
- def action_enable
85
+ action :enable do
86
86
  unless current_resource.enabled && mount_options_unchanged? && device_unchanged?
87
87
  converge_by("enable #{current_resource.device}") do
88
88
  enable_fs
@@ -93,7 +93,7 @@ class Chef
93
93
  end
94
94
  end
95
95
 
96
- def action_disable
96
+ action :disable do
97
97
  if current_resource.enabled
98
98
  converge_by("disable #{current_resource.device}") do
99
99
  disable_fs
@@ -21,6 +21,7 @@ require_relative "../provider"
21
21
  require_relative "../resource"
22
22
  require_relative "../resource/file"
23
23
  require "uuidtools"
24
+ require "plist"
24
25
 
25
26
  class Chef
26
27
  class Provider
@@ -33,6 +34,7 @@ class Chef
33
34
  current_resource.profile_name(new_resource.profile_name)
34
35
 
35
36
  all_profiles = get_installed_profiles
37
+ # FIXME: stop mutating the desired state
36
38
  new_resource.profile(
37
39
  new_resource.profile ||
38
40
  new_resource.profile_name
@@ -95,7 +97,7 @@ class Chef
95
97
  end
96
98
  end
97
99
 
98
- def action_install
100
+ action :install do
99
101
  unless profile_installed?
100
102
  converge_by("install profile #{@new_profile_identifier}") do
101
103
  profile_path = write_profile_to_disk
@@ -105,7 +107,7 @@ class Chef
105
107
  end
106
108
  end
107
109
 
108
- def action_remove
110
+ action :remove do
109
111
  # Clean up profile after removing it
110
112
  if profile_installed?
111
113
  converge_by("remove profile #{@new_profile_identifier}") do
@@ -149,6 +151,7 @@ class Chef
149
151
  ::File.dirname(cookbook_file)
150
152
  )
151
153
  )
154
+ # FIXME: should use a real cookbook file, or document what this craziness is
152
155
  remote_file = Chef::Resource::CookbookFile.new(
153
156
  ::File.join(
154
157
  get_cache_dir,
@@ -180,6 +183,7 @@ class Chef
180
183
  end
181
184
 
182
185
  def write_profile_to_disk
186
+ # FIXME: use a real chef file resource and stop hacking up tempfiles directly
183
187
  new_resource.path(Chef::FileCache.create_cache_path("profiles"))
184
188
  tempfile = Chef::FileContentManagement::Tempfile.new(new_resource).tempfile
185
189
  tempfile.write(@new_profile_hash.to_plist)
@@ -229,7 +233,7 @@ class Chef
229
233
  end
230
234
 
231
235
  def read_plist(xml_file)
232
- Plist.parse_xml(xml_file)
236
+ ::Plist.parse_xml(xml_file)
233
237
  end
234
238
 
235
239
  def profile_installed?
@@ -189,7 +189,7 @@ class Chef
189
189
  end
190
190
  end
191
191
 
192
- def action_lock
192
+ action :lock do
193
193
  packages_locked = if respond_to?(:packages_all_locked?, true)
194
194
  packages_all_locked?(Array(new_resource.package_name), Array(new_resource.version))
195
195
  else
@@ -208,7 +208,7 @@ class Chef
208
208
  end
209
209
  end
210
210
 
211
- def action_unlock
211
+ action :unlock do
212
212
  packages_unlocked = if respond_to?(:packages_all_unlocked?, true)
213
213
  packages_all_unlocked?(Array(new_resource.package_name), Array(new_resource.version))
214
214
  else
@@ -21,6 +21,7 @@ require_relative "../../resource/cab_package"
21
21
  require_relative "../../mixin/shell_out"
22
22
  require_relative "../../mixin/uris"
23
23
  require_relative "../../mixin/checksum"
24
+ require "cgi" unless defined?(CGI)
24
25
 
25
26
  class Chef
26
27
  class Provider
@@ -45,13 +46,11 @@ class Chef
45
46
  end
46
47
 
47
48
  def download_source_file
48
- source_resource.run_action(:create)
49
- logger.trace("#{new_resource} fetched source file to #{source_resource.path}")
50
49
  source_resource.path
51
50
  end
52
51
 
53
52
  def source_resource
54
- @source_resource ||= declare_resource(:remote_file, new_resource.name) do
53
+ declare_resource(:remote_file, new_resource.name) do
55
54
  path default_download_cache_path
56
55
  source new_resource.source
57
56
  backup false
@@ -60,7 +59,7 @@ class Chef
60
59
 
61
60
  def default_download_cache_path
62
61
  uri = ::URI.parse(new_resource.source)
63
- filename = ::File.basename(::URI.unescape(uri.path))
62
+ filename = ::File.basename(::CGI.unescape(uri.path))
64
63
  file_cache_dir = Chef::FileCache.create_cache_path("package/")
65
64
  Chef::Util::PathHelper.cleanpath("#{file_cache_dir}/#{filename}")
66
65
  end
@@ -75,7 +74,7 @@ class Chef
75
74
 
76
75
  def dism_command(command)
77
76
  with_os_architecture(nil) do
78
- result = shell_out("dism.exe /Online /English #{command} /NoRestart", { timeout: new_resource.timeout })
77
+ result = shell_out("dism.exe /Online /English #{command} /NoRestart", timeout: new_resource.timeout)
79
78
  if result.exitstatus == -2146498530
80
79
  raise Chef::Exceptions::Package, "The specified package is not applicable to this image." if result.stdout.include?("0x800f081e")
81
80
 
@@ -94,7 +93,7 @@ class Chef
94
93
  split_package_identity(p["package_identity"])
95
94
  end
96
95
  found_packages = existing_package_identities.select do |existing_package_ident|
97
- existing_package_ident["name"] == package["name"]
96
+ existing_package_ident["version"] == package["version"].chomp && existing_package_ident["name"] == package["name"]
98
97
  end
99
98
  if found_packages.empty?
100
99
  nil
@@ -17,14 +17,12 @@
17
17
 
18
18
  require_relative "../package"
19
19
  require_relative "../../resource/chocolatey_package"
20
- require_relative "../../mixin/powershell_out"
21
20
  require_relative "../../win32/api/command_line_helper" if ChefUtils.windows?
22
21
 
23
22
  class Chef
24
23
  class Provider
25
24
  class Package
26
25
  class Chocolatey < Chef::Provider::Package
27
- include Chef::Mixin::PowershellOut
28
26
  include Chef::ReservedNames::Win32::API::CommandLineHelper if ChefUtils.windows?
29
27
 
30
28
  provides :chocolatey_package
@@ -251,7 +249,7 @@ class Chef
251
249
  end
252
250
 
253
251
  # Helper to convert choco.exe list output to a Hash
254
- # (names are downcased for case-insenstive matching)
252
+ # (names are downcased for case-insensitive matching)
255
253
  #
256
254
  # @param cmd [String] command to run
257
255
  # @return [Hash] list output converted to ruby Hash
@@ -118,23 +118,79 @@ class Chef
118
118
  flushcache
119
119
  end
120
120
 
121
+ # NB: the dnf_package provider manages individual single packages, please do not submit issues or PRs to try to add wildcard
122
+ # support to lock / unlock. The best solution is to write an execute resource which does a not_if `dnf versionlock | grep '^pattern`` kind of approach
123
+ def lock_package(names, versions)
124
+ dnf("-d0", "-e0", "-y", options, "versionlock", "add", resolved_package_lock_names(names))
125
+ end
126
+
127
+ # NB: the dnf_package provider manages individual single packages, please do not submit issues or PRs to try to add wildcard
128
+ # support to lock / unlock. The best solution is to write an execute resource which does a only_if `dnf versionlock | grep '^pattern`` kind of approach
129
+ def unlock_package(names, versions)
130
+ # dnf versionlock delete on rhel6 needs the glob nonsense in the following command
131
+ dnf("-d0", "-e0", "-y", options, "versionlock", "delete", resolved_package_lock_names(names).map { |n| "*:#{n}-*" })
132
+ end
133
+
121
134
  private
122
135
 
123
- def resolve_source_to_version_obj
124
- shell_out!("rpm -qp --queryformat '%{NAME} %{EPOCH} %{VERSION} %{RELEASE} %{ARCH}\n' #{new_resource.source}").stdout.each_line do |line|
125
- # this is another case of committing the sin of doing some lightweight mangling of RPM versions in ruby -- but the output of the rpm command
126
- # does not match what the dnf library accepts.
127
- case line
128
- when /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/
129
- return Version.new($1, "#{$2 == "(none)" ? "0" : $2}:#{$3}-#{$4}", $5)
136
+ # this will resolve things like `/usr/bin/perl` or virtual packages like `mysql` -- it will not work (well? at all?) with globs that match multiple packages
137
+ def resolved_package_lock_names(names)
138
+ names.each_with_index.map do |name, i|
139
+ unless name.nil?
140
+ if installed_version(i).version.nil?
141
+ available_version(i).name
142
+ else
143
+ installed_version(i).name
144
+ end
130
145
  end
131
146
  end
132
147
  end
133
148
 
149
+ def locked_packages
150
+ @locked_packages ||=
151
+ begin
152
+ locked = dnf("versionlock", "list")
153
+ locked.stdout.each_line.map do |line|
154
+ line.sub(/-[^-]*-[^-]*$/, "").split(":").last.strip
155
+ end
156
+ end
157
+ end
158
+
159
+ def packages_all_locked?(names, versions)
160
+ resolved_package_lock_names(names).all? { |n| locked_packages.include? n }
161
+ end
162
+
163
+ def packages_all_unlocked?(names, versions)
164
+ !resolved_package_lock_names(names).any? { |n| locked_packages.include? n }
165
+ end
166
+
167
+ def version_gt?(v1, v2)
168
+ return false if v1.nil? || v2.nil?
169
+
170
+ python_helper.compare_versions(v1, v2) == 1
171
+ end
172
+
173
+ def version_equals?(v1, v2)
174
+ return false if v1.nil? || v2.nil?
175
+
176
+ python_helper.compare_versions(v1, v2) == 0
177
+ end
178
+
134
179
  def version_compare(v1, v2)
135
180
  python_helper.compare_versions(v1, v2)
136
181
  end
137
182
 
183
+ def resolve_source_to_version_obj
184
+ shell_out!("rpm -qp --queryformat '%{NAME} %{EPOCH} %{VERSION} %{RELEASE} %{ARCH}\n' #{new_resource.source}").stdout.each_line do |line|
185
+ # this is another case of committing the sin of doing some lightweight mangling of RPM versions in ruby -- but the output of the rpm command
186
+ # does not match what the yum library accepts.
187
+ case line
188
+ when /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/
189
+ return Version.new($1, "#{$2 == "(none)" ? "0" : $2}:#{$3}-#{$4}", $5)
190
+ end
191
+ end
192
+ end
193
+
138
194
  # @return Array<Version>
139
195
  def available_version(index)
140
196
  @available_version ||= []
@@ -142,7 +198,7 @@ class Chef
142
198
  @available_version[index] ||= if new_resource.source
143
199
  resolve_source_to_version_obj
144
200
  else
145
- python_helper.query(:whatavailable, package_name_array[index], safe_version_array[index], safe_arch_array[index])
201
+ python_helper.package_query(:whatavailable, package_name_array[index], version: safe_version_array[index], arch: safe_arch_array[index], options: options)
146
202
  end
147
203
 
148
204
  @available_version[index]
@@ -152,9 +208,9 @@ class Chef
152
208
  def installed_version(index)
153
209
  @installed_version ||= []
154
210
  @installed_version[index] ||= if new_resource.source
155
- python_helper.query(:whatinstalled, available_version(index).name, safe_version_array[index], safe_arch_array[index])
211
+ python_helper.package_query(:whatinstalled, available_version(index).name, arch: safe_arch_array[index], options: options)
156
212
  else
157
- python_helper.query(:whatinstalled, package_name_array[index], safe_version_array[index], safe_arch_array[index])
213
+ python_helper.package_query(:whatinstalled, package_name_array[index], arch: safe_arch_array[index], options: options)
158
214
  end
159
215
  @installed_version[index]
160
216
  end