chef 16.4.41 → 16.8.9

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 (494) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -14
  3. data/README.md +1 -1
  4. data/Rakefile +22 -15
  5. data/bin/knife +1 -1
  6. data/chef-universal-mingw32.gemspec +1 -1
  7. data/chef.gemspec +4 -2
  8. data/lib/chef/application.rb +19 -17
  9. data/lib/chef/application/apply.rb +12 -7
  10. data/lib/chef/application/base.rb +27 -24
  11. data/lib/chef/application/client.rb +16 -5
  12. data/lib/chef/application/exit_code.rb +13 -4
  13. data/lib/chef/application/knife.rb +22 -11
  14. data/lib/chef/application/solo.rb +2 -1
  15. data/lib/chef/application/windows_service.rb +14 -14
  16. data/lib/chef/application/windows_service_manager.rb +6 -6
  17. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  18. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  19. data/lib/chef/chef_fs/file_pattern.rb +1 -1
  20. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
  21. data/lib/chef/chef_fs/knife.rb +2 -2
  22. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  23. data/lib/chef/client.rb +16 -43
  24. data/lib/chef/compliance/default_attributes.rb +89 -0
  25. data/lib/chef/compliance/fetcher/automate.rb +69 -0
  26. data/lib/chef/compliance/fetcher/chef_server.rb +134 -0
  27. data/lib/chef/compliance/reporter/automate.rb +202 -0
  28. data/lib/chef/compliance/reporter/chef_server_automate.rb +92 -0
  29. data/lib/chef/compliance/reporter/compliance_enforcer.rb +20 -0
  30. data/lib/chef/compliance/reporter/json_file.rb +19 -0
  31. data/lib/chef/compliance/runner.rb +250 -0
  32. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  33. data/lib/chef/cookbook/gem_installer.rb +1 -1
  34. data/lib/chef/cookbook/synchronizer.rb +2 -2
  35. data/lib/chef/cookbook_manifest.rb +2 -1
  36. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  37. data/lib/chef/cookbook_uploader.rb +1 -1
  38. data/lib/chef/cookbook_version.rb +2 -5
  39. data/lib/chef/data_collector.rb +7 -6
  40. data/lib/chef/data_collector/config_validation.rb +22 -13
  41. data/lib/chef/data_collector/run_end_message.rb +2 -2
  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 +1 -1
  49. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  50. data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
  51. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  52. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  53. data/lib/chef/environment.rb +3 -3
  54. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  55. data/lib/chef/exceptions.rb +9 -5
  56. data/lib/chef/file_access_control/windows.rb +6 -5
  57. data/lib/chef/file_content_management/tempfile.rb +1 -1
  58. data/lib/chef/formatters/doc.rb +7 -6
  59. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  60. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +2 -2
  61. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  62. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  63. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +6 -6
  64. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  65. data/lib/chef/formatters/indentable_output_stream.rb +2 -2
  66. data/lib/chef/formatters/minimal.rb +5 -4
  67. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +28 -39
  68. data/lib/chef/http.rb +6 -14
  69. data/lib/chef/http/auth_credentials.rb +5 -1
  70. data/lib/chef/http/authenticator.rb +1 -1
  71. data/lib/chef/http/basic_client.rb +4 -2
  72. data/lib/chef/http/decompressor.rb +1 -1
  73. data/lib/chef/http/http_request.rb +7 -5
  74. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  75. data/lib/chef/http/ssl_policies.rb +7 -1
  76. data/lib/chef/json_compat.rb +3 -8
  77. data/lib/chef/key.rb +1 -1
  78. data/lib/chef/knife.rb +4 -4
  79. data/lib/chef/knife/bootstrap.rb +18 -15
  80. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  81. data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
  82. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +9 -9
  83. data/lib/chef/knife/bootstrap/train_connector.rb +1 -1
  84. data/lib/chef/knife/client_create.rb +3 -3
  85. data/lib/chef/knife/config_get.rb +8 -97
  86. data/lib/chef/knife/config_get_profile.rb +9 -9
  87. data/lib/chef/knife/config_list.rb +139 -0
  88. data/lib/chef/knife/config_list_profiles.rb +8 -98
  89. data/lib/chef/knife/config_show.rb +127 -0
  90. data/lib/chef/knife/config_use.rb +61 -0
  91. data/lib/chef/knife/config_use_profile.rb +9 -24
  92. data/lib/chef/knife/configure.rb +2 -2
  93. data/lib/chef/knife/core/bootstrap_context.rb +2 -2
  94. data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
  95. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  96. data/lib/chef/knife/core/object_loader.rb +1 -1
  97. data/lib/chef/knife/core/ui.rb +5 -2
  98. data/lib/chef/knife/core/windows_bootstrap_context.rb +18 -15
  99. data/lib/chef/knife/exec.rb +2 -2
  100. data/lib/chef/knife/node_policy_set.rb +2 -2
  101. data/lib/chef/knife/node_run_list_add.rb +1 -1
  102. data/lib/chef/knife/node_run_list_remove.rb +1 -1
  103. data/lib/chef/knife/node_run_list_set.rb +1 -1
  104. data/lib/chef/knife/node_show.rb +2 -2
  105. data/lib/chef/knife/role_env_run_list_add.rb +1 -1
  106. data/lib/chef/knife/role_env_run_list_set.rb +1 -1
  107. data/lib/chef/knife/role_run_list_add.rb +1 -1
  108. data/lib/chef/knife/role_run_list_set.rb +1 -1
  109. data/lib/chef/knife/search.rb +0 -1
  110. data/lib/chef/knife/serve.rb +3 -3
  111. data/lib/chef/knife/ssh.rb +19 -4
  112. data/lib/chef/knife/ssl_check.rb +3 -3
  113. data/lib/chef/knife/status.rb +2 -2
  114. data/lib/chef/knife/tag_create.rb +1 -1
  115. data/lib/chef/knife/tag_delete.rb +1 -1
  116. data/lib/chef/knife/user_create.rb +2 -2
  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/convert_to_class_name.rb +0 -56
  122. data/lib/chef/mixin/deep_merge.rb +0 -12
  123. data/lib/chef/mixin/openssl_helper.rb +2 -5
  124. data/lib/chef/mixin/powershell_exec.rb +24 -10
  125. data/lib/chef/mixin/powershell_out.rb +12 -5
  126. data/lib/chef/mixin/properties.rb +2 -0
  127. data/lib/chef/mixin/template.rb +3 -3
  128. data/lib/chef/mixin/unformatter.rb +1 -1
  129. data/lib/chef/mixin/uris.rb +4 -2
  130. data/lib/chef/mixin/versioned_api.rb +1 -2
  131. data/lib/chef/node/attribute_collections.rb +2 -6
  132. data/lib/chef/node/mixin/immutablize_hash.rb +2 -0
  133. data/lib/chef/node_map.rb +4 -4
  134. data/lib/chef/platform/query_helpers.rb +4 -4
  135. data/lib/chef/policy_builder/dynamic.rb +2 -0
  136. data/lib/chef/policy_builder/policyfile.rb +2 -2
  137. data/lib/chef/powershell.rb +10 -4
  138. data/lib/chef/property.rb +1 -1
  139. data/lib/chef/provider.rb +1 -5
  140. data/lib/chef/provider/cron.rb +2 -13
  141. data/lib/chef/provider/dsc_resource.rb +12 -24
  142. data/lib/chef/provider/dsc_script.rb +16 -20
  143. data/lib/chef/provider/file.rb +2 -2
  144. data/lib/chef/provider/git.rb +5 -5
  145. data/lib/chef/provider/group.rb +14 -6
  146. data/lib/chef/provider/group/windows.rb +12 -1
  147. data/lib/chef/provider/ifconfig.rb +9 -9
  148. data/lib/chef/provider/ifconfig/debian.rb +38 -22
  149. data/lib/chef/provider/ifconfig/redhat.rb +54 -18
  150. data/lib/chef/provider/launchd.rb +3 -13
  151. data/lib/chef/provider/link.rb +0 -9
  152. data/lib/chef/provider/mount.rb +18 -1
  153. data/lib/chef/provider/mount/linux.rb +67 -0
  154. data/lib/chef/provider/mount/mount.rb +41 -43
  155. data/lib/chef/provider/package.rb +3 -0
  156. data/lib/chef/provider/package/apt.rb +1 -1
  157. data/lib/chef/provider/package/chocolatey.rb +6 -6
  158. data/lib/chef/provider/package/dpkg.rb +3 -12
  159. data/lib/chef/provider/package/freebsd/base.rb +3 -2
  160. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  161. data/lib/chef/provider/package/homebrew.rb +1 -1
  162. data/lib/chef/provider/package/ips.rb +1 -1
  163. data/lib/chef/provider/package/powershell.rb +2 -3
  164. data/lib/chef/provider/package/rubygems.rb +22 -19
  165. data/lib/chef/provider/package/snap.rb +1 -4
  166. data/lib/chef/provider/package/solaris.rb +0 -2
  167. data/lib/chef/provider/package/windows.rb +2 -2
  168. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +3 -1
  169. data/lib/chef/provider/package/yum/rpm_utils.rb +1 -1
  170. data/lib/chef/provider/package/zypper.rb +99 -72
  171. data/lib/chef/provider/powershell_script.rb +12 -1
  172. data/lib/chef/provider/registry_key.rb +4 -3
  173. data/lib/chef/provider/remote_file/content.rb +3 -0
  174. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  175. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  176. data/lib/chef/provider/route.rb +4 -8
  177. data/lib/chef/provider/service/debian.rb +2 -1
  178. data/lib/chef/provider/service/macosx.rb +2 -2
  179. data/lib/chef/provider/service/redhat.rb +1 -1
  180. data/lib/chef/provider/template_finder.rb +2 -10
  181. data/lib/chef/provider/user.rb +17 -9
  182. data/lib/chef/provider/user/aix.rb +1 -1
  183. data/lib/chef/provider/user/dscl.rb +5 -5
  184. data/lib/chef/provider/user/mac.rb +15 -7
  185. data/lib/chef/provider/user/solaris.rb +1 -1
  186. data/lib/chef/provider/user/windows.rb +10 -3
  187. data/lib/chef/provider/zypper_repository.rb +2 -2
  188. data/lib/chef/provider_resolver.rb +1 -1
  189. data/lib/chef/providers.rb +1 -3
  190. data/lib/chef/pwsh.rb +71 -0
  191. data/lib/chef/recipe.rb +2 -2
  192. data/lib/chef/resource.rb +2 -2
  193. data/lib/chef/resource/apt_repository.rb +6 -5
  194. data/lib/chef/resource/bash.rb +119 -1
  195. data/lib/chef/resource/batch.rb +1 -1
  196. data/lib/chef/resource/bff_package.rb +22 -0
  197. data/lib/chef/resource/breakpoint.rb +59 -2
  198. data/lib/chef/resource/build_essential.rb +5 -8
  199. data/lib/chef/resource/cab_package.rb +29 -0
  200. data/lib/chef/resource/chef_client_config.rb +313 -0
  201. data/lib/chef/resource/chef_client_cron.rb +35 -28
  202. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  203. data/lib/chef/resource/chef_client_scheduled_task.rb +24 -21
  204. data/lib/chef/resource/chef_client_systemd_timer.rb +27 -20
  205. data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
  206. data/lib/chef/resource/chef_gem.rb +10 -10
  207. data/lib/chef/resource/chef_handler.rb +149 -4
  208. data/lib/chef/resource/chef_sleep.rb +3 -3
  209. data/lib/chef/resource/chef_vault_secret.rb +1 -1
  210. data/lib/chef/resource/cookbook_file.rb +2 -2
  211. data/lib/chef/resource/cron/_cron_shared.rb +1 -0
  212. data/lib/chef/resource/cron/cron_d.rb +2 -3
  213. data/lib/chef/resource/csh.rb +2 -2
  214. data/lib/chef/resource/dnf_package.rb +2 -2
  215. data/lib/chef/resource/dsc_resource.rb +0 -1
  216. data/lib/chef/resource/dsc_script.rb +9 -2
  217. data/lib/chef/resource/execute.rb +10 -8
  218. data/lib/chef/resource/file.rb +4 -4
  219. data/lib/chef/resource/gem_package.rb +5 -5
  220. data/lib/chef/resource/homebrew_package.rb +3 -3
  221. data/lib/chef/resource/homebrew_update.rb +9 -6
  222. data/lib/chef/resource/hostname.rb +7 -7
  223. data/lib/chef/resource/ifconfig.rb +52 -5
  224. data/lib/chef/resource/kernel_module.rb +1 -1
  225. data/lib/chef/resource/ksh.rb +3 -3
  226. data/lib/chef/resource/launchd.rb +17 -16
  227. data/lib/chef/resource/locale.rb +2 -2
  228. data/lib/chef/resource/lwrp_base.rb +3 -5
  229. data/lib/chef/resource/macos_userdefaults.rb +3 -3
  230. data/lib/chef/resource/mount.rb +8 -2
  231. data/lib/chef/resource/notify_group.rb +0 -1
  232. data/lib/chef/resource/ohai.rb +46 -3
  233. data/lib/chef/resource/ohai_hint.rb +33 -0
  234. data/lib/chef/resource/openssl_dhparam.rb +27 -5
  235. data/lib/chef/resource/openssl_ec_private_key.rb +6 -3
  236. data/lib/chef/resource/openssl_ec_public_key.rb +2 -2
  237. data/lib/chef/resource/openssl_rsa_private_key.rb +6 -3
  238. data/lib/chef/resource/openssl_x509_certificate.rb +14 -14
  239. data/lib/chef/resource/openssl_x509_crl.rb +19 -10
  240. data/lib/chef/resource/openssl_x509_request.rb +14 -16
  241. data/lib/chef/resource/osx_profile.rb +77 -13
  242. data/lib/chef/resource/perl.rb +2 -2
  243. data/lib/chef/resource/plist.rb +3 -7
  244. data/lib/chef/resource/powershell_package_source.rb +24 -23
  245. data/lib/chef/resource/powershell_script.rb +14 -11
  246. data/lib/chef/resource/python.rb +2 -2
  247. data/lib/chef/resource/reboot.rb +2 -2
  248. data/lib/chef/resource/registry_key.rb +93 -2
  249. data/lib/chef/resource/remote_file.rb +3 -3
  250. data/lib/chef/resource/rhsm_register.rb +22 -10
  251. data/lib/chef/resource/route.rb +1 -1
  252. data/lib/chef/resource/ruby.rb +2 -2
  253. data/lib/chef/resource/ruby_block.rb +2 -2
  254. data/lib/chef/resource/scm/_scm.rb +2 -1
  255. data/lib/chef/resource/scm/git.rb +82 -1
  256. data/lib/chef/resource/scm/subversion.rb +14 -2
  257. data/lib/chef/resource/script.rb +2 -2
  258. data/lib/chef/resource/service.rb +3 -3
  259. data/lib/chef/resource/solaris_package.rb +0 -2
  260. data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
  261. data/lib/chef/resource/sudo.rb +1 -1
  262. data/lib/chef/resource/support/client.erb +64 -0
  263. data/lib/chef/resource/support/cron.d.erb +1 -1
  264. data/lib/chef/resource/support/cron_access.erb +1 -1
  265. data/lib/chef/resource/support/sudoer.erb +1 -1
  266. data/lib/chef/resource/support/ulimit.erb +1 -1
  267. data/lib/chef/resource/sysctl.rb +1 -5
  268. data/lib/chef/resource/systemd_unit.rb +44 -3
  269. data/lib/chef/resource/template.rb +4 -4
  270. data/lib/chef/resource/windows_ad_join.rb +19 -12
  271. data/lib/chef/resource/windows_audit_policy.rb +26 -24
  272. data/lib/chef/resource/windows_certificate.rb +19 -11
  273. data/lib/chef/resource/windows_dfs_server.rb +7 -4
  274. data/lib/chef/resource/windows_env.rb +173 -0
  275. data/lib/chef/resource/windows_feature.rb +2 -0
  276. data/lib/chef/resource/windows_firewall_profile.rb +28 -31
  277. data/lib/chef/resource/windows_firewall_rule.rb +9 -11
  278. data/lib/chef/resource/windows_font.rb +1 -1
  279. data/lib/chef/resource/windows_package.rb +29 -5
  280. data/lib/chef/resource/windows_path.rb +38 -0
  281. data/lib/chef/resource/windows_printer.rb +5 -3
  282. data/lib/chef/resource/windows_printer_port.rb +6 -4
  283. data/lib/chef/resource/windows_security_policy.rb +5 -5
  284. data/lib/chef/resource/windows_service.rb +108 -0
  285. data/lib/chef/resource/windows_share.rb +18 -18
  286. data/lib/chef/resource/windows_task.rb +629 -28
  287. data/lib/chef/resource/windows_user_privilege.rb +53 -54
  288. data/lib/chef/resource/windows_workgroup.rb +9 -7
  289. data/lib/chef/resource/yum_package.rb +2 -2
  290. data/lib/chef/resource/yum_repository.rb +1 -1
  291. data/lib/chef/resource_collection/resource_set.rb +2 -6
  292. data/lib/chef/resource_inspector.rb +77 -75
  293. data/lib/chef/resource_reporter.rb +0 -2
  294. data/lib/chef/resources.rb +4 -1
  295. data/lib/chef/run_context.rb +2 -2
  296. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  297. data/lib/chef/run_lock.rb +3 -3
  298. data/lib/chef/search/query.rb +6 -5
  299. data/lib/chef/server_api.rb +0 -4
  300. data/lib/chef/shell.rb +31 -26
  301. data/lib/chef/shell/ext.rb +12 -12
  302. data/lib/chef/shell/shell_session.rb +2 -2
  303. data/lib/chef/train_transport.rb +5 -104
  304. data/lib/chef/util/backup.rb +1 -1
  305. data/lib/chef/util/diff.rb +3 -3
  306. data/lib/chef/util/dsc/configuration_generator.rb +52 -11
  307. data/lib/chef/util/dsc/lcm_output_parser.rb +4 -7
  308. data/lib/chef/util/dsc/local_configuration_manager.rb +18 -15
  309. data/lib/chef/util/dsc/resource_store.rb +5 -11
  310. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  311. data/lib/chef/util/threaded_job_queue.rb +0 -2
  312. data/lib/chef/version.rb +1 -1
  313. data/lib/chef/win32/api/file.rb +4 -0
  314. data/lib/chef/win32/crypto.rb +1 -1
  315. data/lib/chef/win32/file.rb +1 -1
  316. data/lib/chef/win32/registry.rb +1 -2
  317. data/lib/chef/win32/security/sid.rb +1 -1
  318. data/lib/chef/win32/unicode.rb +1 -1
  319. data/spec/data/shef-config.rb +1 -1
  320. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  321. data/spec/functional/mixin/powershell_out_spec.rb +11 -3
  322. data/spec/functional/resource/aix_service_spec.rb +2 -2
  323. data/spec/functional/resource/aixinit_service_spec.rb +1 -1
  324. data/spec/functional/resource/apt_package_spec.rb +4 -6
  325. data/spec/functional/resource/chocolatey_package_spec.rb +3 -3
  326. data/spec/functional/resource/cron_spec.rb +3 -3
  327. data/spec/functional/resource/dsc_script_spec.rb +6 -9
  328. data/spec/functional/resource/insserv_spec.rb +1 -1
  329. data/spec/functional/resource/mount_spec.rb +10 -2
  330. data/spec/functional/resource/powershell_package_source_spec.rb +107 -0
  331. data/spec/functional/resource/powershell_script_spec.rb +57 -14
  332. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  333. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  334. data/spec/functional/resource/windows_certificate_spec.rb +10 -6
  335. data/spec/functional/resource/windows_firewall_rule_spec.rb +93 -0
  336. data/spec/functional/resource/windows_package_spec.rb +36 -10
  337. data/spec/functional/resource/windows_share_spec.rb +103 -0
  338. data/spec/functional/resource/windows_task_spec.rb +15 -16
  339. data/spec/functional/resource/zypper_package_spec.rb +11 -0
  340. data/spec/functional/version_spec.rb +3 -3
  341. data/spec/integration/client/client_spec.rb +6 -5
  342. data/spec/integration/client/exit_code_spec.rb +3 -2
  343. data/spec/integration/client/ipv6_spec.rb +1 -1
  344. data/spec/integration/compliance/compliance_spec.rb +81 -0
  345. data/spec/integration/knife/client_key_create_spec.rb +1 -1
  346. data/spec/integration/knife/{config_list_profiles_spec.rb → config_list_spec.rb} +30 -29
  347. data/spec/integration/knife/{config_get_spec.rb → config_show_spec.rb} +3 -3
  348. data/spec/integration/knife/{config_use_profile_spec.rb → config_use_spec.rb} +53 -10
  349. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  350. data/spec/integration/knife/node_create_spec.rb +1 -1
  351. data/spec/integration/knife/node_environment_set_spec.rb +1 -1
  352. data/spec/integration/knife/node_run_list_add_spec.rb +4 -4
  353. data/spec/integration/knife/node_run_list_remove_spec.rb +1 -1
  354. data/spec/integration/knife/node_run_list_set_spec.rb +1 -1
  355. data/spec/integration/knife/node_show_spec.rb +1 -1
  356. data/spec/integration/ohai/ohai_spec.rb +61 -0
  357. data/spec/integration/recipes/notifies_spec.rb +1 -1
  358. data/spec/integration/recipes/provider_choice.rb +2 -2
  359. data/spec/integration/recipes/recipe_dsl_spec.rb +1 -0
  360. data/spec/integration/recipes/remote_directory.rb +1 -1
  361. data/spec/integration/solo/solo_spec.rb +5 -5
  362. data/spec/spec_helper.rb +9 -7
  363. data/spec/stress/win32/file_spec.rb +1 -1
  364. data/spec/support/chef_helpers.rb +2 -2
  365. data/spec/support/lib/chef/resource/cat.rb +1 -1
  366. data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -1
  367. data/spec/support/matchers/leak.rb +2 -2
  368. data/spec/support/mock/platform.rb +24 -16
  369. data/spec/support/platform_helpers.rb +27 -38
  370. data/spec/support/shared/functional/securable_resource.rb +108 -27
  371. data/spec/support/shared/functional/win32_service.rb +1 -1
  372. data/spec/support/shared/unit/application_dot_d.rb +5 -3
  373. data/spec/support/shared/unit/knife_shared.rb +1 -1
  374. data/spec/support/shared/unit/script_resource.rb +4 -4
  375. data/spec/support/shared/unit/windows_script_resource.rb +1 -1
  376. data/spec/tiny_server.rb +0 -1
  377. data/spec/unit/application/client_spec.rb +2 -2
  378. data/spec/unit/application/exit_code_spec.rb +10 -0
  379. data/spec/unit/application_spec.rb +4 -6
  380. data/spec/unit/chef_fs/config_spec.rb +1 -1
  381. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  382. data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
  383. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  384. data/spec/unit/client_spec.rb +17 -0
  385. data/spec/unit/compliance/fetcher/automate_spec.rb +134 -0
  386. data/spec/unit/compliance/fetcher/chef_server_spec.rb +93 -0
  387. data/spec/unit/compliance/reporter/automate_spec.rb +427 -0
  388. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +177 -0
  389. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +48 -0
  390. data/spec/unit/compliance/runner_spec.rb +113 -0
  391. data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
  392. data/spec/unit/cookbook_spec.rb +2 -2
  393. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  394. data/spec/unit/data_collector_spec.rb +0 -117
  395. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  396. data/spec/unit/file_access_control_spec.rb +1 -1
  397. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +11 -11
  398. data/spec/unit/http/ssl_policies_spec.rb +11 -0
  399. data/spec/unit/knife/bootstrap_spec.rb +6 -6
  400. data/spec/unit/knife/client_create_spec.rb +2 -2
  401. data/spec/unit/knife/configure_client_spec.rb +5 -5
  402. data/spec/unit/knife/configure_spec.rb +3 -3
  403. data/spec/unit/knife/cookbook_delete_spec.rb +2 -2
  404. data/spec/unit/knife/cookbook_download_spec.rb +2 -2
  405. data/spec/unit/knife/cookbook_list_spec.rb +2 -2
  406. data/spec/unit/knife/cookbook_metadata_spec.rb +3 -3
  407. data/spec/unit/knife/core/node_editor_spec.rb +1 -1
  408. data/spec/unit/knife/core/ui_spec.rb +1 -0
  409. data/spec/unit/knife/environment_compare_spec.rb +3 -3
  410. data/spec/unit/knife/ssh_spec.rb +2 -2
  411. data/spec/unit/knife/supermarket_download_spec.rb +8 -8
  412. data/spec/unit/knife/supermarket_list_spec.rb +3 -3
  413. data/spec/unit/knife/supermarket_search_spec.rb +1 -1
  414. data/spec/unit/knife/tag_create_spec.rb +1 -1
  415. data/spec/unit/knife/tag_delete_spec.rb +1 -1
  416. data/spec/unit/knife/user_create_spec.rb +1 -1
  417. data/spec/unit/lwrp_spec.rb +3 -3
  418. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  419. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  420. data/spec/unit/mixin/powershell_exec_spec.rb +40 -3
  421. data/spec/unit/mixin/powershell_out_spec.rb +14 -0
  422. data/spec/unit/mixin/securable_spec.rb +2 -2
  423. data/spec/unit/mixin/which.rb +1 -1
  424. data/spec/unit/node/immutable_collections_spec.rb +2 -2
  425. data/spec/unit/platform/query_helpers_spec.rb +11 -12
  426. data/spec/unit/provider/dsc_resource_spec.rb +10 -27
  427. data/spec/unit/provider/dsc_script_spec.rb +1 -1
  428. data/spec/unit/provider/group/windows_spec.rb +6 -0
  429. data/spec/unit/provider/group_spec.rb +1 -1
  430. data/spec/unit/provider/mount/linux_spec.rb +107 -0
  431. data/spec/unit/provider/mount/mount_spec.rb +21 -10
  432. data/spec/unit/provider/mount/solaris_spec.rb +1 -1
  433. data/spec/unit/provider/mount/windows_spec.rb +1 -0
  434. data/spec/unit/provider/mount_spec.rb +31 -0
  435. data/spec/unit/provider/package/chocolatey_spec.rb +2 -3
  436. data/spec/unit/provider/package/powershell_spec.rb +88 -96
  437. data/spec/unit/provider/package/rubygems_spec.rb +4 -1
  438. data/spec/unit/provider/package/zypper_spec.rb +0 -25
  439. data/spec/unit/provider/package_spec.rb +2 -2
  440. data/spec/unit/provider/powershell_script_spec.rb +11 -0
  441. data/spec/unit/provider/route_spec.rb +0 -2
  442. data/spec/unit/provider/subversion_spec.rb +0 -3
  443. data/spec/unit/provider/systemd_unit_spec.rb +1 -1
  444. data/spec/unit/provider/user_spec.rb +7 -1
  445. data/spec/unit/provider/windows_env_spec.rb +18 -34
  446. data/spec/unit/provider/windows_path_spec.rb +6 -11
  447. data/spec/unit/provider/windows_task_spec.rb +7 -6
  448. data/spec/unit/recipe_spec.rb +1 -1
  449. data/spec/unit/resource/breakpoint_spec.rb +1 -1
  450. data/spec/unit/resource/build_essential_spec.rb +0 -12
  451. data/spec/unit/resource/chef_client_config_spec.rb +137 -0
  452. data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
  453. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  454. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
  455. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
  456. data/spec/unit/resource/ifconfig_spec.rb +2 -10
  457. data/spec/unit/resource/launchd_spec.rb +8 -0
  458. data/spec/unit/resource/mount_spec.rb +18 -5
  459. data/spec/unit/resource/osx_profile_spec.rb +67 -1
  460. data/spec/unit/resource/powershell_package_source_spec.rb +20 -20
  461. data/spec/unit/resource/powershell_script_spec.rb +4 -74
  462. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  463. data/spec/unit/resource/service_spec.rb +2 -2
  464. data/spec/unit/resource/solaris_package_spec.rb +8 -10
  465. data/spec/unit/resource/windows_certificate_spec.rb +12 -0
  466. data/spec/unit/resource/windows_uac_spec.rb +1 -1
  467. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  468. data/spec/unit/resource_inspector_spec.rb +3 -3
  469. data/spec/unit/run_lock_spec.rb +5 -1
  470. data/spec/unit/runner_spec.rb +1 -2
  471. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  472. data/spec/unit/shell/shell_session_spec.rb +35 -64
  473. data/spec/unit/shell_spec.rb +18 -21
  474. data/spec/unit/train_transport_spec.rb +14 -13
  475. data/spec/unit/util/dsc/configuration_generator_spec.rb +79 -0
  476. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +27 -35
  477. data/spec/unit/util/selinux_spec.rb +2 -0
  478. data/tasks/rspec.rb +1 -3
  479. metadata +80 -33
  480. data/lib/chef/dist.rb +0 -68
  481. data/lib/chef/monkey_patches/net_http.rb +0 -22
  482. data/lib/chef/provider/windows_env.rb +0 -210
  483. data/lib/chef/provider/windows_path.rb +0 -61
  484. data/lib/chef/provider/windows_task.rb +0 -632
  485. data/lib/chef/util/powershell/cmdlet.rb +0 -173
  486. data/lib/chef/util/powershell/cmdlet_result.rb +0 -61
  487. data/spec/functional/util/powershell/cmdlet_spec.rb +0 -111
  488. data/spec/integration/knife/config_get_profile_spec.rb +0 -114
  489. data/spec/support/mock/constant.rb +0 -52
  490. data/spec/unit/monkey_patches/uri_spec.rb +0 -34
  491. data/spec/unit/provider_resolver_spec.rb +0 -885
  492. data/spec/unit/resource/data/InstallHistory_with_CLT.plist +0 -92
  493. data/spec/unit/resource/data/InstallHistory_without_CLT.plist +0 -38
  494. data/spec/unit/util/powershell/cmdlet_spec.rb +0 -106
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6501568e7cfe7721c7c9905212c30210e51b6dda5932c47734704353d5d2c323
4
- data.tar.gz: cc19bfc60ee23bd2b7f64efc6a4e3a6998bb84e8507c39f13436b6cc01d48a06
3
+ metadata.gz: c13a95870faf2ddc93377295ea1821d3ee962c422af54147a9a5852266ef9abc
4
+ data.tar.gz: 06d9ed38997dd63cef3a9d54cf7ffb064c5ca13b668cbea8ee42173ba757d880
5
5
  SHA512:
6
- metadata.gz: 8ef9379627979e00d0e4a87f28ce77005d06b150fd92891cdd529ad40c893fcbaeeb688723acad0be917f96e65863a019da29f1018868f39c27f8d632d57e9e4
7
- data.tar.gz: 812ad315824df498df0fdcccbdab1a1cbfaca8eccc253c1f68b4f31c3d9aea46facdd3c76260d5cc87ac6f6827cd39acee879b358c7fae05408d30494a2bcd46
6
+ metadata.gz: ed8ed48612596fdd94dfab56edda9b66ba3adff6bcca4475bf4d4a9b5ab9dc51f59b3db9d54aa6f468ab33aa4a8f2821a5ab9942379c0d70f641a04f8bfb48d0
7
+ data.tar.gz: 8f1ebbbdbfe60ed00c66edab06a41821f5d8e9f62ab74d4c322b187b75e4f894e0f59cdf90c61b034a8496ece30e0a6eb71c3c91336a40e966fb6f9001e26d9a
data/Gemfile CHANGED
@@ -27,24 +27,16 @@ gem "chef-telemetry", ">=1.0.8" # 1.0.8 removes the http dep
27
27
  group(:omnibus_package) do
28
28
  gem "appbundler"
29
29
  gem "rb-readline"
30
- gem "inspec-core", "~> 4.18"
31
- gem "inspec-core-bin", "~> 4.18" # need to provide the binaries for inspec
30
+ gem "inspec-core-bin", "~> 4.24" # need to provide the binaries for inspec
32
31
  gem "chef-vault"
33
- gem "ed25519" # ed25519 ssh key support done here as it's a native gem we can't put in train
34
- gem "bcrypt_pbkdf", ">= 1.1.0.rc1" # ed25519 ssh key support done here as it's a native gem we can't put in train
35
32
  end
36
33
 
37
34
  group(:omnibus_package, :pry) do
38
35
  gem "pry"
39
36
  gem "pry-byebug"
40
- gem "pry-remote"
41
37
  gem "pry-stack_explorer"
42
38
  end
43
39
 
44
- group(:docgen) do
45
- gem "yard"
46
- end
47
-
48
40
  # Everything except AIX
49
41
  group(:ruby_prof) do
50
42
  # ruby-prof 1.3.0 does not compile on our centos6 builders/kitchen testers
@@ -58,10 +50,7 @@ end
58
50
 
59
51
  group(:development, :test) do
60
52
  gem "rake"
61
- gem "rspec-core", "~> 3.5"
62
- gem "rspec-mocks", "~> 3.5"
63
- gem "rspec-expectations", "~> 3.5"
64
- gem "rspec_junit_formatter", "~> 0.2.0"
53
+ gem "rspec"
65
54
  gem "webmock"
66
55
  gem "fauxhai-ng" # for chef-utils gem
67
56
  end
@@ -81,13 +70,16 @@ eval_gemfile("./Gemfile.local") if File.exist?("./Gemfile.local")
81
70
  # For FFI to call into PowerShell we need the binaries and assemblies located
82
71
  # in the Ruby bindir.
83
72
  # The Powershell DLL source lives here: https://github.com/chef/chef-powershell-shim
73
+ # Every merge into that repo triggers a Habitat build and promotion. Running
74
+ # the rake :update_chef_exec_dll task in this (chef/chef) repo will pull down
75
+ # the built packages and copy the binaries to distro/ruby_bin_folder.
84
76
  #
85
77
  # We copy (and overwrite) these files every time "bundle <exec|install>" is
86
78
  # executed, just in case they have changed.
87
79
  if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
88
80
  instance_eval do
89
81
  ruby_exe_dir = RbConfig::CONFIG["bindir"]
90
- assemblies = Dir.glob(File.expand_path("distro/ruby_bin_folder", Dir.pwd) + "/*.dll")
82
+ assemblies = Dir.glob(File.expand_path("distro/ruby_bin_folder/#{ENV["PROCESSOR_ARCHITECTURE"]}", __dir__) + "**/*")
91
83
  FileUtils.cp_r assemblies, ruby_exe_dir, verbose: false unless ENV["_BUNDLER_WINDOWS_DLLS_COPIED"]
92
84
  ENV["_BUNDLER_WINDOWS_DLLS_COPIED"] = "1"
93
85
  end
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  [![Code Climate](https://codeclimate.com/github/chef/chef.svg)](https://codeclimate.com/github/chef/chef)
3
3
  [![Build Status](https://badge.buildkite.com/c82093430ceec7d27af05febb9dcafe3aa331fff9d74c0ab9d.svg?branch=master)](https://buildkite.com/chef-oss/chef-chef-master-verify)
4
4
  [![Gem Version](https://badge.fury.io/rb/chef.svg)](https://badge.fury.io/rb/chef)
5
- [![](https://img.shields.io/badge/Release%20Policy-Cadence%20Release-brightgreen.svg)](https://github.com/chef/chef/blob/v15.2.21/docs/dev/design_documents/client_release_cadence.md)
5
+ [![](https://img.shields.io/badge/Release%20Policy-Cadence%20Release-brightgreen.svg)](https://github.com/chef/chef/blob/master/docs/dev/design_documents/client_release_cadence.md)
6
6
 
7
7
  **Umbrella Project**: [Chef Infra](https://github.com/chef/chef-oss-practices/blob/master/projects/chef-infra.md)
8
8
 
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
3
  # Author:: Daniel DeLeo (<dan@chef.io>)
4
- # Copyright:: Copyright 2008-2019, Chef Software Inc.
4
+ # Copyright:: Copyright, Chef Software Inc.
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,10 +23,9 @@ $LOAD_PATH.unshift(File.expand_path("chef-config/lib", __dir__))
23
23
  begin
24
24
  require_relative "tasks/rspec"
25
25
  require_relative "tasks/dependencies"
26
- require_relative "tasks/announce"
27
26
  require_relative "tasks/docs"
28
27
  require_relative "tasks/spellcheck"
29
- require_relative "lib/chef/dist"
28
+ require_relative "chef-utils/lib/chef-utils/dist" unless defined?(ChefUtils::Dist)
30
29
  rescue LoadError => e
31
30
  puts "Skipping missing rake dep: #{e}"
32
31
  end
@@ -48,6 +47,7 @@ namespace :pre_install do
48
47
 
49
48
  desc "Renders the powershell extensions with distro flavoring"
50
49
  task :render_powershell_extension do
50
+ require "erb"
51
51
  template_file = ::File.join(::File.dirname(__FILE__), "distro", "templates", "powershell", "chef", "chef.psm1.erb")
52
52
  psm1_path = ::File.join(::File.dirname(__FILE__), "distro", "powershell", "chef")
53
53
  FileUtils.mkdir_p psm1_path
@@ -88,6 +88,25 @@ task :register_eventlog do
88
88
  end
89
89
  end
90
90
 
91
+ desc "Copies powershell_exec related binaries from the latest built Habitat Packages"
92
+ task :update_chef_exec_dll do
93
+ raise "This task must be run on Windows since we are installing a Windows targeted package!" unless Gem.win_platform?
94
+
95
+ require "mkmf"
96
+ raise "Unable to locate Habitat cli. Please install Habitat cli before invoking this task!" unless find_executable "hab"
97
+
98
+ sh("hab pkg install chef/chef-powershell-shim")
99
+ sh("hab pkg install chef/chef-powershell-shim-x86")
100
+ x64 = `hab pkg path chef/chef-powershell-shim`.chomp.gsub(/\\/, "/")
101
+ x86 = `hab pkg path chef/chef-powershell-shim-x86`.chomp.gsub(/\\/, "/")
102
+ FileUtils.rm_rf(Dir["distro/ruby_bin_folder/AMD64/*"])
103
+ FileUtils.rm_rf(Dir["distro/ruby_bin_folder/x86/*"])
104
+ puts "Copying #{x64}/bin/* to distro/ruby_bin_folder/AMD64"
105
+ FileUtils.cp_r(Dir["#{x64}/bin/*"], "distro/ruby_bin_folder/AMD64")
106
+ puts "Copying #{x86}/bin/* to distro/ruby_bin_folder/x86"
107
+ FileUtils.cp_r(Dir["#{x86}/bin/*"], "distro/ruby_bin_folder/x86")
108
+ end
109
+
91
110
  begin
92
111
  require "chefstyle"
93
112
  require "rubocop/rake_task"
@@ -97,15 +116,3 @@ begin
97
116
  rescue LoadError
98
117
  puts "chefstyle/rubocop is not available. bundle install first to make sure all dependencies are installed."
99
118
  end
100
-
101
- begin
102
- require "yard"
103
- DOC_FILES = [ "spec/tiny_server.rb", "lib/**/*.rb" ].freeze
104
-
105
- YARD::Rake::YardocTask.new(:docs) do |t|
106
- t.files = DOC_FILES
107
- t.options = ["--format", "html"]
108
- end
109
- rescue LoadError
110
- puts "yard is not available. bundle install first to make sure all dependencies are installed."
111
- end
data/bin/knife CHANGED
@@ -18,7 +18,7 @@
18
18
  # See the License for the specific language governing permissions and
19
19
  # limitations under the License.
20
20
 
21
- $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
21
+ $:.unshift(File.expand_path(File.join(__dir__, "..", "lib")))
22
22
  require "chef/application/knife"
23
23
 
24
24
  Chef::Application::Knife.new.run
@@ -9,7 +9,7 @@ gemspec.add_dependency "win32-event", "~> 0.6.1"
9
9
  gemspec.add_dependency "win32-eventlog", "0.6.3"
10
10
  gemspec.add_dependency "win32-mmap", "~> 0.4.1"
11
11
  gemspec.add_dependency "win32-mutex", "~> 0.4.2"
12
- gemspec.add_dependency "win32-process", "~> 0.8.2"
12
+ gemspec.add_dependency "win32-process", "~> 0.9"
13
13
  gemspec.add_dependency "win32-service", ">= 2.1.5", "< 3.0"
14
14
  gemspec.add_dependency "wmi-lite", "~> 1.0"
15
15
  gemspec.add_dependency "win32-taskscheduler", "~> 2.0"
@@ -20,17 +20,18 @@ Gem::Specification.new do |s|
20
20
  s.add_dependency "train-core", "~> 3.2", ">= 3.2.28" # 3.2.28 fixes sudo prompts. See https://github.com/chef/chef/pull/9635
21
21
  s.add_dependency "train-winrm", ">= 0.2.5"
22
22
 
23
- s.add_dependency "license-acceptance", "~> 1.0", ">= 1.0.5"
23
+ s.add_dependency "license-acceptance", ">= 1.0.5", "< 3"
24
24
  s.add_dependency "mixlib-cli", ">= 2.1.1", "< 3.0"
25
25
  s.add_dependency "mixlib-log", ">= 2.0.3", "< 4.0"
26
26
  s.add_dependency "mixlib-authentication", ">= 2.1", "< 4"
27
27
  s.add_dependency "mixlib-shellout", ">= 3.1.1", "< 4.0"
28
28
  s.add_dependency "mixlib-archive", ">= 0.4", "< 2.0"
29
29
  s.add_dependency "ohai", "~> 16.0"
30
+ s.add_dependency "inspec-core", "~> 4.23"
30
31
 
31
32
  s.add_dependency "ffi", ">= 1.9.25"
32
33
  s.add_dependency "ffi-yajl", "~> 2.2"
33
- s.add_dependency "net-ssh", ">= 4.2", "< 7"
34
+ s.add_dependency "net-ssh", ">= 5.1", "< 7"
34
35
  s.add_dependency "net-ssh-multi", "~> 1.2", ">= 1.2.1"
35
36
  s.add_dependency "net-sftp", ">= 2.1.2", "< 4.0"
36
37
  s.add_dependency "ed25519", "~> 1.2" # ed25519 ssh key support
@@ -38,6 +39,7 @@ Gem::Specification.new do |s|
38
39
  s.add_dependency "highline", ">= 1.6.9", "< 3"
39
40
  s.add_dependency "tty-prompt", "~> 0.21" # knife ui.ask prompt
40
41
  s.add_dependency "tty-screen", "~> 0.6" # knife list
42
+ s.add_dependency "tty-table", "~> 0.11" # knife render table output.
41
43
  s.add_dependency "pastel" # knife ui.color
42
44
  s.add_dependency "erubis", "~> 2.7"
43
45
  s.add_dependency "diff-lcs", ">= 1.2.4", "< 1.4.0" # 1.4 breaks output
@@ -27,8 +27,10 @@ require "mixlib/cli" unless defined?(Mixlib::CLI)
27
27
  require "tmpdir" unless defined?(Dir.mktmpdir)
28
28
  require "rbconfig" unless defined?(RbConfig)
29
29
  require_relative "application/exit_code"
30
- require_relative "dist"
31
- require "license_acceptance/acceptor"
30
+ require "chef-utils" unless defined?(ChefUtils::CANARY)
31
+ module LicenseAcceptance
32
+ autoload :Acceptor, "license_acceptance/acceptor"
33
+ end
32
34
 
33
35
  class Chef
34
36
  class Application
@@ -39,9 +41,6 @@ class Chef
39
41
 
40
42
  @chef_client = nil
41
43
  @chef_client_json = nil
42
-
43
- # Always switch to a readable directory. Keeps subsequent Dir.chdir() {}
44
- # from failing due to permissions when launched as a less privileged user.
45
44
  end
46
45
 
47
46
  # Configure mixlib-cli to always separate defaults from user-supplied CLI options
@@ -96,7 +95,11 @@ class Chef
96
95
  # Parse configuration (options and config file)
97
96
  def configure_chef
98
97
  parse_options
99
- load_config_file
98
+ begin
99
+ load_config_file
100
+ rescue Exception => e
101
+ Chef::Application.fatal!(e.message, Chef::Exceptions::ConfigurationError.new)
102
+ end
100
103
  chef_config.export_proxies
101
104
  chef_config.init_openssl
102
105
  File.umask chef_config[:umask]
@@ -151,8 +154,6 @@ class Chef
151
154
 
152
155
  def apply_extra_config_options(extra_config_options)
153
156
  chef_config.apply_extra_config_options(extra_config_options)
154
- rescue ChefConfig::UnparsableConfigOption => e
155
- Chef::Application.fatal!(e.message)
156
157
  end
157
158
 
158
159
  # Set the specific recipes to Chef::Config if the recipes are valid
@@ -171,7 +172,7 @@ class Chef
171
172
  def configure_logging
172
173
  configure_log_location
173
174
  logger.init(MonoLogger.new(chef_config[:log_location][0]))
174
- chef_config[:log_location][1..-1].each do |log_location|
175
+ chef_config[:log_location][1..].each do |log_location|
175
176
  logger.loggers << MonoLogger.new(log_location)
176
177
  end
177
178
  logger.level = resolve_log_level
@@ -306,7 +307,7 @@ class Chef
306
307
  end
307
308
 
308
309
  def fork_chef_client
309
- logger.info "Forking #{Chef::Dist::PRODUCT} instance to converge..."
310
+ logger.info "Forking #{ChefUtils::Dist::Infra::PRODUCT} instance to converge..."
310
311
  pid = fork do
311
312
  # Want to allow forked processes to finish converging when
312
313
  # TERM singal is received (exit gracefully)
@@ -315,7 +316,7 @@ class Chef
315
316
  " finishing converge to exit normally (send SIGINT to terminate immediately)")
316
317
  end
317
318
 
318
- client_solo = chef_config[:solo] ? "#{Chef::Dist::SOLOEXEC}" : "#{Chef::Dist::CLIENT}"
319
+ client_solo = chef_config[:solo] ? ChefUtils::Dist::Solo::EXEC : ChefUtils::Dist::Infra::CLIENT
319
320
  $0 = "#{client_solo} worker: ppid=#{Process.ppid};start=#{Time.new.strftime("%R:%S")};"
320
321
  begin
321
322
  logger.trace "Forked instance now converging"
@@ -327,7 +328,7 @@ class Chef
327
328
  exit 0
328
329
  end
329
330
  end
330
- logger.trace "Fork successful. Waiting for new #{Chef::Dist::CLIENT} pid: #{pid}"
331
+ logger.trace "Fork successful. Waiting for new #{ChefUtils::Dist::Infra::CLIENT} pid: #{pid}"
331
332
  result = Process.waitpid2(pid)
332
333
  handle_child_exit(result)
333
334
  logger.trace "Forked instance successfully reaped (pid: #{pid})"
@@ -339,9 +340,9 @@ class Chef
339
340
  return true if status.success?
340
341
 
341
342
  message = if status.signaled?
342
- "#{Chef::Dist::PRODUCT} run process terminated by signal #{status.termsig} (#{Signal.list.invert[status.termsig]})"
343
+ "#{ChefUtils::Dist::Infra::PRODUCT} run process terminated by signal #{status.termsig} (#{Signal.list.invert[status.termsig]})"
343
344
  else
344
- "#{Chef::Dist::PRODUCT} run process exited unsuccessfully (exit code #{status.exitstatus})"
345
+ "#{ChefUtils::Dist::Infra::PRODUCT} run process exited unsuccessfully (exit code #{status.exitstatus})"
345
346
  end
346
347
  raise Exceptions::ChildConvergeError, message
347
348
  end
@@ -352,7 +353,8 @@ class Chef
352
353
  logger.fatal("Configuration error #{error.class}: #{error.message}")
353
354
  filtered_trace = error.backtrace.grep(/#{Regexp.escape(config_file_path)}/)
354
355
  filtered_trace.each { |line| logger.fatal(" " + line ) }
355
- Chef::Application.fatal!("Aborting due to error in '#{config_file_path}'", error)
356
+ raise Chef::Exceptions::ConfigurationError.new("Aborting due to error in '#{config_file_path}': #{error}")
357
+ # Chef::Application.fatal!("Aborting due to error in '#{config_file_path}'", Chef::Exceptions::ConfigurationError.new(error))
356
358
  end
357
359
 
358
360
  # This is a hook for testing
@@ -373,8 +375,8 @@ class Chef
373
375
  chef_stacktrace_out = "Generated at #{Time.now}\n"
374
376
  chef_stacktrace_out += message
375
377
 
376
- Chef::FileCache.store("#{Chef::Dist::SHORT}-stacktrace.out", chef_stacktrace_out)
377
- logger.fatal("Stacktrace dumped to #{Chef::FileCache.load("#{Chef::Dist::SHORT}-stacktrace.out", false)}")
378
+ Chef::FileCache.store("#{ChefUtils::Dist::Infra::SHORT}-stacktrace.out", chef_stacktrace_out)
379
+ logger.fatal("Stacktrace dumped to #{Chef::FileCache.load("#{ChefUtils::Dist::Infra::SHORT}-stacktrace.out", false)}")
378
380
  logger.fatal("Please provide the contents of the stacktrace.out file if you file a bug report")
379
381
  if Chef::Config[:always_dump_stacktrace]
380
382
  logger.fatal(message)
@@ -27,13 +27,13 @@ require "fileutils" unless defined?(FileUtils)
27
27
  require "tempfile" unless defined?(Tempfile)
28
28
  require_relative "../providers"
29
29
  require_relative "../resources"
30
- require_relative "../dist"
30
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
31
31
  require "license_acceptance/cli_flags/mixlib_cli"
32
32
 
33
33
  class Chef::Application::Apply < Chef::Application
34
34
  include LicenseAcceptance::CLIFlags::MixlibCLI
35
35
 
36
- banner "Usage: #{Chef::Dist::APPLY} [RECIPE_FILE | -e RECIPE_TEXT | -s] [OPTIONS]"
36
+ banner "Usage: #{ChefUtils::Dist::Apply::EXEC} [RECIPE_FILE | -e RECIPE_TEXT | -s] [OPTIONS]"
37
37
 
38
38
  option :execute,
39
39
  short: "-e RECIPE_TEXT",
@@ -77,6 +77,11 @@ class Chef::Application::Apply < Chef::Application
77
77
  description: "Set the log level (trace, debug, info, warn, error, fatal).",
78
78
  proc: lambda { |l| l.to_sym }
79
79
 
80
+ option :log_location_cli,
81
+ short: "-L LOGLOCATION",
82
+ long: "--logfile LOGLOCATION",
83
+ description: "Set the log file location, defaults to STDOUT - recommended for daemonizing."
84
+
80
85
  option :always_dump_stacktrace,
81
86
  long: "--[no-]always-dump-stacktrace",
82
87
  boolean: true,
@@ -95,9 +100,9 @@ class Chef::Application::Apply < Chef::Application
95
100
  option :version,
96
101
  short: "-v",
97
102
  long: "--version",
98
- description: "Show #{Chef::Dist::PRODUCT} version.",
103
+ description: "Show #{ChefUtils::Dist::Infra::PRODUCT} version.",
99
104
  boolean: true,
100
- proc: lambda { |v| puts "#{Chef::Dist::PRODUCT}: #{::Chef::VERSION}" },
105
+ proc: lambda { |v| puts "#{ChefUtils::Dist::Infra::PRODUCT}: #{::Chef::VERSION}" },
101
106
  exit: 0
102
107
 
103
108
  option :why_run,
@@ -114,7 +119,7 @@ class Chef::Application::Apply < Chef::Application
114
119
 
115
120
  option :profile_ruby,
116
121
  long: "--[no-]profile-ruby",
117
- description: "Dump complete Ruby call graph stack of entire #{Chef::Dist::PRODUCT} run (expert only).",
122
+ description: "Dump complete Ruby call graph stack of entire #{ChefUtils::Dist::Infra::PRODUCT} run (expert only).",
118
123
  boolean: true,
119
124
  default: false
120
125
 
@@ -126,7 +131,7 @@ class Chef::Application::Apply < Chef::Application
126
131
 
127
132
  option :minimal_ohai,
128
133
  long: "--minimal-ohai",
129
- description: "Only run the bare minimum Ohai plugins #{Chef::Dist::PRODUCT} needs to function.",
134
+ description: "Only run the bare minimum Ohai plugins #{ChefUtils::Dist::Infra::PRODUCT} needs to function.",
130
135
  boolean: true
131
136
 
132
137
  attr_reader :json_attribs
@@ -176,7 +181,7 @@ class Chef::Application::Apply < Chef::Application
176
181
  else
177
182
  Chef::RunContext.new(@chef_client.node, {}, @chef_client.events)
178
183
  end
179
- recipe = Chef::Recipe.new("(#{Chef::Dist::APPLY} cookbook)", "(#{Chef::Dist::APPLY} recipe)", run_context)
184
+ recipe = Chef::Recipe.new("(#{ChefUtils::Dist::Apply::EXEC} cookbook)", "(#{ChefUtils::Dist::Apply::EXEC} recipe)", run_context)
180
185
  [recipe, run_context]
181
186
  end
182
187
 
@@ -20,11 +20,13 @@ require_relative "../log"
20
20
  require_relative "../config"
21
21
  require_relative "../mixin/shell_out"
22
22
  require_relative "../config_fetcher"
23
- require_relative "../dist"
23
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
24
24
  require_relative "../daemon"
25
25
  require "chef-config/mixin/dot_d"
26
26
  require "license_acceptance/cli_flags/mixlib_cli"
27
- require "mixlib/archive" unless defined?(Mixlib::Archive)
27
+ module Mixlib
28
+ autoload :Archive, "mixlib/archive"
29
+ end
28
30
 
29
31
  # This is a temporary class being used as a part of an effort to reduce duplication
30
32
  # between Chef::Application::Client and Chef::Application::Solo.
@@ -55,7 +57,7 @@ class Chef::Application::Base < Chef::Application
55
57
 
56
58
  option :once,
57
59
  long: "--once",
58
- description: "Cancel any interval or splay options, run #{Chef::Dist::PRODUCT} once and exit.",
60
+ description: "Cancel any interval or splay options, run #{ChefUtils::Dist::Infra::PRODUCT} once and exit.",
59
61
  boolean: true
60
62
 
61
63
  option :formatter,
@@ -78,7 +80,7 @@ class Chef::Application::Base < Chef::Application
78
80
 
79
81
  option :profile_ruby,
80
82
  long: "--[no-]profile-ruby",
81
- description: "Dump complete Ruby call graph stack of entire #{Chef::Dist::PRODUCT} run (expert only).",
83
+ description: "Dump complete Ruby call graph stack of entire #{ChefUtils::Dist::Infra::PRODUCT} run (expert only).",
82
84
  boolean: true,
83
85
  default: false
84
86
 
@@ -134,7 +136,7 @@ class Chef::Application::Base < Chef::Application
134
136
  option :interval,
135
137
  short: "-i SECONDS",
136
138
  long: "--interval SECONDS",
137
- description: "Run #{Chef::Dist::PRODUCT} periodically, in seconds.",
139
+ description: "Run #{ChefUtils::Dist::Infra::PRODUCT} periodically, in seconds.",
138
140
  proc: lambda { |s| s.to_i }
139
141
 
140
142
  option :json_attribs,
@@ -158,12 +160,12 @@ class Chef::Application::Base < Chef::Application
158
160
  option :environment,
159
161
  short: "-E ENVIRONMENT",
160
162
  long: "--environment ENVIRONMENT",
161
- description: "Set the #{Chef::Dist::PRODUCT} environment on the node."
163
+ description: "Set the #{ChefUtils::Dist::Infra::PRODUCT} environment on the node."
162
164
 
163
165
  option :client_fork,
164
166
  short: "-f",
165
167
  long: "--[no-]fork",
166
- description: "Fork #{Chef::Dist::PRODUCT} process."
168
+ description: "Fork #{ChefUtils::Dist::Infra::PRODUCT} process."
167
169
 
168
170
  option :why_run,
169
171
  short: "-W",
@@ -190,14 +192,14 @@ class Chef::Application::Base < Chef::Application
190
192
  option :version,
191
193
  short: "-v",
192
194
  long: "--version",
193
- description: "Show #{Chef::Dist::PRODUCT} version.",
195
+ description: "Show #{ChefUtils::Dist::Infra::PRODUCT} version.",
194
196
  boolean: true,
195
- proc: lambda { |v| puts "#{Chef::Dist::PRODUCT}: #{::Chef::VERSION}" },
197
+ proc: lambda { |v| puts "#{ChefUtils::Dist::Infra::PRODUCT}: #{::Chef::VERSION}" },
196
198
  exit: 0
197
199
 
198
200
  option :minimal_ohai,
199
201
  long: "--minimal-ohai",
200
- description: "Only run the bare minimum Ohai plugins #{Chef::Dist::PRODUCT} needs to function.",
202
+ description: "Only run the bare minimum Ohai plugins #{ChefUtils::Dist::Infra::PRODUCT} needs to function.",
201
203
  boolean: true
202
204
 
203
205
  option :delete_entire_chef_repo,
@@ -213,7 +215,7 @@ class Chef::Application::Base < Chef::Application
213
215
  option :target,
214
216
  short: "-t TARGET",
215
217
  long: "--target TARGET",
216
- description: "Target #{Chef::Dist::PRODUCT} against a remote system or device",
218
+ description: "Target #{ChefUtils::Dist::Infra::PRODUCT} against a remote system or device",
217
219
  proc: lambda { |target|
218
220
  Chef::Log.warn "-- EXPERIMENTAL -- Target mode activated, resources and dsl may change without warning -- EXPERIMENTAL --"
219
221
  target
@@ -228,7 +230,7 @@ class Chef::Application::Base < Chef::Application
228
230
  option :fatal_windows_admin_check,
229
231
  short: "-A",
230
232
  long: "--fatal-windows-admin-check",
231
- description: "Fail the run when #{Chef::Dist::CLIENT} doesn't have administrator privileges on Windows.",
233
+ description: "Fail the run when #{ChefUtils::Dist::Infra::CLIENT} doesn't have administrator privileges on Windows.",
232
234
  boolean: true
233
235
  end
234
236
 
@@ -245,7 +247,7 @@ class Chef::Application::Base < Chef::Application
245
247
  option :chef_server_url,
246
248
  short: "-S CHEFSERVERURL",
247
249
  long: "--server CHEFSERVERURL",
248
- description: "The #{Chef::Dist::SERVER_PRODUCT} URL.",
250
+ description: "The #{ChefUtils::Dist::Server::PRODUCT} URL.",
249
251
  proc: nil
250
252
 
251
253
  option :validation_key,
@@ -263,7 +265,7 @@ class Chef::Application::Base < Chef::Application
263
265
  option :enable_reporting,
264
266
  short: "-R",
265
267
  long: "--enable-reporting",
266
- description: "(#{Chef::Dist::CLIENT} only) reporting data collection for runs.",
268
+ description: "(#{ChefUtils::Dist::Infra::CLIENT} only) reporting data collection for runs.",
267
269
  boolean: true
268
270
 
269
271
  option :local_mode,
@@ -274,11 +276,11 @@ class Chef::Application::Base < Chef::Application
274
276
 
275
277
  option :chef_zero_host,
276
278
  long: "--chef-zero-host HOST",
277
- description: "Host to start #{Chef::Dist::ZERO} on."
279
+ description: "Host to start #{ChefUtils::Dist::Zero::PRODUCT} on."
278
280
 
279
281
  option :chef_zero_port,
280
282
  long: "--chef-zero-port PORT",
281
- description: "Port (or port range) to start #{Chef::Dist::ZERO} on. Port ranges like 1000,1010 or 8889-9999 will try all given ports until one works."
283
+ description: "Port (or port range) to start #{ChefUtils::Dist::Zero::PRODUCT} on. Port ranges like 1000,1010 or 8889-9999 will try all given ports until one works."
282
284
 
283
285
  option :listen,
284
286
  long: "--[no-]listen",
@@ -287,7 +289,7 @@ class Chef::Application::Base < Chef::Application
287
289
 
288
290
  option :skip_cookbook_sync,
289
291
  long: "--[no-]skip-cookbook-sync",
290
- description: "(#{Chef::Dist::CLIENT} only) Use cached cookbooks without overwriting local differences from the #{Chef::Dist::SERVER_PRODUCT}.",
292
+ description: "(#{ChefUtils::Dist::Infra::CLIENT} only) Use cached cookbooks without overwriting local differences from the #{ChefUtils::Dist::Server::PRODUCT}.",
291
293
  boolean: false
292
294
 
293
295
  option :named_run_list,
@@ -326,7 +328,7 @@ class Chef::Application::Base < Chef::Application
326
328
  # Run the chef client, optionally daemonizing or looping at intervals.
327
329
  def run_application
328
330
  if Chef::Config[:version]
329
- puts "#{Chef::Dist::PRODUCT} version: #{::Chef::VERSION}"
331
+ puts "#{ChefUtils::Dist::Infra::PRODUCT} version: #{::Chef::VERSION}"
330
332
  end
331
333
 
332
334
  if !Chef::Config[:client_fork] || Chef::Config[:once]
@@ -346,24 +348,25 @@ class Chef::Application::Base < Chef::Application
346
348
  private
347
349
 
348
350
  def windows_interval_error_message
349
- "Windows #{Chef::Dist::PRODUCT} interval runs are not supported in #{Chef::Dist::PRODUCT} 15 and later." +
351
+ "Windows #{ChefUtils::Dist::Infra::PRODUCT} interval runs are not supported in #{ChefUtils::Dist::Infra::PRODUCT} 15 and later." +
350
352
  "\nConfiguration settings:" +
351
353
  ("\n interval = #{Chef::Config[:interval]} seconds" if Chef::Config[:interval]).to_s +
352
- "\nPlease manage #{Chef::Dist::PRODUCT} as a scheduled task instead."
354
+ "\nPlease manage #{ChefUtils::Dist::Infra::PRODUCT} as a scheduled task instead."
353
355
  end
354
356
 
355
357
  def unforked_interval_error_message
356
- "Unforked #{Chef::Dist::PRODUCT} interval runs are disabled by default." +
358
+ "Unforked #{ChefUtils::Dist::Infra::PRODUCT} interval runs are disabled by default." +
357
359
  "\nConfiguration settings:" +
358
360
  ("\n interval = #{Chef::Config[:interval]} seconds" if Chef::Config[:interval]).to_s +
359
- "\nEnable #{Chef::Dist::PRODUCT} interval runs by setting `:client_fork = true` in your config file or adding `--fork` to your command line options."
361
+ "\nEnable #{ChefUtils::Dist::Infra::PRODUCT} interval runs by setting `:client_fork = true` in your config file or adding `--fork` to your command line options."
360
362
  end
361
363
 
362
364
  def fetch_recipe_tarball(url, path)
365
+ require "open-uri" unless defined?(OpenURI)
363
366
  Chef::Log.trace("Download recipes tarball from #{url} to #{path}")
364
367
  if File.exist?(url)
365
368
  FileUtils.cp(url, path)
366
- elsif URI.regexp.match?(url)
369
+ elsif URI::DEFAULT_PARSER.make_regexp.match?(url)
367
370
  File.open(path, "wb") do |f|
368
371
  open(url) do |r|
369
372
  f.write(r.read)
@@ -377,7 +380,7 @@ class Chef::Application::Base < Chef::Application
377
380
 
378
381
  def interval_run_chef_client
379
382
  if Chef::Config[:daemonize]
380
- Chef::Daemon.daemonize(Chef::Dist::PRODUCT)
383
+ Chef::Daemon.daemonize(ChefUtils::Dist::Infra::PRODUCT)
381
384
 
382
385
  # Start first daemonized run after configured number of seconds
383
386
  if Chef::Config[:daemonize].is_a?(Integer)