chef 17.0.242-universal-mingw32 → 17.4.25-universal-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (254) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -14
  3. data/Rakefile +2 -2
  4. data/chef.gemspec +10 -20
  5. data/lib/chef/action_collection.rb +6 -26
  6. data/lib/chef/application/base.rb +15 -0
  7. data/lib/chef/application.rb +4 -2
  8. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  9. data/lib/chef/client.rb +7 -1
  10. data/lib/chef/compliance/default_attributes.rb +5 -3
  11. data/lib/chef/compliance/reporter/automate.rb +1 -1
  12. data/lib/chef/compliance/runner.rb +17 -3
  13. data/lib/chef/cookbook/cookbook_version_loader.rb +3 -3
  14. data/lib/chef/cookbook/gem_installer.rb +5 -1
  15. data/lib/chef/cookbook_version.rb +26 -4
  16. data/lib/chef/data_collector/run_end_message.rb +1 -1
  17. data/lib/chef/data_collector.rb +0 -1
  18. data/lib/chef/deprecated.rb +14 -4
  19. data/lib/chef/dsl/declare_resource.rb +5 -10
  20. data/lib/chef/dsl/render_helpers.rb +44 -0
  21. data/lib/chef/dsl/secret.rb +64 -0
  22. data/lib/chef/dsl/toml.rb +116 -0
  23. data/lib/chef/dsl/universal.rb +5 -0
  24. data/lib/chef/dsl.rb +1 -0
  25. data/lib/chef/event_dispatch/base.rb +2 -1
  26. data/lib/chef/exceptions.rb +23 -0
  27. data/lib/chef/formatters/doc.rb +2 -1
  28. data/lib/chef/formatters/error_mapper.rb +2 -2
  29. data/lib/chef/handler/slow_report.rb +66 -0
  30. data/lib/chef/handler.rb +46 -8
  31. data/lib/chef/json_compat.rb +1 -1
  32. data/lib/chef/node.rb +21 -20
  33. data/lib/chef/policy_builder/policyfile.rb +88 -45
  34. data/lib/chef/provider/directory.rb +6 -6
  35. data/lib/chef/provider/execute.rb +1 -1
  36. data/lib/chef/provider/file.rb +2 -2
  37. data/lib/chef/provider/group/dscl.rb +1 -1
  38. data/lib/chef/provider/launchd.rb +6 -6
  39. data/lib/chef/provider/link.rb +1 -1
  40. data/lib/chef/provider/lwrp_base.rb +1 -1
  41. data/lib/chef/provider/package/dnf/dnf_helper.py +11 -10
  42. data/lib/chef/provider/package/dnf/python_helper.rb +9 -8
  43. data/lib/chef/provider/package/habitat.rb +168 -0
  44. data/lib/chef/provider/package/powershell.rb +5 -0
  45. data/lib/chef/provider/package/yum/python_helper.rb +15 -10
  46. data/lib/chef/provider/package/yum/yum_helper.py +46 -62
  47. data/lib/chef/provider/package/yum.rb +1 -4
  48. data/lib/chef/provider/registry_key.rb +1 -1
  49. data/lib/chef/provider/service/systemd.rb +1 -1
  50. data/lib/chef/provider/subversion.rb +4 -4
  51. data/lib/chef/provider/support/yum_repo.erb +1 -1
  52. data/lib/chef/provider/support/zypper_repo.erb +4 -2
  53. data/lib/chef/provider/systemd_unit.rb +18 -17
  54. data/lib/chef/provider/template/content.rb +1 -1
  55. data/lib/chef/provider/user/mac.rb +3 -3
  56. data/lib/chef/provider/windows_script.rb +1 -1
  57. data/lib/chef/provider/yum_repository.rb +27 -43
  58. data/lib/chef/provider/zypper_repository.rb +30 -34
  59. data/lib/chef/provider.rb +26 -1
  60. data/lib/chef/provider_resolver.rb +8 -2
  61. data/lib/chef/providers.rb +1 -0
  62. data/lib/chef/resource/alternatives.rb +5 -5
  63. data/lib/chef/resource/apt_preference.rb +2 -2
  64. data/lib/chef/resource/apt_repository.rb +2 -2
  65. data/lib/chef/resource/apt_update.rb +4 -4
  66. data/lib/chef/resource/build_essential.rb +1 -1
  67. data/lib/chef/resource/chef_client_config.rb +10 -5
  68. data/lib/chef/resource/chef_client_cron.rb +3 -3
  69. data/lib/chef/resource/chef_client_launchd.rb +3 -3
  70. data/lib/chef/resource/chef_client_scheduled_task.rb +15 -15
  71. data/lib/chef/resource/chef_client_systemd_timer.rb +3 -3
  72. data/lib/chef/resource/chef_client_trusted_certificate.rb +2 -2
  73. data/lib/chef/resource/chef_handler.rb +2 -2
  74. data/lib/chef/resource/chef_sleep.rb +1 -1
  75. data/lib/chef/resource/chef_vault_secret.rb +2 -2
  76. data/lib/chef/resource/chocolatey_feature.rb +2 -2
  77. data/lib/chef/resource/chocolatey_source.rb +1 -1
  78. data/lib/chef/resource/cron/cron_d.rb +4 -6
  79. data/lib/chef/resource/cron_access.rb +1 -1
  80. data/lib/chef/resource/dmg_package.rb +1 -1
  81. data/lib/chef/resource/dsc_resource.rb +1 -1
  82. data/lib/chef/resource/execute.rb +5 -5
  83. data/lib/chef/resource/gem_package.rb +2 -1
  84. data/lib/chef/resource/group.rb +4 -4
  85. data/lib/chef/resource/habitat/_habitat_shared.rb +28 -0
  86. data/lib/chef/resource/habitat/habitat_package.rb +129 -0
  87. data/lib/chef/resource/habitat/habitat_sup.rb +329 -0
  88. data/lib/chef/resource/habitat/habitat_sup_systemd.rb +67 -0
  89. data/lib/chef/resource/habitat/habitat_sup_windows.rb +90 -0
  90. data/lib/chef/resource/habitat_config.rb +107 -0
  91. data/lib/chef/resource/habitat_install.rb +247 -0
  92. data/lib/chef/resource/habitat_service.rb +451 -0
  93. data/lib/chef/resource/habitat_user_toml.rb +92 -0
  94. data/lib/chef/resource/homebrew_cask.rb +18 -7
  95. data/lib/chef/resource/homebrew_package.rb +1 -1
  96. data/lib/chef/resource/homebrew_tap.rb +4 -3
  97. data/lib/chef/resource/homebrew_update.rb +2 -2
  98. data/lib/chef/resource/hostname.rb +49 -7
  99. data/lib/chef/resource/inspec_waiver_file_entry.rb +156 -0
  100. data/lib/chef/resource/kernel_module.rb +6 -6
  101. data/lib/chef/resource/launchd.rb +3 -3
  102. data/lib/chef/resource/locale.rb +1 -1
  103. data/lib/chef/resource/lwrp_base.rb +18 -3
  104. data/lib/chef/resource/macos_userdefaults.rb +2 -2
  105. data/lib/chef/resource/ohai_hint.rb +2 -6
  106. data/lib/chef/resource/openbsd_package.rb +17 -0
  107. data/lib/chef/resource/openssl_dhparam.rb +1 -2
  108. data/lib/chef/resource/openssl_ec_private_key.rb +1 -3
  109. data/lib/chef/resource/openssl_ec_public_key.rb +1 -3
  110. data/lib/chef/resource/openssl_rsa_private_key.rb +1 -3
  111. data/lib/chef/resource/openssl_rsa_public_key.rb +1 -3
  112. data/lib/chef/resource/openssl_x509_certificate.rb +1 -4
  113. data/lib/chef/resource/openssl_x509_crl.rb +1 -3
  114. data/lib/chef/resource/openssl_x509_request.rb +1 -3
  115. data/lib/chef/resource/osx_profile.rb +3 -3
  116. data/lib/chef/resource/plist.rb +1 -1
  117. data/lib/chef/resource/powershell_package_source.rb +2 -4
  118. data/lib/chef/resource/reboot.rb +38 -9
  119. data/lib/chef/resource/remote_directory.rb +2 -2
  120. data/lib/chef/resource/remote_file.rb +3 -3
  121. data/lib/chef/resource/rhsm_errata.rb +0 -2
  122. data/lib/chef/resource/rhsm_errata_level.rb +1 -5
  123. data/lib/chef/resource/rhsm_repo.rb +15 -0
  124. data/lib/chef/resource/rhsm_subscription.rb +5 -5
  125. data/lib/chef/resource/ruby_block.rb +100 -0
  126. data/lib/chef/resource/scm/subversion.rb +1 -1
  127. data/lib/chef/resource/ssh_known_hosts_entry.rb +4 -7
  128. data/lib/chef/resource/sudo.rb +2 -6
  129. data/lib/chef/resource/support/HabService.dll.config.erb +19 -0
  130. data/lib/chef/resource/support/client.erb +8 -1
  131. data/lib/chef/resource/support/sup.toml.erb +179 -0
  132. data/lib/chef/resource/swap_file.rb +2 -6
  133. data/lib/chef/resource/sysctl.rb +2 -2
  134. data/lib/chef/resource/systemd_unit.rb +3 -3
  135. data/lib/chef/resource/timezone.rb +1 -1
  136. data/lib/chef/resource/user_ulimit.rb +2 -2
  137. data/lib/chef/resource/windows_ad_join.rb +2 -2
  138. data/lib/chef/resource/windows_audit_policy.rb +2 -2
  139. data/lib/chef/resource/windows_auto_run.rb +2 -2
  140. data/lib/chef/resource/windows_certificate.rb +1 -1
  141. data/lib/chef/resource/windows_defender.rb +163 -0
  142. data/lib/chef/resource/windows_defender_exclusion.rb +125 -0
  143. data/lib/chef/resource/windows_dfs_folder.rb +2 -2
  144. data/lib/chef/resource/windows_dfs_namespace.rb +2 -2
  145. data/lib/chef/resource/windows_dns_record.rb +2 -2
  146. data/lib/chef/resource/windows_dns_zone.rb +2 -2
  147. data/lib/chef/resource/windows_env.rb +1 -1
  148. data/lib/chef/resource/windows_feature.rb +3 -3
  149. data/lib/chef/resource/windows_feature_dism.rb +3 -5
  150. data/lib/chef/resource/windows_feature_powershell.rb +3 -3
  151. data/lib/chef/resource/windows_firewall_profile.rb +2 -2
  152. data/lib/chef/resource/windows_firewall_rule.rb +20 -6
  153. data/lib/chef/resource/windows_font.rb +2 -2
  154. data/lib/chef/resource/windows_pagefile.rb +104 -65
  155. data/lib/chef/resource/windows_path.rb +4 -4
  156. data/lib/chef/resource/windows_printer.rb +80 -61
  157. data/lib/chef/resource/windows_printer_port.rb +48 -65
  158. data/lib/chef/resource/windows_security_policy.rb +7 -4
  159. data/lib/chef/resource/windows_share.rb +2 -2
  160. data/lib/chef/resource/windows_shortcut.rb +1 -1
  161. data/lib/chef/resource/windows_task.rb +2 -2
  162. data/lib/chef/resource/windows_uac.rb +3 -5
  163. data/lib/chef/resource/windows_update_settings.rb +259 -0
  164. data/lib/chef/resource/windows_user_privilege.rb +2 -2
  165. data/lib/chef/resource/windows_workgroup.rb +2 -2
  166. data/lib/chef/resource/yum_package.rb +11 -15
  167. data/lib/chef/resource/zypper_package.rb +4 -4
  168. data/lib/chef/resource/zypper_repository.rb +28 -8
  169. data/lib/chef/resource.rb +20 -25
  170. data/lib/chef/resource_builder.rb +8 -2
  171. data/lib/chef/resource_inspector.rb +6 -2
  172. data/lib/chef/resource_reporter.rb +0 -1
  173. data/lib/chef/resources.rb +13 -1
  174. data/lib/chef/run_lock.rb +1 -1
  175. data/lib/chef/runner.rb +1 -1
  176. data/lib/chef/secret_fetcher/aws_secrets_manager.rb +65 -0
  177. data/lib/chef/secret_fetcher/azure_key_vault.rb +78 -0
  178. data/lib/chef/secret_fetcher/base.rb +76 -0
  179. data/lib/chef/secret_fetcher/example.rb +46 -0
  180. data/lib/chef/secret_fetcher.rb +55 -0
  181. data/lib/chef/shell/ext.rb +3 -3
  182. data/lib/chef/version.rb +1 -1
  183. data/lib/chef/win32/api.rb +9 -2
  184. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  185. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  186. data/spec/data/knife_subcommand/test_explicit_category.rb +7 -0
  187. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -0
  188. data/spec/data/knife_subcommand/test_yourself.rb +21 -0
  189. data/spec/functional/mixin/from_file_spec.rb +1 -1
  190. data/spec/functional/resource/dnf_package_spec.rb +857 -537
  191. data/spec/functional/resource/group_spec.rb +1 -1
  192. data/spec/functional/resource/link_spec.rb +1 -1
  193. data/spec/functional/resource/remote_file_spec.rb +1 -1
  194. data/spec/functional/resource/windows_env_spec.rb +2 -2
  195. data/spec/functional/resource/windows_hostname_spec.rb +91 -0
  196. data/spec/functional/resource/windows_pagefile_spec.rb +98 -0
  197. data/spec/functional/resource/yum_package_spec.rb +495 -428
  198. data/spec/integration/client/client_spec.rb +0 -20
  199. data/spec/integration/compliance/compliance_spec.rb +1 -0
  200. data/spec/integration/recipes/recipe_dsl_spec.rb +1 -1
  201. data/spec/integration/recipes/resource_action_spec.rb +6 -6
  202. data/spec/integration/recipes/unified_mode_spec.rb +70 -0
  203. data/spec/spec_helper.rb +3 -0
  204. data/spec/support/chef_helpers.rb +1 -1
  205. data/spec/support/shared/functional/execute_resource.rb +1 -1
  206. data/spec/support/shared/functional/knife.rb +37 -0
  207. data/spec/support/shared/integration/knife_support.rb +192 -0
  208. data/spec/support/shared/unit/knife_shared.rb +39 -0
  209. data/spec/support/shared/unit/provider/file.rb +3 -9
  210. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +1 -1
  211. data/spec/unit/compliance/runner_spec.rb +46 -2
  212. data/spec/unit/cookbook_version_spec.rb +52 -0
  213. data/spec/unit/data_collector_spec.rb +47 -1
  214. data/spec/unit/dsl/render_helpers_spec.rb +102 -0
  215. data/spec/unit/dsl/secret_spec.rb +71 -0
  216. data/spec/unit/handler_spec.rb +8 -2
  217. data/spec/unit/policy_builder/dynamic_spec.rb +0 -5
  218. data/spec/unit/policy_builder/policyfile_spec.rb +144 -56
  219. data/spec/unit/provider/apt_update_spec.rb +3 -1
  220. data/spec/unit/provider/link_spec.rb +1 -1
  221. data/spec/unit/provider/mount/aix_spec.rb +1 -1
  222. data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -0
  223. data/spec/unit/provider/package/powershell_spec.rb +74 -12
  224. data/spec/unit/provider/package/yum/python_helper_spec.rb +1 -0
  225. data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
  226. data/spec/unit/provider/systemd_unit_spec.rb +2 -2
  227. data/spec/unit/provider/zypper_repository_spec.rb +3 -10
  228. data/spec/unit/provider_spec.rb +23 -0
  229. data/spec/unit/resource/homebrew_cask_spec.rb +29 -11
  230. data/spec/unit/resource/inspec_waiver_file_entry_spec.rb +80 -0
  231. data/spec/unit/resource/rhsm_subscription_spec.rb +50 -3
  232. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  233. data/spec/unit/resource/windows_defender_exclusion_spec.rb +62 -0
  234. data/spec/unit/resource/windows_defender_spec.rb +71 -0
  235. data/spec/unit/resource/windows_firewall_rule_spec.rb +12 -7
  236. data/spec/unit/resource/windows_pagefile_spec.rb +4 -9
  237. data/spec/unit/resource/windows_update_settings_spec.rb +64 -0
  238. data/spec/unit/resource/zypper_repository_spec.rb +1 -1
  239. data/spec/unit/resource_spec.rb +19 -8
  240. data/spec/unit/secret_fetcher/aws_secrets_manager_spec.rb +70 -0
  241. data/spec/unit/secret_fetcher/azure_key_vault_spec.rb +70 -0
  242. data/spec/unit/secret_fetcher_spec.rb +82 -0
  243. data/tasks/rspec.rb +4 -9
  244. metadata +65 -161
  245. data/lib/chef/provider/package/yum/simplejson/LICENSE.txt +0 -79
  246. data/lib/chef/provider/package/yum/simplejson/__init__.py +0 -318
  247. data/lib/chef/provider/package/yum/simplejson/__init__.pyc +0 -0
  248. data/lib/chef/provider/package/yum/simplejson/decoder.py +0 -354
  249. data/lib/chef/provider/package/yum/simplejson/decoder.pyc +0 -0
  250. data/lib/chef/provider/package/yum/simplejson/encoder.py +0 -440
  251. data/lib/chef/provider/package/yum/simplejson/encoder.pyc +0 -0
  252. data/lib/chef/provider/package/yum/simplejson/scanner.py +0 -65
  253. data/lib/chef/provider/package/yum/simplejson/scanner.pyc +0 -0
  254. data/lib/chef/provider/package/yum/simplejson/tool.py +0 -37
@@ -28,7 +28,7 @@ class Chef
28
28
  class Provider
29
29
  class User
30
30
  # A macOS user provider that is compatible with default TCC restrictions
31
- # in macOS 10.14. See resource/user/mac_user.rb for complete description
31
+ # in macOS 10.14+. See resource/user/mac_user.rb for complete description
32
32
  # of the mac_user resource
33
33
  class MacUser < Chef::Provider::User
34
34
  include Chef::Mixin::Which
@@ -49,11 +49,11 @@ class Chef
49
49
  current_resource.uid(user_plist[:uid][0])
50
50
  current_resource.gid(user_plist[:gid][0])
51
51
  current_resource.home(user_plist[:home][0])
52
- current_resource.shell(user_plist[:shell][0])
52
+ current_resource.shell(user_plist[:shell]&.first) # use &.first since shell can be nil
53
53
  current_resource.comment(user_plist[:comment][0])
54
54
 
55
55
  if user_plist[:is_hidden]
56
- current_resource.hidden(user_plist[:is_hidden][0] == "1" ? true : false)
56
+ current_resource.hidden(user_plist[:is_hidden]&.first == "1" ? true : false) # when not hidden the value seems to be nil so &.first to handle that
57
57
  end
58
58
 
59
59
  shadow_hash = user_plist[:shadow_hash]
@@ -83,7 +83,7 @@ class Chef
83
83
  username = new_resource.user
84
84
 
85
85
  if new_resource.domain
86
- username = new_resource.domain + '\\' + new_resource.user
86
+ username = new_resource.domain + "\\" + new_resource.user
87
87
  end
88
88
 
89
89
  # Create an ACE that allows the alternate user read access to the script
@@ -17,7 +17,6 @@
17
17
  #
18
18
 
19
19
  require_relative "../resource"
20
- require_relative "../dsl/declare_resource"
21
20
  require_relative "../mixin/which"
22
21
  require_relative "noop"
23
22
 
@@ -32,8 +31,8 @@ class Chef
32
31
 
33
32
  def load_current_resource; end
34
33
 
35
- action :create do
36
- declare_resource(:template, ::File.join(new_resource.reposdir, "#{new_resource.repositoryid}.repo")) do
34
+ action :create, description: "Create a repository based on the properties." do
35
+ template ::File.join(new_resource.reposdir, "#{new_resource.repositoryid}.repo") do
37
36
  if template_available?(new_resource.source)
38
37
  source new_resource.source
39
38
  else
@@ -46,72 +45,57 @@ class Chef
46
45
  if new_resource.make_cache
47
46
  notifies :run, "execute[yum clean metadata #{new_resource.repositoryid}]", :immediately if new_resource.clean_metadata || new_resource.clean_headers
48
47
  notifies :run, "execute[yum-makecache-#{new_resource.repositoryid}]", :immediately
49
- notifies :create, "ruby_block[package-cache-reload-#{new_resource.repositoryid}]", :immediately
48
+ notifies :flush_cache, "package[package-cache-reload-#{new_resource.repositoryid}]", :immediately
50
49
  end
51
50
  end
52
51
 
53
- declare_resource(:execute, "yum clean metadata #{new_resource.repositoryid}") do
54
- command "yum clean metadata --disablerepo=* --enablerepo=#{new_resource.repositoryid}"
55
- action :nothing
56
- end
52
+ # avoid extra logging if make_cache property isn't set
53
+ if new_resource.make_cache
54
+ execute "yum clean metadata #{new_resource.repositoryid}" do
55
+ command "yum clean metadata --disablerepo=* --enablerepo=#{new_resource.repositoryid}"
56
+ action :nothing
57
+ end
57
58
 
58
- # get the metadata for this repo only
59
- declare_resource(:execute, "yum-makecache-#{new_resource.repositoryid}") do
60
- command "yum -q -y makecache --disablerepo=* --enablerepo=#{new_resource.repositoryid}"
61
- action :nothing
62
- only_if { new_resource.enabled }
63
- end
59
+ # get the metadata for this repo only
60
+ execute "yum-makecache-#{new_resource.repositoryid}" do
61
+ command "yum -q -y makecache --disablerepo=* --enablerepo=#{new_resource.repositoryid}"
62
+ action :nothing
63
+ only_if { new_resource.enabled }
64
+ end
64
65
 
65
- # reload internal Chef yum/dnf cache
66
- declare_resource(:ruby_block, "package-cache-reload-#{new_resource.repositoryid}") do
67
- if ( platform?("fedora") && node["platform_version"].to_i >= 22 ) ||
68
- ( platform_family?("rhel") && node["platform_version"].to_i >= 8 )
69
- block { Chef::Provider::Package::Dnf::PythonHelper.instance.restart }
70
- else
71
- block { Chef::Provider::Package::Yum::YumCache.instance.reload }
66
+ package "package-cache-reload-#{new_resource.repositoryid}" do
67
+ action :nothing
72
68
  end
73
- action :nothing
74
69
  end
75
70
  end
76
71
 
77
- action :delete do
72
+ action :delete, description: "Remove a repository." do
78
73
  # clean the repo cache first
79
- declare_resource(:execute, "yum clean all #{new_resource.repositoryid}") do
74
+ execute "yum clean all #{new_resource.repositoryid}" do
80
75
  command "yum clean all --disablerepo=* --enablerepo=#{new_resource.repositoryid}"
81
76
  only_if "yum repolist all | grep -P '^#{new_resource.repositoryid}([ \t]|$)'"
82
77
  end
83
78
 
84
- declare_resource(:file, ::File.join(new_resource.reposdir, "#{new_resource.repositoryid}.repo")) do
79
+ file ::File.join(new_resource.reposdir, "#{new_resource.repositoryid}.repo") do
85
80
  action :delete
86
- notifies :create, "ruby_block[package-cache-reload-#{new_resource.repositoryid}]", :immediately
81
+ notifies :flush_cache, "package[package-cache-reload-#{new_resource.repositoryid}]", :immediately
87
82
  end
88
83
 
89
- declare_resource(:ruby_block, "package-cache-reload-#{new_resource.repositoryid}") do
90
- if ( platform?("fedora") && node["platform_version"].to_i >= 22 ) ||
91
- ( platform_family?("rhel") && node["platform_version"].to_i >= 8 )
92
- block { Chef::Provider::Package::Dnf::PythonHelper.instance.restart }
93
- else
94
- block { Chef::Provider::Package::Yum::YumCache.instance.reload }
95
- end
84
+ package "package-cache-reload-#{new_resource.repositoryid}" do
96
85
  action :nothing
97
86
  end
98
87
  end
99
88
 
100
- action :makecache do
101
- declare_resource(:execute, "yum-makecache-#{new_resource.repositoryid}") do
89
+ action :makecache, description: "Force the creation of the repository cache. This is also done automatically when a repository is updated." do
90
+ execute "yum-makecache-#{new_resource.repositoryid}" do
102
91
  command "yum -q -y makecache --disablerepo=* --enablerepo=#{new_resource.repositoryid}"
103
92
  action :run
104
93
  only_if { new_resource.enabled }
94
+ notifies :flush_cache, "package[package-cache-reload-#{new_resource.repositoryid}]", :immediately
105
95
  end
106
96
 
107
- declare_resource(:ruby_block, "package-cache-reload-#{new_resource.repositoryid}") do
108
- if ( platform?("fedora") && node["platform_version"].to_i >= 22 ) ||
109
- ( platform_family?("rhel") && node["platform_version"].to_i >= 8 )
110
- block { Chef::Provider::Package::Dnf::PythonHelper.instance.restart }
111
- else
112
- block { Chef::Provider::Package::Yum::YumCache.instance.reload }
113
- end
114
- action :run
97
+ package "package-cache-reload-#{new_resource.repositoryid}" do
98
+ action :nothing
115
99
  end
116
100
  end
117
101
 
@@ -29,14 +29,14 @@ class Chef
29
29
 
30
30
  def load_current_resource; end
31
31
 
32
- action :create do
32
+ action :create, description: "Add a new Zypper repository." do
33
33
  if new_resource.gpgautoimportkeys
34
- install_gpg_key(new_resource.gpgkey)
34
+ install_gpg_keys(new_resource.gpgkey)
35
35
  else
36
36
  logger.debug("'gpgautoimportkeys' property is set to false. Skipping key import.")
37
37
  end
38
38
 
39
- declare_resource(:template, "/etc/zypp/repos.d/#{escaped_repo_name}.repo") do
39
+ template "/etc/zypp/repos.d/#{escaped_repo_name}.repo" do
40
40
  if template_available?(new_resource.source)
41
41
  source new_resource.source
42
42
  else
@@ -50,14 +50,14 @@ class Chef
50
50
  end
51
51
  end
52
52
 
53
- action :delete do
54
- declare_resource(:execute, "zypper --quiet --non-interactive removerepo #{escaped_repo_name}") do
53
+ action :delete, description: "Remove a Zypper repository." do
54
+ execute "zypper --quiet --non-interactive removerepo #{escaped_repo_name}" do
55
55
  only_if "zypper --quiet lr #{escaped_repo_name}"
56
56
  end
57
57
  end
58
58
 
59
- action :refresh do
60
- declare_resource(:execute, "zypper --quiet --non-interactive refresh --force #{escaped_repo_name}") do
59
+ action :refresh, description: "Refresh Zypper repository." do
60
+ execute "zypper --quiet --non-interactive refresh --force #{escaped_repo_name}" do
61
61
  only_if "zypper --quiet lr #{escaped_repo_name}"
62
62
  end
63
63
  end
@@ -68,15 +68,7 @@ class Chef
68
68
  # zypper repos are allowed to have spaces in the names
69
69
  # @return [String] escaped repo string
70
70
  def escaped_repo_name
71
- Shellwords.escape(new_resource.repo_name)
72
- end
73
-
74
- # return the specified cookbook name or the cookbook containing the
75
- # resource.
76
- #
77
- # @return [String] name of the cookbook
78
- def cookbook_name
79
- new_resource.cookbook || new_resource.cookbook_name
71
+ @escaped_repo_name ||= Shellwords.escape(new_resource.repo_name)
80
72
  end
81
73
 
82
74
  # determine if a template file is available in the current run
@@ -84,7 +76,7 @@ class Chef
84
76
  #
85
77
  # @return [Boolean] template file exists or doesn't
86
78
  def template_available?(path)
87
- !path.nil? && run_context.has_template_in_cookbook?(cookbook_name, path)
79
+ !path.nil? && run_context.has_template_in_cookbook?(new_resource.cookbook, path)
88
80
  end
89
81
 
90
82
  # determine if a cookbook file is available in the run
@@ -92,7 +84,7 @@ class Chef
92
84
  #
93
85
  # @return [Boolean] cookbook file exists or doesn't
94
86
  def has_cookbook_file?(fn)
95
- run_context.has_cookbook_file_in_cookbook?(cookbook_name, fn)
87
+ run_context.has_cookbook_file_in_cookbook?(new_resource.cookbook, fn)
96
88
  end
97
89
 
98
90
  # Given the provided key URI determine what kind of chef resource we need
@@ -158,27 +150,31 @@ class Chef
158
150
  short_key_id
159
151
  end
160
152
 
161
- # install the provided gpg key
162
- # @param [String] uri the uri of the local or remote gpg key
163
- def install_gpg_key(uri)
164
- unless uri
165
- logger.debug("'gpgkey' property not provided or set to nil. Skipping key import.")
153
+ # install the provided gpg keys
154
+ # @param [String] uris the uri of the local or remote gpg key
155
+ def install_gpg_keys(uris)
156
+ if uris.empty?
157
+ logger.debug("'gpgkey' property not provided or set. Skipping gpg key import.")
166
158
  return
167
159
  end
168
160
 
169
- cached_keyfile = ::File.join(Chef::Config[:file_cache_path], uri.split("/")[-1])
161
+ # fetch each key to the cache dir either from the cookbook or by downloading it
162
+ # and then import the key
163
+ uris.each do |uri|
164
+ cached_keyfile = ::File.join(Chef::Config[:file_cache_path], uri.split("/")[-1])
170
165
 
171
- declare_resource(key_type(new_resource.gpgkey), cached_keyfile) do
172
- source uri
173
- mode "0644"
174
- sensitive new_resource.sensitive
175
- action :create
176
- end
166
+ declare_resource(key_type(uri), cached_keyfile) do
167
+ source uri
168
+ mode "0644"
169
+ sensitive new_resource.sensitive
170
+ action :create
171
+ end
177
172
 
178
- declare_resource(:execute, "import gpg key from #{new_resource.gpgkey}") do
179
- command "/bin/rpm --import #{cached_keyfile}"
180
- not_if { key_installed?(cached_keyfile) }
181
- action :run
173
+ execute "import gpg key from #{uri}" do
174
+ command "/bin/rpm --import #{cached_keyfile}"
175
+ not_if { key_installed?(cached_keyfile) }
176
+ action :run
177
+ end
182
178
  end
183
179
  end
184
180
  end
data/lib/chef/provider.rb CHANGED
@@ -57,10 +57,12 @@ class Chef
57
57
  #
58
58
  # @since 13.0
59
59
  # @param name [String, Symbol] Name of the action to define.
60
+ # @param description [String] description of the action
60
61
  # @param block [Proc] Body of the action.
61
62
  #
62
63
  # @return [void]
63
- def self.action(name, &block)
64
+ def self.action(name, description: nil, &block)
65
+ action_descriptions[name.to_sym] = description unless description.nil?
64
66
  # We need the block directly in a method so that `return` works.
65
67
  define_method("compile_action_#{name}", &block)
66
68
  class_eval <<-EOM
@@ -70,6 +72,29 @@ class Chef
70
72
  EOM
71
73
  end
72
74
 
75
+ # Return the hash of action descriptions defined for
76
+ # the provider class.
77
+ #
78
+ # @return [Hash] hash of [Symbol] => [String] containing
79
+ # any provided action descriptions.
80
+ def self.action_descriptions
81
+ @action_descriptions ||= {}
82
+ end
83
+
84
+ # Retrieve the description for a provider's action, if
85
+ # any description has been included in the definition.
86
+ #
87
+ # @param action [Symbol,String] the action name
88
+ # @return [String] the description of the action provided, or nil if no description
89
+ # was defined
90
+ def self.action_description(action)
91
+ description = action_descriptions[action.to_sym]
92
+ if description.nil? && superclass.respond_to?(:action_description)
93
+ description = superclass.action_description(action)
94
+ end
95
+ description
96
+ end
97
+
73
98
  # Deprecation stub for the old use_inline_resources mode.
74
99
  #
75
100
  # @return [void]
@@ -57,10 +57,16 @@ class Chef
57
57
  end
58
58
 
59
59
  def resolve
60
- maybe_explicit_provider(resource) ||
60
+ resolved = maybe_explicit_provider(resource) ||
61
61
  maybe_custom_resource(resource) ||
62
- maybe_dynamic_provider_resolution(resource, action) ||
62
+ maybe_dynamic_provider_resolution(resource, action)
63
+
64
+ if resolved.nil?
65
+ raise(Chef::Exceptions::ProviderNotFound, "Cannot find a provider for #{resource}") if node.nil?
66
+
63
67
  raise(Chef::Exceptions::ProviderNotFound, "Cannot find a provider for #{resource} on #{node["platform"]} version #{node["platform_version"]}")
68
+ end
69
+ resolved
64
70
  end
65
71
 
66
72
  # Does NOT call provides? on the resource (it is assumed this is being
@@ -74,6 +74,7 @@ require_relative "provider/package/cab"
74
74
  require_relative "provider/package/powershell"
75
75
  require_relative "provider/package/msu"
76
76
  require_relative "provider/package/snap"
77
+ require_relative "provider/package/habitat"
77
78
 
78
79
  require_relative "provider/service/arch"
79
80
  require_relative "provider/service/freebsd"
@@ -122,7 +122,7 @@ class Chef
122
122
  end
123
123
  end
124
124
 
125
- action :install, description: "Install an alternative on the system including symlinks" do
125
+ action :install, description: "Install an alternative on the system including symlinks." do
126
126
  if path_priority != new_resource.priority
127
127
  converge_by("adding alternative #{new_resource.link} #{new_resource.link_name} #{new_resource.path} #{new_resource.priority}") do
128
128
  output = shell_out(alternatives_cmd, "--install", new_resource.link, new_resource.link_name, new_resource.path, new_resource.priority)
@@ -133,7 +133,7 @@ class Chef
133
133
  end
134
134
  end
135
135
 
136
- action :set, description: "Set the symlink for an alternative" do
136
+ action :set, description: "Set the symlink for an alternative." do
137
137
  if current_path != new_resource.path
138
138
  converge_by("setting alternative #{new_resource.link_name} #{new_resource.path}") do
139
139
  output = shell_out(alternatives_cmd, "--set", new_resource.link_name, new_resource.path)
@@ -144,7 +144,7 @@ class Chef
144
144
  end
145
145
  end
146
146
 
147
- action :remove, description: "Remove an alternative and all associated links" do
147
+ action :remove, description: "Remove an alternative and all associated links." do
148
148
  if path_exists?
149
149
  converge_by("removing alternative #{new_resource.link_name} #{new_resource.path}") do
150
150
  shell_out(alternatives_cmd, "--remove", new_resource.link_name, new_resource.path)
@@ -152,13 +152,13 @@ class Chef
152
152
  end
153
153
  end
154
154
 
155
- action :auto, description: "Set an alternative up in automatic mode with the highest priority automatically selected" do
155
+ action :auto, description: "Set an alternative up in automatic mode with the highest priority automatically selected." do
156
156
  converge_by("setting auto alternative #{new_resource.link_name}") do
157
157
  shell_out(alternatives_cmd, "--auto", new_resource.link_name)
158
158
  end
159
159
  end
160
160
 
161
- action :refresh, description: "Refresh alternatives" do
161
+ action :refresh, description: "Refresh alternatives." do
162
162
  converge_by("refreshing alternative #{new_resource.link_name}") do
163
163
  shell_out(alternatives_cmd, "--refresh", new_resource.link_name)
164
164
  end
@@ -91,7 +91,7 @@ class Chef
91
91
  end
92
92
  end
93
93
 
94
- action :add, description: "Creates a preferences file under `/etc/apt/preferences.d`" do
94
+ action :add, description: "Creates a preferences file under `/etc/apt/preferences.d`." do
95
95
  return unless debian?
96
96
 
97
97
  preference = build_pref(
@@ -130,7 +130,7 @@ class Chef
130
130
  end
131
131
  end
132
132
 
133
- action :remove, description: "Removes the preferences file, thus unpinning the package" do
133
+ action :remove, description: "Removes the preferences file, thus unpinning the package." do
134
134
  return unless debian?
135
135
 
136
136
  sanitized_prefname = safe_name(new_resource.package_name)
@@ -409,7 +409,7 @@ class Chef
409
409
  end
410
410
  end
411
411
 
412
- action :add, description: "Creates a repository file at `/etc/apt/sources.list.d/` and builds the repository listing" do
412
+ action :add, description: "Creates a repository file at `/etc/apt/sources.list.d/` and builds the repository listing." do
413
413
  return unless debian?
414
414
 
415
415
  execute "apt-cache gencaches" do
@@ -459,7 +459,7 @@ class Chef
459
459
  end
460
460
  end
461
461
 
462
- action :remove, description: "Removes the repository listing" do
462
+ action :remove, description: "Removes the repository listing." do
463
463
  return unless debian?
464
464
 
465
465
  cleanup_legacy_file!
@@ -33,8 +33,8 @@ class Chef
33
33
 
34
34
  ```ruby
35
35
  apt_update 'all platforms' do
36
- frequency 86400
37
- action :periodic
36
+ frequency 86400
37
+ action :periodic
38
38
  end
39
39
  ```
40
40
 
@@ -86,7 +86,7 @@ class Chef
86
86
  end
87
87
  end
88
88
 
89
- action :periodic, description: "Update the Apt repository at the interval specified by the `frequency` property" do
89
+ action :periodic, description: "Update the Apt repository at the interval specified by the `frequency` property." do
90
90
  return unless debian?
91
91
 
92
92
  unless apt_up_to_date?
@@ -96,7 +96,7 @@ class Chef
96
96
  end
97
97
  end
98
98
 
99
- action :update, description: "Update the Apt repository at the start of a #{ChefUtils::Dist::Infra::PRODUCT} run" do
99
+ action :update, description: "Update the Apt repository at the start of a #{ChefUtils::Dist::Infra::PRODUCT} run." do
100
100
  return unless debian?
101
101
 
102
102
  converge_by "force update new lists of packages" do