chef 11.18.12 → 12.0.0.alpha.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (307) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +10 -0
  3. data/README.md +1 -1
  4. data/distro/common/html/_sources/index.txt +5 -2
  5. data/distro/common/html/_sources/knife_serve.txt +19 -0
  6. data/distro/common/html/_sources/knife_ssl_check.txt +2 -2
  7. data/distro/common/html/_sources/knife_ssl_fetch.txt +2 -2
  8. data/distro/common/html/_static/basic.css +1 -1
  9. data/distro/common/html/_static/doctools.js +1 -1
  10. data/distro/common/html/_static/searchtools.js +1 -1
  11. data/distro/common/html/_static/websupport.js +1 -1
  12. data/distro/common/html/ctl_chef_client.html +19 -9
  13. data/distro/common/html/ctl_chef_server.html +7 -1
  14. data/distro/common/html/ctl_chef_shell.html +3 -4
  15. data/distro/common/html/ctl_chef_solo.html +12 -7
  16. data/distro/common/html/index.html +19 -12
  17. data/distro/common/html/knife.html +1 -2
  18. data/distro/common/html/knife_bootstrap.html +16 -5
  19. data/distro/common/html/knife_client.html +8 -5
  20. data/distro/common/html/knife_common_options.html +11 -12
  21. data/distro/common/html/knife_configure.html +2 -3
  22. data/distro/common/html/knife_cookbook.html +16 -17
  23. data/distro/common/html/knife_cookbook_site.html +19 -18
  24. data/distro/common/html/knife_data_bag.html +6 -7
  25. data/distro/common/html/knife_delete.html +2 -3
  26. data/distro/common/html/knife_deps.html +2 -3
  27. data/distro/common/html/knife_diff.html +3 -4
  28. data/distro/common/html/knife_download.html +6 -7
  29. data/distro/common/html/knife_edit.html +0 -1
  30. data/distro/common/html/knife_environment.html +3 -4
  31. data/distro/common/html/knife_exec.html +0 -1
  32. data/distro/common/html/knife_index_rebuild.html +0 -1
  33. data/distro/common/html/knife_list.html +5 -6
  34. data/distro/common/html/knife_node.html +13 -6
  35. data/distro/common/html/knife_raw.html +0 -1
  36. data/distro/common/html/knife_recipe_list.html +0 -1
  37. data/distro/common/html/knife_role.html +1 -2
  38. data/distro/common/html/knife_search.html +2 -3
  39. data/distro/common/html/knife_serve.html +79 -0
  40. data/distro/common/html/knife_show.html +1 -2
  41. data/distro/common/html/knife_ssh.html +2 -3
  42. data/distro/common/html/knife_ssl_check.html +12 -9
  43. data/distro/common/html/knife_ssl_fetch.html +9 -10
  44. data/distro/common/html/knife_status.html +2 -3
  45. data/distro/common/html/knife_tag.html +0 -1
  46. data/distro/common/html/knife_upload.html +3 -4
  47. data/distro/common/html/knife_user.html +2 -3
  48. data/distro/common/html/knife_using.html +0 -1
  49. data/distro/common/html/knife_xargs.html +3 -4
  50. data/distro/common/html/search.html +0 -1
  51. data/distro/common/html/searchindex.js +1 -1
  52. data/lib/chef/api_client.rb +1 -1
  53. data/lib/chef/application.rb +24 -67
  54. data/lib/chef/application/client.rb +1 -1
  55. data/lib/chef/application/knife.rb +1 -1
  56. data/lib/chef/chef_fs/chef_fs_data_store.rb +2 -3
  57. data/lib/chef/chef_fs/command_line.rb +2 -3
  58. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -5
  59. data/lib/chef/chef_fs/file_system/acl_entry.rb +1 -2
  60. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +1 -2
  61. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +2 -2
  62. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +2 -3
  63. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +4 -5
  64. data/lib/chef/config.rb +26 -2
  65. data/lib/chef/config_fetcher.rb +1 -1
  66. data/lib/chef/cookbook/cookbook_version_loader.rb +4 -4
  67. data/lib/chef/cookbook/metadata.rb +1 -1
  68. data/lib/chef/cookbook/synchronizer.rb +50 -8
  69. data/lib/chef/cookbook_uploader.rb +9 -23
  70. data/lib/chef/cookbook_version.rb +3 -2
  71. data/lib/chef/data_bag.rb +1 -1
  72. data/lib/chef/data_bag_item.rb +1 -1
  73. data/lib/chef/dsl/recipe.rb +1 -14
  74. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  75. data/lib/chef/environment.rb +1 -1
  76. data/lib/chef/exceptions.rb +2 -24
  77. data/lib/chef/file_content_management/tempfile.rb +8 -1
  78. data/lib/chef/formatters/base.rb +0 -7
  79. data/lib/chef/http.rb +12 -19
  80. data/lib/chef/http/json_input.rb +12 -1
  81. data/lib/chef/json_compat.rb +45 -64
  82. data/lib/chef/knife.rb +2 -5
  83. data/lib/chef/knife/bootstrap.rb +2 -2
  84. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  85. data/lib/chef/knife/bootstrap/centos5-gems.erb +2 -2
  86. data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
  87. data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
  88. data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -2
  89. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
  90. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +2 -2
  91. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +2 -2
  92. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  93. data/lib/chef/knife/cookbook_site_install.rb +10 -34
  94. data/lib/chef/knife/cookbook_site_list.rb +1 -1
  95. data/lib/chef/knife/cookbook_site_search.rb +1 -1
  96. data/lib/chef/knife/cookbook_site_share.rb +3 -3
  97. data/lib/chef/knife/cookbook_site_show.rb +3 -3
  98. data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
  99. data/lib/chef/knife/cookbook_upload.rb +1 -1
  100. data/lib/chef/knife/core/subcommand_loader.rb +0 -24
  101. data/lib/chef/knife/core/ui.rb +8 -7
  102. data/lib/chef/knife/deps.rb +2 -3
  103. data/lib/chef/knife/serve.rb +2 -1
  104. data/lib/chef/local_mode.rb +105 -0
  105. data/lib/chef/mixin/file_class.rb +1 -4
  106. data/lib/chef/mixin/shell_out.rb +15 -0
  107. data/lib/chef/mixin/windows_architecture_helper.rb +0 -16
  108. data/lib/chef/node.rb +1 -1
  109. data/lib/chef/platform/query_helpers.rb +1 -5
  110. data/lib/chef/policy_builder/expand_node_object.rb +3 -0
  111. data/lib/chef/provider.rb +2 -0
  112. data/lib/chef/provider/cookbook_file.rb +0 -1
  113. data/lib/chef/provider/deploy.rb +0 -1
  114. data/lib/chef/provider/deploy/revision.rb +1 -1
  115. data/lib/chef/provider/env.rb +10 -25
  116. data/lib/chef/provider/env/windows.rb +23 -10
  117. data/lib/chef/provider/execute.rb +0 -3
  118. data/lib/chef/provider/file.rb +0 -3
  119. data/lib/chef/provider/git.rb +0 -6
  120. data/lib/chef/provider/group/dscl.rb +9 -27
  121. data/lib/chef/provider/group/gpasswd.rb +0 -3
  122. data/lib/chef/provider/group/groupmod.rb +0 -4
  123. data/lib/chef/provider/group/suse.rb +0 -3
  124. data/lib/chef/provider/group/usermod.rb +0 -3
  125. data/lib/chef/provider/link.rb +22 -5
  126. data/lib/chef/provider/log.rb +15 -4
  127. data/lib/chef/provider/mdadm.rb +0 -3
  128. data/lib/chef/provider/mount/mount.rb +0 -2
  129. data/lib/chef/provider/mount/solaris.rb +0 -2
  130. data/lib/chef/provider/package.rb +0 -1
  131. data/lib/chef/provider/package/apt.rb +0 -3
  132. data/lib/chef/provider/package/dpkg.rb +0 -1
  133. data/lib/chef/provider/package/easy_install.rb +0 -4
  134. data/lib/chef/provider/package/freebsd/base.rb +0 -3
  135. data/lib/chef/provider/package/freebsd/pkgng.rb +0 -2
  136. data/lib/chef/provider/package/freebsd/port.rb +0 -2
  137. data/lib/chef/provider/package/ips.rb +0 -3
  138. data/lib/chef/provider/package/paludis.rb +0 -5
  139. data/lib/chef/provider/package/portage.rb +0 -2
  140. data/lib/chef/provider/package/rpm.rb +2 -4
  141. data/lib/chef/provider/package/rubygems.rb +0 -4
  142. data/lib/chef/provider/package/smartos.rb +0 -3
  143. data/lib/chef/provider/package/windows/msi.rb +0 -2
  144. data/lib/chef/provider/package/yum.rb +0 -4
  145. data/lib/chef/provider/package/zypper.rb +0 -3
  146. data/lib/chef/provider/registry_key.rb +0 -2
  147. data/lib/chef/provider/remote_directory.rb +0 -1
  148. data/lib/chef/provider/remote_file.rb +0 -1
  149. data/lib/chef/provider/remote_file/cache_control_data.rb +1 -3
  150. data/lib/chef/provider/remote_file/content.rb +0 -1
  151. data/lib/chef/provider/remote_file/fetcher.rb +0 -2
  152. data/lib/chef/provider/remote_file/ftp.rb +0 -1
  153. data/lib/chef/provider/resource_update.rb +0 -3
  154. data/lib/chef/provider/service/freebsd.rb +0 -3
  155. data/lib/chef/provider/service/init.rb +0 -3
  156. data/lib/chef/provider/service/macosx.rb +0 -1
  157. data/lib/chef/provider/service/redhat.rb +0 -2
  158. data/lib/chef/provider/service/simple.rb +0 -3
  159. data/lib/chef/provider/service/solaris.rb +0 -3
  160. data/lib/chef/provider/service/systemd.rb +15 -14
  161. data/lib/chef/provider/service/windows.rb +0 -3
  162. data/lib/chef/provider/subversion.rb +0 -2
  163. data/lib/chef/provider/template.rb +0 -2
  164. data/lib/chef/provider/template/content.rb +0 -1
  165. data/lib/chef/provider/user/dscl.rb +156 -549
  166. data/lib/chef/provider/user/solaris.rb +0 -1
  167. data/lib/chef/provider/user/useradd.rb +0 -3
  168. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  169. data/lib/chef/providers.rb +0 -1
  170. data/lib/chef/resource.rb +1 -4
  171. data/lib/chef/resource/freebsd_package.rb +2 -10
  172. data/lib/chef/resource/lwrp_base.rb +1 -12
  173. data/lib/chef/resource/user.rb +0 -18
  174. data/lib/chef/resource_collection.rb +1 -1
  175. data/lib/chef/resource_reporter.rb +10 -10
  176. data/lib/chef/resources.rb +0 -1
  177. data/lib/chef/role.rb +3 -3
  178. data/lib/chef/run_list.rb +1 -1
  179. data/lib/chef/tasks/chef_repo.rake +131 -264
  180. data/lib/chef/user.rb +1 -1
  181. data/lib/chef/util/path_helper.rb +2 -2
  182. data/lib/chef/version.rb +9 -1
  183. data/lib/chef/win32/api/system.rb +0 -9
  184. data/spec/data/bootstrap/test-hints.erb +1 -1
  185. data/spec/data/bootstrap/test.erb +1 -1
  186. data/spec/functional/dsl/reboot_pending_spec.rb +53 -58
  187. data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
  188. data/spec/functional/knife/exec_spec.rb +1 -1
  189. data/spec/functional/mixin/shell_out_spec.rb +48 -0
  190. data/spec/functional/resource/base.rb +0 -10
  191. data/spec/functional/resource/group_spec.rb +1 -5
  192. data/spec/functional/resource/link_spec.rb +8 -0
  193. data/spec/functional/resource/{user/useradd_spec.rb → user_spec.rb} +1 -1
  194. data/spec/integration/knife/chef_fs_data_store_spec.rb +3 -3
  195. data/spec/integration/knife/chef_repo_path_spec.rb +1 -6
  196. data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
  197. data/spec/integration/knife/chefignore_spec.rb +1 -1
  198. data/spec/integration/knife/common_options_spec.rb +50 -3
  199. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  200. data/spec/integration/knife/delete_spec.rb +1 -1
  201. data/spec/integration/knife/deps_spec.rb +1 -1
  202. data/spec/integration/knife/diff_spec.rb +3 -3
  203. data/spec/integration/knife/download_spec.rb +3 -3
  204. data/spec/integration/knife/list_spec.rb +1 -1
  205. data/spec/integration/knife/raw_spec.rb +1 -11
  206. data/spec/integration/knife/redirection_spec.rb +1 -1
  207. data/spec/integration/knife/serve_spec.rb +2 -2
  208. data/spec/integration/knife/show_spec.rb +1 -1
  209. data/spec/integration/knife/upload_spec.rb +9 -9
  210. data/spec/spec_helper.rb +0 -9
  211. data/spec/support/pedant/pedant_config.rb +2 -1
  212. data/spec/support/pedant/run_pedant.rb +2 -1
  213. data/spec/support/platform_helpers.rb +5 -24
  214. data/spec/support/shared/integration/integration_helper.rb +2 -1
  215. data/spec/support/shared/matchers.rb +17 -0
  216. data/spec/tiny_server.rb +1 -2
  217. data/spec/unit/api_client_spec.rb +3 -3
  218. data/spec/unit/application_spec.rb +9 -32
  219. data/spec/unit/config_fetcher_spec.rb +1 -1
  220. data/spec/unit/cookbook/metadata_spec.rb +3 -7
  221. data/spec/unit/cookbook/synchronizer_spec.rb +441 -226
  222. data/spec/unit/cookbook_loader_spec.rb +1 -1
  223. data/spec/unit/cookbook_uploader_spec.rb +160 -0
  224. data/spec/unit/cookbook_version_spec.rb +0 -4
  225. data/spec/unit/data_bag_item_spec.rb +1 -5
  226. data/spec/unit/data_bag_spec.rb +1 -5
  227. data/spec/unit/deprecation_spec.rb +1 -1
  228. data/spec/unit/dsl/recipe_spec.rb +12 -0
  229. data/spec/unit/encrypted_data_bag_item_spec.rb +7 -14
  230. data/spec/unit/environment_spec.rb +3 -7
  231. data/spec/unit/exceptions_spec.rb +0 -6
  232. data/spec/unit/http/json_input_spec.rb +128 -0
  233. data/spec/unit/json_compat_spec.rb +17 -58
  234. data/spec/unit/knife/client_create_spec.rb +3 -3
  235. data/spec/unit/knife/configure_client_spec.rb +6 -5
  236. data/spec/unit/knife/cookbook_delete_spec.rb +1 -1
  237. data/spec/unit/knife/cookbook_download_spec.rb +5 -5
  238. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -0
  239. data/spec/unit/knife/cookbook_metadata_spec.rb +1 -1
  240. data/spec/unit/knife/cookbook_site_download_spec.rb +10 -11
  241. data/spec/unit/knife/cookbook_site_install_spec.rb +116 -161
  242. data/spec/unit/knife/cookbook_site_share_spec.rb +8 -8
  243. data/spec/unit/knife/cookbook_upload_spec.rb +3 -2
  244. data/spec/unit/knife/core/bootstrap_context_spec.rb +3 -3
  245. data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -66
  246. data/spec/unit/knife/data_bag_from_file_spec.rb +2 -1
  247. data/spec/unit/knife/tag_create_spec.rb +3 -3
  248. data/spec/unit/knife/tag_delete_spec.rb +3 -3
  249. data/spec/unit/knife/user_create_spec.rb +1 -1
  250. data/spec/unit/knife_spec.rb +14 -14
  251. data/spec/unit/lwrp_spec.rb +1 -21
  252. data/spec/unit/mixin/shell_out_spec.rb +92 -0
  253. data/spec/unit/node_spec.rb +0 -4
  254. data/spec/unit/platform/query_helpers_spec.rb +0 -23
  255. data/spec/unit/provider/env/windows_spec.rb +34 -70
  256. data/spec/unit/provider/env_spec.rb +11 -76
  257. data/spec/unit/provider/group/dscl_spec.rb +1 -38
  258. data/spec/unit/provider/log_spec.rb +18 -0
  259. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  260. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +1 -1
  261. data/spec/unit/provider/service/systemd_service_spec.rb +44 -27
  262. data/spec/unit/provider/user/dscl_spec.rb +264 -660
  263. data/spec/unit/provider/user/useradd_spec.rb +0 -1
  264. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  265. data/spec/unit/provider_spec.rb +12 -0
  266. data/spec/unit/recipe_spec.rb +0 -41
  267. data/spec/unit/resource_collection_spec.rb +1 -5
  268. data/spec/unit/resource_reporter_spec.rb +3 -51
  269. data/spec/unit/resource_spec.rb +3 -14
  270. data/spec/unit/rest_spec.rb +1 -4
  271. data/spec/unit/role_spec.rb +0 -10
  272. data/spec/unit/run_list_spec.rb +1 -5
  273. data/spec/unit/user_spec.rb +1 -5
  274. metadata +20 -100
  275. data/lib/chef/mixin/windows_env_helper.rb +0 -56
  276. data/lib/chef/provider/dsc_script.rb +0 -175
  277. data/lib/chef/resource/dsc_script.rb +0 -126
  278. data/lib/chef/streaming_cookbook_uploader.rb +0 -205
  279. data/lib/chef/util/dsc/configuration_generator.rb +0 -115
  280. data/lib/chef/util/dsc/lcm_output_parser.rb +0 -133
  281. data/lib/chef/util/dsc/local_configuration_manager.rb +0 -141
  282. data/lib/chef/util/dsc/resource_info.rb +0 -26
  283. data/lib/chef/util/powershell/cmdlet.rb +0 -136
  284. data/lib/chef/util/powershell/cmdlet_result.rb +0 -46
  285. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  286. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  287. data/spec/data/mac_users/10.7.plist.xml +0 -559
  288. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  289. data/spec/data/mac_users/10.8.plist.xml +0 -559
  290. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  291. data/spec/data/mac_users/10.9.plist.xml +0 -560
  292. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  293. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +0 -51
  294. data/spec/functional/resource/dsc_script_spec.rb +0 -382
  295. data/spec/functional/resource/env_spec.rb +0 -182
  296. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  297. data/spec/functional/util/powershell/cmdlet_spec.rb +0 -113
  298. data/spec/support/lib/chef/resource/zen_follower.rb +0 -46
  299. data/spec/support/shared/shared_examples.rb +0 -10
  300. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +0 -63
  301. data/spec/unit/formatters/base_spec.rb +0 -48
  302. data/spec/unit/provider/dsc_script_spec.rb +0 -174
  303. data/spec/unit/resource/dsc_script_spec.rb +0 -98
  304. data/spec/unit/util/dsc/configuration_generator_spec.rb +0 -171
  305. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +0 -169
  306. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +0 -139
  307. data/spec/unit/util/powershell/cmdlet_spec.rb +0 -106
@@ -19,7 +19,6 @@
19
19
 
20
20
  require 'chef/chef_fs/file_system/file_system_entry'
21
21
  require 'chef/chef_fs/file_system/not_found_error'
22
- require 'chef/json_compat'
23
22
 
24
23
  class Chef
25
24
  module ChefFS
@@ -42,7 +41,7 @@ class Chef
42
41
 
43
42
  def chef_object
44
43
  begin
45
- return data_handler.chef_object(Chef::JSONCompat.parse(read, :create_additions => false))
44
+ return data_handler.chef_object(JSON.parse(read, :create_additions => false))
46
45
  rescue
47
46
  Chef::Log.error("Could not read #{path_for_printing} into a Chef object: #{$!}")
48
47
  end
@@ -106,7 +106,7 @@ class Chef
106
106
  cookbook_to_upload.freeze_version if options[:freeze]
107
107
 
108
108
  # Instantiate a new uploader based on the proxy loader
109
- uploader = Chef::CookbookUploader.new(cookbook_to_upload, proxy_cookbook_path, :force => options[:force], :rest => root.chef_rest)
109
+ uploader = Chef::CookbookUploader.new(cookbook_to_upload, :force => options[:force], :rest => root.chef_rest)
110
110
 
111
111
  with_actual_cookbooks_dir(temp_cookbooks_path) do
112
112
  upload_cookbook!(uploader)
@@ -128,7 +128,7 @@ class Chef
128
128
  def upload_unversioned_cookbook(other, options)
129
129
  cookbook_to_upload = other.chef_object
130
130
  cookbook_to_upload.freeze_version if options[:freeze]
131
- uploader = Chef::CookbookUploader.new(cookbook_to_upload, other.parent.file_path, :force => options[:force], :rest => root.chef_rest)
131
+ uploader = Chef::CookbookUploader.new(cookbook_to_upload, :force => options[:force], :rest => root.chef_rest)
132
132
 
133
133
  with_actual_cookbooks_dir(other.parent.file_path) do
134
134
  upload_cookbook!(uploader)
@@ -19,7 +19,6 @@
19
19
  require 'chef/chef_fs/file_system/base_fs_dir'
20
20
  require 'chef/chef_fs/file_system/rest_list_entry'
21
21
  require 'chef/chef_fs/file_system/not_found_error'
22
- require 'chef/json_compat'
23
22
 
24
23
  class Chef
25
24
  module ChefFS
@@ -62,8 +61,8 @@ class Chef
62
61
 
63
62
  def create_child(name, file_contents)
64
63
  begin
65
- object = Chef::JSONCompat.parse(file_contents, :create_additions => false)
66
- rescue Chef::Exceptions::JSON::ParseError => e
64
+ object = JSON.parse(file_contents, :create_additions => false)
65
+ rescue JSON::ParserError => e
67
66
  raise Chef::ChefFS::FileSystem::OperationFailedError.new(:create_child, self, e), "Parse error reading JSON creating child '#{name}': #{e}"
68
67
  end
69
68
 
@@ -19,7 +19,6 @@
19
19
  require 'chef/chef_fs/file_system/base_fs_object'
20
20
  require 'chef/chef_fs/file_system/not_found_error'
21
21
  require 'chef/chef_fs/file_system/operation_failed_error'
22
- require 'chef/json_compat'
23
22
  require 'chef/role'
24
23
  require 'chef/node'
25
24
 
@@ -129,8 +128,8 @@ class Chef
129
128
  value = minimize_value(value)
130
129
  value_json = Chef::JSONCompat.to_json_pretty(value)
131
130
  begin
132
- other_value = Chef::JSONCompat.parse(other_value_json, :create_additions => false)
133
- rescue Chef::Exceptions::JSON::ParseError => e
131
+ other_value = JSON.parse(other_value_json, :create_additions => false)
132
+ rescue JSON::ParserError => e
134
133
  Chef::Log.warn("Parse error reading #{other.path_for_printing} as JSON: #{e}")
135
134
  return [ nil, value_json, other_value_json ]
136
135
  end
@@ -146,8 +145,8 @@ class Chef
146
145
 
147
146
  def write(file_contents)
148
147
  begin
149
- object = Chef::JSONCompat.parse(file_contents, :create_additions => false)
150
- rescue Chef::Exceptions::JSON::ParseError => e
148
+ object = JSON.parse(file_contents, :create_additions => false)
149
+ rescue JSON::ParserError => e
151
150
  raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e), "Parse error reading JSON: #{e}"
152
151
  end
153
152
 
data/lib/chef/config.rb CHANGED
@@ -325,7 +325,7 @@ class Chef
325
325
  config_strict_mode true
326
326
  default(:enabled) { Chef::Config.local_mode }
327
327
  default :host, 'localhost'
328
- default :port, 8889
328
+ default :port, 8889.upto(9999) # Will try ports from 8889-9999 until one works
329
329
  end
330
330
  default :chef_server_url, "https://localhost:443"
331
331
 
@@ -567,7 +567,7 @@ class Chef
567
567
  # If false file staging is will be done via tempfiles that are
568
568
  # created under ENV['TMP'] otherwise tempfiles will be created in
569
569
  # the directory that files are going to reside.
570
- default :file_staging_uses_destdir, false
570
+ default :file_staging_uses_destdir, true
571
571
 
572
572
  # Exit if another run is in progress and the chef-client is unable to
573
573
  # get the lock before time expires. If nil, no timeout is enforced. (Exits
@@ -580,6 +580,30 @@ class Chef
580
580
  # the number of threads will help.
581
581
  default :cookbook_sync_threads, 10
582
582
 
583
+ # At the beginning of the Chef Client run, the cookbook manifests are downloaded which
584
+ # contain URLs for every file in every relevant cookbook. Most of the files
585
+ # (recipes, resources, providers, libraries, etc) are immediately synchronized
586
+ # at the start of the run. The handling of "files" and "templates" directories,
587
+ # however, have two modes of operation. They can either all be downloaded immediately
588
+ # at the start of the run (no_lazy_load==true) or else they can be lazily loaded as
589
+ # cookbook_file or template resources are converged which require them (no_lazy_load==false).
590
+ #
591
+ # The advantage of lazily loading these files is that unnecessary files are not
592
+ # synchronized. This may be useful to users with large files checked into cookbooks which
593
+ # are only selectively downloaded to a subset of clients which use the cookbook. However,
594
+ # better solutions are to either isolate large files into individual cookbooks and only
595
+ # include those cookbooks in the run lists of the servers that need them -- or move to
596
+ # using remote_file and a more appropriate backing store like S3 for large file
597
+ # distribution.
598
+ #
599
+ # The disadvantages of lazily loading files are that users some time find it
600
+ # confusing that their cookbooks are not fully synchronzied to the cache initially,
601
+ # and more importantly the time-sensitive URLs which are in the manifest may time
602
+ # out on long Chef runs before the resource that uses the file is converged
603
+ # (leading to many confusing 403 errors on template/cookbook_file resources).
604
+ #
605
+ default :no_lazy_load, true
606
+
583
607
  # A whitelisted array of attributes you want sent over the wire when node
584
608
  # data is saved.
585
609
  # The default setting is nil, which collects all data. Setting to [] will not
@@ -18,7 +18,7 @@ class Chef
18
18
  config_data = read_config
19
19
  begin
20
20
  Chef::JSONCompat.from_json(config_data)
21
- rescue Chef::Exceptions::JSON::ParseError => error
21
+ rescue FFI_Yajl::ParseError => error
22
22
  Chef::Application.fatal!("Could not parse the provided JSON file (#{config_location}): " + error.message, 2)
23
23
  end
24
24
  end
@@ -170,7 +170,7 @@ class Chef
170
170
  def apply_ruby_metadata(file)
171
171
  begin
172
172
  @metadata.from_file(file)
173
- rescue Chef::Exceptions::JSON::ParseError
173
+ rescue JSON::ParserError
174
174
  Chef::Log.error("Error evaluating metadata.rb for #@cookbook_name in " + file)
175
175
  raise
176
176
  end
@@ -179,7 +179,7 @@ class Chef
179
179
  def apply_json_metadata(file)
180
180
  begin
181
181
  @metadata.from_json(IO.read(file))
182
- rescue Chef::Exceptions::JSON::ParseError
182
+ rescue JSON::ParserError
183
183
  Chef::Log.error("Couldn't parse cookbook metadata JSON for #@cookbook_name in " + file)
184
184
  raise
185
185
  end
@@ -189,7 +189,7 @@ class Chef
189
189
  begin
190
190
  data = Chef::JSONCompat.from_json(IO.read(file), :create_additions => false)
191
191
  @metadata.from_hash(data['metadata'])
192
- rescue Chef::Exceptions::JSON::ParseError
192
+ rescue JSON::ParserError
193
193
  Chef::Log.error("Couldn't parse cookbook metadata JSON for #@cookbook_name in " + file)
194
194
  raise
195
195
  end
@@ -200,7 +200,7 @@ class Chef
200
200
  begin
201
201
  data = Chef::JSONCompat.from_json(IO.read(uploaded_cookbook_version_file), :create_additions => false)
202
202
  @frozen = data['frozen?']
203
- rescue Chef::Exceptions::JSON::ParseError
203
+ rescue JSON::ParserError
204
204
  Chef::Log.error("Couldn't parse cookbook metadata JSON for #@cookbook_name in #{uploaded_cookbook_version_file}")
205
205
  raise
206
206
  end
@@ -441,7 +441,7 @@ class Chef
441
441
  end
442
442
 
443
443
  def to_json(*a)
444
- Chef::JSONCompat.to_json(self.to_hash, *a)
444
+ self.to_hash.to_json(*a)
445
445
  end
446
446
 
447
447
  def self.from_hash(o)
@@ -10,6 +10,8 @@ class Chef
10
10
  # cache.
11
11
  class CookbookCacheCleaner
12
12
 
13
+ attr_accessor :skip_removal
14
+
13
15
  # Setup a notification to clear the valid_cache_entries when a Chef client
14
16
  # run starts
15
17
  Chef::Client.when_run_starts do |run_status|
@@ -40,15 +42,17 @@ class Chef
40
42
  end
41
43
 
42
44
  def cleanup_file_cache
43
- unless Chef::Config[:solo]
45
+ unless Chef::Config[:solo] || skip_removal
44
46
  # Delete each file in the cache that we didn't encounter in the
45
47
  # manifest.
46
- cache.find(File.join(%w{cookbooks ** *})).each do |cache_filename|
48
+ cache.find(File.join(%w{cookbooks ** {*,.*}})).each do |cache_filename|
47
49
  unless @valid_cache_entries[cache_filename]
48
50
  Chef::Log.info("Removing #{cache_filename} from the cache; it is no longer needed by chef-client.")
49
51
  cache.delete(cache_filename)
50
52
  end
51
53
  end
54
+ else
55
+ Chef::Log.info("Skipping removal of unused files from the cache")
52
56
  end
53
57
  end
54
58
 
@@ -59,6 +63,8 @@ class Chef
59
63
  class CookbookSynchronizer
60
64
  CookbookFile = Struct.new(:cookbook, :segment, :manifest_record)
61
65
 
66
+ attr_accessor :remove_obsoleted_files
67
+
62
68
  def initialize(cookbooks_by_name, events)
63
69
  @eager_segments = Chef::CookbookVersion::COOKBOOK_SEGMENTS.dup
64
70
  unless Chef::Config[:no_lazy_load]
@@ -70,6 +76,7 @@ class Chef
70
76
  @cookbooks_by_name, @events = cookbooks_by_name, events
71
77
 
72
78
  @cookbook_full_file_paths = {}
79
+ @remove_obsoleted_files = true
73
80
  end
74
81
 
75
82
  def cache
@@ -92,6 +99,10 @@ class Chef
92
99
  @cookbooks_by_name.key?(cookbook_name)
93
100
  end
94
101
 
102
+ def cookbook_segment(cookbook_name, segment)
103
+ @cookbooks_by_name[cookbook_name].manifest[segment]
104
+ end
105
+
95
106
  def files
96
107
  @files ||= cookbooks.inject([]) do |memo, cookbook|
97
108
  @eager_segments.each do |segment|
@@ -169,12 +180,10 @@ class Chef
169
180
  @cookbook_full_file_paths[file.cookbook][file.segment] << full_path
170
181
  end
171
182
 
172
- # Iterates over cached cookbooks' files, removing files belonging to
173
- # cookbooks that don't appear in +cookbook_hash+
174
- def clear_obsoleted_cookbooks
175
- @events.cookbook_clean_start
176
- # Remove all cookbooks no longer relevant to this node
177
- cache.find(File.join(%w{cookbooks ** *})).each do |cache_file|
183
+ # remove cookbooks that are not referenced in the expanded run_list at all
184
+ # (if we have an override run_list we may not want to do this)
185
+ def remove_old_cookbooks
186
+ cache.find(File.join(%w{cookbooks ** {*,.*}})).each do |cache_file|
178
187
  cache_file =~ /^cookbooks\/([^\/]+)\//
179
188
  unless have_cookbook?($1)
180
189
  Chef::Log.info("Removing #{cache_file} from the cache; its cookbook is no longer needed on this client.")
@@ -182,6 +191,39 @@ class Chef
182
191
  @events.removed_cookbook_file(cache_file)
183
192
  end
184
193
  end
194
+ end
195
+
196
+ # remove deleted files in cookbooks that are being used on the node
197
+ def remove_deleted_files
198
+ cache.find(File.join(%w{cookbooks ** {*,.*}})).each do |cache_file|
199
+ md = cache_file.match(/^cookbooks\/([^\/]+)\/([^\/]+)\/(.*)/)
200
+ next unless md
201
+ ( cookbook_name, segment, file ) = md[1..3]
202
+ if have_cookbook?(cookbook_name)
203
+ manifest_segment = cookbook_segment(cookbook_name, segment)
204
+ if manifest_segment.select { |manifest_record| manifest_record["path"] == "#{segment}/#{file}" }.empty?
205
+ Chef::Log.info("Removing #{cache_file} from the cache; its is no longer in the cookbook manifest.")
206
+ cache.delete(cache_file)
207
+ @events.removed_cookbook_file(cache_file)
208
+ end
209
+ end
210
+ end
211
+ end
212
+
213
+ # Iterates over cached cookbooks' files, removing files belonging to
214
+ # cookbooks that don't appear in +cookbook_hash+
215
+ def clear_obsoleted_cookbooks
216
+ @events.cookbook_clean_start
217
+
218
+ if remove_obsoleted_files
219
+ remove_old_cookbooks
220
+ else
221
+ Chef::Log.info("Skipping removal of obsoleted cookbooks from the cache")
222
+ CookbookCacheCleaner.instance.skip_removal = true
223
+ end
224
+
225
+ remove_deleted_files
226
+
185
227
  @events.cookbook_clean_complete
186
228
  end
187
229
 
@@ -1,6 +1,5 @@
1
1
 
2
2
  require 'set'
3
- require 'rest_client'
4
3
  require 'chef/exceptions'
5
4
  require 'chef/knife/cookbook_metadata'
6
5
  require 'chef/digester'
@@ -36,8 +35,8 @@ class Chef
36
35
  # in Chef::Config.
37
36
  # * :concurrency An integer that decided how many threads will be used to
38
37
  # perform concurrent uploads
39
- def initialize(cookbooks, path, opts={})
40
- @path, @opts = path, opts
38
+ def initialize(cookbooks, opts={})
39
+ @opts = opts
41
40
  @cookbooks = Array(cookbooks)
42
41
  @rest = opts[:rest] || Chef::REST.new(Chef::Config[:chef_server_url])
43
42
  @concurrency = opts[:concurrency] || 10
@@ -54,7 +53,7 @@ class Chef
54
53
  end
55
54
 
56
55
  checksums = checksum_files.inject({}){|memo,elt| memo[elt.first]=nil ; memo}
57
- new_sandbox = rest.post_rest("sandboxes", { :checksums => checksums })
56
+ new_sandbox = rest.post("sandboxes", { :checksums => checksums })
58
57
 
59
58
  Chef::Log.info("Uploading files")
60
59
 
@@ -81,7 +80,7 @@ class Chef
81
80
  # in eventual consistency)
82
81
  retries = 0
83
82
  begin
84
- rest.put_rest(sandbox_url, {:is_completed => true})
83
+ rest.put(sandbox_url, {:is_completed => true})
85
84
  rescue Net::HTTPServerException => e
86
85
  if e.message =~ /^400/ && (retries += 1) <= 5
87
86
  sleep 2
@@ -95,7 +94,7 @@ class Chef
95
94
  cookbooks.each do |cb|
96
95
  save_url = opts[:force] ? cb.force_save_url : cb.save_url
97
96
  begin
98
- rest.put_rest(save_url, cb)
97
+ rest.put(save_url, cb)
99
98
  rescue Net::HTTPServerException => e
100
99
  case e.response.code
101
100
  when "409"
@@ -109,32 +108,19 @@ class Chef
109
108
  Chef::Log.info("Upload complete!")
110
109
  end
111
110
 
112
- def worker_thread(work_queue)
113
- end
114
-
115
111
  def uploader_function_for(file, checksum, url, checksums_to_upload)
116
112
  lambda do
117
113
  # Checksum is the hexadecimal representation of the md5,
118
114
  # but we need the base64 encoding for the content-md5
119
115
  # header
120
116
  checksum64 = Base64.encode64([checksum].pack("H*")).strip
121
- timestamp = Time.now.utc.iso8601
122
117
  file_contents = File.open(file, "rb") {|f| f.read}
123
- # TODO - 5/28/2010, cw: make signing and sending the request streaming
118
+
119
+ # Custom headers. 'content-type' disables JSON serialization of the request body.
124
120
  headers = { 'content-type' => 'application/x-binary', 'content-md5' => checksum64, "accept" => 'application/json' }
125
- if rest.signing_key
126
- sign_obj = Mixlib::Authentication::SignedHeaderAuth.signing_object(
127
- :http_method => :put,
128
- :path => URI.parse(url).path,
129
- :body => file_contents,
130
- :timestamp => timestamp,
131
- :user_id => rest.client_name
132
- )
133
- headers.merge!(sign_obj.sign(OpenSSL::PKey::RSA.new(rest.signing_key)))
134
- end
135
121
 
136
122
  begin
137
- Chef::HTTP::Simple.new(url, :headers=>headers).put(url, file_contents)
123
+ rest.put(url, file_contents, headers)
138
124
  checksums_to_upload.delete(checksum)
139
125
  rescue Net::HTTPServerException, Net::HTTPFatalError, Errno::ECONNREFUSED, Timeout::Error, Errno::ETIMEDOUT, SocketError => e
140
126
  error_message = "Failed to upload #{file} (#{checksum}) to #{url} : #{e.message}"
@@ -147,7 +133,7 @@ class Chef
147
133
 
148
134
  def validate_cookbooks
149
135
  cookbooks.each do |cb|
150
- syntax_checker = Chef::Cookbook::SyntaxCheck.for_cookbook(cb.name, @user_cookbook_path)
136
+ syntax_checker = Chef::Cookbook::SyntaxCheck.for_cookbook(cb.name)
151
137
  Chef::Log.info("Validating ruby files")
152
138
  exit(1) unless syntax_checker.validate_ruby_files
153
139
  Chef::Log.info("Validating templates")
@@ -25,6 +25,7 @@ require 'chef/cookbook/metadata'
25
25
  require 'chef/version_class'
26
26
  require 'pathname'
27
27
  require 'chef/monkey_patches/pathname'
28
+ require 'chef/digester'
28
29
 
29
30
  class Chef
30
31
 
@@ -459,7 +460,7 @@ class Chef
459
460
  def to_json(*a)
460
461
  result = self.to_hash
461
462
  result['json_class'] = self.class.name
462
- Chef::JSONCompat.to_json(result, *a)
463
+ result.to_json(*a)
463
464
  end
464
465
 
465
466
  def self.json_create(o)
@@ -469,7 +470,7 @@ class Chef
469
470
  cookbook_version.manifest = o
470
471
 
471
472
  # We don't need the following step when we decide to stop supporting deprecated operators in the metadata (e.g. <<, >>)
472
- cookbook_version.manifest["metadata"] = Chef::JSONCompat.from_json(Chef::JSONCompat.to_json(cookbook_version.metadata))
473
+ cookbook_version.manifest["metadata"] = Chef::JSONCompat.from_json(cookbook_version.metadata.to_json)
473
474
 
474
475
  cookbook_version.freeze_version if o["frozen?"]
475
476
  cookbook_version
data/lib/chef/data_bag.rb CHANGED
@@ -63,7 +63,7 @@ class Chef
63
63
 
64
64
  # Serialize this object as a hash
65
65
  def to_json(*a)
66
- Chef::JSONCompat.to_json(to_hash, *a)
66
+ to_hash.to_json(*a)
67
67
  end
68
68
 
69
69
  def chef_server_rest
@@ -118,7 +118,7 @@ class Chef
118
118
  "data_bag" => self.data_bag,
119
119
  "raw_data" => self.raw_data
120
120
  }
121
- Chef::JSONCompat.to_json(result, *a)
121
+ result.to_json(*a)
122
122
  end
123
123
 
124
124
  def self.from_hash(h)
@@ -28,6 +28,7 @@ class Chef
28
28
  # objects via method calls.
29
29
  module Recipe
30
30
 
31
+ include Chef::Mixin::ShellOut
31
32
  include Chef::Mixin::ConvertToClassName
32
33
 
33
34
  def method_missing(method_symbol, *args, &block)
@@ -84,20 +85,6 @@ class Chef
84
85
 
85
86
  resource = build_resource(type, name, created_at, &resource_attrs_block)
86
87
 
87
- # Some resources (freebsd_package) can be invoked with multiple names
88
- # (package || freebsd_package).
89
- # https://github.com/opscode/chef/issues/1773
90
- # For these resources we want to make sure
91
- # their key in resource collection is same as the name they are declared
92
- # as. Since this might be a breaking change for resources that define
93
- # customer to_s methods, we are working around the issue by letting
94
- # resources know of their created_as_type until this issue is fixed in
95
- # Chef 12:
96
- # https://github.com/opscode/chef/issues/1817
97
- if resource.respond_to?(:created_as_type=)
98
- resource.created_as_type = type
99
- end
100
-
101
88
  run_context.resource_collection.insert(resource)
102
89
  resource
103
90
  end