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,5 +1,5 @@
1
1
  #--
2
- # Copyright:: Copyright 2012-2016, Chef Software, Inc.
2
+ # Copyright:: Copyright 2012-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");
@@ -22,8 +22,14 @@ require "chef/node/mixin/immutablize_hash"
22
22
 
23
23
  class Chef
24
24
  class Node
25
-
26
25
  module Immutablize
26
+ # For elements like Fixnums, true, nil...
27
+ def safe_dup(e)
28
+ e.dup
29
+ rescue TypeError
30
+ e
31
+ end
32
+
27
33
  def immutablize(value)
28
34
  case value
29
35
  when Hash
@@ -31,7 +37,7 @@ class Chef
31
37
  when Array
32
38
  ImmutableArray.new(value, __root__, __node__, __precedence__)
33
39
  else
34
- value
40
+ safe_dup(value).freeze
35
41
  end
36
42
  end
37
43
  end
@@ -70,21 +76,20 @@ class Chef
70
76
  end
71
77
 
72
78
  def to_a
73
- a = Array.new
74
- each do |v|
75
- a <<
76
- case v
77
- when ImmutableArray
78
- v.to_a
79
- when ImmutableMash
80
- v.to_hash
81
- else
82
- v
83
- end
84
- end
85
- a
79
+ Array.new(map do |v|
80
+ case v
81
+ when ImmutableArray
82
+ v.to_a
83
+ when ImmutableMash
84
+ v.to_h
85
+ else
86
+ safe_dup(v)
87
+ end
88
+ end)
86
89
  end
87
90
 
91
+ alias_method :to_array, :to_a
92
+
88
93
  # for consistency's sake -- integers 'converted' to integers
89
94
  def convert_key(key)
90
95
  key
@@ -125,26 +130,12 @@ class Chef
125
130
 
126
131
  alias :attribute? :has_key?
127
132
 
128
- def method_missing(symbol, *args)
129
- if symbol == :to_ary
130
- super
131
- elsif args.empty?
132
- if key?(symbol)
133
- self[symbol]
134
- else
135
- raise NoMethodError, "Undefined method or attribute `#{symbol}' on `node'"
136
- end
137
- # This will raise a ImmutableAttributeModification error:
138
- elsif symbol.to_s =~ /=$/
139
- key_to_set = symbol.to_s[/^(.+)=$/, 1]
140
- self[key_to_set] = (args.length == 1 ? args[0] : args)
141
- else
142
- raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'"
143
- end
144
- end
145
-
146
133
  # Mash uses #convert_value to mashify values on input.
147
134
  # Since we're handling this ourselves, override it to be a no-op
135
+ #
136
+ # FIXME? this seems wrong to do and i think is responsible for
137
+ # #dup needing to be more complicated than Mash.new(self)?
138
+ #
148
139
  def convert_value(value)
149
140
  value
150
141
  end
@@ -155,25 +146,38 @@ class Chef
155
146
  # Of course, 'default' has a specific meaning in Chef-land
156
147
 
157
148
  def dup
158
- Mash.new(self)
149
+ h = Mash.new
150
+ each_pair do |k, v|
151
+ h[k] = safe_dup(v)
152
+ end
153
+ h
159
154
  end
160
155
 
161
- def to_hash
156
+ def to_h
162
157
  h = Hash.new
163
158
  each_pair do |k, v|
164
159
  h[k] =
165
160
  case v
166
161
  when ImmutableMash
167
- v.to_hash
162
+ v.to_h
168
163
  when ImmutableArray
169
164
  v.to_a
170
165
  else
171
- v
166
+ safe_dup(v)
172
167
  end
173
168
  end
174
169
  h
175
170
  end
176
171
 
172
+ alias_method :to_hash, :to_h
173
+
174
+ # For elements like Fixnums, true, nil...
175
+ def safe_dup(e)
176
+ e.dup
177
+ rescue TypeError
178
+ e
179
+ end
180
+
177
181
  prepend Chef::Node::Mixin::StateTracking
178
182
  prepend Chef::Node::Mixin::ImmutablizeHash
179
183
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright:: Copyright 2016, Chef Software, Inc.
2
+ # Copyright:: Copyright 2016-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");
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright:: Copyright 2016, Chef Software, Inc.
2
+ # Copyright:: Copyright 2016-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");
data/lib/chef/node.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  # Author:: Christopher Brown (<cb@chef.io>)
3
3
  # Author:: Christopher Walters (<cw@chef.io>)
4
4
  # Author:: Tim Hinderliter (<tim@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");
@@ -34,6 +34,7 @@ require "chef/mash"
34
34
  require "chef/json_compat"
35
35
  require "chef/search/query"
36
36
  require "chef/whitelist"
37
+ require "chef/blacklist"
37
38
 
38
39
  class Chef
39
40
  class Node
@@ -333,8 +334,12 @@ class Chef
333
334
 
334
335
  platform, version = Chef::Platform.find_platform_and_version(self)
335
336
  Chef::Log.debug("Platform is #{platform} version #{version}")
336
- self.automatic[:platform] = platform
337
- self.automatic[:platform_version] = version
337
+ automatic[:platform] = platform
338
+ automatic[:platform_version] = version
339
+ end
340
+
341
+ def consume_ohai_data(ohai_data)
342
+ self.automatic_attrs = Chef::Mixin::DeepMerge.merge(automatic_attrs, ohai_data)
338
343
  end
339
344
 
340
345
  # Consumes the combined run_list and other attributes in +attrs+
@@ -343,7 +348,7 @@ class Chef
343
348
  normal_attrs_to_merge = consume_chef_environment(normal_attrs_to_merge)
344
349
  Chef::Log.debug("Applying attributes from json file")
345
350
  self.normal_attrs = Chef::Mixin::DeepMerge.merge(normal_attrs, normal_attrs_to_merge)
346
- self.tags # make sure they're defined
351
+ tags # make sure they're defined
347
352
  end
348
353
 
349
354
  # Lazy initializer for tags attribute
@@ -394,8 +399,8 @@ class Chef
394
399
  # Clear defaults and overrides, so that any deleted attributes
395
400
  # between runs are still gone.
396
401
  def reset_defaults_and_overrides
397
- self.default.clear
398
- self.override.clear
402
+ default.clear
403
+ override.clear
399
404
  end
400
405
 
401
406
  # Expands the node's run list and sets the default and override
@@ -414,7 +419,7 @@ class Chef
414
419
  expansion = run_list.expand(chef_environment, data_source)
415
420
  raise Chef::Exceptions::MissingRole, expansion if expansion.errors?
416
421
 
417
- self.tags # make sure they're defined
422
+ tags # make sure they're defined
418
423
 
419
424
  automatic_attrs[:recipes] = expansion.recipes.with_duplicate_names
420
425
  automatic_attrs[:expanded_run_list] = expansion.recipes.with_fully_qualified_names_and_version_constraints
@@ -507,12 +512,6 @@ class Chef
507
512
  self
508
513
  end
509
514
 
510
- # Create a Chef::Node from JSON
511
- def self.json_create(o)
512
- Chef.deprecated(:json_auto_inflate, "Auto inflation of JSON data is deprecated. Please use Chef::Node#from_hash")
513
- from_hash(o)
514
- end
515
-
516
515
  def self.from_hash(o)
517
516
  return o if o.kind_of? Chef::Node
518
517
  node = new
@@ -599,11 +598,6 @@ class Chef
599
598
  rescue Net::HTTPServerException => e
600
599
  if e.response.code == "404"
601
600
  chef_server_rest.post("nodes", data_for_save)
602
- # Chef Server before 12.3 rejects node JSON with 'policy_name' or
603
- # 'policy_group' keys, but 'policy_name' will be detected first.
604
- # Backcompat can be removed in 13.0
605
- elsif e.response.code == "400" && e.response.body.include?("Invalid key policy_name")
606
- save_without_policyfile_attrs
607
601
  else
608
602
  raise
609
603
  end
@@ -632,14 +626,14 @@ class Chef
632
626
 
633
627
  def ==(other)
634
628
  if other.kind_of?(self.class)
635
- self.name == other.name
629
+ name == other.name
636
630
  else
637
631
  false
638
632
  end
639
633
  end
640
634
 
641
635
  def <=>(other)
642
- self.name <=> other.name
636
+ name <=> other.name
643
637
  end
644
638
 
645
639
  private
@@ -669,6 +663,13 @@ class Chef
669
663
  Chef::Log.info("Whitelisting #{level} node attributes for save.")
670
664
  data[level] = Chef::Whitelist.filter(data[level], whitelist)
671
665
  end
666
+
667
+ blacklist_config_option = "#{level}_attribute_blacklist".to_sym
668
+ blacklist = Chef::Config[blacklist_config_option]
669
+ unless blacklist.nil? # nil => remove nothing
670
+ Chef::Log.info("Blacklisting #{level} node attributes for save")
671
+ data[level] = Chef::Blacklist.filter(data[level], blacklist)
672
+ end
672
673
  end
673
674
  data
674
675
  end
data/lib/chef/node_map.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Lamont Granquist (<lamont@chef.io>)
3
- # Copyright:: Copyright 2014-2016, Chef Software, Inc.
3
+ # Copyright:: Copyright 2014-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");
@@ -31,10 +31,7 @@ class Chef
31
31
  #
32
32
  # @return [NodeMap] Returns self for possible chaining
33
33
  #
34
- def set(key, value, platform: nil, platform_version: nil, platform_family: nil, os: nil, on_platform: nil, on_platforms: nil, canonical: nil, override: nil, &block)
35
- Chef.deprecated(:internal_api, "The on_platform option to node_map has been deprecated") if on_platform
36
- Chef.deprecated(:internal_api, "The on_platforms option to node_map has been deprecated") if on_platforms
37
- platform ||= on_platform || on_platforms
34
+ def set(key, value, platform: nil, platform_version: nil, platform_family: nil, os: nil, canonical: nil, override: nil, &block)
38
35
  filters = {}
39
36
  filters[:platform] = platform if platform
40
37
  filters[:platform_version] = platform_version if platform_version
data/lib/chef/org.rb CHANGED
@@ -73,15 +73,15 @@ class Chef
73
73
  end
74
74
 
75
75
  def create
76
- payload = { :name => self.name, :full_name => self.full_name }
76
+ payload = { :name => name, :full_name => full_name }
77
77
  new_org = chef_rest.post("organizations", payload)
78
- Chef::Org.from_hash(self.to_hash.merge(new_org))
78
+ Chef::Org.from_hash(to_hash.merge(new_org))
79
79
  end
80
80
 
81
81
  def update
82
- payload = { :name => self.name, :full_name => self.full_name }
82
+ payload = { :name => name, :full_name => full_name }
83
83
  new_org = chef_rest.put("organizations/#{name}", payload)
84
- Chef::Org.from_hash(self.to_hash.merge(new_org))
84
+ Chef::Org.from_hash(to_hash.merge(new_org))
85
85
  end
86
86
 
87
87
  def destroy
@@ -89,14 +89,12 @@ class Chef
89
89
  end
90
90
 
91
91
  def save
92
- begin
93
- create
94
- rescue Net::HTTPServerException => e
95
- if e.response.code == "409"
96
- update
97
- else
98
- raise e
99
- end
92
+ create
93
+ rescue Net::HTTPServerException => e
94
+ if e.response.code == "409"
95
+ update
96
+ else
97
+ raise e
100
98
  end
101
99
  end
102
100
 
@@ -124,11 +122,6 @@ class Chef
124
122
  Chef::Org.from_hash(Chef::JSONCompat.from_json(json))
125
123
  end
126
124
 
127
- def self.json_create(json)
128
- Chef.deprecated(:json_auto_inflate, "Auto inflation of JSON data is deprecated. Please use Chef::Org#from_json or Chef::Org#load.")
129
- Chef::Org.from_json(json)
130
- end
131
-
132
125
  def self.load(org_name)
133
126
  response = Chef::ServerAPI.new(Chef::Config[:chef_server_root]).get("organizations/#{org_name}")
134
127
  Chef::Org.from_hash(response)
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
- # Copyright:: Copyright 2008-2016, Chef Software Inc.
3
+ # Copyright:: Copyright 2008-2017, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,45 +26,6 @@ class Chef
26
26
  class Platform
27
27
 
28
28
  class << self
29
- attr_writer :platforms
30
-
31
- def platforms
32
- @platforms ||= { default: {} }
33
- end
34
-
35
- include Chef::Mixin::ParamsValidate
36
-
37
- def find(name, version)
38
- Chef.deprecated(:chef_platform_methods, "#{self.class.name}.find is deprecated")
39
- provider_map = platforms[:default].clone
40
-
41
- name_sym = name
42
- if name.kind_of?(String)
43
- name = name.downcase
44
- name.gsub!(/\s/, "_")
45
- name_sym = name.to_sym
46
- end
47
-
48
- if platforms.has_key?(name_sym)
49
- platform_versions = platforms[name_sym].select { |k, v| k != :default }
50
- if platforms[name_sym].has_key?(:default)
51
- provider_map.merge!(platforms[name_sym][:default])
52
- end
53
- platform_versions.each do |platform_version, provider|
54
- begin
55
- version_constraint = Chef::VersionConstraint::Platform.new(platform_version)
56
- if version_constraint.include?(version)
57
- Chef::Log.debug("Platform #{name} version #{version} found")
58
- provider_map.merge!(provider)
59
- end
60
- rescue Chef::Exceptions::InvalidPlatformVersion
61
- Chef::Log.debug("Chef::Version::Comparable does not know how to parse the platform version: #{version}")
62
- end
63
- end
64
- end
65
- provider_map
66
- end
67
-
68
29
  def find_platform_and_version(node)
69
30
  platform = nil
70
31
  version = nil
@@ -87,136 +48,8 @@ class Chef
87
48
 
88
49
  raise ArgumentError, "Cannot find a version for #{node}" unless version
89
50
 
90
- return platform, version
91
- end
92
-
93
- def provider_for_resource(resource, action = :nothing)
94
- Chef.deprecated(:chef_platform_methods, "#{self.class.name}.provider_for_resource is deprecated")
95
- node = resource.run_context && resource.run_context.node
96
- raise ArgumentError, "Cannot find the provider for a resource with no run context set" unless node
97
- provider = find_provider_for_node(node, resource).new(resource, resource.run_context)
98
- provider.action = action
99
- provider
100
- end
101
-
102
- def provider_for_node(node, resource_type)
103
- raise NotImplementedError, "#{self.class.name} no longer supports #provider_for_node"
104
- end
105
-
106
- def find_provider_for_node(node, resource_type)
107
- Chef.deprecated(:chef_platform_methods, "#{self.class.name}.find_provider_for_node is deprecated")
108
- platform, version = find_platform_and_version(node)
109
- find_provider(platform, version, resource_type)
110
- end
111
-
112
- def set(args)
113
- Chef.deprecated(:chef_platform_methods, "#{self.class.name}.set is deprecated")
114
- validate(
115
- args,
116
- {
117
- :platform => {
118
- :kind_of => Symbol,
119
- :required => false,
120
- },
121
- :version => {
122
- :kind_of => String,
123
- :required => false,
124
- },
125
- :resource => {
126
- :kind_of => Symbol,
127
- },
128
- :provider => {
129
- :kind_of => [ String, Symbol, Class ],
130
- },
131
- }
132
- )
133
- if args.has_key?(:platform)
134
- if args.has_key?(:version)
135
- if platforms.has_key?(args[:platform])
136
- if platforms[args[:platform]].has_key?(args[:version])
137
- platforms[args[:platform]][args[:version]][args[:resource].to_sym] = args[:provider]
138
- else
139
- platforms[args[:platform]][args[:version]] = {
140
- args[:resource].to_sym => args[:provider],
141
- }
142
- end
143
- else
144
- platforms[args[:platform]] = {
145
- args[:version] => {
146
- args[:resource].to_sym => args[:provider],
147
- },
148
- }
149
- end
150
- else
151
- if platforms.has_key?(args[:platform])
152
- if platforms[args[:platform]].has_key?(:default)
153
- platforms[args[:platform]][:default][args[:resource].to_sym] = args[:provider]
154
- elsif args[:platform] == :default
155
- platforms[:default][args[:resource].to_sym] = args[:provider]
156
- else
157
- platforms[args[:platform]] = { :default => { args[:resource].to_sym => args[:provider] } }
158
- end
159
- else
160
- platforms[args[:platform]] = {
161
- :default => {
162
- args[:resource].to_sym => args[:provider],
163
- },
164
- }
165
- end
166
- end
167
- else
168
- if platforms.has_key?(:default)
169
- platforms[:default][args[:resource].to_sym] = args[:provider]
170
- else
171
- platforms[:default] = {
172
- args[:resource].to_sym => args[:provider],
173
- }
174
- end
175
- end
176
- end
177
-
178
- def find_provider(platform, version, resource_type)
179
- Chef.deprecated(:chef_platform_methods, "#{self.class.name}.find_provider is deprecated")
180
- provider_klass = explicit_provider(platform, version, resource_type) ||
181
- platform_provider(platform, version, resource_type) ||
182
- resource_matching_provider(platform, version, resource_type)
183
-
184
- raise Chef::Exceptions::ProviderNotFound, "Cannot find a provider for #{resource_type} on #{platform} version #{version}" if provider_klass.nil?
185
-
186
- provider_klass
187
- end
188
-
189
- private
190
-
191
- def explicit_provider(platform, version, resource_type)
192
- resource_type.kind_of?(Chef::Resource) ? resource_type.provider : nil
51
+ [platform, version]
193
52
  end
194
-
195
- def platform_provider(platform, version, resource_type)
196
- pmap = Chef::Platform.find(platform, version)
197
- rtkey = resource_type.kind_of?(Chef::Resource) ? resource_type.resource_name.to_sym : resource_type
198
- pmap.has_key?(rtkey) ? pmap[rtkey] : nil
199
- end
200
-
201
- include Chef::Mixin::ConvertToClassName
202
-
203
- def resource_matching_provider(platform, version, resource_type)
204
- if resource_type.kind_of?(Chef::Resource)
205
- class_name = if resource_type.class.name
206
- resource_type.class.name.split("::").last
207
- else
208
- convert_to_class_name(resource_type.resource_name.to_s)
209
- end
210
-
211
- if Chef::Provider.const_defined?(class_name, false)
212
- Chef::Log.warn("Class Chef::Provider::#{class_name} does not declare 'provides #{convert_to_snake_case(class_name).to_sym.inspect}'.")
213
- Chef::Log.warn("This will no longer work in Chef 13: you must use 'provides' to use the resource's DSL.")
214
- return Chef::Provider.const_get(class_name, false)
215
- end
216
- end
217
- nil
218
- end
219
-
220
53
  end
221
54
  end
222
55
  end
@@ -55,7 +55,7 @@ class Chef
55
55
  # If accessing the registry key failed, then we're probably not on
56
56
  # nano. Fail through.
57
57
  end
58
- return nano == 1
58
+ nano == 1
59
59
  end
60
60
 
61
61
  def supports_msi?
@@ -51,8 +51,7 @@ class Chef
51
51
  raise Chef::Exceptions::RebootFailed.new(e.message)
52
52
  end
53
53
 
54
- raise Chef::Exceptions::Reboot.new(msg) if Chef::Application::ExitCode.enforce_rfc_062_exit_codes?
55
- Chef::Application::ExitCode.notify_reboot_exit_code_deprecation
54
+ raise Chef::Exceptions::Reboot.new(msg)
56
55
  end
57
56
 
58
57
  # this is a wrapper function so Chef::Client only needs a single line of code.
@@ -3,7 +3,7 @@
3
3
  # Author:: Tim Hinderliter (<tim@chef.io>)
4
4
  # Author:: Christopher Walters (<cw@chef.io>)
5
5
  # Author:: Daniel DeLeo (<dan@chef.io>)
6
- # Copyright:: Copyright 2008-2016 Chef Software, Inc.
6
+ # Copyright:: Copyright 2008-2017, Chef Software Inc.
7
7
  # License:: Apache License, Version 2.0
8
8
  #
9
9
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -103,33 +103,6 @@ class Chef
103
103
  run_context
104
104
  end
105
105
 
106
- # DEPRECATED: As of Chef 12.5, chef selects either policyfile mode or
107
- # "expand node" mode dynamically, based on the content of the node
108
- # object, first boot JSON, and config. This happens in
109
- # PolicyBuilder::Dynamic, which selects the implementation during
110
- # #load_node and then delegates to either ExpandNodeObject or Policyfile
111
- # implementations as appropriate. Tools authors should update their code
112
- # to create a PolicyBuilder::Dynamc policy builder and allow it to select
113
- # the proper implementation.
114
- def load_node
115
- Chef.deprecated(:internal_api, "ExpandNodeObject#load_node is deprecated. Please use Chef::PolicyBuilder::Dynamic instead of using ExpandNodeObject directly")
116
-
117
- events.node_load_start(node_name, config)
118
- Chef::Log.debug("Building node object for #{node_name}")
119
-
120
- @node =
121
- if Chef::Config[:solo_legacy_mode]
122
- Chef::Node.build(node_name)
123
- else
124
- Chef::Node.find_or_create(node_name)
125
- end
126
- finish_load_node(node)
127
- node
128
- rescue Exception => e
129
- events.node_load_failed(node_name, e, config)
130
- raise
131
- end
132
-
133
106
  def finish_load_node(node)
134
107
  @node = node
135
108
  end
@@ -266,7 +239,8 @@ class Chef
266
239
  end
267
240
 
268
241
  def api_service
269
- @api_service ||= Chef::ServerAPI.new(config[:chef_server_url])
242
+ @api_service ||= Chef::ServerAPI.new(config[:chef_server_url],
243
+ { version_class: Chef::CookbookManifestVersions })
270
244
  end
271
245
 
272
246
  def config
@@ -149,7 +149,7 @@ class Chef
149
149
  #
150
150
  # @return [Chef::RunContext]
151
151
  def setup_run_context(specific_recipes = nil)
152
- Chef::Cookbook::FileVendor.fetch_from_remote(http_api)
152
+ Chef::Cookbook::FileVendor.fetch_from_remote(api_service)
153
153
  sync_cookbooks
154
154
  cookbook_collection = Chef::CookbookCollection.new(cookbooks_to_sync)
155
155
  cookbook_collection.validate!
@@ -173,6 +173,7 @@ class Chef
173
173
  CookbookCacheCleaner.instance.skip_removal = true if named_run_list_requested?
174
174
 
175
175
  node.run_list(run_list)
176
+ node.automatic_attrs[:policy_revision] = revision_id
176
177
  node.automatic_attrs[:roles] = []
177
178
  node.automatic_attrs[:recipes] = run_list_expansion_ish.recipes
178
179
  run_list_expansion_ish
@@ -266,7 +267,7 @@ class Chef
266
267
 
267
268
  # @api private
268
269
  def policy
269
- @policy ||= http_api.get(policyfile_location)
270
+ @policy ||= api_service.get(policyfile_location)
270
271
  rescue Net::HTTPServerException => e
271
272
  raise ConfigurationError, "Error loading policyfile from `#{policyfile_location}': #{e.class} - #{e.message}"
272
273
  end
@@ -451,8 +452,9 @@ class Chef
451
452
  end
452
453
 
453
454
  # @api private
454
- def http_api
455
- @api_service ||= Chef::ServerAPI.new(config[:chef_server_url])
455
+ def api_service
456
+ @api_service ||= Chef::ServerAPI.new(config[:chef_server_url],
457
+ { version_class: Chef::CookbookManifestVersions })
456
458
  end
457
459
 
458
460
  # @api private
@@ -495,7 +497,7 @@ class Chef
495
497
  def compat_mode_manifest_for(cookbook_name, lock_data)
496
498
  xyz_version = lock_data["dotted_decimal_identifier"]
497
499
  rel_url = "cookbooks/#{cookbook_name}/#{xyz_version}"
498
- inflate_cbv_object(http_api.get(rel_url))
500
+ inflate_cbv_object(api_service.get(rel_url))
499
501
  rescue Exception => e
500
502
  message = "Error loading cookbook #{cookbook_name} at version #{xyz_version} from #{rel_url}: #{e.class} - #{e.message}"
501
503
  err = Chef::Exceptions::CookbookNotFound.new(message)
@@ -506,7 +508,7 @@ class Chef
506
508
  def artifact_manifest_for(cookbook_name, lock_data)
507
509
  identifier = lock_data["identifier"]
508
510
  rel_url = "cookbook_artifacts/#{cookbook_name}/#{identifier}"
509
- inflate_cbv_object(http_api.get(rel_url))
511
+ inflate_cbv_object(api_service.get(rel_url))
510
512
  rescue Exception => e
511
513
  message = "Error loading cookbook #{cookbook_name} with identifier #{identifier} from #{rel_url}: #{e.class} - #{e.message}"
512
514
  err = Chef::Exceptions::CookbookNotFound.new(message)