chef 16.14.1 → 17.0.242

Sign up to get free protection for your applications and to get access to all the features.
Files changed (615) 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/data_bag_item.rb +11 -2
  25. data/lib/chef/delayed_evaluator.rb +4 -0
  26. data/lib/chef/deprecated.rb +4 -0
  27. data/lib/chef/dsl/chef_vault.rb +6 -6
  28. data/lib/chef/dsl/reboot_pending.rb +1 -2
  29. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +20 -22
  30. data/lib/chef/group.rb +75 -0
  31. data/lib/chef/mixin/get_source_from_package.rb +1 -1
  32. data/lib/chef/node/attribute.rb +6 -4
  33. data/lib/chef/node/immutable_collections.rb +13 -0
  34. data/lib/chef/node/mixin/deep_merge_cache.rb +11 -7
  35. data/lib/chef/org.rb +3 -2
  36. data/lib/chef/property.rb +18 -0
  37. data/lib/chef/provider.rb +1 -1
  38. data/lib/chef/provider/cron.rb +1 -1
  39. data/lib/chef/provider/execute.rb +2 -1
  40. data/lib/chef/provider/file.rb +1 -1
  41. data/lib/chef/provider/git.rb +5 -7
  42. data/lib/chef/provider/group/groupadd.rb +3 -3
  43. data/lib/chef/provider/group/groupmod.rb +3 -3
  44. data/lib/chef/provider/group/pw.rb +3 -3
  45. data/lib/chef/provider/ifconfig.rb +2 -2
  46. data/lib/chef/provider/link.rb +2 -2
  47. data/lib/chef/provider/mount.rb +5 -5
  48. data/lib/chef/provider/mount/aix.rb +3 -3
  49. data/lib/chef/provider/mount/mount.rb +5 -5
  50. data/lib/chef/provider/mount/windows.rb +1 -1
  51. data/lib/chef/provider/package.rb +17 -21
  52. data/lib/chef/provider/package/apt.rb +27 -1
  53. data/lib/chef/provider/package/deb.rb +3 -3
  54. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  55. data/lib/chef/provider/package/portage.rb +2 -2
  56. data/lib/chef/provider/package/rubygems.rb +9 -15
  57. data/lib/chef/provider/package/windows.rb +2 -4
  58. data/lib/chef/provider/package/yum/yum_helper.py +1 -1
  59. data/lib/chef/provider/route.rb +2 -2
  60. data/lib/chef/provider/service.rb +6 -6
  61. data/lib/chef/provider/service/aixinit.rb +1 -1
  62. data/lib/chef/provider/service/debian.rb +1 -1
  63. data/lib/chef/provider/service/freebsd.rb +15 -21
  64. data/lib/chef/provider/service/macosx.rb +4 -4
  65. data/lib/chef/provider/service/systemd.rb +43 -14
  66. data/lib/chef/provider/service/upstart.rb +2 -13
  67. data/lib/chef/provider/service/windows.rb +12 -12
  68. data/lib/chef/provider/subversion.rb +10 -12
  69. data/lib/chef/provider/systemd_unit.rb +36 -10
  70. data/lib/chef/provider/template/content.rb +2 -6
  71. data/lib/chef/provider/user.rb +2 -2
  72. data/lib/chef/provider/user/dscl.rb +1 -1
  73. data/lib/chef/provider/user/mac.rb +17 -20
  74. data/lib/chef/provider/user/pw.rb +1 -1
  75. data/lib/chef/provider/user/windows.rb +1 -1
  76. data/lib/chef/provider/zypper_repository.rb +2 -2
  77. data/lib/chef/providers.rb +0 -1
  78. data/lib/chef/resource/alternatives.rb +6 -6
  79. data/lib/chef/resource/apt_package.rb +1 -1
  80. data/lib/chef/resource/apt_preference.rb +2 -2
  81. data/lib/chef/resource/apt_repository.rb +6 -6
  82. data/lib/chef/resource/apt_update.rb +3 -2
  83. data/lib/chef/resource/archive_file.rb +2 -3
  84. data/lib/chef/resource/breakpoint.rb +1 -1
  85. data/lib/chef/resource/build_essential.rb +2 -6
  86. data/lib/chef/resource/chef_client_config.rb +2 -2
  87. data/lib/chef/resource/chef_client_cron.rb +4 -4
  88. data/lib/chef/resource/chef_client_launchd.rb +3 -3
  89. data/lib/chef/resource/chef_client_scheduled_task.rb +1 -1
  90. data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
  91. data/lib/chef/resource/chef_handler.rb +3 -7
  92. data/lib/chef/resource/chef_sleep.rb +1 -1
  93. data/lib/chef/resource/chef_vault_secret.rb +3 -8
  94. data/lib/chef/resource/chocolatey_config.rb +2 -6
  95. data/lib/chef/resource/chocolatey_feature.rb +2 -6
  96. data/lib/chef/resource/chocolatey_source.rb +4 -10
  97. data/lib/chef/resource/cron/_cron_shared.rb +2 -2
  98. data/lib/chef/resource/cron_access.rb +2 -4
  99. data/lib/chef/resource/dmg_package.rb +6 -10
  100. data/lib/chef/resource/dpkg_package.rb +1 -1
  101. data/lib/chef/resource/execute.rb +6 -1
  102. data/lib/chef/resource/file.rb +1 -1
  103. data/lib/chef/resource/group.rb +2 -2
  104. data/lib/chef/resource/homebrew_cask.rb +2 -6
  105. data/lib/chef/resource/homebrew_tap.rb +2 -6
  106. data/lib/chef/resource/hostname.rb +21 -17
  107. data/lib/chef/resource/http_request.rb +1 -1
  108. data/lib/chef/resource/kernel_module.rb +6 -17
  109. data/lib/chef/resource/locale.rb +2 -3
  110. data/lib/chef/resource/lwrp_base.rb +4 -0
  111. data/lib/chef/resource/macos_userdefaults.rb +10 -14
  112. data/lib/chef/resource/mdadm.rb +53 -7
  113. data/lib/chef/resource/mount.rb +2 -1
  114. data/lib/chef/resource/openssl_ec_private_key.rb +2 -2
  115. data/lib/chef/resource/openssl_rsa_private_key.rb +1 -1
  116. data/lib/chef/resource/openssl_x509_certificate.rb +2 -2
  117. data/lib/chef/resource/plist.rb +7 -7
  118. data/lib/chef/resource/powershell_script.rb +1 -1
  119. data/lib/chef/resource/remote_file.rb +1 -1
  120. data/lib/chef/resource/rhsm_errata.rb +16 -1
  121. data/lib/chef/resource/rhsm_errata_level.rb +10 -1
  122. data/lib/chef/resource/rhsm_register.rb +12 -6
  123. data/lib/chef/resource/rhsm_repo.rb +2 -6
  124. data/lib/chef/resource/rhsm_subscription.rb +2 -6
  125. data/lib/chef/resource/scm/git.rb +1 -1
  126. data/lib/chef/resource/sudo.rb +6 -6
  127. data/lib/chef/resource/sysctl.rb +2 -6
  128. data/lib/chef/resource/systemd_unit.rb +2 -2
  129. data/lib/chef/resource/template.rb +1 -1
  130. data/lib/chef/resource/timezone.rb +1 -3
  131. data/lib/chef/resource/user/mac_user.rb +1 -1
  132. data/lib/chef/resource/user_ulimit.rb +2 -2
  133. data/lib/chef/resource/windows_ad_join.rb +2 -6
  134. data/lib/chef/resource/windows_audit_policy.rb +1 -1
  135. data/lib/chef/resource/windows_auto_run.rb +2 -5
  136. data/lib/chef/resource/windows_certificate.rb +207 -73
  137. data/lib/chef/resource/windows_dfs_folder.rb +2 -6
  138. data/lib/chef/resource/windows_dfs_namespace.rb +2 -6
  139. data/lib/chef/resource/windows_dfs_server.rb +1 -3
  140. data/lib/chef/resource/windows_dns_record.rb +2 -6
  141. data/lib/chef/resource/windows_dns_zone.rb +2 -6
  142. data/lib/chef/resource/windows_env.rb +5 -4
  143. data/lib/chef/resource/windows_feature.rb +3 -9
  144. data/lib/chef/resource/windows_feature_dism.rb +2 -6
  145. data/lib/chef/resource/windows_feature_powershell.rb +3 -3
  146. data/lib/chef/resource/windows_firewall_profile.rb +4 -4
  147. data/lib/chef/resource/windows_firewall_rule.rb +2 -5
  148. data/lib/chef/resource/windows_font.rb +2 -4
  149. data/lib/chef/resource/windows_pagefile.rb +2 -6
  150. data/lib/chef/resource/windows_path.rb +2 -2
  151. data/lib/chef/resource/windows_printer.rb +4 -4
  152. data/lib/chef/resource/windows_printer_port.rb +6 -6
  153. data/lib/chef/resource/windows_security_policy.rb +53 -40
  154. data/lib/chef/resource/windows_share.rb +14 -21
  155. data/lib/chef/resource/windows_shortcut.rb +4 -6
  156. data/lib/chef/resource/windows_task.rb +17 -5
  157. data/lib/chef/resource/windows_uac.rb +1 -1
  158. data/lib/chef/resource/windows_user_privilege.rb +4 -4
  159. data/lib/chef/resource/windows_workgroup.rb +1 -2
  160. data/lib/chef/resources.rb +0 -1
  161. data/lib/chef/user.rb +0 -1
  162. data/lib/chef/user_v1.rb +3 -4
  163. data/lib/chef/util/dsc/configuration_generator.rb +1 -0
  164. data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
  165. data/lib/chef/version.rb +1 -1
  166. data/lib/chef/win32/registry.rb +4 -2
  167. data/spec/data/cookbooks/openldap/libraries/openldap.rb +1 -1
  168. data/spec/data/lwrp/resources/bar.rb +2 -0
  169. data/spec/data/lwrp/resources/buck_passer.rb +1 -0
  170. data/spec/data/lwrp/resources/buck_passer_2.rb +1 -0
  171. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +1 -0
  172. data/spec/data/lwrp/resources/foo.rb +2 -0
  173. data/spec/data/lwrp/resources/inline_compiler.rb +1 -0
  174. data/spec/data/lwrp/resources/monkey_name_printer.rb +1 -0
  175. data/spec/data/lwrp/resources/paint_drying_watcher.rb +1 -0
  176. data/spec/data/lwrp/resources/thumb_twiddler.rb +1 -0
  177. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +2 -0
  178. data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -0
  179. data/spec/data/lwrp_override/resources/foo.rb +1 -0
  180. data/spec/data/rubygems.org/nonexistent_gem-info +1 -0
  181. data/spec/data/rubygems.org/sexp_processor-info +49 -0
  182. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  183. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  184. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  185. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  186. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  187. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +2 -0
  188. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  189. data/spec/data/run_context/cookbooks/test/resources/resource.rb +2 -0
  190. data/spec/functional/dsl/registry_helper_spec.rb +1 -1
  191. data/spec/functional/resource/aixinit_service_spec.rb +7 -7
  192. data/spec/functional/resource/apt_package_spec.rb +1 -1
  193. data/spec/functional/resource/chocolatey_package_spec.rb +13 -0
  194. data/spec/functional/resource/dnf_package_spec.rb +4 -1
  195. data/spec/functional/resource/registry_spec.rb +8 -8
  196. data/spec/functional/resource/user/mac_user_spec.rb +2 -2
  197. data/spec/functional/resource/windows_certificate_spec.rb +92 -35
  198. data/spec/functional/version_spec.rb +1 -1
  199. data/spec/functional/win32/registry_spec.rb +1 -1
  200. data/spec/integration/client/client_spec.rb +5 -2
  201. data/spec/integration/client/exit_code_spec.rb +1 -1
  202. data/spec/integration/client/ipv6_spec.rb +1 -1
  203. data/spec/integration/compliance/compliance_spec.rb +1 -1
  204. data/spec/integration/ohai/ohai_spec.rb +7 -6
  205. data/spec/integration/recipes/accumulator_spec.rb +13 -1
  206. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -1
  207. data/spec/integration/recipes/lwrp_spec.rb +3 -1
  208. data/spec/integration/recipes/notifies_spec.rb +15 -1
  209. data/spec/integration/recipes/notifying_block_spec.rb +2 -1
  210. data/spec/integration/recipes/recipe_dsl_spec.rb +9 -9
  211. data/spec/integration/recipes/unified_mode_spec.rb +1 -1
  212. data/spec/integration/recipes/use_partial_spec.rb +4 -1
  213. data/spec/spec_helper.rb +10 -13
  214. data/spec/support/chef_helpers.rb +0 -16
  215. data/spec/support/lib/chef/resource/with_state.rb +0 -1
  216. data/spec/support/lib/chef/resource/zen_follower.rb +0 -1
  217. data/spec/support/lib/chef/resource/zen_master.rb +0 -1
  218. data/spec/support/matchers/leak.rb +7 -9
  219. data/spec/support/platform_helpers.rb +1 -8
  220. data/spec/support/shared/integration/integration_helper.rb +0 -1
  221. data/spec/support/shared/unit/script_resource.rb +2 -2
  222. data/spec/unit/application/solo_spec.rb +2 -2
  223. data/spec/unit/chef_fs/diff_spec.rb +1 -1
  224. data/spec/unit/chef_fs/file_system_spec.rb +1 -1
  225. data/spec/unit/compliance/fetcher/automate_spec.rb +0 -16
  226. data/spec/unit/compliance/reporter/automate_spec.rb +26 -2
  227. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +20 -0
  228. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +1 -0
  229. data/spec/unit/compliance/runner_spec.rb +30 -4
  230. data/spec/unit/data_bag_item_spec.rb +1 -6
  231. data/spec/unit/dsl/reboot_pending_spec.rb +2 -2
  232. data/spec/unit/dsl/registry_helper_spec.rb +1 -1
  233. data/spec/unit/lwrp_spec.rb +1 -1
  234. data/spec/unit/mixin/params_validate_spec.rb +4 -3
  235. data/spec/unit/node/attribute_spec.rb +1 -1
  236. data/spec/unit/node_spec.rb +78 -0
  237. data/spec/unit/org_group_spec.rb +45 -0
  238. data/spec/unit/property_spec.rb +23 -22
  239. data/spec/unit/provider/cron_spec.rb +1 -1
  240. data/spec/unit/provider/group/gpasswd_spec.rb +2 -2
  241. data/spec/unit/provider/group/groupmod_spec.rb +2 -2
  242. data/spec/unit/provider/group/pw_spec.rb +2 -2
  243. data/spec/unit/provider/group_spec.rb +1 -1
  244. data/spec/unit/provider/package/apt_spec.rb +84 -18
  245. data/spec/unit/provider/package/deb_spec.rb +3 -3
  246. data/spec/unit/provider/package/rubygems_spec.rb +18 -30
  247. data/spec/unit/provider/service/arch_service_spec.rb +1 -0
  248. data/spec/unit/provider/service/debian_service_spec.rb +1 -0
  249. data/spec/unit/provider/service/macosx_spec.rb +2 -2
  250. data/spec/unit/provider/service/systemd_service_spec.rb +138 -23
  251. data/spec/unit/provider/service/upstart_service_spec.rb +0 -29
  252. data/spec/unit/provider/service/windows_spec.rb +2 -2
  253. data/spec/unit/provider/subversion_spec.rb +2 -2
  254. data/spec/unit/provider/systemd_unit_spec.rb +79 -60
  255. data/spec/unit/provider/zypper_repository_spec.rb +2 -2
  256. data/spec/unit/provider_spec.rb +0 -8
  257. data/spec/unit/resource/powershell_script_spec.rb +2 -2
  258. data/spec/unit/resource/windows_task_spec.rb +1 -1
  259. data/spec/unit/user_spec.rb +1 -1
  260. data/spec/unit/user_v1_spec.rb +6 -4
  261. data/tasks/rspec.rb +15 -7
  262. metadata +17 -380
  263. data/bin/knife +0 -24
  264. data/lib/chef/application/knife.rb +0 -234
  265. data/lib/chef/application/windows_service.rb +0 -338
  266. data/lib/chef/application/windows_service_manager.rb +0 -205
  267. data/lib/chef/chef_fs/knife.rb +0 -160
  268. data/lib/chef/chef_fs/parallelizer.rb +0 -102
  269. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +0 -35
  270. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +0 -278
  271. data/lib/chef/cookbook_site_streaming_uploader.rb +0 -244
  272. data/lib/chef/knife.rb +0 -665
  273. data/lib/chef/knife/acl_add.rb +0 -57
  274. data/lib/chef/knife/acl_base.rb +0 -183
  275. data/lib/chef/knife/acl_bulk_add.rb +0 -78
  276. data/lib/chef/knife/acl_bulk_remove.rb +0 -83
  277. data/lib/chef/knife/acl_remove.rb +0 -62
  278. data/lib/chef/knife/acl_show.rb +0 -56
  279. data/lib/chef/knife/bootstrap.rb +0 -1192
  280. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +0 -162
  281. data/lib/chef/knife/bootstrap/client_builder.rb +0 -212
  282. data/lib/chef/knife/bootstrap/templates/README.md +0 -11
  283. data/lib/chef/knife/bootstrap/templates/chef-full.erb +0 -242
  284. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +0 -278
  285. data/lib/chef/knife/bootstrap/train_connector.rb +0 -336
  286. data/lib/chef/knife/client_bulk_delete.rb +0 -104
  287. data/lib/chef/knife/client_create.rb +0 -101
  288. data/lib/chef/knife/client_delete.rb +0 -62
  289. data/lib/chef/knife/client_edit.rb +0 -52
  290. data/lib/chef/knife/client_key_create.rb +0 -73
  291. data/lib/chef/knife/client_key_delete.rb +0 -80
  292. data/lib/chef/knife/client_key_edit.rb +0 -83
  293. data/lib/chef/knife/client_key_list.rb +0 -73
  294. data/lib/chef/knife/client_key_show.rb +0 -80
  295. data/lib/chef/knife/client_list.rb +0 -41
  296. data/lib/chef/knife/client_reregister.rb +0 -58
  297. data/lib/chef/knife/client_show.rb +0 -48
  298. data/lib/chef/knife/config_get.rb +0 -39
  299. data/lib/chef/knife/config_get_profile.rb +0 -37
  300. data/lib/chef/knife/config_list.rb +0 -139
  301. data/lib/chef/knife/config_list_profiles.rb +0 -37
  302. data/lib/chef/knife/config_show.rb +0 -127
  303. data/lib/chef/knife/config_use.rb +0 -61
  304. data/lib/chef/knife/config_use_profile.rb +0 -47
  305. data/lib/chef/knife/configure.rb +0 -150
  306. data/lib/chef/knife/configure_client.rb +0 -48
  307. data/lib/chef/knife/cookbook_bulk_delete.rb +0 -71
  308. data/lib/chef/knife/cookbook_delete.rb +0 -151
  309. data/lib/chef/knife/cookbook_download.rb +0 -142
  310. data/lib/chef/knife/cookbook_list.rb +0 -47
  311. data/lib/chef/knife/cookbook_metadata.rb +0 -106
  312. data/lib/chef/knife/cookbook_metadata_from_file.rb +0 -49
  313. data/lib/chef/knife/cookbook_show.rb +0 -98
  314. data/lib/chef/knife/cookbook_upload.rb +0 -292
  315. data/lib/chef/knife/core/bootstrap_context.rb +0 -264
  316. data/lib/chef/knife/core/cookbook_scm_repo.rb +0 -159
  317. data/lib/chef/knife/core/formatting_options.rb +0 -49
  318. data/lib/chef/knife/core/gem_glob_loader.rb +0 -138
  319. data/lib/chef/knife/core/generic_presenter.rb +0 -232
  320. data/lib/chef/knife/core/hashed_command_loader.rb +0 -100
  321. data/lib/chef/knife/core/node_editor.rb +0 -130
  322. data/lib/chef/knife/core/node_presenter.rb +0 -133
  323. data/lib/chef/knife/core/object_loader.rb +0 -115
  324. data/lib/chef/knife/core/status_presenter.rb +0 -147
  325. data/lib/chef/knife/core/subcommand_loader.rb +0 -203
  326. data/lib/chef/knife/core/text_formatter.rb +0 -85
  327. data/lib/chef/knife/core/ui.rb +0 -338
  328. data/lib/chef/knife/core/windows_bootstrap_context.rb +0 -405
  329. data/lib/chef/knife/data_bag_create.rb +0 -81
  330. data/lib/chef/knife/data_bag_delete.rb +0 -49
  331. data/lib/chef/knife/data_bag_edit.rb +0 -74
  332. data/lib/chef/knife/data_bag_from_file.rb +0 -113
  333. data/lib/chef/knife/data_bag_list.rb +0 -42
  334. data/lib/chef/knife/data_bag_secret_options.rb +0 -122
  335. data/lib/chef/knife/data_bag_show.rb +0 -69
  336. data/lib/chef/knife/delete.rb +0 -125
  337. data/lib/chef/knife/deps.rb +0 -156
  338. data/lib/chef/knife/diff.rb +0 -83
  339. data/lib/chef/knife/download.rb +0 -84
  340. data/lib/chef/knife/edit.rb +0 -88
  341. data/lib/chef/knife/environment_compare.rb +0 -128
  342. data/lib/chef/knife/environment_create.rb +0 -52
  343. data/lib/chef/knife/environment_delete.rb +0 -44
  344. data/lib/chef/knife/environment_edit.rb +0 -44
  345. data/lib/chef/knife/environment_from_file.rb +0 -84
  346. data/lib/chef/knife/environment_list.rb +0 -41
  347. data/lib/chef/knife/environment_show.rb +0 -47
  348. data/lib/chef/knife/exec.rb +0 -99
  349. data/lib/chef/knife/group_add.rb +0 -55
  350. data/lib/chef/knife/group_create.rb +0 -49
  351. data/lib/chef/knife/group_destroy.rb +0 -53
  352. data/lib/chef/knife/group_list.rb +0 -43
  353. data/lib/chef/knife/group_remove.rb +0 -56
  354. data/lib/chef/knife/group_show.rb +0 -49
  355. data/lib/chef/knife/key_create.rb +0 -112
  356. data/lib/chef/knife/key_create_base.rb +0 -50
  357. data/lib/chef/knife/key_delete.rb +0 -55
  358. data/lib/chef/knife/key_edit.rb +0 -118
  359. data/lib/chef/knife/key_edit_base.rb +0 -55
  360. data/lib/chef/knife/key_list.rb +0 -90
  361. data/lib/chef/knife/key_list_base.rb +0 -45
  362. data/lib/chef/knife/key_show.rb +0 -53
  363. data/lib/chef/knife/list.rb +0 -177
  364. data/lib/chef/knife/node_bulk_delete.rb +0 -75
  365. data/lib/chef/knife/node_create.rb +0 -47
  366. data/lib/chef/knife/node_delete.rb +0 -46
  367. data/lib/chef/knife/node_edit.rb +0 -70
  368. data/lib/chef/knife/node_environment_set.rb +0 -53
  369. data/lib/chef/knife/node_from_file.rb +0 -51
  370. data/lib/chef/knife/node_list.rb +0 -44
  371. data/lib/chef/knife/node_policy_set.rb +0 -79
  372. data/lib/chef/knife/node_run_list_add.rb +0 -104
  373. data/lib/chef/knife/node_run_list_remove.rb +0 -67
  374. data/lib/chef/knife/node_run_list_set.rb +0 -66
  375. data/lib/chef/knife/node_show.rb +0 -63
  376. data/lib/chef/knife/null.rb +0 -12
  377. data/lib/chef/knife/raw.rb +0 -123
  378. data/lib/chef/knife/recipe_list.rb +0 -32
  379. data/lib/chef/knife/rehash.rb +0 -50
  380. data/lib/chef/knife/role_bulk_delete.rb +0 -66
  381. data/lib/chef/knife/role_create.rb +0 -53
  382. data/lib/chef/knife/role_delete.rb +0 -46
  383. data/lib/chef/knife/role_edit.rb +0 -45
  384. data/lib/chef/knife/role_env_run_list_add.rb +0 -87
  385. data/lib/chef/knife/role_env_run_list_clear.rb +0 -55
  386. data/lib/chef/knife/role_env_run_list_remove.rb +0 -57
  387. data/lib/chef/knife/role_env_run_list_replace.rb +0 -60
  388. data/lib/chef/knife/role_env_run_list_set.rb +0 -70
  389. data/lib/chef/knife/role_from_file.rb +0 -51
  390. data/lib/chef/knife/role_list.rb +0 -42
  391. data/lib/chef/knife/role_run_list_add.rb +0 -87
  392. data/lib/chef/knife/role_run_list_clear.rb +0 -55
  393. data/lib/chef/knife/role_run_list_remove.rb +0 -56
  394. data/lib/chef/knife/role_run_list_replace.rb +0 -60
  395. data/lib/chef/knife/role_run_list_set.rb +0 -69
  396. data/lib/chef/knife/role_show.rb +0 -48
  397. data/lib/chef/knife/search.rb +0 -194
  398. data/lib/chef/knife/serve.rb +0 -65
  399. data/lib/chef/knife/show.rb +0 -72
  400. data/lib/chef/knife/ssh.rb +0 -645
  401. data/lib/chef/knife/ssl_check.rb +0 -284
  402. data/lib/chef/knife/ssl_fetch.rb +0 -161
  403. data/lib/chef/knife/status.rb +0 -95
  404. data/lib/chef/knife/supermarket_download.rb +0 -121
  405. data/lib/chef/knife/supermarket_install.rb +0 -192
  406. data/lib/chef/knife/supermarket_list.rb +0 -76
  407. data/lib/chef/knife/supermarket_search.rb +0 -53
  408. data/lib/chef/knife/supermarket_share.rb +0 -166
  409. data/lib/chef/knife/supermarket_show.rb +0 -66
  410. data/lib/chef/knife/supermarket_unshare.rb +0 -61
  411. data/lib/chef/knife/tag_create.rb +0 -52
  412. data/lib/chef/knife/tag_delete.rb +0 -60
  413. data/lib/chef/knife/tag_list.rb +0 -47
  414. data/lib/chef/knife/upload.rb +0 -86
  415. data/lib/chef/knife/user_create.rb +0 -107
  416. data/lib/chef/knife/user_delete.rb +0 -44
  417. data/lib/chef/knife/user_dissociate.rb +0 -42
  418. data/lib/chef/knife/user_edit.rb +0 -52
  419. data/lib/chef/knife/user_invite_add.rb +0 -43
  420. data/lib/chef/knife/user_invite_list.rb +0 -34
  421. data/lib/chef/knife/user_invite_rescind.rb +0 -63
  422. data/lib/chef/knife/user_key_create.rb +0 -73
  423. data/lib/chef/knife/user_key_delete.rb +0 -80
  424. data/lib/chef/knife/user_key_edit.rb +0 -83
  425. data/lib/chef/knife/user_key_list.rb +0 -73
  426. data/lib/chef/knife/user_key_show.rb +0 -80
  427. data/lib/chef/knife/user_list.rb +0 -42
  428. data/lib/chef/knife/user_reregister.rb +0 -59
  429. data/lib/chef/knife/user_show.rb +0 -48
  430. data/lib/chef/knife/xargs.rb +0 -282
  431. data/lib/chef/knife/yaml_convert.rb +0 -91
  432. data/lib/chef/resource/user/dscl_user.rb +0 -35
  433. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  434. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  435. data/spec/data/knife_subcommand/test_explicit_category.rb +0 -7
  436. data/spec/data/knife_subcommand/test_name_mapping.rb +0 -4
  437. data/spec/data/knife_subcommand/test_yourself.rb +0 -21
  438. data/spec/functional/knife/configure_spec.rb +0 -33
  439. data/spec/functional/knife/cookbook_delete_spec.rb +0 -156
  440. data/spec/functional/knife/exec_spec.rb +0 -55
  441. data/spec/functional/knife/rehash_spec.rb +0 -39
  442. data/spec/functional/knife/smoke_test.rb +0 -42
  443. data/spec/functional/knife/ssh_spec.rb +0 -352
  444. data/spec/functional/resource/user/dscl_spec.rb +0 -188
  445. data/spec/functional/resource/windows_service_spec.rb +0 -105
  446. data/spec/functional/win32/service_manager_spec.rb +0 -220
  447. data/spec/integration/knife/chef_fs_data_store_spec.rb +0 -557
  448. data/spec/integration/knife/chef_repo_path_spec.rb +0 -962
  449. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -200
  450. data/spec/integration/knife/chefignore_spec.rb +0 -301
  451. data/spec/integration/knife/client_bulk_delete_spec.rb +0 -131
  452. data/spec/integration/knife/client_create_spec.rb +0 -70
  453. data/spec/integration/knife/client_delete_spec.rb +0 -64
  454. data/spec/integration/knife/client_key_create_spec.rb +0 -66
  455. data/spec/integration/knife/client_key_delete_spec.rb +0 -43
  456. data/spec/integration/knife/client_key_list_spec.rb +0 -61
  457. data/spec/integration/knife/client_key_show_spec.rb +0 -45
  458. data/spec/integration/knife/client_list_spec.rb +0 -49
  459. data/spec/integration/knife/client_show_spec.rb +0 -37
  460. data/spec/integration/knife/common_options_spec.rb +0 -174
  461. data/spec/integration/knife/config_list_spec.rb +0 -220
  462. data/spec/integration/knife/config_show_spec.rb +0 -192
  463. data/spec/integration/knife/config_use_spec.rb +0 -198
  464. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +0 -113
  465. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +0 -65
  466. data/spec/integration/knife/cookbook_download_spec.rb +0 -72
  467. data/spec/integration/knife/cookbook_list_spec.rb +0 -55
  468. data/spec/integration/knife/cookbook_show_spec.rb +0 -149
  469. data/spec/integration/knife/cookbook_upload_spec.rb +0 -128
  470. data/spec/integration/knife/data_bag_create_spec.rb +0 -125
  471. data/spec/integration/knife/data_bag_delete_spec.rb +0 -59
  472. data/spec/integration/knife/data_bag_edit_spec.rb +0 -105
  473. data/spec/integration/knife/data_bag_from_file_spec.rb +0 -116
  474. data/spec/integration/knife/data_bag_list_spec.rb +0 -44
  475. data/spec/integration/knife/data_bag_show_spec.rb +0 -95
  476. data/spec/integration/knife/delete_spec.rb +0 -1018
  477. data/spec/integration/knife/deps_spec.rb +0 -703
  478. data/spec/integration/knife/diff_spec.rb +0 -605
  479. data/spec/integration/knife/download_spec.rb +0 -1336
  480. data/spec/integration/knife/environment_compare_spec.rb +0 -75
  481. data/spec/integration/knife/environment_create_spec.rb +0 -41
  482. data/spec/integration/knife/environment_delete_spec.rb +0 -37
  483. data/spec/integration/knife/environment_from_file_spec.rb +0 -116
  484. data/spec/integration/knife/environment_list_spec.rb +0 -42
  485. data/spec/integration/knife/environment_show_spec.rb +0 -77
  486. data/spec/integration/knife/list_spec.rb +0 -1060
  487. data/spec/integration/knife/node_bulk_delete_spec.rb +0 -52
  488. data/spec/integration/knife/node_create_spec.rb +0 -47
  489. data/spec/integration/knife/node_delete_spec.rb +0 -48
  490. data/spec/integration/knife/node_environment_set_spec.rb +0 -46
  491. data/spec/integration/knife/node_from_file_spec.rb +0 -59
  492. data/spec/integration/knife/node_list_spec.rb +0 -45
  493. data/spec/integration/knife/node_run_list_add_spec.rb +0 -54
  494. data/spec/integration/knife/node_run_list_remove_spec.rb +0 -36
  495. data/spec/integration/knife/node_run_list_set_spec.rb +0 -41
  496. data/spec/integration/knife/node_show_spec.rb +0 -36
  497. data/spec/integration/knife/raw_spec.rb +0 -297
  498. data/spec/integration/knife/redirection_spec.rb +0 -64
  499. data/spec/integration/knife/role_bulk_delete_spec.rb +0 -52
  500. data/spec/integration/knife/role_create_spec.rb +0 -41
  501. data/spec/integration/knife/role_delete_spec.rb +0 -48
  502. data/spec/integration/knife/role_from_file_spec.rb +0 -96
  503. data/spec/integration/knife/role_list_spec.rb +0 -45
  504. data/spec/integration/knife/role_show_spec.rb +0 -51
  505. data/spec/integration/knife/search_node_spec.rb +0 -40
  506. data/spec/integration/knife/serve_spec.rb +0 -92
  507. data/spec/integration/knife/show_spec.rb +0 -197
  508. data/spec/integration/knife/upload_spec.rb +0 -1617
  509. data/spec/support/shared/functional/knife.rb +0 -37
  510. data/spec/support/shared/functional/win32_service.rb +0 -57
  511. data/spec/support/shared/integration/knife_support.rb +0 -192
  512. data/spec/support/shared/unit/knife_shared.rb +0 -39
  513. data/spec/unit/application/knife_spec.rb +0 -241
  514. data/spec/unit/chef_fs/parallelizer_spec.rb +0 -479
  515. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -198
  516. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +0 -152
  517. data/spec/unit/knife/bootstrap/client_builder_spec.rb +0 -207
  518. data/spec/unit/knife/bootstrap/train_connector_spec.rb +0 -244
  519. data/spec/unit/knife/bootstrap_spec.rb +0 -2220
  520. data/spec/unit/knife/client_bulk_delete_spec.rb +0 -166
  521. data/spec/unit/knife/client_create_spec.rb +0 -169
  522. data/spec/unit/knife/client_delete_spec.rb +0 -99
  523. data/spec/unit/knife/client_edit_spec.rb +0 -53
  524. data/spec/unit/knife/client_list_spec.rb +0 -34
  525. data/spec/unit/knife/client_reregister_spec.rb +0 -62
  526. data/spec/unit/knife/client_show_spec.rb +0 -52
  527. data/spec/unit/knife/configure_client_spec.rb +0 -81
  528. data/spec/unit/knife/configure_spec.rb +0 -190
  529. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +0 -87
  530. data/spec/unit/knife/cookbook_delete_spec.rb +0 -239
  531. data/spec/unit/knife/cookbook_download_spec.rb +0 -255
  532. data/spec/unit/knife/cookbook_list_spec.rb +0 -88
  533. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +0 -72
  534. data/spec/unit/knife/cookbook_metadata_spec.rb +0 -182
  535. data/spec/unit/knife/cookbook_show_spec.rb +0 -253
  536. data/spec/unit/knife/cookbook_upload_spec.rb +0 -364
  537. data/spec/unit/knife/core/bootstrap_context_spec.rb +0 -287
  538. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +0 -187
  539. data/spec/unit/knife/core/gem_glob_loader_spec.rb +0 -209
  540. data/spec/unit/knife/core/hashed_command_loader_spec.rb +0 -112
  541. data/spec/unit/knife/core/node_editor_spec.rb +0 -211
  542. data/spec/unit/knife/core/object_loader_spec.rb +0 -81
  543. data/spec/unit/knife/core/status_presenter_spec.rb +0 -54
  544. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -64
  545. data/spec/unit/knife/core/ui_spec.rb +0 -656
  546. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +0 -238
  547. data/spec/unit/knife/data_bag_create_spec.rb +0 -175
  548. data/spec/unit/knife/data_bag_edit_spec.rb +0 -126
  549. data/spec/unit/knife/data_bag_from_file_spec.rb +0 -174
  550. data/spec/unit/knife/data_bag_secret_options_spec.rb +0 -173
  551. data/spec/unit/knife/data_bag_show_spec.rb +0 -139
  552. data/spec/unit/knife/environment_compare_spec.rb +0 -112
  553. data/spec/unit/knife/environment_create_spec.rb +0 -91
  554. data/spec/unit/knife/environment_delete_spec.rb +0 -71
  555. data/spec/unit/knife/environment_edit_spec.rb +0 -79
  556. data/spec/unit/knife/environment_from_file_spec.rb +0 -90
  557. data/spec/unit/knife/environment_list_spec.rb +0 -54
  558. data/spec/unit/knife/environment_show_spec.rb +0 -52
  559. data/spec/unit/knife/key_create_spec.rb +0 -223
  560. data/spec/unit/knife/key_delete_spec.rb +0 -133
  561. data/spec/unit/knife/key_edit_spec.rb +0 -264
  562. data/spec/unit/knife/key_helper.rb +0 -74
  563. data/spec/unit/knife/key_list_spec.rb +0 -216
  564. data/spec/unit/knife/key_show_spec.rb +0 -126
  565. data/spec/unit/knife/node_bulk_delete_spec.rb +0 -94
  566. data/spec/unit/knife/node_delete_spec.rb +0 -77
  567. data/spec/unit/knife/node_edit_spec.rb +0 -116
  568. data/spec/unit/knife/node_environment_set_spec.rb +0 -61
  569. data/spec/unit/knife/node_from_file_spec.rb +0 -59
  570. data/spec/unit/knife/node_list_spec.rb +0 -62
  571. data/spec/unit/knife/node_policy_set_spec.rb +0 -122
  572. data/spec/unit/knife/node_run_list_add_spec.rb +0 -145
  573. data/spec/unit/knife/node_run_list_remove_spec.rb +0 -106
  574. data/spec/unit/knife/node_run_list_set_spec.rb +0 -115
  575. data/spec/unit/knife/node_show_spec.rb +0 -65
  576. data/spec/unit/knife/raw_spec.rb +0 -43
  577. data/spec/unit/knife/role_bulk_delete_spec.rb +0 -80
  578. data/spec/unit/knife/role_create_spec.rb +0 -80
  579. data/spec/unit/knife/role_delete_spec.rb +0 -67
  580. data/spec/unit/knife/role_edit_spec.rb +0 -77
  581. data/spec/unit/knife/role_env_run_list_add_spec.rb +0 -217
  582. data/spec/unit/knife/role_env_run_list_clear_spec.rb +0 -94
  583. data/spec/unit/knife/role_env_run_list_remove_spec.rb +0 -102
  584. data/spec/unit/knife/role_env_run_list_replace_spec.rb +0 -105
  585. data/spec/unit/knife/role_env_run_list_set_spec.rb +0 -99
  586. data/spec/unit/knife/role_from_file_spec.rb +0 -69
  587. data/spec/unit/knife/role_list_spec.rb +0 -54
  588. data/spec/unit/knife/role_run_list_add_spec.rb +0 -179
  589. data/spec/unit/knife/role_run_list_clear_spec.rb +0 -84
  590. data/spec/unit/knife/role_run_list_remove_spec.rb +0 -92
  591. data/spec/unit/knife/role_run_list_replace_spec.rb +0 -98
  592. data/spec/unit/knife/role_run_list_set_spec.rb +0 -89
  593. data/spec/unit/knife/role_show_spec.rb +0 -59
  594. data/spec/unit/knife/ssh_spec.rb +0 -403
  595. data/spec/unit/knife/ssl_check_spec.rb +0 -256
  596. data/spec/unit/knife/ssl_fetch_spec.rb +0 -222
  597. data/spec/unit/knife/status_spec.rb +0 -112
  598. data/spec/unit/knife/supermarket_download_spec.rb +0 -152
  599. data/spec/unit/knife/supermarket_install_spec.rb +0 -202
  600. data/spec/unit/knife/supermarket_list_spec.rb +0 -70
  601. data/spec/unit/knife/supermarket_search_spec.rb +0 -85
  602. data/spec/unit/knife/supermarket_share_spec.rb +0 -208
  603. data/spec/unit/knife/supermarket_unshare_spec.rb +0 -78
  604. data/spec/unit/knife/tag_create_spec.rb +0 -23
  605. data/spec/unit/knife/tag_delete_spec.rb +0 -25
  606. data/spec/unit/knife/tag_list_spec.rb +0 -23
  607. data/spec/unit/knife/user_create_spec.rb +0 -184
  608. data/spec/unit/knife/user_delete_spec.rb +0 -46
  609. data/spec/unit/knife/user_edit_spec.rb +0 -48
  610. data/spec/unit/knife/user_list_spec.rb +0 -36
  611. data/spec/unit/knife/user_reregister_spec.rb +0 -56
  612. data/spec/unit/knife/user_show_spec.rb +0 -46
  613. data/spec/unit/knife_spec.rb +0 -634
  614. data/spec/unit/provider/user/dscl_spec.rb +0 -699
  615. data/spec/unit/windows_service_spec.rb +0 -118
@@ -1,138 +0,0 @@
1
- # Author:: Christopher Brown (<cb@chef.io>)
2
- # Author:: Daniel DeLeo (<dan@chef.io>)
3
- # Copyright:: Copyright (c) Chef Software Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require_relative "../../version"
20
- require_relative "../../util/path_helper"
21
- class Chef
22
- class Knife
23
- class SubcommandLoader
24
- class GemGlobLoader < Chef::Knife::SubcommandLoader
25
- MATCHES_CHEF_GEM ||= %r{/chef-\d+\.\d+\.\d+}.freeze
26
- MATCHES_THIS_CHEF_GEM ||= %r{/chef-#{Chef::VERSION}(-\w+)?(-\w+)?/}.freeze
27
-
28
- def subcommand_files
29
- @subcommand_files ||= (gem_and_builtin_subcommands.values + site_subcommands).flatten.uniq
30
- end
31
-
32
- # Returns a Hash of paths to knife commands built-in to chef, or installed via gem.
33
- # If rubygems is not installed, falls back to globbing the knife directory.
34
- # The Hash is of the form {"relative/path" => "/absolute/path"}
35
- #--
36
- # Note: the "right" way to load the plugins is to require the relative path, i.e.,
37
- # require 'chef/knife/command'
38
- # but we're getting frustrated by bugs at every turn, and it's slow besides. So
39
- # subcommand loader has been modified to load the plugins by using Kernel.load
40
- # with the absolute path.
41
- def gem_and_builtin_subcommands
42
- require "rubygems" unless defined?(Gem)
43
- find_subcommands_via_rubygems
44
- rescue LoadError
45
- find_subcommands_via_dirglob
46
- end
47
-
48
- def find_subcommands_via_dirglob
49
- # The "require paths" of the core knife subcommands bundled with chef
50
- files = Dir[File.join(Chef::Util::PathHelper.escape_glob_dir(File.expand_path("../../knife", __dir__)), "*.rb")]
51
- subcommand_files = {}
52
- files.each do |knife_file|
53
- rel_path = knife_file[/#{CHEF_ROOT}#{Regexp.escape(File::SEPARATOR)}(.*)\.rb/, 1]
54
- subcommand_files[rel_path] = knife_file
55
- end
56
- subcommand_files
57
- end
58
-
59
- def find_subcommands_via_rubygems
60
- files = find_files_latest_gems "chef/knife/*.rb"
61
- subcommand_files = {}
62
- files.each do |file|
63
- rel_path = file[/(#{Regexp.escape File.join('chef', 'knife', '')}.*)\.rb/, 1]
64
-
65
- # When not installed as a gem (ChefDK/appbundler in particular), AND
66
- # a different version of Chef is installed via gems, `files` will
67
- # include some files from the 'other' Chef install. If this contains
68
- # a knife command that doesn't exist in this version of Chef, we will
69
- # get a LoadError later when we try to require it.
70
- next if from_different_chef_version?(file)
71
-
72
- subcommand_files[rel_path] = file
73
- end
74
-
75
- subcommand_files.merge(find_subcommands_via_dirglob)
76
- end
77
-
78
- private
79
-
80
- def find_files_latest_gems(glob, check_load_path = true)
81
- files = []
82
-
83
- if check_load_path
84
- files = $LOAD_PATH.map do |load_path|
85
- Dir["#{File.expand_path glob, Chef::Util::PathHelper.escape_glob_dir(load_path)}#{Gem.suffix_pattern}"]
86
- end.flatten.select { |file| File.file? file.untaint }
87
- end
88
-
89
- gem_files = latest_gem_specs.map do |spec|
90
- # Gem::Specification#matches_for_glob wasn't added until RubyGems 1.8
91
- if spec.respond_to? :matches_for_glob
92
- spec.matches_for_glob("#{glob}#{Gem.suffix_pattern}")
93
- else
94
- check_spec_for_glob(spec, glob)
95
- end
96
- end.flatten
97
-
98
- files.concat gem_files
99
- files.uniq! if check_load_path
100
-
101
- files
102
- end
103
-
104
- def latest_gem_specs
105
- @latest_gem_specs ||= if Gem::Specification.respond_to? :latest_specs
106
- Gem::Specification.latest_specs(true) # find prerelease gems
107
- else
108
- Gem.source_index.latest_specs(true)
109
- end
110
- end
111
-
112
- def check_spec_for_glob(spec, glob)
113
- dirs = if spec.require_paths.size > 1
114
- "{#{spec.require_paths.join(",")}}"
115
- else
116
- spec.require_paths.first
117
- end
118
-
119
- glob = File.join(Chef::Util::PathHelper.escape_glob_dir(spec.full_gem_path, dirs), glob)
120
-
121
- Dir[glob].map(&:untaint)
122
- end
123
-
124
- def from_different_chef_version?(path)
125
- matches_any_chef_gem?(path) && !matches_this_chef_gem?(path)
126
- end
127
-
128
- def matches_any_chef_gem?(path)
129
- path =~ MATCHES_CHEF_GEM
130
- end
131
-
132
- def matches_this_chef_gem?(path)
133
- path =~ MATCHES_THIS_CHEF_GEM
134
- end
135
- end
136
- end
137
- end
138
- end
@@ -1,232 +0,0 @@
1
- #--
2
- # Author:: Daniel DeLeo (<dan@chef.io>)
3
- # Copyright:: Copyright (c) Chef Software Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require_relative "text_formatter"
20
-
21
- class Chef
22
- class Knife
23
- module Core
24
-
25
- # Allows includer knife commands to return multiple attributes
26
- # @brief knife node show NAME -a ATTR1 -a ATTR2
27
- module MultiAttributeReturnOption
28
- # @private
29
- def self.included(includer)
30
- includer.class_eval do
31
- option :field_separator,
32
- short: "-S SEPARATOR",
33
- long: "--field-separator SEPARATOR",
34
- description: "Character separator used to delineate nesting in --attribute filters (default \".\")"
35
-
36
- option :attribute,
37
- short: "-a ATTR1 [-a ATTR2]",
38
- long: "--attribute ATTR1 [--attribute ATTR2] ",
39
- description: "Show one or more attributes",
40
- proc: Proc.new { |arg, accumulator|
41
- accumulator ||= []
42
- accumulator << arg
43
- accumulator
44
- }
45
- end
46
- end
47
- end
48
-
49
- # The base presenter class for displaying structured data in knife commands.
50
- # This is not an abstract base class, and it is suitable for displaying
51
- # most kinds of objects that knife needs to display.
52
- class GenericPresenter
53
-
54
- attr_reader :ui
55
- attr_reader :config
56
-
57
- # Instantiates a new GenericPresenter. This is generally handled by the
58
- # Chef::Knife::UI object, though you need to match the signature of this
59
- # method if you intend to use your own presenter instead.
60
- def initialize(ui, config)
61
- @ui, @config = ui, config
62
- end
63
-
64
- # Is the selected output format a data interchange format?
65
- # Returns true if the selected output format is json or yaml, false
66
- # otherwise. Knife search uses this to adjust its data output so as not
67
- # to produce invalid JSON output.
68
- def interchange?
69
- case parse_format_option
70
- when :json, :yaml
71
- true
72
- else
73
- false
74
- end
75
- end
76
-
77
- # Returns a String representation of +data+ that is suitable for output
78
- # to a terminal or perhaps for data interchange with another program.
79
- # The representation of the +data+ depends on the value of the
80
- # `config[:format]` setting.
81
- def format(data)
82
- case parse_format_option
83
- when :summary
84
- summarize(data)
85
- when :text
86
- text_format(data)
87
- when :json
88
- Chef::JSONCompat.to_json_pretty(data)
89
- when :yaml
90
- require "yaml" unless defined?(YAML)
91
- YAML.dump(data)
92
- when :pp
93
- require "stringio" unless defined?(StringIO)
94
- # If you were looking for some attribute and there is only one match
95
- # just dump the attribute value
96
- if config[:attribute] && data.length == 1
97
- data.values[0]
98
- else
99
- out = StringIO.new
100
- PP.pp(data, out)
101
- out.string
102
- end
103
- end
104
- end
105
-
106
- # Converts the user-supplied value of `config[:format]` to a Symbol
107
- # representing the desired output format.
108
- # ===Returns
109
- # returns one of :summary, :text, :json, :yaml, or :pp
110
- # ===Raises
111
- # Raises an ArgumentError if the desired output format could not be
112
- # determined from the value of `config[:format]`
113
- def parse_format_option
114
- case config[:format]
115
- when "summary", /^s/, nil
116
- :summary
117
- when "text", /^t/
118
- :text
119
- when "json", /^j/
120
- :json
121
- when "yaml", /^y/
122
- :yaml
123
- when "pp", /^p/
124
- :pp
125
- else
126
- raise ArgumentError, "Unknown output format #{config[:format]}"
127
- end
128
- end
129
-
130
- # Summarize the data. Defaults to text format output,
131
- # which may not be very summary-like
132
- def summarize(data)
133
- text_format(data)
134
- end
135
-
136
- # Converts the +data+ to a String in the text format. Uses
137
- # Chef::Knife::Core::TextFormatter
138
- def text_format(data)
139
- TextFormatter.new(data, ui).formatted_data
140
- end
141
-
142
- def format_list_for_display(list)
143
- config[:with_uri] ? list : list.keys.sort { |a, b| a <=> b }
144
- end
145
-
146
- def format_for_display(data)
147
- if formatting_subset_of_data?
148
- format_data_subset_for_display(data)
149
- elsif config[:id_only]
150
- name_or_id_for(data)
151
- elsif config[:environment] && data.respond_to?(:chef_environment)
152
- { "chef_environment" => data.chef_environment }
153
- else
154
- data
155
- end
156
- end
157
-
158
- def format_data_subset_for_display(data)
159
- subset = if config[:attribute]
160
- result = {}
161
- Array(config[:attribute]).each do |nested_value_spec|
162
- nested_value = extract_nested_value(data, nested_value_spec)
163
- result[nested_value_spec] = nested_value
164
- end
165
- result
166
- elsif config[:run_list]
167
- run_list = data.run_list.run_list
168
- { "run_list" => run_list }
169
- else
170
- raise ArgumentError, "format_data_subset_for_display requires attribute, run_list, or id_only config option to be set"
171
- end
172
- { name_or_id_for(data) => subset }
173
- end
174
-
175
- def name_or_id_for(data)
176
- data.respond_to?(:name) ? data.name : data["id"]
177
- end
178
-
179
- def formatting_subset_of_data?
180
- config[:attribute] || config[:run_list]
181
- end
182
-
183
- # GenericPresenter is used in contexts where MultiAttributeReturnOption
184
- # is not, so we need to set the default value here rather than as part
185
- # of the CLI option.
186
- def attribute_field_separator
187
- config[:field_separator] || "."
188
- end
189
-
190
- def extract_nested_value(data, nested_value_spec)
191
- nested_value_spec.split(attribute_field_separator).each do |attr|
192
- data =
193
- if data.is_a?(Array)
194
- data[attr.to_i]
195
- elsif data.respond_to?(:[], false) && data.respond_to?(:key?) && data.key?(attr)
196
- data[attr]
197
- elsif data.respond_to?(attr.to_sym, false)
198
- # handles -a chef_environment and other things that hang of the node and aren't really attributes
199
- data.public_send(attr.to_sym)
200
- else
201
- nil
202
- end
203
- end
204
- # necessary (?) for coercing objects (the run_list object?) to hashes
205
- ( !data.is_a?(Array) && data.respond_to?(:to_hash) ) ? data.to_hash : data
206
- end
207
-
208
- def format_cookbook_list_for_display(item)
209
- if config[:with_uri]
210
- item.inject({}) do |collected, (cookbook, versions)|
211
- collected[cookbook] = {}
212
- versions["versions"].each do |ver|
213
- collected[cookbook][ver["version"]] = ver["url"]
214
- end
215
- collected
216
- end
217
- else
218
- versions_by_cookbook = item.inject({}) do |collected, ( cookbook, versions )|
219
- collected[cookbook] = versions["versions"].map { |v| v["version"] }
220
- collected
221
- end
222
- key_length = versions_by_cookbook.empty? ? 0 : versions_by_cookbook.keys.map(&:size).max + 2
223
- versions_by_cookbook.sort.map do |cookbook, versions|
224
- "#{cookbook.ljust(key_length)} #{versions.join(" ")}"
225
- end
226
- end
227
- end
228
-
229
- end
230
- end
231
- end
232
- end
@@ -1,100 +0,0 @@
1
- # Author:: Steven Danna (<steve@chef.io>)
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 "../../version"
19
- class Chef
20
- class Knife
21
- class SubcommandLoader
22
- #
23
- # Load a subcommand from a pre-computed path
24
- # for the given command.
25
- #
26
- class HashedCommandLoader < Chef::Knife::SubcommandLoader
27
- KEY = "_autogenerated_command_paths".freeze
28
-
29
- attr_accessor :manifest
30
-
31
- def initialize(chef_config_dir, plugin_manifest)
32
- super(chef_config_dir)
33
- @manifest = plugin_manifest
34
- end
35
-
36
- def guess_category(args)
37
- category_words = positional_arguments(args)
38
- category_words.map! { |w| w.split("-") }.flatten!
39
- find_longest_key(manifest[KEY]["plugins_by_category"], category_words, " ")
40
- end
41
-
42
- def list_commands(pref_category = nil)
43
- if pref_category || manifest[KEY]["plugins_by_category"].key?(pref_category)
44
- commands = { pref_category => manifest[KEY]["plugins_by_category"][pref_category] }
45
- else
46
- commands = manifest[KEY]["plugins_by_category"]
47
- end
48
- # If any of the specified plugins in the manifest don't have a valid path we will
49
- # eventually get an error and the user will need to rehash - instead, lets just
50
- # print out 1 error here telling them to rehash
51
- errors = {}
52
- commands.collect { |k, v| v }.flatten.each do |command|
53
- paths = manifest[KEY]["plugins_paths"][command]
54
- if paths && paths.is_a?(Array)
55
- # It is only an error if all the paths don't exist
56
- if paths.all? { |sc| !File.exist?(sc) }
57
- errors[command] = paths
58
- end
59
- end
60
- end
61
- if errors.empty?
62
- commands
63
- else
64
- Chef::Log.error "There are plugin files specified in the knife cache that cannot be found. Please run knife rehash to update the subcommands cache. If you see this error after rehashing delete the cache at #{Chef::Knife::SubcommandLoader.plugin_manifest_path}"
65
- Chef::Log.error "Missing files:\n\t#{errors.values.flatten.join("\n\t")}"
66
- {}
67
- end
68
- end
69
-
70
- def subcommand_files
71
- manifest[KEY]["plugins_paths"].values.flatten
72
- end
73
-
74
- def load_command(args)
75
- paths = manifest[KEY]["plugins_paths"][subcommand_for_args(args)]
76
- if paths.nil? || paths.empty? || (! paths.is_a? Array)
77
- false
78
- else
79
- paths.each do |sc|
80
- if File.exist?(sc)
81
- Kernel.load sc
82
- else
83
- return false
84
- end
85
- end
86
- true
87
- end
88
- end
89
-
90
- def subcommand_for_args(args)
91
- if manifest[KEY]["plugins_paths"].key?(args)
92
- args
93
- else
94
- find_longest_key(manifest[KEY]["plugins_paths"], args, "_")
95
- end
96
- end
97
- end
98
- end
99
- end
100
- end