chef 12.18.31 → 13.0.118

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 (611) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +15 -11
  3. data/README.md +13 -13
  4. data/Rakefile +1 -19
  5. data/VERSION +1 -1
  6. data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +1 -1
  7. data/acceptance/Gemfile +8 -5
  8. data/acceptance/Gemfile.lock +90 -81
  9. data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +1 -1
  10. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +1 -1
  11. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +4 -0
  12. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +9 -8
  13. data/chef-universal-mingw32.gemspec +2 -3
  14. data/chef.gemspec +8 -7
  15. data/lib/chef/api_client.rb +8 -15
  16. data/lib/chef/api_client_v1.rb +9 -11
  17. data/lib/chef/application/apply.rb +8 -10
  18. data/lib/chef/application/client.rb +1 -1
  19. data/lib/chef/application/exit_code.rb +11 -82
  20. data/lib/chef/application/knife.rb +2 -2
  21. data/lib/chef/application/solo.rb +0 -1
  22. data/lib/chef/application/windows_service.rb +36 -37
  23. data/lib/chef/application/windows_service_manager.rb +1 -1
  24. data/lib/chef/application.rb +15 -25
  25. data/lib/chef/audit/audit_event_proxy.rb +2 -2
  26. data/lib/chef/audit/control_group_data.rb +1 -1
  27. data/lib/chef/blacklist.rb +81 -0
  28. data/lib/chef/chef_class.rb +1 -0
  29. data/lib/chef/chef_fs/chef_fs_data_store.rb +6 -8
  30. data/lib/chef/chef_fs/command_line.rb +15 -16
  31. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
  32. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  33. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  34. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  35. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  36. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
  37. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
  38. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
  39. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  40. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
  41. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  42. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +2 -2
  43. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +6 -2
  44. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +18 -32
  45. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +8 -10
  46. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +5 -1
  47. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +8 -10
  48. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +10 -12
  49. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +28 -30
  50. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +1 -1
  51. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +27 -29
  52. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +29 -26
  53. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +5 -1
  54. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
  55. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +10 -12
  56. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +13 -16
  57. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +9 -13
  58. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +2 -0
  59. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +1 -1
  60. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +3 -0
  61. data/lib/chef/chef_fs/file_system.rb +1 -1
  62. data/lib/chef/chef_fs/parallelizer.rb +9 -11
  63. data/lib/chef/client.rb +47 -11
  64. data/lib/chef/config_fetcher.rb +4 -4
  65. data/lib/chef/constants.rb +1 -1
  66. data/lib/chef/cookbook/cookbook_version_loader.rb +26 -115
  67. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  68. data/lib/chef/cookbook/gem_installer.rb +10 -6
  69. data/lib/chef/cookbook/manifest_v0.rb +68 -0
  70. data/lib/chef/cookbook/manifest_v2.rb +41 -0
  71. data/lib/chef/cookbook/metadata.rb +25 -134
  72. data/lib/chef/cookbook/remote_file_vendor.rb +3 -3
  73. data/lib/chef/cookbook/synchronizer.rb +24 -21
  74. data/lib/chef/cookbook/syntax_check.rb +1 -1
  75. data/lib/chef/cookbook_manifest.rb +91 -65
  76. data/lib/chef/cookbook_site_streaming_uploader.rb +7 -9
  77. data/lib/chef/cookbook_uploader.rb +1 -1
  78. data/lib/chef/cookbook_version.rb +69 -157
  79. data/lib/chef/data_bag.rb +1 -7
  80. data/lib/chef/data_bag_item.rb +5 -10
  81. data/lib/chef/data_collector/messages.rb +2 -0
  82. data/lib/chef/data_collector/resource_report.rb +32 -4
  83. data/lib/chef/data_collector.rb +3 -4
  84. data/lib/chef/decorator/unchain.rb +0 -16
  85. data/lib/chef/decorator.rb +1 -1
  86. data/lib/chef/deprecated.rb +53 -19
  87. data/lib/chef/dsl/audit.rb +2 -2
  88. data/lib/chef/dsl/declare_resource.rb +11 -17
  89. data/lib/chef/dsl/platform_introspection.rb +29 -31
  90. data/lib/chef/dsl/reboot_pending.rb +1 -1
  91. data/lib/chef/dsl/recipe.rb +1 -4
  92. data/lib/chef/dsl/resources.rb +4 -13
  93. data/lib/chef/encrypted_data_bag_item.rb +2 -2
  94. data/lib/chef/environment.rb +9 -16
  95. data/lib/chef/event_dispatch/base.rb +16 -0
  96. data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
  97. data/lib/chef/exceptions.rb +6 -10
  98. data/lib/chef/file_access_control/unix.rb +14 -14
  99. data/lib/chef/file_access_control/windows.rb +1 -1
  100. data/lib/chef/formatters/error_description.rb +18 -1
  101. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +4 -5
  102. data/lib/chef/formatters/error_mapper.rb +6 -6
  103. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +4 -2
  104. data/lib/chef/http/api_versions.rb +54 -0
  105. data/lib/chef/http/authenticator.rb +15 -6
  106. data/lib/chef/http/json_output.rb +4 -1
  107. data/lib/chef/http/socketless_chef_zero_client.rb +1 -0
  108. data/lib/chef/http/validate_content_length.rb +2 -2
  109. data/lib/chef/http.rb +39 -0
  110. data/lib/chef/json_compat.rb +7 -103
  111. data/lib/chef/key.rb +5 -10
  112. data/lib/chef/knife/bootstrap/templates/chef-full.erb +6 -6
  113. data/lib/chef/knife/bootstrap.rb +6 -0
  114. data/lib/chef/knife/configure.rb +1 -3
  115. data/lib/chef/knife/configure_client.rb +1 -3
  116. data/lib/chef/knife/cookbook_create.rb +1 -434
  117. data/lib/chef/knife/cookbook_download.rb +3 -4
  118. data/lib/chef/knife/cookbook_show.rb +7 -3
  119. data/lib/chef/knife/cookbook_site_install.rb +2 -2
  120. data/lib/chef/knife/core/bootstrap_context.rb +8 -7
  121. data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
  122. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  123. data/lib/chef/knife/core/status_presenter.rb +1 -1
  124. data/lib/chef/knife/core/subcommand_loader.rb +2 -32
  125. data/lib/chef/knife/core/ui.rb +20 -27
  126. data/lib/chef/knife/data_bag_create.rb +6 -4
  127. data/lib/chef/knife/data_bag_secret_options.rb +1 -1
  128. data/lib/chef/knife/deps.rb +32 -34
  129. data/lib/chef/knife/edit.rb +1 -1
  130. data/lib/chef/knife/help.rb +1 -1
  131. data/lib/chef/knife/list.rb +1 -1
  132. data/lib/chef/knife/search.rb +9 -20
  133. data/lib/chef/knife/ssh.rb +62 -36
  134. data/lib/chef/knife/ssl_check.rb +1 -1
  135. data/lib/chef/knife/user_delete.rb +1 -1
  136. data/lib/chef/knife/xargs.rb +1 -1
  137. data/lib/chef/knife.rb +6 -7
  138. data/lib/chef/mash.rb +1 -1
  139. data/lib/chef/mixin/create_path.rb +3 -5
  140. data/lib/chef/mixin/from_file.rb +2 -2
  141. data/lib/chef/mixin/get_source_from_package.rb +2 -2
  142. data/lib/chef/mixin/notifying_block.rb +7 -9
  143. data/lib/chef/mixin/params_validate.rb +9 -8
  144. data/lib/chef/mixin/path_sanity.rb +17 -19
  145. data/lib/chef/mixin/securable.rb +1 -1
  146. data/lib/chef/mixin/shell_out.rb +33 -29
  147. data/lib/chef/mixin/unformatter.rb +2 -2
  148. data/lib/chef/mixin/uris.rb +4 -6
  149. data/lib/chef/mixin/versioned_api.rb +84 -0
  150. data/lib/chef/mixin/which.rb +25 -8
  151. data/lib/chef/mixin/windows_architecture_helper.rb +2 -2
  152. data/lib/chef/mixin/xml_escape.rb +3 -5
  153. data/lib/chef/mixins.rb +0 -1
  154. data/lib/chef/monkey_patches/webrick-utils.rb +1 -1
  155. data/lib/chef/node/attribute.rb +9 -32
  156. data/lib/chef/node/attribute_collections.rb +1 -19
  157. data/lib/chef/node/common_api.rb +5 -7
  158. data/lib/chef/node/immutable_collections.rb +42 -38
  159. data/lib/chef/node/mixin/immutablize_array.rb +1 -1
  160. data/lib/chef/node/mixin/immutablize_hash.rb +1 -1
  161. data/lib/chef/node.rb +21 -20
  162. data/lib/chef/node_map.rb +2 -5
  163. data/lib/chef/org.rb +10 -17
  164. data/lib/chef/platform/provider_mapping.rb +2 -169
  165. data/lib/chef/platform/query_helpers.rb +1 -1
  166. data/lib/chef/platform/rebooter.rb +1 -2
  167. data/lib/chef/policy_builder/expand_node_object.rb +3 -29
  168. data/lib/chef/policy_builder/policyfile.rb +8 -6
  169. data/lib/chef/property.rb +66 -80
  170. data/lib/chef/provider/apt_repository.rb +6 -10
  171. data/lib/chef/provider/apt_update.rb +1 -7
  172. data/lib/chef/provider/batch.rb +1 -1
  173. data/lib/chef/provider/breakpoint.rb +2 -2
  174. data/lib/chef/provider/cookbook_file.rb +3 -9
  175. data/lib/chef/provider/cron.rb +42 -60
  176. data/lib/chef/provider/deploy/revision.rb +3 -5
  177. data/lib/chef/provider/deploy.rb +82 -88
  178. data/lib/chef/provider/directory.rb +33 -37
  179. data/lib/chef/provider/dsc_resource.rb +23 -11
  180. data/lib/chef/provider/dsc_script.rb +1 -5
  181. data/lib/chef/provider/env/windows.rb +5 -1
  182. data/lib/chef/provider/env.rb +32 -30
  183. data/lib/chef/provider/erl_call.rb +15 -47
  184. data/lib/chef/provider/execute.rb +7 -8
  185. data/lib/chef/provider/file.rb +49 -61
  186. data/lib/chef/provider/git.rb +56 -60
  187. data/lib/chef/provider/group.rb +1 -7
  188. data/lib/chef/provider/http_request.rb +37 -41
  189. data/lib/chef/provider/ifconfig/redhat.rb +1 -1
  190. data/lib/chef/provider/ifconfig.rb +0 -6
  191. data/lib/chef/provider/launchd.rb +6 -2
  192. data/lib/chef/provider/link.rb +51 -55
  193. data/lib/chef/provider/log.rb +3 -7
  194. data/lib/chef/provider/lwrp_base.rb +0 -9
  195. data/lib/chef/provider/mdadm.rb +25 -33
  196. data/lib/chef/provider/mount/aix.rb +2 -2
  197. data/lib/chef/provider/mount/mount.rb +2 -2
  198. data/lib/chef/provider/mount.rb +1 -5
  199. data/lib/chef/provider/noop.rb +1 -1
  200. data/lib/chef/provider/ohai.rb +1 -7
  201. data/lib/chef/provider/osx_profile.rb +24 -29
  202. data/lib/chef/provider/package/aix.rb +55 -53
  203. data/lib/chef/provider/package/apt.rb +15 -13
  204. data/lib/chef/provider/package/cab.rb +48 -20
  205. data/lib/chef/provider/package/chocolatey.rb +9 -10
  206. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  207. data/lib/chef/provider/package/dnf/python_helper.rb +63 -26
  208. data/lib/chef/provider/package/dnf/version.rb +1 -1
  209. data/lib/chef/provider/package/dnf.rb +21 -19
  210. data/lib/chef/provider/package/dpkg.rb +8 -9
  211. data/lib/chef/provider/package/freebsd/base.rb +10 -10
  212. data/lib/chef/provider/package/freebsd/pkg.rb +15 -15
  213. data/lib/chef/provider/package/freebsd/pkgng.rb +13 -15
  214. data/lib/chef/provider/package/freebsd/port.rb +7 -7
  215. data/lib/chef/provider/package/homebrew.rb +11 -10
  216. data/lib/chef/provider/package/ips.rb +18 -24
  217. data/lib/chef/provider/package/macports.rb +23 -23
  218. data/lib/chef/provider/package/msu.rb +11 -12
  219. data/lib/chef/provider/package/openbsd.rb +25 -22
  220. data/lib/chef/provider/package/pacman.rb +16 -17
  221. data/lib/chef/provider/package/paludis.rb +26 -27
  222. data/lib/chef/provider/package/portage.rb +22 -23
  223. data/lib/chef/provider/package/powershell.rb +17 -17
  224. data/lib/chef/provider/package/rpm.rb +25 -26
  225. data/lib/chef/provider/package/rubygems.rb +64 -62
  226. data/lib/chef/provider/package/smartos.rb +16 -16
  227. data/lib/chef/provider/package/solaris.rb +44 -45
  228. data/lib/chef/provider/package/windows/exe.rb +6 -6
  229. data/lib/chef/provider/package/windows/msi.rb +7 -7
  230. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -3
  231. data/lib/chef/provider/package/windows.rb +3 -3
  232. data/lib/chef/provider/package/yum/rpm_utils.rb +34 -34
  233. data/lib/chef/provider/package/yum/yum_cache.rb +12 -12
  234. data/lib/chef/provider/package/yum.rb +319 -269
  235. data/lib/chef/provider/package/zypper.rb +10 -20
  236. data/lib/chef/provider/package.rb +71 -63
  237. data/lib/chef/provider/powershell_script.rb +15 -7
  238. data/lib/chef/provider/reboot.rb +10 -14
  239. data/lib/chef/provider/registry_key.rb +39 -43
  240. data/lib/chef/provider/remote_directory.rb +3 -15
  241. data/lib/chef/provider/remote_file.rb +3 -9
  242. data/lib/chef/provider/route.rb +1 -7
  243. data/lib/chef/provider/ruby_block.rb +4 -8
  244. data/lib/chef/provider/script.rb +42 -6
  245. data/lib/chef/provider/service/aix.rb +1 -5
  246. data/lib/chef/provider/service/debian.rb +15 -21
  247. data/lib/chef/provider/service/freebsd.rb +0 -1
  248. data/lib/chef/provider/service/gentoo.rb +0 -1
  249. data/lib/chef/provider/service/init.rb +0 -1
  250. data/lib/chef/provider/service/insserv.rb +2 -2
  251. data/lib/chef/provider/service/openbsd.rb +0 -1
  252. data/lib/chef/provider/service/redhat.rb +2 -2
  253. data/lib/chef/provider/service/simple.rb +0 -5
  254. data/lib/chef/provider/service/solaris.rb +5 -4
  255. data/lib/chef/provider/service/systemd.rb +1 -1
  256. data/lib/chef/provider/service/upstart.rb +10 -12
  257. data/lib/chef/provider/service/windows.rb +1 -5
  258. data/lib/chef/provider/service.rb +51 -58
  259. data/lib/chef/provider/subversion.rb +40 -46
  260. data/lib/chef/provider/systemd_unit.rb +2 -0
  261. data/lib/chef/provider/template/content.rb +24 -1
  262. data/lib/chef/provider/template.rb +3 -9
  263. data/lib/chef/provider/user/dscl.rb +3 -3
  264. data/lib/chef/provider/user/linux.rb +6 -5
  265. data/lib/chef/provider/user/pw.rb +4 -10
  266. data/lib/chef/provider/user/solaris.rb +2 -2
  267. data/lib/chef/provider/user/useradd.rb +5 -5
  268. data/lib/chef/provider/user.rb +43 -59
  269. data/lib/chef/provider/whyrun_safe_ruby_block.rb +4 -4
  270. data/lib/chef/provider/windows_task.rb +418 -0
  271. data/lib/chef/provider/yum_repository.rb +3 -6
  272. data/lib/chef/provider.rb +63 -115
  273. data/lib/chef/provider_resolver.rb +8 -34
  274. data/lib/chef/providers.rb +1 -1
  275. data/lib/chef/recipe.rb +9 -1
  276. data/lib/chef/resource/action_class.rb +13 -17
  277. data/lib/chef/resource/apt_repository.rb +0 -1
  278. data/lib/chef/resource/apt_update.rb +3 -1
  279. data/lib/chef/resource/chef_gem.rb +4 -11
  280. data/lib/chef/resource/chocolatey_package.rb +4 -1
  281. data/lib/chef/resource/dnf_package.rb +6 -3
  282. data/lib/chef/resource/dsc_resource.rb +9 -1
  283. data/lib/chef/resource/execute.rb +66 -19
  284. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -0
  285. data/lib/chef/resource/file/verification.rb +2 -7
  286. data/lib/chef/resource/freebsd_package.rb +1 -1
  287. data/lib/chef/resource/gem_package.rb +16 -2
  288. data/lib/chef/resource/launchd.rb +3 -3
  289. data/lib/chef/resource/lwrp_base.rb +0 -2
  290. data/lib/chef/resource/mount.rb +5 -12
  291. data/lib/chef/resource/package.rb +2 -2
  292. data/lib/chef/resource/powershell_script.rb +1 -1
  293. data/lib/chef/resource/registry_key.rb +1 -1
  294. data/lib/chef/resource/script.rb +8 -34
  295. data/lib/chef/resource/service.rb +15 -13
  296. data/lib/chef/resource/systemd_unit.rb +5 -0
  297. data/lib/chef/resource/user/aix_user.rb +1 -1
  298. data/lib/chef/resource/user/dscl_user.rb +1 -1
  299. data/lib/chef/resource/user/linux_user.rb +1 -10
  300. data/lib/chef/resource/user/pw_user.rb +1 -1
  301. data/lib/chef/resource/user/solaris_user.rb +1 -1
  302. data/lib/chef/resource/user/windows_user.rb +1 -1
  303. data/lib/chef/resource/user.rb +1 -19
  304. data/lib/chef/resource/windows_package.rb +4 -1
  305. data/lib/chef/resource/windows_task.rb +237 -0
  306. data/lib/chef/resource/yum_package.rb +13 -4
  307. data/lib/chef/resource/yum_repository.rb +0 -1
  308. data/lib/chef/resource/zypper_package.rb +2 -0
  309. data/lib/chef/resource.rb +90 -202
  310. data/lib/chef/resource_builder.rb +1 -65
  311. data/lib/chef/resource_collection/resource_collection_serialization.rb +11 -4
  312. data/lib/chef/resource_collection/resource_list.rb +6 -0
  313. data/lib/chef/resource_collection/resource_set.rb +44 -17
  314. data/lib/chef/resource_collection.rb +10 -0
  315. data/lib/chef/resource_reporter.rb +1 -1
  316. data/lib/chef/resource_resolver.rb +1 -25
  317. data/lib/chef/resources.rb +1 -1
  318. data/lib/chef/role.rb +0 -6
  319. data/lib/chef/run_context/cookbook_compiler.rb +49 -5
  320. data/lib/chef/run_context.rb +4 -25
  321. data/lib/chef/run_list/run_list_item.rb +1 -1
  322. data/lib/chef/run_list/versioned_recipe_list.rb +14 -12
  323. data/lib/chef/search/query.rb +26 -31
  324. data/lib/chef/server_api.rb +2 -0
  325. data/lib/chef/{resource/easy_install_package.rb → server_api_versions.rb} +18 -10
  326. data/lib/chef/shell/ext.rb +3 -3
  327. data/lib/chef/shell/shell_session.rb +14 -4
  328. data/lib/chef/shell.rb +32 -7
  329. data/lib/chef/user.rb +9 -16
  330. data/lib/chef/user_v1.rb +9 -16
  331. data/lib/chef/util/diff.rb +1 -1
  332. data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
  333. data/lib/chef/util/selinux.rb +1 -1
  334. data/lib/chef/util/windows/net_group.rb +18 -30
  335. data/lib/chef/util/windows/net_use.rb +7 -11
  336. data/lib/chef/util/windows/net_user.rb +12 -18
  337. data/lib/chef/util/windows/volume.rb +9 -15
  338. data/lib/chef/version.rb +1 -1
  339. data/lib/chef/version_class.rb +1 -1
  340. data/lib/chef/win32/api/file.rb +25 -31
  341. data/lib/chef/win32/api/installer.rb +2 -2
  342. data/lib/chef/win32/api.rb +4 -6
  343. data/lib/chef/win32/file.rb +4 -6
  344. data/lib/chef/win32/registry.rb +9 -9
  345. data/lib/chef/win32/security/acl.rb +2 -2
  346. data/lib/chef/win32/security/sid.rb +5 -0
  347. data/lib/chef/win32/security.rb +2 -2
  348. data/lib/chef/win32/unicode.rb +2 -2
  349. data/lib/chef/win32/version.rb +1 -1
  350. data/lib/chef.rb +1 -2
  351. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -0
  352. data/spec/data/lwrp/providers/buck_passer.rb +1 -1
  353. data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
  354. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
  355. data/spec/data/lwrp/providers/inline_compiler.rb +0 -2
  356. data/spec/data/lwrp/resources/buck_passer.rb +5 -0
  357. data/spec/data/lwrp/resources/buck_passer_2.rb +3 -0
  358. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -0
  359. data/spec/data/lwrp/resources/inline_compiler.rb +3 -0
  360. data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -0
  361. data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -0
  362. data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -0
  363. data/spec/data/prefer_metadata_json/metadata.json +51 -0
  364. data/spec/data/prefer_metadata_json/metadata.rb +6 -0
  365. data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
  366. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -0
  367. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -0
  368. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -0
  369. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -0
  370. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -0
  371. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -0
  372. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -0
  373. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -0
  374. data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -0
  375. data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -0
  376. data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -0
  377. data/spec/data/shef-config.rb +11 -10
  378. data/spec/functional/knife/ssh_spec.rb +34 -6
  379. data/spec/functional/rebooter_spec.rb +1 -0
  380. data/spec/functional/resource/bash_spec.rb +11 -45
  381. data/spec/functional/resource/batch_spec.rb +5 -1
  382. data/spec/functional/resource/cron_spec.rb +2 -2
  383. data/spec/functional/resource/dsc_script_spec.rb +2 -4
  384. data/spec/functional/resource/execute_spec.rb +17 -0
  385. data/spec/functional/resource/link_spec.rb +3 -3
  386. data/spec/functional/resource/template_spec.rb +33 -0
  387. data/spec/functional/resource/user/dscl_spec.rb +2 -4
  388. data/spec/functional/root_alias_spec.rb +78 -0
  389. data/spec/functional/shell_spec.rb +38 -40
  390. data/spec/integration/client/client_spec.rb +109 -16
  391. data/spec/integration/client/exit_code_spec.rb +1 -105
  392. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -97
  393. data/spec/integration/knife/cookbook_download_spec.rb +0 -24
  394. data/spec/integration/knife/cookbook_show_spec.rb +12 -23
  395. data/spec/integration/knife/deps_spec.rb +5 -9
  396. data/spec/integration/knife/search_node_spec.rb +39 -0
  397. data/spec/integration/knife/serve_spec.rb +58 -22
  398. data/spec/integration/knife/upload_spec.rb +3 -11
  399. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +7 -11
  400. data/spec/integration/recipes/notifies_spec.rb +60 -0
  401. data/spec/integration/recipes/recipe_dsl_spec.rb +76 -226
  402. data/spec/integration/recipes/resource_action_spec.rb +37 -30
  403. data/spec/spec_helper.rb +7 -0
  404. data/spec/support/chef_helpers.rb +5 -7
  405. data/spec/support/platform_helpers.rb +10 -3
  406. data/spec/support/platforms/prof/gc.rb +4 -6
  407. data/spec/support/shared/context/client.rb +9 -2
  408. data/spec/support/shared/functional/execute_resource.rb +150 -0
  409. data/spec/support/shared/functional/windows_script.rb +74 -4
  410. data/spec/support/shared/integration/knife_support.rb +1 -1
  411. data/spec/support/shared/unit/execute_resource.rb +37 -9
  412. data/spec/support/shared/unit/provider/file.rb +10 -0
  413. data/spec/support/shared/unit/script_resource.rb +1 -9
  414. data/spec/unit/application/exit_code_spec.rb +4 -89
  415. data/spec/unit/application_spec.rb +39 -29
  416. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +1 -1
  417. data/spec/unit/client_spec.rb +72 -31
  418. data/spec/unit/config_fetcher_spec.rb +2 -2
  419. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +31 -19
  420. data/spec/unit/cookbook/file_vendor_spec.rb +20 -9
  421. data/spec/unit/cookbook/gem_installer_spec.rb +85 -0
  422. data/spec/unit/cookbook/manifest_v0_spec.rb +133 -0
  423. data/spec/unit/cookbook/manifest_v2_spec.rb +70 -0
  424. data/spec/unit/cookbook/metadata_spec.rb +29 -108
  425. data/spec/unit/cookbook/synchronizer_spec.rb +5 -6
  426. data/spec/unit/cookbook/syntax_check_spec.rb +9 -2
  427. data/spec/unit/cookbook_loader_spec.rb +17 -19
  428. data/spec/unit/cookbook_manifest_spec.rb +12 -44
  429. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -4
  430. data/spec/unit/cookbook_spec.rb +10 -14
  431. data/spec/unit/cookbook_uploader_spec.rb +1 -1
  432. data/spec/unit/cookbook_version_file_specificity_spec.rb +55 -28
  433. data/spec/unit/cookbook_version_spec.rb +19 -128
  434. data/spec/unit/data_bag_item_spec.rb +4 -0
  435. data/spec/unit/data_collector/messages_spec.rb +137 -0
  436. data/spec/unit/data_collector/resource_report_spec.rb +145 -0
  437. data/spec/unit/deprecation_spec.rb +0 -14
  438. data/spec/unit/encrypted_data_bag_item_spec.rb +6 -6
  439. data/spec/unit/formatters/error_description_spec.rb +52 -7
  440. data/spec/unit/http/api_versions_spec.rb +79 -0
  441. data/spec/unit/http/authenticator_spec.rb +20 -0
  442. data/spec/unit/http/socketless_chef_zero_client_spec.rb +2 -1
  443. data/spec/unit/json_compat_spec.rb +0 -32
  444. data/spec/unit/knife/bootstrap_spec.rb +34 -0
  445. data/spec/unit/knife/configure_client_spec.rb +0 -2
  446. data/spec/unit/knife/cookbook_create_spec.rb +1 -220
  447. data/spec/unit/knife/cookbook_download_spec.rb +46 -28
  448. data/spec/unit/knife/cookbook_show_spec.rb +42 -9
  449. data/spec/unit/knife/core/bootstrap_context_spec.rb +17 -0
  450. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +1 -1
  451. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -6
  452. data/spec/unit/knife/core/ui_spec.rb +21 -11
  453. data/spec/unit/knife/data_bag_create_spec.rb +65 -45
  454. data/spec/unit/knife/ssh_spec.rb +34 -36
  455. data/spec/unit/knife_spec.rb +2 -2
  456. data/spec/unit/lwrp_spec.rb +38 -127
  457. data/spec/unit/mixin/path_sanity_spec.rb +7 -7
  458. data/spec/unit/mixin/shell_out_spec.rb +18 -84
  459. data/spec/unit/mixin/versioned_api_spec.rb +128 -0
  460. data/spec/unit/mixin/which.rb +160 -0
  461. data/spec/unit/node/attribute_spec.rb +65 -33
  462. data/spec/unit/node/immutable_collections_spec.rb +104 -1
  463. data/spec/unit/node_map_spec.rb +1 -23
  464. data/spec/unit/node_spec.rb +81 -98
  465. data/spec/unit/policy_builder/expand_node_object_spec.rb +2 -27
  466. data/spec/unit/policy_builder/policyfile_spec.rb +12 -12
  467. data/spec/unit/property/validation_spec.rb +51 -69
  468. data/spec/unit/property_spec.rb +105 -125
  469. data/spec/unit/provider/apt_repository_spec.rb +33 -27
  470. data/spec/unit/provider/cron_spec.rb +15 -39
  471. data/spec/unit/provider/deploy_spec.rb +1 -1
  472. data/spec/unit/provider/directory_spec.rb +10 -0
  473. data/spec/unit/provider/dsc_resource_spec.rb +175 -0
  474. data/spec/unit/provider/erl_call_spec.rb +5 -13
  475. data/spec/unit/provider/execute_spec.rb +3 -14
  476. data/spec/unit/provider/launchd_spec.rb +2 -2
  477. data/spec/unit/provider/package/aix_spec.rb +22 -22
  478. data/spec/unit/provider/package/apt_spec.rb +37 -27
  479. data/spec/unit/provider/package/cab_spec.rb +59 -5
  480. data/{lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb → spec/unit/provider/package/dnf/python_helper_spec.rb} +10 -15
  481. data/spec/unit/provider/package/dpkg_spec.rb +16 -16
  482. data/spec/unit/provider/package/freebsd/pkg_spec.rb +15 -15
  483. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  484. data/spec/unit/provider/package/freebsd/port_spec.rb +9 -9
  485. data/spec/unit/provider/package/homebrew_spec.rb +9 -9
  486. data/spec/unit/provider/package/ips_spec.rb +37 -31
  487. data/spec/unit/provider/package/macports_spec.rb +10 -10
  488. data/spec/unit/provider/package/openbsd_spec.rb +10 -10
  489. data/spec/unit/provider/package/pacman_spec.rb +6 -6
  490. data/spec/unit/provider/package/paludis_spec.rb +7 -7
  491. data/spec/unit/provider/package/portage_spec.rb +6 -7
  492. data/spec/unit/provider/package/rpm_spec.rb +23 -23
  493. data/spec/unit/provider/package/rubygems_spec.rb +135 -46
  494. data/spec/unit/provider/package/solaris_spec.rb +15 -15
  495. data/spec/unit/provider/package/windows/msi_spec.rb +1 -1
  496. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +25 -0
  497. data/spec/unit/provider/package/windows_spec.rb +2 -1
  498. data/spec/unit/provider/package/yum_spec.rb +58 -50
  499. data/spec/unit/provider/package/zypper_spec.rb +54 -97
  500. data/spec/unit/provider/package_spec.rb +8 -0
  501. data/spec/unit/provider/powershell_script_spec.rb +14 -4
  502. data/spec/unit/provider/remote_file/sftp_spec.rb +3 -3
  503. data/spec/unit/provider/route_spec.rb +7 -1
  504. data/spec/unit/provider/script_spec.rb +49 -6
  505. data/spec/unit/provider/service/debian_service_spec.rb +14 -20
  506. data/spec/unit/provider/service/solaris_smf_service_spec.rb +37 -1
  507. data/spec/unit/provider/service/upstart_service_spec.rb +12 -25
  508. data/spec/unit/provider/subversion_spec.rb +2 -2
  509. data/spec/unit/provider/user/linux_spec.rb +5 -43
  510. data/spec/unit/provider/user/pw_spec.rb +7 -27
  511. data/spec/unit/provider/windows_task_spec.rb +392 -0
  512. data/spec/unit/provider_resolver_spec.rb +0 -1
  513. data/spec/unit/provider_spec.rb +10 -3
  514. data/spec/unit/recipe_spec.rb +3 -172
  515. data/spec/unit/resource/chef_gem_spec.rb +16 -62
  516. data/spec/unit/resource/conditional_spec.rb +4 -4
  517. data/spec/unit/resource/cookbook_file_spec.rb +2 -2
  518. data/spec/unit/resource/cron_spec.rb +1 -1
  519. data/spec/unit/resource/deploy_spec.rb +4 -4
  520. data/spec/unit/resource/directory_spec.rb +2 -2
  521. data/spec/unit/resource/dsc_resource_spec.rb +6 -0
  522. data/spec/unit/resource/env_spec.rb +1 -1
  523. data/spec/unit/resource/execute_spec.rb +215 -1
  524. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -0
  525. data/spec/unit/resource/file/verification_spec.rb +8 -14
  526. data/spec/unit/resource/file_spec.rb +3 -3
  527. data/spec/unit/resource/freebsd_package_spec.rb +2 -2
  528. data/spec/unit/resource/group_spec.rb +2 -2
  529. data/spec/unit/resource/ifconfig_spec.rb +1 -1
  530. data/spec/unit/resource/link_spec.rb +2 -2
  531. data/spec/unit/resource/mdadm_spec.rb +1 -1
  532. data/spec/unit/resource/mount_spec.rb +3 -3
  533. data/spec/unit/resource/ohai_spec.rb +1 -1
  534. data/spec/unit/resource/package_spec.rb +14 -4
  535. data/spec/unit/resource/registry_key_spec.rb +2 -2
  536. data/spec/unit/resource/remote_directory_spec.rb +2 -2
  537. data/spec/unit/resource/remote_file_spec.rb +2 -2
  538. data/spec/unit/resource/route_spec.rb +1 -1
  539. data/spec/unit/resource/scm_spec.rb +2 -2
  540. data/spec/unit/resource/script_spec.rb +1 -1
  541. data/spec/unit/resource/service_spec.rb +25 -5
  542. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  543. data/spec/unit/resource/template_spec.rb +2 -2
  544. data/spec/unit/resource/user_spec.rb +6 -6
  545. data/spec/unit/resource/windows_task_spec.rb +213 -0
  546. data/spec/unit/resource/yum_package_spec.rb +42 -1
  547. data/spec/unit/resource_collection/resource_set_spec.rb +46 -1
  548. data/spec/unit/resource_collection_spec.rb +4 -3
  549. data/spec/unit/resource_reporter_spec.rb +6 -6
  550. data/spec/unit/resource_spec.rb +55 -71
  551. data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -3
  552. data/spec/unit/run_list/versioned_recipe_list_spec.rb +7 -4
  553. data/spec/unit/runner_spec.rb +10 -28
  554. data/spec/unit/search/query_spec.rb +32 -34
  555. data/spec/unit/server_api_versions_spec.rb +44 -0
  556. data/spec/unit/shell/shell_session_spec.rb +33 -2
  557. data/spec/unit/util/selinux_spec.rb +3 -14
  558. data/spec/unit/win32/error_spec.rb +67 -0
  559. data/spec/unit/win32/security_spec.rb +66 -0
  560. data/tasks/bundle.rb +36 -52
  561. data/tasks/changelog.rb +1 -1
  562. data/tasks/dependencies.rb +54 -52
  563. data/tasks/version.rb +41 -0
  564. metadata +91 -76
  565. data/lib/chef/deprecation/mixin/template.rb +0 -48
  566. data/lib/chef/deprecation/provider/cookbook_file.rb +0 -54
  567. data/lib/chef/deprecation/provider/file.rb +0 -198
  568. data/lib/chef/deprecation/provider/remote_directory.rb +0 -52
  569. data/lib/chef/deprecation/provider/remote_file.rb +0 -85
  570. data/lib/chef/deprecation/provider/template.rb +0 -63
  571. data/lib/chef/dsl/method_missing.rb +0 -75
  572. data/lib/chef/knife/cookbook_site_vendor.rb +0 -46
  573. data/lib/chef/knife/core/custom_manifest_loader.rb +0 -69
  574. data/lib/chef/mixin/command/unix.rb +0 -220
  575. data/lib/chef/mixin/command/windows.rb +0 -71
  576. data/lib/chef/mixin/command.rb +0 -194
  577. data/lib/chef/monkey_patches/net-ssh-multi.rb +0 -141
  578. data/lib/chef/provider/package/easy_install.rb +0 -135
  579. data/lib/chef/rest.rb +0 -210
  580. data/lib/chef/shell_out.rb +0 -13
  581. data/lib/chef/tasks/chef_repo.rake +0 -200
  582. data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +0 -5
  583. data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +0 -20
  584. data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +0 -5
  585. data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +0 -5
  586. data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +0 -20
  587. data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +0 -20
  588. data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +0 -20
  589. data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +0 -20
  590. data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +0 -20
  591. data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +0 -20
  592. data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +0 -20
  593. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +0 -5
  594. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +0 -5
  595. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +0 -6
  596. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +0 -5
  597. data/spec/functional/rest_spec.rb +0 -95
  598. data/spec/unit/knife/core/custom_manifest_loader_spec.rb +0 -41
  599. data/spec/unit/lib_backcompat_spec.rb +0 -34
  600. data/spec/unit/mixin/command_spec.rb +0 -107
  601. data/spec/unit/platform_spec.rb +0 -242
  602. data/spec/unit/provider/package/easy_install_spec.rb +0 -114
  603. data/spec/unit/resource/easy_install_package_spec.rb +0 -39
  604. data/spec/unit/rest/auth_credentials_spec.rb +0 -292
  605. data/spec/unit/rest_spec.rb +0 -753
  606. data/spec/unit/shell_out_spec.rb +0 -18
  607. data/tasks/bin/bundle-platform +0 -20
  608. data/tasks/bin/bundle-platform.bat +0 -2
  609. data/tasks/bin/bundler_patch.rb +0 -27
  610. data/tasks/bin/gem-version-diff +0 -37
  611. data/tasks/bundle_util.rb +0 -110
@@ -65,22 +65,18 @@ class Chef
65
65
  # Prints a message to stdout. Aliased as +info+ for compatibility with
66
66
  # the logger API.
67
67
  def msg(message)
68
- begin
69
- stdout.puts message
70
- rescue Errno::EPIPE => e
71
- raise e if @config[:verbosity] >= 2
72
- exit 0
73
- end
68
+ stdout.puts message
69
+ rescue Errno::EPIPE => e
70
+ raise e if @config[:verbosity] >= 2
71
+ exit 0
74
72
  end
75
73
 
76
74
  # Prints a msg to stderr. Used for info, warn, error, and fatal.
77
75
  def log(message)
78
- begin
79
- stderr.puts message
80
- rescue Errno::EPIPE => e
81
- raise e if @config[:verbosity] >= 2
82
- exit 0
83
- end
76
+ stderr.puts message
77
+ rescue Errno::EPIPE => e
78
+ raise e if @config[:verbosity] >= 2
79
+ exit 0
84
80
  end
85
81
 
86
82
  alias :info :log
@@ -155,12 +151,10 @@ class Chef
155
151
  end
156
152
 
157
153
  def pretty_print(data)
158
- begin
159
- stdout.puts data
160
- rescue Errno::EPIPE => e
161
- raise e if @config[:verbosity] >= 2
162
- exit 0
163
- end
154
+ stdout.puts data
155
+ rescue Errno::EPIPE => e
156
+ raise e if @config[:verbosity] >= 2
157
+ exit 0
164
158
  end
165
159
 
166
160
  # Hash -> Hash
@@ -186,8 +180,7 @@ class Chef
186
180
 
187
181
  if parse_output
188
182
  if object_class.nil?
189
- Chef.deprecated(:json_auto_inflate, "Auto inflation of JSON data is deprecated. Please pass in the class to inflate or use #edit_hash")
190
- Chef::JSONCompat.from_json(output)
183
+ raise ArgumentError, "Please pass in the object class to hydrate or use #edit_hash"
191
184
  else
192
185
  object_class.from_hash(Chef::JSONCompat.parse(output))
193
186
  end
@@ -215,9 +208,9 @@ class Chef
215
208
  output_parsed_again = Chef::JSONCompat.parse(Chef::JSONCompat.to_json(output))
216
209
  if object_parsed_again != output_parsed_again
217
210
  output.save
218
- self.msg("Saved #{output}")
211
+ msg("Saved #{output}")
219
212
  else
220
- self.msg("Object unchanged, not saving")
213
+ msg("Object unchanged, not saving")
221
214
  end
222
215
  output(format_for_display(object)) if config[:print_after]
223
216
  end
@@ -247,19 +240,19 @@ class Chef
247
240
  when "Y", "y"
248
241
  true
249
242
  when "N", "n"
250
- self.msg("You said no, so I'm done here.")
243
+ msg("You said no, so I'm done here.")
251
244
  false
252
245
  when ""
253
246
  unless default_choice.nil?
254
247
  default_choice
255
248
  else
256
- self.msg("I have no idea what to do with '#{answer}'")
257
- self.msg("Just say Y or N, please.")
249
+ msg("I have no idea what to do with '#{answer}'")
250
+ msg("Just say Y or N, please.")
258
251
  confirm_without_exit(question, append_instructions, default_choice)
259
252
  end
260
253
  else
261
- self.msg("I have no idea what to do with '#{answer}'")
262
- self.msg("Just say Y or N, please.")
254
+ msg("I have no idea what to do with '#{answer}'")
255
+ msg("Just say Y or N, please.")
263
256
  confirm_without_exit(question, append_instructions, default_choice)
264
257
  end
265
258
  end
@@ -49,13 +49,15 @@ class Chef
49
49
  exit(1)
50
50
  end
51
51
 
52
- # create the data bag
52
+ # Verify if the data bag exists
53
53
  begin
54
+ rest.get("data/#{@data_bag_name}")
55
+ ui.info("Data bag #{@data_bag_name} already exists")
56
+ rescue Net::HTTPServerException => e
57
+ raise unless e.to_s =~ /^404/
58
+ # if it doesn't exists, try to create it
54
59
  rest.post("data", { "name" => @data_bag_name })
55
60
  ui.info("Created data_bag[#{@data_bag_name}]")
56
- rescue Net::HTTPServerException => e
57
- raise unless e.to_s =~ /^409/
58
- ui.info("Data bag #{@data_bag_name} already exists")
59
61
  end
60
62
 
61
63
  # if an item is specified, create it, as well
@@ -114,7 +114,7 @@ class Chef
114
114
  # Certain situations (show and bootstrap) don't need a --encrypt flag to use the config file secret
115
115
  return true
116
116
  end
117
- return false
117
+ false
118
118
  end
119
119
 
120
120
  def has_cl_secret?
@@ -72,49 +72,47 @@ class Chef
72
72
  end
73
73
 
74
74
  def get_dependencies(entry)
75
- begin
76
- if entry.parent && entry.parent.path == "/cookbooks"
77
- return entry.chef_object.metadata.dependencies.keys.map { |cookbook| "/cookbooks/#{cookbook}" }
75
+ if entry.parent && entry.parent.path == "/cookbooks"
76
+ return entry.chef_object.metadata.dependencies.keys.map { |cookbook| "/cookbooks/#{cookbook}" }
78
77
 
79
- elsif entry.parent && entry.parent.path == "/nodes"
80
- node = Chef::JSONCompat.parse(entry.read)
81
- result = []
82
- if node["chef_environment"] && node["chef_environment"] != "_default"
83
- result << "/environments/#{node['chef_environment']}.json"
84
- end
85
- if node["run_list"]
86
- result += dependencies_from_runlist(node["run_list"])
87
- end
88
- result
78
+ elsif entry.parent && entry.parent.path == "/nodes"
79
+ node = Chef::JSONCompat.parse(entry.read)
80
+ result = []
81
+ if node["chef_environment"] && node["chef_environment"] != "_default"
82
+ result << "/environments/#{node['chef_environment']}.json"
83
+ end
84
+ if node["run_list"]
85
+ result += dependencies_from_runlist(node["run_list"])
86
+ end
87
+ result
89
88
 
90
- elsif entry.parent && entry.parent.path == "/roles"
91
- role = Chef::JSONCompat.parse(entry.read)
92
- result = []
93
- if role["run_list"]
94
- dependencies_from_runlist(role["run_list"]).each do |dependency|
95
- result << dependency if !result.include?(dependency)
96
- end
89
+ elsif entry.parent && entry.parent.path == "/roles"
90
+ role = Chef::JSONCompat.parse(entry.read)
91
+ result = []
92
+ if role["run_list"]
93
+ dependencies_from_runlist(role["run_list"]).each do |dependency|
94
+ result << dependency if !result.include?(dependency)
97
95
  end
98
- if role["env_run_lists"]
99
- role["env_run_lists"].each_pair do |env, run_list|
100
- dependencies_from_runlist(run_list).each do |dependency|
101
- result << dependency if !result.include?(dependency)
102
- end
96
+ end
97
+ if role["env_run_lists"]
98
+ role["env_run_lists"].each_pair do |env, run_list|
99
+ dependencies_from_runlist(run_list).each do |dependency|
100
+ result << dependency if !result.include?(dependency)
103
101
  end
104
102
  end
105
- result
103
+ end
104
+ result
106
105
 
107
- elsif !entry.exists?
108
- raise Chef::ChefFS::FileSystem::NotFoundError.new(entry)
106
+ elsif !entry.exists?
107
+ raise Chef::ChefFS::FileSystem::NotFoundError.new(entry)
109
108
 
110
- else
111
- []
112
- end
113
- rescue Chef::ChefFS::FileSystem::NotFoundError => e
114
- ui.error "#{format_path(e.entry)}: No such file or directory"
115
- self.exit_code = 2
109
+ else
116
110
  []
117
111
  end
112
+ rescue Chef::ChefFS::FileSystem::NotFoundError => e
113
+ ui.error "#{format_path(e.entry)}: No such file or directory"
114
+ self.exit_code = 2
115
+ []
118
116
  end
119
117
 
120
118
  def dependencies_from_runlist(run_list)
@@ -9,7 +9,7 @@ class Chef
9
9
 
10
10
  deps do
11
11
  require "chef/chef_fs/file_system"
12
- require "chef/chef_fs/file_system/not_found_error"
12
+ require "chef/chef_fs/file_system/exceptions"
13
13
  end
14
14
 
15
15
  option :local,
@@ -90,7 +90,7 @@ MOAR_HELP
90
90
  def find_manpage_path(topic)
91
91
  if ::File.exists?(::File.expand_path("../distro/common/man/man1/#{topic}.1", CHEF_ROOT))
92
92
  # If we've provided the man page in the gem, give that
93
- return ::File.expand_path("../distro/common/man/man1/#{topic}.1", CHEF_ROOT)
93
+ ::File.expand_path("../distro/common/man/man1/#{topic}.1", CHEF_ROOT)
94
94
  else
95
95
  # Otherwise, we'll just be using MANPATH
96
96
  topic
@@ -97,7 +97,7 @@ class Chef
97
97
  print_results(children.map { |result| maybe_add_slash(result.display_name, result.dir?) }.sort, "")
98
98
  end
99
99
 
100
- exit self.exit_code if self.exit_code
100
+ exit exit_code if exit_code
101
101
  end
102
102
 
103
103
  def add_dir_result(result)
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
- # Copyright:: Copyright 2009-2016, Chef Software Inc.
3
+ # Copyright:: Copyright 2009-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,12 +37,6 @@ class Chef
37
37
 
38
38
  banner "knife search INDEX QUERY (options)"
39
39
 
40
- option :sort,
41
- :short => "-o SORT",
42
- :long => "--sort SORT",
43
- :description => "The order to sort the results in",
44
- :default => nil
45
-
46
40
  option :start,
47
41
  :short => "-b ROW",
48
42
  :long => "--start ROW",
@@ -79,20 +73,18 @@ class Chef
79
73
 
80
74
  def run
81
75
  read_cli_args
82
- fuzzify_query
83
76
 
84
77
  if @type == "node"
85
78
  ui.use_presenter Knife::Core::NodePresenter
86
79
  end
87
80
 
88
81
  q = Chef::Search::Query.new
89
- escaped_query = Addressable::URI.encode_component(@query, Addressable::URI::CharacterClasses::QUERY)
90
82
 
91
83
  result_items = []
92
84
  result_count = 0
93
85
 
94
86
  search_args = Hash.new
95
- search_args[:sort] = config[:sort] if config[:sort]
87
+ search_args[:fuzz] = true
96
88
  search_args[:start] = config[:start] if config[:start]
97
89
  search_args[:rows] = config[:rows] if config[:rows]
98
90
  if config[:filter_result]
@@ -102,7 +94,7 @@ class Chef
102
94
  end
103
95
 
104
96
  begin
105
- q.search(@type, escaped_query, search_args) do |item|
97
+ q.search(@type, @query, search_args) do |item|
106
98
  formatted_item = Hash.new
107
99
  if item.is_a?(Hash)
108
100
  # doing a little magic here to set the correct name
@@ -116,7 +108,7 @@ class Chef
116
108
  rescue Net::HTTPServerException => e
117
109
  msg = Chef::JSONCompat.from_json(e.response.body)["error"].first
118
110
  ui.error("knife search failed: #{msg}")
119
- exit 1
111
+ exit 99
120
112
  end
121
113
 
122
114
  if ui.interchange?
@@ -131,6 +123,9 @@ class Chef
131
123
  end
132
124
  end
133
125
  end
126
+
127
+ # return a "failure" code to the shell so that knife search can be used in pipes similar to grep
128
+ exit 1 if result_count == 0
134
129
  end
135
130
 
136
131
  def read_cli_args
@@ -158,12 +153,6 @@ class Chef
158
153
  end
159
154
  end
160
155
 
161
- def fuzzify_query
162
- if @query !~ /:/
163
- @query = "tags:*#{@query}* OR roles:*#{@query}* OR fqdn:*#{@query}* OR addresses:*#{@query}* OR policy_name:*#{@query}* OR policy_group:*#{@query}*"
164
- end
165
- end
166
-
167
156
  # This method turns a set of key value pairs in a string into the appropriate data structure that the
168
157
  # chef-server search api is expecting.
169
158
  # expected input is in the form of:
@@ -183,7 +172,7 @@ class Chef
183
172
  return_id, attr_path = f.split("=")
184
173
  final_filter[return_id.to_sym] = attr_path.split(".")
185
174
  end
186
- return final_filter
175
+ final_filter
187
176
  end
188
177
 
189
178
  def create_result_filter_from_attributes(filter_array)
@@ -193,7 +182,7 @@ class Chef
193
182
  end
194
183
  # adding magic filter so we can actually pull the name as before
195
184
  final_filter["__display_name"] = [ "name" ]
196
- return final_filter
185
+ final_filter
197
186
  end
198
187
 
199
188
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
- # Copyright:: Copyright 2009-2016, Chef Software Inc.
3
+ # Copyright:: Copyright 2009-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,7 +26,6 @@ class Chef
26
26
  deps do
27
27
  require "net/ssh"
28
28
  require "net/ssh/multi"
29
- require "chef/monkey_patches/net-ssh-multi"
30
29
  require "readline"
31
30
  require "chef/exceptions"
32
31
  require "chef/search/query"
@@ -93,6 +92,10 @@ class Chef
93
92
  :description => "The ssh gateway",
94
93
  :proc => Proc.new { |key| Chef::Config[:knife][:ssh_gateway] = key.strip }
95
94
 
95
+ option :ssh_gateway_identity,
96
+ :long => "--ssh-gateway-identity SSH_GATEWAY_IDENTITY",
97
+ :description => "The SSH identity file used for gateway authentication"
98
+
96
99
  option :forward_agent,
97
100
  :short => "-A",
98
101
  :long => "--forward-agent",
@@ -166,10 +169,10 @@ class Chef
166
169
  def configure_session
167
170
  list = config[:manual] ? @name_args[0].split(" ") : search_nodes
168
171
  if list.length == 0
169
- if @action_nodes.length == 0
172
+ if @search_count == 0
170
173
  ui.fatal("No nodes returned from search")
171
174
  else
172
- ui.fatal("#{@action_nodes.length} #{@action_nodes.length > 1 ? "nodes" : "node"} found, " +
175
+ ui.fatal("#{@search_count} #{@search_count > 1 ? "nodes" : "node"} found, " +
173
176
  "but does not have the required attribute to establish the connection. " +
174
177
  "Try setting another attribute to open the connection using --attribute.")
175
178
  end
@@ -184,41 +187,56 @@ class Chef
184
187
  # 2) configuration file
185
188
  # 3) cloud attribute
186
189
  # 4) fqdn
187
- if config[:attribute]
188
- Chef::Log.debug("Using node attribute '#{config[:attribute]}' as the ssh target")
189
- attribute = config[:attribute]
190
+ if node["config"]
191
+ Chef::Log.debug("Using node attribute '#{config[:attribute]}' as the ssh target: #{node["config"]}")
192
+ node["config"]
190
193
  elsif Chef::Config[:knife][:ssh_attribute]
191
- Chef::Log.debug("Using node attribute #{Chef::Config[:knife][:ssh_attribute]}")
192
- attribute = Chef::Config[:knife][:ssh_attribute]
193
- elsif node[:cloud] &&
194
- node[:cloud][:public_hostname] &&
195
- !node[:cloud][:public_hostname].empty?
196
- Chef::Log.debug("Using node attribute 'cloud[:public_hostname]' automatically as the ssh target")
197
- attribute = "cloud.public_hostname"
194
+ Chef::Log.debug("Using node attribute #{Chef::Config[:knife][:ssh_attribute]}: #{node["knife_config"]}")
195
+ node["knife_config"]
196
+ elsif node["cloud"] &&
197
+ node["cloud"]["public_hostname"] &&
198
+ !node["cloud"]["public_hostname"].empty?
199
+ Chef::Log.debug("Using node attribute 'cloud[:public_hostname]' automatically as the ssh target: #{node["cloud"]["public_hostname"]}")
200
+ node["cloud"]["public_hostname"]
198
201
  else
199
202
  # falling back to default of fqdn
200
- Chef::Log.debug("Using node attribute 'fqdn' as the ssh target")
201
- attribute = "fqdn"
203
+ Chef::Log.debug("Using node attribute 'fqdn' as the ssh target: #{node["fqdn"]}")
204
+ node["fqdn"]
202
205
  end
203
- attribute
204
206
  end
205
207
 
206
208
  def search_nodes
207
209
  list = Array.new
208
210
  query = Chef::Search::Query.new
209
- @action_nodes = query.search(:node, @name_args[0])[0]
210
- @action_nodes.each do |item|
211
+ required_attributes = { fqdn: ["fqdn"], cloud: ["cloud"] }
212
+
213
+ separator = ui.presenter.attribute_field_separator
214
+
215
+ # if we've set an attribute to use on the command line
216
+ if config[:attribute]
217
+ required_attributes[:config] = config[:attribute].split(separator)
218
+ end
219
+
220
+ # if we've configured an attribute in our config
221
+ if Chef::Config[:knife][:ssh_attribute]
222
+ required_attributes[:knife_config] = Chef::Config[:knife][:ssh_attribute].split(separator)
223
+ end
224
+
225
+ @search_count = 0
226
+ query.search(:node, @name_args[0], filter_result: required_attributes, fuzz: true) do |item|
227
+ @search_count += 1
211
228
  # we should skip the loop to next iteration if the item
212
229
  # returned by the search is nil
213
230
  next if item.nil?
214
231
  # next if we couldn't find the specified attribute in the
215
232
  # returned node object
216
- host = extract_nested_value(item, get_ssh_attribute(item))
233
+ host = get_ssh_attribute(item)
217
234
  next if host.nil?
218
235
  ssh_port = item[:cloud].nil? ? nil : item[:cloud][:public_ssh_port]
219
236
  srv = [host, ssh_port]
220
237
  list.push(srv)
221
238
  end
239
+
222
240
  list
223
241
  end
224
242
 
@@ -232,11 +250,14 @@ class Chef
232
250
  # @param user [String] Optional username for this session.
233
251
  # @return [Hash<Symbol, Object>]
234
252
  def session_options(host, port, user = nil)
235
- ssh_config = Net::SSH.configuration_for(host)
253
+ ssh_config = Net::SSH.configuration_for(host, true)
236
254
  {}.tap do |opts|
237
255
  # Chef::Config[:knife][:ssh_user] is parsed in #configure_user and written to config[:ssh_user]
238
256
  opts[:user] = user || config[:ssh_user] || ssh_config[:user]
239
- if config[:ssh_identity_file]
257
+ if config[:ssh_gateway_identity]
258
+ opts[:keys] = File.expand_path(config[:ssh_gateway_identity])
259
+ opts[:keys_only] = true
260
+ elsif config[:ssh_identity_file]
240
261
  opts[:keys] = File.expand_path(config[:ssh_identity_file])
241
262
  opts[:keys_only] = true
242
263
  elsif config[:ssh_password]
@@ -309,19 +330,23 @@ class Chef
309
330
  subsession ||= session
310
331
  command = fixup_sudo(command)
311
332
  command.force_encoding("binary") if command.respond_to?(:force_encoding)
312
- subsession.open_channel do |ch|
313
- ch.request_pty
314
- ch.exec command do |ch, success|
315
- raise ArgumentError, "Cannot execute #{command}" unless success
316
- ch.on_data do |ichannel, data|
317
- print_data(ichannel[:host], data)
318
- if data =~ /^knife sudo password: /
319
- print_data(ichannel[:host], "\n")
320
- ichannel.send_data("#{get_password}\n")
333
+ subsession.open_channel do |chan|
334
+ if config[:on_error] && exit_status != 0
335
+ chan.close()
336
+ else
337
+ chan.request_pty
338
+ chan.exec command do |ch, success|
339
+ raise ArgumentError, "Cannot execute #{command}" unless success
340
+ ch.on_data do |ichannel, data|
341
+ print_data(ichannel[:host], data)
342
+ if data =~ /^knife sudo password: /
343
+ print_data(ichannel[:host], "\n")
344
+ ichannel.send_data("#{get_password}\n")
345
+ end
346
+ end
347
+ ch.on_request "exit-status" do |ichannel, data|
348
+ exit_status = [exit_status, data.read_long].max
321
349
  end
322
- end
323
- ch.on_request "exit-status" do |ichannel, data|
324
- exit_status = [exit_status, data.read_long].max
325
350
  end
326
351
  end
327
352
  end
@@ -532,8 +557,8 @@ class Chef
532
557
  config[:ssh_identity_file] = get_stripped_unfrozen_value(config[:ssh_identity_file] || config[:identity_file] || Chef::Config[:knife][:ssh_identity_file])
533
558
  end
534
559
 
535
- def extract_nested_value(data_structure, path_spec)
536
- ui.presenter.extract_nested_value(data_structure, path_spec)
560
+ def configure_ssh_gateway_identity
561
+ config[:ssh_gateway_identity] = get_stripped_unfrozen_value(config[:ssh_gateway_identity] || Chef::Config[:knife][:ssh_gateway_identity])
537
562
  end
538
563
 
539
564
  def run
@@ -543,6 +568,7 @@ class Chef
543
568
  configure_password
544
569
  @password = config[:ssh_password] if config[:ssh_password]
545
570
  configure_ssh_identity_file
571
+ configure_ssh_gateway_identity
546
572
  configure_gateway
547
573
  configure_session
548
574
 
@@ -276,7 +276,7 @@ ADVICE
276
276
  rescue OpenSSL::X509::StoreError => e
277
277
  return e.message
278
278
  end
279
- return nil
279
+ nil
280
280
  end
281
281
  end
282
282
  end
@@ -60,7 +60,7 @@ EOF
60
60
  end
61
61
 
62
62
  output(format_for_display(object)) if config[:print_after]
63
- self.msg("Deleted #{user_name}")
63
+ msg("Deleted #{user_name}")
64
64
  end
65
65
 
66
66
  def run
@@ -9,7 +9,7 @@ class Chef
9
9
 
10
10
  deps do
11
11
  require "chef/chef_fs/file_system"
12
- require "chef/chef_fs/file_system/not_found_error"
12
+ require "chef/chef_fs/file_system/exceptions"
13
13
  end
14
14
 
15
15
  # TODO modify to remote-only / local-only pattern (more like delete)
data/lib/chef/knife.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
3
  # Author:: Christopher Brown (<cb@chef.io>)
4
- # Copyright:: Copyright 2009-2016, Chef Software Inc.
4
+ # Copyright:: Copyright 2009-2017, Chef Software Inc.
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -265,8 +265,7 @@ class Chef
265
265
  ui.fatal("Cannot find subcommand for: '#{args.join(' ')}'")
266
266
 
267
267
  # Mention rehash when the subcommands cache(plugin_manifest.json) is used
268
- if subcommand_loader.is_a?(Chef::Knife::SubcommandLoader::HashedCommandLoader) ||
269
- subcommand_loader.is_a?(Chef::Knife::SubcommandLoader::CustomManifestLoader)
268
+ if subcommand_loader.is_a?(Chef::Knife::SubcommandLoader::HashedCommandLoader)
270
269
  ui.info("If this is a recently installed plugin, please run 'knife rehash' to update the subcommands cache.")
271
270
  end
272
271
 
@@ -430,11 +429,11 @@ class Chef
430
429
  end
431
430
 
432
431
  def show_usage
433
- stdout.puts("USAGE: " + self.opt_parser.to_s)
432
+ stdout.puts("USAGE: " + opt_parser.to_s)
434
433
  end
435
434
 
436
435
  def run_with_pretty_exceptions(raise_exception = false)
437
- unless self.respond_to?(:run)
436
+ unless respond_to?(:run)
438
437
  ui.error "You need to add a #run method to your knife command before you can use it"
439
438
  end
440
439
  enforce_path_sanity
@@ -553,7 +552,7 @@ class Chef
553
552
 
554
553
  pretty_name ||= output
555
554
 
556
- self.msg("Created #{pretty_name}")
555
+ msg("Created #{pretty_name}")
557
556
 
558
557
  output(output) if config[:print_after]
559
558
  end
@@ -572,7 +571,7 @@ class Chef
572
571
  output(format_for_display(object)) if config[:print_after]
573
572
 
574
573
  obj_name = delete_name ? "#{delete_name}[#{name}]" : object
575
- self.msg("Deleted #{obj_name}")
574
+ msg("Deleted #{obj_name}")
576
575
  end
577
576
 
578
577
  # helper method for testing if a field exists
data/lib/chef/mash.rb CHANGED
@@ -149,7 +149,7 @@ class Mash < Hash
149
149
  #
150
150
  # @return [Mash] A new mash with the hash values merged in.
151
151
  def merge(hash)
152
- self.dup.update(hash)
152
+ dup.update(hash)
153
153
  end
154
154
 
155
155
  # @param key<Object>
@@ -53,7 +53,6 @@ class Chef
53
53
  private
54
54
 
55
55
  def create_dir(path)
56
- begin
57
56
  # When doing multithreaded downloads into the file cache, the following
58
57
  # interleaving raises an error here:
59
58
  #
@@ -62,10 +61,9 @@ class Chef
62
61
  # File.directory?(create_path) <- false
63
62
  # Dir.mkdir(create_path)
64
63
  # Dir.mkdir(create_path) <- raises Errno::EEXIST
65
- Chef::Log.debug("Creating directory #{path}")
66
- Dir.mkdir(path)
67
- rescue Errno::EEXIST
68
- end
64
+ Chef::Log.debug("Creating directory #{path}")
65
+ Dir.mkdir(path)
66
+ rescue Errno::EEXIST
69
67
  end
70
68
 
71
69
  end
@@ -27,7 +27,7 @@ class Chef
27
27
  # Raises an IOError if the file cannot be found, or is not readable.
28
28
  def from_file(filename)
29
29
  if File.exists?(filename) && File.readable?(filename)
30
- self.instance_eval(IO.read(filename), filename, 1)
30
+ instance_eval(IO.read(filename), filename, 1)
31
31
  else
32
32
  raise IOError, "Cannot open or read #{filename}!"
33
33
  end
@@ -39,7 +39,7 @@ class Chef
39
39
  # Raises an IOError if the file cannot be found, or is not readable.
40
40
  def class_from_file(filename)
41
41
  if File.exists?(filename) && File.readable?(filename)
42
- self.class_eval(IO.read(filename), filename, 1)
42
+ class_eval(IO.read(filename), filename, 1)
43
43
  else
44
44
  raise IOError, "Cannot open or read #{filename}!"
45
45
  end