chef 16.3.45-universal-mingw32 → 16.5.77-universal-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +2 -2
  4. data/bin/knife +1 -1
  5. data/chef-universal-mingw32.gemspec +0 -1
  6. data/chef.gemspec +2 -1
  7. data/distro/templates/powershell/chef/chef.psm1.erb +18 -18
  8. data/ext/win32-eventlog/Rakefile +2 -2
  9. data/ext/win32-eventlog/chef-log.man.erb +4 -4
  10. data/lib/chef/action_collection.rb +4 -0
  11. data/lib/chef/api_client/registration.rb +2 -2
  12. data/lib/chef/application.rb +20 -18
  13. data/lib/chef/application/apply.rb +17 -12
  14. data/lib/chef/application/base.rb +26 -23
  15. data/lib/chef/application/client.rb +10 -4
  16. data/lib/chef/application/exit_code.rb +13 -4
  17. data/lib/chef/application/knife.rb +22 -11
  18. data/lib/chef/application/solo.rb +2 -1
  19. data/lib/chef/application/windows_service.rb +39 -39
  20. data/lib/chef/application/windows_service_manager.rb +6 -6
  21. data/lib/chef/chef_class.rb +0 -1
  22. data/lib/chef/chef_fs/chef_fs_data_store.rb +55 -55
  23. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +10 -10
  24. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +8 -8
  25. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +8 -8
  26. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
  27. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +2 -2
  28. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +18 -18
  29. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  30. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
  31. data/lib/chef/chef_fs/knife.rb +2 -2
  32. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  33. data/lib/chef/client.rb +21 -22
  34. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  35. data/lib/chef/cookbook/gem_installer.rb +1 -1
  36. data/lib/chef/cookbook/synchronizer.rb +2 -2
  37. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  38. data/lib/chef/cookbook_uploader.rb +1 -1
  39. data/lib/chef/data_collector.rb +6 -5
  40. data/lib/chef/data_collector/config_validation.rb +22 -13
  41. data/lib/chef/data_collector/run_end_message.rb +13 -3
  42. data/lib/chef/data_collector/run_start_message.rb +1 -1
  43. data/lib/chef/deprecated.rb +1 -1
  44. data/lib/chef/deprecation/warnings.rb +2 -2
  45. data/lib/chef/digester.rb +2 -2
  46. data/lib/chef/dsl/chef_vault.rb +1 -1
  47. data/lib/chef/dsl/data_query.rb +2 -2
  48. data/lib/chef/dsl/platform_introspection.rb +9 -9
  49. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  50. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  51. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  52. data/lib/chef/environment.rb +4 -4
  53. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  54. data/lib/chef/exceptions.rb +5 -5
  55. data/lib/chef/file_access_control/windows.rb +5 -1
  56. data/lib/chef/file_content_management/tempfile.rb +10 -10
  57. data/lib/chef/formatters/doc.rb +7 -6
  58. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  59. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  60. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  61. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
  62. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  63. data/lib/chef/formatters/indentable_output_stream.rb +2 -2
  64. data/lib/chef/formatters/minimal.rb +5 -4
  65. data/lib/chef/http.rb +6 -3
  66. data/lib/chef/http/auth_credentials.rb +5 -1
  67. data/lib/chef/http/authenticator.rb +1 -1
  68. data/lib/chef/http/basic_client.rb +4 -2
  69. data/lib/chef/http/decompressor.rb +1 -1
  70. data/lib/chef/http/http_request.rb +7 -5
  71. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  72. data/lib/chef/http/ssl_policies.rb +1 -1
  73. data/lib/chef/json_compat.rb +2 -2
  74. data/lib/chef/knife.rb +4 -4
  75. data/lib/chef/knife/bootstrap.rb +18 -16
  76. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  77. data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
  78. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
  79. data/lib/chef/knife/client_create.rb +3 -3
  80. data/lib/chef/knife/config_get.rb +8 -97
  81. data/lib/chef/knife/config_get_profile.rb +9 -9
  82. data/lib/chef/knife/config_list.rb +139 -0
  83. data/lib/chef/knife/config_list_profiles.rb +8 -98
  84. data/lib/chef/knife/config_show.rb +127 -0
  85. data/lib/chef/knife/config_use.rb +61 -0
  86. data/lib/chef/knife/config_use_profile.rb +9 -24
  87. data/lib/chef/knife/configure.rb +4 -2
  88. data/lib/chef/knife/cookbook_download.rb +1 -1
  89. data/lib/chef/knife/cookbook_metadata.rb +1 -1
  90. data/lib/chef/knife/cookbook_upload.rb +23 -23
  91. data/lib/chef/knife/core/bootstrap_context.rb +2 -2
  92. data/lib/chef/knife/core/generic_presenter.rb +1 -1
  93. data/lib/chef/knife/core/hashed_command_loader.rb +2 -2
  94. data/lib/chef/knife/core/object_loader.rb +1 -1
  95. data/lib/chef/knife/core/ui.rb +1 -1
  96. data/lib/chef/knife/core/windows_bootstrap_context.rb +42 -34
  97. data/lib/chef/knife/delete.rb +15 -15
  98. data/lib/chef/knife/exec.rb +4 -4
  99. data/lib/chef/knife/node_policy_set.rb +2 -2
  100. data/lib/chef/knife/node_run_list_add.rb +1 -1
  101. data/lib/chef/knife/node_run_list_remove.rb +1 -1
  102. data/lib/chef/knife/node_run_list_set.rb +1 -1
  103. data/lib/chef/knife/node_show.rb +2 -2
  104. data/lib/chef/knife/role_env_run_list_add.rb +1 -1
  105. data/lib/chef/knife/role_env_run_list_set.rb +1 -1
  106. data/lib/chef/knife/role_run_list_add.rb +1 -1
  107. data/lib/chef/knife/role_run_list_set.rb +1 -1
  108. data/lib/chef/knife/search.rb +0 -1
  109. data/lib/chef/knife/serve.rb +3 -3
  110. data/lib/chef/knife/ssh.rb +24 -9
  111. data/lib/chef/knife/ssl_check.rb +3 -3
  112. data/lib/chef/knife/status.rb +2 -2
  113. data/lib/chef/knife/tag_create.rb +1 -1
  114. data/lib/chef/knife/tag_delete.rb +1 -1
  115. data/lib/chef/knife/user_create.rb +2 -2
  116. data/lib/chef/knife/xargs.rb +19 -19
  117. data/lib/chef/knife/yaml_convert.rb +1 -1
  118. data/lib/chef/local_mode.rb +2 -2
  119. data/lib/chef/log/syslog.rb +2 -2
  120. data/lib/chef/log/winevt.rb +2 -2
  121. data/lib/chef/mixin/checksum.rb +0 -1
  122. data/lib/chef/mixin/deep_merge.rb +35 -18
  123. data/lib/chef/mixin/openssl_helper.rb +4 -5
  124. data/lib/chef/mixin/shell_out.rb +1 -1
  125. data/lib/chef/mixin/template.rb +3 -3
  126. data/lib/chef/mixin/uris.rb +4 -2
  127. data/lib/chef/mixin/versioned_api.rb +1 -2
  128. data/lib/chef/mixin/which.rb +1 -1
  129. data/lib/chef/monkey_patches/net_http.rb +4 -4
  130. data/lib/chef/monkey_patches/webrick-utils.rb +10 -10
  131. data/lib/chef/node/attribute.rb +2 -4
  132. data/lib/chef/node_map.rb +4 -4
  133. data/lib/chef/platform/service_helpers.rb +1 -1
  134. data/lib/chef/policy_builder/dynamic.rb +2 -0
  135. data/lib/chef/policy_builder/policyfile.rb +2 -2
  136. data/lib/chef/property.rb +1 -1
  137. data/lib/chef/provider.rb +1 -5
  138. data/lib/chef/provider/cron/unix.rb +0 -2
  139. data/lib/chef/provider/file.rb +2 -2
  140. data/lib/chef/provider/git.rb +5 -5
  141. data/lib/chef/provider/group.rb +0 -2
  142. data/lib/chef/provider/group/suse.rb +5 -5
  143. data/lib/chef/provider/ifconfig.rb +1 -4
  144. data/lib/chef/provider/launchd.rb +2 -2
  145. data/lib/chef/provider/link.rb +0 -9
  146. data/lib/chef/provider/mount.rb +0 -2
  147. data/lib/chef/provider/mount/linux.rb +63 -0
  148. data/lib/chef/provider/package.rb +0 -2
  149. data/lib/chef/provider/package/dpkg.rb +3 -12
  150. data/lib/chef/provider/package/homebrew.rb +1 -1
  151. data/lib/chef/provider/package/rubygems.rb +22 -19
  152. data/lib/chef/provider/package/snap.rb +1 -2
  153. data/lib/chef/provider/package/windows.rb +2 -2
  154. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +12 -10
  155. data/lib/chef/provider/package/zypper.rb +1 -1
  156. data/lib/chef/provider/powershell_script.rb +21 -5
  157. data/lib/chef/provider/remote_file/content.rb +3 -0
  158. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  159. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  160. data/lib/chef/provider/route.rb +2 -6
  161. data/lib/chef/provider/service/arch.rb +1 -1
  162. data/lib/chef/provider/service/debian.rb +1 -1
  163. data/lib/chef/provider/service/gentoo.rb +2 -2
  164. data/lib/chef/provider/service/macosx.rb +4 -4
  165. data/lib/chef/provider/service/openbsd.rb +1 -4
  166. data/lib/chef/provider/service/redhat.rb +3 -3
  167. data/lib/chef/provider/service/upstart.rb +1 -1
  168. data/lib/chef/provider/service/windows.rb +10 -10
  169. data/lib/chef/provider/systemd_unit.rb +0 -2
  170. data/lib/chef/provider/template/content.rb +1 -0
  171. data/lib/chef/provider/template_finder.rb +2 -10
  172. data/lib/chef/provider/user/dscl.rb +7 -7
  173. data/lib/chef/provider/user/mac.rb +12 -12
  174. data/lib/chef/provider/windows_task.rb +1 -5
  175. data/lib/chef/provider/zypper_repository.rb +2 -3
  176. data/lib/chef/provider_resolver.rb +1 -1
  177. data/lib/chef/providers.rb +1 -1
  178. data/lib/chef/recipe.rb +2 -2
  179. data/lib/chef/resource.rb +8 -12
  180. data/lib/chef/resource/apt_repository.rb +5 -12
  181. data/lib/chef/resource/bff_package.rb +22 -0
  182. data/lib/chef/resource/breakpoint.rb +57 -2
  183. data/lib/chef/resource/build_essential.rb +1 -1
  184. data/lib/chef/resource/cab_package.rb +29 -0
  185. data/lib/chef/resource/chef_client_cron.rb +32 -25
  186. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  187. data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
  188. data/lib/chef/resource/chef_client_systemd_timer.rb +26 -19
  189. data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
  190. data/lib/chef/resource/chef_gem.rb +10 -10
  191. data/lib/chef/resource/chef_handler.rb +149 -4
  192. data/lib/chef/resource/chef_sleep.rb +2 -2
  193. data/lib/chef/resource/chef_vault_secret.rb +14 -14
  194. data/lib/chef/resource/cookbook_file.rb +2 -2
  195. data/lib/chef/resource/cron/_cron_shared.rb +1 -0
  196. data/lib/chef/resource/cron/cron_d.rb +0 -1
  197. data/lib/chef/resource/dnf_package.rb +2 -2
  198. data/lib/chef/resource/dsc_resource.rb +0 -1
  199. data/lib/chef/resource/dsc_script.rb +2 -2
  200. data/lib/chef/resource/execute.rb +8 -9
  201. data/lib/chef/resource/file.rb +4 -4
  202. data/lib/chef/resource/gem_package.rb +5 -5
  203. data/lib/chef/resource/homebrew_package.rb +3 -3
  204. data/lib/chef/resource/homebrew_update.rb +7 -7
  205. data/lib/chef/resource/hostname.rb +2 -2
  206. data/lib/chef/resource/launchd.rb +2 -1
  207. data/lib/chef/resource/locale.rb +2 -2
  208. data/lib/chef/resource/macos_userdefaults.rb +3 -3
  209. data/lib/chef/resource/notify_group.rb +0 -1
  210. data/lib/chef/resource/ohai.rb +46 -3
  211. data/lib/chef/resource/ohai_hint.rb +33 -0
  212. data/lib/chef/resource/openssl_dhparam.rb +29 -5
  213. data/lib/chef/resource/openssl_ec_private_key.rb +8 -3
  214. data/lib/chef/resource/openssl_ec_public_key.rb +4 -2
  215. data/lib/chef/resource/openssl_rsa_private_key.rb +8 -3
  216. data/lib/chef/resource/openssl_rsa_public_key.rb +2 -0
  217. data/lib/chef/resource/openssl_x509_certificate.rb +38 -35
  218. data/lib/chef/resource/openssl_x509_crl.rb +21 -10
  219. data/lib/chef/resource/openssl_x509_request.rb +37 -36
  220. data/lib/chef/resource/osx_profile.rb +292 -6
  221. data/lib/chef/resource/plist.rb +1 -1
  222. data/lib/chef/resource/powershell_package_source.rb +6 -6
  223. data/lib/chef/resource/powershell_script.rb +24 -30
  224. data/lib/chef/resource/reboot.rb +2 -2
  225. data/lib/chef/resource/remote_file.rb +3 -3
  226. data/lib/chef/resource/rhsm_register.rb +22 -10
  227. data/lib/chef/resource/ruby_block.rb +2 -2
  228. data/lib/chef/resource/scm/subversion.rb +2 -2
  229. data/lib/chef/resource/service.rb +3 -3
  230. data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
  231. data/lib/chef/resource/sudo.rb +1 -1
  232. data/lib/chef/resource/support/cron.d.erb +1 -1
  233. data/lib/chef/resource/support/cron_access.erb +1 -1
  234. data/lib/chef/resource/support/sudoer.erb +1 -1
  235. data/lib/chef/resource/support/ulimit.erb +1 -1
  236. data/lib/chef/resource/sysctl.rb +6 -10
  237. data/lib/chef/resource/systemd_unit.rb +2 -2
  238. data/lib/chef/resource/template.rb +2 -2
  239. data/lib/chef/resource/timezone.rb +112 -73
  240. data/lib/chef/resource/windows_ad_join.rb +12 -3
  241. data/lib/chef/resource/windows_audit_policy.rb +3 -0
  242. data/lib/chef/resource/windows_auto_run.rb +2 -0
  243. data/lib/chef/resource/windows_certificate.rb +8 -4
  244. data/lib/chef/resource/windows_dfs_folder.rb +2 -0
  245. data/lib/chef/resource/windows_dfs_namespace.rb +2 -0
  246. data/lib/chef/resource/windows_dfs_server.rb +2 -0
  247. data/lib/chef/resource/windows_dns_record.rb +10 -7
  248. data/lib/chef/resource/windows_dns_zone.rb +12 -7
  249. data/lib/chef/resource/windows_feature.rb +2 -0
  250. data/lib/chef/resource/windows_feature_dism.rb +10 -0
  251. data/lib/chef/resource/windows_feature_powershell.rb +14 -2
  252. data/lib/chef/resource/windows_firewall_profile.rb +24 -20
  253. data/lib/chef/resource/windows_firewall_rule.rb +5 -3
  254. data/lib/chef/resource/windows_font.rb +3 -1
  255. data/lib/chef/resource/windows_package.rb +28 -5
  256. data/lib/chef/resource/windows_pagefile.rb +4 -0
  257. data/lib/chef/resource/windows_printer.rb +22 -21
  258. data/lib/chef/resource/windows_printer_port.rb +20 -17
  259. data/lib/chef/resource/windows_security_policy.rb +2 -0
  260. data/lib/chef/resource/windows_share.rb +5 -3
  261. data/lib/chef/resource/windows_shortcut.rb +2 -0
  262. data/lib/chef/resource/windows_uac.rb +2 -0
  263. data/lib/chef/resource/windows_user_privilege.rb +54 -53
  264. data/lib/chef/resource/windows_workgroup.rb +5 -6
  265. data/lib/chef/resource/yum_package.rb +2 -2
  266. data/lib/chef/resource_collection/stepable_iterator.rb +1 -2
  267. data/lib/chef/resource_reporter.rb +0 -2
  268. data/lib/chef/resources.rb +3 -1
  269. data/lib/chef/role.rb +2 -2
  270. data/lib/chef/run_context.rb +2 -2
  271. data/lib/chef/run_context/cookbook_compiler.rb +21 -21
  272. data/lib/chef/run_lock.rb +2 -2
  273. data/lib/chef/run_status.rb +2 -6
  274. data/lib/chef/search/query.rb +6 -5
  275. data/lib/chef/shell.rb +32 -27
  276. data/lib/chef/shell/ext.rb +11 -11
  277. data/lib/chef/shell/shell_session.rb +2 -2
  278. data/lib/chef/train_transport.rb +5 -104
  279. data/lib/chef/util/backup.rb +2 -2
  280. data/lib/chef/util/diff.rb +14 -14
  281. data/lib/chef/util/powershell/cmdlet.rb +4 -2
  282. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  283. data/lib/chef/util/threaded_job_queue.rb +0 -2
  284. data/lib/chef/version.rb +1 -1
  285. data/lib/chef/win32/crypto.rb +1 -1
  286. data/lib/chef/win32/file.rb +3 -3
  287. data/lib/chef/win32/file/version_info.rb +5 -5
  288. data/lib/chef/win32/registry.rb +1 -2
  289. data/lib/chef/win32/unicode.rb +1 -1
  290. data/spec/data/shef-config.rb +1 -1
  291. data/spec/data/ssl/chef-rspec.cert +15 -15
  292. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  293. data/spec/functional/resource/aix_service_spec.rb +2 -2
  294. data/spec/functional/resource/aixinit_service_spec.rb +8 -8
  295. data/spec/functional/resource/bff_spec.rb +2 -2
  296. data/spec/functional/resource/cookbook_file_spec.rb +1 -1
  297. data/spec/functional/resource/dsc_resource_spec.rb +1 -1
  298. data/spec/functional/resource/dsc_script_spec.rb +0 -1
  299. data/spec/functional/resource/group_spec.rb +6 -6
  300. data/spec/functional/resource/insserv_spec.rb +5 -5
  301. data/spec/functional/resource/link_spec.rb +20 -20
  302. data/spec/functional/resource/powershell_script_spec.rb +4 -4
  303. data/spec/functional/resource/rpm_spec.rb +2 -2
  304. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  305. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  306. data/spec/functional/resource/windows_certificate_spec.rb +3 -3
  307. data/spec/functional/resource/windows_font_spec.rb +49 -0
  308. data/spec/functional/resource/windows_security_policy_spec.rb +0 -3
  309. data/spec/functional/resource/windows_task_spec.rb +13 -13
  310. data/spec/functional/run_lock_spec.rb +24 -24
  311. data/spec/functional/version_spec.rb +3 -3
  312. data/spec/functional/win32/registry_spec.rb +8 -8
  313. data/spec/functional/win32/service_manager_spec.rb +1 -1
  314. data/spec/integration/client/client_spec.rb +4 -4
  315. data/spec/integration/client/exit_code_spec.rb +3 -2
  316. data/spec/integration/client/ipv6_spec.rb +1 -1
  317. data/spec/integration/knife/common_options_spec.rb +12 -12
  318. data/spec/integration/knife/config_list_spec.rb +220 -0
  319. data/spec/integration/knife/config_show_spec.rb +192 -0
  320. data/spec/integration/knife/config_use_spec.rb +198 -0
  321. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  322. data/spec/integration/knife/diff_spec.rb +3 -1
  323. data/spec/integration/knife/download_spec.rb +3 -1
  324. data/spec/integration/knife/serve_spec.rb +5 -5
  325. data/spec/integration/knife/upload_spec.rb +3 -1
  326. data/spec/integration/ohai/ohai_spec.rb +61 -0
  327. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  328. data/spec/integration/recipes/remote_directory.rb +1 -1
  329. data/spec/integration/solo/solo_spec.rb +5 -5
  330. data/spec/spec_helper.rb +12 -11
  331. data/spec/stress/win32/file_spec.rb +1 -1
  332. data/spec/support/chef_helpers.rb +2 -2
  333. data/spec/support/matchers/leak.rb +2 -2
  334. data/spec/support/platform_helpers.rb +17 -35
  335. data/spec/support/platforms/win32/spec_service.rb +1 -1
  336. data/spec/support/shared/functional/directory_resource.rb +1 -1
  337. data/spec/support/shared/functional/execute_resource.rb +1 -1
  338. data/spec/support/shared/functional/file_resource.rb +20 -20
  339. data/spec/support/shared/functional/securable_resource.rb +108 -27
  340. data/spec/support/shared/functional/win32_service.rb +2 -2
  341. data/spec/support/shared/functional/windows_script.rb +3 -3
  342. data/spec/support/shared/integration/integration_helper.rb +22 -52
  343. data/spec/support/shared/unit/application_dot_d.rb +5 -3
  344. data/spec/support/shared/unit/script_resource.rb +6 -20
  345. data/spec/support/shared/unit/windows_script_resource.rb +15 -28
  346. data/spec/tiny_server.rb +0 -1
  347. data/spec/unit/application/client_spec.rb +2 -2
  348. data/spec/unit/application/exit_code_spec.rb +10 -0
  349. data/spec/unit/application_spec.rb +4 -6
  350. data/spec/unit/chef_fs/config_spec.rb +1 -1
  351. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  352. data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
  353. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  354. data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
  355. data/spec/unit/cookbook_spec.rb +2 -2
  356. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  357. data/spec/unit/data_collector_spec.rb +28 -117
  358. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  359. data/spec/unit/environment_spec.rb +7 -7
  360. data/spec/unit/file_access_control_spec.rb +1 -1
  361. data/spec/unit/knife/bootstrap_spec.rb +20 -20
  362. data/spec/unit/knife/cookbook_download_spec.rb +4 -4
  363. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
  364. data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
  365. data/spec/unit/knife/core/ui_spec.rb +1 -0
  366. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +21 -12
  367. data/spec/unit/knife/ssh_spec.rb +2 -2
  368. data/spec/unit/knife/supermarket_share_spec.rb +1 -1
  369. data/spec/unit/lwrp_spec.rb +3 -3
  370. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  371. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  372. data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
  373. data/spec/unit/mixin/securable_spec.rb +2 -2
  374. data/spec/unit/mixin/template_spec.rb +30 -30
  375. data/spec/unit/mixin/windows_architecture_helper_spec.rb +4 -4
  376. data/spec/unit/node/immutable_collections_spec.rb +8 -4
  377. data/spec/unit/node_spec.rb +5 -5
  378. data/spec/unit/provider/mount/linux_spec.rb +97 -0
  379. data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
  380. data/spec/unit/provider/package/powershell_spec.rb +1 -1
  381. data/spec/unit/provider/package/rubygems_spec.rb +4 -1
  382. data/spec/unit/provider/powershell_script_spec.rb +11 -4
  383. data/spec/unit/provider/remote_directory_spec.rb +9 -9
  384. data/spec/unit/provider/route_spec.rb +0 -2
  385. data/spec/unit/provider/service/arch_service_spec.rb +3 -2
  386. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  387. data/spec/unit/provider/service/gentoo_service_spec.rb +7 -7
  388. data/spec/unit/provider/service/macosx_spec.rb +3 -3
  389. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  390. data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
  391. data/spec/unit/provider_resolver_spec.rb +6 -6
  392. data/spec/unit/recipe_spec.rb +1 -1
  393. data/spec/unit/resource/batch_spec.rb +6 -6
  394. data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
  395. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  396. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
  397. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
  398. data/spec/unit/resource/execute_spec.rb +113 -118
  399. data/spec/unit/resource/launchd_spec.rb +8 -0
  400. data/spec/unit/resource/osx_profile_spec.rb +299 -0
  401. data/spec/unit/resource/powershell_script_spec.rb +11 -29
  402. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  403. data/spec/unit/resource/script_spec.rb +6 -1
  404. data/spec/unit/resource/timezone_spec.rb +63 -0
  405. data/spec/unit/resource/windows_feature_powershell_spec.rb +30 -4
  406. data/spec/unit/resource/windows_uac_spec.rb +1 -1
  407. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  408. data/spec/unit/role_spec.rb +11 -11
  409. data/spec/unit/run_lock_spec.rb +5 -1
  410. data/spec/unit/runner_spec.rb +1 -2
  411. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  412. data/spec/unit/shell/shell_session_spec.rb +35 -64
  413. data/spec/unit/shell_spec.rb +16 -19
  414. data/spec/unit/train_transport_spec.rb +14 -13
  415. data/spec/unit/util/selinux_spec.rb +2 -0
  416. data/tasks/rspec.rb +1 -3
  417. metadata +42 -33
  418. data/lib/chef/dist.rb +0 -68
  419. data/lib/chef/provider/osx_profile.rb +0 -255
  420. data/spec/integration/knife/config_get_profile_spec.rb +0 -113
  421. data/spec/integration/knife/config_get_spec.rb +0 -191
  422. data/spec/integration/knife/config_list_profiles_spec.rb +0 -218
  423. data/spec/integration/knife/config_use_profile_spec.rb +0 -154
  424. data/spec/unit/provider/osx_profile_spec.rb +0 -255
@@ -17,6 +17,10 @@
17
17
  #
18
18
 
19
19
  require_relative "../resource"
20
+ require_relative "../log"
21
+ require_relative "../resource/file"
22
+ autoload :UUIDTools, "uuidtools"
23
+ autoload :Plist, "plist"
20
24
 
21
25
  class Chef
22
26
  class Resource
@@ -26,11 +30,72 @@ class Chef
26
30
  provides :osx_profile
27
31
  provides :osx_config_profile
28
32
 
29
- 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."
30
34
  introduced "12.7"
35
+ examples <<~DOC
36
+ **Install a profile from a cookbook file**
31
37
 
32
- default_action :install
33
- allowed_actions :install, :remove
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
34
99
 
35
100
  property :profile_name, String,
36
101
  description: "Use to specify the name of the profile, if different from the name of the resource block.",
@@ -40,10 +105,231 @@ class Chef
40
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."
41
106
 
42
107
  property :identifier, String,
43
- 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`."
109
+
110
+ # this is not a property it is necessary for the tempfile this resource uses to work (FIXME: this is terrible)
111
+ #
112
+ # @api private
113
+ #
114
+ def path(path = nil)
115
+ @path ||= path
116
+ @path
117
+ end
118
+
119
+ action_class do
120
+ def load_current_resource
121
+ @current_resource = Chef::Resource::OsxProfile.new(new_resource.name)
122
+ current_resource.profile_name(new_resource.profile_name)
123
+
124
+ if new_profile_hash
125
+ new_profile_hash["PayloadUUID"] = config_uuid(new_profile_hash)
126
+ end
127
+
128
+ current_resource.profile(current_profile)
129
+ end
130
+
131
+ def current_profile
132
+ all_profiles = get_installed_profiles
133
+
134
+ if all_profiles && all_profiles.key?("_computerlevel")
135
+ return all_profiles["_computerlevel"].find do |item|
136
+ item["ProfileIdentifier"] == new_profile_identifier
137
+ end
138
+ end
139
+ nil
140
+ end
141
+
142
+ def invalid_profile_name?(name_or_identifier)
143
+ name_or_identifier.end_with?(".mobileconfig") || !/^\w+(?:(\.| )\w+)+$/.match(name_or_identifier)
144
+ end
145
+
146
+ def check_resource_semantics!
147
+ if action == :remove
148
+ if new_profile_identifier
149
+ if invalid_profile_name?(new_profile_identifier)
150
+ raise "when removing using the identifier property, it must match the profile identifier"
151
+ end
152
+ else
153
+ if invalid_profile_name?(new_resource.profile_name)
154
+ raise "When removing by resource name, it must match the profile identifier"
155
+ end
156
+ end
157
+ end
158
+
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
+
165
+ if new_profile_hash.is_a?(Hash) && !new_profile_hash.include?("PayloadIdentifier")
166
+ raise "The specified profile does not seem to be valid"
167
+ end
168
+ if new_profile_hash.is_a?(String) && !new_profile_hash.end_with?(".mobileconfig")
169
+ raise "#{new_profile_hash}' is not a valid profile"
170
+ end
171
+ end
172
+ end
173
+ end
174
+
175
+ action :install do
176
+ unless profile_installed?
177
+ converge_by("install profile #{new_profile_identifier}") do
178
+ profile_path = write_profile_to_disk
179
+ install_profile(profile_path)
180
+ get_installed_profiles(true)
181
+ end
182
+ end
183
+ end
184
+
185
+ action :remove do
186
+ # Clean up profile after removing it
187
+ if profile_installed?
188
+ converge_by("remove profile #{new_profile_identifier}") do
189
+ remove_profile
190
+ get_installed_profiles(true)
191
+ end
192
+ end
193
+ end
194
+
195
+ action_class do
196
+ private
197
+
198
+ def profile
199
+ @profile ||= new_resource.profile || new_resource.profile_name
200
+ end
201
+
202
+ def new_profile_hash
203
+ @new_profile_hash ||= get_profile_hash(profile)
204
+ end
205
+
206
+ def new_profile_identifier
207
+ @new_profile_identifier ||= if new_profile_hash
208
+ new_profile_hash["PayloadIdentifier"]
209
+ else
210
+ new_resource.identifier || new_resource.profile_name
211
+ end
212
+ end
213
+
214
+ def load_profile_hash(new_profile)
215
+ # file must exist in cookbook
216
+ return nil unless new_profile.end_with?(".mobileconfig")
217
+
218
+ unless cookbook_file_available?(new_profile)
219
+ raise Chef::Exceptions::FileNotFound, "#{self}: '#{new_profile}' not found in cookbook"
220
+ end
221
+
222
+ cookbook_profile = cache_cookbook_profile(new_profile)
223
+ ::Plist.parse_xml(cookbook_profile)
224
+ end
225
+
226
+ def cookbook_file_available?(cookbook_file)
227
+ run_context.has_cookbook_file_in_cookbook?(
228
+ new_resource.cookbook_name, cookbook_file
229
+ )
230
+ end
231
+
232
+ def get_cache_dir
233
+ Chef::FileCache.create_cache_path(
234
+ "profiles/#{new_resource.cookbook_name}"
235
+ )
236
+ end
237
+
238
+ def cache_cookbook_profile(cookbook_file)
239
+ Chef::FileCache.create_cache_path(
240
+ ::File.join(
241
+ "profiles",
242
+ new_resource.cookbook_name,
243
+ ::File.dirname(cookbook_file)
244
+ )
245
+ )
246
+
247
+ path = ::File.join( get_cache_dir, "#{cookbook_file}.remote")
248
+
249
+ cookbook_file path do
250
+ cookbook_name = new_resource.cookbook_name
251
+ source(cookbook_file)
252
+ backup(false)
253
+ run_action(:create)
254
+ end
255
+
256
+ path
257
+ end
258
+
259
+ def get_profile_hash(new_profile)
260
+ if new_profile.is_a?(Hash)
261
+ new_profile
262
+ elsif new_profile.is_a?(String)
263
+ load_profile_hash(new_profile)
264
+ end
265
+ end
266
+
267
+ def config_uuid(profile)
268
+ # Make a UUID of the profile contents and return as string
269
+ UUIDTools::UUID.sha1_create(
270
+ UUIDTools::UUID_DNS_NAMESPACE,
271
+ profile.to_s
272
+ ).to_s
273
+ end
274
+
275
+ def write_profile_to_disk
276
+ # FIXME: this is kind of terrible, the resource needs a tempfile to use and
277
+ # wants it created similarly to the file providers (with all the magic necessary
278
+ # for determining if it should go in the cwd or into a tmpdir), but it abuses
279
+ # the Chef::FileContentManagement::Tempfile API to do that, which requires setting
280
+ # a `path` method on the resource because of tight-coupling to the file provider
281
+ # pattern. We don't just want to use a file here because the point is to get
282
+ # at the tempfile pattern from the file provider, but to feed that into a shell
283
+ # command rather than deploying the file to somewhere on disk. There's some
284
+ # better API that needs extracting here.
285
+ new_resource.path(Chef::FileCache.create_cache_path("profiles"))
286
+ tempfile = Chef::FileContentManagement::Tempfile.new(new_resource).tempfile
287
+ tempfile.write(new_profile_hash.to_plist)
288
+ tempfile.close
289
+ tempfile.path
290
+ end
291
+
292
+ def install_profile(profile_path)
293
+ cmd = [ "/usr/bin/profiles", "-I", "-F", profile_path ]
294
+ logger.trace("cmd: #{cmd.join(" ")}")
295
+ shell_out!(*cmd)
296
+ end
297
+
298
+ def remove_profile
299
+ cmd = [ "/usr/bin/profiles", "-R", "-p", new_profile_identifier ]
300
+ logger.trace("cmd: #{cmd.join(" ")}")
301
+ shell_out!(*cmd)
302
+ end
303
+
304
+ #
305
+ # FIXME FIXME FIXME
306
+ # The node object should not be used for caching state like this and this is not a public API and may break.
307
+ # FIXME FIXME FIXME
308
+ #
309
+
310
+ def get_installed_profiles(update = nil)
311
+ logger.trace("Saving profile data to node.run_state")
312
+ if update
313
+ node.run_state[:config_profiles] = query_installed_profiles
314
+ else
315
+ node.run_state[:config_profiles] ||= query_installed_profiles
316
+ end
317
+ end
318
+
319
+ def query_installed_profiles
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)
323
+ end
324
+
325
+ def profile_installed?
326
+ # Profile Identifier and UUID must match a currently installed profile
327
+ return false if current_resource.profile.nil? || current_resource.profile.empty?
328
+ return true if action == :remove
44
329
 
45
- property :path, String,
46
- description: "The path to write the profile to disk before loading it."
330
+ current_resource.profile["ProfileUUID"] == new_profile_hash["PayloadUUID"]
331
+ end
332
+ end
47
333
  end
48
334
  end
49
335
  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
@@ -33,8 +33,8 @@ class Chef
33
33
  name_property: true
34
34
 
35
35
  property :url, String,
36
- description: "The url to the package source.",
37
- required: true
36
+ description: "The URL to the package source.",
37
+ required: [:register]
38
38
 
39
39
  property :trusted, [TrueClass, FalseClass],
40
40
  description: "Whether or not to trust packages from this source.",
@@ -43,17 +43,17 @@ class Chef
43
43
  property :provider_name, String,
44
44
  equal_to: %w{ Programs msi NuGet msu PowerShellGet psl chocolatey },
45
45
  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'.",
46
+ description: "The package management provider for the source.",
47
47
  default: "NuGet"
48
48
 
49
49
  property :publish_location, String,
50
- description: "The url where modules will be published to for this source. Only valid if the provider is 'PowerShellGet'."
50
+ description: "The URL where modules will be published to for this source. Only valid if the provider is `PowerShellGet`."
51
51
 
52
52
  property :script_source_location, String,
53
- description: "The url where scripts are located for this source. Only valid if the provider is 'PowerShellGet'."
53
+ description: "The URL where scripts are located for this source. Only valid if the provider is `PowerShellGet`."
54
54
 
55
55
  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'."
56
+ description: "The location where scripts will be published to for this source. Only valid if the provider is `PowerShellGet`."
57
57
 
58
58
  load_current_value do
59
59
  cmd = load_resource_state_script(source_name)
@@ -25,19 +25,31 @@ class Chef
25
25
  provides :powershell_script, os: "windows"
26
26
 
27
27
  property :flags, String,
28
- description: "A string that is passed to the Windows PowerShell command",
29
- default: lazy { default_flags },
30
- coerce: proc { |input|
31
- if input == default_flags
32
- # Means there was no input provided,
33
- # and should use defaults in this case
34
- input
35
- else
36
- # The last occurrence of a flag would override its
37
- # previous one at the time of command execution.
38
- [default_flags, input].join(" ")
28
+ description: "A string that is passed to the Windows PowerShell command"
29
+
30
+ property :convert_boolean_return, [true, false],
31
+ default: false,
32
+ description: <<~DESC
33
+ Return `0` if the last line of a command is evaluated to be true or to return `1` if the last line is evaluated to be false.
34
+
35
+ When the `guard_interpreter` common attribute is set to `:powershell_script`, a string command will be evaluated as if this value were set to `true`. This is because the behavior of this attribute is similar to the value of the `"$?"` expression common in UNIX interpreters. For example, this:
36
+
37
+ ```ruby
38
+ powershell_script 'make_safe_backup' do
39
+ guard_interpreter :powershell_script
40
+ code 'cp ~/data/nodes.json ~/data/nodes.bak'
41
+ not_if 'test-path ~/data/nodes.bak'
42
+ end
43
+ ```
44
+
45
+ is similar to:
46
+ ```ruby
47
+ bash 'make_safe_backup' do
48
+ code 'cp ~/data/nodes.json ~/data/nodes.bak'
49
+ not_if 'test -e ~/data/nodes.bak'
39
50
  end
40
- }
51
+ ```
52
+ DESC
41
53
 
42
54
  description "Use the **powershell_script** resource to execute a script using the Windows PowerShell"\
43
55
  " interpreter, much like how the script and script-based resources—bash, csh, perl, python,"\
@@ -52,15 +64,6 @@ class Chef
52
64
  super
53
65
  @interpreter = "powershell.exe"
54
66
  @default_guard_interpreter = resource_name
55
- @convert_boolean_return = false
56
- end
57
-
58
- def convert_boolean_return(arg = nil)
59
- set_or_return(
60
- :convert_boolean_return,
61
- arg,
62
- kind_of: [ FalseClass, TrueClass ]
63
- )
64
67
  end
65
68
 
66
69
  # Allow callers evaluating guards to request default
@@ -73,15 +76,6 @@ class Chef
73
76
  def self.get_default_attributes(opts)
74
77
  { convert_boolean_return: true }
75
78
  end
76
-
77
- # Options that will be passed to Windows PowerShell command
78
- #
79
- # @returns [String]
80
- def default_flags
81
- # Set InputFormat to None as PowerShell will hang if STDIN is redirected
82
- # http://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
83
- "-NoLogo -NonInteractive -NoProfile -ExecutionPolicy Bypass -InputFormat None"
84
- end
85
79
  end
86
80
  end
87
81
  end
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require_relative "../resource"
20
- require_relative "../dist"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
21
 
22
22
  class Chef
23
23
  class Resource
@@ -36,7 +36,7 @@ class Chef
36
36
 
37
37
  property :reason, String,
38
38
  description: "A string that describes the reboot action.",
39
- default: "Reboot by #{Chef::Dist::PRODUCT}"
39
+ default: "Reboot by #{ChefUtils::Dist::Infra::PRODUCT}"
40
40
 
41
41
  property :delay_mins, Integer,
42
42
  description: "The amount of time (in minutes) to delay a reboot request.",