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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (513) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -7
  3. data/README.md +1 -1
  4. data/Rakefile +44 -16
  5. data/chef.gemspec +6 -4
  6. data/distro/powershell/chef/chef.psm1 +3 -3
  7. data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
  8. data/lib/chef/action_collection.rb +16 -5
  9. data/lib/chef/application.rb +33 -54
  10. data/lib/chef/application/apply.rb +18 -1
  11. data/lib/chef/application/base.rb +8 -3
  12. data/lib/chef/application/knife.rb +1 -1
  13. data/lib/chef/chef_class.rb +4 -4
  14. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +6 -2
  17. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +3 -3
  18. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  19. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  20. data/lib/chef/chef_fs/path_utils.rb +3 -3
  21. data/lib/chef/client.rb +16 -14
  22. data/lib/chef/config.rb +1 -1
  23. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  24. data/lib/chef/cookbook/gem_installer.rb +1 -1
  25. data/lib/chef/cookbook/metadata.rb +45 -22
  26. data/lib/chef/cookbook_loader.rb +1 -1
  27. data/lib/chef/cookbook_manifest.rb +1 -1
  28. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  29. data/lib/chef/cookbook_version.rb +38 -3
  30. data/lib/chef/data_collector.rb +1 -1
  31. data/lib/chef/data_collector/error_handlers.rb +1 -1
  32. data/lib/chef/data_collector/run_end_message.rb +7 -1
  33. data/lib/chef/decorator/lazy_array.rb +2 -2
  34. data/lib/chef/deprecated.rb +4 -0
  35. data/lib/chef/digester.rb +4 -4
  36. data/lib/chef/dist.rb +8 -0
  37. data/lib/chef/dsl/chef_vault.rb +84 -0
  38. data/lib/chef/dsl/declare_resource.rb +7 -5
  39. data/lib/chef/dsl/platform_introspection.rb +3 -2
  40. data/lib/chef/dsl/recipe.rb +7 -12
  41. data/lib/chef/dsl/universal.rb +3 -7
  42. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  43. data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
  44. data/lib/chef/event_dispatch/base.rb +3 -0
  45. data/lib/chef/formatters/base.rb +1 -1
  46. data/lib/chef/formatters/doc.rb +1 -1
  47. data/lib/chef/formatters/indentable_output_stream.rb +7 -16
  48. data/lib/chef/http.rb +1 -1
  49. data/lib/chef/http/decompressor.rb +1 -1
  50. data/lib/chef/http/http_request.rb +3 -2
  51. data/lib/chef/json_compat.rb +1 -1
  52. data/lib/chef/key.rb +1 -1
  53. data/lib/chef/knife.rb +2 -4
  54. data/lib/chef/knife/acl_add.rb +57 -0
  55. data/lib/chef/knife/acl_base.rb +183 -0
  56. data/lib/chef/knife/acl_bulk_add.rb +78 -0
  57. data/lib/chef/knife/acl_bulk_remove.rb +83 -0
  58. data/lib/chef/knife/acl_remove.rb +62 -0
  59. data/lib/chef/knife/acl_show.rb +56 -0
  60. data/lib/chef/knife/bootstrap.rb +84 -90
  61. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +2 -2
  62. data/lib/chef/knife/bootstrap/client_builder.rb +2 -2
  63. data/lib/chef/knife/bootstrap/templates/chef-full.erb +11 -11
  64. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +12 -12
  65. data/lib/chef/knife/core/bootstrap_context.rb +63 -60
  66. data/lib/chef/knife/core/generic_presenter.rb +4 -3
  67. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  68. data/lib/chef/knife/core/node_presenter.rb +2 -2
  69. data/lib/chef/knife/core/status_presenter.rb +5 -5
  70. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  71. data/lib/chef/knife/core/ui.rb +17 -1
  72. data/lib/chef/knife/core/windows_bootstrap_context.rb +44 -42
  73. data/lib/chef/knife/data_bag_secret_options.rb +18 -45
  74. data/lib/chef/knife/group_add.rb +55 -0
  75. data/lib/chef/knife/{cookbook_site_download.rb → group_create.rb} +21 -12
  76. data/lib/chef/knife/group_destroy.rb +53 -0
  77. data/lib/chef/knife/{cookbook_site_list.rb → group_list.rb} +14 -11
  78. data/lib/chef/knife/group_remove.rb +56 -0
  79. data/lib/chef/knife/{cookbook_site_install.rb → group_show.rb} +21 -12
  80. data/lib/chef/knife/key_create_base.rb +1 -1
  81. data/lib/chef/knife/key_edit_base.rb +1 -1
  82. data/lib/chef/knife/ssh.rb +12 -31
  83. data/lib/chef/knife/status.rb +3 -3
  84. data/lib/chef/knife/supermarket_download.rb +1 -2
  85. data/lib/chef/knife/supermarket_install.rb +2 -3
  86. data/lib/chef/knife/supermarket_list.rb +1 -2
  87. data/lib/chef/knife/supermarket_search.rb +1 -2
  88. data/lib/chef/knife/supermarket_share.rb +1 -2
  89. data/lib/chef/knife/supermarket_show.rb +1 -2
  90. data/lib/chef/knife/supermarket_unshare.rb +1 -2
  91. data/lib/chef/knife/{cookbook_site_show.rb → user_dissociate.rb} +15 -13
  92. data/lib/chef/knife/{cookbook_site_search.rb → user_invite_add.rb} +16 -13
  93. data/lib/chef/knife/user_invite_list.rb +34 -0
  94. data/lib/chef/knife/user_invite_rescind.rb +63 -0
  95. data/lib/chef/knife/yaml_convert.rb +91 -0
  96. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  97. data/lib/chef/mixin/checksum.rb +0 -1
  98. data/lib/chef/mixin/openssl_helper.rb +4 -4
  99. data/lib/chef/mixin/powershell_exec.rb +10 -1
  100. data/lib/chef/mixin/powershell_out.rb +1 -1
  101. data/lib/chef/mixin/properties.rb +16 -2
  102. data/lib/chef/mixin/shell_out.rb +1 -5
  103. data/lib/chef/monkey_patches/net_http.rb +0 -4
  104. data/lib/chef/node.rb +18 -6
  105. data/lib/chef/node/attribute.rb +2 -2
  106. data/lib/chef/node/immutable_collections.rb +1 -1
  107. data/lib/chef/node/mixin/immutablize_array.rb +4 -0
  108. data/lib/chef/node/mixin/immutablize_hash.rb +3 -0
  109. data/lib/chef/node_map.rb +5 -31
  110. data/lib/chef/platform/priority_map.rb +4 -4
  111. data/lib/chef/platform/query_helpers.rb +6 -34
  112. data/lib/chef/policy_builder/policyfile.rb +1 -1
  113. data/lib/chef/powershell.rb +14 -0
  114. data/lib/chef/property.rb +24 -6
  115. data/lib/chef/provider.rb +40 -6
  116. data/lib/chef/provider/cron.rb +2 -2
  117. data/lib/chef/provider/directory.rb +3 -3
  118. data/lib/chef/provider/dsc_resource.rb +1 -1
  119. data/lib/chef/provider/dsc_script.rb +1 -1
  120. data/lib/chef/provider/execute.rb +3 -9
  121. data/lib/chef/provider/file.rb +6 -6
  122. data/lib/chef/provider/git.rb +84 -27
  123. data/lib/chef/provider/group.rb +4 -4
  124. data/lib/chef/provider/http_request.rb +6 -6
  125. data/lib/chef/provider/ifconfig.rb +4 -4
  126. data/lib/chef/provider/launchd.rb +45 -64
  127. data/lib/chef/provider/link.rb +2 -2
  128. data/lib/chef/provider/mount.rb +5 -5
  129. data/lib/chef/provider/osx_profile.rb +7 -3
  130. data/lib/chef/provider/package.rb +2 -2
  131. data/lib/chef/provider/package/cab.rb +5 -6
  132. data/lib/chef/provider/package/chocolatey.rb +1 -3
  133. data/lib/chef/provider/package/dnf.rb +66 -10
  134. data/lib/chef/provider/package/dnf/dnf_helper.py +85 -26
  135. data/lib/chef/provider/package/dnf/python_helper.rb +79 -36
  136. data/lib/chef/provider/package/dnf/version.rb +5 -1
  137. data/lib/chef/provider/package/dpkg.rb +1 -1
  138. data/lib/chef/provider/package/freebsd/base.rb +2 -1
  139. data/lib/chef/provider/package/homebrew.rb +107 -43
  140. data/lib/chef/provider/package/macports.rb +0 -2
  141. data/lib/chef/provider/package/msu.rb +4 -1
  142. data/lib/chef/provider/package/pacman.rb +25 -34
  143. data/lib/chef/provider/package/portage.rb +1 -0
  144. data/lib/chef/provider/package/powershell.rb +1 -1
  145. data/lib/chef/provider/package/rubygems.rb +30 -3
  146. data/lib/chef/provider/package/windows.rb +29 -53
  147. data/lib/chef/provider/package/windows/msi.rb +2 -2
  148. data/lib/chef/provider/package/yum.rb +1 -9
  149. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  150. data/lib/chef/provider/package/zypper.rb +0 -1
  151. data/lib/chef/provider/powershell_script.rb +5 -11
  152. data/lib/chef/provider/registry_key.rb +4 -4
  153. data/lib/chef/provider/remote_directory.rb +5 -5
  154. data/lib/chef/provider/remote_file/ftp.rb +3 -2
  155. data/lib/chef/provider/remote_file/local_file.rb +2 -1
  156. data/lib/chef/provider/remote_file/sftp.rb +3 -2
  157. data/lib/chef/provider/route.rb +5 -3
  158. data/lib/chef/provider/ruby_block.rb +1 -1
  159. data/lib/chef/provider/script.rb +2 -2
  160. data/lib/chef/provider/service.rb +8 -8
  161. data/lib/chef/provider/service/aixinit.rb +1 -1
  162. data/lib/chef/provider/service/arch.rb +1 -1
  163. data/lib/chef/provider/service/debian.rb +30 -28
  164. data/lib/chef/provider/service/macosx.rb +16 -10
  165. data/lib/chef/provider/service/systemd.rb +12 -12
  166. data/lib/chef/provider/service/upstart.rb +1 -1
  167. data/lib/chef/provider/service/windows.rb +5 -11
  168. data/lib/chef/provider/subversion.rb +25 -5
  169. data/lib/chef/provider/systemd_unit.rb +26 -25
  170. data/lib/chef/provider/user.rb +6 -6
  171. data/lib/chef/provider/user/aix.rb +1 -1
  172. data/lib/chef/provider/user/dscl.rb +6 -6
  173. data/lib/chef/provider/user/mac.rb +20 -15
  174. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  175. data/lib/chef/provider/windows_env.rb +3 -3
  176. data/lib/chef/provider/windows_script.rb +2 -2
  177. data/lib/chef/provider/windows_task.rb +10 -10
  178. data/lib/chef/providers.rb +0 -6
  179. data/lib/chef/recipe.rb +36 -0
  180. data/lib/chef/resource.rb +44 -57
  181. data/lib/chef/resource/action_class.rb +24 -22
  182. data/lib/chef/resource/alternatives.rb +210 -0
  183. data/lib/chef/resource/apt_package.rb +33 -3
  184. data/lib/chef/resource/apt_preference.rb +103 -7
  185. data/lib/chef/resource/apt_repository.rb +357 -18
  186. data/lib/chef/resource/apt_update.rb +58 -5
  187. data/lib/chef/resource/archive_file.rb +6 -5
  188. data/lib/chef/resource/bash.rb +3 -1
  189. data/lib/chef/resource/batch.rb +1 -1
  190. data/lib/chef/resource/bff_package.rb +10 -2
  191. data/lib/chef/resource/breakpoint.rb +1 -2
  192. data/lib/chef/resource/build_essential.rb +49 -51
  193. data/lib/chef/resource/cab_package.rb +9 -2
  194. data/lib/chef/resource/chef_client_cron.rb +228 -0
  195. data/lib/chef/resource/chef_client_scheduled_task.rb +201 -0
  196. data/lib/chef/resource/chef_client_systemd_timer.rb +180 -0
  197. data/lib/chef/resource/chef_gem.rb +15 -18
  198. data/lib/chef/resource/chef_handler.rb +5 -4
  199. data/lib/chef/resource/chef_sleep.rb +7 -5
  200. data/lib/chef/resource/chef_vault_secret.rb +135 -0
  201. data/lib/chef/resource/chocolatey_config.rb +8 -4
  202. data/lib/chef/resource/chocolatey_feature.rb +7 -4
  203. data/lib/chef/resource/chocolatey_package.rb +7 -4
  204. data/lib/chef/resource/chocolatey_source.rb +7 -4
  205. data/lib/chef/resource/cookbook_file.rb +4 -3
  206. data/lib/chef/resource/cron.rb +34 -80
  207. data/lib/chef/resource/cron_access.rb +10 -6
  208. data/lib/chef/resource/cron_d.rb +44 -95
  209. data/lib/chef/resource/csh.rb +3 -1
  210. data/lib/chef/resource/directory.rb +3 -3
  211. data/lib/chef/resource/dmg_package.rb +22 -19
  212. data/lib/chef/resource/dnf_package.rb +3 -4
  213. data/lib/chef/resource/dpkg_package.rb +3 -2
  214. data/lib/chef/resource/dsc_resource.rb +6 -4
  215. data/lib/chef/resource/dsc_script.rb +3 -2
  216. data/lib/chef/resource/execute.rb +15 -14
  217. data/lib/chef/resource/file.rb +14 -9
  218. data/lib/chef/resource/freebsd_package.rb +3 -2
  219. data/lib/chef/resource/gem_package.rb +19 -11
  220. data/lib/chef/resource/group.rb +5 -2
  221. data/lib/chef/resource/helpers/cron_validations.rb +98 -0
  222. data/lib/chef/resource/homebrew_cask.rb +3 -2
  223. data/lib/chef/resource/homebrew_package.rb +5 -3
  224. data/lib/chef/resource/homebrew_tap.rb +3 -2
  225. data/lib/chef/resource/hostname.rb +26 -20
  226. data/lib/chef/resource/http_request.rb +1 -2
  227. data/lib/chef/resource/ifconfig.rb +8 -8
  228. data/lib/chef/resource/ips_package.rb +11 -3
  229. data/lib/chef/resource/kernel_module.rb +30 -30
  230. data/lib/chef/resource/ksh.rb +3 -1
  231. data/lib/chef/resource/launchd.rb +3 -3
  232. data/lib/chef/resource/link.rb +5 -27
  233. data/lib/chef/resource/locale.rb +60 -26
  234. data/lib/chef/resource/log.rb +13 -2
  235. data/lib/chef/resource/lwrp_base.rb +1 -1
  236. data/lib/chef/resource/macos_userdefaults.rb +18 -10
  237. data/lib/chef/resource/macosx_service.rb +3 -2
  238. data/lib/chef/resource/macports_package.rb +10 -2
  239. data/lib/chef/resource/mdadm.rb +63 -3
  240. data/lib/chef/resource/mount.rb +4 -1
  241. data/lib/chef/resource/msu_package.rb +19 -2
  242. data/lib/chef/resource/notify_group.rb +8 -3
  243. data/lib/chef/resource/ohai.rb +20 -4
  244. data/lib/chef/resource/ohai_hint.rb +4 -13
  245. data/lib/chef/resource/openbsd_package.rb +10 -2
  246. data/lib/chef/resource/openssl_dhparam.rb +11 -2
  247. data/lib/chef/resource/openssl_ec_private_key.rb +24 -2
  248. data/lib/chef/resource/openssl_ec_public_key.rb +22 -2
  249. data/lib/chef/resource/openssl_rsa_private_key.rb +21 -2
  250. data/lib/chef/resource/openssl_rsa_public_key.rb +23 -2
  251. data/lib/chef/resource/openssl_x509_certificate.rb +38 -2
  252. data/lib/chef/resource/openssl_x509_crl.rb +13 -2
  253. data/lib/chef/resource/openssl_x509_request.rb +38 -2
  254. data/lib/chef/resource/osx_profile.rb +4 -3
  255. data/lib/chef/resource/package.rb +3 -2
  256. data/lib/chef/resource/pacman_package.rb +3 -2
  257. data/lib/chef/resource/paludis_package.rb +13 -4
  258. data/lib/chef/resource/perl.rb +3 -1
  259. data/lib/chef/resource/plist.rb +207 -0
  260. data/lib/chef/resource/portage_package.rb +14 -4
  261. data/lib/chef/resource/powershell_package.rb +2 -4
  262. data/lib/chef/resource/powershell_package_source.rb +4 -2
  263. data/lib/chef/resource/powershell_script.rb +8 -18
  264. data/lib/chef/resource/python.rb +3 -1
  265. data/lib/chef/resource/reboot.rb +1 -2
  266. data/lib/chef/resource/registry_key.rb +2 -3
  267. data/lib/chef/resource/remote_directory.rb +3 -1
  268. data/lib/chef/resource/remote_file.rb +3 -2
  269. data/lib/chef/resource/rhsm_errata.rb +1 -4
  270. data/lib/chef/resource/rhsm_errata_level.rb +1 -2
  271. data/lib/chef/resource/rhsm_register.rb +3 -3
  272. data/lib/chef/resource/rhsm_repo.rb +4 -3
  273. data/lib/chef/resource/rhsm_subscription.rb +5 -4
  274. data/lib/chef/resource/route.rb +6 -2
  275. data/lib/chef/resource/rpm_package.rb +13 -3
  276. data/lib/chef/resource/ruby.rb +3 -1
  277. data/lib/chef/resource/ruby_block.rb +2 -5
  278. data/lib/chef/resource/scm/_scm.rb +49 -0
  279. data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
  280. data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +10 -7
  281. data/lib/chef/resource/script.rb +7 -4
  282. data/lib/chef/resource/service.rb +7 -8
  283. data/lib/chef/resource/smartos_package.rb +10 -2
  284. data/lib/chef/resource/snap_package.rb +4 -2
  285. data/lib/chef/resource/solaris_package.rb +10 -2
  286. data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
  287. data/lib/chef/resource/sudo.rb +11 -11
  288. data/lib/chef/resource/support/cron.d.erb +1 -1
  289. data/lib/chef/resource/support/cron_access.erb +1 -1
  290. data/lib/chef/resource/support/sudoer.erb +1 -2
  291. data/lib/chef/resource/support/ulimit.erb +41 -0
  292. data/lib/chef/resource/swap_file.rb +7 -5
  293. data/lib/chef/resource/sysctl.rb +63 -4
  294. data/lib/chef/resource/systemd_unit.rb +6 -4
  295. data/lib/chef/resource/template.rb +0 -1
  296. data/lib/chef/resource/timezone.rb +8 -19
  297. data/lib/chef/resource/user.rb +3 -5
  298. data/lib/chef/resource/user/aix_user.rb +0 -2
  299. data/lib/chef/resource/user/dscl_user.rb +1 -1
  300. data/lib/chef/resource/user/linux_user.rb +0 -2
  301. data/lib/chef/resource/user/mac_user.rb +1 -1
  302. data/lib/chef/resource/user/pw_user.rb +0 -2
  303. data/lib/chef/resource/user/solaris_user.rb +0 -2
  304. data/lib/chef/resource/user/windows_user.rb +0 -2
  305. data/lib/chef/resource/user_ulimit.rb +116 -0
  306. data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
  307. data/lib/chef/resource/windows_ad_join.rb +20 -7
  308. data/lib/chef/resource/windows_auto_run.rb +2 -3
  309. data/lib/chef/resource/windows_certificate.rb +3 -3
  310. data/lib/chef/resource/windows_dfs_folder.rb +1 -2
  311. data/lib/chef/resource/windows_dfs_namespace.rb +1 -2
  312. data/lib/chef/resource/windows_dfs_server.rb +2 -3
  313. data/lib/chef/resource/windows_dns_record.rb +0 -1
  314. data/lib/chef/resource/windows_dns_zone.rb +0 -1
  315. data/lib/chef/resource/windows_env.rb +12 -4
  316. data/lib/chef/resource/windows_feature.rb +59 -4
  317. data/lib/chef/resource/windows_feature_dism.rb +24 -24
  318. data/lib/chef/resource/windows_feature_powershell.rb +44 -78
  319. data/lib/chef/resource/windows_firewall_rule.rb +121 -8
  320. data/lib/chef/resource/windows_font.rb +10 -2
  321. data/lib/chef/resource/windows_package.rb +76 -7
  322. data/lib/chef/resource/windows_pagefile.rb +31 -4
  323. data/lib/chef/resource/windows_path.rb +18 -2
  324. data/lib/chef/resource/windows_printer.rb +26 -7
  325. data/lib/chef/resource/windows_printer_port.rb +29 -2
  326. data/lib/chef/resource/windows_script.rb +3 -4
  327. data/lib/chef/resource/windows_security_policy.rb +119 -0
  328. data/lib/chef/resource/windows_service.rb +46 -32
  329. data/lib/chef/resource/windows_share.rb +22 -6
  330. data/lib/chef/resource/windows_shortcut.rb +13 -3
  331. data/lib/chef/resource/windows_task.rb +129 -16
  332. data/lib/chef/resource/windows_uac.rb +20 -2
  333. data/lib/chef/resource/windows_user_privilege.rb +199 -0
  334. data/lib/chef/resource/windows_workgroup.rb +19 -4
  335. data/lib/chef/resource/yum_package.rb +91 -7
  336. data/lib/chef/resource/yum_repository.rb +30 -12
  337. data/lib/chef/resource/zypper_package.rb +32 -5
  338. data/lib/chef/resource/zypper_repository.rb +19 -6
  339. data/lib/chef/resource_builder.rb +8 -0
  340. data/lib/chef/resource_inspector.rb +3 -2
  341. data/lib/chef/resource_resolver.rb +7 -14
  342. data/lib/chef/resources.rb +11 -3
  343. data/lib/chef/run_context/cookbook_compiler.rb +29 -5
  344. data/lib/chef/scan_access_control.rb +1 -1
  345. data/lib/chef/shell.rb +22 -0
  346. data/lib/chef/shell/ext.rb +1 -1
  347. data/lib/chef/version.rb +1 -1
  348. data/lib/chef/win32/api.rb +2 -2
  349. data/lib/chef/win32/api/error.rb +3 -1
  350. data/lib/chef/win32/api/file.rb +1 -1
  351. data/lib/chef/win32/api/net.rb +1 -0
  352. data/lib/chef/win32/api/security.rb +6 -0
  353. data/lib/chef/win32/file.rb +1 -9
  354. data/lib/chef/win32/mutex.rb +1 -1
  355. data/lib/chef/win32/net.rb +1 -0
  356. data/lib/chef/win32/security.rb +40 -2
  357. data/lib/chef/win32/security/sid.rb +4 -4
  358. data/spec/functional/assets/inittest +8 -7
  359. data/spec/functional/knife/ssh_spec.rb +23 -19
  360. data/spec/functional/resource/cron_spec.rb +10 -29
  361. data/spec/functional/resource/dnf_package_spec.rb +441 -156
  362. data/spec/functional/resource/git_spec.rb +184 -134
  363. data/spec/functional/resource/insserv_spec.rb +1 -1
  364. data/spec/functional/resource/launchd_spec.rb +232 -0
  365. data/spec/functional/resource/link_spec.rb +3 -3
  366. data/spec/functional/resource/locale_spec.rb +13 -2
  367. data/spec/functional/resource/msu_package_spec.rb +5 -2
  368. data/spec/functional/resource/powershell_script_spec.rb +7 -68
  369. data/spec/functional/resource/remote_file_spec.rb +1 -1
  370. data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
  371. data/spec/functional/resource/windows_task_spec.rb +4 -4
  372. data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
  373. data/spec/functional/run_lock_spec.rb +1 -1
  374. data/spec/functional/shell_spec.rb +1 -1
  375. data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
  376. data/spec/functional/version_spec.rb +1 -1
  377. data/spec/functional/win32/registry_spec.rb +0 -6
  378. data/spec/functional/win32/security_spec.rb +22 -0
  379. data/spec/integration/client/client_spec.rb +123 -2
  380. data/spec/integration/knife/cookbook_show_spec.rb +28 -26
  381. data/spec/integration/knife/data_bag_show_spec.rb +1 -1
  382. data/spec/integration/knife/raw_spec.rb +34 -6
  383. data/spec/integration/knife/redirection_spec.rb +2 -2
  384. data/spec/integration/knife/show_spec.rb +32 -3
  385. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +3 -3
  386. data/spec/integration/recipes/noop_resource_spec.rb +1 -1
  387. data/spec/integration/recipes/notifies_spec.rb +49 -20
  388. data/spec/integration/recipes/notifying_block_spec.rb +8 -5
  389. data/spec/integration/recipes/provider_choice.rb +2 -0
  390. data/spec/integration/recipes/recipe_dsl_spec.rb +45 -143
  391. data/spec/integration/recipes/resource_action_spec.rb +16 -11
  392. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -1
  393. data/spec/integration/recipes/resource_load_spec.rb +133 -12
  394. data/spec/integration/recipes/use_partial_spec.rb +112 -0
  395. data/spec/integration/solo/solo_spec.rb +3 -3
  396. data/spec/spec_helper.rb +18 -3
  397. data/spec/support/chef_helpers.rb +2 -2
  398. data/spec/support/lib/chef/resource/zen_follower.rb +2 -0
  399. data/spec/support/platform_helpers.rb +2 -20
  400. data/spec/support/recipe_dsl_helper.rb +83 -0
  401. data/spec/support/shared/functional/http.rb +2 -2
  402. data/spec/support/shared/functional/windows_script.rb +3 -16
  403. data/spec/support/shared/integration/knife_support.rb +9 -6
  404. data/spec/support/shared/unit/mock_shellout.rb +1 -1
  405. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
  406. data/spec/unit/application/apply_spec.rb +3 -0
  407. data/spec/unit/application/client_spec.rb +5 -1
  408. data/spec/unit/application_spec.rb +1 -2
  409. data/spec/unit/client_spec.rb +7 -5
  410. data/spec/unit/cookbook/gem_installer_spec.rb +2 -2
  411. data/spec/unit/cookbook/metadata_spec.rb +38 -19
  412. data/spec/unit/data_collector_spec.rb +39 -18
  413. data/spec/unit/file_access_control_spec.rb +1 -1
  414. data/spec/unit/json_compat_spec.rb +1 -1
  415. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +15 -15
  416. data/spec/unit/knife/bootstrap/client_builder_spec.rb +9 -9
  417. data/spec/unit/knife/bootstrap_spec.rb +20 -38
  418. data/spec/unit/knife/cookbook_show_spec.rb +1 -0
  419. data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
  420. data/spec/unit/knife/core/ui_spec.rb +16 -0
  421. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +9 -63
  422. data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
  423. data/spec/unit/knife/ssh_spec.rb +8 -111
  424. data/spec/unit/knife/status_spec.rb +1 -1
  425. data/spec/unit/knife_spec.rb +18 -0
  426. data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
  427. data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
  428. data/spec/unit/mixin/shell_out_spec.rb +25 -31
  429. data/spec/unit/node/attribute_spec.rb +3 -3
  430. data/spec/unit/node_spec.rb +24 -0
  431. data/spec/unit/platform/query_helpers_spec.rb +0 -143
  432. data/spec/unit/property/state_spec.rb +12 -7
  433. data/spec/unit/property/validation_spec.rb +25 -1
  434. data/spec/unit/property_spec.rb +12 -9
  435. data/spec/unit/provider/apt_preference_spec.rb +14 -10
  436. data/spec/unit/provider/apt_repository_spec.rb +34 -36
  437. data/spec/unit/provider/apt_update_spec.rb +12 -11
  438. data/spec/unit/provider/cookbook_file_spec.rb +4 -4
  439. data/spec/unit/provider/cron_spec.rb +2 -2
  440. data/spec/unit/provider/directory_spec.rb +4 -15
  441. data/spec/unit/provider/file_spec.rb +4 -4
  442. data/spec/unit/provider/git_spec.rb +41 -1
  443. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  444. data/spec/unit/provider/launchd_spec.rb +8 -50
  445. data/spec/unit/provider/link_spec.rb +0 -1
  446. data/spec/unit/provider/log_spec.rb +3 -3
  447. data/spec/unit/provider/mdadm_spec.rb +3 -3
  448. data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
  449. data/spec/unit/provider/package/homebrew_spec.rb +280 -174
  450. data/spec/unit/provider/package/pacman_spec.rb +65 -147
  451. data/spec/unit/provider/package/portage_spec.rb +2 -2
  452. data/spec/unit/provider/package/powershell_spec.rb +3 -2
  453. data/spec/unit/provider/package/rubygems_spec.rb +211 -26
  454. data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
  455. data/spec/unit/provider/powershell_script_spec.rb +21 -61
  456. data/spec/unit/provider/remote_file_spec.rb +3 -4
  457. data/spec/unit/provider/service/debian_service_spec.rb +34 -13
  458. data/spec/unit/provider/service/macosx_spec.rb +210 -214
  459. data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
  460. data/spec/unit/provider/subversion_spec.rb +4 -2
  461. data/spec/unit/provider/template_spec.rb +3 -4
  462. data/spec/unit/provider/zypper_repository_spec.rb +17 -17
  463. data/spec/unit/provider_resolver_spec.rb +4 -4
  464. data/spec/unit/recipe_spec.rb +68 -0
  465. data/spec/unit/resource/alternatives_spec.rb +120 -0
  466. data/spec/unit/resource/apt_preference_spec.rb +0 -18
  467. data/spec/unit/resource/apt_repository_spec.rb +0 -18
  468. data/spec/unit/resource/apt_update_spec.rb +0 -18
  469. data/spec/unit/resource/chef_client_cron_spec.rb +119 -0
  470. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +102 -0
  471. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +70 -0
  472. data/spec/unit/resource/chef_vault_secret_spec.rb +40 -0
  473. data/spec/unit/resource/chocolatey_source_spec.rb +2 -1
  474. data/spec/unit/resource/cron_d_spec.rb +6 -48
  475. data/spec/unit/resource/cron_spec.rb +4 -10
  476. data/spec/unit/resource/gem_package_spec.rb +3 -3
  477. data/spec/unit/resource/helpers/cron_validations_spec.rb +77 -0
  478. data/spec/unit/resource/link_spec.rb +0 -4
  479. data/spec/unit/resource/locale_spec.rb +0 -34
  480. data/spec/unit/resource/msu_package_spec.rb +4 -0
  481. data/spec/unit/resource/ohai_spec.rb +56 -2
  482. data/spec/unit/resource/plist_spec.rb +130 -0
  483. data/spec/unit/resource/powershell_script_spec.rb +0 -5
  484. data/spec/unit/resource/{git_spec.rb → scm/git_spec.rb} +50 -2
  485. data/spec/unit/resource/{scm_spec.rb → scm/scm.rb} +1 -52
  486. data/spec/unit/resource/{subversion_spec.rb → scm/subversion_spec.rb} +2 -3
  487. data/spec/unit/resource/service_spec.rb +4 -0
  488. data/spec/unit/resource/user_spec.rb +2 -2
  489. data/spec/unit/resource/user_ulimit_spec.rb +53 -0
  490. data/spec/unit/resource/windows_feature_dism_spec.rb +2 -17
  491. data/spec/unit/resource/windows_feature_powershell_spec.rb +2 -17
  492. data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
  493. data/spec/unit/resource/windows_package_spec.rb +14 -0
  494. data/spec/unit/resource/windows_service_spec.rb +9 -0
  495. data/spec/unit/resource_reporter_spec.rb +2 -6
  496. data/spec/unit/resource_spec.rb +10 -3
  497. data/spec/unit/run_lock_spec.rb +1 -1
  498. data/spec/unit/scan_access_control_spec.rb +1 -1
  499. data/spec/unit/search/query_spec.rb +1 -1
  500. data/spec/unit/win32/registry_spec.rb +1 -1
  501. data/tasks/rspec.rb +6 -14
  502. metadata +92 -37
  503. data/lib/chef/dsl/core.rb +0 -52
  504. data/lib/chef/knife/cookbook_site_share.rb +0 -41
  505. data/lib/chef/knife/cookbook_site_unshare.rb +0 -41
  506. data/lib/chef/provider/apt_preference.rb +0 -93
  507. data/lib/chef/provider/apt_repository.rb +0 -358
  508. data/lib/chef/provider/apt_update.rb +0 -79
  509. data/lib/chef/provider/log.rb +0 -43
  510. data/lib/chef/provider/mdadm.rb +0 -85
  511. data/lib/chef/provider/ohai.rb +0 -45
  512. data/lib/chef/resource/git.rb +0 -37
  513. data/spec/unit/provider/ohai_spec.rb +0 -84
@@ -24,10 +24,9 @@ class Chef
24
24
  class HttpRequest < Chef::Resource
25
25
  unified_mode true
26
26
 
27
- resource_name :http_request
28
27
  provides :http_request
29
28
 
30
- description "Use the http_request resource to send an HTTP request (GET, PUT, POST, DELETE, HEAD, or OPTIONS) with an arbitrary message. This resource is often useful when custom callbacks are necessary."
29
+ description "Use the **http_request** resource to send an HTTP request (GET, PUT, POST, DELETE, HEAD, or OPTIONS) with an arbitrary message. This resource is often useful when custom callbacks are necessary."
31
30
 
32
31
  default_action :get
33
32
  allowed_actions :get, :patch, :put, :post, :delete, :head, :options
@@ -28,9 +28,9 @@ class Chef
28
28
  class Ifconfig < Chef::Resource
29
29
  unified_mode true
30
30
 
31
- resource_name :ifconfig
31
+ provides :ifconfig
32
32
 
33
- description "Use the ifconfig resource to manage interfaces on Unix and Linux systems."
33
+ description "Use the **ifconfig** resource to manage interfaces on Unix and Linux systems."
34
34
 
35
35
  state_attrs :inet_addr, :mask
36
36
 
@@ -45,11 +45,11 @@ class Chef
45
45
  description: "The hardware address for the network interface."
46
46
 
47
47
  property :mask, String,
48
- description: "The decimal representation of the network mask. For example: 255.255.255.0."
48
+ description: "The decimal representation of the network mask. For example: `255.255.255.0`."
49
49
 
50
50
  property :family, String, default: "inet",
51
- introduced: "14.0",
52
- description: "Networking family option for Debian-based systems; for example: inet or inet6."
51
+ introduced: "14.0",
52
+ description: "Networking family option for Debian-based systems; for example: `inet` or `inet6`."
53
53
 
54
54
  property :inet_addr, String,
55
55
  description: "The Internet host address for the network interface."
@@ -81,11 +81,11 @@ class Chef
81
81
 
82
82
  property :ethtool_opts, String,
83
83
  introduced: "13.4",
84
- description: "Options to be passed to ethtool(8). For example: -A eth0 autoneg off rx off tx off."
84
+ description: "Options to be passed to ethtool(8). For example: `-A eth0 autoneg off rx off tx off`."
85
85
 
86
86
  property :bonding_opts, String,
87
87
  introduced: "13.4",
88
- description: "Bonding options to pass via BONDING_OPTS on RHEL and CentOS. For example: mode=active-backup miimon=100."
88
+ description: "Bonding options to pass via `BONDING_OPTS` on RHEL and CentOS. For example: `mode=active-backup miimon=100`."
89
89
 
90
90
  property :master, String,
91
91
  introduced: "13.4",
@@ -93,7 +93,7 @@ class Chef
93
93
 
94
94
  property :slave, String,
95
95
  introduced: "13.4",
96
- description: "When set to yes, this device is controlled by the channel bonding interface that is specified via the master property."
96
+ description: "When set to `yes`, this device is controlled by the channel bonding interface that is specified via the `master` property."
97
97
 
98
98
  property :vlan, String,
99
99
  introduced: "14.4",
@@ -22,14 +22,22 @@ require_relative "../provider/package/ips"
22
22
  class Chef
23
23
  class Resource
24
24
  class IpsPackage < ::Chef::Resource::Package
25
- resource_name :ips_package
26
- provides :package, os: "solaris2"
25
+ unified_mode true
26
+
27
27
  provides :ips_package
28
+ provides :package, os: "solaris2"
28
29
 
29
- description "Use the ips_package resource to manage packages (using Image Packaging System (IPS)) on the Solaris 11 platform."
30
+ description "Use the **ips_package** resource to manage packages (using Image Packaging System (IPS)) on the Solaris 11 platform."
30
31
 
31
32
  allowed_actions :install, :remove, :upgrade
32
33
 
34
+ property :package_name, String,
35
+ description: "An optional property to set the package name if it differs from the resource block's name.",
36
+ identity: true
37
+
38
+ property :version, String,
39
+ description: "The version of a package to be installed or upgraded."
40
+
33
41
  property :accept_license, [TrueClass, FalseClass],
34
42
  default: false, desired_state: false,
35
43
  description: "Accept an end-user license agreement, automatically."
@@ -5,16 +5,17 @@
5
5
  #
6
6
  # Copyright:: 2016-2018, Shopify Inc.
7
7
  # Copyright:: Copyright (c) Chef Software Inc.
8
- #
9
8
 
10
9
  require_relative "../resource"
11
10
 
12
11
  class Chef
13
12
  class Resource
14
13
  class KernelModule < Chef::Resource
15
- resource_name :kernel_module
14
+ unified_mode true
15
+
16
+ provides :kernel_module
16
17
 
17
- description "Use the kernel_module resource to manage kernel modules on Linux systems. This resource can load, unload, blacklist, disable, install, and uninstall modules."
18
+ description "Use the **kernel_module** resource to manage kernel modules on Linux systems. This resource can load, unload, blacklist, disable, install, and uninstall modules."
18
19
  introduced "14.3"
19
20
  examples <<~DOC
20
21
  Install and load a kernel module, and ensure it loads on reboot.
@@ -65,7 +66,7 @@ class Chef
65
66
 
66
67
  property :modname, String,
67
68
  description: "An optional property to set the kernel module name if it differs from the resource block's name.",
68
- name_property: true, identity: true
69
+ name_property: true
69
70
 
70
71
  property :options, Array,
71
72
  description: "An optional property to set options for the kernel module.",
@@ -82,15 +83,22 @@ class Chef
82
83
  action :install do
83
84
  description "Load kernel module, and ensure it loads on reboot."
84
85
 
86
+ with_run_context :root do
87
+ find_resource(:execute, "update initramfs") do
88
+ command initramfs_command
89
+ action :nothing
90
+ end
91
+ end
92
+
85
93
  # create options file before loading the module
86
94
  unless new_resource.options.nil?
87
95
  file "#{new_resource.unload_dir}/options_#{new_resource.modname}.conf" do
88
96
  content "options #{new_resource.modname} #{new_resource.options.join(" ")}\n"
89
- end.run_action(:create)
97
+ end
90
98
  end
91
99
 
92
100
  # load the module first before installing
93
- new_resource.run_action(:load)
101
+ action_load
94
102
 
95
103
  directory new_resource.load_dir do
96
104
  recursive true
@@ -100,17 +108,16 @@ class Chef
100
108
  content "#{new_resource.modname}\n"
101
109
  notifies :run, "execute[update initramfs]", :delayed
102
110
  end
111
+ end
103
112
 
113
+ action :uninstall do
114
+ description "Unload a kernel module and remove module config, so it doesn't load on reboot."
104
115
  with_run_context :root do
105
116
  find_resource(:execute, "update initramfs") do
106
117
  command initramfs_command
107
118
  action :nothing
108
119
  end
109
120
  end
110
- end
111
-
112
- action :uninstall do
113
- description "Unload a kernel module and remove module config, so it doesn't load on reboot."
114
121
 
115
122
  file "#{new_resource.load_dir}/#{new_resource.modname}.conf" do
116
123
  action :delete
@@ -126,24 +133,12 @@ class Chef
126
133
  action :delete
127
134
  end
128
135
 
129
- with_run_context :root do
130
- find_resource(:execute, "update initramfs") do
131
- command initramfs_command
132
- action :nothing
133
- end
134
- end
135
-
136
- new_resource.run_action(:unload)
136
+ action_unload
137
137
  end
138
138
 
139
139
  action :blacklist do
140
140
  description "Blacklist a kernel module."
141
141
 
142
- file "#{new_resource.unload_dir}/blacklist_#{new_resource.modname}.conf" do
143
- content "blacklist #{new_resource.modname}"
144
- notifies :run, "execute[update initramfs]", :delayed
145
- end
146
-
147
142
  with_run_context :root do
148
143
  find_resource(:execute, "update initramfs") do
149
144
  command initramfs_command
@@ -151,17 +146,17 @@ class Chef
151
146
  end
152
147
  end
153
148
 
154
- new_resource.run_action(:unload)
149
+ file "#{new_resource.unload_dir}/blacklist_#{new_resource.modname}.conf" do
150
+ content "blacklist #{new_resource.modname}"
151
+ notifies :run, "execute[update initramfs]", :delayed
152
+ end
153
+
154
+ action_unload
155
155
  end
156
156
 
157
157
  action :disable do
158
158
  description "Disable a kernel module."
159
159
 
160
- file "#{new_resource.unload_dir}/disable_#{new_resource.modname}.conf" do
161
- content "install #{new_resource.modname} /bin/false"
162
- notifies :run, "execute[update initramfs]", :delayed
163
- end
164
-
165
160
  with_run_context :root do
166
161
  find_resource(:execute, "update initramfs") do
167
162
  command initramfs_command
@@ -169,7 +164,12 @@ class Chef
169
164
  end
170
165
  end
171
166
 
172
- new_resource.run_action(:unload)
167
+ file "#{new_resource.unload_dir}/disable_#{new_resource.modname}.conf" do
168
+ content "install #{new_resource.modname} /bin/false"
169
+ notifies :run, "execute[update initramfs]", :delayed
170
+ end
171
+
172
+ action_unload
173
173
  end
174
174
 
175
175
  action :load do
@@ -23,7 +23,9 @@ class Chef
23
23
  class Ksh < Chef::Resource::Script
24
24
  unified_mode true
25
25
 
26
- description "Use the ksh resource to execute scripts using the Korn shell (ksh)"\
26
+ provides :ksh
27
+
28
+ description "Use the **ksh** resource to execute scripts using the Korn shell (ksh)"\
27
29
  " interpreter. This resource may also use any of the actions and properties"\
28
30
  " that are available to the execute resource. Commands that are executed"\
29
31
  " with this resource are (by their nature) not idempotent, as they are"\
@@ -21,17 +21,17 @@ require_relative "../resource"
21
21
  class Chef
22
22
  class Resource
23
23
  class Launchd < Chef::Resource
24
- resource_name :launchd
24
+ unified_mode true
25
25
  provides :launchd
26
26
 
27
- description "Use the launchd resource to manage system-wide services (daemons) and per-user services (agents) on the macOS platform."
27
+ description "Use the **launchd** resource to manage system-wide services (daemons) and per-user services (agents) on the macOS platform."
28
28
  introduced "12.8"
29
29
 
30
30
  default_action :create
31
31
  allowed_actions :create, :create_if_missing, :delete, :enable, :disable, :restart
32
32
 
33
33
  property :label, String,
34
- identity: true, name_property: true,
34
+ name_property: true,
35
35
  description: "The unique identifier for the job."
36
36
 
37
37
  property :backup, [Integer, FalseClass],
@@ -26,17 +26,16 @@ class Chef
26
26
  include Chef::Mixin::Securable
27
27
  unified_mode true
28
28
 
29
- resource_name :link
30
29
  provides :link
31
30
 
32
- description "Use the link resource to create symbolic or hard links.\n\n"\
31
+ description "Use the **link** resource to create symbolic or hard links.\n\n"\
33
32
  "A symbolic link—sometimes referred to as a soft link—is a directory entry"\
34
33
  " that associates a file name with a string that contains an absolute or"\
35
- " relative path to a file on any file system. In other words, a file that"\
36
- " contains a path that points to another file.” A symbolic link creates a new"\
34
+ " relative path to a file on any file system. In other words, 'a file that"\
35
+ " contains a path that points to another file.' A symbolic link creates a new"\
37
36
  " file with a new inode that points to the inode location of the original file.\n\n"\
38
37
  "A hard link is a directory entry that associates a file with another file in the"\
39
- " same file system. In other words, multiple directory entries to the same file.”"\
38
+ " same file system. In other words, 'multiple directory entries to the same file.'"\
40
39
  " A hard link creates a new file that points to the same inode as the original file."
41
40
 
42
41
  state_attrs :owner # required since it's not a property below
@@ -44,14 +43,9 @@ class Chef
44
43
  default_action :create
45
44
  allowed_actions :create, :delete
46
45
 
47
- def initialize(name, run_context = nil)
48
- verify_links_supported!
49
- super
50
- end
51
-
52
46
  property :target_file, String,
53
47
  description: "An optional property to set the target file if it differs from the resource block's name.",
54
- name_property: true, identity: true
48
+ name_property: true
55
49
 
56
50
  property :to, String,
57
51
  description: "The actual file to which the link is to be created."
@@ -73,22 +67,6 @@ class Chef
73
67
  def path
74
68
  target_file
75
69
  end
76
-
77
- private
78
-
79
- # On certain versions of windows links are not supported. Make
80
- # sure we are not on such a platform.
81
- def verify_links_supported!
82
- if ChefUtils.windows?
83
- require_relative "../win32/file"
84
- begin
85
- Chef::ReservedNames::Win32::File.verify_links_supported!
86
- rescue Chef::Exceptions::Win32APIFunctionNotImplemented => e
87
- Chef::Log.fatal("Link resource is not supported on this version of Windows")
88
- raise e
89
- end
90
- end
91
- end
92
70
  end
93
71
  end
94
72
  end
@@ -21,23 +21,34 @@ require_relative "../dist"
21
21
  class Chef
22
22
  class Resource
23
23
  class Locale < Chef::Resource
24
- resource_name :locale
24
+ unified_mode true
25
+ provides :locale
25
26
 
26
- description "Use the locale resource to set the system's locale."
27
+ description "Use the **locale** resource to set the system's locale on Debian and Windows systems. Windows support was added in Chef Infra Client 16.0"
27
28
  introduced "14.5"
28
29
 
29
- LC_VARIABLES = %w{LC_ADDRESS LC_COLLATE LC_CTYPE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME}.freeze
30
- LOCALE_CONF = "/etc/locale.conf".freeze
31
- LOCALE_REGEX = /\A\S+/.freeze
32
- LOCALE_PLATFORM_FAMILIES = %w{debian}.freeze
30
+ examples <<~DOC
31
+ Set the lang to 'en_US.UTF-8'
32
+
33
+ ```ruby
34
+ locale 'set system locale' do
35
+ lang 'en_US.UTF-8'
36
+ end
37
+ ```
38
+ DOC
39
+
40
+ LC_VARIABLES ||= %w{LC_ADDRESS LC_COLLATE LC_CTYPE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME}.freeze
41
+ LOCALE_CONF ||= "/etc/locale.conf".freeze
42
+ LOCALE_REGEX ||= /\A\S+/.freeze
43
+ LOCALE_PLATFORM_FAMILIES ||= %w{debian windows}.freeze
33
44
 
34
45
  property :lang, String,
35
46
  description: "Sets the default system language.",
36
47
  regex: [LOCALE_REGEX],
37
- validation_message: "The provided lang is not valid. It should be a non-empty string without any leading whitespaces."
48
+ validation_message: "The provided lang is not valid. It should be a non-empty string without any leading whitespace."
38
49
 
39
50
  property :lc_env, Hash,
40
- description: "A Hash of LC_* env variables in the form of ({ 'LC_ENV_VARIABLE' => 'VALUE' }).",
51
+ description: "A Hash of LC_* env variables in the form of `({ 'LC_ENV_VARIABLE' => 'VALUE' })`.",
41
52
  default: lazy { {} },
42
53
  coerce: proc { |h|
43
54
  if h.respond_to?(:keys)
@@ -48,7 +59,7 @@ class Chef
48
59
  end
49
60
  end
50
61
  unless h.values.all? { |x| x =~ LOCALE_REGEX }
51
- error_msg = "Values of option lc_env should be non-empty string without any leading whitespaces."
62
+ error_msg = "Values of option lc_env should be non-empty string without any leading whitespace."
52
63
  raise Chef::Exceptions::ValidationFailed, error_msg
53
64
  end
54
65
  h
@@ -64,15 +75,32 @@ class Chef
64
75
  end
65
76
  end
66
77
 
78
+ load_current_value do
79
+ if windows?
80
+ lang get_system_locale_windows
81
+ else
82
+ begin
83
+ old_content = ::File.read(LOCALE_CONF)
84
+ locale_values = Hash[old_content.split("\n").map { |v| v.split("=") }]
85
+ lang locale_values["LANG"]
86
+ rescue Errno::ENOENT => e
87
+ false
88
+ end
89
+ end
90
+ end
91
+
92
+ # Gets the System-locale setting for the current computer.
93
+ # @see https://docs.microsoft.com/en-us/powershell/module/international/get-winsystemlocale
94
+ # @return [String] the current value of the System-locale setting.
95
+ #
96
+ def get_system_locale_windows
97
+ powershell_exec("Get-WinSystemLocale").result["Name"]
98
+ end
99
+
67
100
  action :update do
68
101
  description "Update the system's locale."
69
- begin
70
- unless up_to_date?
71
- converge_by "Updating System Locale" do
72
- generate_locales unless unavailable_locales.empty?
73
- update_locale
74
- end
75
- end
102
+ converge_if_changed do
103
+ set_system_locale
76
104
  end
77
105
  end
78
106
 
@@ -92,7 +120,7 @@ class Chef
92
120
  end
93
121
  end
94
122
 
95
- # Generates the localisation files from templates using locale-gen.
123
+ # Generates the localization files from templates using locale-gen.
96
124
  # @see http://manpages.ubuntu.com/manpages/cosmic/man8/locale-gen.8.html
97
125
  # @raise [Mixlib::ShellOut::ShellCommandFailed] not a supported language or locale
98
126
  #
@@ -100,6 +128,21 @@ class Chef
100
128
  shell_out!("locale-gen #{unavailable_locales.join(" ")}")
101
129
  end
102
130
 
131
+ # Sets the system locale for the current computer.
132
+ #
133
+ def set_system_locale
134
+ if windows?
135
+ # Sets the system locale for the current computer.
136
+ # @see https://docs.microsoft.com/en-us/powershell/module/internationalcmdlets/set-winsystemlocale
137
+ #
138
+ response = powershell_exec("Set-WinSystemLocale -SystemLocale #{new_resource.lang}")
139
+ raise response.errors.join(" ") if response.error?
140
+ else
141
+ generate_locales unless unavailable_locales.empty?
142
+ update_locale
143
+ end
144
+ end
145
+
103
146
  # Updates system locale by appropriately writing them in /etc/locale.conf
104
147
  # @note This locale change won't affect the current run. At this time it is an exercise
105
148
  # left to the user to restart or reboot if the locale change is required at
@@ -135,15 +178,6 @@ class Chef
135
178
  content.sort.map { |t| t.join("=") }.join("\n") + "\n"
136
179
  end
137
180
  end
138
-
139
- # @return [Boolean] Whether any modification is required in /etc/locale.conf
140
- #
141
- def up_to_date?
142
- old_content = ::File.read(LOCALE_CONF)
143
- new_content == old_content
144
- rescue
145
- false # We need to create the file if it is not present
146
- end
147
181
  end
148
182
  end
149
183
  end