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
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: John Keiser (<jkeiser@chef.io>)
3
- # Copyright:: Copyright 2011-2016, Chef Software Inc.
3
+ # Copyright:: Copyright 2011-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -654,7 +654,7 @@ describe Chef::Resource::Link do
654
654
  end
655
655
  context "and the link does not yet exist" do
656
656
  it "links to the target file" do
657
- skip("OS X/FreeBSD/AIX symlink? and readlink working on hard links to symlinks") if os_x? || freebsd? || aix?
657
+ skip("OS X/FreeBSD/AIX/Solaris symlink? and readlink working on hard links to symlinks") if os_x? || freebsd? || aix? || solaris?
658
658
  resource.run_action(:create)
659
659
  expect(File.exists?(target_file)).to be_truthy
660
660
  # OS X gets angry about this sort of link. Bug in OS X, IMO.
@@ -673,7 +673,7 @@ describe Chef::Resource::Link do
673
673
  end
674
674
  context "and the link does not yet exist" do
675
675
  it "links to the target file" do
676
- skip("OS X/FreeBSD/AIX fails to create hardlinks to broken symlinks") if os_x? || freebsd? || aix?
676
+ skip("OS X/FreeBSD/AIX/Solaris fails to create hardlinks to broken symlinks") if os_x? || freebsd? || aix? || solaris?
677
677
  resource.run_action(:create)
678
678
  expect(File.exists?(target_file) || File.symlink?(target_file)).to be_truthy
679
679
  expect(symlink?(target_file)).to be_truthy
@@ -32,6 +32,7 @@ describe Chef::Resource::Template do
32
32
  let(:node) do
33
33
  node = Chef::Node.new
34
34
  node.normal[:slappiness] = "a warm gun"
35
+ node.normal[:nested][:secret] = "value"
35
36
  node
36
37
  end
37
38
 
@@ -209,4 +210,36 @@ describe Chef::Resource::Template do
209
210
  end
210
211
  end
211
212
 
213
+ describe "when template variables contain lazy{} calls" do
214
+ it "resolves the DelayedEvaluator" do
215
+ resource.source("openldap_variable_stuff.conf.erb")
216
+ resource.variables(:secret => Chef::DelayedEvaluator.new { "nutella" })
217
+ resource.run_action(:create)
218
+ expect(IO.read(path)).to eq("super secret is nutella")
219
+ end
220
+
221
+ it "does not mutate the resource variables" do
222
+ resource.source("openldap_variable_stuff.conf.erb")
223
+ resource.variables(:secret => Chef::DelayedEvaluator.new { "nutella" })
224
+ resource.run_action(:create)
225
+ expect(resource.variables[:secret]).to be_a Chef::DelayedEvaluator
226
+ end
227
+
228
+ it "resolves the DelayedEvaluator when deeply nested" do
229
+ resource.source("openldap_nested_variable_stuff.erb")
230
+ resource.variables(:secret => [{ "key" => Chef::DelayedEvaluator.new { "nutella" } }])
231
+ resource.run_action(:create)
232
+ expect(IO.read(path)).to eq("super secret is nutella")
233
+ end
234
+ end
235
+
236
+ describe "when passing a node attribute mash as a template variable" do
237
+ it "uses the node attributes like a hash" do
238
+ resource.source("openldap_variable_stuff.conf.erb")
239
+ resource.variables(node[:nested])
240
+ resource.run_action(:create)
241
+ expect(IO.read(path)).to eq("super secret is value")
242
+ end
243
+ end
244
+
212
245
  end
@@ -28,11 +28,9 @@ describe "Chef::Resource::User with Chef::Provider::User::Dscl provider", metada
28
28
  include Chef::Mixin::ShellOut
29
29
 
30
30
  def clean_user
31
- begin
32
- shell_out!("/usr/bin/dscl . -delete '/Users/#{username}'")
33
- rescue Mixlib::ShellOut::ShellCommandFailed
31
+ shell_out!("/usr/bin/dscl . -delete '/Users/#{username}'")
32
+ rescue Mixlib::ShellOut::ShellCommandFailed
34
33
  # Raised when the user is already cleaned
35
- end
36
34
  end
37
35
 
38
36
  def user_should_exist
@@ -0,0 +1,78 @@
1
+ #
2
+ # Copyright:: Copyright 2017, Noah Kantrowitz
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require "spec_helper"
19
+
20
+ describe "root aliases" do
21
+ let(:chef_repo_path) { File.expand_path(File.join(CHEF_SPEC_DATA, "root_alias_cookbooks")) }
22
+ let(:cookbook_collection) do
23
+ cl = Chef::CookbookLoader.new(chef_repo_path)
24
+ cl.load_cookbooks
25
+ Chef::CookbookCollection.new(cl)
26
+ end
27
+ let(:node) do
28
+ node = Chef::Node.new
29
+ node.automatic[:recipes] = []
30
+ node
31
+ end
32
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
33
+ let(:run_context) { Chef::RunContext.new(node, cookbook_collection, events) }
34
+ before do
35
+ node.run_context = run_context
36
+ end
37
+
38
+ describe "attributes root aliases" do
39
+ it "should load attributes.rb when included directly" do
40
+ node.include_attribute("simple")
41
+ expect(node["aliased"]["attr"]).to eq "value"
42
+ end
43
+
44
+ it "should load attributes.rb when loading a cookbook" do
45
+ node.run_list << "simple"
46
+ run_context.load(node.run_list.expand("_default"))
47
+ expect(node["aliased"]["attr"]).to eq "value"
48
+ end
49
+
50
+ context "with both an attributes.rb and attributes/default.rb" do
51
+ it "should log an error and ignore attributes/default.rb" do
52
+ expect(Chef::Log).to receive(:error).with("Cookbook dup_attr contains both attributes.rb and and attributes/default.rb, ignoring attributes/default.rb")
53
+ node.run_list << "dup_attr"
54
+ run_context.load(node.run_list.expand("_default"))
55
+ expect(node["aliased"]["attr"]).to eq "value"
56
+ end
57
+ end
58
+ end
59
+
60
+ describe "recipe root aliased" do
61
+ it "should load recipe.rb" do
62
+ node.run_list << "simple"
63
+ run_context.load(node.run_list.expand("_default"))
64
+ run_context.include_recipe("simple")
65
+ expect(run_context.resource_collection.map(&:to_s)).to eq ["ruby_block[root alias]"]
66
+ end
67
+
68
+ context "with both an recipe.rb and recipes/default.rb" do
69
+ it "should log an error and ignore recipes/default.rb" do
70
+ expect(Chef::Log).to receive(:error).with("Cookbook dup_recipe contains both recipe.rb and and recipes/default.rb, ignoring recipes/default.rb")
71
+ node.run_list << "dup_recipe"
72
+ run_context.load(node.run_list.expand("_default"))
73
+ run_context.include_recipe("dup_recipe")
74
+ expect(run_context.resource_collection.map(&:to_s)).to eq ["ruby_block[root alias]"]
75
+ end
76
+ end
77
+ end
78
+ end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Daniel DeLeo (<dan@chef.io>)
3
- # Copyright:: Copyright 2012-2016, Chef Software, Inc.
3
+ # Copyright:: Copyright 2012-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,7 +20,6 @@ require "spec_helper"
20
20
  require "functional/resource/base"
21
21
  require "chef/version"
22
22
  require "chef/shell"
23
- require "chef/mixin/command/unix"
24
23
 
25
24
  describe Shell do
26
25
 
@@ -28,7 +27,6 @@ describe Shell do
28
27
  # not catch cases where chef-shell fails to boot because of changes in
29
28
  # chef/client.rb
30
29
  describe "smoke tests", :unix_only => true do
31
- include Chef::Mixin::Command::Unix
32
30
 
33
31
  TIMEOUT = 300
34
32
 
@@ -79,44 +77,26 @@ describe Shell do
79
77
  end
80
78
 
81
79
  def run_chef_shell_with(options)
82
- case ohai[:platform]
83
- when "aix"
84
- config = File.expand_path("shef-config.rb", CHEF_SPEC_DATA)
85
- path_to_chef_shell = File.expand_path("../../../bin/chef-shell", __FILE__)
86
- output = ""
87
- status = popen4("#{path_to_chef_shell} -c #{config} #{options}", :waitlast => true) do |pid, stdin, stdout, stderr|
88
- read_until(stdout, "chef (#{Chef::VERSION})>")
89
- yield stdout, stdin if block_given?
90
- stdin.write("'done'\n")
91
- output = read_until(stdout, '=> "done"')
92
- stdin.print("exit\n")
93
- flush_output(stdout)
94
- end
80
+ # Windows ruby installs don't (always?) have PTY,
81
+ # so hide the require here
95
82
 
96
- [output, status.exitstatus]
97
- else
98
- # Windows ruby installs don't (always?) have PTY,
99
- # so hide the require here
100
- begin
101
- require "pty"
102
- config = File.expand_path("shef-config.rb", CHEF_SPEC_DATA)
103
- path_to_chef_shell = File.expand_path("../../../bin/chef-shell", __FILE__)
104
- reader, writer, pid = PTY.spawn("#{path_to_chef_shell} -c #{config} #{options}")
105
- read_until(reader, "chef (#{Chef::VERSION})>")
106
- yield reader, writer if block_given?
107
- writer.puts('"done"')
108
- output = read_until(reader, '=> "done"')
109
- writer.print("exit\n")
110
- flush_output(reader)
111
- writer.close
112
-
113
- exitstatus = wait_or_die(pid)
114
-
115
- [output, exitstatus]
116
- rescue PTY::ChildExited => e
117
- [output, e.status]
118
- end
119
- end
83
+ require "pty"
84
+ config = File.expand_path("shef-config.rb", CHEF_SPEC_DATA)
85
+ path_to_chef_shell = File.expand_path("../../../bin/chef-shell", __FILE__)
86
+ reader, writer, pid = PTY.spawn("#{path_to_chef_shell} -c #{config} #{options}")
87
+ read_until(reader, "chef (#{Chef::VERSION})>")
88
+ yield reader, writer if block_given?
89
+ writer.puts('"done"')
90
+ output = read_until(reader, '=> "done"')
91
+ writer.print("exit\n")
92
+ flush_output(reader)
93
+ writer.close
94
+
95
+ exitstatus = wait_or_die(pid)
96
+
97
+ [output, exitstatus]
98
+ rescue PTY::ChildExited => e
99
+ [output, e.status]
120
100
  end
121
101
 
122
102
  it "boots correctly with -lauto" do
@@ -135,6 +115,24 @@ describe Shell do
135
115
  expect(exitstatus).to eq(0)
136
116
  end
137
117
 
118
+ context "on solo mode" do
119
+ it "starts correctly" do
120
+ output, exitstatus = run_chef_shell_with("--solo")
121
+ expect(output).to include("done")
122
+ expect(exitstatus).to eq(0)
123
+ end
124
+
125
+ it "should be able to use the API" do
126
+ output, exitstatus = run_chef_shell_with("-s") do |out, keyboard|
127
+ simple_api_get = "api.get('data')"
128
+ keyboard.puts(simple_api_get)
129
+ read_until(out, simple_api_get)
130
+ end
131
+ expect(output).to include("{}")
132
+ expect(exitstatus).to eq(0)
133
+ end
134
+ end
135
+
138
136
  it "sets the override_runlist from the command line" do
139
137
  output, exitstatus = run_chef_shell_with("-o 'override::foo,override::bar'") do |out, keyboard|
140
138
  show_recipes_code = %q[puts "#{node["recipes"].inspect}"]
@@ -46,6 +46,7 @@ describe "chef-client" do
46
46
  # we're running `chef-client` from the source tree and not the external one.
47
47
  # cf. CHEF-4914
48
48
  let(:chef_client) { "ruby '#{chef_dir}/chef-client' --minimal-ohai" }
49
+ let(:chef_solo) { "ruby '#{chef_dir}/chef-solo' --minimal-ohai" }
49
50
 
50
51
  let(:critical_env_vars) { %w{_ORIGINAL_GEM_PATH GEM_PATH GEM_HOME GEM_ROOT BUNDLE_BIN_PATH BUNDLE_GEMFILE RUBYLIB RUBYOPT RUBY_ENGINE RUBY_ROOT RUBY_VERSION PATH}.map { |o| "#{o}=#{ENV[o]}" } .join(" ") }
51
52
 
@@ -293,10 +294,9 @@ chef_server_url 'http://omg.com/blah'
293
294
  cookbook_path "#{path_to('cookbooks')}"
294
295
  EOM
295
296
 
296
- result = shell_out("#{chef_client} -c \"#{path_to('config/client.rb')}\" -r 'x::default' -z", :cwd => chef_dir)
297
+ result = shell_out("#{chef_client} -c \"#{path_to('config/client.rb')}\" -r 'x::default' -z -l info", :cwd => chef_dir)
297
298
  expect(result.stdout).not_to include("Overridden Run List")
298
299
  expect(result.stdout).to include("Run List is [recipe[x::default]]")
299
- #puts result.stdout
300
300
  result.error!
301
301
  end
302
302
 
@@ -387,18 +387,8 @@ EOM
387
387
  when_the_repository "has a cookbook that generates deprecation warnings" do
388
388
  before do
389
389
  file "cookbooks/x/recipes/default.rb", <<-EOM
390
- class ::MyResource < Chef::Resource
391
- use_automatic_resource_name
392
- property :x, default: []
393
- property :y, default: {}
394
- end
395
-
396
- my_resource 'blah' do
397
- 1.upto(10) do
398
- x nil
399
- end
400
- x nil
401
- end
390
+ Chef.deprecated(:internal_api, "Test deprecation")
391
+ Chef.deprecated(:internal_api, "Test deprecation")
402
392
  EOM
403
393
  end
404
394
 
@@ -431,7 +421,7 @@ EOM
431
421
  expect(run_complete).to be >= 0
432
422
 
433
423
  # Make sure there is exactly one result for each, and that it occurs *after* the complete message.
434
- expect(match_indices(/An attempt was made to change x from \[\] to nil by calling x\(nil\). In Chef 12, this does a get rather than a set. In Chef 13, this will change to set the value to nil./, result.stdout)).to match([ be > run_complete ])
424
+ expect(match_indices(/Test deprecation/, result.stdout)).to match([ be > run_complete ])
435
425
  end
436
426
  end
437
427
 
@@ -454,7 +444,7 @@ control_group "control group without top level control" do
454
444
  end
455
445
  RECIPE
456
446
 
457
- result = shell_out("#{chef_client} -c \"#{path_to('config/client.rb')}\" -o 'audit_test::succeed'", :cwd => chef_dir)
447
+ result = shell_out("#{chef_client} -c \"#{path_to('config/client.rb')}\" -o 'audit_test::succeed' -l info", :cwd => chef_dir)
458
448
  expect(result.error?).to be_falsey
459
449
  expect(result.stdout).to include("Successfully executed all `control_group` blocks and contained examples")
460
450
  end
@@ -474,6 +464,39 @@ end
474
464
  end
475
465
  end
476
466
 
467
+ when_the_repository "has a cookbook with an ohai plugin" do
468
+ before do
469
+ file "cookbooks/x/recipes/default.rb", <<-RECIPE
470
+ file #{path_to('tempfile.txt').inspect} do
471
+ content node["english"]["version"]
472
+ end
473
+ RECIPE
474
+
475
+ file "cookbooks/x/ohai/english.rb", <<-OHAI
476
+ Ohai.plugin(:English) do
477
+ provides 'english'
478
+
479
+ collect_data do
480
+ english Mash.new
481
+ english[:version] = "2014"
482
+ end
483
+ end
484
+ OHAI
485
+
486
+ file "config/client.rb", <<EOM
487
+ local_mode true
488
+ cookbook_path "#{path_to('cookbooks')}"
489
+ EOM
490
+ end
491
+
492
+ it "should run the ohai plugin" do
493
+ result = shell_out("#{chef_client} -l debug -c \"#{path_to('config/client.rb')}\" -o 'x::default' --no-fork", :cwd => chef_dir)
494
+ result.error!
495
+
496
+ expect(IO.read(path_to("tempfile.txt"))).to eq("2014")
497
+ end
498
+ end
499
+
477
500
  # Fails on appveyor, but works locally on windows and on windows hosts in Ci.
478
501
  context "when using recipe-url", :skip_appveyor do
479
502
  before(:each) do
@@ -499,4 +522,74 @@ EOM
499
522
  expect(result.exitstatus).not_to eq(0)
500
523
  end
501
524
  end
525
+
526
+ when_the_repository "has a cookbook with broken metadata.rb, but has metadata.json" do
527
+ before do
528
+ file "cookbooks/x/recipes/default.rb", ""
529
+ file "cookbooks/x/metadata.rb", <<EOM
530
+ name 'x'
531
+ version '0.0.1'
532
+ raise "TEH SADNESS"
533
+ EOM
534
+ file "cookbooks/x/metadata.json", <<EOM
535
+ {
536
+ "name": "x",
537
+ "version": "0.0.1"
538
+ }
539
+ EOM
540
+
541
+ file "config/client.rb", <<EOM
542
+ local_mode true
543
+ cookbook_path "#{path_to('cookbooks')}"
544
+ EOM
545
+ end
546
+
547
+ it "the chef client run should succeed" do
548
+ command = shell_out("#{chef_client} -c \"#{path_to('config/client.rb')}\" -o 'x::default' --no-fork", :cwd => chef_dir)
549
+ command.error!
550
+ end
551
+
552
+ it "a chef-solo run should succeed" do
553
+ command = shell_out("#{chef_solo} -c \"#{path_to('config/client.rb')}\" -o 'x::default' --no-fork", :cwd => chef_dir)
554
+ command.error!
555
+ end
556
+ end
557
+
558
+ when_the_repository "has a cookbook that logs at the info level" do
559
+ before do
560
+ file "cookbooks/x/recipes/default.rb", <<EOM
561
+ log "info level" do
562
+ level :info
563
+ end
564
+ EOM
565
+ file "config/client.rb", <<EOM
566
+ local_mode true
567
+ cookbook_path "#{path_to('cookbooks')}"
568
+ EOM
569
+ end
570
+
571
+ it "a chef client run should not log to info by default" do
572
+ command = shell_out("#{chef_client} -c \"#{path_to('config/client.rb')}\" -o 'x::default' --no-fork", :cwd => chef_dir)
573
+ command.error!
574
+ expect(command.stdout).not_to include("INFO")
575
+ end
576
+
577
+ it "a chef client run to a pipe should not log to info by default" do
578
+ command = shell_out("#{chef_client} -c \"#{path_to('config/client.rb')}\" -o 'x::default' --no-fork | tee #{path_to('chefrun.out')}", :cwd => chef_dir)
579
+ command.error!
580
+ expect(command.stdout).not_to include("INFO")
581
+ end
582
+
583
+ it "a chef solo run should not log to info by default" do
584
+ command = shell_out("#{chef_solo} -c \"#{path_to('config/client.rb')}\" -o 'x::default' --no-fork", :cwd => chef_dir)
585
+ command.error!
586
+ expect(command.stdout).not_to include("INFO")
587
+ end
588
+
589
+ it "a chef solo run to a pipe should not log to info by default" do
590
+ command = shell_out("#{chef_solo} -c \"#{path_to('config/client.rb')}\" -o 'x::default' --no-fork | tee #{path_to('chefrun.out')}", :cwd => chef_dir)
591
+ command.error!
592
+ expect(command.stdout).not_to include("INFO")
593
+ end
594
+ end
502
595
  end
@@ -25,7 +25,7 @@ describe "chef-client" do
25
25
 
26
26
  let(:critical_env_vars) { %w{PATH RUBYOPT BUNDLE_GEMFILE GEM_PATH}.map { |o| "#{o}=#{ENV[o]}" } .join(" ") }
27
27
 
28
- when_the_repository "does not have exit_status configured" do
28
+ when_the_repository "uses RFC 062 defined exit codes" do
29
29
 
30
30
  def setup_client_rb
31
31
  file "config/client.rb", <<EOM
@@ -42,110 +42,6 @@ audit_mode :audit_only
42
42
  EOM
43
43
  end
44
44
 
45
- def run_chef_client_and_expect_exit_code(exit_code)
46
- shell_out!(
47
- "#{chef_client} -c \"#{path_to('config/client.rb')}\" -o 'x::default'",
48
- :cwd => chef_dir,
49
- :returns => [exit_code])
50
- end
51
-
52
- context "has a cookbook" do
53
- context "with a library" do
54
- context "which cannot be loaded" do
55
- before do
56
- file "cookbooks/x/recipes/default.rb", ""
57
- file "cookbooks/x/libraries/error.rb", "require 'does/not/exist'"
58
- end
59
-
60
- it "exits with GENERIC_FAILURE, 1" do
61
- setup_client_rb
62
- run_chef_client_and_expect_exit_code 1
63
- end
64
- end
65
- end
66
-
67
- context "with an audit recipe" do
68
- context "which fails" do
69
- before do
70
- file "cookbooks/x/recipes/default.rb", <<-RECIPE
71
- control_group "control group without top level control" do
72
- it "should fail" do
73
- expect(2 - 2).to eq(1)
74
- end
75
- end
76
- RECIPE
77
- end
78
-
79
- it "exits with GENERIC_FAILURE, 1" do
80
- setup_client_rb_with_audit_mode
81
- run_chef_client_and_expect_exit_code 1
82
- end
83
- end
84
- end
85
-
86
- context "with a recipe" do
87
- context "which throws an error" do
88
- before { file "cookbooks/x/recipes/default.rb", "raise 'BOOM'" }
89
-
90
- it "exits with GENERIC_FAILURE, 1" do
91
- setup_client_rb
92
- run_chef_client_and_expect_exit_code 1
93
- end
94
- end
95
-
96
- context "with a recipe which calls Chef::Application.fatal with a non-RFC exit code" do
97
- before { file "cookbooks/x/recipes/default.rb", "Chef::Application.fatal!('BOOM', 123)" }
98
-
99
- it "exits with the specified exit code" do
100
- setup_client_rb
101
- run_chef_client_and_expect_exit_code 123
102
- end
103
- end
104
-
105
- context "with a recipe which calls Chef::Application.exit with a non-RFC exit code" do
106
- before { file "cookbooks/x/recipes/default.rb", "Chef::Application.exit!('BOOM', 231)" }
107
-
108
- it "exits with the specified exit code" do
109
- setup_client_rb
110
- run_chef_client_and_expect_exit_code 231
111
- end
112
- end
113
- end
114
-
115
- context "when an attempt to reboot fails (like from the reboot resource)" do
116
- before do
117
- file "cookbooks/x/recipes/default.rb", <<EOM
118
- raise Chef::Exceptions::RebootFailed.new
119
- EOM
120
- end
121
-
122
- it "exits with GENERIC_FAILURE, 1" do
123
- setup_client_rb
124
- run_chef_client_and_expect_exit_code 1
125
- end
126
- end
127
- end
128
- end
129
-
130
- when_the_repository "does has exit_status enabled" do
131
-
132
- def setup_client_rb
133
- file "config/client.rb", <<EOM
134
- local_mode true
135
- cookbook_path "#{path_to('cookbooks')}"
136
- exit_status :enabled
137
- EOM
138
- end
139
-
140
- def setup_client_rb_with_audit_mode
141
- file "config/client.rb", <<EOM
142
- local_mode true
143
- cookbook_path "#{path_to('cookbooks')}"
144
- exit_status :enabled
145
- audit_mode :audit_only
146
- EOM
147
- end
148
-
149
45
  def run_chef_client_and_expect_exit_code(exit_code)
150
46
  shell_out!("#{chef_client} -c \"#{path_to('config/client.rb')}\" -o 'x::default'",
151
47
  :cwd => chef_dir,
@@ -158,103 +158,6 @@ EOM
158
158
  end
159
159
  end
160
160
 
161
- when_the_repository "has extraneous subdirectories and files under a cookbook" do
162
- before do
163
- directory "cookbooks/cookbook1" do
164
- file "a.rb", ""
165
- file "blarghle/blah.rb", ""
166
- directory "attributes" do
167
- file "a.rb", ""
168
- file "b.json", {}
169
- file "c/d.rb", ""
170
- file "c/e.json", {}
171
- end
172
- directory "definitions" do
173
- file "a.rb", ""
174
- file "b.json", {}
175
- file "c/d.rb", ""
176
- file "c/e.json", {}
177
- end
178
- directory "recipes" do
179
- file "a.rb", ""
180
- file "b.json", {}
181
- file "c/d.rb", ""
182
- file "c/e.json", {}
183
- end
184
- directory "libraries" do
185
- file "a.rb", ""
186
- file "b.json", {}
187
- file "c/d.rb", ""
188
- file "c/e.json", {}
189
- end
190
- directory "templates" do
191
- file "a.rb", ""
192
- file "b.json", {}
193
- file "c/d.rb", ""
194
- file "c/e.json", {}
195
- end
196
- directory "files" do
197
- file "a.rb", ""
198
- file "b.json", {}
199
- file "c/d.rb", ""
200
- file "c/e.json", {}
201
- end
202
- directory "resources" do
203
- file "a.rb", ""
204
- file "b.json", {}
205
- file "c/d.rb", ""
206
- file "c/e.json", {}
207
- end
208
- directory "providers" do
209
- file "a.rb", ""
210
- file "b.json", {}
211
- file "c/d.rb", ""
212
- file "c/e.json", {}
213
- end
214
- end
215
- end
216
-
217
- it "knife list --local -Rfp / should NOT return them" do
218
- knife("list --local -Rfp /").should_succeed <<EOM
219
- /cookbooks/
220
- /cookbooks/cookbook1/
221
- /cookbooks/cookbook1/a.rb
222
- /cookbooks/cookbook1/attributes/
223
- /cookbooks/cookbook1/attributes/a.rb
224
- /cookbooks/cookbook1/definitions/
225
- /cookbooks/cookbook1/definitions/a.rb
226
- /cookbooks/cookbook1/files/
227
- /cookbooks/cookbook1/files/a.rb
228
- /cookbooks/cookbook1/files/b.json
229
- /cookbooks/cookbook1/files/c/
230
- /cookbooks/cookbook1/files/c/d.rb
231
- /cookbooks/cookbook1/files/c/e.json
232
- /cookbooks/cookbook1/libraries/
233
- /cookbooks/cookbook1/libraries/a.rb
234
- /cookbooks/cookbook1/libraries/b.json
235
- /cookbooks/cookbook1/libraries/c/
236
- /cookbooks/cookbook1/libraries/c/d.rb
237
- /cookbooks/cookbook1/libraries/c/e.json
238
- /cookbooks/cookbook1/providers/
239
- /cookbooks/cookbook1/providers/a.rb
240
- /cookbooks/cookbook1/providers/c/
241
- /cookbooks/cookbook1/providers/c/d.rb
242
- /cookbooks/cookbook1/recipes/
243
- /cookbooks/cookbook1/recipes/a.rb
244
- /cookbooks/cookbook1/resources/
245
- /cookbooks/cookbook1/resources/a.rb
246
- /cookbooks/cookbook1/resources/c/
247
- /cookbooks/cookbook1/resources/c/d.rb
248
- /cookbooks/cookbook1/templates/
249
- /cookbooks/cookbook1/templates/a.rb
250
- /cookbooks/cookbook1/templates/b.json
251
- /cookbooks/cookbook1/templates/c/
252
- /cookbooks/cookbook1/templates/c/d.rb
253
- /cookbooks/cookbook1/templates/c/e.json
254
- EOM
255
- end
256
- end
257
-
258
161
  when_the_repository "has a file in cookbooks/" do
259
162
  before { file "cookbooks/file", "" }
260
163
  it "does not show up in list -Rfp" do