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
@@ -17,7 +17,7 @@ class Chef
17
17
  end
18
18
 
19
19
  def children
20
- @children ||= begin
20
+ begin
21
21
  result = []
22
22
  seen = {}
23
23
  # If multiple things have the same name, the first one wins.
@@ -40,6 +40,7 @@ class Chef
40
40
  end
41
41
 
42
42
  def create_child(name, file_contents = nil)
43
+ @children = nil
43
44
  write_dir.create_child(name, file_contents)
44
45
  end
45
46
  end
@@ -32,7 +32,7 @@ class Chef
32
32
  # Identical to RestListDir.children, except supports environments
33
33
  def children
34
34
  begin
35
- @children ||= Chef::ChefFS::RawRequest.raw_json(rest, env_api_path).keys.sort.map do |key|
35
+ @children ||= root.get_json(env_api_path).keys.sort.map do |key|
36
36
  _make_child_entry("#{key}.json", true)
37
37
  end
38
38
  rescue Timeout::Error => e
@@ -27,6 +27,14 @@ class Chef
27
27
  @operation = operation
28
28
  end
29
29
 
30
+ def message
31
+ if cause && cause.is_a?(Net::HTTPExceptions) && cause.response.code == "400"
32
+ "#{super} cause: #{cause.response.body}"
33
+ else
34
+ super
35
+ end
36
+ end
37
+
30
38
  attr_reader :operation
31
39
  end
32
40
  end
@@ -45,7 +45,7 @@ class Chef
45
45
 
46
46
  def children
47
47
  begin
48
- @children ||= Chef::ChefFS::RawRequest.raw_json(rest, api_path).keys.sort.map do |key|
48
+ @children ||= root.get_json(api_path).keys.sort.map do |key|
49
49
  _make_child_entry("#{key}.json", true)
50
50
  end
51
51
  rescue Timeout::Error => e
@@ -76,7 +76,7 @@ class Chef
76
76
  end
77
77
 
78
78
  begin
79
- rest.post_rest(api_path, object)
79
+ rest.post(api_path, object)
80
80
  rescue Timeout::Error => e
81
81
  raise Chef::ChefFS::FileSystem::OperationFailedError.new(:create_child, self, e), "Timeout creating '#{name}': #{e}"
82
82
  rescue Net::HTTPServerException => e
@@ -89,6 +89,8 @@ class Chef
89
89
  end
90
90
  end
91
91
 
92
+ @children = nil
93
+
92
94
  result
93
95
  end
94
96
 
@@ -19,7 +19,6 @@
19
19
  require 'chef/chef_fs/file_system/base_fs_object'
20
20
  require 'chef/chef_fs/file_system/not_found_error'
21
21
  require 'chef/chef_fs/file_system/operation_failed_error'
22
- require 'chef/chef_fs/raw_request'
23
22
  require 'chef/role'
24
23
  require 'chef/node'
25
24
 
@@ -68,7 +67,7 @@ class Chef
68
67
 
69
68
  def delete(recurse)
70
69
  begin
71
- rest.delete_rest(api_path)
70
+ rest.delete(api_path)
72
71
  rescue Timeout::Error => e
73
72
  raise Chef::ChefFS::FileSystem::OperationFailedError.new(:delete, self, e), "Timeout deleting: #{e}"
74
73
  rescue Net::HTTPServerException => e
@@ -86,7 +85,8 @@ class Chef
86
85
 
87
86
  def _read_hash
88
87
  begin
89
- json = Chef::ChefFS::RawRequest.raw_request(rest, api_path)
88
+ # Minimize the value (get rid of defaults) so the results don't look terrible
89
+ minimize_value(root.get_json(api_path))
90
90
  rescue Timeout::Error => e
91
91
  raise Chef::ChefFS::FileSystem::OperationFailedError.new(:read, self, e), "Timeout reading: #{e}"
92
92
  rescue Net::HTTPServerException => e
@@ -96,8 +96,6 @@ class Chef
96
96
  raise Chef::ChefFS::FileSystem::OperationFailedError.new(:read, self, e), "HTTP error reading: #{e}"
97
97
  end
98
98
  end
99
- # Minimize the value (get rid of defaults) so the results don't look terrible
100
- minimize_value(JSON.parse(json, :create_additions => false))
101
99
  end
102
100
 
103
101
  def chef_object
@@ -160,7 +158,7 @@ class Chef
160
158
  end
161
159
 
162
160
  begin
163
- rest.put_rest(api_path, object)
161
+ rest.put(api_path, object)
164
162
  rescue Timeout::Error => e
165
163
  raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e), "Timeout writing: #{e}"
166
164
  rescue Net::HTTPServerException => e
@@ -35,37 +35,40 @@ class Chef
35
35
 
36
36
  def self.inherited(c)
37
37
  super
38
+
38
39
  # Ensure we always get to do our includes, whether subclass calls deps or not
39
40
  c.deps do
40
41
  end
41
42
 
42
- option :repo_mode,
43
- :long => '--repo-mode MODE',
44
- :description => "Specifies the local repository layout. Values: static, everything, hosted_everything. Default: everything/hosted_everything"
43
+ c.options.merge!(options)
44
+ end
45
45
 
46
- option :chef_repo_path,
47
- :long => '--chef-repo-path PATH',
48
- :description => 'Overrides the location of chef repo. Default is specified by chef_repo_path in the config'
46
+ option :repo_mode,
47
+ :long => '--repo-mode MODE',
48
+ :description => "Specifies the local repository layout. Values: static, everything, hosted_everything. Default: everything/hosted_everything"
49
49
 
50
- option :concurrency,
51
- :long => '--concurrency THREADS',
52
- :description => 'Maximum number of simultaneous requests to send (default: 10)'
53
- end
50
+ option :chef_repo_path,
51
+ :long => '--chef-repo-path PATH',
52
+ :description => 'Overrides the location of chef repo. Default is specified by chef_repo_path in the config'
53
+
54
+ option :concurrency,
55
+ :long => '--concurrency THREADS',
56
+ :description => 'Maximum number of simultaneous requests to send (default: 10)'
54
57
 
55
58
  def configure_chef
56
59
  super
57
60
  Chef::Config[:repo_mode] = config[:repo_mode] if config[:repo_mode]
58
61
  Chef::Config[:concurrency] = config[:concurrency].to_i if config[:concurrency]
59
62
 
60
- # --chef-repo-path overrides all other paths
63
+ # --chef-repo-path forcibly overrides all other paths
61
64
  if config[:chef_repo_path]
62
65
  Chef::Config[:chef_repo_path] = config[:chef_repo_path]
63
- Chef::ChefFS::Config::PATH_VARIABLES.each do |variable_name|
64
- Chef::Config[variable_name.to_sym] = chef_repo_paths.map { |path| File.join(path, "#{variable_name[0..-6]}s") }
66
+ %w(acl client cookbook container data_bag environment group node role user).each do |variable_name|
67
+ Chef::Config.delete("#{variable_name}_path".to_sym)
65
68
  end
66
69
  end
67
70
 
68
- @chef_fs_config = Chef::ChefFS::Config.new(Chef::Config)
71
+ @chef_fs_config = Chef::ChefFS::Config.new(Chef::Config, Dir.pwd, config)
69
72
 
70
73
  Chef::ChefFS::Parallelizer.threads = (Chef::Config[:concurrency] || 10) - 1
71
74
  end
@@ -91,17 +94,18 @@ class Chef
91
94
  end
92
95
 
93
96
  def pattern_args_from(args)
97
+ args.map { |arg| pattern_arg_from(arg) }
98
+ end
99
+
100
+ def pattern_arg_from(arg)
94
101
  # TODO support absolute file paths and not just patterns? Too much?
95
102
  # Could be super useful in a world with multiple repo paths
96
- args.map do |arg|
97
- if !@chef_fs_config.base_path && !Chef::ChefFS::PathUtils.is_absolute?(arg)
98
- # Check if chef repo path is specified to give a better error message
99
- @chef_fs_config.require_chef_repo_path
100
- ui.error("Attempt to use relative path '#{arg}' when current directory is outside the repository path")
101
- exit(1)
102
- end
103
- Chef::ChefFS::FilePattern.relative_to(@chef_fs_config.base_path, arg)
103
+ if !@chef_fs_config.base_path && !Chef::ChefFS::PathUtils.is_absolute?(arg)
104
+ # Check if chef repo path is specified to give a better error message
105
+ ui.error("Attempt to use relative path '#{arg}' when current directory is outside the repository path")
106
+ exit(1)
104
107
  end
108
+ Chef::ChefFS::FilePattern.relative_to(@chef_fs_config.base_path, arg)
105
109
  end
106
110
 
107
111
  def format_path(entry)
@@ -111,6 +115,19 @@ class Chef
111
115
  def parallelize(inputs, options = {}, &block)
112
116
  Chef::ChefFS::Parallelizer.parallelize(inputs, options, &block)
113
117
  end
118
+
119
+ def discover_repo_dir(dir)
120
+ %w(.chef cookbooks data_bags environments roles).each do |subdir|
121
+ return dir if File.directory?(File.join(dir, subdir))
122
+ end
123
+ # If this isn't it, check the parent
124
+ parent = File.dirname(dir)
125
+ if parent && parent != dir
126
+ discover_repo_dir(parent)
127
+ else
128
+ nil
129
+ end
130
+ end
114
131
  end
115
132
  end
116
133
  end
@@ -82,6 +82,11 @@ class Chef
82
82
  end
83
83
  end
84
84
 
85
+ def self.descendant_of?(path, ancestor)
86
+ path[0,ancestor.length] == ancestor &&
87
+ (ancestor.length == path.length || path[ancestor.length,1] =~ /#{PathUtils.regexp_path_separator}/)
88
+ end
89
+
85
90
  def self.is_absolute?(path)
86
91
  path =~ /^#{regexp_path_separator}/
87
92
  end
@@ -198,6 +198,7 @@ class Chef
198
198
  Chef::Log.debug "Forked instance now converging"
199
199
  do_run
200
200
  rescue Exception
201
+ Chef::Log.error $!
201
202
  exit 1
202
203
  else
203
204
  exit 0
@@ -206,7 +207,7 @@ class Chef
206
207
  Chef::Log.debug "Fork successful. Waiting for new chef pid: #{pid}"
207
208
  result = Process.waitpid2(pid)
208
209
  handle_child_exit(result)
209
- Chef::Log.debug "Forked child successfully reaped (pid: #{pid})"
210
+ Chef::Log.debug "Forked instance successfully reaped (pid: #{pid})"
210
211
  true
211
212
  else
212
213
  do_run
@@ -367,7 +368,10 @@ class Chef
367
368
  # === Returns
368
369
  # rest<Chef::REST>:: returns Chef::REST connection object
369
370
  def register(client_name=node_name, config=Chef::Config)
370
- if File.exists?(config[:client_key])
371
+ if !config[:client_key]
372
+ @events.skipping_registration(client_name, config)
373
+ Chef::Log.debug("Client key is unspecified - skipping registration")
374
+ elsif File.exists?(config[:client_key])
371
375
  @events.skipping_registration(client_name, config)
372
376
  Chef::Log.debug("Client key #{config[:client_key]} is present - skipping registration")
373
377
  else
@@ -467,13 +471,15 @@ class Chef
467
471
  # === Returns
468
472
  # true:: Always returns true.
469
473
  def do_run
470
- runlock = RunLock.new(Chef::Config)
474
+ runlock = RunLock.new(Chef::Config.lockfile)
471
475
  runlock.acquire
472
476
  # don't add code that may fail before entering this section to be sure to release lock
473
477
  begin
478
+ runlock.save_pid
474
479
  run_context = nil
475
480
  @events.run_start(Chef::VERSION)
476
481
  Chef::Log.info("*** Chef #{Chef::VERSION} ***")
482
+ Chef::Log.info "Chef-client pid: #{Process.pid}"
477
483
  enforce_path_sanity
478
484
  run_ohai
479
485
  @events.ohai_completed(node)
@@ -23,12 +23,20 @@ require 'chef/log'
23
23
  require 'chef/exceptions'
24
24
  require 'mixlib/config'
25
25
  require 'chef/util/selinux'
26
+ require 'pathname'
26
27
 
27
28
  class Chef
28
29
  class Config
29
30
 
30
31
  extend Mixlib::Config
31
32
 
33
+ # Evaluates the given string as config.
34
+ #
35
+ # +filename+ is used for context in stacktraces, but doesn't need to be the name of an actual file.
36
+ def self.from_string(string, filename)
37
+ self.instance_eval(string, filename, 1)
38
+ end
39
+
32
40
  # Manages the chef secret session key
33
41
  # === Returns
34
42
  # <newkey>:: A new or retrieved session key
@@ -50,8 +58,32 @@ class Chef
50
58
  configuration.inspect
51
59
  end
52
60
 
61
+ def self.on_windows?
62
+ RUBY_PLATFORM =~ /mswin|mingw|windows/
63
+ end
64
+
65
+ BACKSLASH = '\\'.freeze
66
+
67
+ def self.platform_path_separator
68
+ if on_windows?
69
+ File::ALT_SEPARATOR || BACKSLASH
70
+ else
71
+ File::SEPARATOR
72
+ end
73
+ end
74
+
75
+ def self.path_join(*args)
76
+ args = args.flatten
77
+ args.inject do |joined_path, component|
78
+ unless joined_path[-1,1] == platform_path_separator
79
+ joined_path += platform_path_separator
80
+ end
81
+ joined_path += component
82
+ end
83
+ end
84
+
53
85
  def self.platform_specific_path(path)
54
- if RUBY_PLATFORM =~ /mswin|mingw|windows/
86
+ if on_windows?
55
87
  # turns /etc/chef/client.rb into C:/chef/client.rb
56
88
  system_drive = ENV['SYSTEMDRIVE'] ? ENV['SYSTEMDRIVE'] : ""
57
89
  path = File.join(system_drive, path.split('/')[2..-1])
@@ -65,32 +97,35 @@ class Chef
65
97
  formatters << [name, file_path]
66
98
  end
67
99
 
68
- def self.formatters
69
- @formatters ||= []
100
+ # Config file to load (client.rb, knife.rb, etc. defaults set differently in knife, chef-client, etc.)
101
+ configurable(:config_file)
102
+
103
+ default(:config_dir) do
104
+ if local_mode
105
+ path_join(user_home, ".chef#{platform_path_separator}")
106
+ else
107
+ config_file && ::File.dirname(config_file)
108
+ end
70
109
  end
71
110
 
111
+ # No config file (client.rb / knife.rb / etc.) will be loaded outside this path.
112
+ # Major use case is tests, where we don't want to load the user's config files.
113
+ configurable(:config_file_jail)
114
+
115
+ default :formatters, []
116
+
72
117
  # Override the config dispatch to set the value of multiple server options simultaneously
73
118
  #
74
119
  # === Parameters
75
120
  # url<String>:: String to be set for all of the chef-server-api URL's
76
121
  #
77
- config_attr_writer :chef_server_url do |url|
78
- url = url.strip
79
- configure do |c|
80
- c[:chef_server_url] = url
81
- end
82
- url
83
- end
122
+ configurable(:chef_server_url).writes_value { |url| url.strip }
84
123
 
85
124
  # When you are using ActiveSupport, they monkey-patch 'daemonize' into Kernel.
86
125
  # So while this is basically identical to what method_missing would do, we pull
87
126
  # it up here and get a real method written so that things get dispatched
88
127
  # properly.
89
- config_attr_writer :daemonize do |v|
90
- configure do |c|
91
- c[:daemonize] = v
92
- end
93
- end
128
+ configurable(:daemonize).writes_value { |v| v }
94
129
 
95
130
  # Override the config dispatch to set the value of log_location configuration option
96
131
  #
@@ -108,50 +143,148 @@ class Chef
108
143
  rescue Errno::ENOENT
109
144
  raise Chef::Exceptions::ConfigurationError, "Failed to open or create log file at #{location.to_str}"
110
145
  end
111
- f
146
+ f
147
+ end
148
+ end
149
+
150
+ # The root where all local chef object data is stored. cookbooks, data bags,
151
+ # environments are all assumed to be in separate directories under this.
152
+ # chef-solo uses these directories for input data. knife commands
153
+ # that upload or download files (such as knife upload, knife role from file,
154
+ # etc.) work.
155
+ default :chef_repo_path do
156
+ if self.configuration[:cookbook_path]
157
+ if self.configuration[:cookbook_path].kind_of?(String)
158
+ File.expand_path('..', self.configuration[:cookbook_path])
159
+ else
160
+ self.configuration[:cookbook_path].map do |path|
161
+ File.expand_path('..', path)
162
+ end
163
+ end
164
+ else
165
+ platform_specific_path("/var/chef")
166
+ end
167
+ end
168
+
169
+ def self.find_chef_repo_path(cwd)
170
+ # In local mode, we auto-discover the repo root by looking for a path with "cookbooks" under it.
171
+ # This allows us to run config-free.
172
+ path = cwd
173
+ until File.directory?(path_join(path, "cookbooks"))
174
+ new_path = File.expand_path('..', path)
175
+ if new_path == path
176
+ Chef::Log.warn("No cookbooks directory found at or above current directory. Assuming #{Dir.pwd}.")
177
+ return Dir.pwd
178
+ end
179
+ path = new_path
180
+ end
181
+ Chef::Log.info("Auto-discovered chef repository at #{path}")
182
+ path
183
+ end
184
+
185
+ def self.derive_path_from_chef_repo_path(child_path)
186
+ if chef_repo_path.kind_of?(String)
187
+ path_join(chef_repo_path, child_path)
188
+ else
189
+ chef_repo_path.map { |path| path_join(path, child_path)}
190
+ end
191
+ end
192
+
193
+ # Location of acls on disk. String or array of strings.
194
+ # Defaults to <chef_repo_path>/acls.
195
+ # Only applies to Enterprise Chef commands.
196
+ default(:acl_path) { derive_path_from_chef_repo_path('acls') }
197
+
198
+ # Location of clients on disk. String or array of strings.
199
+ # Defaults to <chef_repo_path>/acls.
200
+ default(:client_path) { derive_path_from_chef_repo_path('clients') }
201
+
202
+ # Location of cookbooks on disk. String or array of strings.
203
+ # Defaults to <chef_repo_path>/cookbooks. If chef_repo_path
204
+ # is not specified, this is set to [/var/chef/cookbooks, /var/chef/site-cookbooks]).
205
+ default(:cookbook_path) do
206
+ if self.configuration[:chef_repo_path]
207
+ derive_path_from_chef_repo_path('cookbooks')
208
+ else
209
+ Array(derive_path_from_chef_repo_path('cookbooks')).flatten +
210
+ Array(derive_path_from_chef_repo_path('site-cookbooks')).flatten
112
211
  end
113
212
  end
114
213
 
214
+ # Location of containers on disk. String or array of strings.
215
+ # Defaults to <chef_repo_path>/containers.
216
+ # Only applies to Enterprise Chef commands.
217
+ default(:container_path) { derive_path_from_chef_repo_path('containers') }
218
+
219
+ # Location of data bags on disk. String or array of strings.
220
+ # Defaults to <chef_repo_path>/data_bags.
221
+ default(:data_bag_path) { derive_path_from_chef_repo_path('data_bags') }
222
+
223
+ # Location of environments on disk. String or array of strings.
224
+ # Defaults to <chef_repo_path>/environments.
225
+ default(:environment_path) { derive_path_from_chef_repo_path('environments') }
226
+
227
+ # Location of groups on disk. String or array of strings.
228
+ # Defaults to <chef_repo_path>/groups.
229
+ # Only applies to Enterprise Chef commands.
230
+ default(:group_path) { derive_path_from_chef_repo_path('groups') }
231
+
232
+ # Location of nodes on disk. String or array of strings.
233
+ # Defaults to <chef_repo_path>/nodes.
234
+ default(:node_path) { derive_path_from_chef_repo_path('nodes') }
235
+
236
+ # Location of roles on disk. String or array of strings.
237
+ # Defaults to <chef_repo_path>/roles.
238
+ default(:role_path) { derive_path_from_chef_repo_path('roles') }
239
+
240
+ # Location of users on disk. String or array of strings.
241
+ # Defaults to <chef_repo_path>/users.
242
+ # Does not apply to Enterprise Chef commands.
243
+ default(:user_path) { derive_path_from_chef_repo_path('users') }
244
+
115
245
  # Turn on "path sanity" by default. See also: http://wiki.opscode.com/display/chef/User+Environment+PATH+Sanity
116
- enforce_path_sanity(true)
246
+ default :enforce_path_sanity, true
117
247
 
118
248
  # Formatted Chef Client output is a beta feature, disabled by default:
119
- formatter "null"
249
+ default :formatter, "null"
120
250
 
121
251
  # The number of times the client should retry when registering with the server
122
- client_registration_retries 5
123
-
124
- # Where the cookbooks are located. Meaning is somewhat context dependent between
125
- # knife, chef-client, and chef-solo.
126
- cookbook_path [ platform_specific_path("/var/chef/cookbooks"),
127
- platform_specific_path("/var/chef/site-cookbooks") ]
252
+ default :client_registration_retries, 5
128
253
 
129
254
  # An array of paths to search for knife exec scripts if they aren't in the current directory
130
- script_path []
255
+ default :script_path, []
256
+
257
+ # The root of all caches (checksums, cache and backup). If local mode is on,
258
+ # this is under the user's home directory.
259
+ default(:cache_path) do
260
+ if local_mode
261
+ "#{config_dir}local-mode-cache"
262
+ else
263
+ platform_specific_path("/var/chef")
264
+ end
265
+ end
131
266
 
132
267
  # Where cookbook files are stored on the server (by content checksum)
133
- checksum_path "/var/chef/checksums"
268
+ default(:checksum_path) { path_join(cache_path, "checksums") }
134
269
 
135
270
  # Where chef's cache files should be stored
136
- file_cache_path platform_specific_path("/var/chef/cache")
271
+ default(:file_cache_path) { path_join(cache_path, "cache") }
137
272
 
138
- # By default, chef-client (or solo) creates a lockfile in
139
- # `file_cache_path`/chef-client-running.pid
140
- # If `lockfile` is explicitly set, this path will be used instead.
273
+ # Where backups of chef-managed files should go
274
+ default(:file_backup_path) { path_join(cache_path, "backup") }
275
+
276
+ # The chef-client (or solo) lockfile.
141
277
  #
142
278
  # If your `file_cache_path` resides on a NFS (or non-flock()-supporting
143
279
  # fs), it's recommended to set this to something like
144
280
  # '/tmp/chef-client-running.pid'
145
- lockfile nil
146
-
147
- # Where backups of chef-managed files should go
148
- file_backup_path platform_specific_path("/var/chef/backup")
281
+ default(:lockfile) { path_join(file_cache_path, "chef-client-running.pid") }
149
282
 
150
283
  ## Daemonization Settings ##
151
284
  # What user should Chef run as?
152
- user nil
153
- group nil
154
- umask 0022
285
+ default :user, nil
286
+ default :group, nil
287
+ default :umask, 0022
155
288
 
156
289
  # Valid log_levels are:
157
290
  # * :debug
@@ -164,57 +297,83 @@ class Chef
164
297
  # in a console), the log level is set to :warn, and output formatters are
165
298
  # used as the primary mode of output. When a tty is not available, the
166
299
  # logger is the primary mode of output, and the log level is set to :info
167
- log_level :auto
300
+ default :log_level, :auto
168
301
 
169
302
  # Using `force_formatter` causes chef to default to formatter output when STDOUT is not a tty
170
- force_formatter false
303
+ default :force_formatter, false
171
304
 
172
305
  # Using `force_logger` causes chef to default to logger output when STDOUT is a tty
173
- force_logger false
174
-
175
- http_retry_count 5
176
- http_retry_delay 5
177
- interval nil
178
- json_attribs nil
179
- log_location STDOUT
306
+ default :force_logger, false
307
+
308
+ default :http_retry_count, 5
309
+ default :http_retry_delay, 5
310
+ default :interval, nil
311
+ default :once, nil
312
+ default :json_attribs, nil
313
+ default :log_location, STDOUT
180
314
  # toggle info level log items that can create a lot of output
181
- verbose_logging true
182
- node_name nil
183
- diff_disabled false
184
- diff_filesize_threshold 10000000
185
- diff_output_threshold 1000000
186
-
187
- pid_file nil
188
-
189
- chef_server_url "https://localhost:443"
190
-
191
- rest_timeout 300
192
- yum_timeout 900
193
- solo false
194
- splay nil
195
- why_run false
196
- color false
197
- client_fork true
198
- enable_reporting true
199
- enable_reporting_url_fatals false
315
+ default :verbose_logging, true
316
+ default :node_name, nil
317
+ default :diff_disabled, false
318
+ default :diff_filesize_threshold, 10000000
319
+ default :diff_output_threshold, 1000000
320
+ default :local_mode, false
321
+
322
+ default :pid_file, nil
323
+
324
+ config_context :chef_zero do
325
+ config_strict_mode true
326
+ default(:enabled) { Chef::Config.local_mode }
327
+ default :port, 8889
328
+ end
329
+ default :chef_server_url, "https://localhost:443"
330
+
331
+ default :rest_timeout, 300
332
+ default :yum_timeout, 900
333
+ default :solo, false
334
+ default :splay, nil
335
+ default :why_run, false
336
+ default :color, false
337
+ default :client_fork, true
338
+ default :enable_reporting, true
339
+ default :enable_reporting_url_fatals, false
200
340
 
201
341
  # Set these to enable SSL authentication / mutual-authentication
202
342
  # with the server
203
- ssl_client_cert nil
204
- ssl_client_key nil
205
- ssl_verify_mode :verify_none
206
- ssl_ca_path nil
207
- ssl_ca_file nil
208
-
209
- # Where should chef-solo look for role files?
210
- role_path platform_specific_path("/var/chef/roles")
211
343
 
212
- data_bag_path platform_specific_path("/var/chef/data_bags")
344
+ # Client side SSL cert/key for mutual auth
345
+ default :ssl_client_cert, nil
346
+ default :ssl_client_key, nil
347
+
348
+ # Whether or not to verify the SSL cert for all HTTPS requests. If set to
349
+ # :verify_peer, all HTTPS requests will be validated regardless of other
350
+ # SSL verification settings.
351
+ default :ssl_verify_mode, :verify_none
352
+
353
+ # Whether or not to verify the SSL cert for HTTPS requests to the Chef
354
+ # server API. If set to `true`, the server's cert will be validated
355
+ # regardless of the :ssl_verify_mode setting.
356
+ default :verify_api_cert, false
357
+
358
+ # Path to the default CA bundle files.
359
+ default :ssl_ca_path, nil
360
+ default(:ssl_ca_file) do
361
+ if on_windows? and embedded_path = embedded_dir
362
+ cacert_path = File.join(embedded_path, "ssl/certs/cacert.pem")
363
+ cacert_path if File.exist?(cacert_path)
364
+ else
365
+ nil
366
+ end
367
+ end
213
368
 
214
- environment_path platform_specific_path("/var/chef/environments")
369
+ # A directory that contains additional SSL certificates to trust. Any
370
+ # certificates in this directory will be added to whatever CA bundle ruby
371
+ # is using. Use this to add self-signed certs for your Chef Server or local
372
+ # HTTP file servers.
373
+ default(:trusted_certs_dir) { config_dir && path_join(config_dir, "trusted_certs") }
215
374
 
216
375
  # Where should chef-solo download recipes from?
217
- recipe_url nil
376
+ default :recipe_url, nil
218
377
 
219
378
  # Sets the version of the signed header authentication protocol to use (see
220
379
  # the 'mixlib-authorization' project for more detail). Currently, versions
@@ -230,7 +389,7 @@ class Chef
230
389
  #
231
390
  # In the future, this configuration option may be replaced with an
232
391
  # automatic negotiation scheme.
233
- authentication_protocol_version "1.0"
392
+ default :authentication_protocol_version, "1.0"
234
393
 
235
394
  # This key will be used to sign requests to the Chef server. This location
236
395
  # must be writable by Chef during initial setup when generating a client
@@ -238,17 +397,21 @@ class Chef
238
397
  #
239
398
  # The chef-server will look up the public key for the client using the
240
399
  # `node_name` of the client.
241
- client_key platform_specific_path("/etc/chef/client.pem")
400
+ #
401
+ # If chef-zero is enabled, this defaults to nil (no authentication).
402
+ default(:client_key) { chef_zero.enabled ? nil : platform_specific_path("/etc/chef/client.pem") }
242
403
 
243
404
  # This secret is used to decrypt encrypted data bag items.
244
- encrypted_data_bag_secret platform_specific_path("/etc/chef/encrypted_data_bag_secret")
245
-
246
- # We have to check for the existence of the default file before setting it
247
- # since +Chef::Config[:encrypted_data_bag_secret]+ is read by older
248
- # bootstrap templates to determine if the local secret should be uploaded to
249
- # node being bootstrapped. This should be removed in Chef 12.
250
- unless File.exist?(platform_specific_path("/etc/chef/encrypted_data_bag_secret"))
251
- encrypted_data_bag_secret(nil)
405
+ default(:encrypted_data_bag_secret) do
406
+ # We have to check for the existence of the default file before setting it
407
+ # since +Chef::Config[:encrypted_data_bag_secret]+ is read by older
408
+ # bootstrap templates to determine if the local secret should be uploaded to
409
+ # node being bootstrapped. This should be removed in Chef 12.
410
+ if File.exist?(platform_specific_path("/etc/chef/encrypted_data_bag_secret"))
411
+ platform_specific_path("/etc/chef/encrypted_data_bag_secret")
412
+ else
413
+ nil
414
+ end
252
415
  end
253
416
 
254
417
  # As of Chef 11.0, version "1" is the default encrypted data bag item
@@ -256,7 +419,7 @@ class Chef
256
419
  # To maintain compatibility, versions other than 1 must be opt-in.
257
420
  #
258
421
  # Set this to `2` if you have chef-client 11.6.0+ in your infrastructure:
259
- data_bag_encrypt_version 1
422
+ default :data_bag_encrypt_version, 1
260
423
 
261
424
  # When reading data bag items, any supported version is accepted. However,
262
425
  # if all encrypted data bags have been generated with the version 2 format,
@@ -264,7 +427,7 @@ class Chef
264
427
  # security. For example, the version 2 format is identical to version 1
265
428
  # except for the addition of an HMAC, so an attacker with MITM capability
266
429
  # could downgrade an encrypted data bag to version 1 as part of an attack.
267
- data_bag_decrypt_minimum_version 0
430
+ default :data_bag_decrypt_minimum_version, 0
268
431
 
269
432
  # If there is no file in the location given by `client_key`, chef-client
270
433
  # will temporarily use the "validator" identity to generate one. If the
@@ -272,43 +435,53 @@ class Chef
272
435
  # chef-client will not be able to authenticate to the server.
273
436
  #
274
437
  # The `validation_key` is never used if the `client_key` exists.
275
- validation_key platform_specific_path("/etc/chef/validation.pem")
276
- validation_client_name "chef-validator"
438
+ #
439
+ # If chef-zero is enabled, this defaults to nil (no authentication).
440
+ default(:validation_key) { chef_zero.enabled ? nil : platform_specific_path("/etc/chef/validation.pem") }
441
+ default :validation_client_name, "chef-validator"
277
442
 
278
443
  # Zypper package provider gpg checks. Set to true to enable package
279
444
  # gpg signature checking. This will be default in the
280
445
  # future. Setting to false disables the warnings.
281
446
  # Leaving this set to nil or false is a security hazard!
282
- zypper_check_gpg nil
447
+ default :zypper_check_gpg, nil
283
448
 
284
449
  # Report Handlers
285
- report_handlers []
450
+ default :report_handlers, []
286
451
 
287
452
  # Exception Handlers
288
- exception_handlers []
453
+ default :exception_handlers, []
289
454
 
290
455
  # Start handlers
291
- start_handlers []
456
+ default :start_handlers, []
292
457
 
293
458
  # Syntax Check Cache. Knife keeps track of files that is has already syntax
294
459
  # checked by storing files in this directory. `syntax_check_cache_path` is
295
460
  # the new (and preferred) configuration setting. If not set, knife will
296
- # fall back to using cache_options[:path].
297
- #
298
- # Because many users will have knife configs with cache_options (generated
299
- # by `knife configure`), the default for now is to *not* set
300
- # syntax_check_cache_path, and thus fallback to cache_options[:path]. We
301
- # leave that value to the same default as was previously set.
302
- syntax_check_cache_path nil
461
+ # fall back to using cache_options[:path], which is deprecated but exists in
462
+ # many client configs generated by pre-Chef-11 bootstrappers.
463
+ default(:syntax_check_cache_path) { cache_options[:path] }
303
464
 
304
465
  # Deprecated:
305
- cache_options({ :path => platform_specific_path("/var/chef/cache/checksums") })
466
+ default(:cache_options) { { :path => path_join(file_cache_path, "checksums") } }
306
467
 
307
468
  # Set to false to silence Chef 11 deprecation warnings:
308
- chef11_deprecation_warnings true
309
-
310
- # Arbitrary knife configuration data
311
- knife Hash.new
469
+ default :chef11_deprecation_warnings, true
470
+
471
+ # knife configuration data
472
+ config_context :knife do
473
+ default :ssh_port, nil
474
+ default :ssh_user, nil
475
+ default :ssh_attribute, nil
476
+ default :ssh_gateway, nil
477
+ default :bootstrap_version, nil
478
+ default :bootstrap_proxy, nil
479
+ default :identity_file, nil
480
+ default :host_key_verify, nil
481
+ default :forward_agent, nil
482
+ default :sort_status_reverse, nil
483
+ default :hints, {}
484
+ end
312
485
 
313
486
  # Those lists of regular expressions define what chef considers a
314
487
  # valid user and group name
@@ -316,31 +489,49 @@ class Chef
316
489
  # From http://technet.microsoft.com/en-us/library/cc776019(WS.10).aspx
317
490
 
318
491
  principal_valid_regex_part = '[^"\/\\\\\[\]\:;|=,+*?<>]+'
319
- user_valid_regex [ /^(#{principal_valid_regex_part}\\)?#{principal_valid_regex_part}$/ ]
320
- group_valid_regex [ /^(#{principal_valid_regex_part}\\)?#{principal_valid_regex_part}$/ ]
492
+ default :user_valid_regex, [ /^(#{principal_valid_regex_part}\\)?#{principal_valid_regex_part}$/ ]
493
+ default :group_valid_regex, [ /^(#{principal_valid_regex_part}\\)?#{principal_valid_regex_part}$/ ]
321
494
 
322
- fatal_windows_admin_check false
495
+ default :fatal_windows_admin_check, false
323
496
  else
324
- user_valid_regex [ /^([-a-zA-Z0-9_.]+[\\@]?[-a-zA-Z0-9_.]+)$/, /^\d+$/ ]
325
- group_valid_regex [ /^([-a-zA-Z0-9_.\\@^ ]+)$/, /^\d+$/ ]
497
+ default :user_valid_regex, [ /^([-a-zA-Z0-9_.]+[\\@]?[-a-zA-Z0-9_.]+)$/, /^\d+$/ ]
498
+ default :group_valid_regex, [ /^([-a-zA-Z0-9_.\\@^ ]+)$/, /^\d+$/ ]
326
499
  end
327
500
 
328
501
  # returns a platform specific path to the user home dir
329
502
  windows_home_path = ENV['SYSTEMDRIVE'] + ENV['HOMEPATH'] if ENV['SYSTEMDRIVE'] && ENV['HOMEPATH']
330
- user_home(ENV['HOME'] || windows_home_path || ENV['USERPROFILE'])
503
+ default :user_home, (ENV['HOME'] || windows_home_path || ENV['USERPROFILE'])
331
504
 
332
505
  # Enable file permission fixup for selinux. Fixup will be done
333
506
  # only if selinux is enabled in the system.
334
- enable_selinux_file_permission_fixup true
507
+ default :enable_selinux_file_permission_fixup, true
335
508
 
336
509
  # Use atomic updates (i.e. move operation) while updating contents
337
510
  # of the files resources. When set to false copy operation is
338
511
  # used to update files.
339
- file_atomic_update true
512
+ default :file_atomic_update, true
340
513
 
341
514
  # If false file staging is will be done via tempfiles that are
342
515
  # created under ENV['TMP'] otherwise tempfiles will be created in
343
516
  # the directory that files are going to reside.
344
- file_staging_uses_destdir false
517
+ default :file_staging_uses_destdir, false
518
+
519
+ # If installed via an omnibus installer, this gives the path to the
520
+ # "embedded" directory which contains all of the software packaged with
521
+ # omnibus. This is used to locate the cacert.pem file on windows.
522
+ def self.embedded_dir
523
+ Pathname.new(_this_file).ascend do |path|
524
+ if path.basename.to_s == "embedded"
525
+ return path.to_s
526
+ end
527
+ end
528
+
529
+ nil
530
+ end
531
+
532
+ # Path to this file in the current install.
533
+ def self._this_file
534
+ File.expand_path(__FILE__)
535
+ end
345
536
  end
346
537
  end