chef 16.15.22 → 17.0.242

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 (637) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -13
  3. data/README.md +1 -1
  4. data/Rakefile +2 -2
  5. data/chef-universal-mingw32.gemspec +1 -1
  6. data/chef.gemspec +6 -8
  7. data/lib/chef/application/base.rb +1 -1
  8. data/lib/chef/applications.rb +0 -1
  9. data/lib/chef/chef_fs/command_line.rb +5 -2
  10. data/lib/chef/chef_fs/file_system.rb +9 -10
  11. data/lib/chef/client.rb +2 -2
  12. data/lib/chef/compliance/default_attributes.rb +4 -3
  13. data/lib/chef/compliance/fetcher/automate.rb +0 -7
  14. data/lib/chef/compliance/reporter/automate.rb +17 -7
  15. data/lib/chef/compliance/reporter/chef_server_automate.rb +11 -6
  16. data/lib/chef/compliance/reporter/cli.rb +77 -0
  17. data/lib/chef/compliance/reporter/compliance_enforcer.rb +4 -0
  18. data/lib/chef/compliance/reporter/json_file.rb +8 -1
  19. data/lib/chef/compliance/runner.rb +65 -27
  20. data/lib/chef/cookbook/gem_installer.rb +1 -5
  21. data/lib/chef/cookbook/synchronizer.rb +3 -5
  22. data/lib/chef/cookbook_loader.rb +2 -4
  23. data/lib/chef/cookbook_uploader.rb +0 -1
  24. data/lib/chef/cookbook_version.rb +4 -26
  25. data/lib/chef/data_bag_item.rb +11 -2
  26. data/lib/chef/data_collector/run_end_message.rb +1 -1
  27. data/lib/chef/delayed_evaluator.rb +4 -0
  28. data/lib/chef/deprecated.rb +6 -12
  29. data/lib/chef/dsl/chef_vault.rb +6 -6
  30. data/lib/chef/dsl/reboot_pending.rb +1 -2
  31. data/lib/chef/exceptions.rb +0 -3
  32. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +20 -22
  33. data/lib/chef/formatters/error_mapper.rb +2 -2
  34. data/lib/chef/group.rb +75 -0
  35. data/lib/chef/http.rb +5 -5
  36. data/lib/chef/mixin/get_source_from_package.rb +1 -1
  37. data/lib/chef/node/attribute.rb +6 -4
  38. data/lib/chef/node/immutable_collections.rb +13 -0
  39. data/lib/chef/node/mixin/deep_merge_cache.rb +11 -7
  40. data/lib/chef/node.rb +19 -20
  41. data/lib/chef/org.rb +3 -2
  42. data/lib/chef/policy_builder/policyfile.rb +0 -5
  43. data/lib/chef/property.rb +18 -0
  44. data/lib/chef/provider/cron.rb +1 -1
  45. data/lib/chef/provider/execute.rb +2 -1
  46. data/lib/chef/provider/file.rb +1 -1
  47. data/lib/chef/provider/git.rb +5 -7
  48. data/lib/chef/provider/group/dscl.rb +1 -1
  49. data/lib/chef/provider/group/groupadd.rb +3 -3
  50. data/lib/chef/provider/group/groupmod.rb +3 -3
  51. data/lib/chef/provider/group/pw.rb +3 -3
  52. data/lib/chef/provider/ifconfig.rb +2 -2
  53. data/lib/chef/provider/link.rb +2 -2
  54. data/lib/chef/provider/mount/aix.rb +3 -3
  55. data/lib/chef/provider/mount/mount.rb +5 -5
  56. data/lib/chef/provider/mount/windows.rb +1 -1
  57. data/lib/chef/provider/mount.rb +5 -5
  58. data/lib/chef/provider/package/apt.rb +27 -1
  59. data/lib/chef/provider/package/deb.rb +3 -3
  60. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  61. data/lib/chef/provider/package/portage.rb +2 -2
  62. data/lib/chef/provider/package/powershell.rb +0 -5
  63. data/lib/chef/provider/package/rubygems.rb +9 -15
  64. data/lib/chef/provider/package/windows.rb +2 -4
  65. data/lib/chef/provider/package/yum/yum_helper.py +1 -1
  66. data/lib/chef/provider/package.rb +17 -21
  67. data/lib/chef/provider/route.rb +2 -2
  68. data/lib/chef/provider/service/aixinit.rb +1 -1
  69. data/lib/chef/provider/service/debian.rb +1 -1
  70. data/lib/chef/provider/service/freebsd.rb +15 -21
  71. data/lib/chef/provider/service/macosx.rb +4 -4
  72. data/lib/chef/provider/service/systemd.rb +43 -14
  73. data/lib/chef/provider/service/upstart.rb +2 -13
  74. data/lib/chef/provider/service/windows.rb +12 -12
  75. data/lib/chef/provider/service.rb +6 -6
  76. data/lib/chef/provider/subversion.rb +10 -12
  77. data/lib/chef/provider/systemd_unit.rb +36 -10
  78. data/lib/chef/provider/template/content.rb +3 -7
  79. data/lib/chef/provider/user/dscl.rb +1 -1
  80. data/lib/chef/provider/user/mac.rb +17 -20
  81. data/lib/chef/provider/user/pw.rb +1 -1
  82. data/lib/chef/provider/user/windows.rb +1 -1
  83. data/lib/chef/provider/user.rb +2 -2
  84. data/lib/chef/provider/zypper_repository.rb +2 -2
  85. data/lib/chef/provider.rb +1 -1
  86. data/lib/chef/providers.rb +0 -1
  87. data/lib/chef/resource/alternatives.rb +6 -6
  88. data/lib/chef/resource/apt_package.rb +1 -1
  89. data/lib/chef/resource/apt_preference.rb +2 -2
  90. data/lib/chef/resource/apt_repository.rb +6 -6
  91. data/lib/chef/resource/apt_update.rb +3 -2
  92. data/lib/chef/resource/archive_file.rb +2 -3
  93. data/lib/chef/resource/breakpoint.rb +1 -1
  94. data/lib/chef/resource/build_essential.rb +2 -6
  95. data/lib/chef/resource/chef_client_config.rb +2 -2
  96. data/lib/chef/resource/chef_client_cron.rb +4 -4
  97. data/lib/chef/resource/chef_client_launchd.rb +3 -3
  98. data/lib/chef/resource/chef_client_scheduled_task.rb +1 -1
  99. data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
  100. data/lib/chef/resource/chef_handler.rb +3 -7
  101. data/lib/chef/resource/chef_sleep.rb +1 -1
  102. data/lib/chef/resource/chef_vault_secret.rb +3 -8
  103. data/lib/chef/resource/chocolatey_config.rb +2 -6
  104. data/lib/chef/resource/chocolatey_feature.rb +2 -6
  105. data/lib/chef/resource/chocolatey_source.rb +4 -10
  106. data/lib/chef/resource/cron/_cron_shared.rb +2 -2
  107. data/lib/chef/resource/cron_access.rb +2 -4
  108. data/lib/chef/resource/dmg_package.rb +6 -10
  109. data/lib/chef/resource/dpkg_package.rb +1 -1
  110. data/lib/chef/resource/execute.rb +6 -1
  111. data/lib/chef/resource/file.rb +1 -1
  112. data/lib/chef/resource/group.rb +2 -2
  113. data/lib/chef/resource/homebrew_cask.rb +5 -15
  114. data/lib/chef/resource/homebrew_tap.rb +2 -6
  115. data/lib/chef/resource/hostname.rb +21 -17
  116. data/lib/chef/resource/http_request.rb +1 -1
  117. data/lib/chef/resource/kernel_module.rb +6 -17
  118. data/lib/chef/resource/locale.rb +2 -3
  119. data/lib/chef/resource/lwrp_base.rb +4 -0
  120. data/lib/chef/resource/macos_userdefaults.rb +10 -14
  121. data/lib/chef/resource/mdadm.rb +53 -7
  122. data/lib/chef/resource/mount.rb +3 -2
  123. data/lib/chef/resource/openssl_ec_private_key.rb +2 -2
  124. data/lib/chef/resource/openssl_rsa_private_key.rb +1 -1
  125. data/lib/chef/resource/openssl_x509_certificate.rb +2 -2
  126. data/lib/chef/resource/plist.rb +7 -7
  127. data/lib/chef/resource/powershell_script.rb +1 -1
  128. data/lib/chef/resource/remote_file.rb +1 -1
  129. data/lib/chef/resource/rhsm_errata.rb +16 -1
  130. data/lib/chef/resource/rhsm_errata_level.rb +10 -1
  131. data/lib/chef/resource/rhsm_register.rb +12 -6
  132. data/lib/chef/resource/rhsm_repo.rb +2 -6
  133. data/lib/chef/resource/rhsm_subscription.rb +7 -11
  134. data/lib/chef/resource/scm/git.rb +1 -1
  135. data/lib/chef/resource/sudo.rb +6 -6
  136. data/lib/chef/resource/support/client.erb +0 -6
  137. data/lib/chef/resource/sysctl.rb +2 -6
  138. data/lib/chef/resource/systemd_unit.rb +3 -3
  139. data/lib/chef/resource/template.rb +1 -1
  140. data/lib/chef/resource/timezone.rb +1 -3
  141. data/lib/chef/resource/user/mac_user.rb +1 -1
  142. data/lib/chef/resource/user_ulimit.rb +2 -3
  143. data/lib/chef/resource/windows_ad_join.rb +2 -6
  144. data/lib/chef/resource/windows_audit_policy.rb +1 -1
  145. data/lib/chef/resource/windows_auto_run.rb +2 -5
  146. data/lib/chef/resource/windows_certificate.rb +207 -73
  147. data/lib/chef/resource/windows_dfs_folder.rb +2 -6
  148. data/lib/chef/resource/windows_dfs_namespace.rb +2 -6
  149. data/lib/chef/resource/windows_dfs_server.rb +1 -3
  150. data/lib/chef/resource/windows_dns_record.rb +2 -6
  151. data/lib/chef/resource/windows_dns_zone.rb +2 -6
  152. data/lib/chef/resource/windows_env.rb +5 -4
  153. data/lib/chef/resource/windows_feature.rb +3 -9
  154. data/lib/chef/resource/windows_feature_dism.rb +2 -6
  155. data/lib/chef/resource/windows_feature_powershell.rb +3 -3
  156. data/lib/chef/resource/windows_firewall_profile.rb +4 -4
  157. data/lib/chef/resource/windows_firewall_rule.rb +2 -5
  158. data/lib/chef/resource/windows_font.rb +2 -4
  159. data/lib/chef/resource/windows_pagefile.rb +2 -6
  160. data/lib/chef/resource/windows_path.rb +2 -2
  161. data/lib/chef/resource/windows_printer.rb +4 -4
  162. data/lib/chef/resource/windows_printer_port.rb +6 -6
  163. data/lib/chef/resource/windows_security_policy.rb +9 -12
  164. data/lib/chef/resource/windows_share.rb +14 -21
  165. data/lib/chef/resource/windows_shortcut.rb +4 -6
  166. data/lib/chef/resource/windows_task.rb +17 -5
  167. data/lib/chef/resource/windows_uac.rb +2 -4
  168. data/lib/chef/resource/windows_user_privilege.rb +5 -5
  169. data/lib/chef/resource/windows_workgroup.rb +1 -2
  170. data/lib/chef/resources.rb +0 -1
  171. data/lib/chef/user.rb +0 -1
  172. data/lib/chef/user_v1.rb +3 -4
  173. data/lib/chef/util/dsc/configuration_generator.rb +1 -0
  174. data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
  175. data/lib/chef/version.rb +1 -1
  176. data/lib/chef/win32/api.rb +2 -9
  177. data/lib/chef/win32/registry.rb +4 -2
  178. data/spec/data/cookbooks/openldap/libraries/openldap.rb +1 -1
  179. data/spec/data/lwrp/resources/bar.rb +2 -0
  180. data/spec/data/lwrp/resources/buck_passer.rb +1 -0
  181. data/spec/data/lwrp/resources/buck_passer_2.rb +1 -0
  182. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +1 -0
  183. data/spec/data/lwrp/resources/foo.rb +2 -0
  184. data/spec/data/lwrp/resources/inline_compiler.rb +1 -0
  185. data/spec/data/lwrp/resources/monkey_name_printer.rb +1 -0
  186. data/spec/data/lwrp/resources/paint_drying_watcher.rb +1 -0
  187. data/spec/data/lwrp/resources/thumb_twiddler.rb +1 -0
  188. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +2 -0
  189. data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -0
  190. data/spec/data/lwrp_override/resources/foo.rb +1 -0
  191. data/spec/data/rubygems.org/nonexistent_gem-info +1 -0
  192. data/spec/data/rubygems.org/sexp_processor-info +49 -0
  193. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  194. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  195. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  196. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  197. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  198. data/spec/data/run_context/cookbooks/test/resources/resource.rb +2 -0
  199. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +2 -0
  200. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  201. data/spec/functional/dsl/registry_helper_spec.rb +1 -1
  202. data/spec/functional/resource/aixinit_service_spec.rb +7 -7
  203. data/spec/functional/resource/apt_package_spec.rb +1 -1
  204. data/spec/functional/resource/chocolatey_package_spec.rb +13 -0
  205. data/spec/functional/resource/dnf_package_spec.rb +4 -1
  206. data/spec/functional/resource/group_spec.rb +1 -5
  207. data/spec/functional/resource/link_spec.rb +0 -8
  208. data/spec/functional/resource/registry_spec.rb +8 -8
  209. data/spec/functional/resource/user/mac_user_spec.rb +2 -2
  210. data/spec/functional/resource/windows_certificate_spec.rb +92 -35
  211. data/spec/functional/version_spec.rb +1 -1
  212. data/spec/functional/win32/registry_spec.rb +1 -1
  213. data/spec/integration/client/client_spec.rb +5 -2
  214. data/spec/integration/client/exit_code_spec.rb +1 -1
  215. data/spec/integration/client/ipv6_spec.rb +1 -1
  216. data/spec/integration/compliance/compliance_spec.rb +1 -1
  217. data/spec/integration/ohai/ohai_spec.rb +7 -6
  218. data/spec/integration/recipes/accumulator_spec.rb +13 -1
  219. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -1
  220. data/spec/integration/recipes/lwrp_spec.rb +3 -1
  221. data/spec/integration/recipes/notifies_spec.rb +15 -1
  222. data/spec/integration/recipes/notifying_block_spec.rb +2 -1
  223. data/spec/integration/recipes/recipe_dsl_spec.rb +9 -9
  224. data/spec/integration/recipes/unified_mode_spec.rb +1 -1
  225. data/spec/integration/recipes/use_partial_spec.rb +4 -1
  226. data/spec/spec_helper.rb +10 -13
  227. data/spec/support/chef_helpers.rb +0 -16
  228. data/spec/support/lib/chef/resource/with_state.rb +0 -1
  229. data/spec/support/lib/chef/resource/zen_follower.rb +0 -1
  230. data/spec/support/lib/chef/resource/zen_master.rb +0 -1
  231. data/spec/support/matchers/leak.rb +7 -9
  232. data/spec/support/platform_helpers.rb +1 -8
  233. data/spec/support/shared/integration/integration_helper.rb +0 -1
  234. data/spec/support/shared/unit/script_resource.rb +2 -2
  235. data/spec/unit/application/solo_spec.rb +2 -2
  236. data/spec/unit/chef_fs/diff_spec.rb +1 -1
  237. data/spec/unit/chef_fs/file_system_spec.rb +1 -1
  238. data/spec/unit/compliance/fetcher/automate_spec.rb +0 -16
  239. data/spec/unit/compliance/reporter/automate_spec.rb +26 -2
  240. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +20 -0
  241. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +1 -0
  242. data/spec/unit/compliance/runner_spec.rb +30 -4
  243. data/spec/unit/cookbook_version_spec.rb +0 -52
  244. data/spec/unit/data_bag_item_spec.rb +1 -6
  245. data/spec/unit/data_collector_spec.rb +1 -47
  246. data/spec/unit/dsl/reboot_pending_spec.rb +2 -2
  247. data/spec/unit/dsl/registry_helper_spec.rb +1 -1
  248. data/spec/unit/lwrp_spec.rb +1 -1
  249. data/spec/unit/mixin/params_validate_spec.rb +4 -3
  250. data/spec/unit/node/attribute_spec.rb +1 -1
  251. data/spec/unit/node_spec.rb +78 -0
  252. data/spec/unit/org_group_spec.rb +45 -0
  253. data/spec/unit/policy_builder/policyfile_spec.rb +1 -11
  254. data/spec/unit/property_spec.rb +23 -22
  255. data/spec/unit/provider/cron_spec.rb +1 -1
  256. data/spec/unit/provider/group/gpasswd_spec.rb +2 -2
  257. data/spec/unit/provider/group/groupmod_spec.rb +2 -2
  258. data/spec/unit/provider/group/pw_spec.rb +2 -2
  259. data/spec/unit/provider/group_spec.rb +1 -1
  260. data/spec/unit/provider/package/apt_spec.rb +84 -18
  261. data/spec/unit/provider/package/deb_spec.rb +3 -3
  262. data/spec/unit/provider/package/powershell_spec.rb +12 -74
  263. data/spec/unit/provider/package/rubygems_spec.rb +18 -30
  264. data/spec/unit/provider/service/arch_service_spec.rb +1 -0
  265. data/spec/unit/provider/service/debian_service_spec.rb +1 -0
  266. data/spec/unit/provider/service/macosx_spec.rb +2 -2
  267. data/spec/unit/provider/service/systemd_service_spec.rb +138 -23
  268. data/spec/unit/provider/service/upstart_service_spec.rb +0 -29
  269. data/spec/unit/provider/service/windows_spec.rb +2 -2
  270. data/spec/unit/provider/subversion_spec.rb +2 -2
  271. data/spec/unit/provider/systemd_unit_spec.rb +79 -60
  272. data/spec/unit/provider/zypper_repository_spec.rb +2 -2
  273. data/spec/unit/provider_spec.rb +0 -8
  274. data/spec/unit/resource/homebrew_cask_spec.rb +11 -29
  275. data/spec/unit/resource/mount_spec.rb +0 -10
  276. data/spec/unit/resource/powershell_script_spec.rb +2 -2
  277. data/spec/unit/resource/rhsm_subscription_spec.rb +3 -50
  278. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  279. data/spec/unit/resource/user_ulimit_spec.rb +1 -14
  280. data/spec/unit/resource/windows_task_spec.rb +1 -1
  281. data/spec/unit/user_spec.rb +1 -1
  282. data/spec/unit/user_v1_spec.rb +6 -4
  283. data/tasks/rspec.rb +15 -7
  284. metadata +17 -380
  285. data/bin/knife +0 -24
  286. data/lib/chef/application/knife.rb +0 -234
  287. data/lib/chef/application/windows_service.rb +0 -338
  288. data/lib/chef/application/windows_service_manager.rb +0 -205
  289. data/lib/chef/chef_fs/knife.rb +0 -160
  290. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +0 -35
  291. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +0 -278
  292. data/lib/chef/chef_fs/parallelizer.rb +0 -102
  293. data/lib/chef/cookbook_site_streaming_uploader.rb +0 -244
  294. data/lib/chef/knife/acl_add.rb +0 -57
  295. data/lib/chef/knife/acl_base.rb +0 -183
  296. data/lib/chef/knife/acl_bulk_add.rb +0 -78
  297. data/lib/chef/knife/acl_bulk_remove.rb +0 -83
  298. data/lib/chef/knife/acl_remove.rb +0 -62
  299. data/lib/chef/knife/acl_show.rb +0 -56
  300. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +0 -162
  301. data/lib/chef/knife/bootstrap/client_builder.rb +0 -212
  302. data/lib/chef/knife/bootstrap/templates/README.md +0 -11
  303. data/lib/chef/knife/bootstrap/templates/chef-full.erb +0 -242
  304. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +0 -278
  305. data/lib/chef/knife/bootstrap/train_connector.rb +0 -336
  306. data/lib/chef/knife/bootstrap.rb +0 -1192
  307. data/lib/chef/knife/client_bulk_delete.rb +0 -104
  308. data/lib/chef/knife/client_create.rb +0 -101
  309. data/lib/chef/knife/client_delete.rb +0 -62
  310. data/lib/chef/knife/client_edit.rb +0 -52
  311. data/lib/chef/knife/client_key_create.rb +0 -73
  312. data/lib/chef/knife/client_key_delete.rb +0 -80
  313. data/lib/chef/knife/client_key_edit.rb +0 -83
  314. data/lib/chef/knife/client_key_list.rb +0 -73
  315. data/lib/chef/knife/client_key_show.rb +0 -80
  316. data/lib/chef/knife/client_list.rb +0 -41
  317. data/lib/chef/knife/client_reregister.rb +0 -58
  318. data/lib/chef/knife/client_show.rb +0 -48
  319. data/lib/chef/knife/config_get.rb +0 -39
  320. data/lib/chef/knife/config_get_profile.rb +0 -37
  321. data/lib/chef/knife/config_list.rb +0 -139
  322. data/lib/chef/knife/config_list_profiles.rb +0 -37
  323. data/lib/chef/knife/config_show.rb +0 -127
  324. data/lib/chef/knife/config_use.rb +0 -61
  325. data/lib/chef/knife/config_use_profile.rb +0 -47
  326. data/lib/chef/knife/configure.rb +0 -150
  327. data/lib/chef/knife/configure_client.rb +0 -48
  328. data/lib/chef/knife/cookbook_bulk_delete.rb +0 -71
  329. data/lib/chef/knife/cookbook_delete.rb +0 -151
  330. data/lib/chef/knife/cookbook_download.rb +0 -142
  331. data/lib/chef/knife/cookbook_list.rb +0 -47
  332. data/lib/chef/knife/cookbook_metadata.rb +0 -106
  333. data/lib/chef/knife/cookbook_metadata_from_file.rb +0 -49
  334. data/lib/chef/knife/cookbook_show.rb +0 -98
  335. data/lib/chef/knife/cookbook_upload.rb +0 -292
  336. data/lib/chef/knife/core/bootstrap_context.rb +0 -264
  337. data/lib/chef/knife/core/cookbook_scm_repo.rb +0 -159
  338. data/lib/chef/knife/core/formatting_options.rb +0 -49
  339. data/lib/chef/knife/core/gem_glob_loader.rb +0 -138
  340. data/lib/chef/knife/core/generic_presenter.rb +0 -232
  341. data/lib/chef/knife/core/hashed_command_loader.rb +0 -100
  342. data/lib/chef/knife/core/node_editor.rb +0 -130
  343. data/lib/chef/knife/core/node_presenter.rb +0 -133
  344. data/lib/chef/knife/core/object_loader.rb +0 -115
  345. data/lib/chef/knife/core/status_presenter.rb +0 -147
  346. data/lib/chef/knife/core/subcommand_loader.rb +0 -203
  347. data/lib/chef/knife/core/text_formatter.rb +0 -85
  348. data/lib/chef/knife/core/ui.rb +0 -338
  349. data/lib/chef/knife/core/windows_bootstrap_context.rb +0 -405
  350. data/lib/chef/knife/data_bag_create.rb +0 -81
  351. data/lib/chef/knife/data_bag_delete.rb +0 -49
  352. data/lib/chef/knife/data_bag_edit.rb +0 -74
  353. data/lib/chef/knife/data_bag_from_file.rb +0 -113
  354. data/lib/chef/knife/data_bag_list.rb +0 -42
  355. data/lib/chef/knife/data_bag_secret_options.rb +0 -122
  356. data/lib/chef/knife/data_bag_show.rb +0 -69
  357. data/lib/chef/knife/delete.rb +0 -125
  358. data/lib/chef/knife/deps.rb +0 -156
  359. data/lib/chef/knife/diff.rb +0 -83
  360. data/lib/chef/knife/download.rb +0 -84
  361. data/lib/chef/knife/edit.rb +0 -88
  362. data/lib/chef/knife/environment_compare.rb +0 -128
  363. data/lib/chef/knife/environment_create.rb +0 -52
  364. data/lib/chef/knife/environment_delete.rb +0 -44
  365. data/lib/chef/knife/environment_edit.rb +0 -44
  366. data/lib/chef/knife/environment_from_file.rb +0 -84
  367. data/lib/chef/knife/environment_list.rb +0 -41
  368. data/lib/chef/knife/environment_show.rb +0 -47
  369. data/lib/chef/knife/exec.rb +0 -99
  370. data/lib/chef/knife/group_add.rb +0 -55
  371. data/lib/chef/knife/group_create.rb +0 -49
  372. data/lib/chef/knife/group_destroy.rb +0 -53
  373. data/lib/chef/knife/group_list.rb +0 -43
  374. data/lib/chef/knife/group_remove.rb +0 -56
  375. data/lib/chef/knife/group_show.rb +0 -49
  376. data/lib/chef/knife/key_create.rb +0 -112
  377. data/lib/chef/knife/key_create_base.rb +0 -50
  378. data/lib/chef/knife/key_delete.rb +0 -55
  379. data/lib/chef/knife/key_edit.rb +0 -118
  380. data/lib/chef/knife/key_edit_base.rb +0 -55
  381. data/lib/chef/knife/key_list.rb +0 -90
  382. data/lib/chef/knife/key_list_base.rb +0 -45
  383. data/lib/chef/knife/key_show.rb +0 -53
  384. data/lib/chef/knife/list.rb +0 -177
  385. data/lib/chef/knife/node_bulk_delete.rb +0 -75
  386. data/lib/chef/knife/node_create.rb +0 -47
  387. data/lib/chef/knife/node_delete.rb +0 -46
  388. data/lib/chef/knife/node_edit.rb +0 -70
  389. data/lib/chef/knife/node_environment_set.rb +0 -53
  390. data/lib/chef/knife/node_from_file.rb +0 -51
  391. data/lib/chef/knife/node_list.rb +0 -44
  392. data/lib/chef/knife/node_policy_set.rb +0 -79
  393. data/lib/chef/knife/node_run_list_add.rb +0 -104
  394. data/lib/chef/knife/node_run_list_remove.rb +0 -67
  395. data/lib/chef/knife/node_run_list_set.rb +0 -66
  396. data/lib/chef/knife/node_show.rb +0 -63
  397. data/lib/chef/knife/null.rb +0 -12
  398. data/lib/chef/knife/raw.rb +0 -123
  399. data/lib/chef/knife/recipe_list.rb +0 -32
  400. data/lib/chef/knife/rehash.rb +0 -50
  401. data/lib/chef/knife/role_bulk_delete.rb +0 -66
  402. data/lib/chef/knife/role_create.rb +0 -53
  403. data/lib/chef/knife/role_delete.rb +0 -46
  404. data/lib/chef/knife/role_edit.rb +0 -45
  405. data/lib/chef/knife/role_env_run_list_add.rb +0 -87
  406. data/lib/chef/knife/role_env_run_list_clear.rb +0 -55
  407. data/lib/chef/knife/role_env_run_list_remove.rb +0 -57
  408. data/lib/chef/knife/role_env_run_list_replace.rb +0 -60
  409. data/lib/chef/knife/role_env_run_list_set.rb +0 -70
  410. data/lib/chef/knife/role_from_file.rb +0 -51
  411. data/lib/chef/knife/role_list.rb +0 -42
  412. data/lib/chef/knife/role_run_list_add.rb +0 -87
  413. data/lib/chef/knife/role_run_list_clear.rb +0 -55
  414. data/lib/chef/knife/role_run_list_remove.rb +0 -56
  415. data/lib/chef/knife/role_run_list_replace.rb +0 -60
  416. data/lib/chef/knife/role_run_list_set.rb +0 -69
  417. data/lib/chef/knife/role_show.rb +0 -48
  418. data/lib/chef/knife/search.rb +0 -194
  419. data/lib/chef/knife/serve.rb +0 -65
  420. data/lib/chef/knife/show.rb +0 -72
  421. data/lib/chef/knife/ssh.rb +0 -645
  422. data/lib/chef/knife/ssl_check.rb +0 -284
  423. data/lib/chef/knife/ssl_fetch.rb +0 -161
  424. data/lib/chef/knife/status.rb +0 -95
  425. data/lib/chef/knife/supermarket_download.rb +0 -121
  426. data/lib/chef/knife/supermarket_install.rb +0 -192
  427. data/lib/chef/knife/supermarket_list.rb +0 -76
  428. data/lib/chef/knife/supermarket_search.rb +0 -53
  429. data/lib/chef/knife/supermarket_share.rb +0 -166
  430. data/lib/chef/knife/supermarket_show.rb +0 -66
  431. data/lib/chef/knife/supermarket_unshare.rb +0 -61
  432. data/lib/chef/knife/tag_create.rb +0 -52
  433. data/lib/chef/knife/tag_delete.rb +0 -60
  434. data/lib/chef/knife/tag_list.rb +0 -47
  435. data/lib/chef/knife/upload.rb +0 -86
  436. data/lib/chef/knife/user_create.rb +0 -107
  437. data/lib/chef/knife/user_delete.rb +0 -44
  438. data/lib/chef/knife/user_dissociate.rb +0 -42
  439. data/lib/chef/knife/user_edit.rb +0 -52
  440. data/lib/chef/knife/user_invite_add.rb +0 -43
  441. data/lib/chef/knife/user_invite_list.rb +0 -34
  442. data/lib/chef/knife/user_invite_rescind.rb +0 -63
  443. data/lib/chef/knife/user_key_create.rb +0 -73
  444. data/lib/chef/knife/user_key_delete.rb +0 -80
  445. data/lib/chef/knife/user_key_edit.rb +0 -83
  446. data/lib/chef/knife/user_key_list.rb +0 -73
  447. data/lib/chef/knife/user_key_show.rb +0 -80
  448. data/lib/chef/knife/user_list.rb +0 -42
  449. data/lib/chef/knife/user_reregister.rb +0 -59
  450. data/lib/chef/knife/user_show.rb +0 -48
  451. data/lib/chef/knife/xargs.rb +0 -282
  452. data/lib/chef/knife/yaml_convert.rb +0 -91
  453. data/lib/chef/knife.rb +0 -665
  454. data/lib/chef/resource/user/dscl_user.rb +0 -35
  455. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  456. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  457. data/spec/data/knife_subcommand/test_explicit_category.rb +0 -7
  458. data/spec/data/knife_subcommand/test_name_mapping.rb +0 -4
  459. data/spec/data/knife_subcommand/test_yourself.rb +0 -21
  460. data/spec/functional/knife/configure_spec.rb +0 -33
  461. data/spec/functional/knife/cookbook_delete_spec.rb +0 -156
  462. data/spec/functional/knife/exec_spec.rb +0 -55
  463. data/spec/functional/knife/rehash_spec.rb +0 -39
  464. data/spec/functional/knife/smoke_test.rb +0 -42
  465. data/spec/functional/knife/ssh_spec.rb +0 -352
  466. data/spec/functional/resource/user/dscl_spec.rb +0 -188
  467. data/spec/functional/resource/windows_service_spec.rb +0 -105
  468. data/spec/functional/win32/service_manager_spec.rb +0 -220
  469. data/spec/integration/knife/chef_fs_data_store_spec.rb +0 -557
  470. data/spec/integration/knife/chef_repo_path_spec.rb +0 -962
  471. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -200
  472. data/spec/integration/knife/chefignore_spec.rb +0 -301
  473. data/spec/integration/knife/client_bulk_delete_spec.rb +0 -131
  474. data/spec/integration/knife/client_create_spec.rb +0 -70
  475. data/spec/integration/knife/client_delete_spec.rb +0 -64
  476. data/spec/integration/knife/client_key_create_spec.rb +0 -66
  477. data/spec/integration/knife/client_key_delete_spec.rb +0 -43
  478. data/spec/integration/knife/client_key_list_spec.rb +0 -61
  479. data/spec/integration/knife/client_key_show_spec.rb +0 -45
  480. data/spec/integration/knife/client_list_spec.rb +0 -49
  481. data/spec/integration/knife/client_show_spec.rb +0 -37
  482. data/spec/integration/knife/common_options_spec.rb +0 -174
  483. data/spec/integration/knife/config_list_spec.rb +0 -220
  484. data/spec/integration/knife/config_show_spec.rb +0 -192
  485. data/spec/integration/knife/config_use_spec.rb +0 -198
  486. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +0 -113
  487. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +0 -65
  488. data/spec/integration/knife/cookbook_download_spec.rb +0 -72
  489. data/spec/integration/knife/cookbook_list_spec.rb +0 -55
  490. data/spec/integration/knife/cookbook_show_spec.rb +0 -149
  491. data/spec/integration/knife/cookbook_upload_spec.rb +0 -128
  492. data/spec/integration/knife/data_bag_create_spec.rb +0 -125
  493. data/spec/integration/knife/data_bag_delete_spec.rb +0 -59
  494. data/spec/integration/knife/data_bag_edit_spec.rb +0 -105
  495. data/spec/integration/knife/data_bag_from_file_spec.rb +0 -116
  496. data/spec/integration/knife/data_bag_list_spec.rb +0 -44
  497. data/spec/integration/knife/data_bag_show_spec.rb +0 -95
  498. data/spec/integration/knife/delete_spec.rb +0 -1018
  499. data/spec/integration/knife/deps_spec.rb +0 -703
  500. data/spec/integration/knife/diff_spec.rb +0 -605
  501. data/spec/integration/knife/download_spec.rb +0 -1336
  502. data/spec/integration/knife/environment_compare_spec.rb +0 -75
  503. data/spec/integration/knife/environment_create_spec.rb +0 -41
  504. data/spec/integration/knife/environment_delete_spec.rb +0 -37
  505. data/spec/integration/knife/environment_from_file_spec.rb +0 -116
  506. data/spec/integration/knife/environment_list_spec.rb +0 -42
  507. data/spec/integration/knife/environment_show_spec.rb +0 -77
  508. data/spec/integration/knife/list_spec.rb +0 -1060
  509. data/spec/integration/knife/node_bulk_delete_spec.rb +0 -52
  510. data/spec/integration/knife/node_create_spec.rb +0 -47
  511. data/spec/integration/knife/node_delete_spec.rb +0 -48
  512. data/spec/integration/knife/node_environment_set_spec.rb +0 -46
  513. data/spec/integration/knife/node_from_file_spec.rb +0 -59
  514. data/spec/integration/knife/node_list_spec.rb +0 -45
  515. data/spec/integration/knife/node_run_list_add_spec.rb +0 -54
  516. data/spec/integration/knife/node_run_list_remove_spec.rb +0 -36
  517. data/spec/integration/knife/node_run_list_set_spec.rb +0 -41
  518. data/spec/integration/knife/node_show_spec.rb +0 -36
  519. data/spec/integration/knife/raw_spec.rb +0 -297
  520. data/spec/integration/knife/redirection_spec.rb +0 -64
  521. data/spec/integration/knife/role_bulk_delete_spec.rb +0 -52
  522. data/spec/integration/knife/role_create_spec.rb +0 -41
  523. data/spec/integration/knife/role_delete_spec.rb +0 -48
  524. data/spec/integration/knife/role_from_file_spec.rb +0 -96
  525. data/spec/integration/knife/role_list_spec.rb +0 -45
  526. data/spec/integration/knife/role_show_spec.rb +0 -51
  527. data/spec/integration/knife/search_node_spec.rb +0 -40
  528. data/spec/integration/knife/serve_spec.rb +0 -92
  529. data/spec/integration/knife/show_spec.rb +0 -197
  530. data/spec/integration/knife/upload_spec.rb +0 -1617
  531. data/spec/support/shared/functional/knife.rb +0 -37
  532. data/spec/support/shared/functional/win32_service.rb +0 -57
  533. data/spec/support/shared/integration/knife_support.rb +0 -192
  534. data/spec/support/shared/unit/knife_shared.rb +0 -39
  535. data/spec/unit/application/knife_spec.rb +0 -241
  536. data/spec/unit/chef_fs/parallelizer_spec.rb +0 -479
  537. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -198
  538. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +0 -152
  539. data/spec/unit/knife/bootstrap/client_builder_spec.rb +0 -207
  540. data/spec/unit/knife/bootstrap/train_connector_spec.rb +0 -244
  541. data/spec/unit/knife/bootstrap_spec.rb +0 -2220
  542. data/spec/unit/knife/client_bulk_delete_spec.rb +0 -166
  543. data/spec/unit/knife/client_create_spec.rb +0 -169
  544. data/spec/unit/knife/client_delete_spec.rb +0 -99
  545. data/spec/unit/knife/client_edit_spec.rb +0 -53
  546. data/spec/unit/knife/client_list_spec.rb +0 -34
  547. data/spec/unit/knife/client_reregister_spec.rb +0 -62
  548. data/spec/unit/knife/client_show_spec.rb +0 -52
  549. data/spec/unit/knife/configure_client_spec.rb +0 -81
  550. data/spec/unit/knife/configure_spec.rb +0 -190
  551. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +0 -87
  552. data/spec/unit/knife/cookbook_delete_spec.rb +0 -239
  553. data/spec/unit/knife/cookbook_download_spec.rb +0 -255
  554. data/spec/unit/knife/cookbook_list_spec.rb +0 -88
  555. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +0 -72
  556. data/spec/unit/knife/cookbook_metadata_spec.rb +0 -182
  557. data/spec/unit/knife/cookbook_show_spec.rb +0 -253
  558. data/spec/unit/knife/cookbook_upload_spec.rb +0 -364
  559. data/spec/unit/knife/core/bootstrap_context_spec.rb +0 -287
  560. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +0 -187
  561. data/spec/unit/knife/core/gem_glob_loader_spec.rb +0 -209
  562. data/spec/unit/knife/core/hashed_command_loader_spec.rb +0 -112
  563. data/spec/unit/knife/core/node_editor_spec.rb +0 -211
  564. data/spec/unit/knife/core/object_loader_spec.rb +0 -81
  565. data/spec/unit/knife/core/status_presenter_spec.rb +0 -54
  566. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -64
  567. data/spec/unit/knife/core/ui_spec.rb +0 -656
  568. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +0 -238
  569. data/spec/unit/knife/data_bag_create_spec.rb +0 -175
  570. data/spec/unit/knife/data_bag_edit_spec.rb +0 -126
  571. data/spec/unit/knife/data_bag_from_file_spec.rb +0 -174
  572. data/spec/unit/knife/data_bag_secret_options_spec.rb +0 -173
  573. data/spec/unit/knife/data_bag_show_spec.rb +0 -139
  574. data/spec/unit/knife/environment_compare_spec.rb +0 -112
  575. data/spec/unit/knife/environment_create_spec.rb +0 -91
  576. data/spec/unit/knife/environment_delete_spec.rb +0 -71
  577. data/spec/unit/knife/environment_edit_spec.rb +0 -79
  578. data/spec/unit/knife/environment_from_file_spec.rb +0 -90
  579. data/spec/unit/knife/environment_list_spec.rb +0 -54
  580. data/spec/unit/knife/environment_show_spec.rb +0 -52
  581. data/spec/unit/knife/key_create_spec.rb +0 -223
  582. data/spec/unit/knife/key_delete_spec.rb +0 -133
  583. data/spec/unit/knife/key_edit_spec.rb +0 -264
  584. data/spec/unit/knife/key_helper.rb +0 -74
  585. data/spec/unit/knife/key_list_spec.rb +0 -216
  586. data/spec/unit/knife/key_show_spec.rb +0 -126
  587. data/spec/unit/knife/node_bulk_delete_spec.rb +0 -94
  588. data/spec/unit/knife/node_delete_spec.rb +0 -77
  589. data/spec/unit/knife/node_edit_spec.rb +0 -116
  590. data/spec/unit/knife/node_environment_set_spec.rb +0 -61
  591. data/spec/unit/knife/node_from_file_spec.rb +0 -59
  592. data/spec/unit/knife/node_list_spec.rb +0 -62
  593. data/spec/unit/knife/node_policy_set_spec.rb +0 -122
  594. data/spec/unit/knife/node_run_list_add_spec.rb +0 -145
  595. data/spec/unit/knife/node_run_list_remove_spec.rb +0 -106
  596. data/spec/unit/knife/node_run_list_set_spec.rb +0 -115
  597. data/spec/unit/knife/node_show_spec.rb +0 -65
  598. data/spec/unit/knife/raw_spec.rb +0 -43
  599. data/spec/unit/knife/role_bulk_delete_spec.rb +0 -80
  600. data/spec/unit/knife/role_create_spec.rb +0 -80
  601. data/spec/unit/knife/role_delete_spec.rb +0 -67
  602. data/spec/unit/knife/role_edit_spec.rb +0 -77
  603. data/spec/unit/knife/role_env_run_list_add_spec.rb +0 -217
  604. data/spec/unit/knife/role_env_run_list_clear_spec.rb +0 -94
  605. data/spec/unit/knife/role_env_run_list_remove_spec.rb +0 -102
  606. data/spec/unit/knife/role_env_run_list_replace_spec.rb +0 -105
  607. data/spec/unit/knife/role_env_run_list_set_spec.rb +0 -99
  608. data/spec/unit/knife/role_from_file_spec.rb +0 -69
  609. data/spec/unit/knife/role_list_spec.rb +0 -54
  610. data/spec/unit/knife/role_run_list_add_spec.rb +0 -179
  611. data/spec/unit/knife/role_run_list_clear_spec.rb +0 -84
  612. data/spec/unit/knife/role_run_list_remove_spec.rb +0 -92
  613. data/spec/unit/knife/role_run_list_replace_spec.rb +0 -98
  614. data/spec/unit/knife/role_run_list_set_spec.rb +0 -89
  615. data/spec/unit/knife/role_show_spec.rb +0 -59
  616. data/spec/unit/knife/ssh_spec.rb +0 -403
  617. data/spec/unit/knife/ssl_check_spec.rb +0 -256
  618. data/spec/unit/knife/ssl_fetch_spec.rb +0 -222
  619. data/spec/unit/knife/status_spec.rb +0 -112
  620. data/spec/unit/knife/supermarket_download_spec.rb +0 -152
  621. data/spec/unit/knife/supermarket_install_spec.rb +0 -202
  622. data/spec/unit/knife/supermarket_list_spec.rb +0 -70
  623. data/spec/unit/knife/supermarket_search_spec.rb +0 -85
  624. data/spec/unit/knife/supermarket_share_spec.rb +0 -208
  625. data/spec/unit/knife/supermarket_unshare_spec.rb +0 -78
  626. data/spec/unit/knife/tag_create_spec.rb +0 -23
  627. data/spec/unit/knife/tag_delete_spec.rb +0 -25
  628. data/spec/unit/knife/tag_list_spec.rb +0 -23
  629. data/spec/unit/knife/user_create_spec.rb +0 -184
  630. data/spec/unit/knife/user_delete_spec.rb +0 -46
  631. data/spec/unit/knife/user_edit_spec.rb +0 -48
  632. data/spec/unit/knife/user_list_spec.rb +0 -36
  633. data/spec/unit/knife/user_reregister_spec.rb +0 -56
  634. data/spec/unit/knife/user_show_spec.rb +0 -46
  635. data/spec/unit/knife_spec.rb +0 -634
  636. data/spec/unit/provider/user/dscl_spec.rb +0 -699
  637. 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
@@ -1,35 +0,0 @@
1
- #
2
- # Copyright:: Copyright (c) Chef Software Inc.
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
-
18
- require_relative "../user"
19
-
20
- class Chef
21
- class Resource
22
- class User
23
- class DsclUser < Chef::Resource::User
24
- unified_mode true
25
-
26
- provides :dscl_user
27
- provides :user, platform: "mac_os_x", platform_version: "< 10.14"
28
-
29
- property :iterations, Integer,
30
- description: "macOS platform only. The number of iterations for a password with a SALTED-SHA512-PBKDF2 shadow hash.",
31
- default: 27855, desired_state: false
32
- end
33
- end
34
- end
35
- end