chef 11.6.2-x86-mingw32 → 11.8.0.rc.1-x86-mingw32

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 (628) hide show
  1. data/CONTRIBUTING.md +12 -12
  2. data/Rakefile +11 -14
  3. data/bin/chef-apply +2 -2
  4. data/bin/chef-client +2 -2
  5. data/bin/chef-service-manager +2 -2
  6. data/bin/chef-shell +3 -0
  7. data/bin/chef-solo +2 -2
  8. data/bin/knife +3 -3
  9. data/distro/arch/etc/rc.d/chef-client +2 -2
  10. data/distro/arch/etc/rc.d/chef-server +2 -2
  11. data/distro/arch/etc/rc.d/chef-server-webui +2 -2
  12. data/distro/arch/etc/rc.d/chef-solr +2 -2
  13. data/distro/common/html/chef-client.8.html +3 -3
  14. data/distro/common/html/chef-expander.8.html +3 -3
  15. data/distro/common/html/chef-expanderctl.8.html +3 -3
  16. data/distro/common/html/chef-server-webui.8.html +3 -3
  17. data/distro/common/html/chef-server.8.html +3 -3
  18. data/distro/common/html/chef-shell.1.html +3 -3
  19. data/distro/common/html/chef-solo.8.html +3 -3
  20. data/distro/common/html/chef-solr.8.html +4 -4
  21. data/distro/common/html/knife-bootstrap.1.html +3 -3
  22. data/distro/common/html/knife-client.1.html +3 -3
  23. data/distro/common/html/knife-configure.1.html +13 -13
  24. data/distro/common/html/knife-cookbook-site.1.html +3 -3
  25. data/distro/common/html/knife-cookbook.1.html +7 -7
  26. data/distro/common/html/knife-data-bag.1.html +3 -3
  27. data/distro/common/html/knife-environment.1.html +3 -3
  28. data/distro/common/html/knife-exec.1.html +3 -3
  29. data/distro/common/html/knife-index.1.html +3 -3
  30. data/distro/common/html/knife-node.1.html +3 -3
  31. data/distro/common/html/knife-role.1.html +3 -3
  32. data/distro/common/html/knife-search.1.html +3 -3
  33. data/distro/common/html/knife-ssh.1.html +3 -3
  34. data/distro/common/html/knife-status.1.html +3 -3
  35. data/distro/common/html/knife-tag.1.html +3 -3
  36. data/distro/common/html/knife.1.html +3 -3
  37. data/distro/common/man/man1/README.md +58 -0
  38. data/distro/common/man/man1/chef-shell.1 +114 -219
  39. data/distro/common/man/man1/knife-bootstrap.1 +176 -180
  40. data/distro/common/man/man1/knife-client.1 +368 -0
  41. data/distro/common/man/man1/knife-configure.1 +147 -85
  42. data/distro/common/man/man1/knife-cookbook-site.1 +465 -133
  43. data/distro/common/man/man1/knife-cookbook.1 +614 -304
  44. data/distro/common/man/man1/knife-data-bag.1 +476 -113
  45. data/distro/common/man/man1/knife-delete.1 +132 -0
  46. data/distro/common/man/man1/knife-deps.1 +219 -0
  47. data/distro/common/man/man1/knife-diff.1 +212 -0
  48. data/distro/common/man/man1/knife-download.1 +220 -0
  49. data/distro/common/man/man1/knife-edit.1 +126 -0
  50. data/distro/common/man/man1/knife-environment.1 +324 -0
  51. data/distro/common/man/man1/knife-exec.1 +317 -35
  52. data/distro/common/man/man1/knife-index-rebuild.1 +115 -0
  53. data/distro/common/man/man1/knife-list.1 +167 -0
  54. data/distro/common/man/man1/knife-node.1 +567 -123
  55. data/distro/common/man/man1/knife-raw.1 +170 -0
  56. data/distro/common/man/man1/knife-recipe-list.1 +133 -0
  57. data/distro/common/man/man1/knife-role.1 +367 -81
  58. data/distro/common/man/man1/knife-search.1 +267 -243
  59. data/distro/common/man/man1/knife-show.1 +138 -0
  60. data/distro/common/man/man1/knife-ssh.1 +241 -66
  61. data/distro/common/man/man1/knife-status.1 +202 -24
  62. data/distro/common/man/man1/knife-tag.1 +176 -39
  63. data/distro/common/man/man1/knife-upload.1 +239 -0
  64. data/distro/common/man/man1/knife-user.1 +317 -0
  65. data/distro/common/man/man1/knife-xargs.1 +166 -0
  66. data/distro/common/man/man1/knife.1 +227 -284
  67. data/distro/common/man/man8/chef-client.8 +247 -81
  68. data/distro/common/man/man8/chef-solo.8 +142 -110
  69. data/distro/common/markdown/man1/knife-bootstrap.mkd +1 -1
  70. data/distro/common/markdown/man1/knife-configure.mkd +11 -11
  71. data/distro/common/markdown/man1/knife-cookbook.mkd +4 -4
  72. data/distro/common/markdown/man8/chef-expander.mkd +1 -1
  73. data/distro/common/markdown/man8/chef-expanderctl.mkd +1 -1
  74. data/distro/debian/etc/init.d/chef-client +1 -1
  75. data/distro/debian/etc/init.d/chef-expander +1 -1
  76. data/distro/debian/etc/init.d/chef-server +1 -1
  77. data/distro/debian/etc/init.d/chef-server-webui +1 -1
  78. data/distro/debian/etc/init.d/chef-solr +1 -1
  79. data/distro/debian/etc/init/chef-client.conf +1 -1
  80. data/distro/debian/etc/init/chef-expander.conf +1 -1
  81. data/distro/debian/etc/init/chef-server-webui.conf +1 -1
  82. data/distro/debian/etc/init/chef-server.conf +1 -1
  83. data/distro/debian/etc/init/chef-solr.conf +1 -1
  84. data/distro/redhat/etc/init.d/chef-client +1 -1
  85. data/distro/redhat/etc/init.d/chef-server +2 -2
  86. data/distro/redhat/etc/init.d/chef-server-webui +2 -2
  87. data/distro/redhat/etc/init.d/chef-solr +2 -2
  88. data/lib/chef/api_client.rb +20 -5
  89. data/lib/chef/application.rb +53 -22
  90. data/lib/chef/application/agent.rb +2 -2
  91. data/lib/chef/application/client.rb +34 -24
  92. data/lib/chef/application/knife.rb +10 -0
  93. data/lib/chef/application/solo.rb +9 -27
  94. data/lib/chef/application/windows_service.rb +24 -10
  95. data/lib/chef/application/windows_service_manager.rb +8 -0
  96. data/lib/chef/checksum/storage.rb +2 -2
  97. data/lib/chef/checksum/storage/filesystem.rb +2 -2
  98. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  99. data/lib/chef/chef_fs/command_line.rb +2 -1
  100. data/lib/chef/chef_fs/config.rb +19 -64
  101. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -2
  102. data/lib/chef/chef_fs/file_system.rb +2 -2
  103. data/lib/chef/chef_fs/file_system/acl_entry.rb +1 -1
  104. data/lib/chef/chef_fs/file_system/chef_repository_file_system_acls_dir.rb +37 -0
  105. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +16 -8
  106. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +19 -4
  107. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +27 -12
  108. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +31 -3
  109. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +12 -5
  110. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +12 -2
  111. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +3 -2
  112. data/lib/chef/chef_fs/file_system/cookbook_file.rb +2 -5
  113. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +21 -6
  114. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +1 -1
  115. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +3 -2
  116. data/lib/chef/chef_fs/file_system/file_system_entry.rb +15 -5
  117. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +2 -1
  118. data/lib/chef/chef_fs/file_system/nodes_dir.rb +1 -1
  119. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +8 -0
  120. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +4 -2
  121. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +4 -6
  122. data/lib/chef/chef_fs/knife.rb +39 -22
  123. data/lib/chef/chef_fs/path_utils.rb +5 -0
  124. data/lib/chef/client.rb +9 -3
  125. data/lib/chef/config.rb +306 -115
  126. data/lib/chef/config_fetcher.rb +79 -0
  127. data/lib/chef/cookbook/file_vendor.rb +5 -5
  128. data/lib/chef/cookbook/metadata.rb +2 -2
  129. data/lib/chef/cookbook/syntax_check.rb +6 -16
  130. data/lib/chef/cookbook_site_streaming_uploader.rb +8 -4
  131. data/lib/chef/cookbook_uploader.rb +10 -8
  132. data/lib/chef/cookbook_version.rb +24 -8
  133. data/lib/chef/daemon.rb +14 -75
  134. data/lib/chef/data_bag.rb +2 -3
  135. data/lib/chef/dsl/include_recipe.rb +2 -2
  136. data/lib/chef/event_dispatch/base.rb +1 -1
  137. data/lib/chef/event_dispatch/dispatcher.rb +1 -1
  138. data/lib/chef/file_access_control/windows.rb +1 -1
  139. data/lib/chef/formatters/doc.rb +5 -5
  140. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +2 -2
  141. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +2 -2
  142. data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +2 -2
  143. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
  144. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
  145. data/lib/chef/handler/json_file.rb +2 -2
  146. data/lib/chef/http.rb +386 -0
  147. data/lib/chef/{rest → http}/auth_credentials.rb +1 -1
  148. data/lib/chef/http/authenticator.rb +89 -0
  149. data/lib/chef/http/basic_client.rb +114 -0
  150. data/lib/chef/{rest → http}/cookie_jar.rb +1 -1
  151. data/lib/chef/http/cookie_manager.rb +56 -0
  152. data/lib/chef/http/decompressor.rb +137 -0
  153. data/lib/chef/{rest/rest_request.rb → http/http_request.rb} +13 -74
  154. data/lib/chef/http/json_input.rb +53 -0
  155. data/lib/chef/http/json_output.rb +69 -0
  156. data/lib/chef/http/json_to_model_output.rb +34 -0
  157. data/lib/chef/http/simple.rb +16 -0
  158. data/lib/chef/http/ssl_policies.rb +129 -0
  159. data/lib/chef/knife.rb +45 -23
  160. data/lib/chef/knife/bootstrap.rb +10 -3
  161. data/lib/chef/knife/bootstrap/chef-full.erb +10 -1
  162. data/lib/chef/knife/client_create.rb +1 -1
  163. data/lib/chef/knife/configure.rb +1 -1
  164. data/lib/chef/knife/cookbook_create.rb +7 -7
  165. data/lib/chef/knife/cookbook_download.rb +2 -2
  166. data/lib/chef/knife/cookbook_metadata_from_file.rb +2 -2
  167. data/lib/chef/knife/cookbook_show.rb +3 -3
  168. data/lib/chef/knife/cookbook_site_install.rb +2 -2
  169. data/lib/chef/knife/cookbook_site_list.rb +2 -2
  170. data/lib/chef/knife/cookbook_site_search.rb +3 -3
  171. data/lib/chef/knife/cookbook_site_show.rb +5 -5
  172. data/lib/chef/knife/core/bootstrap_context.rb +7 -3
  173. data/lib/chef/knife/core/node_editor.rb +16 -36
  174. data/lib/chef/knife/core/node_presenter.rb +1 -1
  175. data/lib/chef/knife/core/subcommand_loader.rb +5 -5
  176. data/lib/chef/knife/core/ui.rb +9 -13
  177. data/lib/chef/knife/data_bag_create.rb +7 -5
  178. data/lib/chef/knife/data_bag_delete.rb +3 -3
  179. data/lib/chef/knife/data_bag_edit.rb +9 -7
  180. data/lib/chef/knife/data_bag_from_file.rb +10 -8
  181. data/lib/chef/knife/data_bag_list.rb +2 -2
  182. data/lib/chef/knife/data_bag_show.rb +9 -7
  183. data/lib/chef/knife/delete.rb +2 -0
  184. data/lib/chef/knife/deps.rb +2 -0
  185. data/lib/chef/knife/diff.rb +6 -0
  186. data/lib/chef/knife/download.rb +6 -0
  187. data/lib/chef/knife/edit.rb +5 -8
  188. data/lib/chef/knife/environment_from_file.rb +2 -2
  189. data/lib/chef/knife/help_topics.rb +1 -1
  190. data/lib/chef/knife/index_rebuild.rb +2 -2
  191. data/lib/chef/knife/list.rb +2 -0
  192. data/lib/chef/knife/raw.rb +31 -5
  193. data/lib/chef/knife/show.rb +2 -0
  194. data/lib/chef/knife/ssh.rb +21 -7
  195. data/lib/chef/knife/status.rb +1 -1
  196. data/lib/chef/knife/upload.rb +2 -0
  197. data/lib/chef/knife/xargs.rb +2 -0
  198. data/lib/chef/mixin/checksum.rb +2 -2
  199. data/lib/chef/mixin/command.rb +46 -17
  200. data/lib/chef/mixin/convert_to_class_name.rb +8 -8
  201. data/lib/chef/mixin/create_path.rb +9 -9
  202. data/lib/chef/mixin/deep_merge.rb +2 -2
  203. data/lib/chef/mixin/from_file.rb +6 -6
  204. data/lib/chef/mixin/language_include_recipe.rb +2 -2
  205. data/lib/chef/mixin/params_validate.rb +21 -21
  206. data/lib/chef/mixin/shell_out.rb +9 -0
  207. data/lib/chef/mixin/template.rb +13 -16
  208. data/lib/chef/mixin/why_run.rb +16 -16
  209. data/lib/chef/mixin/windows_architecture_helper.rb +5 -5
  210. data/lib/chef/mixin/xml_escape.rb +10 -10
  211. data/lib/chef/monkey_patches/numeric.rb +1 -1
  212. data/lib/chef/monkey_patches/regexp.rb +4 -4
  213. data/lib/chef/monkey_patches/string.rb +3 -3
  214. data/lib/chef/monkey_patches/tempfile.rb +2 -2
  215. data/lib/chef/node.rb +8 -0
  216. data/lib/chef/node/attribute.rb +1 -1
  217. data/lib/chef/platform/provider_mapping.rb +26 -1
  218. data/lib/chef/provider/batch.rb +3 -3
  219. data/lib/chef/provider/cron.rb +27 -13
  220. data/lib/chef/provider/cron/aix.rb +48 -0
  221. data/lib/chef/provider/cron/solaris.rb +6 -40
  222. data/lib/chef/provider/cron/unix.rb +76 -0
  223. data/lib/chef/provider/deploy/timestamped.rb +4 -4
  224. data/lib/chef/provider/erl_call.rb +1 -1
  225. data/lib/chef/provider/execute.rb +2 -2
  226. data/lib/chef/provider/git.rb +1 -0
  227. data/lib/chef/provider/group.rb +21 -21
  228. data/lib/chef/provider/group/dscl.rb +9 -9
  229. data/lib/chef/provider/group/gpasswd.rb +5 -5
  230. data/lib/chef/provider/group/groupadd.rb +11 -10
  231. data/lib/chef/provider/group/pw.rb +11 -11
  232. data/lib/chef/provider/group/suse.rb +4 -4
  233. data/lib/chef/provider/group/usermod.rb +8 -8
  234. data/lib/chef/provider/group/windows.rb +9 -9
  235. data/lib/chef/provider/http_request.rb +8 -8
  236. data/lib/chef/provider/ifconfig.rb +57 -37
  237. data/lib/chef/provider/ifconfig/aix.rb +99 -0
  238. data/lib/chef/provider/log.rb +3 -3
  239. data/lib/chef/provider/mdadm.rb +5 -4
  240. data/lib/chef/provider/mount.rb +12 -12
  241. data/lib/chef/provider/mount/aix.rb +179 -0
  242. data/lib/chef/provider/mount/mount.rb +29 -15
  243. data/lib/chef/provider/package.rb +26 -16
  244. data/lib/chef/provider/package/aix.rb +146 -0
  245. data/lib/chef/provider/package/apt.rb +16 -31
  246. data/lib/chef/provider/package/dpkg.rb +9 -9
  247. data/lib/chef/provider/package/freebsd.rb +2 -2
  248. data/lib/chef/provider/package/ips.rb +3 -3
  249. data/lib/chef/provider/package/macports.rb +1 -1
  250. data/lib/chef/provider/package/pacman.rb +8 -8
  251. data/lib/chef/provider/package/rpm.rb +14 -14
  252. data/lib/chef/provider/package/rubygems.rb +1 -1
  253. data/lib/chef/provider/package/smartos.rb +3 -3
  254. data/lib/chef/provider/package/solaris.rb +16 -6
  255. data/lib/chef/provider/package/yum-dump.py +4 -4
  256. data/lib/chef/provider/package/yum.rb +3 -3
  257. data/lib/chef/provider/powershell_script.rb +7 -7
  258. data/lib/chef/provider/remote_file/ftp.rb +1 -0
  259. data/lib/chef/provider/remote_file/http.rb +6 -13
  260. data/lib/chef/provider/remote_file/local_file.rb +1 -0
  261. data/lib/chef/provider/resource_update.rb +9 -9
  262. data/lib/chef/provider/ruby_block.rb +3 -3
  263. data/lib/chef/provider/script.rb +1 -1
  264. data/lib/chef/provider/service.rb +2 -2
  265. data/lib/chef/provider/service/debian.rb +35 -15
  266. data/lib/chef/provider/service/freebsd.rb +9 -9
  267. data/lib/chef/provider/service/gentoo.rb +4 -4
  268. data/lib/chef/provider/service/init.rb +1 -1
  269. data/lib/chef/provider/service/insserv.rb +2 -2
  270. data/lib/chef/provider/service/invokercd.rb +1 -1
  271. data/lib/chef/provider/service/redhat.rb +2 -2
  272. data/lib/chef/provider/service/simple.rb +6 -6
  273. data/lib/chef/provider/service/solaris.rb +1 -1
  274. data/lib/chef/provider/service/systemd.rb +3 -3
  275. data/lib/chef/provider/service/upstart.rb +15 -15
  276. data/lib/chef/provider/subversion.rb +6 -5
  277. data/lib/chef/provider/user.rb +13 -9
  278. data/lib/chef/provider/user/dscl.rb +28 -28
  279. data/lib/chef/provider/user/pw.rb +11 -11
  280. data/lib/chef/provider/user/useradd.rb +1 -1
  281. data/lib/chef/provider/user/windows.rb +7 -7
  282. data/lib/chef/provider/windows_script.rb +7 -7
  283. data/lib/chef/providers.rb +4 -0
  284. data/lib/chef/recipe.rb +2 -19
  285. data/lib/chef/resource/apt_package.rb +3 -3
  286. data/lib/chef/resource/bash.rb +3 -3
  287. data/lib/chef/resource/batch.rb +4 -4
  288. data/lib/chef/resource/bff_package.rb +36 -0
  289. data/lib/chef/resource/breakpoint.rb +3 -3
  290. data/lib/chef/resource/cron.rb +5 -5
  291. data/lib/chef/resource/csh.rb +3 -3
  292. data/lib/chef/resource/deploy.rb +16 -3
  293. data/lib/chef/resource/deploy_revision.rb +6 -6
  294. data/lib/chef/resource/directory.rb +2 -2
  295. data/lib/chef/resource/dpkg_package.rb +4 -4
  296. data/lib/chef/resource/easy_install_package.rb +1 -1
  297. data/lib/chef/resource/erl_call.rb +1 -1
  298. data/lib/chef/resource/freebsd_package.rb +4 -4
  299. data/lib/chef/resource/group.rb +15 -6
  300. data/lib/chef/resource/http_request.rb +6 -6
  301. data/lib/chef/resource/ifconfig.rb +4 -4
  302. data/lib/chef/resource/ips_package.rb +2 -2
  303. data/lib/chef/resource/log.rb +12 -11
  304. data/lib/chef/resource/macports_package.rb +2 -2
  305. data/lib/chef/resource/mount.rb +11 -12
  306. data/lib/chef/resource/ohai.rb +3 -3
  307. data/lib/chef/resource/pacman_package.rb +4 -4
  308. data/lib/chef/resource/perl.rb +3 -3
  309. data/lib/chef/resource/portage_package.rb +4 -4
  310. data/lib/chef/resource/powershell_script.rb +3 -3
  311. data/lib/chef/resource/python.rb +3 -3
  312. data/lib/chef/resource/route.rb +4 -4
  313. data/lib/chef/resource/rpm_package.rb +2 -2
  314. data/lib/chef/resource/ruby.rb +3 -3
  315. data/lib/chef/resource/ruby_block.rb +3 -3
  316. data/lib/chef/resource/scm.rb +10 -2
  317. data/lib/chef/resource/script.rb +5 -5
  318. data/lib/chef/resource/service.rb +5 -5
  319. data/lib/chef/resource/smartos_package.rb +8 -6
  320. data/lib/chef/resource/solaris_package.rb +8 -7
  321. data/lib/chef/resource/subversion.rb +3 -3
  322. data/lib/chef/resource/timestamped_deploy.rb +4 -4
  323. data/lib/chef/resource/user.rb +13 -13
  324. data/lib/chef/resource/windows_script.rb +6 -6
  325. data/lib/chef/resource/yum_package.rb +2 -2
  326. data/lib/chef/resource_collection.rb +1 -1
  327. data/lib/chef/resource_collection/stepable_iterator.rb +22 -22
  328. data/lib/chef/resource_definition.rb +8 -8
  329. data/lib/chef/resource_definition_list.rb +2 -2
  330. data/lib/chef/resource_reporter.rb +8 -2
  331. data/lib/chef/resources.rb +2 -0
  332. data/lib/chef/rest.rb +70 -334
  333. data/lib/chef/role.rb +17 -13
  334. data/lib/chef/run_context.rb +14 -0
  335. data/lib/chef/run_context/cookbook_compiler.rb +3 -3
  336. data/lib/chef/run_lock.rb +73 -20
  337. data/lib/chef/server_api.rb +41 -0
  338. data/lib/chef/shell.rb +3 -19
  339. data/lib/chef/shell/shell_session.rb +1 -1
  340. data/lib/chef/streaming_cookbook_uploader.rb +30 -26
  341. data/lib/chef/tasks/chef_repo.rake +17 -17
  342. data/lib/chef/util/backup.rb +2 -1
  343. data/lib/chef/util/diff.rb +76 -33
  344. data/lib/chef/util/windows.rb +2 -2
  345. data/lib/chef/util/windows/net_group.rb +2 -2
  346. data/lib/chef/util/windows/net_use.rb +2 -2
  347. data/lib/chef/util/windows/net_user.rb +3 -3
  348. data/lib/chef/util/windows/volume.rb +3 -3
  349. data/lib/chef/version.rb +1 -1
  350. data/lib/chef/win32/api/file.rb +1 -1
  351. data/lib/chef/win32/api/synchronization.rb +89 -0
  352. data/lib/chef/win32/handle.rb +1 -1
  353. data/lib/chef/win32/mutex.rb +94 -0
  354. data/lib/chef/win32/security/ace.rb +1 -1
  355. data/lib/chef/win32/security/sid.rb +1 -1
  356. data/lib/chef/win32/version.rb +5 -3
  357. data/spec/data/bootstrap/no_proxy.erb +2 -0
  358. data/spec/data/cookbooks/openldap/metadata.rb +8 -0
  359. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -0
  360. data/spec/data/trusted_certs/example.crt +22 -0
  361. data/spec/data/trusted_certs/intermediate.pem +27 -0
  362. data/spec/data/trusted_certs/opscode.pem +38 -0
  363. data/spec/data/trusted_certs/root.pem +22 -0
  364. data/spec/functional/assets/PkgA.1.0.0.0.bff +0 -0
  365. data/spec/functional/assets/PkgA.2.0.0.0.bff +0 -0
  366. data/spec/functional/assets/dummy-1-0.aix6.1.noarch.rpm +0 -0
  367. data/spec/functional/assets/dummy-2-0.aix6.1.noarch.rpm +0 -0
  368. data/spec/functional/assets/mytest-1.0-1.noarch.rpm +0 -0
  369. data/spec/functional/assets/mytest-2.0-1.noarch.rpm +0 -0
  370. data/spec/functional/knife/cookbook_delete_spec.rb +4 -7
  371. data/spec/functional/knife/exec_spec.rb +0 -3
  372. data/spec/functional/knife/ssh_spec.rb +2 -6
  373. data/spec/functional/resource/base.rb +41 -0
  374. data/spec/functional/resource/batch_spec.rb +6 -33
  375. data/spec/functional/resource/bff_spec.rb +122 -0
  376. data/spec/functional/resource/cron_spec.rb +147 -0
  377. data/spec/functional/resource/group_spec.rb +204 -0
  378. data/spec/functional/resource/ifconfig_spec.rb +163 -0
  379. data/spec/functional/resource/link_spec.rb +4 -4
  380. data/spec/functional/resource/mount_spec.rb +207 -0
  381. data/spec/functional/resource/package_spec.rb +95 -17
  382. data/spec/functional/resource/powershell_spec.rb +21 -22
  383. data/spec/functional/resource/registry_spec.rb +5 -19
  384. data/spec/functional/resource/remote_file_spec.rb +14 -0
  385. data/spec/functional/resource/rpm_spec.rb +122 -0
  386. data/spec/functional/resource/template_spec.rb +11 -44
  387. data/spec/functional/resource/user_spec.rb +2 -1
  388. data/spec/functional/run_lock_spec.rb +48 -5
  389. data/spec/functional/shell_spec.rb +46 -26
  390. data/spec/functional/tiny_server_spec.rb +2 -2
  391. data/spec/functional/version_spec.rb +35 -0
  392. data/spec/functional/win32/versions_spec.rb +3 -3
  393. data/spec/integration/client/client_spec.rb +146 -0
  394. data/spec/integration/knife/chef_fs_data_store_spec.rb +353 -0
  395. data/spec/integration/knife/chef_repo_path_spec.rb +72 -19
  396. data/spec/integration/knife/common_options_spec.rb +103 -0
  397. data/spec/integration/knife/download_spec.rb +38 -2
  398. data/spec/integration/knife/raw_spec.rb +63 -0
  399. data/spec/integration/knife/upload_spec.rb +20 -4
  400. data/spec/integration/solo/solo_spec.rb +78 -25
  401. data/spec/spec_helper.rb +35 -1
  402. data/spec/support/lib/chef/provider/easy.rb +4 -4
  403. data/spec/support/lib/chef/provider/snakeoil.rb +4 -4
  404. data/spec/support/lib/chef/resource/cat.rb +5 -5
  405. data/spec/support/lib/chef/resource/with_state.rb +37 -0
  406. data/spec/support/lib/library_load_order.rb +22 -0
  407. data/spec/support/platform_helpers.rb +8 -0
  408. data/spec/support/shared/functional/file_resource.rb +4 -22
  409. data/spec/support/shared/functional/windows_script.rb +48 -0
  410. data/spec/support/shared/integration/integration_helper.rb +5 -22
  411. data/spec/support/shared/integration/knife_support.rb +3 -3
  412. data/spec/support/shared/unit/script_resource.rb +7 -7
  413. data/spec/support/shared/unit/windows_script_resource.rb +7 -7
  414. data/spec/tiny_server.rb +2 -2
  415. data/spec/unit/api_client/registration_spec.rb +1 -1
  416. data/spec/unit/api_client_spec.rb +25 -2
  417. data/spec/unit/application/apply.rb +1 -9
  418. data/spec/unit/application/client_spec.rb +19 -44
  419. data/spec/unit/application/solo_spec.rb +10 -50
  420. data/spec/unit/application_spec.rb +51 -80
  421. data/spec/unit/checksum/storage/filesystem_spec.rb +3 -2
  422. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +47 -0
  423. data/spec/unit/chef_spec.rb +2 -2
  424. data/spec/unit/client_spec.rb +2 -18
  425. data/spec/unit/config_fetcher_spec.rb +98 -0
  426. data/spec/unit/config_spec.rb +107 -29
  427. data/spec/unit/cookbook/metadata_spec.rb +50 -50
  428. data/spec/unit/cookbook/synchronizer_spec.rb +3 -3
  429. data/spec/unit/cookbook/syntax_check_spec.rb +1 -2
  430. data/spec/unit/cookbook_loader_spec.rb +28 -12
  431. data/spec/unit/cookbook_manifest_spec.rb +11 -11
  432. data/spec/unit/cookbook_site_streaming_uploader.rb +200 -0
  433. data/spec/unit/cookbook_version_spec.rb +16 -0
  434. data/spec/unit/daemon_spec.rb +0 -132
  435. data/spec/unit/data_bag_item_spec.rb +6 -6
  436. data/spec/unit/data_bag_spec.rb +6 -8
  437. data/spec/unit/digester_spec.rb +2 -2
  438. data/spec/unit/encrypted_data_bag_item_spec.rb +0 -15
  439. data/spec/unit/file_cache_spec.rb +1 -1
  440. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +4 -4
  441. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +2 -2
  442. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +2 -2
  443. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +2 -2
  444. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +2 -2
  445. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +4 -4
  446. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +2 -2
  447. data/spec/unit/handler_spec.rb +5 -5
  448. data/spec/unit/http/ssl_policies_spec.rb +170 -0
  449. data/spec/unit/knife/bootstrap_spec.rb +31 -14
  450. data/spec/unit/knife/client_bulk_delete_spec.rb +8 -8
  451. data/spec/unit/knife/client_create_spec.rb +2 -2
  452. data/spec/unit/knife/client_delete_spec.rb +2 -2
  453. data/spec/unit/knife/client_edit_spec.rb +2 -2
  454. data/spec/unit/knife/client_list_spec.rb +2 -2
  455. data/spec/unit/knife/client_reregister_spec.rb +2 -2
  456. data/spec/unit/knife/client_show_spec.rb +2 -2
  457. data/spec/unit/knife/config_file_selection_spec.rb +53 -36
  458. data/spec/unit/knife/configure_spec.rb +0 -6
  459. data/spec/unit/knife/cookbook_create_spec.rb +1 -12
  460. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +2 -2
  461. data/spec/unit/knife/cookbook_show_spec.rb +3 -3
  462. data/spec/unit/knife/cookbook_site_install_spec.rb +1 -1
  463. data/spec/unit/knife/core/bootstrap_context_spec.rb +10 -2
  464. data/spec/unit/knife/core/ui_spec.rb +118 -0
  465. data/spec/unit/knife/data_bag_show_spec.rb +2 -2
  466. data/spec/unit/knife/environment_from_file_spec.rb +2 -2
  467. data/spec/unit/knife/index_rebuild_spec.rb +1 -1
  468. data/spec/unit/knife/node_delete_spec.rb +3 -3
  469. data/spec/unit/knife/node_edit_spec.rb +35 -8
  470. data/spec/unit/knife/node_list_spec.rb +3 -3
  471. data/spec/unit/knife/node_run_list_add_spec.rb +3 -3
  472. data/spec/unit/knife/node_show_spec.rb +3 -3
  473. data/spec/unit/knife/role_create_spec.rb +3 -3
  474. data/spec/unit/knife/role_delete_spec.rb +3 -3
  475. data/spec/unit/knife/role_list_spec.rb +2 -2
  476. data/spec/unit/knife/ssh_spec.rb +1 -8
  477. data/spec/unit/knife_spec.rb +0 -2
  478. data/spec/unit/log_spec.rb +2 -2
  479. data/spec/unit/mash_spec.rb +2 -2
  480. data/spec/unit/mixin/checksum_spec.rb +3 -3
  481. data/spec/unit/mixin/command_spec.rb +1 -1
  482. data/spec/unit/mixin/convert_to_class_name_spec.rb +7 -7
  483. data/spec/unit/mixin/deprecation_spec.rb +2 -2
  484. data/spec/unit/mixin/params_validate_spec.rb +72 -72
  485. data/spec/unit/mixin/securable_spec.rb +0 -14
  486. data/spec/unit/mixin/shell_out_spec.rb +1 -1
  487. data/spec/unit/mixin/template_spec.rb +34 -0
  488. data/spec/unit/mixin/windows_architecture_helper_spec.rb +5 -5
  489. data/spec/unit/mixin/xml_escape_spec.rb +2 -2
  490. data/spec/unit/node/attribute_spec.rb +11 -11
  491. data/spec/unit/node/immutable_collections_spec.rb +2 -2
  492. data/spec/unit/node_spec.rb +5 -0
  493. data/spec/unit/platform_spec.rb +36 -35
  494. data/spec/unit/provider/cron/{solaris_spec.rb → unix_spec.rb} +6 -6
  495. data/spec/unit/provider/cron_spec.rb +21 -3
  496. data/spec/unit/provider/deploy/timestamped_spec.rb +5 -5
  497. data/spec/unit/provider/deploy_spec.rb +21 -7
  498. data/spec/unit/provider/env_spec.rb +2 -2
  499. data/spec/unit/provider/execute_spec.rb +2 -2
  500. data/spec/unit/provider/file/content_spec.rb +0 -8
  501. data/spec/unit/provider/git_spec.rb +29 -9
  502. data/spec/unit/provider/group/dscl_spec.rb +12 -12
  503. data/spec/unit/provider/group/gpasswd_spec.rb +2 -2
  504. data/spec/unit/provider/group/groupadd_spec.rb +14 -0
  505. data/spec/unit/provider/group/groupmod_spec.rb +13 -13
  506. data/spec/unit/provider/group/pw_spec.rb +16 -16
  507. data/spec/unit/provider/group/usermod_spec.rb +10 -9
  508. data/spec/unit/provider/group/windows_spec.rb +14 -0
  509. data/spec/unit/provider/group_spec.rb +29 -29
  510. data/spec/unit/provider/http_request_spec.rb +15 -15
  511. data/spec/unit/provider/ifconfig/aix_spec.rb +180 -0
  512. data/spec/unit/provider/ifconfig_spec.rb +9 -9
  513. data/spec/unit/provider/link_spec.rb +2 -2
  514. data/spec/unit/provider/log_spec.rb +8 -8
  515. data/spec/unit/provider/mdadm_spec.rb +14 -11
  516. data/spec/unit/provider/mount/aix_spec.rb +237 -0
  517. data/spec/unit/provider/mount/mount_spec.rb +2 -0
  518. data/spec/unit/provider/mount/windows_spec.rb +2 -2
  519. data/spec/unit/provider/mount_spec.rb +6 -6
  520. data/spec/unit/provider/package/aix_spec.rb +171 -0
  521. data/spec/unit/provider/package/apt_spec.rb +130 -171
  522. data/spec/unit/provider/package/dpkg_spec.rb +3 -3
  523. data/spec/unit/provider/package/freebsd_spec.rb +28 -0
  524. data/spec/unit/provider/package/ips_spec.rb +1 -1
  525. data/spec/unit/provider/package/rpm_spec.rb +15 -15
  526. data/spec/unit/provider/package/smartos_spec.rb +21 -3
  527. data/spec/unit/provider/package_spec.rb +4 -2
  528. data/spec/unit/provider/powershell_spec.rb +3 -3
  529. data/spec/unit/provider/remote_directory_spec.rb +2 -2
  530. data/spec/unit/provider/remote_file/ftp_spec.rb +0 -5
  531. data/spec/unit/provider/remote_file/http_spec.rb +12 -28
  532. data/spec/unit/provider/remote_file/local_file_spec.rb +2 -1
  533. data/spec/unit/provider/route_spec.rb +2 -2
  534. data/spec/unit/provider/ruby_block_spec.rb +2 -2
  535. data/spec/unit/provider/service/arch_service_spec.rb +17 -17
  536. data/spec/unit/provider/service/debian_service_spec.rb +242 -152
  537. data/spec/unit/provider/service/freebsd_service_spec.rb +9 -9
  538. data/spec/unit/provider/service/gentoo_service_spec.rb +9 -9
  539. data/spec/unit/provider/service/init_service_spec.rb +11 -11
  540. data/spec/unit/provider/service/insserv_service_spec.rb +5 -5
  541. data/spec/unit/provider/service/invokercd_service_spec.rb +10 -10
  542. data/spec/unit/provider/service/redhat_spec.rb +6 -6
  543. data/spec/unit/provider/service/simple_service_spec.rb +6 -6
  544. data/spec/unit/provider/service/solaris_smf_service_spec.rb +4 -4
  545. data/spec/unit/provider/service/systemd_service_spec.rb +3 -3
  546. data/spec/unit/provider/service/upstart_service_spec.rb +5 -5
  547. data/spec/unit/provider/service/windows_spec.rb +7 -7
  548. data/spec/unit/provider/subversion_spec.rb +1 -1
  549. data/spec/unit/provider/user/dscl_spec.rb +21 -21
  550. data/spec/unit/provider/user/pw_spec.rb +2 -2
  551. data/spec/unit/provider/user/windows_spec.rb +5 -5
  552. data/spec/unit/provider/user_spec.rb +39 -47
  553. data/spec/unit/resource/apt_package_spec.rb +6 -6
  554. data/spec/unit/resource/bash_spec.rb +5 -5
  555. data/spec/unit/resource/batch_spec.rb +7 -7
  556. data/spec/unit/resource/breakpoint_spec.rb +8 -8
  557. data/spec/unit/resource/chef_gem_spec.rb +6 -6
  558. data/spec/unit/resource/cookbook_file_spec.rb +11 -11
  559. data/spec/unit/resource/cron_spec.rb +15 -15
  560. data/spec/unit/resource/csh_spec.rb +5 -5
  561. data/spec/unit/resource/deploy_revision_spec.rb +6 -6
  562. data/spec/unit/resource/deploy_spec.rb +50 -36
  563. data/spec/unit/resource/directory_spec.rb +1 -1
  564. data/spec/unit/resource/dpkg_package_spec.rb +6 -6
  565. data/spec/unit/resource/env_spec.rb +1 -1
  566. data/spec/unit/resource/erl_call_spec.rb +1 -1
  567. data/spec/unit/resource/freebsd_package_spec.rb +6 -6
  568. data/spec/unit/resource/gem_package_spec.rb +6 -6
  569. data/spec/unit/resource/git_spec.rb +8 -8
  570. data/spec/unit/resource/group_spec.rb +11 -11
  571. data/spec/unit/resource/http_request_spec.rb +7 -7
  572. data/spec/unit/resource/ifconfig_spec.rb +1 -1
  573. data/spec/unit/resource/ips_package_spec.rb +6 -6
  574. data/spec/unit/resource/link_spec.rb +1 -1
  575. data/spec/unit/resource/log_spec.rb +13 -10
  576. data/spec/unit/resource/macports_package_spec.rb +2 -2
  577. data/spec/unit/resource/mdadm_spec.rb +3 -3
  578. data/spec/unit/resource/mount_spec.rb +13 -13
  579. data/spec/unit/resource/ohai_spec.rb +1 -1
  580. data/spec/unit/resource/package_spec.rb +6 -6
  581. data/spec/unit/resource/pacman_package_spec.rb +6 -6
  582. data/spec/unit/resource/perl_spec.rb +5 -5
  583. data/spec/unit/resource/portage_package_spec.rb +6 -6
  584. data/spec/unit/resource/powershell_spec.rb +5 -5
  585. data/spec/unit/resource/python_spec.rb +5 -5
  586. data/spec/unit/resource/registry_key_spec.rb +2 -2
  587. data/spec/unit/resource/remote_directory_spec.rb +9 -9
  588. data/spec/unit/resource/remote_file_spec.rb +4 -4
  589. data/spec/unit/resource/route_spec.rb +13 -13
  590. data/spec/unit/resource/rpm_package_spec.rb +2 -2
  591. data/spec/unit/resource/ruby_block_spec.rb +4 -4
  592. data/spec/unit/resource/ruby_spec.rb +5 -5
  593. data/spec/unit/resource/scm_spec.rb +14 -1
  594. data/spec/unit/resource/script_spec.rb +5 -5
  595. data/spec/unit/resource/service_spec.rb +18 -18
  596. data/spec/unit/resource/smartos_package_spec.rb +6 -6
  597. data/spec/unit/resource/solaris_package_spec.rb +57 -0
  598. data/spec/unit/resource/subversion_spec.rb +6 -6
  599. data/spec/unit/resource/timestamped_deploy_spec.rb +4 -4
  600. data/spec/unit/resource/user_spec.rb +13 -13
  601. data/spec/unit/resource/yum_package_spec.rb +7 -7
  602. data/spec/unit/resource_collection/stepable_iterator_spec.rb +21 -21
  603. data/spec/unit/resource_definition_spec.rb +23 -23
  604. data/spec/unit/resource_reporter_spec.rb +27 -0
  605. data/spec/unit/rest/auth_credentials_spec.rb +0 -94
  606. data/spec/unit/rest_spec.rb +117 -99
  607. data/spec/unit/role_spec.rb +57 -4
  608. data/spec/unit/run_context/cookbook_compiler_spec.rb +4 -20
  609. data/spec/unit/run_context_spec.rb +44 -3
  610. data/spec/unit/run_list/run_list_item_spec.rb +1 -1
  611. data/spec/unit/run_lock_spec.rb +6 -3
  612. data/spec/unit/scan_access_control_spec.rb +2 -2
  613. data/spec/unit/search/query_spec.rb +3 -3
  614. data/spec/unit/util/backup_spec.rb +6 -13
  615. data/spec/unit/util/diff_spec.rb +36 -53
  616. data/spec/unit/version/platform_spec.rb +3 -3
  617. data/spec/unit/version_class_spec.rb +5 -5
  618. data/spec/unit/version_constraint/platform_spec.rb +2 -2
  619. data/spec/unit/windows_service_spec.rb +54 -0
  620. metadata +290 -108
  621. checksums.yaml +0 -7
  622. data/distro/common/man/man1/knife-index.1 +0 -29
  623. data/distro/common/man/man8/chef-expander.8 +0 -97
  624. data/distro/common/man/man8/chef-expanderctl.8 +0 -62
  625. data/distro/common/man/man8/chef-server-webui.8 +0 -155
  626. data/distro/common/man/man8/chef-server.8 +0 -147
  627. data/distro/common/man/man8/chef-solr.8 +0 -122
  628. data/lib/chef/chef_fs/raw_request.rb +0 -79
@@ -24,7 +24,7 @@ require 'chef/log'
24
24
  require 'mixlib/authentication/signedheaderauth'
25
25
 
26
26
  class Chef
27
- class REST
27
+ class HTTP
28
28
  class AuthCredentials
29
29
  attr_reader :client_name, :key
30
30
 
@@ -0,0 +1,89 @@
1
+ #--
2
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
3
+ # Copyright:: Copyright (c) 2013 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/http/auth_credentials'
20
+ require 'chef/exceptions'
21
+ require 'openssl'
22
+
23
+ class Chef
24
+ class HTTP
25
+ class Authenticator
26
+
27
+ attr_reader :signing_key_filename
28
+ attr_reader :raw_key
29
+ attr_reader :attr_names
30
+ attr_reader :auth_credentials
31
+
32
+ attr_accessor :sign_request
33
+
34
+ def initialize(opts={})
35
+ @raw_key = nil
36
+ @sign_request = true
37
+ @signing_key_filename = opts[:signing_key_filename]
38
+ @key = load_signing_key(opts[:signing_key_filename], opts[:raw_key])
39
+ @auth_credentials = AuthCredentials.new(opts[:client_name], @key)
40
+ end
41
+
42
+ def handle_request(method, url, headers={}, data=false)
43
+ headers.merge!(authentication_headers(method, url, data)) if sign_requests?
44
+ [method, url, headers, data]
45
+ end
46
+
47
+ def handle_response(http_response, rest_request, return_value)
48
+ [http_response, rest_request, return_value]
49
+ end
50
+
51
+ def stream_response_handler(response)
52
+ nil
53
+ end
54
+
55
+ def sign_requests?
56
+ auth_credentials.sign_requests? && @sign_request
57
+ end
58
+
59
+ def client_name
60
+ @auth_credentials.client_name
61
+ end
62
+
63
+ def load_signing_key(key_file, raw_key = nil)
64
+ if (!!key_file)
65
+ @raw_key = IO.read(key_file).strip
66
+ elsif (!!raw_key)
67
+ @raw_key = raw_key.strip
68
+ else
69
+ return nil
70
+ end
71
+ @key = OpenSSL::PKey::RSA.new(@raw_key)
72
+ rescue SystemCallError, IOError => e
73
+ Chef::Log.warn "Failed to read the private key #{key_file}: #{e.inspect}"
74
+ raise Chef::Exceptions::PrivateKeyMissing, "I cannot read #{key_file}, which you told me to use to sign requests!"
75
+ rescue OpenSSL::PKey::RSAError
76
+ msg = "The file #{key_file} or :raw_key option does not contain a correctly formatted private key.\n"
77
+ msg << "The key file should begin with '-----BEGIN RSA PRIVATE KEY-----' and end with '-----END RSA PRIVATE KEY-----'"
78
+ raise Chef::Exceptions::InvalidPrivateKey, msg
79
+ end
80
+
81
+ def authentication_headers(method, url, json_body=nil)
82
+ request_params = {:http_method => method, :path => url.path, :body => json_body, :host => "#{url.host}:#{url.port}"}
83
+ request_params[:body] ||= ""
84
+ auth_credentials.signature_headers(request_params)
85
+ end
86
+
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,114 @@
1
+ #--
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Thom May (<thom@clearairturbulence.org>)
4
+ # Author:: Nuo Yan (<nuo@opscode.com>)
5
+ # Author:: Christopher Brown (<cb@opscode.com>)
6
+ # Author:: Christopher Walters (<cw@opscode.com>)
7
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
8
+ # Copyright:: Copyright (c) 2009, 2010 Opscode, Inc.
9
+ # License:: Apache License, Version 2.0
10
+ #
11
+ # Licensed under the Apache License, Version 2.0 (the "License");
12
+ # you may not use this file except in compliance with the License.
13
+ # You may obtain a copy of the License at
14
+ #
15
+ # http://www.apache.org/licenses/LICENSE-2.0
16
+ #
17
+ # Unless required by applicable law or agreed to in writing, software
18
+ # distributed under the License is distributed on an "AS IS" BASIS,
19
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
+ # See the License for the specific language governing permissions and
21
+ # limitations under the License.
22
+ #
23
+ require 'uri'
24
+ require 'net/http'
25
+ require 'chef/http/ssl_policies'
26
+ require 'chef/http/http_request'
27
+
28
+ class Chef
29
+ class HTTP
30
+ class BasicClient
31
+
32
+ HTTPS = "https".freeze
33
+
34
+ attr_reader :url
35
+ attr_reader :http_client
36
+ attr_reader :ssl_policy
37
+
38
+ # Instantiate a BasicClient.
39
+ # === Arguments:
40
+ # url:: An URI for the remote server.
41
+ # === Options:
42
+ # ssl_policy:: The SSL Policy to use, defaults to DefaultSSLPolicy
43
+ def initialize(url, opts={})
44
+ @url = url
45
+ @ssl_policy = opts[:ssl_policy] || DefaultSSLPolicy
46
+ @http_client = build_http_client
47
+ end
48
+
49
+ def host
50
+ @url.host
51
+ end
52
+
53
+ def port
54
+ @url.port
55
+ end
56
+
57
+ def request(method, url, req_body, base_headers={})
58
+ http_request = HTTPRequest.new(method, url, req_body, base_headers).http_request
59
+ Chef::Log.debug("Initiating #{method} to #{url}")
60
+ http_client.request(http_request) do |response|
61
+ yield response if block_given?
62
+ # http_client.request may not have the return signature we want, so
63
+ # force the issue:
64
+ return [http_request, response]
65
+ end
66
+ rescue OpenSSL::SSL::SSLError => e
67
+ Chef::Log.error("SSL Validation failure connecting to host: #{host} - #{e.message}")
68
+ raise
69
+ end
70
+
71
+ #adapted from buildr/lib/buildr/core/transports.rb
72
+ def proxy_uri
73
+ proxy = Chef::Config["#{url.scheme}_proxy"]
74
+ proxy = URI.parse(proxy) if String === proxy
75
+ excludes = Chef::Config[:no_proxy].to_s.split(/\s*,\s*/).compact
76
+ excludes = excludes.map { |exclude| exclude =~ /:\d+$/ ? exclude : "#{exclude}:*" }
77
+ return proxy unless excludes.any? { |exclude| File.fnmatch(exclude, "#{host}:#{port}") }
78
+ end
79
+
80
+ def build_http_client
81
+ http_client = http_client_builder.new(host, port)
82
+
83
+ if url.scheme == HTTPS
84
+ configure_ssl(http_client)
85
+ end
86
+
87
+ http_client.read_timeout = config[:rest_timeout]
88
+ http_client
89
+ end
90
+
91
+ def config
92
+ Chef::Config
93
+ end
94
+
95
+ def http_client_builder
96
+ http_proxy = proxy_uri
97
+ if http_proxy.nil?
98
+ Net::HTTP
99
+ else
100
+ Chef::Log.debug("Using #{http_proxy.host}:#{http_proxy.port} for proxy")
101
+ user = Chef::Config["#{url.scheme}_proxy_user"]
102
+ pass = Chef::Config["#{url.scheme}_proxy_pass"]
103
+ Net::HTTP.Proxy(http_proxy.host, http_proxy.port, user, pass)
104
+ end
105
+ end
106
+
107
+ def configure_ssl(http_client)
108
+ http_client.use_ssl = true
109
+ ssl_policy.apply_to(http_client)
110
+ end
111
+
112
+ end
113
+ end
114
+ end
@@ -23,7 +23,7 @@
23
23
  require 'singleton'
24
24
 
25
25
  class Chef
26
- class REST
26
+ class HTTP
27
27
  class CookieJar < Hash
28
28
  include Singleton
29
29
  end
@@ -0,0 +1,56 @@
1
+ #--
2
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
3
+ # Copyright:: Copyright (c) 2013 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/http/cookie_jar'
20
+
21
+ class Chef
22
+ class HTTP
23
+
24
+ # An HTTP middleware to manage storing/sending cookies in HTTP requests.
25
+ # Most HTTP communication in Chef does not need cookies, it was originally
26
+ # implemented to support OpenID, but it's not known who might be relying on
27
+ # it, so it's included with Chef::REST
28
+ class CookieManager
29
+
30
+ def initialize(options={})
31
+ @cookies = CookieJar.instance
32
+ end
33
+
34
+ def handle_request(method, url, headers={}, data=false)
35
+ @host, @port = url.host, url.port
36
+ if @cookies.has_key?("#{@host}:#{@port}")
37
+ headers['Cookie'] = @cookies["#{@host}:#{@port}"]
38
+ end
39
+ [method, url, headers, data]
40
+ end
41
+
42
+ def handle_response(http_response, rest_request, return_value)
43
+ if http_response['set-cookie']
44
+ @cookies["#{@host}:#{@port}"] = http_response['set-cookie']
45
+ end
46
+ [http_response, rest_request, return_value]
47
+ end
48
+
49
+ def stream_response_handler(response)
50
+ nil
51
+ end
52
+
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,137 @@
1
+ #--
2
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
3
+ # Copyright:: Copyright (c) 2013 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'zlib'
20
+ require 'chef/http/http_request'
21
+
22
+ class Chef
23
+ class HTTP
24
+
25
+ # Middleware-esque class for handling compression in HTTP responses.
26
+ class Decompressor
27
+ class NoopInflater
28
+ def inflate(chunk)
29
+ chunk
30
+ end
31
+ alias :handle_chunk :inflate
32
+ end
33
+
34
+ class GzipInflater < Zlib::Inflate
35
+ def initialize
36
+ super(Zlib::MAX_WBITS + 16)
37
+ end
38
+ alias :handle_chunk :inflate
39
+ end
40
+
41
+ class DeflateInflater < Zlib::Inflate
42
+ def initialize
43
+ super
44
+ end
45
+ alias :handle_chunk :inflate
46
+ end
47
+
48
+ CONTENT_ENCODING = "content-encoding".freeze
49
+ GZIP = "gzip".freeze
50
+ DEFLATE = "deflate".freeze
51
+ IDENTITY = "identity".freeze
52
+
53
+ def initialize(opts={})
54
+ @disable_gzip = false
55
+ handle_options(opts)
56
+ end
57
+
58
+ def handle_request(method, url, headers={}, data=false)
59
+ headers[HTTPRequest::ACCEPT_ENCODING] = HTTPRequest::ENCODING_GZIP_DEFLATE unless gzip_disabled?
60
+ [method, url, headers, data]
61
+ end
62
+
63
+ def handle_response(http_response, rest_request, return_value)
64
+ # temporary hack, skip processing if return_value is false
65
+ # needed to keep conditional get stuff working correctly.
66
+ return [http_response, rest_request, return_value] if return_value == false
67
+ response_body = decompress_body(http_response)
68
+ http_response.body.replace(response_body) if http_response.body.respond_to?(:replace)
69
+ [http_response, rest_request, return_value]
70
+ end
71
+
72
+ def decompress_body(response)
73
+ if gzip_disabled? || response.body.nil?
74
+ response.body
75
+ else
76
+ case response[CONTENT_ENCODING]
77
+ when GZIP
78
+ Chef::Log.debug "decompressing gzip response"
79
+ Zlib::Inflate.new(Zlib::MAX_WBITS + 16).inflate(response.body)
80
+ when DEFLATE
81
+ Chef::Log.debug "decompressing deflate response"
82
+ Zlib::Inflate.inflate(response.body)
83
+ else
84
+ response.body
85
+ end
86
+ end
87
+ end
88
+
89
+ # This isn't used when this class is used as middleware; it returns an
90
+ # object you can use to unzip/inflate a streaming response.
91
+ def stream_response_handler(response)
92
+ if gzip_disabled?
93
+ NoopInflater.new
94
+ else
95
+ case response[CONTENT_ENCODING]
96
+ when GZIP
97
+ Chef::Log.debug "decompressing gzip stream"
98
+ GzipInflater.new
99
+ when DEFLATE
100
+ Chef::Log.debug "decompressing inflate stream"
101
+ DeflateInflater.new
102
+ else
103
+ NoopInflater.new
104
+ end
105
+ end
106
+ end
107
+
108
+
109
+ # gzip is disabled using the disable_gzip => true option in the
110
+ # constructor. When gzip is disabled, no 'Accept-Encoding' header will be
111
+ # set, and the response will not be decompressed, no matter what the
112
+ # Content-Encoding header of the response is. The intended use case for
113
+ # this is to work around situations where you request +file.tar.gz+, but
114
+ # the server responds with a content type of tar and a content encoding of
115
+ # gzip, tricking the client into decompressing the response so you end up
116
+ # with a tar archive (no gzip) named file.tar.gz
117
+ def gzip_disabled?
118
+ @disable_gzip
119
+ end
120
+
121
+ private
122
+
123
+ def handle_options(opts)
124
+ opts.each do |name, value|
125
+ case name.to_s
126
+ when 'disable_gzip'
127
+ @disable_gzip = value
128
+ end
129
+ end
130
+ end
131
+
132
+
133
+ end
134
+ end
135
+ end
136
+
137
+
@@ -22,7 +22,6 @@
22
22
  #
23
23
  require 'uri'
24
24
  require 'net/http'
25
- require 'chef/rest/cookie_jar'
26
25
 
27
26
  # To load faster, we only want ohai's version string.
28
27
  # However, in ohai before 0.6.0, the version is defined
@@ -36,8 +35,8 @@ end
36
35
  require 'chef/version'
37
36
 
38
37
  class Chef
39
- class REST
40
- class RESTRequest
38
+ class HTTP
39
+ class HTTPRequest
41
40
 
42
41
  engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
43
42
 
@@ -72,8 +71,6 @@ class Chef
72
71
  def initialize(method, url, req_body, base_headers={})
73
72
  @method, @url = method, url
74
73
  @request_body = nil
75
- @cookies = CookieJar.instance
76
- configure_http_client
77
74
  build_headers(base_headers)
78
75
  configure_http_request(req_body)
79
76
  end
@@ -94,10 +91,10 @@ class Chef
94
91
  @url.path.empty? ? SLASH : @url.path
95
92
  end
96
93
 
94
+ # DEPRECATED. Call request on an HTTP client object instead.
97
95
  def call
98
96
  hide_net_http_bug do
99
97
  http_client.request(http_request) do |response|
100
- store_cookie(response)
101
98
  yield response if block_given?
102
99
  response
103
100
  end
@@ -108,6 +105,11 @@ class Chef
108
105
  Chef::Config
109
106
  end
110
107
 
108
+ # DEPRECATED. Call request on an HTTP client object instead.
109
+ def http_client
110
+ @http_client ||= BasicClient.new(url).http_client
111
+ end
112
+
111
113
  private
112
114
 
113
115
  def hide_net_http_bug
@@ -125,77 +127,12 @@ class Chef
125
127
  end
126
128
  end
127
129
 
128
- def store_cookie(response)
129
- if response['set-cookie']
130
- @cookies["#{host}:#{port}"] = response['set-cookie']
131
- end
132
- end
133
-
134
130
  def build_headers(headers)
135
131
  @headers = headers.dup
136
- # TODO: need to set accept somewhere else
137
- # headers.merge!('Accept' => "application/json") unless raw
132
+ # No response compression unless we asked for it explicitly:
133
+ @headers[HTTPRequest::ACCEPT_ENCODING] ||= "identity"
138
134
  @headers['X-Chef-Version'] = ::Chef::VERSION
139
- @headers[ACCEPT_ENCODING] = ENCODING_GZIP_DEFLATE
140
-
141
- if @cookies.has_key?("#{host}:#{port}")
142
- @headers['Cookie'] = @cookies["#{host}:#{port}"]
143
- end
144
- end
145
-
146
- #adapted from buildr/lib/buildr/core/transports.rb
147
- def proxy_uri
148
- proxy = Chef::Config["#{url.scheme}_proxy"]
149
- proxy = URI.parse(proxy) if String === proxy
150
- excludes = Chef::Config[:no_proxy].to_s.split(/\s*,\s*/).compact
151
- excludes = excludes.map { |exclude| exclude =~ /:\d+$/ ? exclude : "#{exclude}:*" }
152
- return proxy unless excludes.any? { |exclude| File.fnmatch(exclude, "#{host}:#{port}") }
153
- end
154
-
155
- def configure_http_client
156
- http_proxy = proxy_uri
157
- if http_proxy.nil?
158
- @http_client = Net::HTTP.new(host, port)
159
- else
160
- Chef::Log.debug("Using #{http_proxy.host}:#{http_proxy.port} for proxy")
161
- user = Chef::Config["#{url.scheme}_proxy_user"]
162
- pass = Chef::Config["#{url.scheme}_proxy_pass"]
163
- @http_client = Net::HTTP.Proxy(http_proxy.host, http_proxy.port, user, pass).new(host, port)
164
- end
165
- if url.scheme == HTTPS
166
- @http_client.use_ssl = true
167
- if config[:ssl_verify_mode] == :verify_none
168
- @http_client.verify_mode = OpenSSL::SSL::VERIFY_NONE
169
- elsif config[:ssl_verify_mode] == :verify_peer
170
- @http_client.verify_mode = OpenSSL::SSL::VERIFY_PEER
171
- end
172
- if config[:ssl_ca_path]
173
- unless ::File.exist?(config[:ssl_ca_path])
174
- raise Chef::Exceptions::ConfigurationError, "The configured ssl_ca_path #{config[:ssl_ca_path]} does not exist"
175
- end
176
- @http_client.ca_path = config[:ssl_ca_path]
177
- elsif config[:ssl_ca_file]
178
- unless ::File.exist?(config[:ssl_ca_file])
179
- raise Chef::Exceptions::ConfigurationError, "The configured ssl_ca_file #{config[:ssl_ca_file]} does not exist"
180
- end
181
- @http_client.ca_file = config[:ssl_ca_file]
182
- end
183
- if (config[:ssl_client_cert] || config[:ssl_client_key])
184
- unless (config[:ssl_client_cert] && config[:ssl_client_key])
185
- raise Chef::Exceptions::ConfigurationError, "You must configure ssl_client_cert and ssl_client_key together"
186
- end
187
- unless ::File.exists?(config[:ssl_client_cert])
188
- raise Chef::Exceptions::ConfigurationError, "The configured ssl_client_cert #{config[:ssl_client_cert]} does not exist"
189
- end
190
- unless ::File.exists?(config[:ssl_client_key])
191
- raise Chef::Exceptions::ConfigurationError, "The configured ssl_client_key #{config[:ssl_client_key]} does not exist"
192
- end
193
- @http_client.cert = OpenSSL::X509::Certificate.new(::File.read(config[:ssl_client_cert]))
194
- @http_client.key = OpenSSL::PKey::RSA.new(::File.read(config[:ssl_client_key]))
195
- end
196
- end
197
-
198
- @http_client.read_timeout = config[:rest_timeout]
135
+ @headers
199
136
  end
200
137
 
201
138
 
@@ -225,6 +162,8 @@ class Chef
225
162
  password = URI.unescape(url.password) if url.password
226
163
  @http_request.basic_auth(user, password)
227
164
  end
165
+
166
+ # Overwrite default UA
228
167
  @http_request[USER_AGENT] = self.class.user_agent
229
168
  end
230
169