chef 16.4.38 → 16.7.61

Sign up to get free protection for your applications and to get access to all the features.
Files changed (457) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -12
  3. data/Rakefile +22 -15
  4. data/bin/knife +1 -1
  5. data/chef-universal-mingw32.gemspec +1 -1
  6. data/chef.gemspec +2 -1
  7. data/lib/chef/application.rb +19 -17
  8. data/lib/chef/application/apply.rb +12 -7
  9. data/lib/chef/application/base.rb +26 -23
  10. data/lib/chef/application/client.rb +16 -5
  11. data/lib/chef/application/exit_code.rb +13 -4
  12. data/lib/chef/application/knife.rb +22 -11
  13. data/lib/chef/application/solo.rb +2 -1
  14. data/lib/chef/application/windows_service.rb +14 -14
  15. data/lib/chef/application/windows_service_manager.rb +6 -6
  16. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  17. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  18. data/lib/chef/chef_fs/file_pattern.rb +1 -1
  19. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
  20. data/lib/chef/chef_fs/knife.rb +2 -2
  21. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  22. data/lib/chef/client.rb +13 -43
  23. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  24. data/lib/chef/cookbook/gem_installer.rb +1 -1
  25. data/lib/chef/cookbook/synchronizer.rb +2 -2
  26. data/lib/chef/cookbook_manifest.rb +1 -1
  27. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  28. data/lib/chef/cookbook_uploader.rb +1 -1
  29. data/lib/chef/cookbook_version.rb +2 -5
  30. data/lib/chef/data_collector.rb +7 -6
  31. data/lib/chef/data_collector/config_validation.rb +22 -13
  32. data/lib/chef/data_collector/run_end_message.rb +2 -2
  33. data/lib/chef/data_collector/run_start_message.rb +1 -1
  34. data/lib/chef/deprecated.rb +1 -1
  35. data/lib/chef/deprecation/warnings.rb +2 -2
  36. data/lib/chef/digester.rb +2 -2
  37. data/lib/chef/dsl/chef_vault.rb +1 -1
  38. data/lib/chef/dsl/data_query.rb +2 -2
  39. data/lib/chef/dsl/platform_introspection.rb +1 -1
  40. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  41. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  42. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  43. data/lib/chef/environment.rb +3 -3
  44. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  45. data/lib/chef/exceptions.rb +5 -5
  46. data/lib/chef/file_access_control/windows.rb +6 -5
  47. data/lib/chef/file_content_management/tempfile.rb +1 -1
  48. data/lib/chef/formatters/doc.rb +7 -6
  49. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  50. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +2 -2
  51. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  52. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  53. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +6 -6
  54. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  55. data/lib/chef/formatters/indentable_output_stream.rb +2 -2
  56. data/lib/chef/formatters/minimal.rb +5 -4
  57. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +28 -39
  58. data/lib/chef/http.rb +6 -14
  59. data/lib/chef/http/auth_credentials.rb +5 -1
  60. data/lib/chef/http/authenticator.rb +1 -1
  61. data/lib/chef/http/basic_client.rb +4 -2
  62. data/lib/chef/http/decompressor.rb +1 -1
  63. data/lib/chef/http/http_request.rb +7 -5
  64. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  65. data/lib/chef/http/ssl_policies.rb +1 -1
  66. data/lib/chef/json_compat.rb +3 -8
  67. data/lib/chef/key.rb +1 -1
  68. data/lib/chef/knife.rb +4 -4
  69. data/lib/chef/knife/bootstrap.rb +18 -15
  70. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  71. data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
  72. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +9 -9
  73. data/lib/chef/knife/client_create.rb +3 -3
  74. data/lib/chef/knife/config_get.rb +8 -97
  75. data/lib/chef/knife/config_get_profile.rb +9 -9
  76. data/lib/chef/knife/config_list.rb +139 -0
  77. data/lib/chef/knife/config_list_profiles.rb +8 -98
  78. data/lib/chef/knife/config_show.rb +127 -0
  79. data/lib/chef/knife/config_use.rb +61 -0
  80. data/lib/chef/knife/config_use_profile.rb +9 -24
  81. data/lib/chef/knife/configure.rb +4 -2
  82. data/lib/chef/knife/core/bootstrap_context.rb +2 -2
  83. data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
  84. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  85. data/lib/chef/knife/core/object_loader.rb +1 -1
  86. data/lib/chef/knife/core/ui.rb +1 -1
  87. data/lib/chef/knife/core/windows_bootstrap_context.rb +18 -15
  88. data/lib/chef/knife/exec.rb +2 -2
  89. data/lib/chef/knife/node_policy_set.rb +2 -2
  90. data/lib/chef/knife/node_run_list_add.rb +1 -1
  91. data/lib/chef/knife/node_run_list_remove.rb +1 -1
  92. data/lib/chef/knife/node_run_list_set.rb +1 -1
  93. data/lib/chef/knife/node_show.rb +2 -2
  94. data/lib/chef/knife/role_env_run_list_add.rb +1 -1
  95. data/lib/chef/knife/role_env_run_list_set.rb +1 -1
  96. data/lib/chef/knife/role_run_list_add.rb +1 -1
  97. data/lib/chef/knife/role_run_list_set.rb +1 -1
  98. data/lib/chef/knife/search.rb +0 -1
  99. data/lib/chef/knife/serve.rb +3 -3
  100. data/lib/chef/knife/ssh.rb +18 -3
  101. data/lib/chef/knife/ssl_check.rb +3 -3
  102. data/lib/chef/knife/status.rb +2 -2
  103. data/lib/chef/knife/tag_create.rb +1 -1
  104. data/lib/chef/knife/tag_delete.rb +1 -1
  105. data/lib/chef/knife/user_create.rb +2 -2
  106. data/lib/chef/knife/yaml_convert.rb +1 -1
  107. data/lib/chef/local_mode.rb +2 -2
  108. data/lib/chef/log/syslog.rb +2 -2
  109. data/lib/chef/log/winevt.rb +2 -2
  110. data/lib/chef/mixin/convert_to_class_name.rb +0 -56
  111. data/lib/chef/mixin/deep_merge.rb +0 -12
  112. data/lib/chef/mixin/openssl_helper.rb +2 -5
  113. data/lib/chef/mixin/powershell_exec.rb +22 -10
  114. data/lib/chef/mixin/powershell_out.rb +12 -5
  115. data/lib/chef/mixin/properties.rb +2 -0
  116. data/lib/chef/mixin/template.rb +3 -3
  117. data/lib/chef/mixin/unformatter.rb +1 -1
  118. data/lib/chef/mixin/uris.rb +4 -2
  119. data/lib/chef/mixin/versioned_api.rb +1 -2
  120. data/lib/chef/node/attribute_collections.rb +2 -6
  121. data/lib/chef/node/mixin/immutablize_hash.rb +2 -0
  122. data/lib/chef/node_map.rb +4 -4
  123. data/lib/chef/policy_builder/dynamic.rb +2 -0
  124. data/lib/chef/policy_builder/policyfile.rb +2 -2
  125. data/lib/chef/powershell.rb +8 -4
  126. data/lib/chef/property.rb +1 -1
  127. data/lib/chef/provider.rb +1 -5
  128. data/lib/chef/provider/cron.rb +2 -13
  129. data/lib/chef/provider/file.rb +2 -2
  130. data/lib/chef/provider/group.rb +14 -6
  131. data/lib/chef/provider/group/windows.rb +12 -1
  132. data/lib/chef/provider/ifconfig.rb +9 -9
  133. data/lib/chef/provider/ifconfig/debian.rb +38 -22
  134. data/lib/chef/provider/ifconfig/redhat.rb +54 -18
  135. data/lib/chef/provider/launchd.rb +3 -13
  136. data/lib/chef/provider/link.rb +0 -9
  137. data/lib/chef/provider/mount.rb +18 -1
  138. data/lib/chef/provider/mount/linux.rb +67 -0
  139. data/lib/chef/provider/mount/mount.rb +41 -43
  140. data/lib/chef/provider/package.rb +3 -0
  141. data/lib/chef/provider/package/apt.rb +1 -1
  142. data/lib/chef/provider/package/chocolatey.rb +6 -6
  143. data/lib/chef/provider/package/dpkg.rb +3 -12
  144. data/lib/chef/provider/package/freebsd/base.rb +3 -2
  145. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  146. data/lib/chef/provider/package/homebrew.rb +1 -1
  147. data/lib/chef/provider/package/ips.rb +1 -1
  148. data/lib/chef/provider/package/powershell.rb +2 -3
  149. data/lib/chef/provider/package/rubygems.rb +22 -19
  150. data/lib/chef/provider/package/snap.rb +1 -4
  151. data/lib/chef/provider/package/solaris.rb +0 -2
  152. data/lib/chef/provider/package/windows.rb +2 -2
  153. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +3 -1
  154. data/lib/chef/provider/package/yum/rpm_utils.rb +1 -1
  155. data/lib/chef/provider/package/zypper.rb +99 -72
  156. data/lib/chef/provider/powershell_script.rb +12 -1
  157. data/lib/chef/provider/registry_key.rb +4 -3
  158. data/lib/chef/provider/remote_file/content.rb +3 -0
  159. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  160. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  161. data/lib/chef/provider/route.rb +4 -8
  162. data/lib/chef/provider/service/debian.rb +2 -1
  163. data/lib/chef/provider/service/macosx.rb +2 -2
  164. data/lib/chef/provider/service/redhat.rb +1 -1
  165. data/lib/chef/provider/template_finder.rb +2 -10
  166. data/lib/chef/provider/user.rb +17 -9
  167. data/lib/chef/provider/user/aix.rb +1 -1
  168. data/lib/chef/provider/user/dscl.rb +5 -5
  169. data/lib/chef/provider/user/mac.rb +15 -7
  170. data/lib/chef/provider/user/solaris.rb +1 -1
  171. data/lib/chef/provider/user/windows.rb +10 -3
  172. data/lib/chef/provider/zypper_repository.rb +2 -2
  173. data/lib/chef/provider_resolver.rb +1 -1
  174. data/lib/chef/providers.rb +1 -3
  175. data/lib/chef/pwsh.rb +71 -0
  176. data/lib/chef/recipe.rb +2 -2
  177. data/lib/chef/resource.rb +2 -2
  178. data/lib/chef/resource/apt_repository.rb +6 -5
  179. data/lib/chef/resource/bash.rb +119 -1
  180. data/lib/chef/resource/batch.rb +1 -1
  181. data/lib/chef/resource/bff_package.rb +22 -0
  182. data/lib/chef/resource/breakpoint.rb +59 -2
  183. data/lib/chef/resource/build_essential.rb +5 -8
  184. data/lib/chef/resource/cab_package.rb +29 -0
  185. data/lib/chef/resource/chef_client_config.rb +313 -0
  186. data/lib/chef/resource/chef_client_cron.rb +35 -28
  187. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  188. data/lib/chef/resource/chef_client_scheduled_task.rb +24 -21
  189. data/lib/chef/resource/chef_client_systemd_timer.rb +27 -20
  190. data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
  191. data/lib/chef/resource/chef_gem.rb +10 -10
  192. data/lib/chef/resource/chef_handler.rb +149 -4
  193. data/lib/chef/resource/chef_sleep.rb +3 -3
  194. data/lib/chef/resource/chef_vault_secret.rb +1 -1
  195. data/lib/chef/resource/cookbook_file.rb +2 -2
  196. data/lib/chef/resource/cron/_cron_shared.rb +1 -0
  197. data/lib/chef/resource/cron/cron_d.rb +2 -3
  198. data/lib/chef/resource/csh.rb +2 -2
  199. data/lib/chef/resource/dnf_package.rb +2 -2
  200. data/lib/chef/resource/dsc_resource.rb +0 -1
  201. data/lib/chef/resource/dsc_script.rb +2 -2
  202. data/lib/chef/resource/execute.rb +10 -8
  203. data/lib/chef/resource/file.rb +4 -4
  204. data/lib/chef/resource/gem_package.rb +5 -5
  205. data/lib/chef/resource/homebrew_package.rb +3 -3
  206. data/lib/chef/resource/homebrew_update.rb +9 -6
  207. data/lib/chef/resource/hostname.rb +4 -4
  208. data/lib/chef/resource/ifconfig.rb +52 -5
  209. data/lib/chef/resource/kernel_module.rb +1 -1
  210. data/lib/chef/resource/ksh.rb +3 -3
  211. data/lib/chef/resource/launchd.rb +17 -16
  212. data/lib/chef/resource/locale.rb +2 -2
  213. data/lib/chef/resource/lwrp_base.rb +3 -5
  214. data/lib/chef/resource/macos_userdefaults.rb +3 -3
  215. data/lib/chef/resource/mount.rb +8 -2
  216. data/lib/chef/resource/notify_group.rb +0 -1
  217. data/lib/chef/resource/ohai.rb +46 -3
  218. data/lib/chef/resource/ohai_hint.rb +33 -0
  219. data/lib/chef/resource/openssl_dhparam.rb +27 -5
  220. data/lib/chef/resource/openssl_ec_private_key.rb +6 -3
  221. data/lib/chef/resource/openssl_ec_public_key.rb +2 -2
  222. data/lib/chef/resource/openssl_rsa_private_key.rb +6 -3
  223. data/lib/chef/resource/openssl_x509_certificate.rb +14 -14
  224. data/lib/chef/resource/openssl_x509_crl.rb +19 -10
  225. data/lib/chef/resource/openssl_x509_request.rb +14 -16
  226. data/lib/chef/resource/osx_profile.rb +77 -13
  227. data/lib/chef/resource/perl.rb +2 -2
  228. data/lib/chef/resource/plist.rb +3 -7
  229. data/lib/chef/resource/powershell_package_source.rb +24 -23
  230. data/lib/chef/resource/powershell_script.rb +14 -11
  231. data/lib/chef/resource/python.rb +2 -2
  232. data/lib/chef/resource/reboot.rb +2 -2
  233. data/lib/chef/resource/registry_key.rb +93 -2
  234. data/lib/chef/resource/remote_file.rb +3 -3
  235. data/lib/chef/resource/rhsm_register.rb +22 -10
  236. data/lib/chef/resource/route.rb +1 -1
  237. data/lib/chef/resource/ruby.rb +2 -2
  238. data/lib/chef/resource/ruby_block.rb +2 -2
  239. data/lib/chef/resource/scm/_scm.rb +2 -1
  240. data/lib/chef/resource/scm/git.rb +82 -1
  241. data/lib/chef/resource/scm/subversion.rb +14 -2
  242. data/lib/chef/resource/script.rb +2 -2
  243. data/lib/chef/resource/service.rb +3 -3
  244. data/lib/chef/resource/solaris_package.rb +0 -2
  245. data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
  246. data/lib/chef/resource/sudo.rb +1 -1
  247. data/lib/chef/resource/support/client.erb +64 -0
  248. data/lib/chef/resource/support/cron.d.erb +1 -1
  249. data/lib/chef/resource/support/cron_access.erb +1 -1
  250. data/lib/chef/resource/support/sudoer.erb +1 -1
  251. data/lib/chef/resource/support/ulimit.erb +1 -1
  252. data/lib/chef/resource/sysctl.rb +1 -5
  253. data/lib/chef/resource/systemd_unit.rb +44 -3
  254. data/lib/chef/resource/template.rb +2 -2
  255. data/lib/chef/resource/timezone.rb +112 -73
  256. data/lib/chef/resource/windows_ad_join.rb +19 -12
  257. data/lib/chef/resource/windows_audit_policy.rb +26 -24
  258. data/lib/chef/resource/windows_certificate.rb +12 -10
  259. data/lib/chef/resource/windows_dfs_server.rb +7 -4
  260. data/lib/chef/resource/windows_env.rb +173 -0
  261. data/lib/chef/resource/windows_feature.rb +2 -0
  262. data/lib/chef/resource/windows_firewall_profile.rb +28 -31
  263. data/lib/chef/resource/windows_firewall_rule.rb +9 -11
  264. data/lib/chef/resource/windows_font.rb +1 -1
  265. data/lib/chef/resource/windows_package.rb +29 -5
  266. data/lib/chef/resource/windows_path.rb +38 -0
  267. data/lib/chef/resource/windows_printer.rb +5 -3
  268. data/lib/chef/resource/windows_printer_port.rb +6 -4
  269. data/lib/chef/resource/windows_security_policy.rb +5 -5
  270. data/lib/chef/resource/windows_service.rb +108 -0
  271. data/lib/chef/resource/windows_share.rb +18 -18
  272. data/lib/chef/resource/windows_task.rb +629 -28
  273. data/lib/chef/resource/windows_user_privilege.rb +53 -54
  274. data/lib/chef/resource/windows_workgroup.rb +9 -7
  275. data/lib/chef/resource/yum_package.rb +2 -2
  276. data/lib/chef/resource/yum_repository.rb +1 -1
  277. data/lib/chef/resource_collection/resource_set.rb +1 -5
  278. data/lib/chef/resource_inspector.rb +77 -75
  279. data/lib/chef/resource_reporter.rb +0 -2
  280. data/lib/chef/resources.rb +4 -1
  281. data/lib/chef/run_context.rb +2 -2
  282. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  283. data/lib/chef/run_lock.rb +3 -3
  284. data/lib/chef/search/query.rb +6 -5
  285. data/lib/chef/server_api.rb +0 -4
  286. data/lib/chef/shell.rb +31 -26
  287. data/lib/chef/shell/ext.rb +12 -12
  288. data/lib/chef/shell/shell_session.rb +2 -2
  289. data/lib/chef/train_transport.rb +5 -104
  290. data/lib/chef/util/backup.rb +1 -1
  291. data/lib/chef/util/diff.rb +3 -3
  292. data/lib/chef/util/dsc/lcm_output_parser.rb +1 -3
  293. data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
  294. data/lib/chef/util/powershell/cmdlet.rb +6 -10
  295. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  296. data/lib/chef/util/threaded_job_queue.rb +0 -2
  297. data/lib/chef/version.rb +1 -1
  298. data/lib/chef/win32/crypto.rb +1 -1
  299. data/lib/chef/win32/file.rb +1 -1
  300. data/lib/chef/win32/registry.rb +1 -2
  301. data/lib/chef/win32/security/sid.rb +1 -1
  302. data/lib/chef/win32/unicode.rb +1 -1
  303. data/spec/data/shef-config.rb +1 -1
  304. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  305. data/spec/functional/mixin/powershell_out_spec.rb +11 -3
  306. data/spec/functional/resource/aix_service_spec.rb +2 -2
  307. data/spec/functional/resource/aixinit_service_spec.rb +1 -1
  308. data/spec/functional/resource/apt_package_spec.rb +4 -6
  309. data/spec/functional/resource/chocolatey_package_spec.rb +3 -3
  310. data/spec/functional/resource/cron_spec.rb +3 -3
  311. data/spec/functional/resource/dsc_script_spec.rb +3 -3
  312. data/spec/functional/resource/insserv_spec.rb +1 -1
  313. data/spec/functional/resource/mount_spec.rb +10 -2
  314. data/spec/functional/resource/powershell_package_source_spec.rb +107 -0
  315. data/spec/functional/resource/powershell_script_spec.rb +57 -14
  316. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  317. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  318. data/spec/functional/resource/windows_certificate_spec.rb +10 -6
  319. data/spec/functional/resource/windows_firewall_rule_spec.rb +93 -0
  320. data/spec/functional/resource/windows_package_spec.rb +36 -10
  321. data/spec/functional/resource/windows_share_spec.rb +103 -0
  322. data/spec/functional/resource/windows_task_spec.rb +15 -16
  323. data/spec/functional/resource/zypper_package_spec.rb +11 -0
  324. data/spec/functional/version_spec.rb +3 -3
  325. data/spec/integration/client/client_spec.rb +4 -4
  326. data/spec/integration/client/exit_code_spec.rb +3 -2
  327. data/spec/integration/client/ipv6_spec.rb +1 -1
  328. data/spec/integration/knife/client_key_create_spec.rb +1 -1
  329. data/spec/integration/knife/{config_list_profiles_spec.rb → config_list_spec.rb} +30 -29
  330. data/spec/integration/knife/{config_get_spec.rb → config_show_spec.rb} +3 -3
  331. data/spec/integration/knife/{config_use_profile_spec.rb → config_use_spec.rb} +53 -10
  332. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  333. data/spec/integration/knife/node_create_spec.rb +1 -1
  334. data/spec/integration/knife/node_environment_set_spec.rb +1 -1
  335. data/spec/integration/knife/node_run_list_add_spec.rb +4 -4
  336. data/spec/integration/knife/node_run_list_remove_spec.rb +1 -1
  337. data/spec/integration/knife/node_run_list_set_spec.rb +1 -1
  338. data/spec/integration/knife/node_show_spec.rb +1 -1
  339. data/spec/integration/ohai/ohai_spec.rb +61 -0
  340. data/spec/integration/recipes/notifies_spec.rb +1 -1
  341. data/spec/integration/recipes/provider_choice.rb +2 -2
  342. data/spec/integration/recipes/remote_directory.rb +1 -1
  343. data/spec/integration/solo/solo_spec.rb +5 -5
  344. data/spec/spec_helper.rb +8 -6
  345. data/spec/stress/win32/file_spec.rb +1 -1
  346. data/spec/support/chef_helpers.rb +2 -2
  347. data/spec/support/lib/chef/resource/cat.rb +1 -1
  348. data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -1
  349. data/spec/support/matchers/leak.rb +2 -2
  350. data/spec/support/mock/platform.rb +24 -16
  351. data/spec/support/platform_helpers.rb +27 -38
  352. data/spec/support/shared/functional/securable_resource.rb +108 -27
  353. data/spec/support/shared/functional/win32_service.rb +1 -1
  354. data/spec/support/shared/unit/application_dot_d.rb +5 -3
  355. data/spec/support/shared/unit/knife_shared.rb +1 -1
  356. data/spec/support/shared/unit/script_resource.rb +4 -4
  357. data/spec/support/shared/unit/windows_script_resource.rb +1 -1
  358. data/spec/tiny_server.rb +0 -1
  359. data/spec/unit/application/client_spec.rb +2 -2
  360. data/spec/unit/application/exit_code_spec.rb +10 -0
  361. data/spec/unit/application_spec.rb +4 -6
  362. data/spec/unit/chef_fs/config_spec.rb +1 -1
  363. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  364. data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
  365. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  366. data/spec/unit/client_spec.rb +16 -0
  367. data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
  368. data/spec/unit/cookbook_spec.rb +2 -2
  369. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  370. data/spec/unit/data_collector_spec.rb +0 -117
  371. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  372. data/spec/unit/file_access_control_spec.rb +1 -1
  373. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +11 -11
  374. data/spec/unit/knife/bootstrap_spec.rb +6 -6
  375. data/spec/unit/knife/client_create_spec.rb +2 -2
  376. data/spec/unit/knife/configure_client_spec.rb +5 -5
  377. data/spec/unit/knife/configure_spec.rb +3 -3
  378. data/spec/unit/knife/cookbook_delete_spec.rb +2 -2
  379. data/spec/unit/knife/cookbook_download_spec.rb +2 -2
  380. data/spec/unit/knife/cookbook_list_spec.rb +2 -2
  381. data/spec/unit/knife/cookbook_metadata_spec.rb +3 -3
  382. data/spec/unit/knife/core/ui_spec.rb +1 -0
  383. data/spec/unit/knife/environment_compare_spec.rb +3 -3
  384. data/spec/unit/knife/ssh_spec.rb +2 -2
  385. data/spec/unit/knife/supermarket_download_spec.rb +8 -8
  386. data/spec/unit/knife/supermarket_list_spec.rb +3 -3
  387. data/spec/unit/knife/supermarket_search_spec.rb +1 -1
  388. data/spec/unit/knife/tag_create_spec.rb +1 -1
  389. data/spec/unit/knife/tag_delete_spec.rb +1 -1
  390. data/spec/unit/knife/user_create_spec.rb +1 -1
  391. data/spec/unit/lwrp_spec.rb +3 -3
  392. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  393. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  394. data/spec/unit/mixin/powershell_exec_spec.rb +39 -2
  395. data/spec/unit/mixin/powershell_out_spec.rb +14 -0
  396. data/spec/unit/mixin/securable_spec.rb +2 -2
  397. data/spec/unit/mixin/which.rb +1 -1
  398. data/spec/unit/node/immutable_collections_spec.rb +2 -2
  399. data/spec/unit/provider/group/windows_spec.rb +6 -0
  400. data/spec/unit/provider/group_spec.rb +1 -1
  401. data/spec/unit/provider/mount/linux_spec.rb +107 -0
  402. data/spec/unit/provider/mount/mount_spec.rb +21 -10
  403. data/spec/unit/provider/mount/solaris_spec.rb +1 -1
  404. data/spec/unit/provider/mount_spec.rb +31 -0
  405. data/spec/unit/provider/package/chocolatey_spec.rb +2 -3
  406. data/spec/unit/provider/package/powershell_spec.rb +88 -96
  407. data/spec/unit/provider/package/rubygems_spec.rb +4 -1
  408. data/spec/unit/provider/package/zypper_spec.rb +0 -25
  409. data/spec/unit/provider/package_spec.rb +2 -2
  410. data/spec/unit/provider/powershell_script_spec.rb +11 -0
  411. data/spec/unit/provider/route_spec.rb +0 -2
  412. data/spec/unit/provider/subversion_spec.rb +0 -3
  413. data/spec/unit/provider/user_spec.rb +7 -1
  414. data/spec/unit/provider/windows_env_spec.rb +18 -34
  415. data/spec/unit/provider/windows_path_spec.rb +6 -11
  416. data/spec/unit/provider/windows_task_spec.rb +7 -6
  417. data/spec/unit/recipe_spec.rb +1 -1
  418. data/spec/unit/resource/breakpoint_spec.rb +1 -1
  419. data/spec/unit/resource/build_essential_spec.rb +0 -12
  420. data/spec/unit/resource/chef_client_config_spec.rb +137 -0
  421. data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
  422. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  423. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
  424. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
  425. data/spec/unit/resource/ifconfig_spec.rb +2 -10
  426. data/spec/unit/resource/launchd_spec.rb +8 -0
  427. data/spec/unit/resource/mount_spec.rb +18 -5
  428. data/spec/unit/resource/osx_profile_spec.rb +67 -1
  429. data/spec/unit/resource/powershell_package_source_spec.rb +20 -20
  430. data/spec/unit/resource/powershell_script_spec.rb +4 -74
  431. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  432. data/spec/unit/resource/service_spec.rb +2 -2
  433. data/spec/unit/resource/solaris_package_spec.rb +8 -10
  434. data/spec/unit/resource/timezone_spec.rb +63 -0
  435. data/spec/unit/resource/windows_uac_spec.rb +1 -1
  436. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  437. data/spec/unit/resource_inspector_spec.rb +3 -3
  438. data/spec/unit/run_lock_spec.rb +5 -1
  439. data/spec/unit/runner_spec.rb +1 -2
  440. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  441. data/spec/unit/shell/shell_session_spec.rb +35 -64
  442. data/spec/unit/shell_spec.rb +18 -21
  443. data/spec/unit/train_transport_spec.rb +14 -13
  444. data/spec/unit/util/selinux_spec.rb +2 -0
  445. data/tasks/rspec.rb +1 -3
  446. metadata +49 -27
  447. data/lib/chef/dist.rb +0 -68
  448. data/lib/chef/monkey_patches/net_http.rb +0 -22
  449. data/lib/chef/provider/windows_env.rb +0 -210
  450. data/lib/chef/provider/windows_path.rb +0 -61
  451. data/lib/chef/provider/windows_task.rb +0 -632
  452. data/spec/integration/knife/config_get_profile_spec.rb +0 -114
  453. data/spec/support/mock/constant.rb +0 -52
  454. data/spec/unit/monkey_patches/uri_spec.rb +0 -34
  455. data/spec/unit/provider_resolver_spec.rb +0 -885
  456. data/spec/unit/resource/data/InstallHistory_with_CLT.plist +0 -92
  457. data/spec/unit/resource/data/InstallHistory_without_CLT.plist +0 -38
@@ -31,15 +31,24 @@ class Chef
31
31
  description "Use the **openssl_x509_crl** resource to generate PEM-formatted x509 certificate revocation list (CRL) files."
32
32
  introduced "14.4"
33
33
  examples <<~DOC
34
- Generate a CRL file given a cert file and key file
34
+ **Create a certificate revocation file**
35
35
 
36
- ```ruby
37
- openssl_x509_crl '/etc/ssl_files/my_ca2.crl' do
38
- ca_cert_file '/etc/ssl_files/my_ca2.crt'
39
- ca_key_file '/etc/ssl_files/my_ca2.key'
40
- expire 1
41
- end
42
- ```
36
+ ```ruby
37
+ openssl_x509_crl '/etc/ssl_test/my_ca.crl' do
38
+ ca_cert_file '/etc/ssl_test/my_ca.crt'
39
+ ca_key_file '/etc/ssl_test/my_ca.key'
40
+ end
41
+ ```
42
+
43
+ **Create a certificate revocation file for a particular serial**
44
+
45
+ ```ruby
46
+ openssl_x509_crl '/etc/ssl_test/my_ca.crl' do
47
+ ca_cert_file '/etc/ssl_test/my_ca.crt'
48
+ ca_key_file '/etc/ssl_test/my_ca.key'
49
+ serial_to_revoke C7BCB6602A2E4251EF4E2827A228CB52BC0CEA2F
50
+ end
51
+ ```
43
52
  DOC
44
53
 
45
54
  property :path, String,
@@ -62,11 +71,11 @@ class Chef
62
71
  default: 1
63
72
 
64
73
  property :ca_cert_file, String,
65
- description: "The path to the CA X509 Certificate on the filesystem. If the ca_cert_file property is specified, the ca_key_file property must also be specified, the CRL will be signed with them.",
74
+ description: "The path to the CA X509 Certificate on the filesystem. If the `ca_cert_file` property is specified, the `ca_key_file` property must also be specified, the CRL will be signed with them.",
66
75
  required: true
67
76
 
68
77
  property :ca_key_file, String,
69
- description: "The path to the CA private key on the filesystem. If the ca_key_file property is specified, the ca_cert_file property must also be specified, the CRL will be signed with them.",
78
+ description: "The path to the CA private key on the filesystem. If the `ca_key_file` property is specified, the `ca_cert_file` property must also be specified, the CRL will be signed with them.",
70
79
  required: true
71
80
 
72
81
  property :ca_key_pass, String,
@@ -31,7 +31,7 @@ class Chef
31
31
  description "Use the **openssl_x509_request** resource to generate PEM-formatted x509 certificates requests. If no existing key is specified, the resource will automatically generate a passwordless key with the certificate."
32
32
  introduced "14.4"
33
33
  examples <<~DOC
34
- Generate new ec key and csr file
34
+ **Generate new EC key and CSR file**
35
35
 
36
36
  ```ruby
37
37
  openssl_x509_request '/etc/ssl_files/my_ec_request.csr' do
@@ -42,7 +42,7 @@ class Chef
42
42
  end
43
43
  ```
44
44
 
45
- Generate a new csr file from an existing ec key
45
+ **Generate a new CSR file from an existing EC key**
46
46
 
47
47
  ```ruby
48
48
  openssl_x509_request '/etc/ssl_files/my_ec_request2.csr' do
@@ -54,7 +54,7 @@ class Chef
54
54
  end
55
55
  ```
56
56
 
57
- Generate new rsa key and csr file
57
+ **Generate new RSA key and CSR file**
58
58
 
59
59
  ```ruby
60
60
  openssl_x509_request '/etc/ssl_files/my_rsa_request.csr' do
@@ -80,46 +80,44 @@ class Chef
80
80
  description: "The permission mode applied to all files created by the resource."
81
81
 
82
82
  property :country, String,
83
- description: "Value for the C certificate field."
83
+ description: "Value for the `C` certificate field."
84
84
 
85
85
  property :state, String,
86
- description: "Value for the ST certificate field."
86
+ description: "Value for the `ST` certificate field."
87
87
 
88
88
  property :city, String,
89
- description: "Value for the L certificate field."
89
+ description: "Value for the `L` certificate field."
90
90
 
91
91
  property :org, String,
92
- description: "Value for the O certificate field."
92
+ description: "Value for the `O` certificate field."
93
93
 
94
94
  property :org_unit, String,
95
- description: "Value for the OU certificate field."
95
+ description: "Value for the `OU` certificate field."
96
96
 
97
97
  property :common_name, String,
98
98
  required: true,
99
- description: "Value for the CN certificate field."
99
+ description: "Value for the `CN` certificate field."
100
100
 
101
101
  property :email, String,
102
- description: "Value for the email certificate field."
102
+ description: "Value for the `email` certificate field."
103
103
 
104
104
  property :key_file, String,
105
- description: "The path to a certificate key file on the filesystem. If the key_file property is specified, the resource will attempt to source a key from this location. If no key file is found, the resource will generate a new key file at this location. If the key_file property is not specified, the resource will generate a key file in the same directory as the generated certificate, with the same name as the generated certificate."
105
+ description: "The path to a certificate key file on the filesystem. If the `key_file` property is specified, the resource will attempt to source a key from this location. If no key file is found, the resource will generate a new key file at this location. If the `key_file` property is not specified, the resource will generate a key file in the same directory as the generated certificate, with the same name as the generated certificate."
106
106
 
107
107
  property :key_pass, String,
108
108
  description: "The passphrase for an existing key's passphrase."
109
109
 
110
110
  property :key_type, String,
111
111
  equal_to: %w{rsa ec}, default: "ec",
112
- description: "The desired type of the generated key (rsa or ec)."
112
+ description: "The desired type of the generated key."
113
113
 
114
114
  property :key_length, Integer,
115
115
  equal_to: [1024, 2048, 4096, 8192], default: 2048,
116
- description: "The desired bit length of the generated key (if key_type is equal to 'rsa')."
116
+ description: "The desired bit length of the generated key (if key_type is equal to `rsa`)."
117
117
 
118
118
  property :key_curve, String,
119
119
  equal_to: %w{secp384r1 secp521r1 prime256v1}, default: "prime256v1",
120
- description: "The desired curve of the generated key (if key_type is equal to 'ec'). Run openssl ecparam -list_curves to see available options."
121
-
122
- default_action :create
120
+ description: "The desired curve of the generated key (if key_type is equal to `ec`). Run `openssl ecparam -list_curves` to see available options."
123
121
 
124
122
  action :create do
125
123
  description "Generate a certificate request."
@@ -19,8 +19,8 @@
19
19
  require_relative "../resource"
20
20
  require_relative "../log"
21
21
  require_relative "../resource/file"
22
- require "uuidtools"
23
- require "plist"
22
+ autoload :UUIDTools, "uuidtools"
23
+ autoload :Plist, "plist"
24
24
 
25
25
  class Chef
26
26
  class Resource
@@ -30,8 +30,72 @@ class Chef
30
30
  provides :osx_profile
31
31
  provides :osx_config_profile
32
32
 
33
- description "Use the **osx_profile** resource to manage configuration profiles (.mobileconfig files) on the macOS platform. The osx_profile resource installs profiles by using the uuidgen library to generate a unique ProfileUUID, and then using the profiles command to install the profile on the system."
33
+ description "Use the **osx_profile** resource to manage configuration profiles (`.mobileconfig` files) on the macOS platform. The **osx_profile** resource installs profiles by using the uuidgen library to generate a unique `ProfileUUID`, and then using the `profiles` command to install the profile on the system."
34
34
  introduced "12.7"
35
+ examples <<~DOC
36
+ **Install a profile from a cookbook file**
37
+
38
+ ```ruby
39
+ osx_profile 'com.company.screensaver.mobileconfig'
40
+ ```
41
+
42
+ **Install profile from a hash**
43
+
44
+ ```ruby
45
+ profile_hash = {
46
+ 'PayloadIdentifier' => 'com.company.screensaver',
47
+ 'PayloadRemovalDisallowed' => false,
48
+ 'PayloadScope' => 'System',
49
+ 'PayloadType' => 'Configuration',
50
+ 'PayloadUUID' => '1781fbec-3325-565f-9022-8aa28135c3cc',
51
+ 'PayloadOrganization' => 'Chef',
52
+ 'PayloadVersion' => 1,
53
+ 'PayloadDisplayName' => 'Screensaver Settings',
54
+ 'PayloadContent'=> [
55
+ {
56
+ 'PayloadType' => 'com.apple.ManagedClient.preferences',
57
+ 'PayloadVersion' => 1,
58
+ 'PayloadIdentifier' => 'com.company.screensaver',
59
+ 'PayloadUUID' => '73fc30e0-1e57-0131-c32d-000c2944c108',
60
+ 'PayloadEnabled' => true,
61
+ 'PayloadDisplayName' => 'com.apple.screensaver',
62
+ 'PayloadContent' => {
63
+ 'com.apple.screensaver' => {
64
+ 'Forced' => [
65
+ {
66
+ 'mcx_preference_settings' => {
67
+ 'idleTime' => 0,
68
+ }
69
+ }
70
+ ]
71
+ }
72
+ }
73
+ }
74
+ ]
75
+ }
76
+
77
+ osx_profile 'Install screensaver profile' do
78
+ profile profile_hash
79
+ end
80
+ ```
81
+
82
+ **Remove profile using identifier in resource name**
83
+
84
+ ```ruby
85
+ osx_profile 'com.company.screensaver' do
86
+ action :remove
87
+ end
88
+ ```
89
+
90
+ **Remove profile by identifier and user friendly resource name**
91
+
92
+ ```ruby
93
+ osx_profile 'Remove screensaver profile' do
94
+ identifier 'com.company.screensaver'
95
+ action :remove
96
+ end
97
+ ```
98
+ DOC
35
99
 
36
100
  property :profile_name, String,
37
101
  description: "Use to specify the name of the profile, if different from the name of the resource block.",
@@ -41,7 +105,7 @@ class Chef
41
105
  description: "Use to specify a profile. This may be the name of a profile contained in a cookbook or a Hash that contains the contents of the profile."
42
106
 
43
107
  property :identifier, String,
44
- description: "Use to specify the identifier for the profile, such as com.company.screensaver."
108
+ description: "Use to specify the identifier for the profile, such as `com.company.screensaver`."
45
109
 
46
110
  # this is not a property it is necessary for the tempfile this resource uses to work (FIXME: this is terrible)
47
111
  #
@@ -80,10 +144,6 @@ class Chef
80
144
  end
81
145
 
82
146
  def check_resource_semantics!
83
- if mac? && node["platform_version"] =~ ">= 11.0"
84
- raise "The osx_profile resource is not available on macOS Big Sur or above due to Apple's removal of support for CLI profile installation"
85
- end
86
-
87
147
  if action == :remove
88
148
  if new_profile_identifier
89
149
  if invalid_profile_name?(new_profile_identifier)
@@ -97,6 +157,11 @@ class Chef
97
157
  end
98
158
 
99
159
  if action == :install
160
+ # we only do this check for the install action so that profiles can still be removed on macOS 11+
161
+ if mac? && node["platform_version"] =~ ">= 11.0"
162
+ raise "The osx_profile resource is not available on macOS Big Sur or above due to Apple's removal of support for CLI profile installation"
163
+ end
164
+
100
165
  if new_profile_hash.is_a?(Hash) && !new_profile_hash.include?("PayloadIdentifier")
101
166
  raise "The specified profile does not seem to be valid"
102
167
  end
@@ -243,19 +308,18 @@ class Chef
243
308
  #
244
309
 
245
310
  def get_installed_profiles(update = nil)
311
+ logger.trace("Saving profile data to node.run_state")
246
312
  if update
247
313
  node.run_state[:config_profiles] = query_installed_profiles
248
314
  else
249
315
  node.run_state[:config_profiles] ||= query_installed_profiles
250
316
  end
251
- logger.trace("Saved profiles to run_state")
252
317
  end
253
318
 
254
319
  def query_installed_profiles
255
- Tempfile.open("allprofiles.plist") do |tempfile|
256
- shell_out( "/usr/bin/profiles", "-P", "-o", tempfile.path )
257
- ::Plist.parse_xml(tempfile)
258
- end
320
+ logger.trace("Running /usr/bin/profiles -P -o stdout-xml to determine profile state")
321
+ so = shell_out( "/usr/bin/profiles", "-P", "-o", "stdout-xml" )
322
+ ::Plist.parse_xml(so.stdout)
259
323
  end
260
324
 
261
325
  def profile_installed?
@@ -32,9 +32,9 @@ class Chef
32
32
 
33
33
  description "Use the **perl** resource to execute scripts using the Perl interpreter."\
34
34
  " This resource may also use any of the actions and properties that are"\
35
- " available to the execute resource. Commands that are executed with this"\
35
+ " available to the **execute** resource. Commands that are executed with this"\
36
36
  " resource are (by their nature) not idempotent, as they are typically"\
37
- " unique to the environment in which they are run. Use not_if and only_if"\
37
+ " unique to the environment in which they are run. Use `not_if` and `only_if`"\
38
38
  " to guard this resource for idempotence."
39
39
  end
40
40
  end
@@ -16,7 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
  require_relative "../resource"
19
- require "plist"
19
+ autoload :Plist, "plist"
20
20
 
21
21
  class Chef
22
22
  class Resource
@@ -151,9 +151,7 @@ class Chef
151
151
  value.to_i
152
152
  when "float"
153
153
  value.to_f
154
- when "string"
155
- value
156
- when "dictionary"
154
+ when "string", "dictionary"
157
155
  value
158
156
  when nil
159
157
  ""
@@ -168,9 +166,7 @@ class Chef
168
166
  "array"
169
167
  when Integer
170
168
  "integer"
171
- when FalseClass
172
- "bool"
173
- when TrueClass
169
+ when FalseClass, TrueClass
174
170
  "bool"
175
171
  when Hash
176
172
  "dict"
@@ -16,7 +16,6 @@
16
16
  #
17
17
 
18
18
  require_relative "../resource"
19
- require_relative "../json_compat"
20
19
 
21
20
  class Chef
22
21
  class Resource
@@ -33,7 +32,7 @@ class Chef
33
32
  name_property: true
34
33
 
35
34
  property :url, String,
36
- description: "The url to the package source.",
35
+ description: "The URL to the package source.",
37
36
  required: [:register]
38
37
 
39
38
  property :trusted, [TrueClass, FalseClass],
@@ -43,25 +42,25 @@ class Chef
43
42
  property :provider_name, String,
44
43
  equal_to: %w{ Programs msi NuGet msu PowerShellGet psl chocolatey },
45
44
  validation_message: "The following providers are supported: 'Programs', 'msi', 'NuGet', 'msu', 'PowerShellGet', 'psl' or 'chocolatey'",
46
- description: "The package management provider for the source. It supports the following providers: 'Programs', 'msi', 'NuGet', 'msu', 'PowerShellGet', 'psl' and 'chocolatey'.",
45
+ description: "The package management provider for the source.",
47
46
  default: "NuGet"
48
47
 
49
48
  property :publish_location, String,
50
- description: "The url where modules will be published to for this source. Only valid if the provider is 'PowerShellGet'."
49
+ description: "The URL where modules will be published to for this source. Only valid if the provider is `PowerShellGet`."
51
50
 
52
51
  property :script_source_location, String,
53
- description: "The url where scripts are located for this source. Only valid if the provider is 'PowerShellGet'."
52
+ description: "The URL where scripts are located for this source. Only valid if the provider is `PowerShellGet`."
54
53
 
55
54
  property :script_publish_location, String,
56
- description: "The location where scripts will be published to for this source. Only valid if the provider is 'PowerShellGet'."
55
+ description: "The location where scripts will be published to for this source. Only valid if the provider is `PowerShellGet`."
57
56
 
58
57
  load_current_value do
59
58
  cmd = load_resource_state_script(source_name)
60
- repo = powershell_out!(cmd)
61
- if repo.stdout.empty?
59
+ repo = powershell_exec!(cmd)
60
+ if repo.result.empty?
62
61
  current_value_does_not_exist!
63
62
  else
64
- status = Chef::JSONCompat.from_json(repo.stdout)
63
+ status = repo.result
65
64
  end
66
65
  url status["url"]
67
66
  trusted status["trusted"]
@@ -78,28 +77,28 @@ class Chef
78
77
  if package_source_exists?
79
78
  converge_if_changed :url, :trusted, :publish_location, :script_source_location, :script_publish_location do
80
79
  update_cmd = build_ps_repository_command("Set", new_resource)
81
- res = powershell_out(update_cmd)
82
- raise "Failed to update #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
80
+ res = powershell_exec(update_cmd)
81
+ raise "Failed to update #{new_resource.source_name}: #{res.errors}" if res.error?
83
82
  end
84
83
  else
85
84
  converge_by("register source: #{new_resource.source_name}") do
86
85
  register_cmd = build_ps_repository_command("Register", new_resource)
87
- res = powershell_out(register_cmd)
88
- raise "Failed to register #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
86
+ res = powershell_exec(register_cmd)
87
+ raise "Failed to register #{new_resource.source_name}: #{res.errors}" if res.error?
89
88
  end
90
89
  end
91
90
  else
92
91
  if package_source_exists?
93
92
  converge_if_changed :url, :trusted, :provider_name do
94
93
  update_cmd = build_package_source_command("Set", new_resource)
95
- res = powershell_out(update_cmd)
96
- raise "Failed to update #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
94
+ res = powershell_exec(update_cmd)
95
+ raise "Failed to update #{new_resource.source_name}: #{res.errors}" if res.error?
97
96
  end
98
97
  else
99
98
  converge_by("register source: #{new_resource.source_name}") do
100
99
  register_cmd = build_package_source_command("Register", new_resource)
101
- res = powershell_out(register_cmd)
102
- raise "Failed to register #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
100
+ res = powershell_exec(register_cmd)
101
+ raise "Failed to register #{new_resource.source_name}: #{res.errors}" if res.error?
103
102
  end
104
103
  end
105
104
  end
@@ -110,16 +109,16 @@ class Chef
110
109
  if package_source_exists?
111
110
  unregister_cmd = "Get-PackageSource -Name '#{new_resource.source_name}' | Unregister-PackageSource"
112
111
  converge_by("unregister source: #{new_resource.source_name}") do
113
- res = powershell_out(unregister_cmd)
114
- raise "Failed to unregister #{new_resource.source_name}: #{res.stderr}" unless res.stderr.empty?
112
+ res = powershell_exec(unregister_cmd)
113
+ raise "Failed to unregister #{new_resource.source_name}: #{res.errors}" if res.error?
115
114
  end
116
115
  end
117
116
  end
118
117
 
119
118
  action_class do
120
119
  def package_source_exists?
121
- cmd = powershell_out!("(Get-PackageSource -Name '#{new_resource.source_name}' -WarningAction SilentlyContinue).Name")
122
- cmd.stdout.downcase.strip == new_resource.source_name.downcase
120
+ cmd = powershell_exec!("(Get-PackageSource -Name '#{new_resource.source_name}' -ErrorAction SilentlyContinue).Name")
121
+ !cmd.result.empty? && cmd.result.to_s.downcase.strip == new_resource.source_name.downcase
123
122
  end
124
123
 
125
124
  def psrepository_cmdlet_appropriate?
@@ -133,6 +132,7 @@ class Chef
133
132
  cmd << " -PublishLocation '#{new_resource.publish_location}'" if new_resource.publish_location
134
133
  cmd << " -ScriptSourceLocation '#{new_resource.script_source_location}'" if new_resource.script_source_location
135
134
  cmd << " -ScriptPublishLocation '#{new_resource.script_publish_location}'" if new_resource.script_publish_location
135
+ cmd << " | Out-Null"
136
136
  cmd
137
137
  end
138
138
 
@@ -141,6 +141,7 @@ class Chef
141
141
  cmd << " -Location '#{new_resource.url}'" if new_resource.url
142
142
  cmd << " -Trusted:#{new_resource.trusted ? "$true" : "$false"}"
143
143
  cmd << " -ProviderName '#{new_resource.provider_name}'" if new_resource.provider_name
144
+ cmd << " | Out-Null"
144
145
  cmd
145
146
  end
146
147
  end
@@ -157,11 +158,11 @@ class Chef
157
158
  if ((Get-PackageSource -Name '#{name}').ProviderName -eq 'PowerShellGet') {
158
159
  (Get-PSRepository -Name '#{name}') | Select @{n='source_name';e={$_.Name}}, @{n='url';e={$_.SourceLocation}},
159
160
  @{n='trusted';e={$_.Trusted}}, @{n='provider_name';e={$_.PackageManagementProvider}}, @{n='publish_location';e={$_.PublishLocation}},
160
- @{n='script_source_location';e={$_.ScriptSourceLocation}}, @{n='script_publish_location';e={$_.ScriptPublishLocation}} | ConvertTo-Json
161
+ @{n='script_source_location';e={$_.ScriptSourceLocation}}, @{n='script_publish_location';e={$_.ScriptPublishLocation}}
161
162
  }
162
163
  else {
163
164
  (Get-PackageSource -Name '#{name}') | Select @{n='source_name';e={$_.Name}}, @{n='url';e={$_.Location}},
164
- @{n='provider_name';e={$_.ProviderName}}, @{n='trusted';e={$_.IsTrusted}} | ConvertTo-Json
165
+ @{n='provider_name';e={$_.ProviderName}}, @{n='trusted';e={$_.IsTrusted}}
165
166
  }
166
167
  }
167
168
  EOH
@@ -22,11 +22,24 @@ class Chef
22
22
  class PowershellScript < Chef::Resource::WindowsScript
23
23
  unified_mode true
24
24
 
25
+ set_guard_inherited_attributes(:interpreter)
26
+
25
27
  provides :powershell_script, os: "windows"
26
28
 
29
+ description <<~DESC
30
+ Use the **powershell_script** resource to execute a script using the Windows PowerShell interpreter, much like how the script and script-based resources **bash**, **csh**, **perl**, **python**, and **ruby** are used. The **powershell_script** resource is specific to the Microsoft Windows platform, but may use both the the Windows PowerShell interpreter or the PowerShell Core (pwsh) interpreter as of Chef Infra Client 16.6 and later.
31
+
32
+ The **powershell_script** resource creates and executes a temporary file rather than running the command inline. Commands that are executed with this resource are (by their nature) not idempotent, as they are typically unique to the environment in which they are run. Use `not_if` and `only_if` conditionals to guard this resource for idempotence.
33
+ DESC
34
+
27
35
  property :flags, String,
28
36
  description: "A string that is passed to the Windows PowerShell command"
29
37
 
38
+ property :interpreter, String,
39
+ default: "powershell",
40
+ equal_to: %w{powershell pwsh},
41
+ description: "The interpreter type, `powershell` or `pwsh` (PowerShell Core)"
42
+
30
43
  property :convert_boolean_return, [true, false],
31
44
  default: false,
32
45
  description: <<~DESC
@@ -51,18 +64,8 @@ class Chef
51
64
  ```
52
65
  DESC
53
66
 
54
- description "Use the **powershell_script** resource to execute a script using the Windows PowerShell"\
55
- " interpreter, much like how the script and script-based resources—bash, csh, perl, python,"\
56
- " and ruby—are used. The powershell_script is specific to the Microsoft Windows platform"\
57
- " and the Windows PowerShell interpreter.\n\n The powershell_script resource creates and"\
58
- " executes a temporary file (similar to how the script resource behaves), rather than running"\
59
- " the command inline. Commands that are executed with this resource are (by their nature) not"\
60
- " idempotent, as they are typically unique to the environment in which they are run. Use not_if"\
61
- " and only_if to guard this resource for idempotence."
62
-
63
67
  def initialize(*args)
64
68
  super
65
- @interpreter = "powershell.exe"
66
69
  @default_guard_interpreter = resource_name
67
70
  end
68
71
 
@@ -73,7 +76,7 @@ class Chef
73
76
  # default for this resource, this method can be removed since
74
77
  # guard context and recipe resource context will have the
75
78
  # same behavior.
76
- def self.get_default_attributes(opts)
79
+ def self.get_default_attributes
77
80
  { convert_boolean_return: true }
78
81
  end
79
82
  end