chef 16.0.275-universal-mingw32 → 16.2.50-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 (293) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -1
  3. data/README.md +3 -3
  4. data/Rakefile +15 -1
  5. data/chef.gemspec +3 -3
  6. data/distro/powershell/chef/chef.psm1 +3 -3
  7. data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
  8. data/lib/chef/application/apply.rb +2 -2
  9. data/lib/chef/application/base.rb +1 -1
  10. data/lib/chef/application/client.rb +1 -1
  11. data/lib/chef/application/exit_code.rb +2 -2
  12. data/lib/chef/application/windows_service_manager.rb +1 -1
  13. data/lib/chef/chef_fs/chef_fs_data_store.rb +3 -3
  14. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  17. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +1 -1
  18. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +1 -1
  19. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
  20. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  21. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  22. data/lib/chef/chef_fs/path_utils.rb +4 -4
  23. data/lib/chef/cookbook/chefignore.rb +1 -1
  24. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  25. data/lib/chef/cookbook/metadata.rb +2 -2
  26. data/lib/chef/cookbook_loader.rb +1 -1
  27. data/lib/chef/cookbook_manifest.rb +1 -1
  28. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  29. data/lib/chef/cookbook_version.rb +7 -7
  30. data/lib/chef/data_bag.rb +4 -4
  31. data/lib/chef/data_collector.rb +1 -1
  32. data/lib/chef/data_collector/error_handlers.rb +1 -1
  33. data/lib/chef/decorator/lazy_array.rb +2 -2
  34. data/lib/chef/deprecated.rb +5 -1
  35. data/lib/chef/digester.rb +4 -4
  36. data/lib/chef/dsl/declare_resource.rb +1 -1
  37. data/lib/chef/dsl/platform_introspection.rb +1 -1
  38. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  39. data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
  40. data/lib/chef/file_access_control.rb +1 -1
  41. data/lib/chef/formatters/base.rb +1 -1
  42. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +1 -1
  43. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
  44. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
  45. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +3 -3
  46. data/lib/chef/http.rb +18 -3
  47. data/lib/chef/http/decompressor.rb +1 -1
  48. data/lib/chef/http/http_request.rb +1 -1
  49. data/lib/chef/http/json_output.rb +1 -1
  50. data/lib/chef/http/ssl_policies.rb +18 -0
  51. data/lib/chef/json_compat.rb +1 -1
  52. data/lib/chef/key.rb +1 -1
  53. data/lib/chef/knife.rb +2 -2
  54. data/lib/chef/knife/bootstrap.rb +13 -16
  55. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  56. data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
  57. data/lib/chef/knife/bootstrap/templates/chef-full.erb +9 -9
  58. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +3 -1
  59. data/lib/chef/knife/client_bulk_delete.rb +1 -1
  60. data/lib/chef/knife/config_get.rb +1 -1
  61. data/lib/chef/knife/config_use_profile.rb +15 -5
  62. data/lib/chef/knife/cookbook_delete.rb +1 -1
  63. data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
  64. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  65. data/lib/chef/knife/core/node_presenter.rb +1 -1
  66. data/lib/chef/knife/core/status_presenter.rb +1 -1
  67. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  68. data/lib/chef/knife/core/windows_bootstrap_context.rb +18 -3
  69. data/lib/chef/knife/data_bag_create.rb +1 -1
  70. data/lib/chef/knife/key_create_base.rb +1 -1
  71. data/lib/chef/knife/key_edit_base.rb +1 -1
  72. data/lib/chef/knife/node_bulk_delete.rb +1 -1
  73. data/lib/chef/knife/node_run_list_remove.rb +1 -1
  74. data/lib/chef/knife/role_bulk_delete.rb +1 -1
  75. data/lib/chef/knife/ssh.rb +2 -2
  76. data/lib/chef/knife/supermarket_share.rb +1 -1
  77. data/lib/chef/knife/supermarket_unshare.rb +1 -1
  78. data/lib/chef/knife/{user_invite_recind.rb → user_invite_rescind.rb} +6 -6
  79. data/lib/chef/log.rb +1 -1
  80. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  81. data/lib/chef/mixin/checksum.rb +0 -1
  82. data/lib/chef/mixin/create_path.rb +8 -8
  83. data/lib/chef/mixin/openssl_helper.rb +4 -4
  84. data/lib/chef/mixin/properties.rb +4 -2
  85. data/lib/chef/mixin/securable.rb +2 -2
  86. data/lib/chef/mixin/shell_out.rb +1 -1
  87. data/lib/chef/node/attribute.rb +2 -2
  88. data/lib/chef/node/immutable_collections.rb +1 -1
  89. data/lib/chef/node/mixin/deep_merge_cache.rb +7 -7
  90. data/lib/chef/policy_builder/policyfile.rb +1 -1
  91. data/lib/chef/powershell.rb +1 -1
  92. data/lib/chef/property.rb +2 -2
  93. data/lib/chef/provider.rb +3 -3
  94. data/lib/chef/provider/batch.rb +3 -10
  95. data/lib/chef/provider/cron.rb +2 -14
  96. data/lib/chef/provider/directory.rb +1 -1
  97. data/lib/chef/provider/execute.rb +2 -1
  98. data/lib/chef/provider/file.rb +1 -1
  99. data/lib/chef/provider/group/dscl.rb +2 -2
  100. data/lib/chef/provider/group/windows.rb +1 -1
  101. data/lib/chef/provider/ifconfig.rb +7 -7
  102. data/lib/chef/provider/launchd.rb +28 -32
  103. data/lib/chef/provider/mount/aix.rb +1 -1
  104. data/lib/chef/provider/mount/windows.rb +2 -2
  105. data/lib/chef/provider/noop.rb +1 -1
  106. data/lib/chef/provider/package/cab.rb +1 -1
  107. data/lib/chef/provider/package/chocolatey.rb +1 -1
  108. data/lib/chef/provider/package/dpkg.rb +1 -1
  109. data/lib/chef/provider/package/openbsd.rb +1 -1
  110. data/lib/chef/provider/package/portage.rb +3 -2
  111. data/lib/chef/provider/package/powershell.rb +6 -2
  112. data/lib/chef/provider/package/rubygems.rb +3 -3
  113. data/lib/chef/provider/package/snap.rb +96 -27
  114. data/lib/chef/provider/package/windows.rb +2 -2
  115. data/lib/chef/provider/package/windows/msi.rb +3 -3
  116. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +1 -1
  117. data/lib/chef/provider/package/yum.rb +1 -1
  118. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  119. data/lib/chef/provider/powershell_script.rb +11 -15
  120. data/lib/chef/provider/remote_directory.rb +2 -2
  121. data/lib/chef/provider/remote_file/http.rb +4 -1
  122. data/lib/chef/provider/script.rb +4 -75
  123. data/lib/chef/provider/service/arch.rb +2 -2
  124. data/lib/chef/provider/service/debian.rb +2 -2
  125. data/lib/chef/provider/service/macosx.rb +13 -2
  126. data/lib/chef/provider/service/openbsd.rb +4 -4
  127. data/lib/chef/provider/service/redhat.rb +1 -1
  128. data/lib/chef/provider/service/simple.rb +3 -3
  129. data/lib/chef/provider/service/upstart.rb +1 -1
  130. data/lib/chef/provider/service/windows.rb +1 -1
  131. data/lib/chef/provider/subversion.rb +2 -2
  132. data/lib/chef/provider/user/aix.rb +1 -1
  133. data/lib/chef/provider/user/dscl.rb +6 -6
  134. data/lib/chef/provider/user/linux.rb +3 -3
  135. data/lib/chef/provider/user/mac.rb +15 -11
  136. data/lib/chef/provider/windows_script.rb +87 -25
  137. data/lib/chef/provider/windows_task.rb +5 -3
  138. data/lib/chef/provider/zypper_repository.rb +30 -10
  139. data/lib/chef/resource.rb +25 -14
  140. data/lib/chef/resource/alternatives.rb +1 -1
  141. data/lib/chef/resource/apt_package.rb +1 -1
  142. data/lib/chef/resource/archive_file.rb +28 -8
  143. data/lib/chef/resource/bash.rb +0 -1
  144. data/lib/chef/resource/batch.rb +4 -2
  145. data/lib/chef/resource/chef_client_scheduled_task.rb +13 -1
  146. data/lib/chef/resource/chef_gem.rb +57 -21
  147. data/lib/chef/resource/chef_handler.rb +2 -2
  148. data/lib/chef/resource/chef_vault_secret.rb +1 -1
  149. data/lib/chef/resource/cron/_cron_shared.rb +98 -0
  150. data/lib/chef/resource/cron/cron.rb +46 -0
  151. data/lib/chef/resource/{cron_d.rb → cron/cron_d.rb} +7 -87
  152. data/lib/chef/resource/cron_access.rb +11 -3
  153. data/lib/chef/resource/csh.rb +0 -1
  154. data/lib/chef/resource/dmg_package.rb +1 -1
  155. data/lib/chef/resource/execute.rb +478 -8
  156. data/lib/chef/resource/file.rb +10 -8
  157. data/lib/chef/resource/freebsd_package.rb +1 -1
  158. data/lib/chef/resource/gem_package.rb +35 -2
  159. data/lib/chef/resource/helpers/cron_validations.rb +6 -3
  160. data/lib/chef/resource/homebrew_package.rb +30 -1
  161. data/lib/chef/resource/homebrew_update.rb +107 -0
  162. data/lib/chef/resource/hostname.rb +7 -20
  163. data/lib/chef/resource/kernel_module.rb +14 -1
  164. data/lib/chef/resource/launchd.rb +4 -4
  165. data/lib/chef/resource/locale.rb +3 -3
  166. data/lib/chef/resource/macos_userdefaults.rb +14 -9
  167. data/lib/chef/resource/mount.rb +1 -1
  168. data/lib/chef/resource/msu_package.rb +1 -1
  169. data/lib/chef/resource/perl.rb +0 -1
  170. data/lib/chef/resource/plist.rb +23 -4
  171. data/lib/chef/resource/powershell_script.rb +4 -2
  172. data/lib/chef/resource/python.rb +0 -1
  173. data/lib/chef/resource/remote_file.rb +26 -10
  174. data/lib/chef/resource/ruby.rb +0 -1
  175. data/lib/chef/resource/scm/git.rb +1 -1
  176. data/lib/chef/resource/ssh_known_hosts_entry.rb +15 -0
  177. data/lib/chef/resource/sudo.rb +29 -2
  178. data/lib/chef/resource/swap_file.rb +17 -0
  179. data/lib/chef/resource/template.rb +1 -1
  180. data/lib/chef/resource/timezone.rb +15 -0
  181. data/lib/chef/resource/windows_ad_join.rb +30 -1
  182. data/lib/chef/resource/windows_audit_policy.rb +227 -0
  183. data/lib/chef/resource/windows_auto_run.rb +11 -0
  184. data/lib/chef/resource/windows_certificate.rb +27 -1
  185. data/lib/chef/resource/windows_dfs_server.rb +1 -1
  186. data/lib/chef/resource/windows_firewall_rule.rb +2 -2
  187. data/lib/chef/resource/windows_font.rb +3 -3
  188. data/lib/chef/resource/windows_package.rb +3 -3
  189. data/lib/chef/resource/windows_pagefile.rb +2 -2
  190. data/lib/chef/resource/windows_printer.rb +1 -1
  191. data/lib/chef/resource/windows_script.rb +2 -16
  192. data/lib/chef/resource/windows_security_policy.rb +47 -16
  193. data/lib/chef/resource/windows_share.rb +2 -2
  194. data/lib/chef/resource/windows_shortcut.rb +1 -2
  195. data/lib/chef/resource/windows_task.rb +21 -21
  196. data/lib/chef/resource/windows_user_privilege.rb +45 -3
  197. data/lib/chef/resource/yum_repository.rb +9 -9
  198. data/lib/chef/resource_inspector.rb +4 -3
  199. data/lib/chef/resources.rb +4 -2
  200. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  201. data/lib/chef/search/query.rb +1 -1
  202. data/lib/chef/shell/ext.rb +1 -1
  203. data/lib/chef/util/diff.rb +2 -2
  204. data/lib/chef/util/dsc/lcm_output_parser.rb +3 -3
  205. data/lib/chef/util/windows/net_user.rb +1 -1
  206. data/lib/chef/util/windows/volume.rb +1 -1
  207. data/lib/chef/version.rb +1 -1
  208. data/lib/chef/win32/api.rb +2 -2
  209. data/lib/chef/win32/api/error.rb +3 -1
  210. data/lib/chef/win32/api/file.rb +18 -18
  211. data/lib/chef/win32/api/net.rb +1 -0
  212. data/lib/chef/win32/file.rb +1 -1
  213. data/lib/chef/win32/mutex.rb +1 -1
  214. data/lib/chef/win32/net.rb +1 -0
  215. data/lib/chef/win32/process.rb +2 -2
  216. data/lib/chef/win32/registry.rb +2 -2
  217. data/lib/chef/win32/security.rb +1 -1
  218. data/lib/chef/win32/security/sid.rb +4 -4
  219. data/spec/data/lwrp/providers/buck_passer.rb +1 -1
  220. data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
  221. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
  222. data/spec/functional/resource/cron_spec.rb +10 -0
  223. data/spec/functional/resource/dnf_package_spec.rb +2 -2
  224. data/spec/functional/resource/git_spec.rb +6 -6
  225. data/spec/functional/resource/launchd_spec.rb +232 -0
  226. data/spec/functional/resource/remote_file_spec.rb +2 -2
  227. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  228. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  229. data/spec/functional/resource/windows_task_spec.rb +12 -12
  230. data/spec/integration/knife/config_use_profile_spec.rb +55 -2
  231. data/spec/support/chef_helpers.rb +1 -1
  232. data/spec/support/platform_helpers.rb +1 -1
  233. data/spec/support/platforms/win32/spec_service.rb +1 -1
  234. data/spec/support/shared/functional/execute_resource.rb +1 -1
  235. data/spec/support/shared/functional/file_resource.rb +1 -1
  236. data/spec/support/shared/functional/windows_script.rb +1 -1
  237. data/spec/support/shared/unit/execute_resource.rb +1 -1
  238. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
  239. data/spec/unit/application_spec.rb +7 -0
  240. data/spec/unit/data_bag_spec.rb +1 -1
  241. data/spec/unit/http/ssl_policies_spec.rb +20 -0
  242. data/spec/unit/knife/bootstrap_spec.rb +2 -2
  243. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +7 -1
  244. data/spec/unit/knife/role_env_run_list_add_spec.rb +6 -6
  245. data/spec/unit/knife/role_env_run_list_clear_spec.rb +4 -4
  246. data/spec/unit/knife/role_env_run_list_remove_spec.rb +4 -4
  247. data/spec/unit/knife/role_env_run_list_replace_spec.rb +4 -4
  248. data/spec/unit/knife/role_env_run_list_set_spec.rb +4 -4
  249. data/spec/unit/knife/role_run_list_add_spec.rb +6 -6
  250. data/spec/unit/knife/role_run_list_clear_spec.rb +4 -4
  251. data/spec/unit/knife/role_run_list_remove_spec.rb +4 -4
  252. data/spec/unit/knife/role_run_list_replace_spec.rb +4 -4
  253. data/spec/unit/knife/role_run_list_set_spec.rb +4 -4
  254. data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
  255. data/spec/unit/mixin/user_context_spec.rb +1 -9
  256. data/spec/unit/node/attribute_spec.rb +1 -1
  257. data/spec/unit/property_spec.rb +1 -1
  258. data/spec/unit/provider/batch_spec.rb +130 -0
  259. data/spec/unit/provider/cron_spec.rb +9 -49
  260. data/spec/unit/provider/git_spec.rb +3 -3
  261. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  262. data/spec/unit/provider/launchd_spec.rb +8 -50
  263. data/spec/unit/provider/osx_profile_spec.rb +2 -2
  264. data/spec/unit/provider/package/msu_spec.rb +3 -3
  265. data/spec/unit/provider/package/portage_spec.rb +2 -2
  266. data/spec/unit/provider/package/powershell_spec.rb +96 -87
  267. data/spec/unit/provider/package/snap_spec.rb +1 -1
  268. data/spec/unit/provider/powershell_script_spec.rb +3 -45
  269. data/spec/unit/provider/script_spec.rb +20 -110
  270. data/spec/unit/provider/service/gentoo_service_spec.rb +1 -1
  271. data/spec/unit/provider/zypper_repository_spec.rb +60 -10
  272. data/spec/unit/provider_resolver_spec.rb +9 -9
  273. data/spec/unit/resource/archive_file_spec.rb +11 -2
  274. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +17 -7
  275. data/spec/unit/resource/cron_spec.rb +2 -2
  276. data/spec/unit/resource/helpers/cron_validations_spec.rb +5 -1
  277. data/spec/unit/resource/homebrew_update_spec.rb +30 -0
  278. data/spec/unit/resource/powershell_script_spec.rb +10 -15
  279. data/spec/unit/resource/timezone_spec.rb +1 -1
  280. data/spec/unit/resource/windows_audit_policy_spec.rb +64 -0
  281. data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
  282. data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
  283. data/spec/unit/resource/windows_package_spec.rb +10 -0
  284. data/spec/unit/resource/windows_task_spec.rb +1 -1
  285. data/spec/unit/resource/windows_uac_spec.rb +2 -2
  286. data/spec/unit/resource/yum_repository_spec.rb +21 -21
  287. data/spec/unit/resource_spec.rb +67 -1
  288. data/spec/unit/run_context_spec.rb +1 -1
  289. data/spec/unit/util/dsc/configuration_generator_spec.rb +1 -1
  290. data/spec/unit/util/threaded_job_queue_spec.rb +9 -0
  291. data/spec/unit/win32/registry_spec.rb +1 -1
  292. metadata +24 -23
  293. data/lib/chef/resource/cron.rb +0 -157
@@ -25,6 +25,17 @@ class Chef
25
25
 
26
26
  description "Use the **windows_auto_run** resource to set applications to run at login."
27
27
  introduced "14.0"
28
+ examples <<~DOC
29
+ **Run BGInfo at login**
30
+
31
+ ```ruby
32
+ windows_auto_run 'BGINFO' do
33
+ program 'C:/Sysinternals/bginfo.exe'
34
+ args '\'C:/Sysinternals/Config.bgi\' /NOLICPROMPT /TIMER:0'
35
+ action :create
36
+ end
37
+ ```
38
+ DOC
28
39
 
29
40
  property :program_name, String,
30
41
  description: "The name of the program to run at login if it differs from the resource block's name.",
@@ -30,6 +30,32 @@ class Chef
30
30
 
31
31
  description "Use the **windows_certificate** resource to install a certificate into the Windows certificate store from a file. The resource grants read-only access to the private key for designated accounts. Due to current limitations in WinRM, installing certificates remotely may not work if the operation requires a user profile. Operations on the local machine store should still work."
32
32
  introduced "14.7"
33
+ examples <<~DOC
34
+ **Add PFX cert to local machine personal store and grant accounts read-only access to private key**
35
+
36
+ ```ruby
37
+ windows_certificate 'c:/test/mycert.pfx' do
38
+ pfx_password 'password'
39
+ private_key_acl ["acme\\fred", "pc\\jane"]
40
+ end
41
+ ```
42
+
43
+ **Add cert to trusted intermediate store**
44
+
45
+ ```ruby
46
+ windows_certificate 'c:/test/mycert.cer' do
47
+ store_name 'CA'
48
+ end
49
+ ```
50
+
51
+ **Remove all certificates matching the subject**
52
+
53
+ ```ruby
54
+ windows_certificate 'me.acme.com' do
55
+ action :delete
56
+ end
57
+ ```
58
+ DOC
33
59
 
34
60
  property :source, String,
35
61
  description: "The source file (for create and acl_add), thumbprint (for delete and acl_add) or subject (for delete) if it differs from the resource block's name.",
@@ -308,7 +334,7 @@ class Chef
308
334
  #
309
335
  def import_certificates(cert_objs, is_pfx)
310
336
  [cert_objs].flatten.each do |cert_obj|
311
- thumbprint = OpenSSL::Digest::SHA1.new(cert_obj.to_der).to_s # Fetch its thumbprint
337
+ thumbprint = OpenSSL::Digest.new("SHA1", cert_obj.to_der).to_s # Fetch its thumbprint
312
338
  # Need to check if return value is Boolean:true
313
339
  # If not then the given certificate should be added in certstore
314
340
  if verify_cert(thumbprint) == true
@@ -50,7 +50,7 @@ class Chef
50
50
  ps_results = powershell_out("Get-DfsnServerConfiguration -ComputerName '#{ENV["COMPUTERNAME"]}' | Select LdapTimeoutSec, PreferLogonDC, EnableSiteCostedReferrals, SyncIntervalSec, UseFqdn | ConvertTo-Json")
51
51
 
52
52
  if ps_results.error?
53
- raise "The dfs_server resource failed to fetch the current state via the Get-DfsnServerConfiguration PowerShell cmlet. Is the DFS Windows feature installed?"
53
+ raise "The dfs_server resource failed to fetch the current state via the Get-DfsnServerConfiguration PowerShell cmdlet. Is the DFS Windows feature installed?"
54
54
  end
55
55
 
56
56
  Chef::Log.debug("The Get-DfsnServerConfiguration results were #{ps_results.stdout}")
@@ -93,7 +93,7 @@ class Chef
93
93
  description: "The local address the firewall rule applies to."
94
94
 
95
95
  property :local_port, [String, Integer, Array],
96
- # split various formats of comma separated lists and provide a sorted array of strings to match PS output
96
+ # split various formats of comma separated lists and provide a sorted array of strings to match PS output
97
97
  coerce: proc { |d| d.is_a?(String) ? d.split(/\s*,\s*/).sort : Array(d).sort.map(&:to_s) },
98
98
  description: "The local port the firewall rule applies to."
99
99
 
@@ -101,7 +101,7 @@ class Chef
101
101
  description: "The remote address the firewall rule applies to."
102
102
 
103
103
  property :remote_port, [String, Integer, Array],
104
- # split various formats of comma separated lists and provide a sorted array of strings to match PS output
104
+ # split various formats of comma separated lists and provide a sorted array of strings to match PS output
105
105
  coerce: proc { |d| d.is_a?(String) ? d.split(/\s*,\s*/).sort : Array(d).sort.map(&:to_s) },
106
106
  description: "The remote port the firewall rule applies to."
107
107
 
@@ -42,7 +42,7 @@ class Chef
42
42
 
43
43
  property :source, String,
44
44
  description: "A local filesystem path or URI that is used to source the font file.",
45
- coerce: proc { |x| x =~ /^.:.*/ ? x.tr('\\', "/").gsub("//", "/") : x }
45
+ coerce: proc { |x| /^.:.*/.match?(x) ? x.tr('\\', "/").gsub("//", "/") : x }
46
46
 
47
47
  action :install do
48
48
  description "Install a font to the system fonts directory."
@@ -84,7 +84,7 @@ class Chef
84
84
 
85
85
  # install the font into the appropriate fonts directory
86
86
  def install_font
87
- require "win32ole" if RUBY_PLATFORM =~ /mswin|mingw32|windows/
87
+ require "win32ole" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
88
88
  fonts_dir = Chef::Util::PathHelper.join(ENV["windir"], "fonts")
89
89
  folder = WIN32OLE.new("Shell.Application").Namespace(fonts_dir)
90
90
  converge_by("install font #{new_resource.font_name} to #{fonts_dir}") do
@@ -96,7 +96,7 @@ class Chef
96
96
  #
97
97
  # @return [Boolean] Is the font is installed?
98
98
  def font_exists?
99
- require "win32ole" if RUBY_PLATFORM =~ /mswin|mingw32|windows/
99
+ require "win32ole" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
100
100
  fonts_dir = WIN32OLE.new("WScript.Shell").SpecialFolders("Fonts")
101
101
  logger.trace("Seeing if the font at #{Chef::Util::PathHelper.join(fonts_dir, new_resource.font_name)} exists")
102
102
  ::File.exist?(Chef::Util::PathHelper.join(fonts_dir, new_resource.font_name))
@@ -19,7 +19,7 @@
19
19
  require_relative "../mixin/uris"
20
20
  require_relative "package"
21
21
  require_relative "../provider/package/windows"
22
- require_relative "../win32/error" if RUBY_PLATFORM =~ /mswin|mingw|windows/
22
+ require_relative "../win32/error" if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
23
23
  require_relative "../dist"
24
24
 
25
25
  class Chef
@@ -104,8 +104,8 @@ class Chef
104
104
  description: "An optional property to set the package name if it differs from the resource block's name.",
105
105
  identity: true
106
106
 
107
- property :version, String,
108
- description: "The version of a package to be installed or upgraded."
107
+ # we don't redefine the version property as a string here since we store the current value
108
+ # of version and that may be an array if multiple versions of a package are present on the system
109
109
 
110
110
  # windows can't take array options yet
111
111
  property :options, String,
@@ -113,7 +113,7 @@ class Chef
113
113
  # we do this here and not in the property itself because if automatic_managed
114
114
  # is set then this validation is not necessary / doesn't make sense at all
115
115
  def validate_name
116
- return if /^.:.*.sys/ =~ new_resource.path
116
+ return if /^.:.*.sys/.match?(new_resource.path)
117
117
 
118
118
  raise "#{new_resource.path} does not match the format DRIVE:\\path\\file.sys for pagefiles. Example: C:\\pagefile.sys"
119
119
  end
@@ -124,7 +124,7 @@ class Chef
124
124
  # @return [Boolean]
125
125
  def exists?(pagefile)
126
126
  @exists ||= begin
127
- logger.trace("Checking if #{pagefile} exists by runing: wmic.exe pagefileset where SettingID=\"#{get_setting_id(pagefile)}\" list /format:list")
127
+ logger.trace("Checking if #{pagefile} exists by running: wmic.exe pagefileset where SettingID=\"#{get_setting_id(pagefile)}\" list /format:list")
128
128
  cmd = shell_out("wmic.exe pagefileset where SettingID=\"#{get_setting_id(pagefile)}\" list /format:list", returns: [0])
129
129
  cmd.stderr.empty? && (cmd.stdout =~ /SettingID=#{get_setting_id(pagefile)}/i)
130
130
  end
@@ -62,7 +62,7 @@ class Chef
62
62
 
63
63
  property :driver_name, String,
64
64
  description: "The exact name of printer driver installed on the system.",
65
- required: true
65
+ required: [:create]
66
66
 
67
67
  property :location, String,
68
68
  description: "Printer location, such as `Fifth floor copy room`."
@@ -16,34 +16,20 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require_relative "../platform/query_helpers"
20
19
  require_relative "script"
21
20
  require_relative "../mixin/windows_architecture_helper"
22
21
 
23
22
  class Chef
24
23
  class Resource
25
24
  class WindowsScript < Chef::Resource::Script
26
- unified_mode true
25
+ include Chef::Mixin::WindowsArchitectureHelper
27
26
 
28
- provides :windows_script
27
+ unified_mode true
29
28
 
30
29
  # This is an abstract resource meant to be subclasses; thus no 'provides'
31
30
 
32
31
  set_guard_inherited_attributes(:architecture)
33
32
 
34
- protected
35
-
36
- def initialize(name, run_context, resource_name, interpreter_command)
37
- super(name, run_context)
38
- @interpreter = interpreter_command
39
- @resource_name = resource_name if resource_name
40
- @default_guard_interpreter = self.resource_name
41
- end
42
-
43
- include Chef::Mixin::WindowsArchitectureHelper
44
-
45
- public
46
-
47
33
  def architecture(arg = nil)
48
34
  assert_architecture_compatible!(arg) unless arg.nil?
49
35
  result = set_or_return(
@@ -21,28 +21,59 @@ require_relative "../resource"
21
21
  class Chef
22
22
  class Resource
23
23
  class WindowsSecurityPolicy < Chef::Resource
24
- resource_name :windows_security_policy
24
+ provides :windows_security_policy
25
25
 
26
26
  # The valid policy_names options found here
27
27
  # https://github.com/ChrisAWalker/cSecurityOptions under 'AccountSettings'
28
- policy_names = %w{MinimumPasswordAge
29
- MaximumPasswordAge
30
- MinimumPasswordLength
31
- PasswordComplexity
32
- PasswordHistorySize
33
- LockoutBadCount
34
- RequireLogonToChangePassword
35
- ForceLogoffWhenHourExpire
36
- NewAdministratorName
37
- NewGuestName
38
- ClearTextPassword
39
- LSAAnonymousNameLookup
40
- EnableAdminAccount
41
- EnableGuestAccount
42
- }
28
+ policy_names = %w{LockoutDuration
29
+ MaximumPasswordAge
30
+ MinimumPasswordAge
31
+ MinimumPasswordLength
32
+ PasswordComplexity
33
+ PasswordHistorySize
34
+ LockoutBadCount
35
+ ResetLockoutCount
36
+ RequireLogonToChangePassword
37
+ ForceLogoffWhenHourExpire
38
+ NewAdministratorName
39
+ NewGuestName
40
+ ClearTextPassword
41
+ LSAAnonymousNameLookup
42
+ EnableAdminAccount
43
+ EnableGuestAccount
44
+ }
43
45
  description "Use the **windows_security_policy** resource to set a security policy on the Microsoft Windows platform."
44
46
  introduced "16.0"
45
47
 
48
+ examples <<~DOC
49
+ **Set Administrator Account to Enabled**:
50
+
51
+ ```ruby
52
+ windows_security_policy 'EnableAdminAccount' do
53
+ secvalue '1'
54
+ action :set
55
+ end
56
+ ```
57
+
58
+ **Rename Administrator Account**:
59
+
60
+ ```ruby
61
+ windows_security_policy 'NewAdministratorName' do
62
+ secvalue 'AwesomeChefGuy'
63
+ action :set
64
+ end
65
+ ```
66
+
67
+ **Set Guest Account to Disabled**:
68
+
69
+ ```ruby
70
+ windows_security_policy 'EnableGuestAccount' do
71
+ secvalue '0'
72
+ action :set
73
+ end
74
+ ```
75
+ DOC
76
+
46
77
  property :secoption, String, name_property: true, required: true, equal_to: policy_names,
47
78
  description: "The name of the policy to be set on windows platform to maintain its security."
48
79
 
@@ -187,8 +187,8 @@ class Chef
187
187
  [f_users, c_users, r_users]
188
188
  end
189
189
 
190
- # local names are returned from Get-SmbShareAccess in the full format MACHINE\\NAME
191
- # but users of this resource would simply say NAME so we need to strip the values for comparison
190
+ # local names are returned from Get-SmbShareAccess in the full format MACHINE\\NAME
191
+ # but users of this resource would simply say NAME so we need to strip the values for comparison
192
192
  def stripped_account(name)
193
193
  name.slice!("#{node["hostname"]}\\")
194
194
  name
@@ -34,7 +34,6 @@ class Chef
34
34
  description 'Make a shortcut to C:\\original_dir'
35
35
  end
36
36
  ```
37
-
38
37
  DOC
39
38
 
40
39
  property :shortcut_name, String,
@@ -57,7 +56,7 @@ class Chef
57
56
  description: "Icon to use for the shortcut. Accepts the format of `path, index`, where index is the icon file to use. See Microsoft's [documentation](https://msdn.microsoft.com/en-us/library/3s9bx7at.aspx) for details"
58
57
 
59
58
  load_current_value do |desired|
60
- require "win32ole" if RUBY_PLATFORM =~ /mswin|mingw32|windows/
59
+ require "win32ole" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
61
60
 
62
61
  link = WIN32OLE.new("WScript.Shell").CreateShortcut(desired.shortcut_name)
63
62
  name desired.shortcut_name
@@ -189,11 +189,11 @@ class Chef
189
189
  description: "The frequency with which to run the task."
190
190
 
191
191
  property :start_day, String,
192
- description: "Specifies the first date on which the task runs in MM/DD/YYYY format.",
192
+ description: "Specifies the first date on which the task runs in **MM/DD/YYYY** format.",
193
193
  default_description: "The current date."
194
194
 
195
195
  property :start_time, String,
196
- description: "Specifies the start time to run the task, in HH:mm format."
196
+ description: "Specifies the start time to run the task, in **HH:mm** format."
197
197
 
198
198
  property :day, [String, Integer],
199
199
  description: "The day(s) on which the task runs."
@@ -272,16 +272,16 @@ class Chef
272
272
 
273
273
  private
274
274
 
275
- ## Resource is not idempotent when day, start_day is not provided with frequency :weekly
276
- ## we set start_day when not given by user as current date based on which we set the day property for current current date day is monday ..
277
- ## we set the monday as the day so at next run when new_resource.day is nil and current_resource day is monday due to which udpate gets called
275
+ ## Resource is not idempotent when day, start_day is not provided with frequency :weekly
276
+ ## we set start_day when not given by user as current date based on which we set the day property for current current date day is monday ..
277
+ ## we set the monday as the day so at next run when new_resource.day is nil and current_resource day is monday due to which update gets called
278
278
  def idempotency_warning_for_frequency_weekly(day, start_day)
279
279
  if start_day.nil? && day.nil?
280
280
  logger.warn "To maintain idempotency for frequency :weekly provide start_day, start_time and day."
281
281
  end
282
282
  end
283
283
 
284
- # Validate the passed value is numeric values only if it is a string
284
+ # Validate the passed value is numeric values only if it is a string
285
285
  def numeric_value_in_string?(val)
286
286
  return true if Integer(val)
287
287
  rescue ArgumentError
@@ -295,19 +295,19 @@ class Chef
295
295
  end
296
296
 
297
297
  def validate_frequency_monthly(frequency_modifier, months, day)
298
- # validates the frequency :monthly and raises error if frequency_modifier is first, second, thrid etc and day is not provided
298
+ # validates the frequency :monthly and raises error if frequency_modifier is first, second, third etc and day is not provided
299
299
  if (frequency_modifier != 1) && (frequency_modifier_includes_days_of_weeks?(frequency_modifier)) && !(day)
300
- raise ArgumentError, "Please select day on which you want to run the task e.g. 'Mon, Tue'. Multiple values must be seprated by comma."
300
+ raise ArgumentError, "Please select day on which you want to run the task e.g. 'Mon, Tue'. Multiple values must be separated by comma."
301
301
  end
302
302
 
303
- # frequency_modifer 2-12 is used to set every (n) months, so using :months propety with frequency_modifer is not valid since they both used to set months.
304
- # Not checking value 1 here for frequecy_modifier since we are setting that as default value it won't break anything since preference is given to months property
303
+ # frequency_modifier 2-12 is used to set every (n) months, so using :months property with frequency_modifier is not valid since they both used to set months.
304
+ # Not checking value 1 here for frequency_modifier since we are setting that as default value it won't break anything since preference is given to months property
305
305
  if (frequency_modifier.to_i.between?(2, 12)) && !(months.nil?)
306
306
  raise ArgumentError, "For frequency :monthly either use property months or frequency_modifier to set months."
307
307
  end
308
308
  end
309
309
 
310
- # returns true if frequency_modifer has values First, second, third, fourth, last, lastday
310
+ # returns true if frequency_modifier has values First, second, third, fourth, last, lastday
311
311
  def frequency_modifier_includes_days_of_weeks?(frequency_modifier)
312
312
  frequency_modifier = frequency_modifier.to_s.split(",")
313
313
  frequency_modifier.map! { |value| value.strip.upcase }
@@ -322,7 +322,7 @@ class Chef
322
322
  raise ArgumentError, "Invalid value passed for `random_delay`. Please pass seconds as an Integer (e.g. 60) or a String with numeric values only (e.g. '60')." unless numeric_value_in_string?(random_delay)
323
323
  end
324
324
 
325
- # @todo when we drop ruby 2.3 support this should be converted to .match?() instead of =~f
325
+ # @todo when we drop ruby 2.3 support this should be converted to .match?() instead of =~f
326
326
  def validate_start_day(start_day, frequency)
327
327
  if start_day && frequency == :none
328
328
  raise ArgumentError, "`start_day` property is not supported with frequency: #{frequency}"
@@ -330,15 +330,15 @@ class Chef
330
330
 
331
331
  # make sure the start_day is in MM/DD/YYYY format: http://rubular.com/r/cgjHemtWl5
332
332
  if start_day
333
- raise ArgumentError, "`start_day` property must be in the MM/DD/YYYY format." unless %r{^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$} =~ start_day
333
+ raise ArgumentError, "`start_day` property must be in the MM/DD/YYYY format." unless %r{^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$}.match?(start_day)
334
334
  end
335
335
  end
336
336
 
337
- # @todo when we drop ruby 2.3 support this should be converted to .match?() instead of =~
337
+ # @todo when we drop ruby 2.3 support this should be converted to .match?() instead of =~
338
338
  def validate_start_time(start_time, frequency)
339
339
  if start_time
340
340
  raise ArgumentError, "`start_time` property is not supported with `frequency :none`" if frequency == :none
341
- raise ArgumentError, "`start_time` property must be in the HH:mm format (e.g. 6:20pm -> 18:20)." unless /^[0-2][0-9]:[0-5][0-9]$/ =~ start_time
341
+ raise ArgumentError, "`start_time` property must be in the HH:mm format (e.g. 6:20pm -> 18:20)." unless /^[0-2][0-9]:[0-5][0-9]$/.match?(start_time)
342
342
  else
343
343
  raise ArgumentError, "`start_time` needs to be provided with `frequency :once`" if frequency == :once
344
344
  end
@@ -434,7 +434,7 @@ class Chef
434
434
  end
435
435
  end
436
436
 
437
- # This method returns true if day has values from 1-31 which is a days of moths and used with frequency :monthly
437
+ # This method returns true if day has values from 1-31 which is a days of moths and used with frequency :monthly
438
438
  def days_includes_days_of_months?(days)
439
439
  days.map! { |day| day.to_s.strip.downcase }
440
440
  (days - VALID_DAYS_OF_MONTH).empty?
@@ -452,11 +452,11 @@ class Chef
452
452
  end
453
453
  end
454
454
 
455
- # Converts the number of seconds to an ISO8601 duration format and returns it.
456
- # Ref : https://github.com/arnau/ISO8601/blob/master/lib/iso8601/duration.rb#L18-L23
457
- # e.g.
458
- # ISO8601::Duration.new(65707200).to_s
459
- # returns 'PT65707200S'
455
+ # Converts the number of seconds to an ISO8601 duration format and returns it.
456
+ # Ref : https://github.com/arnau/ISO8601/blob/master/lib/iso8601/duration.rb#L18-L23
457
+ # e.g.
458
+ # ISO8601::Duration.new(65707200).to_s
459
+ # returns 'PT65707200S'
460
460
  def sec_to_dur(seconds)
461
461
  ISO8601::Duration.new(seconds.to_i).to_s
462
462
  end
@@ -68,10 +68,52 @@ class Chef
68
68
  }
69
69
 
70
70
  provides :windows_user_privilege
71
- description "The windows_user_privilege resource allows to add and set principal (User/Group) to the specified privilege. \n Ref: https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/user-rights-assignment"
71
+ description "The windows_user_privilege resource allows to add and set principal (User/Group) to the specified privilege.\n Ref: https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/user-rights-assignment"
72
72
 
73
73
  introduced "16.0"
74
74
 
75
+ examples <<~DOC
76
+ **Set the SeNetworkLogonRight Privilege for the Builtin Administrators Group and Authenticated Users**:
77
+
78
+ ```ruby
79
+ windows_user_privilege 'Network Logon Rights' do
80
+ privilege 'SeNetworkLogonRight'
81
+ users ['BUILTIN\\Administrators', 'NT AUTHORITY\\Authenticated Users']
82
+ action :set
83
+ end
84
+ ```
85
+
86
+ **Add the SeDenyRemoteInteractiveLogonRight Privilege to the Builtin Guests and Local Accounts User Groups**:
87
+
88
+ ```ruby
89
+ windows_user_privilege 'Remote interactive logon' do
90
+ privilege 'SeDenyRemoteInteractiveLogonRight'
91
+ users ['Builtin\\Guests', 'NT AUTHORITY\\Local Account']
92
+ action :add
93
+ end
94
+ ```
95
+
96
+ **Provide only the Builtin Guests and Administrator Groups with the SeCreatePageFile Privilege**:
97
+
98
+ ```ruby
99
+ windows_user_privilege 'Create Pagefile' do
100
+ privilege 'SeCreatePagefilePrivilege'
101
+ users ['BUILTIN\\Guests', 'BUILTIN\\Administrators']
102
+ action :set
103
+ end
104
+ ```
105
+
106
+ **Remove the SeCreatePageFile Privilege from the Builtin Guests Group**:
107
+
108
+ ```ruby
109
+ windows_user_privilege 'Create Pagefile' do
110
+ privilege 'SeCreatePagefilePrivilege'
111
+ users ['BUILTIN\\Guests']
112
+ action :remove
113
+ end
114
+ ```
115
+ DOC
116
+
75
117
  property :principal, String,
76
118
  description: "An optional property to add the user to the given privilege. Use only with add and remove action.",
77
119
  name_property: true
@@ -84,8 +126,8 @@ class Chef
84
126
  required: true,
85
127
  coerce: proc { |v| v.is_a?(String) ? Array[v] : v },
86
128
  callbacks: {
87
- "Option privilege must include any of the: #{privilege_opts}" => lambda {
88
- |v| (privilege_opts & v).size == v.size
129
+ "Option privilege must include any of the: #{privilege_opts}" => lambda { |v|
130
+ (privilege_opts & v).size == v.size
89
131
  },
90
132
  }
91
133