chef 16.2.73-universal-mingw32 → 16.4.41-universal-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -4
  3. data/Rakefile +1 -1
  4. data/chef-universal-mingw32.gemspec +2 -3
  5. data/chef.gemspec +2 -1
  6. data/lib/chef/action_collection.rb +4 -0
  7. data/lib/chef/api_client/registration.rb +2 -2
  8. data/lib/chef/application.rb +13 -1
  9. data/lib/chef/application/apply.rb +5 -5
  10. data/lib/chef/application/windows_service.rb +27 -27
  11. data/lib/chef/{whitelist.rb → attribute_allowlist.rb} +11 -11
  12. data/lib/chef/{blacklist.rb → attribute_blocklist.rb} +9 -9
  13. data/lib/chef/chef_class.rb +0 -1
  14. data/lib/chef/chef_fs/chef_fs_data_store.rb +54 -54
  15. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -2
  16. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +10 -10
  17. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +1 -5
  18. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +8 -8
  19. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +8 -8
  20. data/lib/chef/chef_fs/file_system/repository/base_file.rb +1 -0
  21. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
  22. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
  23. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +18 -18
  24. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  25. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
  26. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  27. data/lib/chef/client.rb +14 -14
  28. data/lib/chef/cookbook/remote_file_vendor.rb +1 -3
  29. data/lib/chef/cookbook/syntax_check.rb +1 -2
  30. data/lib/chef/cookbook_loader.rb +15 -29
  31. data/lib/chef/data_bag.rb +1 -2
  32. data/lib/chef/data_collector/run_end_message.rb +11 -1
  33. data/lib/chef/deprecated.rb +8 -0
  34. data/lib/chef/dsl/platform_introspection.rb +9 -7
  35. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  36. data/lib/chef/environment.rb +3 -4
  37. data/lib/chef/exceptions.rb +4 -1
  38. data/lib/chef/file_content_management/tempfile.rb +9 -9
  39. data/lib/chef/handler.rb +2 -0
  40. data/lib/chef/http.rb +11 -11
  41. data/lib/chef/http/authenticator.rb +3 -1
  42. data/lib/chef/json_compat.rb +1 -1
  43. data/lib/chef/knife.rb +4 -4
  44. data/lib/chef/knife/bootstrap.rb +6 -12
  45. data/lib/chef/knife/bootstrap/train_connector.rb +1 -0
  46. data/lib/chef/knife/config_get.rb +1 -0
  47. data/lib/chef/knife/config_list_profiles.rb +4 -1
  48. data/lib/chef/knife/configure.rb +3 -1
  49. data/lib/chef/knife/cookbook_download.rb +1 -1
  50. data/lib/chef/knife/cookbook_metadata.rb +1 -1
  51. data/lib/chef/knife/cookbook_upload.rb +28 -33
  52. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  53. data/lib/chef/knife/core/generic_presenter.rb +1 -1
  54. data/lib/chef/knife/core/hashed_command_loader.rb +3 -2
  55. data/lib/chef/knife/core/subcommand_loader.rb +20 -1
  56. data/lib/chef/knife/core/ui.rb +8 -2
  57. data/lib/chef/knife/core/windows_bootstrap_context.rb +32 -25
  58. data/lib/chef/knife/delete.rb +15 -15
  59. data/lib/chef/knife/exec.rb +2 -2
  60. data/lib/chef/knife/rehash.rb +3 -21
  61. data/lib/chef/knife/ssh.rb +11 -7
  62. data/lib/chef/knife/xargs.rb +19 -19
  63. data/lib/chef/knife/yaml_convert.rb +1 -1
  64. data/lib/chef/log.rb +7 -2
  65. data/lib/chef/mixin/checksum.rb +0 -1
  66. data/lib/chef/mixin/chef_utils_wiring.rb +40 -0
  67. data/lib/chef/mixin/deep_merge.rb +35 -6
  68. data/{spec/unit/log_spec.rb → lib/chef/mixin/default_paths.rb} +13 -5
  69. data/lib/chef/mixin/openssl_helper.rb +30 -6
  70. data/lib/chef/mixin/path_sanity.rb +5 -4
  71. data/lib/chef/mixin/shell_out.rb +4 -188
  72. data/lib/chef/mixin/template.rb +1 -0
  73. data/lib/chef/mixin/which.rb +6 -3
  74. data/lib/chef/mixins.rb +1 -0
  75. data/lib/chef/monkey_patches/webrick-utils.rb +10 -10
  76. data/lib/chef/node.rb +36 -12
  77. data/lib/chef/node/attribute.rb +2 -4
  78. data/lib/chef/node_map.rb +21 -18
  79. data/lib/chef/platform/service_helpers.rb +31 -28
  80. data/lib/chef/property.rb +1 -1
  81. data/lib/chef/provider/cron/unix.rb +0 -2
  82. data/lib/chef/provider/git.rb +17 -9
  83. data/lib/chef/provider/group.rb +0 -2
  84. data/lib/chef/provider/group/suse.rb +5 -5
  85. data/lib/chef/provider/ifconfig.rb +1 -4
  86. data/lib/chef/provider/mount.rb +0 -2
  87. data/lib/chef/provider/mount/solaris.rb +0 -1
  88. data/lib/chef/provider/package.rb +0 -2
  89. data/lib/chef/provider/package/rubygems.rb +1 -1
  90. data/lib/chef/provider/package/snap.rb +3 -4
  91. data/lib/chef/provider/package/windows.rb +9 -4
  92. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -9
  93. data/lib/chef/provider/package/zypper.rb +0 -1
  94. data/lib/chef/provider/powershell_script.rb +21 -5
  95. data/lib/chef/provider/route.rb +1 -1
  96. data/lib/chef/provider/service.rb +2 -2
  97. data/lib/chef/provider/service/arch.rb +1 -1
  98. data/lib/chef/provider/service/debian.rb +1 -1
  99. data/lib/chef/provider/service/gentoo.rb +2 -2
  100. data/lib/chef/provider/service/macosx.rb +2 -2
  101. data/lib/chef/provider/service/openbsd.rb +1 -4
  102. data/lib/chef/provider/service/redhat.rb +2 -2
  103. data/lib/chef/provider/service/upstart.rb +1 -1
  104. data/lib/chef/provider/service/windows.rb +10 -10
  105. data/lib/chef/provider/systemd_unit.rb +0 -2
  106. data/lib/chef/provider/template/content.rb +1 -0
  107. data/lib/chef/provider/user/dscl.rb +2 -2
  108. data/lib/chef/provider/user/mac.rb +9 -9
  109. data/lib/chef/provider/windows_task.rb +0 -3
  110. data/lib/chef/provider/yum_repository.rb +1 -1
  111. data/lib/chef/provider/zypper_repository.rb +1 -2
  112. data/lib/chef/providers.rb +0 -1
  113. data/lib/chef/recipe.rb +1 -1
  114. data/lib/chef/resource.rb +8 -10
  115. data/lib/chef/resource/apt_repository.rb +1 -10
  116. data/lib/chef/resource/build_essential.rb +2 -2
  117. data/lib/chef/resource/chef_client_scheduled_task.rb +1 -1
  118. data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
  119. data/lib/chef/resource/chef_vault_secret.rb +13 -13
  120. data/lib/chef/resource/chocolatey_feature.rb +1 -2
  121. data/lib/chef/resource/cron/cron_d.rb +1 -1
  122. data/lib/chef/resource/cron_access.rb +2 -2
  123. data/lib/chef/resource/execute.rb +4 -5
  124. data/lib/chef/resource/homebrew_update.rb +2 -2
  125. data/lib/chef/resource/hostname.rb +18 -18
  126. data/lib/chef/resource/lwrp_base.rb +1 -0
  127. data/lib/chef/resource/macos_userdefaults.rb +176 -61
  128. data/lib/chef/resource/openssl_dhparam.rb +2 -0
  129. data/lib/chef/resource/openssl_ec_private_key.rb +2 -0
  130. data/lib/chef/resource/openssl_ec_public_key.rb +2 -0
  131. data/lib/chef/resource/openssl_rsa_private_key.rb +2 -0
  132. data/lib/chef/resource/openssl_rsa_public_key.rb +2 -0
  133. data/lib/chef/resource/openssl_x509_certificate.rb +35 -35
  134. data/lib/chef/resource/openssl_x509_crl.rb +3 -2
  135. data/lib/chef/resource/openssl_x509_request.rb +23 -20
  136. data/lib/chef/resource/osx_profile.rb +227 -5
  137. data/lib/chef/resource/powershell_package_source.rb +1 -1
  138. data/lib/chef/resource/powershell_script.rb +24 -30
  139. data/lib/chef/resource/service.rb +2 -2
  140. data/lib/chef/resource/ssh_known_hosts_entry.rb +1 -1
  141. data/lib/chef/resource/sudo.rb +2 -2
  142. data/lib/chef/resource/sysctl.rb +5 -5
  143. data/lib/chef/resource/timezone.rb +112 -73
  144. data/lib/chef/resource/user_ulimit.rb +1 -1
  145. data/lib/chef/resource/windows_ad_join.rb +2 -0
  146. data/lib/chef/resource/windows_audit_policy.rb +3 -0
  147. data/lib/chef/resource/windows_auto_run.rb +2 -0
  148. data/lib/chef/resource/windows_certificate.rb +2 -0
  149. data/lib/chef/resource/windows_dfs_folder.rb +2 -0
  150. data/lib/chef/resource/windows_dfs_namespace.rb +2 -0
  151. data/lib/chef/resource/windows_dfs_server.rb +2 -0
  152. data/lib/chef/resource/windows_dns_record.rb +25 -5
  153. data/lib/chef/resource/windows_dns_zone.rb +12 -7
  154. data/lib/chef/resource/windows_feature.rb +2 -0
  155. data/lib/chef/resource/windows_feature_dism.rb +10 -0
  156. data/lib/chef/resource/windows_feature_powershell.rb +14 -2
  157. data/lib/chef/resource/windows_firewall_profile.rb +199 -0
  158. data/lib/chef/resource/windows_firewall_rule.rb +5 -3
  159. data/lib/chef/resource/windows_font.rb +3 -1
  160. data/lib/chef/resource/windows_pagefile.rb +4 -0
  161. data/lib/chef/resource/windows_printer.rb +17 -18
  162. data/lib/chef/resource/windows_printer_port.rb +14 -13
  163. data/lib/chef/resource/windows_security_policy.rb +51 -20
  164. data/lib/chef/resource/windows_share.rb +5 -3
  165. data/lib/chef/resource/windows_shortcut.rb +2 -0
  166. data/lib/chef/resource/windows_uac.rb +2 -0
  167. data/lib/chef/resource/windows_user_privilege.rb +2 -0
  168. data/lib/chef/resource/windows_workgroup.rb +2 -3
  169. data/lib/chef/resource_collection/stepable_iterator.rb +1 -2
  170. data/lib/chef/resource_inspector.rb +7 -1
  171. data/lib/chef/resources.rb +1 -0
  172. data/lib/chef/role.rb +3 -4
  173. data/lib/chef/run_context/cookbook_compiler.rb +20 -20
  174. data/lib/chef/run_status.rb +2 -6
  175. data/lib/chef/server_api_versions.rb +4 -0
  176. data/lib/chef/shell.rb +1 -1
  177. data/lib/chef/shell/shell_session.rb +2 -0
  178. data/lib/chef/util/backup.rb +1 -1
  179. data/lib/chef/util/diff.rb +11 -12
  180. data/lib/chef/util/powershell/cmdlet.rb +1 -1
  181. data/lib/chef/version.rb +2 -2
  182. data/lib/chef/win32/file.rb +2 -2
  183. data/lib/chef/win32/file/version_info.rb +5 -5
  184. data/lib/chef/win32/registry.rb +1 -2
  185. data/spec/data/ssl/chef-rspec.cert +15 -15
  186. data/spec/functional/knife/ssh_spec.rb +5 -16
  187. data/spec/functional/resource/aix_service_spec.rb +0 -2
  188. data/spec/functional/resource/aixinit_service_spec.rb +7 -8
  189. data/spec/functional/resource/apt_package_spec.rb +0 -1
  190. data/spec/functional/resource/bff_spec.rb +2 -2
  191. data/spec/functional/resource/cookbook_file_spec.rb +1 -1
  192. data/spec/functional/resource/cron_spec.rb +0 -1
  193. data/spec/functional/resource/dsc_resource_spec.rb +1 -1
  194. data/spec/functional/resource/dsc_script_spec.rb +0 -1
  195. data/spec/functional/resource/git_spec.rb +23 -1
  196. data/spec/functional/resource/group_spec.rb +12 -8
  197. data/spec/functional/resource/insserv_spec.rb +4 -5
  198. data/spec/functional/resource/link_spec.rb +20 -20
  199. data/spec/functional/resource/powershell_script_spec.rb +4 -4
  200. data/spec/functional/resource/remote_file_spec.rb +1 -7
  201. data/spec/functional/resource/rpm_spec.rb +2 -2
  202. data/spec/functional/resource/windows_certificate_spec.rb +3 -3
  203. data/spec/functional/resource/windows_font_spec.rb +49 -0
  204. data/spec/functional/resource/windows_security_policy_spec.rb +0 -3
  205. data/spec/functional/resource/windows_user_privilege_spec.rb +1 -1
  206. data/spec/functional/run_lock_spec.rb +26 -25
  207. data/spec/functional/shell_spec.rb +5 -5
  208. data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
  209. data/spec/functional/version_spec.rb +1 -1
  210. data/spec/functional/win32/registry_spec.rb +8 -8
  211. data/spec/functional/win32/service_manager_spec.rb +1 -1
  212. data/spec/integration/knife/common_options_spec.rb +12 -12
  213. data/spec/integration/knife/config_get_profile_spec.rb +69 -68
  214. data/spec/integration/knife/config_get_spec.rb +126 -125
  215. data/spec/integration/knife/config_list_profiles_spec.rb +181 -152
  216. data/spec/integration/knife/config_use_profile_spec.rb +110 -109
  217. data/spec/integration/knife/cookbook_upload_spec.rb +27 -0
  218. data/spec/integration/knife/diff_spec.rb +3 -1
  219. data/spec/integration/knife/download_spec.rb +3 -1
  220. data/spec/integration/knife/serve_spec.rb +5 -5
  221. data/spec/integration/knife/upload_spec.rb +3 -1
  222. data/spec/integration/recipes/accumulator_spec.rb +1 -1
  223. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +2 -2
  224. data/spec/integration/recipes/lwrp_spec.rb +1 -1
  225. data/spec/integration/recipes/notifies_spec.rb +1 -1
  226. data/spec/integration/recipes/notifying_block_spec.rb +1 -1
  227. data/spec/integration/recipes/recipe_dsl_spec.rb +1 -1
  228. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +2 -0
  229. data/spec/integration/recipes/resource_load_spec.rb +2 -0
  230. data/spec/integration/recipes/unified_mode_spec.rb +1 -1
  231. data/spec/integration/recipes/use_partial_spec.rb +1 -1
  232. data/spec/scripts/ssl-serve.rb +1 -1
  233. data/spec/spec_helper.rb +16 -10
  234. data/spec/support/chef_helpers.rb +1 -20
  235. data/spec/support/platform_helpers.rb +9 -11
  236. data/spec/support/platforms/win32/spec_service.rb +1 -1
  237. data/spec/support/shared/functional/directory_resource.rb +1 -1
  238. data/spec/support/shared/functional/execute_resource.rb +1 -1
  239. data/spec/support/shared/functional/file_resource.rb +20 -21
  240. data/spec/support/shared/functional/win32_service.rb +1 -1
  241. data/spec/support/shared/functional/windows_script.rb +3 -3
  242. data/spec/support/shared/integration/integration_helper.rb +22 -52
  243. data/spec/support/shared/integration/knife_support.rb +2 -9
  244. data/spec/support/shared/unit/application_dot_d.rb +0 -1
  245. data/spec/support/shared/unit/script_resource.rb +6 -20
  246. data/spec/support/shared/unit/windows_script_resource.rb +15 -28
  247. data/spec/unit/application_spec.rb +4 -2
  248. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +2 -4
  249. data/spec/unit/chef_fs/{parallelizer.rb → parallelizer_spec.rb} +1 -1
  250. data/spec/unit/cookbook/gem_installer_spec.rb +2 -1
  251. data/spec/unit/data_collector_spec.rb +29 -1
  252. data/spec/unit/dsl/platform_introspection_spec.rb +1 -0
  253. data/spec/unit/environment_spec.rb +7 -7
  254. data/spec/unit/event_dispatch/dispatcher_spec.rb +3 -0
  255. data/spec/unit/http/api_versions_spec.rb +19 -1
  256. data/spec/unit/json_compat_spec.rb +1 -1
  257. data/spec/unit/knife/bootstrap_spec.rb +16 -20
  258. data/spec/unit/knife/cookbook_download_spec.rb +4 -4
  259. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
  260. data/spec/unit/knife/cookbook_upload_spec.rb +7 -10
  261. data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
  262. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +21 -12
  263. data/spec/unit/knife/supermarket_share_spec.rb +1 -1
  264. data/spec/unit/log/syslog_spec.rb +6 -10
  265. data/spec/unit/log/winevt_spec.rb +21 -13
  266. data/spec/unit/lwrp_spec.rb +4 -4
  267. data/spec/unit/mixin/{path_sanity_spec.rb → default_paths_spec.rb} +14 -14
  268. data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
  269. data/spec/unit/mixin/securable_spec.rb +0 -1
  270. data/spec/unit/mixin/shell_out_spec.rb +25 -26
  271. data/spec/unit/mixin/template_spec.rb +30 -30
  272. data/spec/unit/mixin/which.rb +8 -0
  273. data/spec/unit/mixin/windows_architecture_helper_spec.rb +4 -4
  274. data/spec/unit/node/immutable_collections_spec.rb +6 -2
  275. data/spec/unit/node_spec.rb +103 -16
  276. data/spec/unit/property_spec.rb +5 -5
  277. data/spec/unit/provider/execute_spec.rb +0 -7
  278. data/spec/unit/provider/ifconfig_spec.rb +0 -1
  279. data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
  280. data/spec/unit/provider/package/rubygems_spec.rb +5 -10
  281. data/spec/unit/provider/package/smartos_spec.rb +1 -1
  282. data/spec/unit/provider/package/windows_spec.rb +30 -53
  283. data/spec/unit/provider/powershell_script_spec.rb +11 -4
  284. data/spec/unit/provider/remote_directory_spec.rb +9 -9
  285. data/spec/unit/provider/service/arch_service_spec.rb +3 -2
  286. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  287. data/spec/unit/provider/service/gentoo_service_spec.rb +7 -7
  288. data/spec/unit/provider/service/macosx_spec.rb +3 -3
  289. data/spec/unit/provider/service/redhat_spec.rb +3 -3
  290. data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
  291. data/spec/unit/provider/service/windows_spec.rb +2 -6
  292. data/spec/unit/provider/systemd_unit_spec.rb +28 -24
  293. data/spec/unit/provider_resolver_spec.rb +6 -6
  294. data/spec/unit/provider_spec.rb +1 -0
  295. data/spec/unit/resource/batch_spec.rb +6 -6
  296. data/spec/unit/resource/execute_spec.rb +123 -118
  297. data/spec/unit/resource/macos_user_defaults_spec.rb +103 -2
  298. data/spec/unit/resource/osx_profile_spec.rb +233 -0
  299. data/spec/unit/resource/powershell_script_spec.rb +11 -29
  300. data/spec/unit/resource/script_spec.rb +6 -1
  301. data/spec/unit/resource/timezone_spec.rb +63 -0
  302. data/spec/unit/resource/windows_feature_powershell_spec.rb +30 -4
  303. data/spec/unit/resource/windows_firewall_profile_spec.rb +77 -0
  304. data/spec/unit/resource/windows_package_spec.rb +1 -0
  305. data/spec/unit/resource_reporter_spec.rb +1 -1
  306. data/spec/unit/role_spec.rb +11 -11
  307. data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -1
  308. data/spec/unit/run_lock_spec.rb +1 -1
  309. data/spec/unit/scan_access_control_spec.rb +1 -1
  310. data/spec/unit/server_api_spec.rb +43 -16
  311. data/spec/unit/util/diff_spec.rb +1 -15
  312. data/spec/unit/win32/security_spec.rb +4 -3
  313. data/tasks/rspec.rb +1 -1
  314. metadata +39 -31
  315. data/lib/chef/provider/osx_profile.rb +0 -255
  316. data/spec/unit/provider/osx_profile_spec.rb +0 -255
@@ -17,7 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
 
20
- require "yaml"
20
+ require "yaml" unless defined?(YAML)
21
21
  require_relative "dsl/recipe"
22
22
  require_relative "mixin/from_file"
23
23
  require_relative "mixin/deprecation"
@@ -19,8 +19,6 @@
19
19
  #
20
20
 
21
21
  require_relative "exceptions"
22
- require_relative "dsl/data_query"
23
- require_relative "dsl/registry_helper"
24
22
  require_relative "dsl/reboot_pending"
25
23
  require_relative "dsl/resources"
26
24
  require_relative "dsl/declare_resource"
@@ -53,8 +51,6 @@ class Chef
53
51
  #
54
52
 
55
53
  include Chef::DSL::DeclareResource
56
- include Chef::DSL::DataQuery
57
- include Chef::DSL::RegistryHelper
58
54
  include Chef::DSL::RebootPending
59
55
  extend Chef::Mixin::Provides
60
56
 
@@ -638,6 +634,7 @@ class Chef
638
634
  # Do NOT use this. It may be removed. It is for internal purposes only.
639
635
  # @api private
640
636
  attr_reader :resource_initializing
637
+
641
638
  def resource_initializing=(value)
642
639
  if value
643
640
  @resource_initializing = true
@@ -662,17 +659,17 @@ class Chef
662
659
 
663
660
  all_props = {}
664
661
  self.class.state_properties.map do |p|
665
- begin
666
- all_props[p.name.to_s] = p.sensitive? ? '"*sensitive value suppressed*"' : value_to_text(p.get(self))
667
- rescue Chef::Exceptions::ValidationFailed
668
- # This space left intentionally blank, the property was probably required or had an invalid default.
669
- end
662
+
663
+ all_props[p.name.to_s] = p.sensitive? ? '"*sensitive value suppressed*"' : value_to_text(p.get(self))
664
+ rescue Chef::Exceptions::ValidationFailed
665
+ # This space left intentionally blank, the property was probably required or had an invalid default.
666
+
670
667
  end
671
668
 
672
669
  ivars = instance_variables.map(&:to_sym) - HIDDEN_IVARS
673
670
  ivars.each do |ivar|
674
671
  iv = ivar.to_s.sub(/^@/, "")
675
- if all_props.keys.include?(iv)
672
+ if all_props.key?(iv)
676
673
  text << " #{iv} #{all_props[iv]}\n"
677
674
  elsif (value = instance_variable_get(ivar)) && !(value.respond_to?(:empty?) && value.empty?)
678
675
  text << " #{iv} #{value_to_text(value)}\n"
@@ -888,6 +885,7 @@ class Chef
888
885
  # have.
889
886
  #
890
887
  attr_writer :allowed_actions
888
+
891
889
  def allowed_actions(value = NOT_PASSED)
892
890
  if value != NOT_PASSED
893
891
  self.allowed_actions = value
@@ -192,16 +192,7 @@ class Chef
192
192
  #
193
193
  # @return [Boolean] is the key valid or not
194
194
  def key_is_valid?(key)
195
- valid = true
196
-
197
- so = shell_out("apt-key", "list")
198
- so.stdout.split(/\n/).map do |t|
199
- if t =~ %r{^\/#{key}.*\[expired: .*\]$}
200
- logger.debug "Found expired key: #{t}"
201
- valid = false
202
- break
203
- end
204
- end
195
+ valid = shell_out("apt-key", "list").stdout.each_line.none?(%r{^\/#{key}.*\[expired: .*\]$})
205
196
 
206
197
  logger.debug "key #{key} #{valid ? "is valid" : "is not valid"}"
207
198
  valid
@@ -146,8 +146,8 @@ class Chef
146
146
  def install_xcode_cli_tools(label)
147
147
  # This script was graciously borrowed and modified from Tim Sutton's
148
148
  # osx-vm-templates at https://github.com/timsutton/osx-vm-templates/blob/b001475df54a9808d3d56d06e71b8fa3001fff42/scripts/xcode-cli-tools.sh
149
- execute "install Xcode Command Line tools" do
150
- command <<-EOH
149
+ bash "install Xcode Command Line Tools" do
150
+ code <<-EOH
151
151
  # create the placeholder file that's checked by CLI updates' .dist code
152
152
  # in Apple's SUS catalog
153
153
  touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
@@ -172,7 +172,7 @@ class Chef
172
172
  # Fetch path of cmd.exe through environment variable comspec
173
173
  cmd_path = ENV["COMSPEC"]
174
174
 
175
- "#{cmd_path} /c \'#{client_cmd}\'"
175
+ "#{cmd_path} /c \"#{client_cmd}\""
176
176
  end
177
177
 
178
178
  # Build command line to pass to cmd.exe
@@ -112,11 +112,11 @@ class Chef
112
112
 
113
113
  action :remove do
114
114
  systemd_unit "#{new_resource.job_name}.service" do
115
- action :remove
115
+ action :delete
116
116
  end
117
117
 
118
118
  systemd_unit "#{new_resource.job_name}.timer" do
119
- action :remove
119
+ action :delete
120
120
  end
121
121
  end
122
122
 
@@ -73,19 +73,19 @@ class Chef
73
73
  description: "The Chef environment of the data if storing per environment values."
74
74
 
75
75
  load_current_value do
76
- begin
77
- item = ChefVault::Item.load(data_bag, id)
78
- raw_data item.raw_data
79
- clients item.get_clients
80
- admins item.get_admins
81
- search item.search
82
- rescue ChefVault::Exceptions::SecretDecryption
83
- current_value_does_not_exist!
84
- rescue ChefVault::Exceptions::KeysNotFound
85
- current_value_does_not_exist!
86
- rescue Net::HTTPClientException => e
87
- current_value_does_not_exist! if e.response_code == "404"
88
- end
76
+
77
+ item = ChefVault::Item.load(data_bag, id)
78
+ raw_data item.raw_data
79
+ clients item.get_clients
80
+ admins item.get_admins
81
+ search item.search
82
+ rescue ChefVault::Exceptions::SecretDecryption
83
+ current_value_does_not_exist!
84
+ rescue ChefVault::Exceptions::KeysNotFound
85
+ current_value_does_not_exist!
86
+ rescue Net::HTTPClientException => e
87
+ current_value_does_not_exist! if e.response_code == "404"
88
+
89
89
  end
90
90
 
91
91
  action :create do
@@ -89,8 +89,7 @@ class Chef
89
89
  # @param [String] action the name of the action to perform
90
90
  # @return [String] the choco feature command string
91
91
  def choco_cmd(action)
92
- cmd = "#{ENV["ALLUSERSPROFILE"]}\\chocolatey\\bin\\choco feature #{action} --name #{new_resource.feature_name}"
93
- cmd
92
+ "#{ENV["ALLUSERSPROFILE"]}\\chocolatey\\bin\\choco feature #{action} --name #{new_resource.feature_name}"
94
93
  end
95
94
  end
96
95
  end
@@ -158,7 +158,7 @@ class Chef
158
158
 
159
159
  # @todo this is Chef 12 era cleanup. Someday we should remove it all
160
160
  template "/etc/cron.d/#{sanitized_name}" do
161
- source ::File.expand_path("../../support/cron.d.erb", __FILE__)
161
+ source ::File.expand_path("../support/cron.d.erb", __dir__)
162
162
  local true
163
163
  mode new_resource.mode
164
164
  variables(
@@ -70,7 +70,7 @@ class Chef
70
70
 
71
71
  with_run_context :root do
72
72
  edit_resource(:template, allow_path) do |new_resource|
73
- source ::File.expand_path("../support/cron_access.erb", __FILE__)
73
+ source ::File.expand_path("support/cron_access.erb", __dir__)
74
74
  local true
75
75
  mode "0600"
76
76
  variables["users"] ||= []
@@ -87,7 +87,7 @@ class Chef
87
87
 
88
88
  with_run_context :root do
89
89
  edit_resource(:template, deny_path) do |new_resource|
90
- source ::File.expand_path("../support/cron_access.erb", __FILE__)
90
+ source ::File.expand_path("support/cron_access.erb", __dir__)
91
91
  local true
92
92
  mode "0600"
93
93
  variables["users"] ||= []
@@ -161,11 +161,11 @@ class Chef
161
161
 
162
162
  ```ruby
163
163
  execute 'test_rule' do
164
- command 'command_to_run
164
+ command "command_to_run
165
165
  --option value
166
166
  --option value
167
167
  --source \#{node[:name_of_node][:ipsec][:local][:subnet]}
168
- -j test_rule'
168
+ -j test_rule"
169
169
 
170
170
  action :nothing
171
171
  end
@@ -509,7 +509,6 @@ class Chef
509
509
  def initialize(name, run_context = nil)
510
510
  super
511
511
  @command = name
512
- @backup = 5
513
512
  @default_guard_interpreter = :execute
514
513
  @is_guard_interpreter = false
515
514
  end
@@ -630,11 +629,11 @@ class Chef
630
629
  end
631
630
 
632
631
  # if domain is provided in both username and domain
633
- if specified_user && ((specified_user.include? '\\') || (specified_user.include? "@")) && specified_domain
632
+ if specified_user.is_a?(String) && ((specified_user.include? '\\') || (specified_user.include? "@")) && specified_domain
634
633
  raise ArgumentError, "The domain is provided twice. Username: `#{specified_user}`, Domain: `#{specified_domain}`. Please specify domain only once."
635
634
  end
636
635
 
637
- if ! specified_user.nil? && specified_domain.nil?
636
+ if specified_user.is_a?(String) && specified_domain.nil?
638
637
  # Splitting username of format: Domain\Username
639
638
  domain_and_user = user.split('\\')
640
639
 
@@ -86,7 +86,7 @@ class Chef
86
86
  end
87
87
 
88
88
  action :periodic do
89
- return unless mac_os_x?
89
+ return unless macos?
90
90
 
91
91
  unless brew_up_to_date?
92
92
  converge_by "update new lists of packages" do
@@ -96,7 +96,7 @@ class Chef
96
96
  end
97
97
 
98
98
  action :update do
99
- return unless mac_os_x?
99
+ return unless macos?
100
100
 
101
101
  converge_by "force update new lists of packages" do
102
102
  do_update
@@ -87,8 +87,7 @@ class Chef
87
87
  def updated_ec2_config_xml
88
88
  begin
89
89
  require "rexml/document" unless defined?(REXML::Document)
90
- config_file = 'C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml'
91
- config = REXML::Document.new(::File.read(config_file))
90
+ config = REXML::Document.new(::File.read(WINDOWS_EC2_CONFIG))
92
91
  # find an element named State with a sibling element whose value is Ec2SetComputerName
93
92
  REXML::XPath.each(config, "//Plugin/State[../Name/text() = 'Ec2SetComputerName']") do |element|
94
93
  element.text = "Disabled"
@@ -223,35 +222,36 @@ class Chef
223
222
  end
224
223
 
225
224
  else # windows
225
+ WINDOWS_EC2_CONFIG = 'C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml'.freeze
226
+
226
227
  raise "Windows hostnames cannot contain a period." if new_resource.hostname.match?(/\./)
227
228
 
228
229
  # suppress EC2 config service from setting our hostname
229
- if ::File.exist?('C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml')
230
+ if ::File.exist?(WINDOWS_EC2_CONFIG)
230
231
  xml_contents = updated_ec2_config_xml
231
232
  if xml_contents.empty?
232
233
  Chef::Log.warn('Unable to properly parse and update C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml contents. Skipping file update.')
233
234
  else
234
- declare_resource(:file, 'C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml') do
235
+ file WINDOWS_EC2_CONFIG do
235
236
  content xml_contents
236
237
  end
237
238
  end
238
239
  end
239
240
 
240
- # update via netdom
241
- declare_resource(:powershell_script, "set hostname") do
242
- code <<-EOH
243
- $sysInfo = Get-WmiObject -Class Win32_ComputerSystem
244
- $sysInfo.Rename("#{new_resource.hostname}")
245
- EOH
246
- notifies :request_reboot, "reboot[setting hostname]"
247
- not_if { Socket.gethostbyname(Socket.gethostname).first == new_resource.hostname }
248
- end
241
+ unless Socket.gethostbyname(Socket.gethostname).first == new_resource.hostname
242
+ converge_by "set hostname to #{new_resource.hostname}" do
243
+ powershell_out! <<~EOH
244
+ $sysInfo = Get-WmiObject -Class Win32_ComputerSystem
245
+ $sysInfo.Rename("#{new_resource.hostname}")
246
+ EOH
247
+ end
249
248
 
250
- # reboot because $windows
251
- declare_resource(:reboot, "setting hostname") do
252
- reason "#{Chef::Dist::PRODUCT} updated system hostname"
253
- action :nothing
254
- only_if { new_resource.windows_reboot }
249
+ # reboot because $windows
250
+ reboot "setting hostname" do
251
+ reason "#{Chef::Dist::PRODUCT} updated system hostname"
252
+ only_if { new_resource.windows_reboot }
253
+ action :request_reboot
254
+ end
255
255
  end
256
256
  end
257
257
  end
@@ -103,6 +103,7 @@ class Chef
103
103
  protected
104
104
 
105
105
  attr_writer :loaded_lwrps
106
+
106
107
  def loaded_lwrps
107
108
  @loaded_lwrps ||= {}
108
109
  end
@@ -16,6 +16,8 @@
16
16
  #
17
17
 
18
18
  require_relative "../resource"
19
+ require_relative "../dist"
20
+ require "plist"
19
21
 
20
22
  class Chef
21
23
  class Resource
@@ -28,99 +30,210 @@ class Chef
28
30
 
29
31
  description "Use the **macos_userdefaults** resource to manage the macOS user defaults system. The properties of this resource are passed to the defaults command, and the parameters follow the convention of that command. See the defaults(1) man page for details on how the tool works."
30
32
  introduced "14.0"
33
+ examples <<~DOC
34
+ **Specify a global domain value**
35
+
36
+ ```ruby
37
+ macos_userdefaults 'Full keyboard access to all controls' do
38
+ key 'AppleKeyboardUIMode'
39
+ value 2
40
+ end
41
+ ```
42
+
43
+ **Setting a value on a specific domain**
44
+
45
+ ```ruby
46
+ macos_userdefaults 'Enable macOS firewall' do
47
+ domain '/Library/Preferences/com.apple.alf'
48
+ key 'globalstate'
49
+ value 1
50
+ end
51
+ ```
52
+
53
+ **Specifying the type of a key to skip automatic type detection**
54
+
55
+ ```ruby
56
+ macos_userdefaults 'Finder expanded save dialogs' do
57
+ key 'NSNavPanelExpandedStateForSaveMode'
58
+ value 'TRUE'
59
+ type 'bool'
60
+ end
61
+ ```
62
+ DOC
31
63
 
32
64
  property :domain, String,
33
65
  description: "The domain that the user defaults belong to.",
34
- required: true
66
+ default: "NSGlobalDomain",
67
+ default_description: "NSGlobalDomain: the global domain.",
68
+ desired_state: false
35
69
 
36
70
  property :global, [TrueClass, FalseClass],
37
71
  description: "Determines whether or not the domain is global.",
38
- default: false
72
+ deprecated: true,
73
+ default: false,
74
+ desired_state: false
39
75
 
40
76
  property :key, String,
41
- description: "The preference key."
77
+ description: "The preference key.",
78
+ required: true
79
+
80
+ property :host, [String, Symbol],
81
+ description: "Set either :current or a hostname to set the user default at the host level.",
82
+ desired_state: false,
83
+ introduced: "16.3"
42
84
 
43
85
  property :value, [Integer, Float, String, TrueClass, FalseClass, Hash, Array],
44
- description: "The value of the key.",
45
- required: true
86
+ description: "The value of the key. Note: With the `type` property set to `bool`, `String` forms of Boolean true/false values that Apple accepts in the defaults command will be coerced: 0/1, 'TRUE'/'FALSE,' 'true'/false', 'YES'/'NO', or 'yes'/'no'.",
87
+ required: [:write],
88
+ coerce: proc { |v| v.is_a?(Hash) ? v.transform_keys(&:to_s) : v } # make sure keys are all strings for comparison
46
89
 
47
90
  property :type, String,
48
91
  description: "The value type of the preference key.",
49
- default: ""
92
+ equal_to: %w{bool string int float array dict},
93
+ desired_state: false
50
94
 
51
95
  property :user, String,
52
- description: "The system user that the default will be applied to."
96
+ description: "The system user that the default will be applied to.",
97
+ desired_state: false
53
98
 
54
99
  property :sudo, [TrueClass, FalseClass],
55
- description: "Set to true if the setting you wish to modify requires privileged access.",
100
+ description: "Set to true if the setting you wish to modify requires privileged access. This requires passwordless sudo for the '/usr/bin/defaults' command to be setup for the user running #{Chef::Dist::PRODUCT}.",
56
101
  default: false,
57
102
  desired_state: false
58
103
 
59
- # @todo this should get refactored away: https://github.com/chef/chef/issues/7622
60
- property :is_set, [TrueClass, FalseClass],
61
- default: false,
62
- desired_state: false,
63
- skip_docs: true
104
+ load_current_value do |desired|
105
+ Chef::Log.debug "#load_current_value: shelling out \"#{defaults_export_cmd(desired).join(" ")}\" to determine state"
106
+ state = shell_out(defaults_export_cmd(desired), user: desired.user)
64
107
 
65
- # coerce various ways of representing a boolean into either 0 (false) or 1 (true)
66
- # which is what the defaults CLI expects. Why? Well defaults itself accepts a few
67
- # different formats, but when you do a read command it all comes back as 1 or 0.
68
- def coerce_booleans(val)
69
- return 1 if [true, "TRUE", "1", "true", "YES", "yes"].include?(val)
70
- return 0 if [false, "FALSE", "0", "false", "NO", "no"].include?(val)
108
+ if state.error? || state.stdout.empty?
109
+ Chef::Log.debug "#load_current_value: #{defaults_export_cmd(desired).join(" ")} returned stdout: #{state.stdout} and stderr: #{state.stderr}"
110
+ current_value_does_not_exist!
111
+ end
112
+
113
+ plist_data = ::Plist.parse_xml(state.stdout)
114
+
115
+ # handle the situation where the key doesn't exist in the domain
116
+ if plist_data.key?(desired.key)
117
+ key desired.key
118
+ else
119
+ current_value_does_not_exist!
120
+ end
71
121
 
72
- val
122
+ value plist_data[desired.key]
73
123
  end
74
124
 
75
- load_current_value do |desired|
76
- value = coerce_booleans(desired.value)
77
- cmd = "defaults read '#{desired.domain}' "
78
- cmd << "'#{desired.key}' " if desired.key
79
- cmd << " | grep -qx '#{value}'"
80
-
81
- vc = if desired.user.nil?
82
- shell_out(cmd)
83
- else
84
- shell_out(cmd, user: desired.user)
85
- end
86
-
87
- is_set !vc.error?
125
+ #
126
+ # The defaults command to export a domain
127
+ #
128
+ # @return [Array] defaults command
129
+ #
130
+ def defaults_export_cmd(resource)
131
+ state_cmd = ["/usr/bin/defaults"]
132
+
133
+ if resource.host == "current"
134
+ state_cmd.concat(["-currentHost"])
135
+ elsif resource.host # they specified a non-nil value, which is a hostname
136
+ state_cmd.concat(["-host", resource.host])
137
+ end
138
+
139
+ state_cmd.concat(["export", resource.domain, "-"])
140
+ state_cmd
88
141
  end
89
142
 
90
143
  action :write do
91
- description "Write the setting to the specified domain"
92
-
93
- unless current_resource.is_set
94
- cmd = ["defaults write"]
95
- cmd.unshift("sudo") if new_resource.sudo
96
-
97
- cmd << if new_resource.global
98
- "NSGlobalDomain"
99
- else
100
- "'#{new_resource.domain}'"
101
- end
102
-
103
- cmd << "'#{new_resource.key}'" if new_resource.key
104
- value = new_resource.value
105
- type = new_resource.type.empty? ? value_type(value) : new_resource.type
106
- # creates a string of Key1 Value1 Key2 Value2...
107
- value = value.map { |k, v| "\"#{k}\" \"#{v}\"" }.join(" ") if type == "dict"
108
- if type == "array"
109
- value = value.join("' '")
110
- value = "'#{value}'"
111
- end
112
- cmd << "-#{type}" if type
113
- cmd << value
144
+ description "Write the value to the specified domain/key."
114
145
 
115
- # FIXME: this should use cmd directly as an array argument, but then the quoting
116
- # of individual args above needs to be removed as well.
117
- execute cmd.join(" ") do
118
- user new_resource.user unless new_resource.user.nil?
119
- end
146
+ converge_if_changed do
147
+ cmd = defaults_modify_cmd
148
+ Chef::Log.debug("Updating defaults value by shelling out: #{cmd.join(" ")}")
149
+
150
+ shell_out!(cmd, user: new_resource.user)
151
+ end
152
+ end
153
+
154
+ action :delete do
155
+ description "Delete a key from a domain."
156
+
157
+ # if it's not there there's nothing to remove
158
+ return unless current_resource
159
+
160
+ converge_by("delete domain:#{new_resource.domain} key:#{new_resource.key}") do
161
+
162
+ cmd = defaults_modify_cmd
163
+ Chef::Log.debug("Removing defaults key by shelling out: #{cmd.join(" ")}")
164
+
165
+ shell_out!(cmd, user: new_resource.user)
120
166
  end
121
167
  end
122
168
 
123
169
  action_class do
170
+ #
171
+ # The command used to write or delete delete values from domains
172
+ #
173
+ # @return [Array] Array representation of defaults command to run
174
+ #
175
+ def defaults_modify_cmd
176
+ cmd = ["/usr/bin/defaults"]
177
+
178
+ if new_resource.host == :current
179
+ cmd.concat(["-currentHost"])
180
+ elsif new_resource.host # they specified a non-nil value, which is a hostname
181
+ cmd.concat(["-host", new_resource.host])
182
+ end
183
+
184
+ cmd.concat([action.to_s, new_resource.domain, new_resource.key])
185
+ cmd.concat(processed_value) if action == :write
186
+ cmd.prepend("sudo") if new_resource.sudo
187
+ cmd
188
+ end
189
+
190
+ #
191
+ # convert the provided value into the format defaults expects
192
+ #
193
+ # @return [array] array of values starting with the type if applicable
194
+ #
195
+ def processed_value
196
+ type = new_resource.type || value_type(new_resource.value)
197
+
198
+ # when dict this creates an array of values ["Key1", "Value1", "Key2", "Value2" ...]
199
+ cmd_values = ["-#{type}"]
200
+
201
+ case type
202
+ when "dict"
203
+ cmd_values.concat(new_resource.value.flatten)
204
+ when "array"
205
+ cmd_values.concat(new_resource.value)
206
+ when "bool"
207
+ cmd_values.concat(bool_to_defaults_bool(new_resource.value))
208
+ else
209
+ cmd_values.concat([new_resource.value])
210
+ end
211
+
212
+ cmd_values
213
+ end
214
+
215
+ #
216
+ # defaults booleans on the CLI must be 'TRUE' or 'FALSE' so convert various inputs to that
217
+ #
218
+ # @param [String, Integer, Boolean] input <description>
219
+ #
220
+ # @return [String] TRUE or FALSE
221
+ #
222
+ def bool_to_defaults_bool(input)
223
+ return ["TRUE"] if [true, "TRUE", "1", "true", "YES", "yes"].include?(input)
224
+ return ["FALSE"] if [false, "FALSE", "0", "false", "NO", "no"].include?(input)
225
+
226
+ # make sure it's very clear bad input was given
227
+ raise ArgumentError, "#{input} cannot be converted to a boolean value for use with Apple's defaults command. Acceptable values are: 'TRUE', 'YES', 'true, 'yes', '0', true, 'FALSE', 'false', 'NO', 'no', '1', or false."
228
+ end
229
+
230
+ #
231
+ # convert ruby type to defaults type
232
+ #
233
+ # @param [Integer, Float, String, TrueClass, FalseClass, Hash, Array] value The value being set
234
+ #
235
+ # @return [string, nil] the type value used by defaults or nil if not applicable
236
+ #
124
237
  def value_type(value)
125
238
  case value
126
239
  when true, false
@@ -133,6 +246,8 @@ class Chef
133
246
  "dict"
134
247
  when Array
135
248
  "array"
249
+ when String
250
+ "string"
136
251
  end
137
252
  end
138
253
  end