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
@@ -37,45 +37,23 @@ class Chef
37
37
  class CookbookVersion
38
38
 
39
39
  include Comparable
40
+ extend Forwardable
41
+
42
+ def_delegator :@cookbook_manifest, :files_for
43
+ def_delegator :@cookbook_manifest, :each_file
40
44
 
41
45
  COOKBOOK_SEGMENTS = [ :resources, :providers, :recipes, :definitions, :libraries, :attributes, :files, :templates, :root_files ]
42
46
 
43
- attr_accessor :all_files
47
+ attr_reader :all_files
44
48
 
45
49
  attr_accessor :root_paths
46
- attr_accessor :definition_filenames
47
- attr_accessor :template_filenames
48
- attr_accessor :file_filenames
49
- attr_accessor :library_filenames
50
- attr_accessor :resource_filenames
51
- attr_accessor :provider_filenames
52
- attr_accessor :root_filenames
53
50
  attr_accessor :name
54
- attr_accessor :metadata_filenames
55
-
56
- def status=(new_status)
57
- Chef.deprecated(:internal_api, "Deprecated method `status' called. This method will be removed.")
58
- @status = new_status
59
- end
60
-
61
- def status
62
- Chef.deprecated(:internal_api, "Deprecated method `status' called. This method will be removed.")
63
- @status
64
- end
65
51
 
66
52
  # A Chef::Cookbook::Metadata object. It has a setter that fixes up the
67
53
  # metadata to add descriptions of the recipes contained in this
68
54
  # CookbookVersion.
69
55
  attr_reader :metadata
70
56
 
71
- # attribute_filenames also has a setter that has non-default
72
- # functionality.
73
- attr_reader :attribute_filenames
74
-
75
- # recipe_filenames also has a setter that has non-default
76
- # functionality.
77
- attr_reader :recipe_filenames
78
-
79
57
  attr_reader :recipe_filenames_by_name
80
58
  attr_reader :attribute_filenames_by_short_filename
81
59
 
@@ -96,6 +74,11 @@ class Chef
96
74
  root_paths[0]
97
75
  end
98
76
 
77
+ def all_files=(files)
78
+ @all_files = Array(files)
79
+ cookbook_manifest.reset!
80
+ end
81
+
99
82
  # This is the one and only method that knows how cookbook files'
100
83
  # checksums are generated.
101
84
  def self.checksum_cookbook_file(filepath)
@@ -118,23 +101,10 @@ class Chef
118
101
  @root_paths = root_paths
119
102
  @frozen = false
120
103
 
121
- @attribute_filenames = Array.new
122
- @definition_filenames = Array.new
123
- @template_filenames = Array.new
124
- @file_filenames = Array.new
125
- @recipe_filenames = Array.new
126
- @recipe_filenames_by_name = Hash.new
127
- @library_filenames = Array.new
128
- @resource_filenames = Array.new
129
- @provider_filenames = Array.new
130
- @metadata_filenames = Array.new
131
- @root_filenames = Array.new
132
-
133
104
  @all_files = Array.new
134
105
 
135
- # deprecated
136
- @status = :ready
137
106
  @file_vendor = nil
107
+ @cookbook_manifest = Chef::CookbookManifest.new(self)
138
108
  @metadata = Chef::Cookbook::Metadata.new
139
109
  @chef_server_rest = chef_server_rest
140
110
  end
@@ -163,10 +133,25 @@ class Chef
163
133
  "#{name}-#{version}"
164
134
  end
165
135
 
166
- def attribute_filenames=(*filenames)
167
- @attribute_filenames = filenames.flatten
168
- @attribute_filenames_by_short_filename = filenames_by_name(attribute_filenames)
169
- attribute_filenames
136
+ def attribute_filenames_by_short_filename
137
+ @attribute_filenames_by_short_filename ||= begin
138
+ name_map = filenames_by_name(files_for("attributes"))
139
+ root_alias = cookbook_manifest.root_files.find { |record| record[:name] == "attributes.rb" }
140
+ name_map["default"] = root_alias[:full_path] if root_alias
141
+ name_map
142
+ end
143
+ end
144
+
145
+ def recipe_filenames_by_name
146
+ @recipe_filenames_by_name ||= begin
147
+ name_map = filenames_by_name(files_for("recipes"))
148
+ root_alias = cookbook_manifest.root_files.find { |record| record[:name] == "recipe.rb" }
149
+ if root_alias
150
+ Chef::Log.error("Cookbook #{name} contains both recipe.rb and and recipes/default.rb, ignoring recipes/default.rb") if name_map["default"]
151
+ name_map["default"] = root_alias[:full_path]
152
+ end
153
+ name_map
154
+ end
170
155
  end
171
156
 
172
157
  def metadata=(metadata)
@@ -175,14 +160,14 @@ class Chef
175
160
  @metadata
176
161
  end
177
162
 
178
- ## BACKCOMPAT/DEPRECATED - Remove these and fix breakage before release [DAN - 5/20/2010]##
179
- alias :attribute_files :attribute_filenames
180
- alias :attribute_files= :attribute_filenames=
181
-
182
163
  def manifest
183
164
  cookbook_manifest.manifest
184
165
  end
185
166
 
167
+ def manifest=(new_manifest)
168
+ cookbook_manifest.update_from(new_manifest)
169
+ end
170
+
186
171
  # Returns a hash of checksums to either nil or the on disk path (which is
187
172
  # done by generate_manifest).
188
173
  def checksums
@@ -193,29 +178,16 @@ class Chef
193
178
  cookbook_manifest.manifest_records_by_path
194
179
  end
195
180
 
196
- def manifest=(new_manifest)
197
- cookbook_manifest.update_from(new_manifest)
198
- end
199
-
200
181
  # Return recipe names in the form of cookbook_name::recipe_name
201
182
  def fully_qualified_recipe_names
202
- results = Array.new
203
- recipe_filenames_by_name.each_key do |rname|
204
- results << "#{name}::#{rname}"
183
+ files_for("recipes").inject([]) do |memo, recipe|
184
+ rname = recipe[:name].split("/")[1]
185
+ rname = File.basename(rname, ".rb")
186
+ memo << "#{name}::#{rname}"
187
+ memo
205
188
  end
206
- results
207
- end
208
-
209
- def recipe_filenames=(*filenames)
210
- @recipe_filenames = filenames.flatten
211
- @recipe_filenames_by_name = filenames_by_name(recipe_filenames)
212
- recipe_filenames
213
189
  end
214
190
 
215
- ## BACKCOMPAT/DEPRECATED - Remove these and fix breakage before release [DAN - 5/20/2010]##
216
- alias :recipe_files :recipe_filenames
217
- alias :recipe_files= :recipe_filenames=
218
-
219
191
  # called from DSL
220
192
  def load_recipe(recipe_name, run_context)
221
193
  unless recipe_filenames_by_name.has_key?(recipe_name)
@@ -235,41 +207,7 @@ class Chef
235
207
  end
236
208
 
237
209
  def segment_filenames(segment)
238
- unless COOKBOOK_SEGMENTS.include?(segment)
239
- raise ArgumentError, "invalid segment #{segment}: must be one of #{COOKBOOK_SEGMENTS.join(', ')}"
240
- end
241
-
242
- case segment.to_sym
243
- when :resources
244
- @resource_filenames
245
- when :providers
246
- @provider_filenames
247
- when :recipes
248
- @recipe_filenames
249
- when :libraries
250
- @library_filenames
251
- when :definitions
252
- @definition_filenames
253
- when :attributes
254
- @attribute_filenames
255
- when :files
256
- @file_filenames
257
- when :templates
258
- @template_filenames
259
- when :root_files
260
- @root_filenames
261
- end
262
- end
263
-
264
- def replace_segment_filenames(segment, filenames)
265
- case segment.to_sym
266
- when :recipes
267
- self.recipe_filenames = filenames
268
- when :attributes
269
- self.attribute_filenames = filenames
270
- else
271
- segment_filenames(segment).replace(filenames)
272
- end
210
+ files_for(segment).map { |f| f["full_path"] || File.join(root_dir, f["path"]) }
273
211
  end
274
212
 
275
213
  # Query whether a template file +template_filename+ is available. File
@@ -349,7 +287,7 @@ class Chef
349
287
  filenames_by_pref = Hash.new
350
288
  preferences.each { |pref| filenames_by_pref[pref] = Array.new }
351
289
 
352
- manifest[segment].each do |manifest_record|
290
+ files_for(segment).each do |manifest_record|
353
291
  manifest_record_path = manifest_record[:path]
354
292
 
355
293
  # find the NON SPECIFIC filenames, but prefer them by filespecificity.
@@ -389,7 +327,7 @@ class Chef
389
327
  records_by_pref = Hash.new
390
328
  preferences.each { |pref| records_by_pref[pref] = Array.new }
391
329
 
392
- manifest[segment].each do |manifest_record|
330
+ files_for(segment).each do |manifest_record|
393
331
  manifest_record_path = manifest_record[:path]
394
332
 
395
333
  # extract the preference part from the path.
@@ -469,12 +407,22 @@ class Chef
469
407
  end
470
408
  private :preferences_for_path
471
409
 
410
+ def display
411
+ output = Mash.new
412
+ output["cookbook_name"] = name
413
+ output["name"] = full_name
414
+ output["frozen?"] = frozen_version?
415
+ output["metadata"] = metadata.to_hash
416
+ output["version"] = version
417
+ output.merge(cookbook_manifest.by_parent_directory)
418
+ end
419
+
472
420
  def self.from_hash(o)
473
421
  cookbook_version = new(o["cookbook_name"] || o["name"])
474
422
 
475
423
  # We want the Chef::Cookbook::Metadata object to always be inflated
476
- cookbook_version.metadata = Chef::Cookbook::Metadata.from_hash(o["metadata"])
477
424
  cookbook_version.manifest = o
425
+ cookbook_version.metadata = Chef::Cookbook::Metadata.from_hash(o["metadata"])
478
426
  cookbook_version.identifier = o["identifier"] if o.key?("identifier")
479
427
 
480
428
  # We don't need the following step when we decide to stop supporting deprecated operators in the metadata (e.g. <<, >>)
@@ -484,42 +432,10 @@ class Chef
484
432
  cookbook_version
485
433
  end
486
434
 
487
- def self.json_create(o)
488
- Chef.deprecated(:json_auto_inflate, "Auto inflation of JSON data is deprecated. Please use Chef::CookbookVersion#from_hash")
489
- from_hash(o)
490
- end
491
-
492
435
  def self.from_cb_artifact_data(o)
493
436
  from_hash(o)
494
437
  end
495
438
 
496
- # @deprecated This method was used by the Ruby Chef Server and is no longer
497
- # needed. There is no replacement.
498
- def generate_manifest_with_urls
499
- Chef.deprecated(:internal_api, "Deprecated method #generate_manifest_with_urls.")
500
-
501
- rendered_manifest = manifest.dup
502
- COOKBOOK_SEGMENTS.each do |segment|
503
- if rendered_manifest.has_key?(segment)
504
- rendered_manifest[segment].each do |manifest_record|
505
- url_options = { :cookbook_name => name.to_s, :cookbook_version => version, :checksum => manifest_record["checksum"] }
506
- manifest_record["url"] = yield(url_options)
507
- end
508
- end
509
- end
510
- rendered_manifest
511
- end
512
-
513
- def to_hash
514
- # TODO: this should become deprecated when the API for CookbookManifest becomes stable
515
- cookbook_manifest.to_hash
516
- end
517
-
518
- def to_json(*a)
519
- # TODO: this should become deprecated when the API for CookbookManifest becomes stable
520
- cookbook_manifest.to_json
521
- end
522
-
523
439
  def metadata_json_file
524
440
  File.join(root_paths[0], "metadata.json")
525
441
  end
@@ -538,22 +454,12 @@ class Chef
538
454
  # REST API
539
455
  ##
540
456
 
541
- def save_url
542
- # TODO: this should become deprecated when the API for CookbookManifest becomes stable
543
- cookbook_manifest.save_url
544
- end
545
-
546
- def force_save_url
547
- # TODO: this should become deprecated when the API for CookbookManifest becomes stable
548
- cookbook_manifest.force_save_url
549
- end
550
-
551
457
  def chef_server_rest
552
- @chef_server_rest ||= self.chef_server_rest
458
+ @chef_server_rest ||= chef_server_rest
553
459
  end
554
460
 
555
461
  def self.chef_server_rest
556
- Chef::ServerAPI.new(Chef::Config[:chef_server_url])
462
+ Chef::ServerAPI.new(Chef::Config[:chef_server_url], { version_class: Chef::CookbookManifestVersions })
557
463
  end
558
464
 
559
465
  def destroy
@@ -600,19 +506,19 @@ class Chef
600
506
  end
601
507
 
602
508
  def <=>(other)
603
- raise Chef::Exceptions::CookbookVersionNameMismatch if self.name != other.name
509
+ raise Chef::Exceptions::CookbookVersionNameMismatch if name != other.name
604
510
  # FIXME: can we change the interface to the Metadata class such
605
511
  # that metadata.version returns a Chef::Version instance instead
606
512
  # of a string?
607
- Chef::Version.new(self.version) <=> Chef::Version.new(other.version)
513
+ Chef::Version.new(version) <=> Chef::Version.new(other.version)
608
514
  end
609
515
 
610
- private
611
-
612
516
  def cookbook_manifest
613
517
  @cookbook_manifest ||= CookbookManifest.new(self)
614
518
  end
615
519
 
520
+ private
521
+
616
522
  def find_preferred_manifest_record(node, segment, filename)
617
523
  preferences = preferences_for_path(node, segment, filename)
618
524
 
@@ -620,15 +526,21 @@ class Chef
620
526
  preferences.find { |preferred_filename| manifest_records_by_path[preferred_filename] }
621
527
  end
622
528
 
623
- # For each filename, produce a mapping of base filename (i.e. recipe name
529
+ # For each manifest record, produce a mapping of base filename (i.e. recipe name
530
+ # or attribute file) to on disk location
531
+ def relative_paths_by_name(records)
532
+ records.select { |record| record[:name] =~ /\.rb$/ }.inject({}) { |memo, record| memo[File.basename(record[:name], ".rb")] = record[:path]; memo }
533
+ end
534
+
535
+ # For each manifest record, produce a mapping of base filename (i.e. recipe name
624
536
  # or attribute file) to on disk location
625
- def filenames_by_name(filenames)
626
- filenames.select { |filename| filename =~ /\.rb$/ }.inject({}) { |memo, filename| memo[File.basename(filename, ".rb")] = filename; memo }
537
+ def filenames_by_name(records)
538
+ records.select { |record| record[:name] =~ /\.rb$/ }.inject({}) { |memo, record| memo[File.basename(record[:name], ".rb")] = record[:full_path]; memo }
627
539
  end
628
540
 
629
541
  def file_vendor
630
542
  unless @file_vendor
631
- @file_vendor = Chef::Cookbook::FileVendor.create_from_manifest(manifest)
543
+ @file_vendor = Chef::Cookbook::FileVendor.create_from_manifest(cookbook_manifest)
632
544
  end
633
545
  @file_vendor
634
546
  end
data/lib/chef/data_bag.rb CHANGED
@@ -78,12 +78,6 @@ class Chef
78
78
  Chef::ServerAPI.new(Chef::Config[:chef_server_url])
79
79
  end
80
80
 
81
- # Create a Chef::Role from JSON
82
- def self.json_create(o)
83
- Chef.deprecated(:json_auto_inflate, "Auto inflation of JSON data is deprecated. Please use Chef::DataBag#from_hash")
84
- from_hash(o)
85
- end
86
-
87
81
  def self.from_hash(o)
88
82
  bag = new
89
83
  bag.name(o["name"])
@@ -137,7 +131,7 @@ class Chef
137
131
  end
138
132
  end
139
133
  end
140
- return data_bag
134
+ data_bag
141
135
  else
142
136
  Chef::ServerAPI.new(Chef::Config[:chef_server_url]).get("data/#{name}")
143
137
  end
@@ -75,6 +75,7 @@ class Chef
75
75
  end
76
76
 
77
77
  def raw_data=(new_data)
78
+ new_data = Mash.new(new_data)
78
79
  unless new_data.respond_to?(:[]) && new_data.respond_to?(:keys)
79
80
  raise Exceptions::ValidationFailed, "Data Bag Items must contain a Hash or Mash!"
80
81
  end
@@ -107,9 +108,9 @@ class Chef
107
108
  end
108
109
 
109
110
  def to_hash
110
- result = self.raw_data.dup
111
+ result = raw_data.dup
111
112
  result["chef_type"] = "data_bag_item"
112
- result["data_bag"] = self.data_bag.to_s
113
+ result["data_bag"] = data_bag.to_s
113
114
  result
114
115
  end
115
116
 
@@ -132,19 +133,13 @@ class Chef
132
133
  item = new
133
134
  item.data_bag(h.delete("data_bag")) if h.key?("data_bag")
134
135
  if h.key?("raw_data")
135
- item.raw_data = Mash.new(h["raw_data"])
136
+ item.raw_data = h["raw_data"]
136
137
  else
137
138
  item.raw_data = h
138
139
  end
139
140
  item
140
141
  end
141
142
 
142
- # Create a Chef::DataBagItem from JSON
143
- def self.json_create(o)
144
- Chef.deprecated(:json_auto_inflate, "Auto inflation of JSON data is deprecated. Please use Chef::DataBagItem#from_hash")
145
- from_hash(o)
146
- end
147
-
148
143
  # Load a Data Bag Item by name via either the RESTful API or local data_bag_path if run in solo mode
149
144
  def self.load(data_bag, name)
150
145
  if Chef::Config[:solo_legacy_mode]
@@ -207,7 +202,7 @@ class Chef
207
202
  end
208
203
 
209
204
  def pretty_print(pretty_printer)
210
- pretty_printer.pp({ "data_bag_item('#{data_bag}', '#{id}')" => self.to_hash })
205
+ pretty_printer.pp({ "data_bag_item('#{data_bag}', '#{id}')" => to_hash })
211
206
  end
212
207
 
213
208
  def id
@@ -73,6 +73,8 @@ class Chef
73
73
  "resources" => reporter_data[:resources].map(&:report_data),
74
74
  "run_id" => run_status.run_id,
75
75
  "run_list" => run_status.node.run_list.for_json,
76
+ "policy_name" => run_status.node.policy_name,
77
+ "policy_group" => run_status.node.policy_group,
76
78
  "start_time" => run_status.start_time.utc.iso8601,
77
79
  "end_time" => run_status.end_time.utc.iso8601,
78
80
  "source" => collector_source,
@@ -18,6 +18,8 @@
18
18
  # limitations under the License.
19
19
  #
20
20
 
21
+ require "chef/exceptions"
22
+
21
23
  class Chef
22
24
  class DataCollector
23
25
  class ResourceReport
@@ -67,9 +69,9 @@ class Chef
67
69
  hash = {
68
70
  "type" => new_resource.resource_name.to_sym,
69
71
  "name" => new_resource.name.to_s,
70
- "id" => new_resource.identity.to_s,
71
- "after" => new_resource.state_for_resource_reporter,
72
- "before" => current_resource ? current_resource.state_for_resource_reporter : {},
72
+ "id" => resource_identity,
73
+ "after" => new_resource_state_reporter,
74
+ "before" => current_resource_state_reporter,
73
75
  "duration" => elapsed_time_in_milliseconds.to_s,
74
76
  "delta" => new_resource.respond_to?(:diff) && potentially_changed? ? new_resource.diff : "",
75
77
  "ignore_failure" => new_resource.ignore_failure,
@@ -83,13 +85,39 @@ class Chef
83
85
  hash["recipe_name"] = new_resource.recipe_name
84
86
  end
85
87
 
86
- hash["conditional"] = conditional.to_text if status == "skipped"
88
+ hash["conditional"] = conditional.to_text if status == "skipped"
87
89
  hash["error_message"] = exception.message unless exception.nil?
88
90
 
89
91
  hash
90
92
  end
91
93
  alias :to_h :to_hash
92
94
  alias :for_json :to_hash
95
+
96
+ # We should be able to call the identity of a resource safely, but there
97
+ # is an edge case where resources that have a lazy property that is both
98
+ # the name_property and the identity property, it will thow a validation
99
+ # exception causing the chef-client run to fail. We are not fixing this
100
+ # case since Chef is actually doing the right thing but we are making the
101
+ # ResourceReporter smarter so that it detects the failure and sends a
102
+ # message to the data collector containing a static resource identity
103
+ # since we were unable to generate a proper one.
104
+ def resource_identity
105
+ new_resource.identity.to_s
106
+ rescue => e
107
+ "unknown identity (due to #{e.class})"
108
+ end
109
+
110
+ def new_resource_state_reporter
111
+ new_resource.state_for_resource_reporter
112
+ rescue
113
+ {}
114
+ end
115
+
116
+ def current_resource_state_reporter
117
+ current_resource ? current_resource.state_for_resource_reporter : {}
118
+ rescue
119
+ {}
120
+ end
93
121
  end
94
122
  end
95
123
  end
@@ -2,7 +2,7 @@
2
2
  # Author:: Adam Leff (<adamleff@chef.io>)
3
3
  # Author:: Ryan Cragun (<ryan@chef.io>)
4
4
  #
5
- # Copyright:: Copyright 2012-2016, Chef Software Inc.
5
+ # Copyright:: Copyright 2012-2017, Chef Software Inc.
6
6
  # License:: Apache License, Version 2.0
7
7
  #
8
8
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -288,9 +288,9 @@ class Chef
288
288
  # raise an exception.
289
289
  def setup_http_client
290
290
  if data_collector_token.nil?
291
- Chef::ServerAPI.new(data_collector_server_url)
291
+ Chef::ServerAPI.new(data_collector_server_url, validate_utf8: false)
292
292
  else
293
- Chef::HTTP::SimpleJSON.new(data_collector_server_url)
293
+ Chef::HTTP::SimpleJSON.new(data_collector_server_url, validate_utf8: false)
294
294
  end
295
295
  end
296
296
 
@@ -333,7 +333,6 @@ class Chef
333
333
  def send_to_data_collector(message)
334
334
  return unless data_collector_accessible?
335
335
 
336
- Chef::Log.debug("data_collector_reporter: POSTing the following message to #{data_collector_server_url}: #{Chef::JSONCompat.to_json(message)}")
337
336
  http.post(nil, message, headers)
338
337
  end
339
338
 
@@ -38,22 +38,6 @@ class Chef
38
38
  __path__.push(key)
39
39
  @delegate_sd_obj.public_send(__method__, *__path__, value)
40
40
  end
41
-
42
- # unfortunately we have to support method_missing for node.set_unless.foo.bar = 'baz' notation
43
- def method_missing(symbol, *args)
44
- if symbol == :to_ary
45
- merged_attributes.send(symbol, *args)
46
- elsif args.empty?
47
- Chef.deprecated :attributes, %q{method access to node attributes (node.foo.bar) is deprecated and will be removed in Chef 13, please use bracket syntax (node["foo"]["bar"])}
48
- self[symbol]
49
- elsif symbol.to_s =~ /=$/
50
- Chef.deprecated :attributes, %q{method setting of node attributes (node.foo="bar") is deprecated and will be removed in Chef 13, please use bracket syntax (node["foo"]="bar")}
51
- key_to_set = symbol.to_s[/^(.+)=$/, 1]
52
- self[key_to_set] = (args.length == 1 ? args[0] : args)
53
- else
54
- raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'"
55
- end
56
- end
57
41
  end
58
42
  end
59
43
  end
@@ -52,7 +52,7 @@ class Chef
52
52
  # adding the define_singleton_method call and @__defined_methods__ tracking
53
53
  def method_missing(m, *args, &block)
54
54
  r = true
55
- target = self.__getobj__ { r = false }
55
+ target = __getobj__ { r = false }
56
56
 
57
57
  if r && target.respond_to?(m)
58
58
  # these next 4 lines are the patched code