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
@@ -9,15 +9,6 @@ class Chef
9
9
  class Cookbook
10
10
  class CookbookVersionLoader
11
11
 
12
- FILETYPES_SUBJECT_TO_IGNORE = [ :attribute_filenames,
13
- :definition_filenames,
14
- :recipe_filenames,
15
- :template_filenames,
16
- :file_filenames,
17
- :library_filenames,
18
- :resource_filenames,
19
- :provider_filenames]
20
-
21
12
  UPLOADED_COOKBOOK_VERSION_FILE = ".uploaded-cookbook-version.json".freeze
22
13
 
23
14
  attr_reader :cookbook_settings
@@ -44,16 +35,7 @@ class Chef
44
35
  @relative_path = /#{Regexp.escape(@cookbook_path)}\/(.+)$/
45
36
  @metadata_loaded = false
46
37
  @cookbook_settings = {
47
- :all_files => {},
48
- :attribute_filenames => {},
49
- :definition_filenames => {},
50
- :recipe_filenames => {},
51
- :template_filenames => {},
52
- :file_filenames => {},
53
- :library_filenames => {},
54
- :resource_filenames => {},
55
- :provider_filenames => {},
56
- :root_filenames => {},
38
+ :all_files => {},
57
39
  }
58
40
 
59
41
  @metadata_filenames = []
@@ -84,16 +66,6 @@ class Chef
84
66
 
85
67
  remove_ignored_files
86
68
 
87
- load_as(:attribute_filenames, "attributes", "*.rb")
88
- load_as(:definition_filenames, "definitions", "*.rb")
89
- load_as(:recipe_filenames, "recipes", "*.rb")
90
- load_recursively_as(:library_filenames, "libraries", "*")
91
- load_recursively_as(:template_filenames, "templates", "*")
92
- load_recursively_as(:file_filenames, "files", "*")
93
- load_recursively_as(:resource_filenames, "resources", "*.rb")
94
- load_recursively_as(:provider_filenames, "providers", "*.rb")
95
- load_root_files
96
-
97
69
  if empty?
98
70
  Chef::Log.warn "Found a directory #{cookbook_name} in the cookbook path, but it contains no cookbook files. skipping."
99
71
  end
@@ -108,10 +80,10 @@ class Chef
108
80
  @uploaded_cookbook_version_file = File.join(cookbook_path, UPLOADED_COOKBOOK_VERSION_FILE)
109
81
  end
110
82
 
111
- if File.exists?(File.join(cookbook_path, "metadata.rb"))
112
- @metadata_filenames << File.join(cookbook_path, "metadata.rb")
113
- elsif File.exists?(File.join(cookbook_path, "metadata.json"))
83
+ if File.exists?(File.join(cookbook_path, "metadata.json"))
114
84
  @metadata_filenames << File.join(cookbook_path, "metadata.json")
85
+ elsif File.exists?(File.join(cookbook_path, "metadata.rb"))
86
+ @metadata_filenames << File.join(cookbook_path, "metadata.rb")
115
87
  elsif @uploaded_cookbook_version_file
116
88
  @metadata_filenames << @uploaded_cookbook_version_file
117
89
  end
@@ -126,16 +98,6 @@ class Chef
126
98
 
127
99
  Chef::CookbookVersion.new(cookbook_name, *cookbook_paths).tap do |c|
128
100
  c.all_files = cookbook_settings[:all_files].values
129
- c.attribute_filenames = cookbook_settings[:attribute_filenames].values
130
- c.definition_filenames = cookbook_settings[:definition_filenames].values
131
- c.recipe_filenames = cookbook_settings[:recipe_filenames].values
132
- c.template_filenames = cookbook_settings[:template_filenames].values
133
- c.file_filenames = cookbook_settings[:file_filenames].values
134
- c.library_filenames = cookbook_settings[:library_filenames].values
135
- c.resource_filenames = cookbook_settings[:resource_filenames].values
136
- c.provider_filenames = cookbook_settings[:provider_filenames].values
137
- c.root_filenames = cookbook_settings[:root_filenames].values
138
- c.metadata_filenames = metadata_filenames
139
101
  c.metadata = metadata
140
102
 
141
103
  c.freeze_version if @frozen
@@ -253,51 +215,6 @@ class Chef
253
215
  end
254
216
  end
255
217
 
256
- def load_root_files
257
- select_files_by_glob(File.join(Chef::Util::PathHelper.escape_glob_dir(cookbook_path), "*"), File::FNM_DOTMATCH).each do |file|
258
- file = Chef::Util::PathHelper.cleanpath(file)
259
- next if File.directory?(file)
260
- next if File.basename(file) == UPLOADED_COOKBOOK_VERSION_FILE
261
- name = Chef::Util::PathHelper.relative_path_from(@cookbook_path, file)
262
- cookbook_settings[:root_filenames][name] = file
263
- end
264
- end
265
-
266
- def load_recursively_as(category, category_dir, glob)
267
- glob_pattern = File.join(Chef::Util::PathHelper.escape_glob_dir(cookbook_path, category_dir), "**", glob)
268
- select_files_by_glob(glob_pattern, File::FNM_DOTMATCH).each do |file|
269
- file = Chef::Util::PathHelper.cleanpath(file)
270
- name = Chef::Util::PathHelper.relative_path_from(@cookbook_path, file)
271
- cookbook_settings[category][name] = file
272
- end
273
- end
274
-
275
- def load_as(category, *path_glob)
276
- glob_pattern = File.join(Chef::Util::PathHelper.escape_glob_dir(cookbook_path), *path_glob)
277
- select_files_by_glob(glob_pattern).each do |file|
278
- file = Chef::Util::PathHelper.cleanpath(file)
279
- name = Chef::Util::PathHelper.relative_path_from(@cookbook_path, file)
280
- cookbook_settings[category][name] = file
281
- end
282
- end
283
-
284
- # Mimic Dir.glob inside a cookbook by running `File.fnmatch?` against
285
- # `cookbook_settings[:all_files]`.
286
- #
287
- # @param pattern [String] a glob string passed to `File.fnmatch?`
288
- # @param option [Integer] Option flag to control globbing behavior. These
289
- # are constants defined on `File`, such as `File::FNM_DOTMATCH`.
290
- # `File.fnmatch?` and `Dir.glob` only take one option argument, if you
291
- # need to combine options, you must `|` the constants together. To make
292
- # `File.fnmatch?` behave like `Dir.glob`, `File::FNM_PATHNAME` is
293
- # always enabled.
294
- def select_files_by_glob(pattern, option = 0)
295
- combined_opts = option | File::FNM_PATHNAME
296
- cookbook_settings[:all_files].values.select do |path|
297
- File.fnmatch?(pattern, path, combined_opts)
298
- end
299
- end
300
-
301
218
  def remove_ignored_files
302
219
  cookbook_settings[:all_files].reject! do |relative_path, full_path|
303
220
  chefignore.ignored?(relative_path)
@@ -305,40 +222,34 @@ class Chef
305
222
  end
306
223
 
307
224
  def apply_ruby_metadata(file)
308
- begin
309
- @metadata.from_file(file)
310
- rescue Chef::Exceptions::JSON::ParseError
311
- Chef::Log.error("Error evaluating metadata.rb for #{@inferred_cookbook_name} in " + file)
312
- raise
313
- end
225
+ @metadata.from_file(file)
226
+ rescue Chef::Exceptions::JSON::ParseError
227
+ Chef::Log.error("Error evaluating metadata.rb for #{@inferred_cookbook_name} in " + file)
228
+ raise
314
229
  end
315
230
 
316
231
  def apply_json_metadata(file)
317
- begin
318
- @metadata.from_json(IO.read(file))
319
- rescue Chef::Exceptions::JSON::ParseError
320
- Chef::Log.error("Couldn't parse cookbook metadata JSON for #{@inferred_cookbook_name} in " + file)
321
- raise
322
- end
232
+ @metadata.from_json(IO.read(file))
233
+ rescue Chef::Exceptions::JSON::ParseError
234
+ Chef::Log.error("Couldn't parse cookbook metadata JSON for #{@inferred_cookbook_name} in " + file)
235
+ raise
323
236
  end
324
237
 
325
238
  def apply_json_cookbook_version_metadata(file)
326
- begin
327
- data = Chef::JSONCompat.parse(IO.read(file))
328
- @metadata.from_hash(data["metadata"])
329
- # the JSON cookbok metadata file is only used by chef-zero.
330
- # The Chef Server API currently does not enforce that the metadata
331
- # have a `name` field, but that will cause an error when attempting
332
- # to load the cookbook. To keep compatibility, we fake it by setting
333
- # the metadata name from the cookbook version object's name.
334
- #
335
- # This behavior can be removed if/when Chef Server enforces that the
336
- # metadata contains a name key.
337
- @metadata.name(data["cookbook_name"]) unless data["metadata"].key?("name")
338
- rescue Chef::Exceptions::JSON::ParseError
339
- Chef::Log.error("Couldn't parse cookbook metadata JSON for #{@inferred_cookbook_name} in " + file)
340
- raise
341
- end
239
+ data = Chef::JSONCompat.parse(IO.read(file))
240
+ @metadata.from_hash(data["metadata"])
241
+ # the JSON cookbok metadata file is only used by chef-zero.
242
+ # The Chef Server API currently does not enforce that the metadata
243
+ # have a `name` field, but that will cause an error when attempting
244
+ # to load the cookbook. To keep compatibility, we fake it by setting
245
+ # the metadata name from the cookbook version object's name.
246
+ #
247
+ # This behavior can be removed if/when Chef Server enforces that the
248
+ # metadata contains a name key.
249
+ @metadata.name(data["cookbook_name"]) unless data["metadata"].key?("name")
250
+ rescue Chef::Exceptions::JSON::ParseError
251
+ Chef::Log.error("Couldn't parse cookbook metadata JSON for #{@inferred_cookbook_name} in " + file)
252
+ raise
342
253
  end
343
254
 
344
255
  def set_frozen
@@ -35,7 +35,7 @@ class Chef
35
35
  attr_reader :repo_paths
36
36
 
37
37
  def initialize(manifest, *repo_paths)
38
- @cookbook_name = manifest[:cookbook_name]
38
+ @cookbook_name = manifest.name
39
39
  @repo_paths = repo_paths.flatten
40
40
  raise ArgumentError, "You must specify at least one repo path" if repo_paths.empty?
41
41
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright:: Copyright (c) 2010-2016 Chef Software, Inc.
2
+ # Copyright:: Copyright (c) 2010-2017, Chef Software Inc.
3
3
  # License:: Apache License, Version 2.0
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -36,10 +36,12 @@ class Chef
36
36
  # Installs the gems into the omnibus gemset.
37
37
  #
38
38
  def install
39
- cookbook_gems = []
39
+ cookbook_gems = Hash.new { |h, k| h[k] = [] }
40
40
 
41
41
  cookbook_collection.each do |cookbook_name, cookbook_version|
42
- cookbook_gems += cookbook_version.metadata.gems
42
+ cookbook_version.metadata.gems.each do |args|
43
+ cookbook_gems[args.first] += args[1..-1]
44
+ end
43
45
  end
44
46
 
45
47
  events.cookbook_gem_start(cookbook_gems)
@@ -48,9 +50,11 @@ class Chef
48
50
  begin
49
51
  Dir.mktmpdir("chef-gem-bundle") do |dir|
50
52
  File.open("#{dir}/Gemfile", "w+") do |tf|
51
- tf.puts "source '#{Chef::Config[:rubygems_url]}'"
52
- cookbook_gems.each do |args|
53
- tf.puts "gem(*#{args.inspect})"
53
+ Array(Chef::Config[:rubygems_url] || "https://www.rubygems.org").each do |s|
54
+ tf.puts "source '#{s}'"
55
+ end
56
+ cookbook_gems.each do |gem_name, args|
57
+ tf.puts "gem(*#{([gem_name] + args).inspect})"
54
58
  end
55
59
  tf.close
56
60
  Chef::Log.debug("generated Gemfile contents:")
@@ -0,0 +1,68 @@
1
+ # Author:: Daniel DeLeo (<dan@chef.io>)
2
+ # Copyright:: Copyright 2015-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "chef/json_compat"
18
+ require "chef/mixin/versioned_api"
19
+
20
+ class Chef
21
+ class Cookbook
22
+ class ManifestV0
23
+ extend Chef::Mixin::VersionedAPI
24
+
25
+ minimum_api_version 0
26
+
27
+ COOKBOOK_SEGMENTS = %w{ resources providers recipes definitions libraries attributes files templates root_files }
28
+
29
+ def self.from_hash(hash)
30
+ response = Mash.new(hash)
31
+ response[:all_files] = COOKBOOK_SEGMENTS.inject([]) do |memo, segment|
32
+ next memo if hash[segment].nil? || hash[segment].empty?
33
+ hash[segment].each do |file|
34
+ file["name"] = "#{segment}/#{file["name"]}" unless segment == "root_files"
35
+ memo << file
36
+ end
37
+ response.delete(segment)
38
+ memo
39
+ end
40
+ response
41
+ end
42
+
43
+ def self.to_hash(manifest)
44
+ result = manifest.manifest.dup
45
+ result.delete("all_files")
46
+
47
+ files = manifest.by_parent_directory
48
+ files.keys.each_with_object(result) do |parent, memo|
49
+ if COOKBOOK_SEGMENTS.include?(parent)
50
+ memo[parent] ||= []
51
+ files[parent].each do |file|
52
+ file["name"] = file["name"].split("/")[1] unless parent == "root_files"
53
+ file.delete("full_path")
54
+ memo[parent] << file
55
+ end
56
+ end
57
+ end
58
+ # Ensure all segments are set to [] if they don't exist.
59
+ # See https://github.com/chef/chef/issues/6044
60
+ COOKBOOK_SEGMENTS.each do |segment|
61
+ result[segment] ||= []
62
+ end
63
+
64
+ result.merge({ "frozen?" => manifest.frozen_version?, "chef_type" => "cookbook_version" })
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,41 @@
1
+ # Copyright:: Copyright 2015-2016, Chef Software Inc.
2
+ # License:: Apache License, Version 2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require "chef/json_compat"
17
+ require "chef/mixin/versioned_api"
18
+
19
+ class Chef
20
+ class Cookbook
21
+ class ManifestV2
22
+ extend Chef::Mixin::VersionedAPI
23
+
24
+ minimum_api_version 2
25
+
26
+ def self.from_hash(hash)
27
+ Chef::Log.debug "processing manifest: #{hash}"
28
+ Mash.new hash
29
+ end
30
+
31
+ def self.to_hash(manifest)
32
+ result = manifest.manifest.dup
33
+ result["all_files"].map! { |file| file.delete("full_path"); file }
34
+ result["frozen?"] = manifest.frozen_version?
35
+ result["chef_type"] = "cookbook_version"
36
+ result.to_hash
37
+ end
38
+
39
+ end
40
+ end
41
+ end
@@ -2,7 +2,7 @@
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
3
  # Author:: AJ Christensen (<aj@chef.io>)
4
4
  # Author:: Seth Falcon (<seth@chef.io>)
5
- # Copyright:: Copyright 2008-2016, Chef Software, Inc.
5
+ # Copyright:: Copyright 2008-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");
@@ -44,13 +44,8 @@ class Chef
44
44
  LICENSE = "license".freeze
45
45
  PLATFORMS = "platforms".freeze
46
46
  DEPENDENCIES = "dependencies".freeze
47
- RECOMMENDATIONS = "recommendations".freeze
48
- SUGGESTIONS = "suggestions".freeze
49
- CONFLICTING = "conflicting".freeze
50
47
  PROVIDING = "providing".freeze
51
- REPLACING = "replacing".freeze
52
48
  ATTRIBUTES = "attributes".freeze
53
- GROUPINGS = "groupings".freeze
54
49
  RECIPES = "recipes".freeze
55
50
  VERSION = "version".freeze
56
51
  SOURCE_URL = "source_url".freeze
@@ -62,17 +57,12 @@ class Chef
62
57
 
63
58
  COMPARISON_FIELDS = [ :name, :description, :long_description, :maintainer,
64
59
  :maintainer_email, :license, :platforms, :dependencies,
65
- :recommendations, :suggestions, :conflicting, :providing,
66
- :replacing, :attributes, :groupings, :recipes, :version,
60
+ :providing, :attributes, :recipes, :version,
67
61
  :source_url, :issues_url, :privacy, :chef_versions, :ohai_versions,
68
62
  :gems ]
69
63
 
70
64
  VERSION_CONSTRAINTS = { :depends => DEPENDENCIES,
71
- :recommends => RECOMMENDATIONS,
72
- :suggests => SUGGESTIONS,
73
- :conflicts => CONFLICTING,
74
65
  :provides => PROVIDING,
75
- :replaces => REPLACING,
76
66
  :chef_version => CHEF_VERSIONS,
77
67
  :ohai_version => OHAI_VERSIONS }
78
68
 
@@ -81,13 +71,8 @@ class Chef
81
71
 
82
72
  attr_reader :platforms
83
73
  attr_reader :dependencies
84
- attr_reader :recommendations
85
- attr_reader :suggestions
86
- attr_reader :conflicting
87
74
  attr_reader :providing
88
- attr_reader :replacing
89
75
  attr_reader :attributes
90
- attr_reader :groupings
91
76
  attr_reader :recipes
92
77
  attr_reader :version
93
78
 
@@ -120,13 +105,8 @@ class Chef
120
105
 
121
106
  @platforms = Mash.new
122
107
  @dependencies = Mash.new
123
- @recommendations = Mash.new
124
- @suggestions = Mash.new
125
- @conflicting = Mash.new
126
108
  @providing = Mash.new
127
- @replacing = Mash.new
128
109
  @attributes = Mash.new
129
- @groupings = Mash.new
130
110
  @recipes = Mash.new
131
111
  @version = Version.new("0.0.0")
132
112
  @source_url = ""
@@ -306,7 +286,7 @@ class Chef
306
286
  # versions<Array>:: Returns the list of versions for the platform
307
287
  def depends(cookbook, *version_args)
308
288
  if cookbook == name
309
- Chef::Log.warn "Ignoring self-dependency in cookbook #{name}, please remove it (in the future this will be fatal)."
289
+ raise "Cookbook depends on itself in cookbook #{name}, please remove the this unnecessary self-dependency"
310
290
  else
311
291
  version = new_args_format(:depends, cookbook, version_args)
312
292
  constraint = validate_version_constraint(:depends, cookbook, version)
@@ -315,57 +295,6 @@ class Chef
315
295
  @dependencies[cookbook]
316
296
  end
317
297
 
318
- # Adds a recommendation for another cookbook, with version checking strings.
319
- #
320
- # === Parameters
321
- # cookbook<String>:: The cookbook
322
- # version<String>:: A version constraint of the form "OP VERSION",
323
- # where OP is one of < <= = > >= ~> and VERSION has
324
- # the form x.y.z or x.y.
325
- #
326
- # === Returns
327
- # versions<Array>:: Returns the list of versions for the platform
328
- def recommends(cookbook, *version_args)
329
- version = new_args_format(:recommends, cookbook, version_args)
330
- constraint = validate_version_constraint(:recommends, cookbook, version)
331
- @recommendations[cookbook] = constraint.to_s
332
- @recommendations[cookbook]
333
- end
334
-
335
- # Adds a suggestion for another cookbook, with version checking strings.
336
- #
337
- # === Parameters
338
- # cookbook<String>:: The cookbook
339
- # version<String>:: A version constraint of the form "OP VERSION",
340
- # where OP is one of < <= = > >= ~> and VERSION has the
341
- # formx.y.z or x.y.
342
- #
343
- # === Returns
344
- # versions<Array>:: Returns the list of versions for the platform
345
- def suggests(cookbook, *version_args)
346
- version = new_args_format(:suggests, cookbook, version_args)
347
- constraint = validate_version_constraint(:suggests, cookbook, version)
348
- @suggestions[cookbook] = constraint.to_s
349
- @suggestions[cookbook]
350
- end
351
-
352
- # Adds a conflict for another cookbook, with version checking strings.
353
- #
354
- # === Parameters
355
- # cookbook<String>:: The cookbook
356
- # version<String>:: A version constraint of the form "OP VERSION",
357
- # where OP is one of < <= = > >= ~> and VERSION has
358
- # the form x.y.z or x.y.
359
- #
360
- # === Returns
361
- # versions<Array>:: Returns the list of versions for the platform
362
- def conflicts(cookbook, *version_args)
363
- version = new_args_format(:conflicts, cookbook, version_args)
364
- constraint = validate_version_constraint(:conflicts, cookbook, version)
365
- @conflicting[cookbook] = constraint.to_s
366
- @conflicting[cookbook]
367
- end
368
-
369
298
  # Adds a recipe, definition, or resource provided by this cookbook.
370
299
  #
371
300
  # Recipes are specified as normal
@@ -387,22 +316,6 @@ class Chef
387
316
  @providing[cookbook]
388
317
  end
389
318
 
390
- # Adds a cookbook that is replaced by this one, with version checking strings.
391
- #
392
- # === Parameters
393
- # cookbook<String>:: The cookbook we replace
394
- # version<String>:: A version constraint of the form "OP VERSION",
395
- # where OP is one of < <= = > >= ~> and VERSION has the form x.y.z or x.y.
396
- #
397
- # === Returns
398
- # versions<Array>:: Returns the list of versions for the platform
399
- def replaces(cookbook, *version_args)
400
- version = new_args_format(:replaces, cookbook, version_args)
401
- constraint = validate_version_constraint(:replaces, cookbook, version)
402
- @replacing[cookbook] = constraint.to_s
403
- @replacing[cookbook]
404
- end
405
-
406
319
  # Metadata DSL to set a valid chef_version. May be declared multiple times
407
320
  # with the result being 'OR'd such that if any statements match, the version
408
321
  # is considered supported. Uses Gem::Requirement for its implementation.
@@ -462,7 +375,7 @@ class Chef
462
375
  cookbook.fully_qualified_recipe_names.map do |recipe_name|
463
376
  unqualified_name =
464
377
  if recipe_name =~ /::default$/
465
- self.name.to_s
378
+ name.to_s
466
379
  else
467
380
  recipe_name
468
381
  end
@@ -519,18 +432,6 @@ class Chef
519
432
  @attributes[name]
520
433
  end
521
434
 
522
- def grouping(name, options)
523
- validate(
524
- options,
525
- {
526
- :title => { :kind_of => String },
527
- :description => { :kind_of => String },
528
- }
529
- )
530
- @groupings[name] = options
531
- @groupings[name]
532
- end
533
-
534
435
  # Convert an Array of Gem::Dependency objects (chef_version/ohai_version) to an Array.
535
436
  #
536
437
  # Gem::Dependencey#to_s is not useful, and there is no #to_json defined on it or its component
@@ -567,29 +468,24 @@ class Chef
567
468
 
568
469
  def to_hash
569
470
  {
570
- NAME => self.name,
571
- DESCRIPTION => self.description,
572
- LONG_DESCRIPTION => self.long_description,
573
- MAINTAINER => self.maintainer,
574
- MAINTAINER_EMAIL => self.maintainer_email,
575
- LICENSE => self.license,
576
- PLATFORMS => self.platforms,
577
- DEPENDENCIES => self.dependencies,
578
- RECOMMENDATIONS => self.recommendations,
579
- SUGGESTIONS => self.suggestions,
580
- CONFLICTING => self.conflicting,
581
- PROVIDING => self.providing,
582
- REPLACING => self.replacing,
583
- ATTRIBUTES => self.attributes,
584
- GROUPINGS => self.groupings,
585
- RECIPES => self.recipes,
586
- VERSION => self.version,
587
- SOURCE_URL => self.source_url,
588
- ISSUES_URL => self.issues_url,
589
- PRIVACY => self.privacy,
590
- CHEF_VERSIONS => gem_requirements_to_array(*self.chef_versions),
591
- OHAI_VERSIONS => gem_requirements_to_array(*self.ohai_versions),
592
- GEMS => self.gems,
471
+ NAME => name,
472
+ DESCRIPTION => description,
473
+ LONG_DESCRIPTION => long_description,
474
+ MAINTAINER => maintainer,
475
+ MAINTAINER_EMAIL => maintainer_email,
476
+ LICENSE => license,
477
+ PLATFORMS => platforms,
478
+ DEPENDENCIES => dependencies,
479
+ PROVIDING => providing,
480
+ ATTRIBUTES => attributes,
481
+ RECIPES => recipes,
482
+ VERSION => version,
483
+ SOURCE_URL => source_url,
484
+ ISSUES_URL => issues_url,
485
+ PRIVACY => privacy,
486
+ CHEF_VERSIONS => gem_requirements_to_array(*chef_versions),
487
+ OHAI_VERSIONS => gem_requirements_to_array(*ohai_versions),
488
+ GEMS => gems,
593
489
  }
594
490
  end
595
491
 
@@ -598,7 +494,7 @@ class Chef
598
494
  end
599
495
 
600
496
  def self.from_hash(o)
601
- cm = self.new()
497
+ cm = new()
602
498
  cm.from_hash(o)
603
499
  cm
604
500
  end
@@ -612,13 +508,8 @@ class Chef
612
508
  @license = o[LICENSE] if o.has_key?(LICENSE)
613
509
  @platforms = o[PLATFORMS] if o.has_key?(PLATFORMS)
614
510
  @dependencies = handle_deprecated_constraints(o[DEPENDENCIES]) if o.has_key?(DEPENDENCIES)
615
- @recommendations = handle_deprecated_constraints(o[RECOMMENDATIONS]) if o.has_key?(RECOMMENDATIONS)
616
- @suggestions = handle_deprecated_constraints(o[SUGGESTIONS]) if o.has_key?(SUGGESTIONS)
617
- @conflicting = handle_deprecated_constraints(o[CONFLICTING]) if o.has_key?(CONFLICTING)
618
511
  @providing = o[PROVIDING] if o.has_key?(PROVIDING)
619
- @replacing = handle_deprecated_constraints(o[REPLACING]) if o.has_key?(REPLACING)
620
512
  @attributes = o[ATTRIBUTES] if o.has_key?(ATTRIBUTES)
621
- @groupings = o[GROUPINGS] if o.has_key?(GROUPINGS)
622
513
  @recipes = o[RECIPES] if o.has_key?(RECIPES)
623
514
  @version = o[VERSION] if o.has_key?(VERSION)
624
515
  @source_url = o[SOURCE_URL] if o.has_key?(SOURCE_URL)
@@ -632,7 +523,7 @@ class Chef
632
523
 
633
524
  def self.from_json(string)
634
525
  o = Chef::JSONCompat.from_json(string)
635
- self.from_hash(o)
526
+ from_hash(o)
636
527
  end
637
528
 
638
529
  def self.validate_json(json_str)
@@ -726,7 +617,7 @@ class Chef
726
617
  if block_given?
727
618
  super
728
619
  else
729
- Chef::Log.debug "ignoring method #{method} on cookbook with name #{name}, possible typo or future metadata?"
620
+ Chef::Log.debug "ignoring method #{method} on cookbook with name #{name}, possible typo or the ghosts of metadata past or future?"
730
621
  end
731
622
  end
732
623
 
@@ -30,7 +30,7 @@ class Chef
30
30
 
31
31
  def initialize(manifest, rest)
32
32
  @manifest = manifest
33
- @cookbook_name = @manifest[:cookbook_name] || @manifest[:name]
33
+ @cookbook_name = @manifest.name
34
34
  @rest = rest
35
35
  end
36
36
 
@@ -44,8 +44,8 @@ class Chef
44
44
  raise "get_filename: Cannot determine segment/filename for incoming filename #{filename}"
45
45
  end
46
46
 
47
- raise "No such segment #{segment} in cookbook #{@cookbook_name}" unless @manifest[segment]
48
- found_manifest_record = @manifest[segment].find { |manifest_record| manifest_record[:path] == filename }
47
+ raise "No such segment #{segment} in cookbook #{@cookbook_name}" unless @manifest.files_for(segment)
48
+ found_manifest_record = @manifest.files_for(segment).find { |manifest_record| manifest_record[:path] == filename }
49
49
  raise "No such file #{filename} in #{@cookbook_name}" unless found_manifest_record
50
50
 
51
51
  cache_filename = File.join("cookbooks", @cookbook_name, found_manifest_record["path"])