chef 10.34.6 → 11.0.0.beta.0

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 (506) hide show
  1. data/CONTRIBUTING.md +155 -0
  2. data/README.md +89 -0
  3. data/Rakefile +4 -12
  4. data/bin/chef-apply +25 -0
  5. data/bin/chef-shell +34 -0
  6. data/bin/shef +6 -5
  7. data/distro/common/html/chef-client.8.html +4 -4
  8. data/distro/common/html/chef-expander.8.html +4 -4
  9. data/distro/common/html/chef-expanderctl.8.html +4 -4
  10. data/distro/common/html/chef-server-webui.8.html +4 -4
  11. data/distro/common/html/chef-server.8.html +4 -4
  12. data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
  13. data/distro/common/html/chef-solo.8.html +18 -12
  14. data/distro/common/html/chef-solr.8.html +4 -4
  15. data/distro/common/html/knife-bootstrap.1.html +4 -4
  16. data/distro/common/html/knife-client.1.html +4 -4
  17. data/distro/common/html/knife-configure.1.html +4 -4
  18. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  19. data/distro/common/html/knife-cookbook.1.html +10 -7
  20. data/distro/common/html/knife-data-bag.1.html +10 -7
  21. data/distro/common/html/knife-environment.1.html +8 -6
  22. data/distro/common/html/knife-exec.1.html +9 -9
  23. data/distro/common/html/knife-index.1.html +4 -4
  24. data/distro/common/html/knife-node.1.html +4 -4
  25. data/distro/common/html/knife-role.1.html +4 -4
  26. data/distro/common/html/knife-search.1.html +4 -4
  27. data/distro/common/html/knife-ssh.1.html +4 -4
  28. data/distro/common/html/knife-status.1.html +4 -4
  29. data/distro/common/html/knife-tag.1.html +4 -4
  30. data/distro/common/html/knife.1.html +8 -13
  31. data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
  32. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  33. data/distro/common/man/man1/knife-client.1 +1 -1
  34. data/distro/common/man/man1/knife-configure.1 +1 -1
  35. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  36. data/distro/common/man/man1/knife-cookbook.1 +15 -2
  37. data/distro/common/man/man1/knife-data-bag.1 +15 -2
  38. data/distro/common/man/man1/knife-environment.1 +12 -2
  39. data/distro/common/man/man1/knife-exec.1 +4 -7
  40. data/distro/common/man/man1/knife-index.1 +1 -1
  41. data/distro/common/man/man1/knife-node.1 +1 -1
  42. data/distro/common/man/man1/knife-role.1 +1 -1
  43. data/distro/common/man/man1/knife-search.1 +1 -1
  44. data/distro/common/man/man1/knife-ssh.1 +1 -1
  45. data/distro/common/man/man1/knife-status.1 +1 -1
  46. data/distro/common/man/man1/knife-tag.1 +1 -1
  47. data/distro/common/man/man1/knife.1 +3 -6
  48. data/distro/common/man/man8/chef-client.8 +1 -1
  49. data/distro/common/man/man8/chef-expander.8 +1 -1
  50. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  51. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  52. data/distro/common/man/man8/chef-server.8 +1 -1
  53. data/distro/common/man/man8/chef-solo.8 +36 -4
  54. data/distro/common/man/man8/chef-solr.8 +1 -1
  55. data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
  56. data/distro/common/markdown/man1/knife-exec.mkd +11 -6
  57. data/distro/common/markdown/man1/knife.mkd +4 -9
  58. data/distro/debian/etc/default/chef-client +0 -1
  59. data/distro/debian/etc/init.d/chef-client +2 -2
  60. data/lib/chef.rb +2 -5
  61. data/lib/chef/api_client.rb +20 -130
  62. data/lib/chef/api_client/registration.rb +126 -0
  63. data/lib/chef/application.rb +71 -14
  64. data/lib/chef/application/apply.rb +160 -0
  65. data/lib/chef/application/client.rb +25 -18
  66. data/lib/chef/application/knife.rb +0 -2
  67. data/lib/chef/application/solo.rb +23 -8
  68. data/lib/chef/application/windows_service.rb +5 -2
  69. data/lib/chef/applications.rb +1 -0
  70. data/lib/chef/chef_fs.rb +11 -0
  71. data/lib/chef/chef_fs/command_line.rb +232 -0
  72. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  73. data/lib/chef/chef_fs/file_system.rb +358 -0
  74. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
  75. data/lib/chef/chef_fs/file_system/base_fs_object.rb +121 -0
  76. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +109 -0
  77. data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb} +12 -15
  78. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +84 -0
  79. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +188 -0
  80. data/lib/chef/chef_fs/file_system/cookbook_file.rb +78 -0
  81. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  82. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +68 -0
  83. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +78 -0
  84. data/lib/chef/chef_fs/file_system/data_bag_item.rb +59 -0
  85. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +66 -0
  86. data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
  87. data/lib/chef/{index_queue.rb → chef_fs/file_system/file_system_error.rb} +14 -12
  88. data/lib/chef/{resource/whyrun_safe_ruby_block.rb → chef_fs/file_system/file_system_root_dir.rb} +10 -10
  89. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  90. data/lib/chef/chef_fs/file_system/nodes_dir.rb +47 -0
  91. data/lib/chef/{provider/whyrun_safe_ruby_block.rb → chef_fs/file_system/nonexistent_fs_object.rb} +19 -9
  92. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  93. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +84 -0
  94. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +123 -0
  95. data/lib/chef/chef_fs/knife.rb +77 -0
  96. data/lib/chef/chef_fs/path_utils.rb +64 -0
  97. data/lib/chef/client.rb +44 -21
  98. data/lib/chef/config.rb +52 -43
  99. data/lib/chef/cookbook/synchronizer.rb +6 -8
  100. data/lib/chef/cookbook/syntax_check.rb +61 -14
  101. data/lib/chef/cookbook_loader.rb +39 -26
  102. data/lib/chef/cookbook_uploader.rb +17 -19
  103. data/lib/chef/cookbook_version.rb +3 -302
  104. data/lib/chef/daemon.rb +3 -18
  105. data/lib/chef/data_bag.rb +4 -97
  106. data/lib/chef/data_bag_item.rb +2 -65
  107. data/lib/chef/digester.rb +73 -0
  108. data/lib/chef/dsl.rb +6 -0
  109. data/lib/chef/dsl/data_query.rb +66 -0
  110. data/lib/chef/dsl/include_attribute.rb +60 -0
  111. data/lib/chef/dsl/include_recipe.rb +42 -0
  112. data/lib/chef/dsl/platform_introspection.rb +213 -0
  113. data/lib/chef/dsl/recipe.rb +84 -0
  114. data/lib/chef/dsl/registry_helper.rb +59 -0
  115. data/lib/chef/encrypted_data_bag_item.rb +74 -19
  116. data/lib/chef/environment.rb +9 -180
  117. data/lib/chef/exceptions.rb +87 -14
  118. data/lib/chef/formatters/base.rb +4 -1
  119. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +0 -4
  120. data/lib/chef/json_compat.rb +1 -97
  121. data/lib/chef/knife.rb +90 -41
  122. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  123. data/lib/chef/knife/bootstrap/centos5-gems.erb +2 -2
  124. data/lib/chef/knife/bootstrap/chef-full.erb +3 -3
  125. data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -2
  126. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
  127. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +2 -2
  128. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +2 -2
  129. data/lib/chef/knife/configure.rb +1 -2
  130. data/lib/chef/knife/cookbook_metadata.rb +1 -0
  131. data/lib/chef/knife/cookbook_test.rb +3 -2
  132. data/lib/chef/knife/cookbook_upload.rb +12 -7
  133. data/lib/chef/knife/core/bootstrap_context.rb +1 -1
  134. data/lib/chef/knife/core/generic_presenter.rb +26 -13
  135. data/lib/chef/knife/core/node_editor.rb +36 -16
  136. data/lib/chef/knife/core/node_presenter.rb +1 -1
  137. data/lib/chef/knife/core/text_formatter.rb +23 -37
  138. data/lib/chef/knife/core/ui.rb +15 -9
  139. data/lib/chef/knife/delete.rb +39 -0
  140. data/lib/chef/knife/diff.rb +46 -0
  141. data/lib/chef/knife/download.rb +50 -0
  142. data/lib/chef/knife/environment_show.rb +7 -0
  143. data/lib/chef/knife/exec.rb +5 -5
  144. data/lib/chef/knife/help_topics.rb +1 -1
  145. data/lib/chef/knife/index_rebuild.rb +91 -7
  146. data/lib/chef/knife/list.rb +109 -0
  147. data/lib/chef/knife/raw.rb +108 -0
  148. data/lib/chef/knife/search.rb +40 -22
  149. data/lib/chef/knife/show.rb +32 -0
  150. data/lib/chef/knife/ssh.rb +6 -2
  151. data/lib/chef/knife/upload.rb +50 -0
  152. data/lib/chef/mixin/checksum.rb +3 -3
  153. data/lib/chef/mixin/deep_merge.rb +55 -197
  154. data/lib/chef/mixin/language.rb +9 -222
  155. data/lib/chef/mixin/language_include_attribute.rb +6 -38
  156. data/lib/chef/mixin/language_include_recipe.rb +3 -35
  157. data/lib/chef/mixin/params_validate.rb +6 -19
  158. data/lib/chef/mixin/recipe_definition_dsl_core.rb +8 -61
  159. data/lib/chef/mixin/securable.rb +32 -7
  160. data/lib/chef/mixin/template.rb +40 -0
  161. data/lib/chef/mixins.rb +0 -4
  162. data/lib/chef/monkey_patches/net_http.rb +0 -34
  163. data/lib/chef/node.rb +133 -309
  164. data/lib/chef/node/attribute.rb +333 -473
  165. data/lib/chef/node/attribute_collections.rb +199 -0
  166. data/lib/chef/node/immutable_collections.rb +186 -0
  167. data/lib/chef/platform.rb +7 -22
  168. data/lib/chef/provider.rb +2 -49
  169. data/lib/chef/provider/breakpoint.rb +6 -6
  170. data/lib/chef/provider/cookbook_file.rb +5 -33
  171. data/lib/chef/provider/deploy.rb +2 -1
  172. data/lib/chef/provider/directory.rb +14 -17
  173. data/lib/chef/provider/file.rb +19 -52
  174. data/lib/chef/provider/group.rb +31 -51
  175. data/lib/chef/provider/group/dscl.rb +13 -53
  176. data/lib/chef/provider/group/gpasswd.rb +19 -14
  177. data/lib/chef/provider/group/groupadd.rb +1 -41
  178. data/lib/chef/provider/group/groupmod.rb +36 -46
  179. data/lib/chef/provider/group/pw.rb +16 -59
  180. data/lib/chef/provider/group/suse.rb +13 -16
  181. data/lib/chef/provider/group/usermod.rb +18 -40
  182. data/lib/chef/provider/group/windows.rb +6 -13
  183. data/lib/chef/provider/http_request.rb +25 -42
  184. data/lib/chef/provider/link.rb +2 -0
  185. data/lib/chef/provider/lwrp_base.rb +150 -0
  186. data/lib/chef/provider/package/portage.rb +4 -9
  187. data/lib/chef/provider/package/rpm.rb +2 -2
  188. data/lib/chef/provider/package/rubygems.rb +9 -41
  189. data/lib/chef/provider/package/yum.rb +12 -19
  190. data/lib/chef/provider/registry_key.rb +156 -0
  191. data/lib/chef/provider/remote_directory.rb +2 -0
  192. data/lib/chef/provider/remote_file.rb +21 -12
  193. data/lib/chef/provider/ruby_block.rb +5 -2
  194. data/lib/chef/provider/service.rb +15 -0
  195. data/lib/chef/provider/service/init.rb +9 -7
  196. data/lib/chef/provider/service/macosx.rb +15 -73
  197. data/lib/chef/provider/service/simple.rb +1 -1
  198. data/lib/chef/provider/service/solaris.rb +3 -3
  199. data/lib/chef/provider/template.rb +22 -25
  200. data/lib/chef/provider/template_finder.rb +61 -0
  201. data/lib/chef/provider/user.rb +0 -1
  202. data/lib/chef/provider/user/dscl.rb +175 -568
  203. data/lib/chef/provider/user/useradd.rb +30 -47
  204. data/lib/chef/providers.rb +3 -2
  205. data/lib/chef/recipe.rb +14 -8
  206. data/lib/chef/resource.rb +13 -154
  207. data/lib/chef/resource/group.rb +1 -11
  208. data/lib/chef/resource/http_request.rb +2 -1
  209. data/lib/chef/resource/lwrp_base.rb +127 -0
  210. data/lib/chef/resource/mount.rb +10 -11
  211. data/lib/chef/resource/registry_key.rb +86 -0
  212. data/lib/chef/resource/remote_directory.rb +6 -5
  213. data/lib/chef/resource/remote_file.rb +22 -31
  214. data/lib/chef/resource/ruby_block.rb +2 -2
  215. data/lib/chef/resource/service.rb +14 -0
  216. data/lib/chef/resource/user.rb +0 -18
  217. data/lib/chef/resource_collection.rb +25 -21
  218. data/lib/chef/resources.rb +2 -1
  219. data/lib/chef/rest.rb +50 -131
  220. data/lib/chef/rest/auth_credentials.rb +4 -20
  221. data/lib/chef/rest/rest_request.rb +2 -7
  222. data/lib/chef/role.rb +1 -97
  223. data/lib/chef/run_context.rb +108 -130
  224. data/lib/chef/run_context/cookbook_compiler.rb +280 -0
  225. data/lib/chef/run_list.rb +0 -2
  226. data/lib/chef/run_list/run_list_expansion.rb +0 -15
  227. data/lib/chef/run_lock.rb +90 -0
  228. data/lib/chef/runner.rb +28 -5
  229. data/lib/chef/sandbox.rb +15 -148
  230. data/lib/chef/scan_access_control.rb +2 -4
  231. data/lib/chef/shef/ext.rb +3 -575
  232. data/lib/chef/{shef.rb → shell.rb} +35 -40
  233. data/lib/chef/shell/ext.rb +593 -0
  234. data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
  235. data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
  236. data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +17 -15
  237. data/lib/chef/shell_out.rb +7 -0
  238. data/lib/chef/util/windows/net_group.rb +1 -5
  239. data/lib/chef/version.rb +3 -3
  240. data/lib/chef/win32/api/process.rb +0 -1
  241. data/lib/chef/win32/handle.rb +1 -8
  242. data/lib/chef/win32/registry.rb +371 -0
  243. data/spec/data/big_json.json +1 -2
  244. data/spec/data/big_json_plus_one.json +1 -2
  245. data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
  246. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  247. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  248. data/spec/data/nodes/default.rb +3 -3
  249. data/spec/data/nodes/test.example.com.rb +3 -3
  250. data/spec/data/nodes/test.rb +3 -3
  251. data/spec/data/partial_one.erb +1 -0
  252. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  253. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  254. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  255. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  256. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  257. data/spec/data/{knife-home/.chef/plugins/knife/example_home_subcommand.rb → run_context/cookbooks/circular-dep1/recipes/default.rb} +0 -0
  258. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  259. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  260. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  261. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  262. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  263. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  264. data/spec/data/{lwrp_const_scoping/resources/conflict.rb → run_context/cookbooks/circular-dep2/recipes/default.rb} +0 -0
  265. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  266. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  267. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  268. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  269. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  270. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  271. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  272. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  273. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  274. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  275. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  276. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  277. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  278. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  279. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  280. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  281. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  282. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  283. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  284. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  285. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  286. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  287. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  288. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  289. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  290. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  291. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  292. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  293. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  294. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  295. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  296. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  297. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  298. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  299. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  300. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  301. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  302. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  303. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  304. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  305. data/spec/data/shef-config.rb +7 -0
  306. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  307. data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
  308. data/spec/functional/knife/exec_spec.rb +2 -2
  309. data/spec/functional/knife/ssh_spec.rb +5 -1
  310. data/spec/functional/resource/cookbook_file_spec.rb +7 -19
  311. data/spec/functional/resource/directory_spec.rb +4 -0
  312. data/spec/functional/resource/file_spec.rb +56 -22
  313. data/spec/functional/resource/link_spec.rb +2 -0
  314. data/spec/functional/resource/registry_spec.rb +576 -0
  315. data/spec/functional/resource/remote_directory_spec.rb +142 -36
  316. data/spec/functional/resource/remote_file_spec.rb +18 -0
  317. data/spec/functional/resource/template_spec.rb +23 -2
  318. data/spec/functional/run_lock_spec.rb +106 -0
  319. data/spec/functional/shell_spec.rb +100 -0
  320. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  321. data/spec/spec_helper.rb +5 -29
  322. data/spec/stress/win32/security_spec.rb +1 -1
  323. data/spec/support/chef_helpers.rb +0 -2
  324. data/spec/support/platform_helpers.rb +8 -15
  325. data/spec/support/shared/functional/directory_resource.rb +84 -22
  326. data/spec/support/shared/functional/file_resource.rb +169 -71
  327. data/spec/support/shared/functional/securable_resource.rb +143 -119
  328. data/spec/support/shared/functional/securable_resource_with_reporting.rb +375 -0
  329. data/spec/support/shared/unit/file_system_support.rb +110 -0
  330. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  331. data/spec/unit/api_client/registration_spec.rb +175 -0
  332. data/spec/unit/api_client_spec.rb +78 -156
  333. data/spec/unit/application/apply.rb +84 -0
  334. data/spec/unit/application/client_spec.rb +1 -37
  335. data/spec/unit/application/knife_spec.rb +5 -0
  336. data/spec/unit/application_spec.rb +57 -2
  337. data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
  338. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  339. data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
  340. data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +237 -0
  341. data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +568 -0
  342. data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +220 -0
  343. data/spec/unit/chef_fs/file_system_spec.rb +136 -0
  344. data/spec/unit/client_spec.rb +124 -33
  345. data/spec/unit/config_spec.rb +46 -13
  346. data/spec/unit/cookbook/synchronizer_spec.rb +1 -49
  347. data/spec/unit/cookbook/syntax_check_spec.rb +48 -109
  348. data/spec/unit/cookbook_loader_spec.rb +153 -91
  349. data/spec/unit/cookbook_manifest_spec.rb +81 -81
  350. data/spec/unit/cookbook_spec.rb +3 -20
  351. data/spec/unit/cookbook_version_spec.rb +23 -122
  352. data/spec/unit/daemon_spec.rb +3 -24
  353. data/spec/unit/data_bag_spec.rb +6 -4
  354. data/spec/unit/digester_spec.rb +50 -0
  355. data/spec/unit/dsl/data_query_spec.rb +66 -0
  356. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  357. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  358. data/spec/unit/encrypted_data_bag_item_spec.rb +50 -105
  359. data/spec/unit/environment_spec.rb +0 -130
  360. data/spec/unit/exceptions_spec.rb +2 -3
  361. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -3
  362. data/spec/unit/json_compat_spec.rb +15 -7
  363. data/spec/unit/knife/bootstrap_spec.rb +2 -0
  364. data/spec/unit/knife/configure_spec.rb +20 -14
  365. data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
  366. data/spec/unit/knife/cookbook_test_spec.rb +1 -0
  367. data/spec/unit/knife/cookbook_upload_spec.rb +43 -8
  368. data/spec/unit/knife/core/bootstrap_context_spec.rb +1 -1
  369. data/spec/unit/knife/core/ui_spec.rb +156 -125
  370. data/spec/unit/knife/data_bag_create_spec.rb +9 -0
  371. data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
  372. data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
  373. data/spec/unit/knife/data_bag_show_spec.rb +11 -4
  374. data/spec/unit/knife/index_rebuild_spec.rb +96 -33
  375. data/spec/unit/knife/knife_help.rb +7 -7
  376. data/spec/unit/knife/node_edit_spec.rb +6 -33
  377. data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
  378. data/spec/unit/knife/ssh_spec.rb +12 -15
  379. data/spec/unit/knife/status_spec.rb +2 -2
  380. data/spec/unit/knife_spec.rb +53 -0
  381. data/spec/unit/lwrp_spec.rb +59 -42
  382. data/spec/unit/mixin/checksum_spec.rb +2 -2
  383. data/spec/unit/mixin/deep_merge_spec.rb +101 -799
  384. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +6 -1
  385. data/spec/unit/mixin/params_validate_spec.rb +4 -37
  386. data/spec/unit/mixin/securable_spec.rb +5 -3
  387. data/spec/unit/mixin/template_spec.rb +119 -0
  388. data/spec/unit/node/attribute_spec.rb +195 -173
  389. data/spec/unit/node/immutable_collections_spec.rb +139 -0
  390. data/spec/unit/node_spec.rb +366 -370
  391. data/spec/unit/platform_spec.rb +9 -10
  392. data/spec/unit/provider/breakpoint_spec.rb +8 -8
  393. data/spec/unit/provider/cookbook_file_spec.rb +4 -8
  394. data/spec/unit/provider/directory_spec.rb +96 -64
  395. data/spec/unit/provider/env_spec.rb +2 -2
  396. data/spec/unit/provider/file_spec.rb +48 -39
  397. data/spec/unit/provider/group/dscl_spec.rb +0 -36
  398. data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
  399. data/spec/unit/provider/group/groupadd_spec.rb +4 -3
  400. data/spec/unit/provider/group/groupmod_spec.rb +1 -0
  401. data/spec/unit/provider/group/pw_spec.rb +15 -12
  402. data/spec/unit/provider/group/usermod_spec.rb +6 -21
  403. data/spec/unit/provider/group/windows_spec.rb +8 -0
  404. data/spec/unit/provider/group_spec.rb +6 -28
  405. data/spec/unit/provider/http_request_spec.rb +28 -69
  406. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  407. data/spec/unit/provider/ohai_spec.rb +4 -4
  408. data/spec/unit/provider/package/apt_spec.rb +0 -1
  409. data/spec/unit/provider/package/ips_spec.rb +0 -1
  410. data/spec/unit/provider/package/portage_spec.rb +0 -44
  411. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  412. data/spec/unit/provider/package/rubygems_spec.rb +1 -44
  413. data/spec/unit/provider/package/yum_spec.rb +39 -36
  414. data/spec/unit/provider/package_spec.rb +7 -5
  415. data/spec/unit/provider/registry_key_spec.rb +269 -0
  416. data/spec/unit/provider/remote_directory_spec.rb +7 -3
  417. data/spec/unit/provider/remote_file_spec.rb +36 -0
  418. data/spec/unit/provider/route_spec.rb +4 -3
  419. data/spec/unit/provider/ruby_block_spec.rb +8 -0
  420. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  421. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  422. data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
  423. data/spec/unit/provider/service/init_service_spec.rb +27 -4
  424. data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
  425. data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
  426. data/spec/unit/provider/service/macosx_spec.rb +11 -66
  427. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  428. data/spec/unit/provider/service/simple_service_spec.rb +3 -3
  429. data/spec/unit/provider/service/upstart_service_spec.rb +9 -9
  430. data/spec/unit/provider/subversion_spec.rb +1 -1
  431. data/spec/unit/provider/template_spec.rb +35 -11
  432. data/spec/unit/provider/user/dscl_spec.rb +285 -681
  433. data/spec/unit/provider/user/useradd_spec.rb +1 -22
  434. data/spec/unit/provider/user_spec.rb +1 -1
  435. data/spec/unit/recipe_spec.rb +10 -8
  436. data/spec/unit/registry_helper_spec.rb +374 -0
  437. data/spec/unit/resource/mount_spec.rb +0 -11
  438. data/spec/unit/resource/registry_key_spec.rb +171 -0
  439. data/spec/unit/resource/remote_file_spec.rb +21 -23
  440. data/spec/unit/resource/ruby_block_spec.rb +7 -3
  441. data/spec/unit/resource/service_spec.rb +11 -0
  442. data/spec/unit/resource_spec.rb +4 -19
  443. data/spec/unit/rest/auth_credentials_spec.rb +2 -19
  444. data/spec/unit/rest_spec.rb +130 -284
  445. data/spec/unit/run_context/cookbook_compiler_spec.rb +181 -0
  446. data/spec/unit/run_context_spec.rb +18 -4
  447. data/spec/unit/run_list_spec.rb +0 -209
  448. data/spec/unit/run_lock_spec.rb +37 -0
  449. data/spec/unit/runner_spec.rb +101 -2
  450. data/spec/unit/scan_access_control_spec.rb +4 -4
  451. data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
  452. data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
  453. data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +14 -69
  454. data/spec/unit/shell_out_spec.rb +18 -0
  455. data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
  456. metadata +275 -234
  457. checksums.yaml +0 -15
  458. data/README.rdoc +0 -177
  459. data/distro/common/html/knife-recipe.1.html +0 -92
  460. data/lib/chef/certificate.rb +0 -161
  461. data/lib/chef/checksum.rb +0 -167
  462. data/lib/chef/checksum_cache.rb +0 -190
  463. data/lib/chef/cookbook_version_selector.rb +0 -168
  464. data/lib/chef/couchdb.rb +0 -246
  465. data/lib/chef/index_queue/amqp_client.rb +0 -116
  466. data/lib/chef/index_queue/consumer.rb +0 -76
  467. data/lib/chef/index_queue/indexable.rb +0 -109
  468. data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
  469. data/lib/chef/monkey_patches/moneta.rb +0 -50
  470. data/lib/chef/monkey_patches/uri.rb +0 -70
  471. data/lib/chef/openid_registration.rb +0 -187
  472. data/lib/chef/provider/user/solaris.rb +0 -90
  473. data/lib/chef/solr_query.rb +0 -187
  474. data/lib/chef/solr_query/lucene.treetop +0 -150
  475. data/lib/chef/solr_query/lucene_nodes.rb +0 -285
  476. data/lib/chef/solr_query/query_transform.rb +0 -65
  477. data/lib/chef/solr_query/solr_http_request.rb +0 -132
  478. data/lib/chef/webui_user.rb +0 -231
  479. data/spec/data/cookbooks/openldap/files/default/.dotfile +0 -1
  480. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +0 -1
  481. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +0 -1
  482. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +0 -1
  483. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  484. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  485. data/spec/data/mac_users/10.7.plist.xml +0 -559
  486. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  487. data/spec/data/mac_users/10.8.plist.xml +0 -559
  488. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  489. data/spec/data/mac_users/10.9.plist.xml +0 -560
  490. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  491. data/spec/functional/resource/base.rb +0 -40
  492. data/spec/functional/resource/group_spec.rb +0 -343
  493. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  494. data/spec/unit/certificate_spec.rb +0 -76
  495. data/spec/unit/checksum_cache_spec.rb +0 -209
  496. data/spec/unit/checksum_spec.rb +0 -94
  497. data/spec/unit/couchdb_spec.rb +0 -274
  498. data/spec/unit/index_queue_spec.rb +0 -391
  499. data/spec/unit/mixin/language_spec.rb +0 -305
  500. data/spec/unit/openid_registration_spec.rb +0 -153
  501. data/spec/unit/provider/user/solaris_spec.rb +0 -414
  502. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
  503. data/spec/unit/solr_query/query_transform_spec.rb +0 -454
  504. data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
  505. data/spec/unit/solr_query_spec.rb +0 -203
  506. data/spec/unit/webui_user_spec.rb +0 -238
@@ -50,6 +50,7 @@ require 'chef/resource/pacman_package'
50
50
  require 'chef/resource/perl'
51
51
  require 'chef/resource/portage_package'
52
52
  require 'chef/resource/python'
53
+ require 'chef/resource/registry_key'
53
54
  require 'chef/resource/remote_directory'
54
55
  require 'chef/resource/remote_file'
55
56
  require 'chef/resource/rpm_package'
@@ -64,5 +65,5 @@ require 'chef/resource/smartos_package'
64
65
  require 'chef/resource/template'
65
66
  require 'chef/resource/timestamped_deploy'
66
67
  require 'chef/resource/user'
67
- require 'chef/resource/whyrun_safe_ruby_block'
68
68
  require 'chef/resource/yum_package'
69
+ require 'chef/resource/lwrp_base'
@@ -30,7 +30,8 @@ require 'chef/rest/rest_request'
30
30
  require 'chef/monkey_patches/string'
31
31
  require 'chef/monkey_patches/net_http'
32
32
  require 'chef/config'
33
-
33
+ require 'chef/exceptions'
34
+ require 'chef/platform'
34
35
 
35
36
 
36
37
  class Chef
@@ -61,7 +62,9 @@ class Chef
61
62
  @url = url
62
63
  @cookies = CookieJar.instance
63
64
  @default_headers = options[:headers] || {}
64
- @auth_credentials = AuthCredentials.new(client_name, signing_key_filename)
65
+ @signing_key_filename = signing_key_filename
66
+ @key = load_signing_key(@signing_key_filename, options[:raw_key])
67
+ @auth_credentials = AuthCredentials.new(client_name, @key)
65
68
  @sign_on_redirect, @sign_request = true, true
66
69
  @redirects_followed = 0
67
70
  @redirect_limit = 10
@@ -70,7 +73,7 @@ class Chef
70
73
  end
71
74
 
72
75
  def signing_key_filename
73
- @auth_credentials.key_file
76
+ @signing_key_filename
74
77
  end
75
78
 
76
79
  def client_name
@@ -78,51 +81,7 @@ class Chef
78
81
  end
79
82
 
80
83
  def signing_key
81
- @auth_credentials.raw_key
82
- end
83
-
84
- # Register the client
85
- #--
86
- # Requires you to load chef/api_client beforehand. explicit require is removed since
87
- # most users of this class have no need for chef/api_client. This functionality
88
- # should be moved anyway...
89
- def register(name=Chef::Config[:node_name], destination=Chef::Config[:client_key])
90
- if (File.exists?(destination) && !File.writable?(destination))
91
- raise Chef::Exceptions::CannotWritePrivateKey, "I cannot write your private key to #{destination} - check permissions?"
92
- end
93
- nc = Chef::ApiClient.new
94
- nc.name(name)
95
-
96
- catch(:done) do
97
- retries = config[:client_registration_retries] || 5
98
- 0.upto(retries) do |n|
99
- begin
100
- response = nc.save(true, true)
101
- Chef::Log.debug("Registration response: #{response.inspect}")
102
- private_key = if response.respond_to?(:[])
103
- response["private_key"]
104
- else
105
- response.private_key
106
- end
107
- unless private_key
108
- raise Chef::Exceptions::CannotWritePrivateKey, "The response from the server did not include a private key!"
109
- end
110
- # Write out the private key
111
- ::File.open(destination, "w") {|f|
112
- f.chmod(0600)
113
- f.print(private_key)
114
- }
115
- throw :done
116
- rescue IOError
117
- raise Chef::Exceptions::CannotWritePrivateKey, "I cannot write your private key to #{destination}"
118
- rescue Net::HTTPFatalError => e
119
- Chef::Log.warn("Failed attempt #{n} of #{retries+1} on client creation")
120
- raise unless e.response.code == "500"
121
- end
122
- end
123
- end
124
-
125
- true
84
+ @raw_key
126
85
  end
127
86
 
128
87
  # Send an HTTP GET request to the path
@@ -133,7 +92,7 @@ class Chef
133
92
  # path:: The path to GET
134
93
  # raw:: Whether you want the raw body returned, or JSON inflated. Defaults
135
94
  # to JSON inflated.
136
- def get_rest(path, raw=false, headers={})
95
+ def get(path, raw=false, headers={})
137
96
  if raw
138
97
  streaming_request(create_url(path), headers)
139
98
  else
@@ -141,21 +100,33 @@ class Chef
141
100
  end
142
101
  end
143
102
 
103
+ def head(path, headers={})
104
+ api_request(:HEAD, create_url(path), headers)
105
+ end
106
+
107
+ alias :get_rest :get
108
+
144
109
  # Send an HTTP DELETE request to the path
145
- def delete_rest(path, headers={})
110
+ def delete(path, headers={})
146
111
  api_request(:DELETE, create_url(path), headers)
147
112
  end
148
113
 
114
+ alias :delete_rest :delete
115
+
149
116
  # Send an HTTP POST request to the path
150
- def post_rest(path, json, headers={})
117
+ def post(path, json, headers={})
151
118
  api_request(:POST, create_url(path), headers, json)
152
119
  end
153
120
 
121
+ alias :post_rest :post
122
+
154
123
  # Send an HTTP PUT request to the path
155
- def put_rest(path, json, headers={})
124
+ def put(path, json, headers={})
156
125
  api_request(:PUT, create_url(path), headers, json)
157
126
  end
158
127
 
128
+ alias :put_rest :put
129
+
159
130
  # Streams a download to a tempfile, then yields the tempfile to a block.
160
131
  # After the download, the tempfile will be closed and unlinked.
161
132
  # If you rename the tempfile, it will not be deleted.
@@ -177,69 +148,6 @@ class Chef
177
148
  auth_credentials.sign_requests? && @sign_request
178
149
  end
179
150
 
180
- # ==== DEPRECATED
181
- # Use +api_request+ instead
182
- #--
183
- # Actually run an HTTP request. First argument is the HTTP method,
184
- # which should be one of :GET, :PUT, :POST or :DELETE. Next is the
185
- # URL, then an object to include in the body (which will be converted with
186
- # .to_json). The limit argument is unused, it is present for backwards
187
- # compatibility. Configure the redirect limit with #redirect_limit=
188
- # instead.
189
- #
190
- # Typically, you won't use this method -- instead, you'll use one of
191
- # the helper methods (get_rest, post_rest, etc.)
192
- #
193
- # Will return the body of the response on success.
194
- def run_request(method, url, headers={}, data=false, limit=nil, raw=false)
195
- json_body = data ? Chef::JSONCompat.to_json(data) : nil
196
- # Force encoding to binary to fix SSL related EOFErrors
197
- # cf. http://tickets.opscode.com/browse/CHEF-2363
198
- # http://redmine.ruby-lang.org/issues/5233
199
- json_body.force_encoding(Encoding::BINARY) if json_body.respond_to?(:force_encoding)
200
- headers = build_headers(method, url, headers, json_body, raw)
201
-
202
- tf, response_body = nil, nil
203
-
204
- retriable_rest_request(method, url, json_body, headers) do |rest_request|
205
-
206
- res = rest_request.call do |response|
207
- if raw
208
- tf = stream_to_tempfile(url, response)
209
- else
210
- response_body = decompress_body(response)
211
- end
212
- end
213
-
214
- case res
215
- when Net::HTTPSuccess
216
- if res['content-type'] =~ /json/
217
- Chef::JSONCompat.from_json(response_body)
218
- else
219
- if method == :HEAD
220
- true
221
- elsif raw
222
- tf
223
- else
224
- response_body
225
- end
226
- end
227
- when Net::HTTPNotModified # Must be tested before Net::HTTPRedirection because it's subclass.
228
- false
229
- when Net::HTTPRedirection
230
- follow_redirect {run_request(method, create_url(res['location']), headers, false, nil, raw)}
231
- else
232
- if res['content-type'] =~ /json/
233
- exception = Chef::JSONCompat.from_json(response_body)
234
- msg = "HTTP Request Returned #{res.code} #{res.message}: "
235
- msg << (exception["error"].respond_to?(:join) ? exception["error"].join(", ") : exception["error"].to_s)
236
- Chef::Log.warn(msg)
237
- end
238
- res.error!
239
- end
240
- end
241
- end
242
-
243
151
  # Runs an HTTP request to a JSON API with JSON body. File Download not supported.
244
152
  def api_request(method, url, headers={}, data=false)
245
153
  json_body = data ? Chef::JSONCompat.to_json(data) : nil
@@ -267,26 +175,20 @@ class Chef
267
175
 
268
176
  response_body = decompress_body(response)
269
177
 
270
- # 204 is successful, Net::HTTP returns nil response body.
271
- # Don't attempt to parse it.
272
- if response.kind_of?(Net::HTTPNoContent)
273
- response_body
274
- elsif response.kind_of?(Net::HTTPSuccess)
178
+ if response.kind_of?(Net::HTTPSuccess)
275
179
  if response['content-type'] =~ /json/
276
180
  Chef::JSONCompat.from_json(response_body.chomp)
277
181
  else
278
182
  Chef::Log.warn("Expected JSON response, but got content-type '#{response['content-type']}'")
279
- response_body
183
+ response_body.to_s
280
184
  end
185
+ elsif response.kind_of?(Net::HTTPNotModified) # Must be tested before Net::HTTPRedirection because it's subclass.
186
+ false
281
187
  elsif redirect_location = redirected_to(response)
282
- if [:GET, :HEAD].include?(method)
283
- follow_redirect {api_request(method, create_url(redirect_location), headers)}
284
- else
285
- raise Exceptions::InvalidRedirect, "#{method} request was redirected from #{url} to #{redirect_location}. Only GET and HEAD support redirects."
286
- end
188
+ follow_redirect {api_request(:GET, create_url(redirect_location))}
287
189
  else
288
190
  # have to decompress the body before making an exception for it. But the body could be nil.
289
- response.body.replace(decompress_body(response)) if response.body.respond_to?(:replace)
191
+ response.body.replace(response_body) if response.body.respond_to?(:replace)
290
192
 
291
193
  if response['content-type'] =~ /json/
292
194
  exception = Chef::JSONCompat.from_json(response_body)
@@ -306,7 +208,7 @@ class Chef
306
208
  end
307
209
 
308
210
  def decompress_body(response)
309
- if gzip_disabled?
211
+ if gzip_disabled? || response.body.nil?
310
212
  response.body
311
213
  else
312
214
  case response[CONTENT_ENCODING]
@@ -340,7 +242,7 @@ class Chef
340
242
  tempfile = stream_to_tempfile(url, r, &block)
341
243
  yield tempfile
342
244
  ensure
343
- tempfile && tempfile.close!
245
+ tempfile.close!
344
246
  end
345
247
  else
346
248
  tempfile = stream_to_tempfile(url, r)
@@ -449,10 +351,9 @@ class Chef
449
351
 
450
352
  def build_headers(method, url, headers={}, json_body=false, raw=false)
451
353
  headers = @default_headers.merge(headers)
452
- headers['Host'] = "#{url.host}:#{url.port}"
453
354
  #headers['Accept'] = "application/json" unless raw
454
355
  headers['Accept'] = "application/json" unless raw
455
- headers["Content-Type"] = 'application/json' if json_body && !headers.keys.map(&:downcase).include?("content-type")
356
+ headers["Content-Type"] = 'application/json' if json_body
456
357
  headers['Content-Length'] = json_body.bytesize.to_s if json_body
457
358
  headers[RESTRequest::ACCEPT_ENCODING] = RESTRequest::ENCODING_GZIP_DEFLATE unless gzip_disabled?
458
359
  headers.merge!(authentication_headers(method, url, json_body)) if sign_requests?
@@ -515,5 +416,23 @@ class Chef
515
416
  end
516
417
  end
517
418
 
419
+ def load_signing_key(key_file, raw_key = nil)
420
+ if (!!key_file)
421
+ @raw_key = IO.read(key_file).strip
422
+ elsif (!!raw_key)
423
+ @raw_key = raw_key.strip
424
+ else
425
+ return nil
426
+ end
427
+ @key = OpenSSL::PKey::RSA.new(@raw_key)
428
+ rescue SystemCallError, IOError => e
429
+ Chef::Log.warn "Failed to read the private key #{key_file}: #{e.inspect}"
430
+ raise Chef::Exceptions::PrivateKeyMissing, "I cannot read #{key_file}, which you told me to use to sign requests!"
431
+ rescue OpenSSL::PKey::RSAError
432
+ msg = "The file #{key_file} or :raw_key option does not contain a correctly formatted private key.\n"
433
+ msg << "The key file should begin with '-----BEGIN RSA PRIVATE KEY-----' and end with '-----END RSA PRIVATE KEY-----'"
434
+ raise Chef::Exceptions::InvalidPrivateKey, msg
435
+ end
436
+
518
437
  end
519
438
  end
@@ -20,22 +20,20 @@
20
20
  # See the License for the specific language governing permissions and
21
21
  # limitations under the License.
22
22
  #
23
- require 'chef/exceptions'
24
23
  require 'chef/log'
25
24
  require 'mixlib/authentication/signedheaderauth'
26
25
 
27
26
  class Chef
28
27
  class REST
29
28
  class AuthCredentials
30
- attr_reader :key_file, :client_name, :key, :raw_key
29
+ attr_reader :client_name, :key
31
30
 
32
- def initialize(client_name=nil, key_file=nil)
33
- @client_name, @key_file = client_name, key_file
34
- load_signing_key if sign_requests?
31
+ def initialize(client_name=nil, key=nil)
32
+ @client_name, @key = client_name, key
35
33
  end
36
34
 
37
35
  def sign_requests?
38
- !!key_file
36
+ !!key
39
37
  end
40
38
 
41
39
  def signature_headers(request_params={})
@@ -54,20 +52,6 @@ class Chef
54
52
  signed.inject({}){|memo, kv| memo["#{kv[0].to_s.upcase}"] = kv[1];memo}
55
53
  end
56
54
 
57
- private
58
-
59
- def load_signing_key
60
- @raw_key = IO.read(key_file).strip
61
- @key = OpenSSL::PKey::RSA.new(@raw_key)
62
- rescue SystemCallError, IOError => e
63
- Chef::Log.warn "Failed to read the private key #{key_file}: #{e.inspect}"
64
- raise Chef::Exceptions::PrivateKeyMissing, "I cannot read #{key_file}, which you told me to use to sign requests!"
65
- rescue OpenSSL::PKey::RSAError
66
- msg = "The file #{key_file} does not contain a correctly formatted private key.\n"
67
- msg << "The key file should begin with '-----BEGIN RSA PRIVATE KEY-----' and end with '-----END RSA PRIVATE KEY-----'"
68
- raise Chef::Exceptions::InvalidPrivateKey, msg
69
- end
70
-
71
55
  end
72
56
  end
73
57
  end
@@ -82,10 +82,6 @@ class Chef
82
82
  @url.host
83
83
  end
84
84
 
85
- def hostname
86
- @url.hostname
87
- end
88
-
89
85
  def port
90
86
  @url.port
91
87
  end
@@ -159,12 +155,12 @@ class Chef
159
155
  def configure_http_client
160
156
  http_proxy = proxy_uri
161
157
  if http_proxy.nil?
162
- @http_client = Net::HTTP.new(hostname, port)
158
+ @http_client = Net::HTTP.new(host, port)
163
159
  else
164
160
  Chef::Log.debug("Using #{http_proxy.host}:#{http_proxy.port} for proxy")
165
161
  user = Chef::Config["#{url.scheme}_proxy_user"]
166
162
  pass = Chef::Config["#{url.scheme}_proxy_pass"]
167
- @http_client = Net::HTTP.Proxy(http_proxy.host, http_proxy.port, user, pass).new(hostname, port)
163
+ @http_client = Net::HTTP.Proxy(http_proxy.host, http_proxy.port, user, pass).new(host, port)
168
164
  end
169
165
  if url.scheme == HTTPS
170
166
  @http_client.use_ssl = true
@@ -200,7 +196,6 @@ class Chef
200
196
  end
201
197
 
202
198
  @http_client.read_timeout = config[:rest_timeout]
203
- @http_client.open_timeout = config[:rest_timeout]
204
199
  end
205
200
 
206
201
 
@@ -21,9 +21,7 @@
21
21
  require 'chef/config'
22
22
  require 'chef/mixin/params_validate'
23
23
  require 'chef/mixin/from_file'
24
- require 'chef/couchdb'
25
24
  require 'chef/run_list'
26
- require 'chef/index_queue'
27
25
  require 'chef/mash'
28
26
  require 'chef/json_compat'
29
27
  require 'chef/search/query'
@@ -33,51 +31,14 @@ class Chef
33
31
 
34
32
  include Chef::Mixin::FromFile
35
33
  include Chef::Mixin::ParamsValidate
36
- include Chef::IndexQueue::Indexable
37
-
38
- DESIGN_DOCUMENT = {
39
- "version" => 6,
40
- "language" => "javascript",
41
- "views" => {
42
- "all" => {
43
- "map" => <<-EOJS
44
- function(doc) {
45
- if (doc.chef_type == "role") {
46
- emit(doc.name, doc);
47
- }
48
- }
49
- EOJS
50
- },
51
- "all_id" => {
52
- "map" => <<-EOJS
53
- function(doc) {
54
- if (doc.chef_type == "role") {
55
- emit(doc.name, doc.name);
56
- }
57
- }
58
- EOJS
59
- }
60
- }
61
- }
62
-
63
- attr_accessor :couchdb_rev, :couchdb
64
- attr_reader :couchdb_id
65
34
 
66
35
  # Create a new Chef::Role object.
67
- def initialize(couchdb=nil)
36
+ def initialize
68
37
  @name = ''
69
38
  @description = ''
70
39
  @default_attributes = Mash.new
71
40
  @override_attributes = Mash.new
72
41
  @env_run_lists = {"_default" => Chef::RunList.new}
73
- @couchdb_rev = nil
74
- @couchdb_id = nil
75
- @couchdb = couchdb || Chef::CouchDB.new
76
- end
77
-
78
- def couchdb_id=(value)
79
- @couchdb_id = value
80
- self.index_id = value
81
42
  end
82
43
 
83
44
  def chef_server_rest
@@ -177,7 +138,6 @@ class Chef
177
138
  accumulator
178
139
  end
179
140
  }
180
- result["_rev"] = couchdb_rev if couchdb_rev
181
141
  result
182
142
  end
183
143
 
@@ -214,20 +174,9 @@ class Chef
214
174
  end
215
175
  role.env_run_lists(env_run_list_hash)
216
176
 
217
- role.couchdb_rev = o["_rev"] if o.has_key?("_rev")
218
- role.index_id = role.couchdb_id
219
- role.couchdb_id = o["_id"] if o.has_key?("_id")
220
177
  role
221
178
  end
222
179
 
223
- # List all the Chef::Role objects in the CouchDB. If inflate is set to true, you will get
224
- # the full list of all Roles, fully inflated.
225
- def self.cdb_list(inflate=false, couchdb=nil)
226
- rs = (couchdb || Chef::CouchDB.new).list("roles", inflate)
227
- lookup = (inflate ? "value" : "key")
228
- rs["rows"].collect { |r| r[lookup] }
229
- end
230
-
231
180
  # Get the list of all roles from the API.
232
181
  def self.list(inflate=false)
233
182
  if inflate
@@ -241,24 +190,11 @@ class Chef
241
190
  end
242
191
  end
243
192
 
244
- # Load a role by name from CouchDB
245
- def self.cdb_load(name, couchdb=nil)
246
- (couchdb || Chef::CouchDB.new).load("role", name)
247
- end
248
-
249
193
  # Load a role by name from the API
250
194
  def self.load(name)
251
195
  chef_server_rest.get_rest("roles/#{name}")
252
196
  end
253
197
 
254
- def self.exists?(rolename, couchdb)
255
- begin
256
- self.cdb_load(rolename, couchdb)
257
- rescue Chef::Exceptions::CouchDBNotFound
258
- nil
259
- end
260
- end
261
-
262
198
  def environment(env_name)
263
199
  chef_server_rest.get_rest("roles/#{@name}/environments/#{env_name}")
264
200
  end
@@ -267,21 +203,11 @@ class Chef
267
203
  chef_server_rest.get_rest("roles/#{@name}/environments")
268
204
  end
269
205
 
270
- # Remove this role from the CouchDB
271
- def cdb_destroy
272
- couchdb.delete("role", @name, couchdb_rev)
273
- end
274
-
275
206
  # Remove this role via the REST API
276
207
  def destroy
277
208
  chef_server_rest.delete_rest("roles/#{@name}")
278
209
  end
279
210
 
280
- # Save this role to the CouchDB
281
- def cdb_save
282
- self.couchdb_rev = couchdb.store("role", @name, self)["rev"]
283
- end
284
-
285
211
  # Save this role via the REST API
286
212
  def save
287
213
  begin
@@ -299,11 +225,6 @@ class Chef
299
225
  self
300
226
  end
301
227
 
302
- # Set up our CouchDB design document
303
- def self.create_design_document(couchdb=nil)
304
- (couchdb || Chef::CouchDB.new).create_design_document("roles", DESIGN_DOCUMENT)
305
- end
306
-
307
228
  # As a string
308
229
  def to_s
309
230
  "role[#{@name}]"
@@ -328,22 +249,5 @@ class Chef
328
249
  end
329
250
  end
330
251
 
331
- # Sync all the json roles with couchdb from disk
332
- def self.sync_from_disk_to_couchdb
333
- Dir[File.join(Chef::Config[:role_path], "*.json")].each do |role_file|
334
- short_name = File.basename(role_file, ".json")
335
- Chef::Log.warn("Loading #{short_name}")
336
- r = Chef::Role.from_disk(short_name, "json")
337
- begin
338
- couch_role = Chef::Role.cdb_load(short_name)
339
- r.couchdb_rev = couch_role.couchdb_rev
340
- Chef::Log.debug("Replacing role #{short_name} with data from #{role_file}")
341
- rescue Chef::Exceptions::CouchDBNotFound
342
- Chef::Log.debug("Creating role #{short_name} with data from #{role_file}")
343
- end
344
- r.cdb_save
345
- end
346
- end
347
-
348
252
  end
349
253
  end