chef 16.10.8-universal-mingw32 → 17.0.242-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 (662) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -10
  3. data/README.md +1 -1
  4. data/Rakefile +13 -2
  5. data/chef-universal-mingw32.gemspec +1 -1
  6. data/chef.gemspec +7 -9
  7. data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.Wrapper.dll +0 -0
  8. data/distro/ruby_bin_folder/AMD64/Chef.PowerShell.dll +0 -0
  9. data/distro/ruby_bin_folder/AMD64/Newtonsoft.Json.dll +0 -0
  10. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
  11. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
  12. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
  13. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.NETCore.App.deps.json +153 -149
  14. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Diagnostics.dll +0 -0
  15. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Management.dll +0 -0
  16. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Utility.dll +0 -0
  17. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.ConsoleHost.dll +0 -0
  18. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.CoreCLR.Eventing.dll +0 -0
  19. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.MarkdownRender.dll +0 -0
  20. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Security.dll +0 -0
  21. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Management.dll +0 -0
  22. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Runtime.dll +0 -0
  23. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/Newtonsoft.Json.dll +0 -0
  24. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.Messages.dll +0 -0
  25. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.dll +0 -0
  26. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.Common.dll +0 -0
  27. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Management.Automation.dll +0 -0
  28. data/distro/ruby_bin_folder/AMD64/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Pkcs.dll +0 -0
  29. data/distro/ruby_bin_folder/x86/Chef.PowerShell.dll +0 -0
  30. data/distro/ruby_bin_folder/x86/Chef.Powershell.Wrapper.dll +0 -0
  31. data/distro/ruby_bin_folder/x86/Newtonsoft.Json.dll +0 -0
  32. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.PowerShell.Wrapper.Core.dll +0 -0
  33. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.dll +0 -0
  34. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Chef.Powershell.Core.pdb +0 -0
  35. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.NETCore.App.deps.json +153 -149
  36. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Diagnostics.dll +0 -0
  37. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Management.dll +0 -0
  38. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Commands.Utility.dll +0 -0
  39. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.ConsoleHost.dll +0 -0
  40. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.CoreCLR.Eventing.dll +0 -0
  41. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.MarkdownRender.dll +0 -0
  42. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.PowerShell.Security.dll +0 -0
  43. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Management.dll +0 -0
  44. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Microsoft.WSMan.Runtime.dll +0 -0
  45. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/Newtonsoft.Json.dll +0 -0
  46. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.Messages.dll +0 -0
  47. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Diagnostics.EventLog.dll +0 -0
  48. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Drawing.Common.dll +0 -0
  49. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Management.Automation.dll +0 -0
  50. data/distro/ruby_bin_folder/x86/shared/Microsoft.NETCore.App/5.0.0/System.Security.Cryptography.Pkcs.dll +0 -0
  51. data/lib/chef/application/base.rb +1 -1
  52. data/lib/chef/applications.rb +0 -1
  53. data/lib/chef/chef_fs/command_line.rb +5 -2
  54. data/lib/chef/chef_fs/file_system.rb +9 -10
  55. data/lib/chef/client.rb +2 -2
  56. data/lib/chef/compliance/default_attributes.rb +10 -5
  57. data/lib/chef/compliance/fetcher/automate.rb +15 -11
  58. data/lib/chef/compliance/reporter/automate.rb +17 -7
  59. data/lib/chef/compliance/reporter/chef_server_automate.rb +11 -6
  60. data/lib/chef/compliance/reporter/cli.rb +77 -0
  61. data/lib/chef/compliance/reporter/compliance_enforcer.rb +4 -0
  62. data/lib/chef/compliance/reporter/json_file.rb +8 -1
  63. data/lib/chef/compliance/runner.rb +71 -28
  64. data/lib/chef/cookbook/synchronizer.rb +3 -5
  65. data/lib/chef/cookbook_loader.rb +2 -4
  66. data/lib/chef/cookbook_uploader.rb +0 -1
  67. data/lib/chef/data_bag_item.rb +11 -2
  68. data/lib/chef/delayed_evaluator.rb +4 -0
  69. data/lib/chef/deprecated.rb +4 -0
  70. data/lib/chef/dsl/chef_vault.rb +6 -6
  71. data/lib/chef/dsl/reboot_pending.rb +1 -2
  72. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +20 -22
  73. data/lib/chef/group.rb +75 -0
  74. data/lib/chef/mixin/get_source_from_package.rb +1 -1
  75. data/lib/chef/node/attribute.rb +6 -4
  76. data/lib/chef/node/immutable_collections.rb +13 -0
  77. data/lib/chef/node/mixin/deep_merge_cache.rb +11 -7
  78. data/lib/chef/org.rb +3 -2
  79. data/lib/chef/property.rb +18 -0
  80. data/lib/chef/provider.rb +1 -1
  81. data/lib/chef/provider/cron.rb +1 -1
  82. data/lib/chef/provider/execute.rb +2 -1
  83. data/lib/chef/provider/file.rb +2 -2
  84. data/lib/chef/provider/git.rb +5 -7
  85. data/lib/chef/provider/group/groupadd.rb +3 -3
  86. data/lib/chef/provider/group/groupmod.rb +3 -3
  87. data/lib/chef/provider/group/pw.rb +3 -3
  88. data/lib/chef/provider/ifconfig.rb +2 -2
  89. data/lib/chef/provider/link.rb +2 -2
  90. data/lib/chef/provider/mount.rb +12 -7
  91. data/lib/chef/provider/mount/aix.rb +3 -3
  92. data/lib/chef/provider/mount/mount.rb +6 -6
  93. data/lib/chef/provider/mount/windows.rb +1 -1
  94. data/lib/chef/provider/package.rb +17 -21
  95. data/lib/chef/provider/package/apt.rb +27 -1
  96. data/lib/chef/provider/package/deb.rb +3 -3
  97. data/lib/chef/provider/package/dnf/dnf_helper.py +5 -1
  98. data/lib/chef/provider/package/portage.rb +2 -2
  99. data/lib/chef/provider/package/rubygems.rb +11 -17
  100. data/lib/chef/provider/package/windows.rb +2 -4
  101. data/lib/chef/provider/package/yum/yum_helper.py +5 -1
  102. data/lib/chef/provider/route.rb +2 -2
  103. data/lib/chef/provider/service.rb +6 -6
  104. data/lib/chef/provider/service/aixinit.rb +1 -1
  105. data/lib/chef/provider/service/debian.rb +1 -1
  106. data/lib/chef/provider/service/freebsd.rb +15 -21
  107. data/lib/chef/provider/service/macosx.rb +7 -7
  108. data/lib/chef/provider/service/systemd.rb +43 -14
  109. data/lib/chef/provider/service/upstart.rb +2 -13
  110. data/lib/chef/provider/service/windows.rb +12 -12
  111. data/lib/chef/provider/subversion.rb +10 -12
  112. data/lib/chef/provider/systemd_unit.rb +36 -10
  113. data/lib/chef/provider/template/content.rb +2 -6
  114. data/lib/chef/provider/user.rb +2 -2
  115. data/lib/chef/provider/user/dscl.rb +1 -1
  116. data/lib/chef/provider/user/mac.rb +17 -20
  117. data/lib/chef/provider/user/pw.rb +1 -1
  118. data/lib/chef/provider/user/windows.rb +1 -1
  119. data/lib/chef/provider/zypper_repository.rb +2 -2
  120. data/lib/chef/providers.rb +0 -1
  121. data/lib/chef/resource/alternatives.rb +6 -6
  122. data/lib/chef/resource/apt_package.rb +1 -1
  123. data/lib/chef/resource/apt_preference.rb +2 -2
  124. data/lib/chef/resource/apt_repository.rb +6 -6
  125. data/lib/chef/resource/apt_update.rb +3 -2
  126. data/lib/chef/resource/archive_file.rb +2 -3
  127. data/lib/chef/resource/breakpoint.rb +1 -1
  128. data/lib/chef/resource/build_essential.rb +2 -6
  129. data/lib/chef/resource/chef_client_config.rb +2 -2
  130. data/lib/chef/resource/chef_client_cron.rb +5 -5
  131. data/lib/chef/resource/chef_client_launchd.rb +4 -4
  132. data/lib/chef/resource/chef_client_scheduled_task.rb +1 -1
  133. data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
  134. data/lib/chef/resource/chef_handler.rb +3 -7
  135. data/lib/chef/resource/chef_sleep.rb +1 -1
  136. data/lib/chef/resource/chef_vault_secret.rb +3 -8
  137. data/lib/chef/resource/chocolatey_config.rb +2 -6
  138. data/lib/chef/resource/chocolatey_feature.rb +2 -6
  139. data/lib/chef/resource/chocolatey_source.rb +4 -10
  140. data/lib/chef/resource/cron/_cron_shared.rb +2 -2
  141. data/lib/chef/resource/cron_access.rb +2 -4
  142. data/lib/chef/resource/dmg_package.rb +6 -10
  143. data/lib/chef/resource/dpkg_package.rb +1 -1
  144. data/lib/chef/resource/execute.rb +6 -1
  145. data/lib/chef/resource/file.rb +1 -1
  146. data/lib/chef/resource/group.rb +2 -2
  147. data/lib/chef/resource/homebrew_cask.rb +2 -6
  148. data/lib/chef/resource/homebrew_tap.rb +2 -6
  149. data/lib/chef/resource/hostname.rb +21 -17
  150. data/lib/chef/resource/http_request.rb +1 -1
  151. data/lib/chef/resource/kernel_module.rb +6 -17
  152. data/lib/chef/resource/locale.rb +2 -3
  153. data/lib/chef/resource/lwrp_base.rb +4 -0
  154. data/lib/chef/resource/macos_userdefaults.rb +10 -14
  155. data/lib/chef/resource/mdadm.rb +53 -7
  156. data/lib/chef/resource/mount.rb +2 -1
  157. data/lib/chef/resource/openssl_ec_private_key.rb +2 -2
  158. data/lib/chef/resource/openssl_rsa_private_key.rb +1 -1
  159. data/lib/chef/resource/openssl_x509_certificate.rb +2 -2
  160. data/lib/chef/resource/plist.rb +7 -7
  161. data/lib/chef/resource/powershell_script.rb +1 -1
  162. data/lib/chef/resource/remote_file.rb +1 -1
  163. data/lib/chef/resource/rhsm_errata.rb +16 -1
  164. data/lib/chef/resource/rhsm_errata_level.rb +10 -1
  165. data/lib/chef/resource/rhsm_register.rb +12 -6
  166. data/lib/chef/resource/rhsm_repo.rb +2 -6
  167. data/lib/chef/resource/rhsm_subscription.rb +2 -6
  168. data/lib/chef/resource/scm/git.rb +1 -1
  169. data/lib/chef/resource/sudo.rb +6 -6
  170. data/lib/chef/resource/sysctl.rb +2 -6
  171. data/lib/chef/resource/systemd_unit.rb +2 -2
  172. data/lib/chef/resource/template.rb +1 -1
  173. data/lib/chef/resource/timezone.rb +1 -3
  174. data/lib/chef/resource/user/mac_user.rb +1 -1
  175. data/lib/chef/resource/user_ulimit.rb +2 -2
  176. data/lib/chef/resource/windows_ad_join.rb +2 -6
  177. data/lib/chef/resource/windows_audit_policy.rb +1 -1
  178. data/lib/chef/resource/windows_auto_run.rb +2 -5
  179. data/lib/chef/resource/windows_certificate.rb +207 -73
  180. data/lib/chef/resource/windows_dfs_folder.rb +2 -6
  181. data/lib/chef/resource/windows_dfs_namespace.rb +2 -6
  182. data/lib/chef/resource/windows_dfs_server.rb +1 -3
  183. data/lib/chef/resource/windows_dns_record.rb +2 -6
  184. data/lib/chef/resource/windows_dns_zone.rb +2 -6
  185. data/lib/chef/resource/windows_env.rb +5 -4
  186. data/lib/chef/resource/windows_feature.rb +3 -9
  187. data/lib/chef/resource/windows_feature_dism.rb +2 -6
  188. data/lib/chef/resource/windows_feature_powershell.rb +3 -3
  189. data/lib/chef/resource/windows_firewall_profile.rb +4 -4
  190. data/lib/chef/resource/windows_firewall_rule.rb +2 -5
  191. data/lib/chef/resource/windows_font.rb +2 -4
  192. data/lib/chef/resource/windows_pagefile.rb +2 -6
  193. data/lib/chef/resource/windows_path.rb +2 -2
  194. data/lib/chef/resource/windows_printer.rb +4 -4
  195. data/lib/chef/resource/windows_printer_port.rb +6 -6
  196. data/lib/chef/resource/windows_security_policy.rb +53 -40
  197. data/lib/chef/resource/windows_share.rb +14 -21
  198. data/lib/chef/resource/windows_shortcut.rb +4 -6
  199. data/lib/chef/resource/windows_task.rb +17 -5
  200. data/lib/chef/resource/windows_uac.rb +1 -1
  201. data/lib/chef/resource/windows_user_privilege.rb +4 -4
  202. data/lib/chef/resource/windows_workgroup.rb +1 -2
  203. data/lib/chef/resources.rb +0 -1
  204. data/lib/chef/user.rb +0 -1
  205. data/lib/chef/user_v1.rb +3 -4
  206. data/lib/chef/util/dsc/configuration_generator.rb +1 -0
  207. data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
  208. data/lib/chef/version.rb +1 -1
  209. data/lib/chef/win32/registry.rb +4 -2
  210. data/spec/data/cookbooks/openldap/libraries/openldap.rb +1 -1
  211. data/spec/data/lwrp/resources/bar.rb +2 -0
  212. data/spec/data/lwrp/resources/buck_passer.rb +1 -0
  213. data/spec/data/lwrp/resources/buck_passer_2.rb +1 -0
  214. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +1 -0
  215. data/spec/data/lwrp/resources/foo.rb +2 -0
  216. data/spec/data/lwrp/resources/inline_compiler.rb +1 -0
  217. data/spec/data/lwrp/resources/monkey_name_printer.rb +1 -0
  218. data/spec/data/lwrp/resources/paint_drying_watcher.rb +1 -0
  219. data/spec/data/lwrp/resources/thumb_twiddler.rb +1 -0
  220. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +2 -0
  221. data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -0
  222. data/spec/data/lwrp_override/resources/foo.rb +1 -0
  223. data/spec/data/rubygems.org/nonexistent_gem-info +1 -0
  224. data/spec/data/rubygems.org/sexp_processor-info +49 -0
  225. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  226. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  227. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  228. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  229. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  230. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +2 -0
  231. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  232. data/spec/data/run_context/cookbooks/test/resources/resource.rb +2 -0
  233. data/spec/functional/dsl/registry_helper_spec.rb +1 -1
  234. data/spec/functional/resource/aixinit_service_spec.rb +7 -7
  235. data/spec/functional/resource/apt_package_spec.rb +1 -1
  236. data/spec/functional/resource/chocolatey_package_spec.rb +13 -0
  237. data/spec/functional/resource/cron_spec.rb +1 -1
  238. data/spec/functional/resource/dnf_package_spec.rb +4 -1
  239. data/spec/functional/resource/registry_spec.rb +8 -8
  240. data/spec/functional/resource/user/mac_user_spec.rb +2 -2
  241. data/spec/functional/resource/windows_certificate_spec.rb +92 -35
  242. data/spec/functional/version_spec.rb +1 -1
  243. data/spec/functional/win32/registry_spec.rb +1 -1
  244. data/spec/integration/client/client_spec.rb +5 -2
  245. data/spec/integration/client/exit_code_spec.rb +1 -1
  246. data/spec/integration/client/ipv6_spec.rb +1 -1
  247. data/spec/integration/compliance/compliance_spec.rb +3 -2
  248. data/spec/integration/ohai/ohai_spec.rb +7 -6
  249. data/spec/integration/recipes/accumulator_spec.rb +13 -1
  250. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -1
  251. data/spec/integration/recipes/lwrp_spec.rb +3 -1
  252. data/spec/integration/recipes/notifies_spec.rb +15 -1
  253. data/spec/integration/recipes/notifying_block_spec.rb +2 -1
  254. data/spec/integration/recipes/recipe_dsl_spec.rb +9 -9
  255. data/spec/integration/recipes/unified_mode_spec.rb +1 -1
  256. data/spec/integration/recipes/use_partial_spec.rb +4 -1
  257. data/spec/spec_helper.rb +11 -13
  258. data/spec/support/chef_helpers.rb +0 -16
  259. data/spec/support/lib/chef/resource/with_state.rb +0 -1
  260. data/spec/support/lib/chef/resource/zen_follower.rb +0 -1
  261. data/spec/support/lib/chef/resource/zen_master.rb +0 -1
  262. data/spec/support/matchers/leak.rb +7 -9
  263. data/spec/support/platform_helpers.rb +5 -8
  264. data/spec/support/shared/integration/integration_helper.rb +0 -1
  265. data/spec/support/shared/unit/provider/file.rb +14 -0
  266. data/spec/support/shared/unit/script_resource.rb +2 -2
  267. data/spec/unit/application/solo_spec.rb +2 -2
  268. data/spec/unit/chef_fs/diff_spec.rb +1 -1
  269. data/spec/unit/chef_fs/file_system_spec.rb +1 -1
  270. data/spec/unit/compliance/fetcher/automate_spec.rb +5 -13
  271. data/spec/unit/compliance/reporter/automate_spec.rb +26 -2
  272. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +20 -0
  273. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +1 -0
  274. data/spec/unit/compliance/runner_spec.rb +84 -9
  275. data/spec/unit/data_bag_item_spec.rb +1 -6
  276. data/spec/unit/dsl/reboot_pending_spec.rb +2 -2
  277. data/spec/unit/dsl/registry_helper_spec.rb +1 -1
  278. data/spec/unit/lwrp_spec.rb +1 -1
  279. data/spec/unit/mixin/params_validate_spec.rb +4 -3
  280. data/spec/unit/node/attribute_spec.rb +1 -1
  281. data/spec/unit/node_spec.rb +78 -0
  282. data/spec/unit/org_group_spec.rb +45 -0
  283. data/spec/unit/property_spec.rb +23 -22
  284. data/spec/unit/provider/cron_spec.rb +1 -1
  285. data/spec/unit/provider/group/gpasswd_spec.rb +2 -2
  286. data/spec/unit/provider/group/groupmod_spec.rb +2 -2
  287. data/spec/unit/provider/group/pw_spec.rb +2 -2
  288. data/spec/unit/provider/group_spec.rb +1 -1
  289. data/spec/unit/provider/mount/mount_spec.rb +52 -0
  290. data/spec/unit/provider/package/apt_spec.rb +84 -18
  291. data/spec/unit/provider/package/deb_spec.rb +3 -3
  292. data/spec/unit/provider/package/rubygems_spec.rb +21 -33
  293. data/spec/unit/provider/service/arch_service_spec.rb +1 -0
  294. data/spec/unit/provider/service/debian_service_spec.rb +1 -0
  295. data/spec/unit/provider/service/macosx_spec.rb +5 -5
  296. data/spec/unit/provider/service/systemd_service_spec.rb +138 -23
  297. data/spec/unit/provider/service/upstart_service_spec.rb +0 -29
  298. data/spec/unit/provider/service/windows_spec.rb +2 -2
  299. data/spec/unit/provider/subversion_spec.rb +2 -2
  300. data/spec/unit/provider/systemd_unit_spec.rb +79 -60
  301. data/spec/unit/provider/zypper_repository_spec.rb +2 -2
  302. data/spec/unit/provider_spec.rb +0 -8
  303. data/spec/unit/resource/chef_client_cron_spec.rb +8 -8
  304. data/spec/unit/resource/powershell_script_spec.rb +2 -2
  305. data/spec/unit/resource/windows_task_spec.rb +1 -1
  306. data/spec/unit/user_spec.rb +1 -1
  307. data/spec/unit/user_v1_spec.rb +6 -4
  308. data/tasks/rspec.rb +16 -8
  309. metadata +25 -386
  310. data/bin/knife +0 -24
  311. data/lib/chef/application/knife.rb +0 -234
  312. data/lib/chef/application/windows_service.rb +0 -338
  313. data/lib/chef/application/windows_service_manager.rb +0 -205
  314. data/lib/chef/chef_fs/knife.rb +0 -160
  315. data/lib/chef/chef_fs/parallelizer.rb +0 -102
  316. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +0 -35
  317. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +0 -278
  318. data/lib/chef/cookbook_site_streaming_uploader.rb +0 -244
  319. data/lib/chef/knife.rb +0 -665
  320. data/lib/chef/knife/acl_add.rb +0 -57
  321. data/lib/chef/knife/acl_base.rb +0 -183
  322. data/lib/chef/knife/acl_bulk_add.rb +0 -78
  323. data/lib/chef/knife/acl_bulk_remove.rb +0 -83
  324. data/lib/chef/knife/acl_remove.rb +0 -62
  325. data/lib/chef/knife/acl_show.rb +0 -56
  326. data/lib/chef/knife/bootstrap.rb +0 -1192
  327. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +0 -162
  328. data/lib/chef/knife/bootstrap/client_builder.rb +0 -212
  329. data/lib/chef/knife/bootstrap/templates/README.md +0 -11
  330. data/lib/chef/knife/bootstrap/templates/chef-full.erb +0 -242
  331. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +0 -278
  332. data/lib/chef/knife/bootstrap/train_connector.rb +0 -336
  333. data/lib/chef/knife/client_bulk_delete.rb +0 -104
  334. data/lib/chef/knife/client_create.rb +0 -101
  335. data/lib/chef/knife/client_delete.rb +0 -62
  336. data/lib/chef/knife/client_edit.rb +0 -52
  337. data/lib/chef/knife/client_key_create.rb +0 -73
  338. data/lib/chef/knife/client_key_delete.rb +0 -80
  339. data/lib/chef/knife/client_key_edit.rb +0 -83
  340. data/lib/chef/knife/client_key_list.rb +0 -73
  341. data/lib/chef/knife/client_key_show.rb +0 -80
  342. data/lib/chef/knife/client_list.rb +0 -41
  343. data/lib/chef/knife/client_reregister.rb +0 -58
  344. data/lib/chef/knife/client_show.rb +0 -48
  345. data/lib/chef/knife/config_get.rb +0 -39
  346. data/lib/chef/knife/config_get_profile.rb +0 -37
  347. data/lib/chef/knife/config_list.rb +0 -139
  348. data/lib/chef/knife/config_list_profiles.rb +0 -37
  349. data/lib/chef/knife/config_show.rb +0 -127
  350. data/lib/chef/knife/config_use.rb +0 -61
  351. data/lib/chef/knife/config_use_profile.rb +0 -47
  352. data/lib/chef/knife/configure.rb +0 -150
  353. data/lib/chef/knife/configure_client.rb +0 -48
  354. data/lib/chef/knife/cookbook_bulk_delete.rb +0 -71
  355. data/lib/chef/knife/cookbook_delete.rb +0 -151
  356. data/lib/chef/knife/cookbook_download.rb +0 -142
  357. data/lib/chef/knife/cookbook_list.rb +0 -47
  358. data/lib/chef/knife/cookbook_metadata.rb +0 -106
  359. data/lib/chef/knife/cookbook_metadata_from_file.rb +0 -49
  360. data/lib/chef/knife/cookbook_show.rb +0 -98
  361. data/lib/chef/knife/cookbook_upload.rb +0 -292
  362. data/lib/chef/knife/core/bootstrap_context.rb +0 -264
  363. data/lib/chef/knife/core/cookbook_scm_repo.rb +0 -159
  364. data/lib/chef/knife/core/formatting_options.rb +0 -49
  365. data/lib/chef/knife/core/gem_glob_loader.rb +0 -138
  366. data/lib/chef/knife/core/generic_presenter.rb +0 -232
  367. data/lib/chef/knife/core/hashed_command_loader.rb +0 -100
  368. data/lib/chef/knife/core/node_editor.rb +0 -130
  369. data/lib/chef/knife/core/node_presenter.rb +0 -133
  370. data/lib/chef/knife/core/object_loader.rb +0 -115
  371. data/lib/chef/knife/core/status_presenter.rb +0 -147
  372. data/lib/chef/knife/core/subcommand_loader.rb +0 -203
  373. data/lib/chef/knife/core/text_formatter.rb +0 -85
  374. data/lib/chef/knife/core/ui.rb +0 -338
  375. data/lib/chef/knife/core/windows_bootstrap_context.rb +0 -406
  376. data/lib/chef/knife/data_bag_create.rb +0 -81
  377. data/lib/chef/knife/data_bag_delete.rb +0 -49
  378. data/lib/chef/knife/data_bag_edit.rb +0 -74
  379. data/lib/chef/knife/data_bag_from_file.rb +0 -113
  380. data/lib/chef/knife/data_bag_list.rb +0 -42
  381. data/lib/chef/knife/data_bag_secret_options.rb +0 -122
  382. data/lib/chef/knife/data_bag_show.rb +0 -69
  383. data/lib/chef/knife/delete.rb +0 -125
  384. data/lib/chef/knife/deps.rb +0 -156
  385. data/lib/chef/knife/diff.rb +0 -83
  386. data/lib/chef/knife/download.rb +0 -84
  387. data/lib/chef/knife/edit.rb +0 -88
  388. data/lib/chef/knife/environment_compare.rb +0 -128
  389. data/lib/chef/knife/environment_create.rb +0 -52
  390. data/lib/chef/knife/environment_delete.rb +0 -44
  391. data/lib/chef/knife/environment_edit.rb +0 -44
  392. data/lib/chef/knife/environment_from_file.rb +0 -84
  393. data/lib/chef/knife/environment_list.rb +0 -41
  394. data/lib/chef/knife/environment_show.rb +0 -47
  395. data/lib/chef/knife/exec.rb +0 -99
  396. data/lib/chef/knife/group_add.rb +0 -55
  397. data/lib/chef/knife/group_create.rb +0 -49
  398. data/lib/chef/knife/group_destroy.rb +0 -53
  399. data/lib/chef/knife/group_list.rb +0 -43
  400. data/lib/chef/knife/group_remove.rb +0 -56
  401. data/lib/chef/knife/group_show.rb +0 -49
  402. data/lib/chef/knife/key_create.rb +0 -112
  403. data/lib/chef/knife/key_create_base.rb +0 -50
  404. data/lib/chef/knife/key_delete.rb +0 -55
  405. data/lib/chef/knife/key_edit.rb +0 -118
  406. data/lib/chef/knife/key_edit_base.rb +0 -55
  407. data/lib/chef/knife/key_list.rb +0 -90
  408. data/lib/chef/knife/key_list_base.rb +0 -45
  409. data/lib/chef/knife/key_show.rb +0 -53
  410. data/lib/chef/knife/list.rb +0 -177
  411. data/lib/chef/knife/node_bulk_delete.rb +0 -75
  412. data/lib/chef/knife/node_create.rb +0 -47
  413. data/lib/chef/knife/node_delete.rb +0 -46
  414. data/lib/chef/knife/node_edit.rb +0 -70
  415. data/lib/chef/knife/node_environment_set.rb +0 -53
  416. data/lib/chef/knife/node_from_file.rb +0 -51
  417. data/lib/chef/knife/node_list.rb +0 -44
  418. data/lib/chef/knife/node_policy_set.rb +0 -79
  419. data/lib/chef/knife/node_run_list_add.rb +0 -104
  420. data/lib/chef/knife/node_run_list_remove.rb +0 -67
  421. data/lib/chef/knife/node_run_list_set.rb +0 -66
  422. data/lib/chef/knife/node_show.rb +0 -63
  423. data/lib/chef/knife/null.rb +0 -12
  424. data/lib/chef/knife/raw.rb +0 -123
  425. data/lib/chef/knife/recipe_list.rb +0 -32
  426. data/lib/chef/knife/rehash.rb +0 -50
  427. data/lib/chef/knife/role_bulk_delete.rb +0 -66
  428. data/lib/chef/knife/role_create.rb +0 -53
  429. data/lib/chef/knife/role_delete.rb +0 -46
  430. data/lib/chef/knife/role_edit.rb +0 -45
  431. data/lib/chef/knife/role_env_run_list_add.rb +0 -87
  432. data/lib/chef/knife/role_env_run_list_clear.rb +0 -55
  433. data/lib/chef/knife/role_env_run_list_remove.rb +0 -57
  434. data/lib/chef/knife/role_env_run_list_replace.rb +0 -60
  435. data/lib/chef/knife/role_env_run_list_set.rb +0 -70
  436. data/lib/chef/knife/role_from_file.rb +0 -51
  437. data/lib/chef/knife/role_list.rb +0 -42
  438. data/lib/chef/knife/role_run_list_add.rb +0 -87
  439. data/lib/chef/knife/role_run_list_clear.rb +0 -55
  440. data/lib/chef/knife/role_run_list_remove.rb +0 -56
  441. data/lib/chef/knife/role_run_list_replace.rb +0 -60
  442. data/lib/chef/knife/role_run_list_set.rb +0 -69
  443. data/lib/chef/knife/role_show.rb +0 -48
  444. data/lib/chef/knife/search.rb +0 -194
  445. data/lib/chef/knife/serve.rb +0 -65
  446. data/lib/chef/knife/show.rb +0 -72
  447. data/lib/chef/knife/ssh.rb +0 -645
  448. data/lib/chef/knife/ssl_check.rb +0 -284
  449. data/lib/chef/knife/ssl_fetch.rb +0 -161
  450. data/lib/chef/knife/status.rb +0 -95
  451. data/lib/chef/knife/supermarket_download.rb +0 -121
  452. data/lib/chef/knife/supermarket_install.rb +0 -192
  453. data/lib/chef/knife/supermarket_list.rb +0 -76
  454. data/lib/chef/knife/supermarket_search.rb +0 -53
  455. data/lib/chef/knife/supermarket_share.rb +0 -166
  456. data/lib/chef/knife/supermarket_show.rb +0 -66
  457. data/lib/chef/knife/supermarket_unshare.rb +0 -61
  458. data/lib/chef/knife/tag_create.rb +0 -52
  459. data/lib/chef/knife/tag_delete.rb +0 -60
  460. data/lib/chef/knife/tag_list.rb +0 -47
  461. data/lib/chef/knife/upload.rb +0 -86
  462. data/lib/chef/knife/user_create.rb +0 -107
  463. data/lib/chef/knife/user_delete.rb +0 -44
  464. data/lib/chef/knife/user_dissociate.rb +0 -42
  465. data/lib/chef/knife/user_edit.rb +0 -52
  466. data/lib/chef/knife/user_invite_add.rb +0 -43
  467. data/lib/chef/knife/user_invite_list.rb +0 -34
  468. data/lib/chef/knife/user_invite_rescind.rb +0 -63
  469. data/lib/chef/knife/user_key_create.rb +0 -73
  470. data/lib/chef/knife/user_key_delete.rb +0 -80
  471. data/lib/chef/knife/user_key_edit.rb +0 -83
  472. data/lib/chef/knife/user_key_list.rb +0 -73
  473. data/lib/chef/knife/user_key_show.rb +0 -80
  474. data/lib/chef/knife/user_list.rb +0 -42
  475. data/lib/chef/knife/user_reregister.rb +0 -59
  476. data/lib/chef/knife/user_show.rb +0 -48
  477. data/lib/chef/knife/xargs.rb +0 -282
  478. data/lib/chef/knife/yaml_convert.rb +0 -91
  479. data/lib/chef/resource/user/dscl_user.rb +0 -35
  480. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  481. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  482. data/spec/data/knife_subcommand/test_explicit_category.rb +0 -7
  483. data/spec/data/knife_subcommand/test_name_mapping.rb +0 -4
  484. data/spec/data/knife_subcommand/test_yourself.rb +0 -21
  485. data/spec/functional/knife/configure_spec.rb +0 -33
  486. data/spec/functional/knife/cookbook_delete_spec.rb +0 -156
  487. data/spec/functional/knife/exec_spec.rb +0 -55
  488. data/spec/functional/knife/rehash_spec.rb +0 -39
  489. data/spec/functional/knife/smoke_test.rb +0 -42
  490. data/spec/functional/knife/ssh_spec.rb +0 -352
  491. data/spec/functional/resource/user/dscl_spec.rb +0 -188
  492. data/spec/functional/resource/windows_service_spec.rb +0 -105
  493. data/spec/functional/win32/service_manager_spec.rb +0 -220
  494. data/spec/integration/knife/chef_fs_data_store_spec.rb +0 -557
  495. data/spec/integration/knife/chef_repo_path_spec.rb +0 -962
  496. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -200
  497. data/spec/integration/knife/chefignore_spec.rb +0 -301
  498. data/spec/integration/knife/client_bulk_delete_spec.rb +0 -131
  499. data/spec/integration/knife/client_create_spec.rb +0 -70
  500. data/spec/integration/knife/client_delete_spec.rb +0 -64
  501. data/spec/integration/knife/client_key_create_spec.rb +0 -66
  502. data/spec/integration/knife/client_key_delete_spec.rb +0 -43
  503. data/spec/integration/knife/client_key_list_spec.rb +0 -61
  504. data/spec/integration/knife/client_key_show_spec.rb +0 -45
  505. data/spec/integration/knife/client_list_spec.rb +0 -49
  506. data/spec/integration/knife/client_show_spec.rb +0 -37
  507. data/spec/integration/knife/common_options_spec.rb +0 -174
  508. data/spec/integration/knife/config_list_spec.rb +0 -220
  509. data/spec/integration/knife/config_show_spec.rb +0 -192
  510. data/spec/integration/knife/config_use_spec.rb +0 -198
  511. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +0 -113
  512. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +0 -65
  513. data/spec/integration/knife/cookbook_download_spec.rb +0 -72
  514. data/spec/integration/knife/cookbook_list_spec.rb +0 -55
  515. data/spec/integration/knife/cookbook_show_spec.rb +0 -149
  516. data/spec/integration/knife/cookbook_upload_spec.rb +0 -128
  517. data/spec/integration/knife/data_bag_create_spec.rb +0 -125
  518. data/spec/integration/knife/data_bag_delete_spec.rb +0 -59
  519. data/spec/integration/knife/data_bag_edit_spec.rb +0 -105
  520. data/spec/integration/knife/data_bag_from_file_spec.rb +0 -116
  521. data/spec/integration/knife/data_bag_list_spec.rb +0 -44
  522. data/spec/integration/knife/data_bag_show_spec.rb +0 -95
  523. data/spec/integration/knife/delete_spec.rb +0 -1018
  524. data/spec/integration/knife/deps_spec.rb +0 -703
  525. data/spec/integration/knife/diff_spec.rb +0 -605
  526. data/spec/integration/knife/download_spec.rb +0 -1336
  527. data/spec/integration/knife/environment_compare_spec.rb +0 -75
  528. data/spec/integration/knife/environment_create_spec.rb +0 -41
  529. data/spec/integration/knife/environment_delete_spec.rb +0 -37
  530. data/spec/integration/knife/environment_from_file_spec.rb +0 -116
  531. data/spec/integration/knife/environment_list_spec.rb +0 -42
  532. data/spec/integration/knife/environment_show_spec.rb +0 -77
  533. data/spec/integration/knife/list_spec.rb +0 -1060
  534. data/spec/integration/knife/node_bulk_delete_spec.rb +0 -52
  535. data/spec/integration/knife/node_create_spec.rb +0 -47
  536. data/spec/integration/knife/node_delete_spec.rb +0 -48
  537. data/spec/integration/knife/node_environment_set_spec.rb +0 -46
  538. data/spec/integration/knife/node_from_file_spec.rb +0 -59
  539. data/spec/integration/knife/node_list_spec.rb +0 -45
  540. data/spec/integration/knife/node_run_list_add_spec.rb +0 -54
  541. data/spec/integration/knife/node_run_list_remove_spec.rb +0 -36
  542. data/spec/integration/knife/node_run_list_set_spec.rb +0 -41
  543. data/spec/integration/knife/node_show_spec.rb +0 -36
  544. data/spec/integration/knife/raw_spec.rb +0 -297
  545. data/spec/integration/knife/redirection_spec.rb +0 -64
  546. data/spec/integration/knife/role_bulk_delete_spec.rb +0 -52
  547. data/spec/integration/knife/role_create_spec.rb +0 -41
  548. data/spec/integration/knife/role_delete_spec.rb +0 -48
  549. data/spec/integration/knife/role_from_file_spec.rb +0 -96
  550. data/spec/integration/knife/role_list_spec.rb +0 -45
  551. data/spec/integration/knife/role_show_spec.rb +0 -51
  552. data/spec/integration/knife/search_node_spec.rb +0 -40
  553. data/spec/integration/knife/serve_spec.rb +0 -92
  554. data/spec/integration/knife/show_spec.rb +0 -197
  555. data/spec/integration/knife/upload_spec.rb +0 -1617
  556. data/spec/support/shared/functional/knife.rb +0 -37
  557. data/spec/support/shared/functional/win32_service.rb +0 -57
  558. data/spec/support/shared/integration/knife_support.rb +0 -192
  559. data/spec/support/shared/unit/knife_shared.rb +0 -39
  560. data/spec/unit/application/knife_spec.rb +0 -241
  561. data/spec/unit/chef_fs/parallelizer_spec.rb +0 -479
  562. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -198
  563. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +0 -152
  564. data/spec/unit/knife/bootstrap/client_builder_spec.rb +0 -207
  565. data/spec/unit/knife/bootstrap/train_connector_spec.rb +0 -244
  566. data/spec/unit/knife/bootstrap_spec.rb +0 -2220
  567. data/spec/unit/knife/client_bulk_delete_spec.rb +0 -166
  568. data/spec/unit/knife/client_create_spec.rb +0 -169
  569. data/spec/unit/knife/client_delete_spec.rb +0 -99
  570. data/spec/unit/knife/client_edit_spec.rb +0 -53
  571. data/spec/unit/knife/client_list_spec.rb +0 -34
  572. data/spec/unit/knife/client_reregister_spec.rb +0 -62
  573. data/spec/unit/knife/client_show_spec.rb +0 -52
  574. data/spec/unit/knife/configure_client_spec.rb +0 -81
  575. data/spec/unit/knife/configure_spec.rb +0 -190
  576. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +0 -87
  577. data/spec/unit/knife/cookbook_delete_spec.rb +0 -239
  578. data/spec/unit/knife/cookbook_download_spec.rb +0 -255
  579. data/spec/unit/knife/cookbook_list_spec.rb +0 -88
  580. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +0 -72
  581. data/spec/unit/knife/cookbook_metadata_spec.rb +0 -182
  582. data/spec/unit/knife/cookbook_show_spec.rb +0 -253
  583. data/spec/unit/knife/cookbook_upload_spec.rb +0 -364
  584. data/spec/unit/knife/core/bootstrap_context_spec.rb +0 -287
  585. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +0 -187
  586. data/spec/unit/knife/core/gem_glob_loader_spec.rb +0 -209
  587. data/spec/unit/knife/core/hashed_command_loader_spec.rb +0 -112
  588. data/spec/unit/knife/core/node_editor_spec.rb +0 -211
  589. data/spec/unit/knife/core/object_loader_spec.rb +0 -81
  590. data/spec/unit/knife/core/status_presenter_spec.rb +0 -54
  591. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -64
  592. data/spec/unit/knife/core/ui_spec.rb +0 -656
  593. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +0 -238
  594. data/spec/unit/knife/data_bag_create_spec.rb +0 -175
  595. data/spec/unit/knife/data_bag_edit_spec.rb +0 -126
  596. data/spec/unit/knife/data_bag_from_file_spec.rb +0 -174
  597. data/spec/unit/knife/data_bag_secret_options_spec.rb +0 -173
  598. data/spec/unit/knife/data_bag_show_spec.rb +0 -139
  599. data/spec/unit/knife/environment_compare_spec.rb +0 -112
  600. data/spec/unit/knife/environment_create_spec.rb +0 -91
  601. data/spec/unit/knife/environment_delete_spec.rb +0 -71
  602. data/spec/unit/knife/environment_edit_spec.rb +0 -79
  603. data/spec/unit/knife/environment_from_file_spec.rb +0 -90
  604. data/spec/unit/knife/environment_list_spec.rb +0 -54
  605. data/spec/unit/knife/environment_show_spec.rb +0 -52
  606. data/spec/unit/knife/key_create_spec.rb +0 -223
  607. data/spec/unit/knife/key_delete_spec.rb +0 -133
  608. data/spec/unit/knife/key_edit_spec.rb +0 -264
  609. data/spec/unit/knife/key_helper.rb +0 -74
  610. data/spec/unit/knife/key_list_spec.rb +0 -216
  611. data/spec/unit/knife/key_show_spec.rb +0 -126
  612. data/spec/unit/knife/node_bulk_delete_spec.rb +0 -94
  613. data/spec/unit/knife/node_delete_spec.rb +0 -77
  614. data/spec/unit/knife/node_edit_spec.rb +0 -116
  615. data/spec/unit/knife/node_environment_set_spec.rb +0 -61
  616. data/spec/unit/knife/node_from_file_spec.rb +0 -59
  617. data/spec/unit/knife/node_list_spec.rb +0 -62
  618. data/spec/unit/knife/node_policy_set_spec.rb +0 -122
  619. data/spec/unit/knife/node_run_list_add_spec.rb +0 -145
  620. data/spec/unit/knife/node_run_list_remove_spec.rb +0 -106
  621. data/spec/unit/knife/node_run_list_set_spec.rb +0 -115
  622. data/spec/unit/knife/node_show_spec.rb +0 -65
  623. data/spec/unit/knife/raw_spec.rb +0 -43
  624. data/spec/unit/knife/role_bulk_delete_spec.rb +0 -80
  625. data/spec/unit/knife/role_create_spec.rb +0 -80
  626. data/spec/unit/knife/role_delete_spec.rb +0 -67
  627. data/spec/unit/knife/role_edit_spec.rb +0 -77
  628. data/spec/unit/knife/role_env_run_list_add_spec.rb +0 -217
  629. data/spec/unit/knife/role_env_run_list_clear_spec.rb +0 -94
  630. data/spec/unit/knife/role_env_run_list_remove_spec.rb +0 -102
  631. data/spec/unit/knife/role_env_run_list_replace_spec.rb +0 -105
  632. data/spec/unit/knife/role_env_run_list_set_spec.rb +0 -99
  633. data/spec/unit/knife/role_from_file_spec.rb +0 -69
  634. data/spec/unit/knife/role_list_spec.rb +0 -54
  635. data/spec/unit/knife/role_run_list_add_spec.rb +0 -179
  636. data/spec/unit/knife/role_run_list_clear_spec.rb +0 -84
  637. data/spec/unit/knife/role_run_list_remove_spec.rb +0 -92
  638. data/spec/unit/knife/role_run_list_replace_spec.rb +0 -98
  639. data/spec/unit/knife/role_run_list_set_spec.rb +0 -89
  640. data/spec/unit/knife/role_show_spec.rb +0 -59
  641. data/spec/unit/knife/ssh_spec.rb +0 -403
  642. data/spec/unit/knife/ssl_check_spec.rb +0 -256
  643. data/spec/unit/knife/ssl_fetch_spec.rb +0 -222
  644. data/spec/unit/knife/status_spec.rb +0 -112
  645. data/spec/unit/knife/supermarket_download_spec.rb +0 -152
  646. data/spec/unit/knife/supermarket_install_spec.rb +0 -202
  647. data/spec/unit/knife/supermarket_list_spec.rb +0 -70
  648. data/spec/unit/knife/supermarket_search_spec.rb +0 -85
  649. data/spec/unit/knife/supermarket_share_spec.rb +0 -208
  650. data/spec/unit/knife/supermarket_unshare_spec.rb +0 -78
  651. data/spec/unit/knife/tag_create_spec.rb +0 -23
  652. data/spec/unit/knife/tag_delete_spec.rb +0 -25
  653. data/spec/unit/knife/tag_list_spec.rb +0 -23
  654. data/spec/unit/knife/user_create_spec.rb +0 -184
  655. data/spec/unit/knife/user_delete_spec.rb +0 -46
  656. data/spec/unit/knife/user_edit_spec.rb +0 -48
  657. data/spec/unit/knife/user_list_spec.rb +0 -36
  658. data/spec/unit/knife/user_reregister_spec.rb +0 -56
  659. data/spec/unit/knife/user_show_spec.rb +0 -46
  660. data/spec/unit/knife_spec.rb +0 -634
  661. data/spec/unit/provider/user/dscl_spec.rb +0 -699
  662. data/spec/unit/windows_service_spec.rb +0 -118
data/lib/chef/knife.rb DELETED
@@ -1,665 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@chef.io>)
3
- # Author:: Christopher Brown (<cb@chef.io>)
4
- # Copyright:: Copyright (c) Chef Software Inc.
5
- # License:: Apache License, Version 2.0
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- require "forwardable" unless defined?(Forwardable)
21
- require_relative "version"
22
- require "mixlib/cli" unless defined?(Mixlib::CLI)
23
- require "chef-utils/dsl/default_paths" unless defined?(ChefUtils::DSL::DefaultPaths)
24
- require "chef-utils/dist" unless defined?(ChefUtils::Dist)
25
- require_relative "workstation_config_loader"
26
- require_relative "mixin/convert_to_class_name"
27
- require_relative "mixin/default_paths"
28
- require_relative "knife/core/subcommand_loader"
29
- require_relative "knife/core/ui"
30
- require_relative "local_mode"
31
- require_relative "server_api"
32
- require_relative "http/authenticator"
33
- require_relative "http/http_request"
34
- require_relative "http"
35
- require "pp" unless defined?(PP)
36
-
37
- class Chef
38
- class Knife
39
-
40
- Chef::HTTP::HTTPRequest.user_agent = "#{ChefUtils::Dist::Infra::PRODUCT} Knife#{Chef::HTTP::HTTPRequest::UA_COMMON}"
41
-
42
- include Mixlib::CLI
43
- include ChefUtils::DSL::DefaultPaths
44
- extend Chef::Mixin::ConvertToClassName
45
- extend Forwardable
46
-
47
- # @note Backwards Compat:
48
- # Ideally, we should not vomit all of these methods into this base class;
49
- # instead, they should be accessed by hitting the ui object directly.
50
- def_delegator :@ui, :stdout
51
- def_delegator :@ui, :stderr
52
- def_delegator :@ui, :stdin
53
- def_delegator :@ui, :msg
54
- def_delegator :@ui, :ask_question
55
- def_delegator :@ui, :pretty_print
56
- def_delegator :@ui, :output
57
- def_delegator :@ui, :format_list_for_display
58
- def_delegator :@ui, :format_for_display
59
- def_delegator :@ui, :format_cookbook_list_for_display
60
- def_delegator :@ui, :edit_data
61
- def_delegator :@ui, :edit_hash
62
- def_delegator :@ui, :edit_object
63
- def_delegator :@ui, :confirm
64
-
65
- attr_accessor :name_args
66
- attr_accessor :ui
67
-
68
- # knife acl subcommands are grouped in this category using this constant to verify.
69
- OPSCODE_HOSTED_CHEF_ACCESS_CONTROL = %w{acl group user}.freeze
70
-
71
- # knife opc subcommands are grouped in this category using this constant to verify.
72
- CHEF_ORGANIZATION_MANAGEMENT = %w{opc}.freeze
73
-
74
- # Configure mixlib-cli to always separate defaults from user-supplied CLI options
75
- def self.use_separate_defaults?
76
- true
77
- end
78
-
79
- def self.ui
80
- @ui ||= Chef::Knife::UI.new(STDOUT, STDERR, STDIN, {})
81
- end
82
-
83
- def self.msg(msg = "")
84
- ui.msg(msg)
85
- end
86
-
87
- def self.reset_config_loader!
88
- @@chef_config_dir = nil
89
- @config_loader = nil
90
- end
91
-
92
- def self.reset_subcommands!
93
- @@subcommands = {}
94
- @subcommands_by_category = nil
95
- end
96
-
97
- def self.inherited(subclass)
98
- super
99
- unless subclass.unnamed?
100
- subcommands[subclass.snake_case_name] = subclass
101
- subcommand_files[subclass.snake_case_name] +=
102
- if subclass.superclass.to_s == "Chef::ChefFS::Knife"
103
- # ChefFS-based commands have a superclass that defines an
104
- # inherited method which calls super. This means that the
105
- # top of the call stack is not the class definition for
106
- # our subcommand. Try the second entry in the call stack.
107
- [path_from_caller(caller[1])]
108
- else
109
- [path_from_caller(caller[0])]
110
- end
111
- end
112
- end
113
-
114
- # Explicitly set the category for the current command to +new_category+
115
- # The category is normally determined from the first word of the command
116
- # name, but some commands make more sense using two or more words
117
- # @param new_category [String] value to set the category to (see examples)
118
- #
119
- # @example Data bag commands would be in the 'data' category by default. To
120
- # put them in the 'data bag' category:
121
- # category('data bag')
122
- def self.category(new_category)
123
- @category = new_category
124
- end
125
-
126
- def self.subcommand_category
127
- @category || snake_case_name.split("_").first unless unnamed?
128
- end
129
-
130
- def self.snake_case_name
131
- convert_to_snake_case(name.split("::").last) unless unnamed?
132
- end
133
-
134
- def self.common_name
135
- snake_case_name.split("_").join(" ")
136
- end
137
-
138
- # Does this class have a name? (Classes created via Class.new don't)
139
- def self.unnamed?
140
- name.nil? || name.empty?
141
- end
142
-
143
- def self.subcommand_loader
144
- @subcommand_loader ||= Chef::Knife::SubcommandLoader.for_config(chef_config_dir)
145
- end
146
-
147
- def self.load_commands
148
- @commands_loaded ||= subcommand_loader.load_commands
149
- end
150
-
151
- def self.guess_category(args)
152
- subcommand_loader.guess_category(args)
153
- end
154
-
155
- def self.subcommand_class_from(args)
156
- if args.size == 1 && args[0].strip.casecmp("rehash") == 0
157
- # To prevent issues with the rehash file not pointing to the correct plugins,
158
- # we always use the glob loader when regenerating the rehash file
159
- @subcommand_loader = Chef::Knife::SubcommandLoader.gem_glob_loader(chef_config_dir)
160
- end
161
- subcommand_loader.command_class_from(args) || subcommand_not_found!(args)
162
- end
163
-
164
- def self.subcommands
165
- @@subcommands ||= {}
166
- end
167
-
168
- def self.subcommand_files
169
- @@subcommand_files ||= Hash.new([])
170
- end
171
-
172
- def self.subcommands_by_category
173
- unless @subcommands_by_category
174
- @subcommands_by_category = Hash.new { |hash, key| hash[key] = [] }
175
- subcommands.each do |snake_cased, klass|
176
- @subcommands_by_category[klass.subcommand_category] << snake_cased
177
- end
178
- end
179
- @subcommands_by_category
180
- end
181
-
182
- # Shared with subclasses
183
- @@chef_config_dir = nil
184
-
185
- def self.config_loader
186
- @config_loader ||= WorkstationConfigLoader.new(nil, Chef::Log)
187
- end
188
-
189
- def self.load_config(explicit_config_file, profile)
190
- config_loader.explicit_config_file = explicit_config_file
191
- config_loader.profile = profile
192
- config_loader.load
193
-
194
- ui.warn("No knife configuration file found. See https://docs.chef.io/config_rb/ for details.") if config_loader.no_config_found?
195
-
196
- config_loader
197
- rescue Exceptions::ConfigurationError => e
198
- ui.error(ui.color("CONFIGURATION ERROR:", :red) + e.message)
199
- exit 1
200
- end
201
-
202
- def self.chef_config_dir
203
- @@chef_config_dir ||= config_loader.chef_config_dir
204
- end
205
-
206
- # Run knife for the given +args+ (ARGV), adding +options+ to the list of
207
- # CLI options that the subcommand knows how to handle.
208
- #
209
- # @param args [Array] The arguments. Usually ARGV
210
- # @param options [Mixlib::CLI option parser hash] These +options+ are how
211
- # subcommands know about global knife CLI options
212
- #
213
- def self.run(args, options = {})
214
- # Fallback debug logging. Normally the logger isn't configured until we
215
- # read the config, but this means any logging that happens before the
216
- # config file is read may be lost. If the KNIFE_DEBUG variable is set, we
217
- # setup the logger for debug logging to stderr immediately to catch info
218
- # from early in the setup process.
219
- if ENV["KNIFE_DEBUG"]
220
- Chef::Log.init($stderr)
221
- Chef::Log.level(:debug)
222
- end
223
-
224
- subcommand_class = subcommand_class_from(args)
225
- subcommand_class.options = options.merge!(subcommand_class.options)
226
- subcommand_class.load_deps
227
- instance = subcommand_class.new(args)
228
- instance.configure_chef
229
- instance.run_with_pretty_exceptions
230
- end
231
-
232
- def self.dependency_loaders
233
- @dependency_loaders ||= []
234
- end
235
-
236
- def self.deps(&block)
237
- dependency_loaders << block
238
- end
239
-
240
- def self.load_deps
241
- dependency_loaders.each(&:call)
242
- end
243
-
244
- OFFICIAL_PLUGINS = %w{lpar openstack push rackspace vcenter}.freeze
245
-
246
- class << self
247
- def list_commands(preferred_category = nil)
248
- category_desc = preferred_category ? preferred_category + " " : ""
249
- msg "Available #{category_desc}subcommands: (for details, knife SUB-COMMAND --help)\n\n"
250
- subcommand_loader.list_commands(preferred_category).sort.each do |category, commands|
251
- next if /deprecated/i.match?(category)
252
-
253
- msg "** #{category.upcase} COMMANDS **"
254
- commands.sort.each do |command|
255
- subcommand_loader.load_command(command)
256
- msg subcommands[command].banner if subcommands[command]
257
- end
258
- msg
259
- end
260
- end
261
-
262
- private
263
-
264
- # @api private
265
- def path_from_caller(caller_line)
266
- caller_line.split(/:\d+/).first
267
- end
268
-
269
- # Error out and print usage. probably because the arguments given by the
270
- # user could not be resolved to a subcommand.
271
- # @api private
272
- def subcommand_not_found!(args)
273
- ui.fatal("Cannot find subcommand for: '#{args.join(" ")}'")
274
-
275
- # Mention rehash when the subcommands cache(plugin_manifest.json) is used
276
- if subcommand_loader.is_a?(Chef::Knife::SubcommandLoader::HashedCommandLoader)
277
- ui.info("If this is a recently installed plugin, please run 'knife rehash' to update the subcommands cache.")
278
- end
279
-
280
- if CHEF_ORGANIZATION_MANAGEMENT.include?(args[0])
281
- list_commands("CHEF ORGANIZATION MANAGEMENT")
282
- elsif category_commands = guess_category(args)
283
- list_commands(category_commands)
284
- elsif OFFICIAL_PLUGINS.include?(args[0]) # command was an uninstalled official chef knife plugin
285
- ui.info("Use `#{ChefUtils::Dist::Infra::EXEC} gem install knife-#{args[0]}` to install the plugin into Chef Workstation")
286
- else
287
- list_commands
288
- end
289
-
290
- exit 10
291
- end
292
-
293
- # @api private
294
- def reset_config_path!
295
- @@chef_config_dir = nil
296
- end
297
-
298
- end
299
-
300
- reset_config_path!
301
-
302
- # Create a new instance of the current class configured for the given
303
- # arguments and options
304
- def initialize(argv = [])
305
- super() # having to call super in initialize is the most annoying anti-pattern :(
306
- @ui = Chef::Knife::UI.new(STDOUT, STDERR, STDIN, config)
307
-
308
- command_name_words = self.class.snake_case_name.split("_")
309
-
310
- # Mixlib::CLI ignores the embedded name_args
311
- @name_args = parse_options(argv)
312
- @name_args.delete(command_name_words.join("-"))
313
- @name_args.reject! { |name_arg| command_name_words.delete(name_arg) }
314
-
315
- # knife node run_list add requires that we have extra logic to handle
316
- # the case that command name words could be joined by an underscore :/
317
- command_name_joined = command_name_words.join("_")
318
- @name_args.reject! { |name_arg| command_name_joined == name_arg }
319
-
320
- # Similar handling for hyphens.
321
- command_name_joined = command_name_words.join("-")
322
- @name_args.reject! { |name_arg| command_name_joined == name_arg }
323
-
324
- if config[:help]
325
- msg opt_parser
326
- exit 1
327
- end
328
-
329
- # Grab a copy before config merge occurs, so that we can later identify
330
- # where a given config value is sourced from.
331
- @original_config = config.dup
332
-
333
- # copy Mixlib::CLI over so that it can be configured in config.rb/knife.rb
334
- # config file
335
- Chef::Config[:verbosity] = config[:verbosity] if config[:verbosity]
336
- end
337
-
338
- def parse_options(args)
339
- super
340
- rescue OptionParser::InvalidOption => e
341
- puts "Error: " + e.to_s
342
- show_usage
343
- exit(1)
344
- end
345
-
346
- # This is all set and default mixlib-config values. We only need the default
347
- # values here (the set values are explicitly mixed in again later), but there is
348
- # no mixlib-config API to get a Hash back with only the default values.
349
- #
350
- # Assumption: since config_file_defaults is the lowest precedence it doesn't matter
351
- # that we include the set values here, but this is a hack and makes the name of the
352
- # method a lie. FIXME: make the name not a lie by adding an API to mixlib-config.
353
- #
354
- # @api private
355
- #
356
- def config_file_defaults
357
- Chef::Config[:knife].save(true) # this is like "dup" to a (real) Hash, and includes default values (and user set values)
358
- end
359
-
360
- # This is only the user-set mixlib-config values. We do not include the defaults
361
- # here so that the config defaults do not override the cli defaults.
362
- #
363
- # @api private
364
- #
365
- def config_file_settings
366
- Chef::Config[:knife].save(false) # this is like "dup" to a (real) Hash, and does not include default values (just user set values)
367
- end
368
-
369
- # config is merged in this order (inverse of precedence)
370
- # config_file_defaults - Chef::Config[:knife] defaults from chef-config (XXX: this also includes the settings, but they get overwritten)
371
- # default_config - mixlib-cli defaults (accessor from mixlib-cli)
372
- # config_file_settings - Chef::Config[:knife] user settings from the client.rb file
373
- # config - mixlib-cli settings (accessor from mixlib-cli)
374
- #
375
- def merge_configs
376
- # Update our original_config - if someone has created a knife command
377
- # instance directly, they are likely ot have set cmd.config values directly
378
- # as well, at which point our saved original config is no longer up to date.
379
- @original_config = config.dup
380
- # other code may have a handle to the config object, so use Hash#replace to deliberately
381
- # update-in-place.
382
- config.replace(config_file_defaults.merge(default_config).merge(config_file_settings).merge(config))
383
- end
384
-
385
- #
386
- # Determine the source of a given configuration key
387
- #
388
- # @argument key [Symbol] a configuration key
389
- # @return [Symbol,NilClass] return the source of the config key,
390
- # one of:
391
- # - :cli - this was explicitly provided on the CLI
392
- # - :config - this came from Chef::Config[:knife] explicitly being set
393
- # - :cli_default - came from a declared CLI `option`'s `default` value.
394
- # - :config_default - this came from Chef::Config[:knife]'s defaults
395
- # - nil - if the key could not be found in any source.
396
- # This can happen when it is invalid, or has been
397
- # set directly into #config without then calling #merge_config
398
- def config_source(key)
399
- return :cli if @original_config.include? key
400
- return :config if config_file_settings.key? key
401
- return :cli_default if default_config.include? key
402
- return :config_default if config_file_defaults.key? key # must come after :config check
403
-
404
- nil
405
- end
406
-
407
- # Catch-all method that does any massaging needed for various config
408
- # components, such as expanding file paths and converting verbosity level
409
- # into log level.
410
- def apply_computed_config
411
- Chef::Config[:color] = config[:color]
412
-
413
- case Chef::Config[:verbosity]
414
- when 0, nil
415
- Chef::Config[:log_level] = :warn
416
- when 1
417
- Chef::Config[:log_level] = :info
418
- when 2
419
- Chef::Config[:log_level] = :debug
420
- else
421
- Chef::Config[:log_level] = :trace
422
- end
423
-
424
- Chef::Config[:log_level] = :trace if ENV["KNIFE_DEBUG"]
425
-
426
- Chef::Config[:node_name] = config[:node_name] if config[:node_name]
427
- Chef::Config[:client_key] = config[:client_key] if config[:client_key]
428
- Chef::Config[:chef_server_url] = config[:chef_server_url] if config[:chef_server_url]
429
- Chef::Config[:environment] = config[:environment] if config[:environment]
430
-
431
- Chef::Config.local_mode = config[:local_mode] if config.key?(:local_mode)
432
-
433
- Chef::Config.listen = config[:listen] if config.key?(:listen)
434
-
435
- if Chef::Config.local_mode && !Chef::Config.key?(:cookbook_path) && !Chef::Config.key?(:chef_repo_path)
436
- Chef::Config.chef_repo_path = Chef::Config.find_chef_repo_path(Dir.pwd)
437
- end
438
- Chef::Config.chef_zero.host = config[:chef_zero_host] if config[:chef_zero_host]
439
- Chef::Config.chef_zero.port = config[:chef_zero_port] if config[:chef_zero_port]
440
-
441
- # Expand a relative path from the config directory. Config from command
442
- # line should already be expanded, and absolute paths will be unchanged.
443
- if Chef::Config[:client_key] && config[:config_file]
444
- Chef::Config[:client_key] = File.expand_path(Chef::Config[:client_key], File.dirname(config[:config_file]))
445
- end
446
-
447
- Mixlib::Log::Formatter.show_time = false
448
- Chef::Log.init(Chef::Config[:log_location])
449
- Chef::Log.level(Chef::Config[:log_level] || :error)
450
- end
451
-
452
- def configure_chef
453
- # knife needs to send logger output to STDERR by default
454
- Chef::Config[:log_location] = STDERR
455
- config_loader = self.class.load_config(config[:config_file], config[:profile])
456
- config[:config_file] = config_loader.config_location
457
-
458
- # For CLI options like `--config-option key=value`. These have to get
459
- # parsed and applied separately.
460
- extra_config_options = config.delete(:config_option)
461
-
462
- merge_configs
463
- apply_computed_config
464
-
465
- # This has to be after apply_computed_config so that Mixlib::Log is configured
466
- Chef::Log.info("Using configuration from #{config[:config_file]}") if config[:config_file]
467
-
468
- begin
469
- Chef::Config.apply_extra_config_options(extra_config_options)
470
- rescue ChefConfig::UnparsableConfigOption => e
471
- ui.error e.message
472
- show_usage
473
- exit(1)
474
- end
475
-
476
- Chef::Config.export_proxies
477
- end
478
-
479
- def show_usage
480
- stdout.puts("USAGE: " + opt_parser.to_s)
481
- end
482
-
483
- def run_with_pretty_exceptions(raise_exception = false)
484
- unless respond_to?(:run)
485
- ui.error "You need to add a #run method to your knife command before you can use it"
486
- end
487
- ENV["PATH"] = default_paths if Chef::Config[:enforce_default_paths] || Chef::Config[:enforce_path_sanity]
488
- maybe_setup_fips
489
- Chef::LocalMode.with_server_connectivity do
490
- run
491
- end
492
- rescue Exception => e
493
- raise if raise_exception || ( Chef::Config[:verbosity] && Chef::Config[:verbosity] >= 2 )
494
-
495
- humanize_exception(e)
496
- exit 100
497
- end
498
-
499
- def humanize_exception(e)
500
- case e
501
- when SystemExit
502
- raise # make sure exit passes through.
503
- when Net::HTTPClientException, Net::HTTPFatalError
504
- humanize_http_exception(e)
505
- when OpenSSL::SSL::SSLError
506
- ui.error "Could not establish a secure connection to the server."
507
- ui.info "Use `knife ssl check` to troubleshoot your SSL configuration."
508
- ui.info "If your server uses a self-signed certificate, you can use"
509
- ui.info "`knife ssl fetch` to make knife trust the server's certificates."
510
- ui.info ""
511
- ui.info "Original Exception: #{e.class.name}: #{e.message}"
512
- when Errno::ECONNREFUSED, Timeout::Error, Errno::ETIMEDOUT, SocketError
513
- ui.error "Network Error: #{e.message}"
514
- ui.info "Check your knife configuration and network settings"
515
- when NameError, NoMethodError
516
- ui.error "knife encountered an unexpected error"
517
- ui.info "This may be a bug in the '#{self.class.common_name}' knife command or plugin"
518
- ui.info "Please collect the output of this command with the `-VVV` option before filing a bug report."
519
- ui.info "Exception: #{e.class.name}: #{e.message}"
520
- when Chef::Exceptions::PrivateKeyMissing
521
- ui.error "Your private key could not be loaded from #{api_key}"
522
- ui.info "Check your configuration file and ensure that your private key is readable"
523
- when Chef::Exceptions::InvalidRedirect
524
- ui.error "Invalid Redirect: #{e.message}"
525
- ui.info "Change your server location in config.rb/knife.rb to the server's FQDN to avoid unwanted redirections."
526
- else
527
- ui.error "#{e.class.name}: #{e.message}"
528
- end
529
- end
530
-
531
- def humanize_http_exception(e)
532
- response = e.response
533
- case response
534
- when Net::HTTPUnauthorized
535
- ui.error "Failed to authenticate to #{server_url} as #{username} with key #{api_key}"
536
- ui.info "Response: #{format_rest_error(response)}"
537
- when Net::HTTPForbidden
538
- ui.error "You authenticated successfully to #{server_url} as #{username} but you are not authorized for this action."
539
- proxy_env_vars = ENV.to_hash.keys.map(&:downcase) & %w{http_proxy https_proxy ftp_proxy socks_proxy no_proxy}
540
- unless proxy_env_vars.empty?
541
- ui.error "There are proxy servers configured, your server url may need to be added to NO_PROXY."
542
- end
543
- ui.info "Response: #{format_rest_error(response)}"
544
- when Net::HTTPBadRequest
545
- ui.error "The data in your request was invalid"
546
- ui.info "Response: #{format_rest_error(response)}"
547
- when Net::HTTPNotFound
548
- ui.error "The object you are looking for could not be found"
549
- ui.info "Response: #{format_rest_error(response)}"
550
- when Net::HTTPInternalServerError
551
- ui.error "internal server error"
552
- ui.info "Response: #{format_rest_error(response)}"
553
- when Net::HTTPBadGateway
554
- ui.error "bad gateway"
555
- ui.info "Response: #{format_rest_error(response)}"
556
- when Net::HTTPServiceUnavailable
557
- ui.error "Service temporarily unavailable"
558
- ui.info "Response: #{format_rest_error(response)}"
559
- when Net::HTTPNotAcceptable
560
- version_header = Chef::JSONCompat.from_json(response["x-ops-server-api-version"])
561
- client_api_version = version_header["request_version"]
562
- min_server_version = version_header["min_version"]
563
- max_server_version = version_header["max_version"]
564
- ui.error "The API version that Knife is using is not supported by the server you sent this request to."
565
- ui.info "The request that Knife sent was using API version #{client_api_version}."
566
- ui.info "The server you sent the request to supports a min API version of #{min_server_version} and a max API version of #{max_server_version}."
567
- ui.info "Please either update your #{ChefUtils::Dist::Infra::PRODUCT} or the server to be a compatible set."
568
- else
569
- ui.error response.message
570
- ui.info "Response: #{format_rest_error(response)}"
571
- end
572
- end
573
-
574
- def username
575
- Chef::Config[:node_name]
576
- end
577
-
578
- def api_key
579
- Chef::Config[:client_key]
580
- end
581
-
582
- # Parses JSON from the error response sent by Chef Server and returns the
583
- # error message
584
- #--
585
- # TODO: this code belongs in Chef::REST
586
- def format_rest_error(response)
587
- Array(Chef::JSONCompat.from_json(response.body)["error"]).join("; ")
588
- rescue Exception
589
- response.body
590
- end
591
-
592
- # FIXME: yard with @yield
593
- def create_object(object, pretty_name = nil, object_class: nil)
594
- output = if object_class
595
- edit_data(object, object_class: object_class)
596
- else
597
- edit_hash(object)
598
- end
599
-
600
- if Kernel.block_given?
601
- output = yield(output)
602
- else
603
- output.save
604
- end
605
-
606
- pretty_name ||= output
607
-
608
- msg("Created #{pretty_name}")
609
-
610
- output(output) if config[:print_after]
611
- end
612
-
613
- # FIXME: yard with @yield
614
- def delete_object(klass, name, delete_name = nil)
615
- confirm("Do you really want to delete #{name}")
616
-
617
- if Kernel.block_given?
618
- object = yield
619
- else
620
- object = klass.load(name)
621
- object.destroy
622
- end
623
-
624
- output(format_for_display(object)) if config[:print_after]
625
-
626
- obj_name = delete_name ? "#{delete_name}[#{name}]" : object
627
- msg("Deleted #{obj_name}")
628
- end
629
-
630
- # helper method for testing if a field exists
631
- # and returning the usage and proper error if not
632
- def test_mandatory_field(field, fieldname)
633
- if field.nil?
634
- show_usage
635
- ui.fatal("You must specify a #{fieldname}")
636
- exit 1
637
- end
638
- end
639
-
640
- def rest
641
- @rest ||= begin
642
- require_relative "server_api"
643
- Chef::ServerAPI.new(Chef::Config[:chef_server_url])
644
- end
645
- end
646
-
647
- def noauth_rest
648
- @rest ||= begin
649
- require_relative "http/simple_json"
650
- Chef::HTTP::SimpleJSON.new(Chef::Config[:chef_server_url])
651
- end
652
- end
653
-
654
- def server_url
655
- Chef::Config[:chef_server_url]
656
- end
657
-
658
- def maybe_setup_fips
659
- unless config[:fips].nil?
660
- Chef::Config[:fips] = config[:fips]
661
- end
662
- Chef::Config.init_openssl
663
- end
664
- end
665
- end