chef 16.2.73-universal-mingw32 → 16.4.41-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 (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
@@ -21,6 +21,8 @@ require_relative "../resource"
21
21
  class Chef
22
22
  class Resource
23
23
  class WindowsDnsZone < Chef::Resource
24
+ unified_mode true
25
+
24
26
  provides :windows_dns_zone
25
27
 
26
28
  description "The windows_dns_zone resource creates an Active Directory Integrated DNS Zone on the local server."
@@ -41,21 +43,24 @@ class Chef
41
43
  action :create do
42
44
  description "Creates and updates a DNS Zone."
43
45
 
44
- powershell_package "xDnsServer" do
45
- end
46
- do_it "Present"
46
+ powershell_package "xDnsServer"
47
+
48
+ run_dsc_resource "Present"
47
49
  end
48
50
 
49
51
  action :delete do
50
52
  description "Deletes a DNS Zone."
51
53
 
52
- powershell_package "xDnsServer" do
53
- end
54
- do_it "Absent"
54
+ powershell_package "xDnsServer"
55
+
56
+ run_dsc_resource "Absent"
55
57
  end
56
58
 
57
59
  action_class do
58
- def do_it(ensure_prop)
60
+ private
61
+
62
+ # @api private
63
+ def run_dsc_resource(ensure_prop)
59
64
  if new_resource.server_type == "Domain"
60
65
  dsc_resource "xDnsServerADZone #{new_resource.zone_name} #{ensure_prop}" do
61
66
  module_name "xDnsServer"
@@ -125,6 +125,8 @@ class Chef
125
125
  end
126
126
 
127
127
  action_class do
128
+ private
129
+
128
130
  # call the appropriate windows_feature resource based on the specified subresource
129
131
  # @return [void]
130
132
  def run_default_subresource(desired_action)
@@ -22,6 +22,8 @@ require_relative "../platform/query_helpers"
22
22
  class Chef
23
23
  class Resource
24
24
  class WindowsFeatureDism < Chef::Resource
25
+ unified_mode true
26
+
25
27
  provides(:windows_feature_dism) { true }
26
28
 
27
29
  description "Use the **windows_feature_dism** resource to add, remove, or entirely delete Windows features and roles using DISM."
@@ -125,6 +127,8 @@ class Chef
125
127
  end
126
128
 
127
129
  action_class do
130
+ private
131
+
128
132
  # @return [Array] features the user has requested to install which need installation
129
133
  def features_to_install
130
134
  @install ||= begin
@@ -171,6 +175,12 @@ class Chef
171
175
  raise "The Windows feature#{"s" if unavailable.count > 1} #{unavailable.join(",")} #{unavailable.count > 1 ? "are" : "is"} not available on this version of Windows. Run 'dism /online /Get-Features' to see the list of available feature names." unless unavailable.empty?
172
176
  end
173
177
 
178
+ #
179
+ # FIXME FIXME FIXME
180
+ # The node object should not be used for caching state like this and this is not a public API and may break.
181
+ # FIXME FIXME FIXME
182
+ #
183
+
174
184
  # run dism.exe to get a list of all available features and their state
175
185
  # and save that to the node at node.override level.
176
186
  # We do this because getting a list of features in dism takes at least a second
@@ -23,6 +23,8 @@ require_relative "../platform/query_helpers"
23
23
  class Chef
24
24
  class Resource
25
25
  class WindowsFeaturePowershell < Chef::Resource
26
+ unified_mode true
27
+
26
28
  provides(:windows_feature_powershell) { true }
27
29
 
28
30
  description "Use the **windows_feature_powershell** resource to add, remove, or entirely delete Windows features and roles using PowerShell. This resource offers significant speed benefits over the windows_feature_dism resource, but requires installation of the Remote Server Administration Tools on non-server releases of Windows."
@@ -141,8 +143,12 @@ class Chef
141
143
  action_class do
142
144
  # @return [Array] features the user has requested to install which need installation
143
145
  def features_to_install
144
- # the intersection of the features to install & disabled features are what needs installing
145
- @install ||= new_resource.feature_name & node["powershell_features_cache"]["disabled"]
146
+ # the intersection of the features to install & disabled/removed features are what needs installing
147
+ @features_to_install ||= begin
148
+ features = node["powershell_features_cache"]["disabled"]
149
+ features |= node["powershell_features_cache"]["removed"] if new_resource.source
150
+ new_resource.feature_name & features
151
+ end
146
152
  end
147
153
 
148
154
  # @return [Array] features the user has requested to remove which need removing
@@ -182,6 +188,12 @@ class Chef
182
188
  # @return [void]
183
189
  def reload_cached_powershell_data
184
190
  Chef::Log.debug("Caching Windows features available via Get-WindowsFeature.")
191
+
192
+ #
193
+ # FIXME FIXME FIXME
194
+ # The node object should not be used for caching state like this and this is not a public API and may break.
195
+ # FIXME FIXME FIXME
196
+ #
185
197
  node.override["powershell_features_cache"] = Mash.new
186
198
  node.override["powershell_features_cache"]["enabled"] = []
187
199
  node.override["powershell_features_cache"]["disabled"] = []
@@ -0,0 +1,199 @@
1
+ #
2
+ # Author:: John McCrae (<jmccrae@chef.io>)
3
+ # Author:: Davin Taddeo (<davin@chef.io>)
4
+ # Copyright:: Copyright (c) Chef Software Inc.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ class Chef
20
+ class Resource
21
+ class WindowsFirewallProfile < Chef::Resource
22
+ unified_mode true
23
+
24
+ provides :windows_firewall_profile
25
+ description "Use the **windows_firewall_profile** resource to enable, disable, and configure the Windows firewall."
26
+ introduced "16.3"
27
+
28
+ examples <<~DOC
29
+ **Enable and Configure the Private Profile of the Windows Profile**:
30
+
31
+ ```ruby
32
+ windows_firewall_profile 'Private' do
33
+ default_inbound_action 'Block'
34
+ default_outbound_action 'Allow'
35
+ allow_inbound_rules true
36
+ display_notification false
37
+ action :enable
38
+ end
39
+ ```
40
+
41
+ **Enable and Configure the Public Profile of the Windows Firewall**:
42
+
43
+ ```ruby
44
+ windows_firewall_profile 'Public' do
45
+ default_inbound_action 'Block'
46
+ default_outbound_action 'Allow'
47
+ allow_inbound_rules false
48
+ display_notification false
49
+ action :enable
50
+ end
51
+ ```
52
+
53
+ **Disable the Domain Profile of the Windows Firewall**:
54
+
55
+ ```ruby
56
+ windows_firewall_profile 'Disable the Domain Profile of the Windows Firewall' do
57
+ profile 'Domain'
58
+ action :disable
59
+ end
60
+ ```
61
+ DOC
62
+
63
+ unified_mode true
64
+
65
+ property :profile, String,
66
+ name_property: true,
67
+ equal_to: %w{ Domain Public Private },
68
+ description: "Set the Windows Profile being configured"
69
+
70
+ property :default_inbound_action, [String, nil],
71
+ equal_to: %w{ Allow Block NotConfigured },
72
+ description: "Set the default policy for inbound network traffic"
73
+
74
+ property :default_outbound_action, [String, nil],
75
+ equal_to: %w{ Allow Block NotConfigured },
76
+ description: "Set the default policy for outbound network traffic"
77
+
78
+ property :allow_inbound_rules, [true, false, String], equal_to: [true, false, "NotConfigured"], description: "Allow users to set inbound firewall rules"
79
+ property :allow_local_firewall_rules, [true, false, String], equal_to: [true, false, "NotConfigured"], description: "Merges inbound firewall rules into the policy"
80
+ property :allow_local_ipsec_rules, [true, false, String], equal_to: [true, false, "NotConfigured"], description: "Allow users to manage local connection security rules"
81
+ property :allow_user_apps, [true, false, String], equal_to: [true, false, "NotConfigured"], description: "Allow user applications to manage firewall"
82
+ property :allow_user_ports, [true, false, String], equal_to: [true, false, "NotConfigured"], description: "Allow users to manage firewall port rules"
83
+ property :allow_unicast_response, [true, false, String], equal_to: [true, false, "NotConfigured"], description: "Allow unicast responses to multicast and broadcast messages"
84
+ property :display_notification, [true, false, String], equal_to: [true, false, "NotConfigured"], description: "Display a notification when firewall blocks certain activity"
85
+
86
+ load_current_value do |desired|
87
+ ps_get_net_fw_profile = load_firewall_state(desired.profile)
88
+ output = powershell_out(ps_get_net_fw_profile)
89
+ if output.stdout.empty?
90
+ current_value_does_not_exist!
91
+ else
92
+ state = Chef::JSONCompat.from_json(output.stdout)
93
+ end
94
+
95
+ default_inbound_action state["default_inbound_action"]
96
+ default_outbound_action state["default_outbound_action"]
97
+ allow_inbound_rules convert_to_ruby(state["allow_inbound_rules"])
98
+ allow_local_firewall_rules convert_to_ruby(state["allow_local_firewall_rules"])
99
+ allow_local_ipsec_rules convert_to_ruby(state["allow_local_ipsec_rules"])
100
+ allow_user_apps convert_to_ruby(state["allow_user_apps"])
101
+ allow_user_ports convert_to_ruby(state["allow_user_ports"])
102
+ allow_unicast_response convert_to_ruby(state["allow_unicast_response"])
103
+ display_notification convert_to_ruby(state["display_notification"])
104
+ end
105
+
106
+ def convert_to_ruby(obj)
107
+ if obj.to_s.downcase == "true"
108
+ true
109
+ elsif obj.to_s.downcase == "false"
110
+ false
111
+ elsif obj.to_s.downcase == "notconfigured"
112
+ "NotConfigured"
113
+ end
114
+ end
115
+
116
+ def convert_to_powershell(obj)
117
+ if obj.to_s.downcase == "true"
118
+ "True"
119
+ elsif obj.to_s.downcase == "false"
120
+ "False"
121
+ elsif obj.to_s.downcase == "notconfigured"
122
+ "NotConfigured"
123
+ end
124
+ end
125
+
126
+ action :enable do
127
+ converge_if_changed :default_inbound_action, :default_outbound_action, :allow_inbound_rules, :allow_local_firewall_rules,
128
+ :allow_local_ipsec_rules, :allow_user_apps, :allow_user_ports, :allow_unicast_response, :display_notification do
129
+ fw_cmd = firewall_command(new_resource.profile)
130
+ powershell_exec!(fw_cmd)
131
+ end
132
+ unless firewall_enabled?(new_resource.profile)
133
+ converge_by "Enable the #{new_resource.profile} Firewall Profile" do
134
+ cmd = "Set-NetFirewallProfile -Profile #{new_resource.profile} -Enabled \"True\""
135
+ powershell_out!(cmd)
136
+ end
137
+ end
138
+ end
139
+
140
+ action :disable do
141
+ if firewall_enabled?(new_resource.profile)
142
+ converge_by "Disable the #{new_resource.profile} Firewall Profile" do
143
+ cmd = "Set-NetFirewallProfile -Profile #{new_resource.profile} -Enabled \"False\""
144
+ powershell_out!(cmd)
145
+ end
146
+ end
147
+ end
148
+
149
+ action_class do
150
+ def firewall_command(fw_profile)
151
+ cmd = "Set-NetFirewallProfile -Profile \"#{fw_profile}\""
152
+ cmd << " -DefaultInboundAction \"#{new_resource.default_inbound_action}\"" unless new_resource.default_inbound_action.nil?
153
+ cmd << " -DefaultOutboundAction \"#{new_resource.default_outbound_action}\"" unless new_resource.default_outbound_action.nil?
154
+ cmd << " -AllowInboundRules \"#{convert_to_powershell(new_resource.allow_inbound_rules)}\"" unless new_resource.allow_inbound_rules.nil?
155
+ cmd << " -AllowLocalFirewallRules \"#{convert_to_powershell(new_resource.allow_local_firewall_rules)}\"" unless new_resource.allow_local_firewall_rules.nil?
156
+ cmd << " -AllowLocalIPsecRules \"#{convert_to_powershell(new_resource.allow_local_ipsec_rules)}\"" unless new_resource.allow_local_ipsec_rules.nil?
157
+ cmd << " -AllowUserApps \"#{convert_to_powershell(new_resource.allow_user_apps)}\"" unless new_resource.allow_user_apps.nil?
158
+ cmd << " -AllowUserPorts \"#{convert_to_powershell(new_resource.allow_user_ports)}\"" unless new_resource.allow_user_ports.nil?
159
+ cmd << " -AllowUnicastResponseToMulticast \"#{convert_to_powershell(new_resource.allow_unicast_response)}\"" unless new_resource.allow_unicast_response.nil?
160
+ cmd << " -NotifyOnListen \"#{convert_to_powershell(new_resource.display_notification)}\"" unless new_resource.display_notification.nil?
161
+ cmd
162
+ end
163
+
164
+ def load_firewall_state(profile_name)
165
+ <<-EOH
166
+ Remove-TypeData System.Array # workaround for PS bug here: https://bit.ly/2SRMQ8M
167
+ $#{profile_name} = Get-NetFirewallProfile -Profile #{profile_name}
168
+ ([PSCustomObject]@{
169
+ default_inbound_action = $#{profile_name}.DefaultInboundAction.ToString()
170
+ default_outbound_action = $#{profile_name}.DefaultOutboundAction.ToString()
171
+ allow_inbound_rules = $#{profile_name}.AllowInboundRules.ToString()
172
+ allow_local_firewall_rules = $#{profile_name}.AllowLocalFirewallRules.ToString()
173
+ allow_local_ipsec_rules = $#{profile_name}.AllowLocalIPsecRules.ToString()
174
+ allow_user_apps = $#{profile_name}.AllowUserApps.ToString()
175
+ allow_user_ports = $#{profile_name}.AllowUserPorts.ToString()
176
+ allow_unicast_response = $#{profile_name}.AllowUnicastResponseToMulticast.ToString()
177
+ display_notification = $#{profile_name}.NotifyOnListen.ToString()
178
+ }) | ConvertTo-Json
179
+ EOH
180
+ end
181
+
182
+ def firewall_enabled?(profile_name)
183
+ cmd = <<~CODE
184
+ $#{profile_name} = Get-NetFirewallProfile -Profile #{profile_name}
185
+ if ($#{profile_name}.Enabled) {
186
+ return $true
187
+ } else {return $false}
188
+ CODE
189
+ firewall_status = powershell_out(cmd).stdout
190
+ if /True/.match?(firewall_status)
191
+ true
192
+ elsif /False/.match?(firewall_status)
193
+ false
194
+ end
195
+ end
196
+ end
197
+ end
198
+ end
199
+ end
@@ -24,6 +24,8 @@ require_relative "../json_compat"
24
24
  class Chef
25
25
  class Resource
26
26
  class WindowsFirewallRule < Chef::Resource
27
+ unified_mode true
28
+
27
29
  provides :windows_firewall_rule
28
30
 
29
31
  description "Use the **windows_firewall_rule** resource to create, change or remove Windows firewall rules."
@@ -273,11 +275,11 @@ class Chef
273
275
  requirements.assert(:create) do |a|
274
276
  a.assertion do
275
277
  if new_resource.icmp_type.is_a?(Integer)
276
- (0..255).include?(new_resource.icmp_type)
278
+ (0..255).cover?(new_resource.icmp_type)
277
279
  elsif new_resource.icmp_type.is_a?(String) && !new_resource.icmp_type.include?(":") && new_resource.protocol.start_with?("ICMP")
278
- (0..255).include?(new_resource.icmp_type.to_i)
280
+ (0..255).cover?(new_resource.icmp_type.to_i)
279
281
  elsif new_resource.icmp_type.is_a?(String) && new_resource.icmp_type.include?(":") && new_resource.protocol.start_with?("ICMP")
280
- new_resource.icmp_type.split(":").all? { |type| (0..255).include?(type.to_i) }
282
+ new_resource.icmp_type.split(":").all? { |type| (0..255).cover?(type.to_i) }
281
283
  else
282
284
  true
283
285
  end
@@ -21,6 +21,7 @@ class Chef
21
21
  class Resource
22
22
  class WindowsFont < Chef::Resource
23
23
  require_relative "../util/path_helper"
24
+ unified_mode true
24
25
 
25
26
  provides(:windows_font) { true }
26
27
 
@@ -98,8 +99,9 @@ class Chef
98
99
  def font_exists?
99
100
  require "win32ole" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
100
101
  fonts_dir = WIN32OLE.new("WScript.Shell").SpecialFolders("Fonts")
102
+ fonts_dir_local = Chef::Util::PathHelper.join(ENV["home"], "AppData/Local/Microsoft/Windows/fonts")
101
103
  logger.trace("Seeing if the font at #{Chef::Util::PathHelper.join(fonts_dir, new_resource.font_name)} exists")
102
- ::File.exist?(Chef::Util::PathHelper.join(fonts_dir, new_resource.font_name))
104
+ ::File.exist?(Chef::Util::PathHelper.join(fonts_dir, new_resource.font_name)) || ::File.exist?(Chef::Util::PathHelper.join(fonts_dir_local, new_resource.font_name))
103
105
  end
104
106
 
105
107
  # Parse out the schema provided to us to see if it's one we support via remote_file.
@@ -20,6 +20,8 @@ require_relative "../resource"
20
20
  class Chef
21
21
  class Resource
22
22
  class WindowsPagefile < Chef::Resource
23
+ unified_mode true
24
+
23
25
  provides(:windows_pagefile) { true }
24
26
 
25
27
  description "Use the **windows_pagefile** resource to configure pagefile settings on Windows."
@@ -109,6 +111,8 @@ class Chef
109
111
  end
110
112
 
111
113
  action_class do
114
+ private
115
+
112
116
  # make sure the provided name property matches the appropriate format
113
117
  # we do this here and not in the property itself because if automatic_managed
114
118
  # is set then this validation is not necessary / doesn't make sense at all
@@ -22,6 +22,8 @@ require_relative "../resource"
22
22
  class Chef
23
23
  class Resource
24
24
  class WindowsPrinter < Chef::Resource
25
+ unified_mode true
26
+
25
27
  require "resolv"
26
28
 
27
29
  provides(:windows_printer) { true }
@@ -79,31 +81,17 @@ class Chef
79
81
  validation_message: "The ipv4_address property must be in the IPv4 format of `WWW.XXX.YYY.ZZZ`",
80
82
  regex: Resolv::IPv4::Regex
81
83
 
82
- property :exists, [TrueClass, FalseClass],
83
- skip_docs: true
84
-
85
84
  PRINTERS_REG_KEY = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\\'.freeze unless defined?(PRINTERS_REG_KEY)
86
85
 
87
- # does the printer exist
88
- #
89
- # @param [String] name the name of the printer
90
- # @return [Boolean]
91
- def printer_exists?(name)
92
- printer_reg_key = PRINTERS_REG_KEY + name
93
- logger.trace "Checking to see if this reg key exists: '#{printer_reg_key}'"
94
- registry_key_exists?(printer_reg_key)
95
- end
96
-
97
86
  # @todo Set @current_resource printer properties from registry
98
87
  load_current_value do |desired|
99
88
  name desired.name
100
- exists printer_exists?(desired.name)
101
89
  end
102
90
 
103
91
  action :create do
104
92
  description "Create a new printer and a printer port if one doesn't already exist."
105
93
 
106
- if @current_resource.exists
94
+ if printer_exists?
107
95
  Chef::Log.info "#{@new_resource} already exists - nothing to do."
108
96
  else
109
97
  converge_by("Create #{@new_resource}") do
@@ -115,7 +103,7 @@ class Chef
115
103
  action :delete do
116
104
  description "Delete an existing printer. Note this does not delete the associated printer port."
117
105
 
118
- if @current_resource.exists
106
+ if printer_exists?
119
107
  converge_by("Delete #{@new_resource}") do
120
108
  delete_printer
121
109
  end
@@ -125,11 +113,22 @@ class Chef
125
113
  end
126
114
 
127
115
  action_class do
116
+ private
117
+
118
+ # does the printer exist
119
+ #
120
+ # @param [String] name the name of the printer
121
+ # @return [Boolean]
122
+ def printer_exists?
123
+ printer_reg_key = PRINTERS_REG_KEY + new_resource.name
124
+ logger.trace "Checking to see if this reg key exists: '#{printer_reg_key}'"
125
+ registry_key_exists?(printer_reg_key)
126
+ end
127
+
128
128
  # creates the printer port and then the printer
129
129
  def create_printer
130
130
  # Create the printer port first
131
- windows_printer_port new_resource.ipv4_address do
132
- end
131
+ windows_printer_port new_resource.ipv4_address
133
132
 
134
133
  port_name = "IP_#{new_resource.ipv4_address}"
135
134