chef 10.34.6-x86-mingw32 → 11.6.2-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 (777) hide show
  1. checksums.yaml +5 -13
  2. data/CONTRIBUTING.md +155 -0
  3. data/README.md +89 -0
  4. data/Rakefile +18 -1
  5. data/bin/chef-apply +25 -0
  6. data/bin/chef-service-manager +37 -0
  7. data/bin/chef-shell +34 -0
  8. data/bin/shef +6 -5
  9. data/distro/common/html/chef-client.8.html +4 -4
  10. data/distro/common/html/chef-expander.8.html +4 -4
  11. data/distro/common/html/chef-expanderctl.8.html +4 -4
  12. data/distro/common/html/chef-server-webui.8.html +4 -4
  13. data/distro/common/html/chef-server.8.html +4 -4
  14. data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
  15. data/distro/common/html/chef-solo.8.html +4 -4
  16. data/distro/common/html/chef-solr.8.html +5 -5
  17. data/distro/common/html/knife-bootstrap.1.html +4 -4
  18. data/distro/common/html/knife-client.1.html +4 -4
  19. data/distro/common/html/knife-configure.1.html +4 -4
  20. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  21. data/distro/common/html/knife-cookbook.1.html +4 -4
  22. data/distro/common/html/knife-data-bag.1.html +4 -4
  23. data/distro/common/html/knife-environment.1.html +4 -4
  24. data/distro/common/html/knife-exec.1.html +9 -9
  25. data/distro/common/html/knife-index.1.html +4 -4
  26. data/distro/common/html/knife-node.1.html +4 -4
  27. data/distro/common/html/knife-role.1.html +4 -4
  28. data/distro/common/html/knife-search.1.html +4 -4
  29. data/distro/common/html/knife-ssh.1.html +4 -4
  30. data/distro/common/html/knife-status.1.html +4 -4
  31. data/distro/common/html/knife-tag.1.html +4 -4
  32. data/distro/common/html/knife.1.html +8 -13
  33. data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
  34. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  35. data/distro/common/man/man1/knife-client.1 +0 -99
  36. data/distro/common/man/man1/knife-configure.1 +1 -1
  37. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  38. data/distro/common/man/man1/knife-cookbook.1 +1 -1
  39. data/distro/common/man/man1/knife-data-bag.1 +1 -1
  40. data/distro/common/man/man1/knife-environment.1 +0 -168
  41. data/distro/common/man/man1/knife-exec.1 +4 -7
  42. data/distro/common/man/man1/knife-index.1 +1 -1
  43. data/distro/common/man/man1/knife-node.1 +1 -1
  44. data/distro/common/man/man1/knife-role.1 +1 -1
  45. data/distro/common/man/man1/knife-search.1 +1 -1
  46. data/distro/common/man/man1/knife-ssh.1 +1 -1
  47. data/distro/common/man/man1/knife-status.1 +1 -1
  48. data/distro/common/man/man1/knife-tag.1 +1 -1
  49. data/distro/common/man/man1/knife.1 +3 -6
  50. data/distro/common/man/man8/chef-client.8 +1 -1
  51. data/distro/common/man/man8/chef-expander.8 +1 -1
  52. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  53. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  54. data/distro/common/man/man8/chef-server.8 +1 -1
  55. data/distro/common/man/man8/chef-solo.8 +1 -1
  56. data/distro/common/man/man8/chef-solr.8 +1 -1
  57. data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
  58. data/distro/common/markdown/man1/knife-exec.mkd +11 -6
  59. data/distro/common/markdown/man1/knife.mkd +4 -9
  60. data/distro/debian/etc/default/chef-client +0 -1
  61. data/distro/debian/etc/init.d/chef-client +6 -4
  62. data/distro/windows/service_manager.rb +2 -146
  63. data/lib/chef.rb +3 -6
  64. data/lib/chef/api_client.rb +20 -130
  65. data/lib/chef/api_client/registration.rb +126 -0
  66. data/lib/chef/application.rb +68 -18
  67. data/lib/chef/application/apply.rb +162 -0
  68. data/lib/chef/application/client.rb +37 -22
  69. data/lib/chef/application/knife.rb +2 -4
  70. data/lib/chef/application/solo.rb +27 -13
  71. data/lib/chef/application/windows_service.rb +114 -54
  72. data/lib/chef/application/windows_service_manager.rb +179 -0
  73. data/lib/chef/applications.rb +1 -0
  74. data/lib/chef/chef_fs.rb +9 -0
  75. data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
  76. data/lib/chef/chef_fs/command_line.rb +284 -0
  77. data/lib/chef/chef_fs/config.rb +205 -0
  78. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
  79. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
  80. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
  81. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
  82. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
  83. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
  84. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
  85. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
  86. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
  87. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
  88. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
  89. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  90. data/lib/chef/chef_fs/file_system.rb +426 -0
  91. data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
  92. data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
  93. data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
  94. data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
  95. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
  96. data/lib/chef/chef_fs/file_system/base_fs_object.rb +180 -0
  97. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
  98. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
  99. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
  100. data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
  101. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +60 -0
  102. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +121 -0
  103. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +110 -0
  104. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +223 -0
  105. data/lib/chef/chef_fs/file_system/cookbook_file.rb +85 -0
  106. data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
  107. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  108. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
  109. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +149 -0
  110. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
  111. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +72 -0
  112. data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
  113. data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
  114. data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
  115. data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
  116. data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
  117. data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
  118. data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
  119. data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
  120. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
  121. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  122. data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
  123. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
  124. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  125. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
  126. data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
  127. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +113 -0
  128. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +177 -0
  129. data/lib/chef/chef_fs/knife.rb +116 -0
  130. data/lib/chef/chef_fs/parallelizer.rb +129 -0
  131. data/lib/chef/chef_fs/path_utils.rb +90 -0
  132. data/lib/chef/chef_fs/raw_request.rb +79 -0
  133. data/lib/chef/client.rb +111 -34
  134. data/lib/chef/config.rb +111 -102
  135. data/lib/chef/cookbook/chefignore.rb +2 -1
  136. data/lib/chef/cookbook/metadata.rb +0 -2
  137. data/lib/chef/cookbook/syntax_check.rb +76 -14
  138. data/lib/chef/cookbook_loader.rb +39 -26
  139. data/lib/chef/cookbook_uploader.rb +16 -9
  140. data/lib/chef/cookbook_version.rb +2 -410
  141. data/lib/chef/daemon.rb +24 -19
  142. data/lib/chef/data_bag.rb +20 -104
  143. data/lib/chef/data_bag_item.rb +2 -65
  144. data/lib/chef/deprecation/mixin/template.rb +49 -0
  145. data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
  146. data/lib/chef/deprecation/provider/file.rb +197 -0
  147. data/lib/chef/deprecation/provider/remote_file.rb +86 -0
  148. data/lib/chef/deprecation/provider/template.rb +63 -0
  149. data/lib/chef/deprecation/warnings.rb +38 -0
  150. data/lib/chef/digester.rb +73 -0
  151. data/lib/chef/dsl.rb +6 -0
  152. data/lib/chef/dsl/data_query.rb +71 -0
  153. data/lib/chef/dsl/include_attribute.rb +63 -0
  154. data/lib/chef/dsl/include_recipe.rb +45 -0
  155. data/lib/chef/dsl/platform_introspection.rb +218 -0
  156. data/lib/chef/dsl/recipe.rb +87 -0
  157. data/lib/chef/dsl/registry_helper.rb +59 -0
  158. data/lib/chef/encrypted_data_bag_item.rb +171 -24
  159. data/lib/chef/environment.rb +39 -179
  160. data/lib/chef/event_dispatch/base.rb +3 -0
  161. data/lib/chef/exceptions.rb +107 -8
  162. data/lib/chef/file_access_control/unix.rb +64 -7
  163. data/lib/chef/file_access_control/windows.rb +22 -11
  164. data/lib/chef/file_content_management/content_base.rb +56 -0
  165. data/lib/chef/file_content_management/deploy.rb +38 -0
  166. data/lib/chef/file_content_management/deploy/cp.rb +48 -0
  167. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
  168. data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
  169. data/lib/chef/file_content_management/tempfile.rb +61 -0
  170. data/lib/chef/formatters/base.rb +4 -1
  171. data/lib/chef/formatters/doc.rb +1 -1
  172. data/lib/chef/formatters/error_descriptor.rb +5 -4
  173. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
  174. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +8 -0
  175. data/lib/chef/json_compat.rb +15 -14
  176. data/lib/chef/knife.rb +99 -41
  177. data/lib/chef/knife/bootstrap.rb +46 -2
  178. data/lib/chef/knife/bootstrap/archlinux-gems.erb +1 -1
  179. data/lib/chef/knife/bootstrap/centos5-gems.erb +1 -1
  180. data/lib/chef/knife/bootstrap/chef-full.erb +1 -1
  181. data/lib/chef/knife/bootstrap/fedora13-gems.erb +1 -1
  182. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +1 -1
  183. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +1 -1
  184. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +1 -1
  185. data/lib/chef/knife/client_show.rb +2 -5
  186. data/lib/chef/knife/configure.rb +19 -17
  187. data/lib/chef/knife/cookbook_create.rb +6 -5
  188. data/lib/chef/knife/cookbook_download.rb +13 -5
  189. data/lib/chef/knife/cookbook_metadata.rb +1 -0
  190. data/lib/chef/knife/cookbook_site_share.rb +1 -0
  191. data/lib/chef/knife/cookbook_test.rb +4 -2
  192. data/lib/chef/knife/cookbook_upload.rb +4 -4
  193. data/lib/chef/knife/core/bootstrap_context.rb +11 -5
  194. data/lib/chef/knife/core/generic_presenter.rb +42 -13
  195. data/lib/chef/knife/core/node_editor.rb +36 -16
  196. data/lib/chef/knife/core/node_presenter.rb +1 -1
  197. data/lib/chef/knife/core/subcommand_loader.rb +43 -12
  198. data/lib/chef/knife/core/text_formatter.rb +23 -37
  199. data/lib/chef/knife/core/ui.rb +34 -13
  200. data/lib/chef/knife/delete.rb +106 -0
  201. data/lib/chef/knife/deps.rb +139 -0
  202. data/lib/chef/knife/diff.rb +63 -0
  203. data/lib/chef/knife/download.rb +63 -0
  204. data/lib/chef/knife/edit.rb +76 -0
  205. data/lib/chef/knife/environment_show.rb +2 -0
  206. data/lib/chef/knife/exec.rb +5 -5
  207. data/lib/chef/knife/help_topics.rb +1 -1
  208. data/lib/chef/knife/index_rebuild.rb +91 -7
  209. data/lib/chef/knife/list.rb +153 -0
  210. data/lib/chef/knife/node_run_list_set.rb +66 -0
  211. data/lib/chef/knife/node_show.rb +1 -7
  212. data/lib/chef/knife/raw.rb +64 -0
  213. data/lib/chef/knife/role_show.rb +2 -4
  214. data/lib/chef/knife/search.rb +45 -28
  215. data/lib/chef/knife/show.rb +55 -0
  216. data/lib/chef/knife/ssh.rb +14 -2
  217. data/lib/chef/knife/upload.rb +69 -0
  218. data/lib/chef/knife/user_create.rb +93 -0
  219. data/lib/chef/knife/user_delete.rb +46 -0
  220. data/lib/chef/knife/user_edit.rb +53 -0
  221. data/lib/chef/{provider/whyrun_safe_ruby_block.rb → knife/user_list.rb} +21 -9
  222. data/lib/chef/knife/user_reregister.rb +59 -0
  223. data/lib/chef/knife/user_show.rb +49 -0
  224. data/lib/chef/knife/xargs.rb +265 -0
  225. data/lib/chef/log.rb +2 -2
  226. data/lib/chef/mixin/checksum.rb +3 -3
  227. data/lib/chef/mixin/deep_merge.rb +78 -194
  228. data/lib/chef/mixin/deprecation.rb +35 -0
  229. data/lib/chef/mixin/file_class.rb +0 -9
  230. data/lib/chef/mixin/language.rb +22 -223
  231. data/lib/chef/mixin/language_include_attribute.rb +10 -36
  232. data/lib/chef/mixin/language_include_recipe.rb +7 -33
  233. data/lib/chef/mixin/params_validate.rb +0 -3
  234. data/lib/chef/mixin/recipe_definition_dsl_core.rb +10 -61
  235. data/lib/chef/mixin/securable.rb +32 -7
  236. data/lib/chef/mixin/template.rb +156 -26
  237. data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
  238. data/lib/chef/mixins.rb +1 -5
  239. data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/monkey_patches/file.rb} +6 -14
  240. data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
  241. data/lib/chef/monkey_patches/net_http.rb +0 -34
  242. data/lib/chef/monkey_patches/securerandom.rb +44 -0
  243. data/lib/chef/monologger.rb +93 -0
  244. data/lib/chef/node.rb +139 -308
  245. data/lib/chef/node/attribute.rb +367 -473
  246. data/lib/chef/node/attribute_collections.rb +206 -0
  247. data/lib/chef/node/immutable_collections.rb +186 -0
  248. data/lib/chef/platform.rb +4 -496
  249. data/lib/chef/platform/provider_mapping.rb +529 -0
  250. data/lib/chef/{mixin/check_helper.rb → platform/query_helpers.rb} +20 -9
  251. data/lib/chef/provider.rb +14 -58
  252. data/lib/chef/provider/batch.rb +35 -0
  253. data/lib/chef/provider/breakpoint.rb +6 -6
  254. data/lib/chef/provider/cookbook_file.rb +11 -80
  255. data/lib/chef/provider/cookbook_file/content.rb +49 -0
  256. data/lib/chef/provider/deploy.rb +26 -21
  257. data/lib/chef/provider/deploy/revision.rb +27 -0
  258. data/lib/chef/provider/directory.rb +12 -18
  259. data/lib/chef/provider/execute.rb +22 -5
  260. data/lib/chef/provider/file.rb +297 -248
  261. data/lib/chef/provider/file/content.rb +39 -0
  262. data/lib/chef/provider/git.rb +76 -43
  263. data/lib/chef/provider/group.rb +31 -51
  264. data/lib/chef/provider/group/dscl.rb +13 -53
  265. data/lib/chef/provider/group/gpasswd.rb +19 -14
  266. data/lib/chef/provider/group/groupadd.rb +1 -41
  267. data/lib/chef/provider/group/groupmod.rb +36 -46
  268. data/lib/chef/provider/group/pw.rb +16 -59
  269. data/lib/chef/provider/group/suse.rb +13 -16
  270. data/lib/chef/provider/group/usermod.rb +18 -40
  271. data/lib/chef/provider/group/windows.rb +6 -13
  272. data/lib/chef/provider/http_request.rb +25 -42
  273. data/lib/chef/provider/ifconfig.rb +25 -35
  274. data/lib/chef/provider/ifconfig/debian.rb +71 -0
  275. data/lib/chef/provider/ifconfig/redhat.rb +47 -0
  276. data/lib/chef/provider/link.rb +12 -3
  277. data/lib/chef/provider/lwrp_base.rb +150 -0
  278. data/lib/chef/provider/mount.rb +1 -1
  279. data/lib/chef/provider/mount/mount.rb +8 -3
  280. data/lib/chef/provider/mount/windows.rb +4 -1
  281. data/lib/chef/provider/package/rpm.rb +2 -2
  282. data/lib/chef/provider/package/rubygems.rb +4 -1
  283. data/lib/chef/provider/package/smartos.rb +47 -36
  284. data/lib/chef/provider/package/zypper.rb +45 -55
  285. data/lib/chef/provider/powershell_script.rb +77 -0
  286. data/lib/chef/provider/registry_key.rb +156 -0
  287. data/lib/chef/provider/remote_directory.rb +6 -5
  288. data/lib/chef/provider/remote_file.rb +13 -100
  289. data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
  290. data/lib/chef/provider/remote_file/content.rb +75 -0
  291. data/lib/chef/provider/remote_file/fetcher.rb +43 -0
  292. data/lib/chef/provider/remote_file/ftp.rb +183 -0
  293. data/lib/chef/provider/remote_file/http.rb +124 -0
  294. data/lib/chef/provider/remote_file/local_file.rb +47 -0
  295. data/lib/chef/provider/route.rb +6 -2
  296. data/lib/chef/provider/ruby_block.rb +5 -2
  297. data/lib/chef/provider/script.rb +14 -2
  298. data/lib/chef/provider/service.rb +15 -0
  299. data/lib/chef/provider/service/init.rb +9 -7
  300. data/lib/chef/provider/service/macosx.rb +29 -81
  301. data/lib/chef/provider/service/simple.rb +1 -1
  302. data/lib/chef/provider/service/solaris.rb +6 -5
  303. data/lib/chef/provider/template.rb +16 -81
  304. data/lib/chef/provider/template/content.rb +61 -0
  305. data/lib/chef/provider/template_finder.rb +61 -0
  306. data/lib/chef/provider/user.rb +0 -1
  307. data/lib/chef/provider/user/dscl.rb +175 -568
  308. data/lib/chef/provider/user/useradd.rb +50 -54
  309. data/lib/chef/provider/windows_script.rb +73 -0
  310. data/lib/chef/providers.rb +18 -1
  311. data/lib/chef/recipe.rb +14 -8
  312. data/lib/chef/resource.rb +52 -146
  313. data/lib/chef/resource/{whyrun_safe_ruby_block.rb → batch.rb} +10 -10
  314. data/lib/chef/resource/conditional.rb +4 -0
  315. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
  316. data/lib/chef/resource/file.rb +31 -3
  317. data/lib/chef/resource/group.rb +1 -11
  318. data/lib/chef/resource/http_request.rb +2 -1
  319. data/lib/chef/resource/link.rb +17 -0
  320. data/lib/chef/resource/lwrp_base.rb +132 -0
  321. data/lib/chef/resource/mount.rb +39 -13
  322. data/lib/chef/resource/powershell_script.rb +31 -0
  323. data/lib/chef/resource/registry_key.rb +86 -0
  324. data/lib/chef/resource/remote_directory.rb +6 -5
  325. data/lib/chef/resource/remote_file.rb +62 -25
  326. data/lib/chef/resource/route.rb +1 -1
  327. data/lib/chef/resource/ruby_block.rb +2 -2
  328. data/lib/chef/resource/service.rb +14 -0
  329. data/lib/chef/resource/template.rb +145 -0
  330. data/lib/chef/resource/user.rb +0 -18
  331. data/lib/chef/resource/windows_script.rb +62 -0
  332. data/lib/chef/resource_collection.rb +69 -31
  333. data/lib/chef/resource_reporter.rb +81 -52
  334. data/lib/chef/resources.rb +4 -1
  335. data/lib/chef/rest.rb +55 -127
  336. data/lib/chef/rest/auth_credentials.rb +4 -20
  337. data/lib/chef/rest/rest_request.rb +7 -8
  338. data/lib/chef/role.rb +1 -97
  339. data/lib/chef/run_context.rb +108 -130
  340. data/lib/chef/run_context/cookbook_compiler.rb +280 -0
  341. data/lib/chef/run_list.rb +0 -2
  342. data/lib/chef/run_list/run_list_expansion.rb +1 -16
  343. data/lib/chef/run_lock.rb +96 -0
  344. data/lib/chef/runner.rb +28 -6
  345. data/lib/chef/sandbox.rb +15 -148
  346. data/lib/chef/scan_access_control.rb +8 -5
  347. data/lib/chef/search/query.rb +2 -2
  348. data/lib/chef/shef/ext.rb +3 -575
  349. data/lib/chef/{shef.rb → shell.rb} +35 -40
  350. data/lib/chef/shell/ext.rb +593 -0
  351. data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
  352. data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
  353. data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +15 -13
  354. data/lib/chef/shell_out.rb +7 -0
  355. data/lib/chef/user.rb +182 -0
  356. data/lib/chef/util/backup.rb +84 -0
  357. data/lib/chef/util/diff.rb +145 -0
  358. data/lib/chef/util/file_edit.rb +1 -1
  359. data/lib/chef/util/selinux.rb +100 -0
  360. data/lib/chef/util/windows/net_group.rb +1 -5
  361. data/lib/chef/util/windows/net_user.rb +14 -1
  362. data/lib/chef/util/windows/volume.rb +2 -2
  363. data/lib/chef/version.rb +1 -1
  364. data/lib/chef/version/platform.rb +42 -0
  365. data/lib/chef/version_class.rb +1 -1
  366. data/lib/chef/version_constraint.rb +6 -5
  367. data/lib/chef/{index_queue.rb → version_constraint/platform.rb} +11 -14
  368. data/lib/chef/win32/api/file.rb +8 -2
  369. data/lib/chef/win32/api/security.rb +45 -1
  370. data/lib/chef/win32/registry.rb +382 -0
  371. data/lib/chef/win32/security.rb +19 -0
  372. data/lib/chef/win32/version.rb +25 -8
  373. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
  374. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
  375. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
  376. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
  377. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
  378. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
  379. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
  380. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
  381. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
  382. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
  383. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
  384. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
  385. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
  386. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
  387. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
  388. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  389. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  390. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
  391. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  392. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  393. data/spec/data/apt/var/www/apt/conf/distributions +7 -0
  394. data/spec/data/apt/var/www/apt/conf/incoming +4 -0
  395. data/spec/data/apt/var/www/apt/conf/pulls +3 -0
  396. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  397. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  398. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  399. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  400. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  401. data/spec/data/apt/var/www/apt/db/version +4 -0
  402. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
  403. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
  404. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  405. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
  406. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  407. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  408. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  409. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
  410. data/spec/data/bootstrap/secret.erb +9 -0
  411. data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
  412. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
  413. data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
  414. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  415. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
  416. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
  417. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
  418. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
  419. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
  420. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
  421. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
  422. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
  423. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  424. data/spec/data/knife_subcommand/test_yourself.rb +8 -0
  425. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  426. data/spec/data/nodes/default.rb +3 -3
  427. data/spec/data/nodes/test.example.com.rb +3 -3
  428. data/spec/data/nodes/test.rb +3 -3
  429. data/spec/data/null_config.rb +1 -0
  430. data/spec/data/partial_one.erb +1 -0
  431. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  432. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  433. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  434. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  435. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  436. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  437. data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
  438. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  439. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  440. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  441. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  442. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  443. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  444. data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
  445. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  446. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  447. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  448. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  449. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  450. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  451. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  452. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  453. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  454. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  455. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  456. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  457. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  458. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  459. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  460. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  461. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  462. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  463. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  464. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  465. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  466. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  467. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  468. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  469. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  470. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  471. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  472. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  473. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  474. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  475. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  476. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  477. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  478. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  479. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  480. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  481. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  482. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  483. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  484. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  485. data/spec/data/shef-config.rb +10 -0
  486. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  487. data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
  488. data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
  489. data/spec/functional/knife/exec_spec.rb +3 -3
  490. data/spec/functional/knife/smoke_test.rb +34 -0
  491. data/spec/functional/knife/ssh_spec.rb +5 -1
  492. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
  493. data/spec/functional/resource/batch_spec.rb +64 -0
  494. data/spec/functional/resource/cookbook_file_spec.rb +15 -9
  495. data/spec/functional/resource/deploy_revision_spec.rb +180 -0
  496. data/spec/functional/resource/directory_spec.rb +5 -1
  497. data/spec/functional/resource/file_spec.rb +71 -21
  498. data/spec/functional/resource/git_spec.rb +259 -0
  499. data/spec/functional/resource/link_spec.rb +424 -388
  500. data/spec/functional/resource/package_spec.rb +297 -0
  501. data/spec/functional/resource/powershell_spec.rb +188 -0
  502. data/spec/functional/resource/registry_spec.rb +576 -0
  503. data/spec/functional/resource/remote_directory_spec.rb +143 -37
  504. data/spec/functional/resource/remote_file_spec.rb +99 -13
  505. data/spec/functional/resource/template_spec.rb +180 -3
  506. data/spec/functional/resource/user_spec.rb +547 -0
  507. data/spec/functional/run_lock_spec.rb +243 -0
  508. data/spec/functional/shell_spec.rb +102 -0
  509. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  510. data/spec/functional/win32/security_spec.rb +37 -0
  511. data/spec/functional/win32/service_manager_spec.rb +269 -0
  512. data/spec/functional/win32/versions_spec.rb +78 -0
  513. data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
  514. data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
  515. data/spec/integration/knife/chefignore_spec.rb +271 -0
  516. data/spec/integration/knife/delete_spec.rb +944 -0
  517. data/spec/integration/knife/deps_spec.rb +648 -0
  518. data/spec/integration/knife/diff_spec.rb +536 -0
  519. data/spec/integration/knife/download_spec.rb +962 -0
  520. data/spec/integration/knife/list_spec.rb +633 -0
  521. data/spec/integration/knife/raw_spec.rb +166 -0
  522. data/spec/integration/knife/redirection_spec.rb +57 -0
  523. data/spec/integration/knife/show_spec.rb +158 -0
  524. data/spec/integration/knife/upload_spec.rb +1060 -0
  525. data/spec/integration/solo/solo_spec.rb +41 -0
  526. data/spec/spec_helper.rb +49 -13
  527. data/spec/stress/win32/security_spec.rb +1 -1
  528. data/spec/support/chef_helpers.rb +33 -3
  529. data/spec/support/lib/chef/resource/cat.rb +3 -5
  530. data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
  531. data/spec/support/lib/chef/resource/zen_master.rb +8 -10
  532. data/spec/support/platform_helpers.rb +46 -13
  533. data/spec/support/platforms/win32/spec_service.rb +59 -0
  534. data/spec/support/shared/functional/diff_disabled.rb +10 -0
  535. data/spec/support/shared/functional/directory_resource.rb +129 -38
  536. data/spec/support/shared/functional/file_resource.rb +837 -71
  537. data/spec/support/shared/functional/securable_resource.rb +189 -58
  538. data/spec/support/shared/functional/securable_resource_with_reporting.rb +385 -0
  539. data/spec/support/shared/integration/integration_helper.rb +166 -0
  540. data/spec/support/shared/integration/knife_support.rb +171 -0
  541. data/spec/support/shared/unit/execute_resource.rb +125 -0
  542. data/spec/support/shared/unit/file_system_support.rb +70 -0
  543. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  544. data/spec/support/shared/unit/provider/file.rb +609 -0
  545. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
  546. data/spec/support/shared/unit/script_resource.rb +52 -0
  547. data/spec/support/shared/unit/windows_script_resource.rb +48 -0
  548. data/spec/tiny_server.rb +13 -11
  549. data/spec/unit/api_client/registration_spec.rb +172 -0
  550. data/spec/unit/api_client_spec.rb +78 -156
  551. data/spec/unit/application/apply.rb +84 -0
  552. data/spec/unit/application/client_spec.rb +16 -14
  553. data/spec/unit/application/knife_spec.rb +17 -0
  554. data/spec/unit/application/solo_spec.rb +1 -1
  555. data/spec/unit/application_spec.rb +113 -3
  556. data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
  557. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  558. data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
  559. data/spec/unit/chef_fs/file_system_spec.rb +135 -0
  560. data/spec/unit/client_spec.rb +195 -23
  561. data/spec/unit/config_spec.rb +102 -51
  562. data/spec/unit/cookbook/syntax_check_spec.rb +75 -111
  563. data/spec/unit/cookbook_loader_spec.rb +154 -91
  564. data/spec/unit/cookbook_manifest_spec.rb +81 -81
  565. data/spec/unit/cookbook_spec.rb +3 -20
  566. data/spec/unit/cookbook_version_spec.rb +23 -122
  567. data/spec/unit/daemon_spec.rb +24 -19
  568. data/spec/unit/data_bag_spec.rb +13 -4
  569. data/spec/unit/deprecation_spec.rb +86 -0
  570. data/spec/unit/digester_spec.rb +50 -0
  571. data/spec/unit/dsl/data_query_spec.rb +66 -0
  572. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  573. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  574. data/spec/unit/encrypted_data_bag_item_spec.rb +197 -157
  575. data/spec/unit/environment_spec.rb +94 -126
  576. data/spec/unit/exceptions_spec.rb +8 -4
  577. data/spec/unit/file_access_control_spec.rb +21 -1
  578. data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
  579. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
  580. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
  581. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
  582. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +6 -5
  583. data/spec/unit/json_compat_spec.rb +8 -0
  584. data/spec/unit/knife/bootstrap_spec.rb +130 -29
  585. data/spec/unit/knife/configure_spec.rb +64 -45
  586. data/spec/unit/knife/cookbook_download_spec.rb +24 -3
  587. data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
  588. data/spec/unit/knife/cookbook_test_spec.rb +1 -0
  589. data/spec/unit/knife/cookbook_upload_spec.rb +39 -0
  590. data/spec/unit/knife/core/bootstrap_context_spec.rb +79 -62
  591. data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
  592. data/spec/unit/knife/core/ui_spec.rb +196 -124
  593. data/spec/unit/knife/data_bag_create_spec.rb +9 -0
  594. data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
  595. data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
  596. data/spec/unit/knife/data_bag_show_spec.rb +11 -4
  597. data/spec/unit/knife/index_rebuild_spec.rb +96 -33
  598. data/spec/unit/knife/knife_help.rb +7 -7
  599. data/spec/unit/knife/node_edit_spec.rb +6 -33
  600. data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
  601. data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
  602. data/spec/unit/knife/ssh_spec.rb +12 -15
  603. data/spec/unit/knife/status_spec.rb +2 -2
  604. data/spec/unit/knife/user_create_spec.rb +86 -0
  605. data/spec/unit/knife/user_delete_spec.rb +39 -0
  606. data/spec/unit/knife/user_edit_spec.rb +42 -0
  607. data/spec/unit/knife/user_list_spec.rb +32 -0
  608. data/spec/unit/knife/user_reregister_spec.rb +53 -0
  609. data/spec/unit/knife/user_show_spec.rb +41 -0
  610. data/spec/unit/knife_spec.rb +74 -0
  611. data/spec/unit/lwrp_spec.rb +102 -60
  612. data/spec/unit/mixin/checksum_spec.rb +2 -2
  613. data/spec/unit/mixin/deep_merge_spec.rb +130 -791
  614. data/spec/unit/mixin/deprecation_spec.rb +23 -0
  615. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +7 -1
  616. data/spec/unit/mixin/params_validate_spec.rb +4 -2
  617. data/spec/unit/mixin/securable_spec.rb +5 -3
  618. data/spec/unit/mixin/template_spec.rb +145 -14
  619. data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
  620. data/spec/unit/node/attribute_spec.rb +273 -173
  621. data/spec/unit/node/immutable_collections_spec.rb +139 -0
  622. data/spec/unit/node_spec.rb +418 -370
  623. data/spec/unit/platform_spec.rb +21 -8
  624. data/spec/unit/provider/breakpoint_spec.rb +8 -8
  625. data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
  626. data/spec/unit/provider/cookbook_file_spec.rb +26 -187
  627. data/spec/unit/provider/cron/solaris_spec.rb +1 -1
  628. data/spec/unit/provider/deploy/revision_spec.rb +19 -11
  629. data/spec/unit/provider/deploy_spec.rb +2 -2
  630. data/spec/unit/provider/directory_spec.rb +99 -67
  631. data/spec/unit/provider/env_spec.rb +2 -2
  632. data/spec/unit/provider/execute_spec.rb +27 -1
  633. data/spec/unit/provider/file/content_spec.rb +101 -0
  634. data/spec/unit/provider/file_spec.rb +25 -475
  635. data/spec/unit/provider/git_spec.rb +224 -28
  636. data/spec/unit/provider/group/dscl_spec.rb +0 -36
  637. data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
  638. data/spec/unit/provider/group/groupadd_spec.rb +4 -3
  639. data/spec/unit/provider/group/groupmod_spec.rb +1 -0
  640. data/spec/unit/provider/group/pw_spec.rb +15 -12
  641. data/spec/unit/provider/group/usermod_spec.rb +9 -22
  642. data/spec/unit/provider/group/windows_spec.rb +8 -0
  643. data/spec/unit/provider/group_spec.rb +6 -28
  644. data/spec/unit/provider/http_request_spec.rb +28 -69
  645. data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
  646. data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
  647. data/spec/unit/provider/ifconfig_spec.rb +0 -33
  648. data/spec/unit/provider/mount/mount_spec.rb +33 -2
  649. data/spec/unit/provider/mount/windows_spec.rb +4 -1
  650. data/spec/unit/provider/mount_spec.rb +16 -6
  651. data/spec/unit/provider/ohai_spec.rb +4 -4
  652. data/spec/unit/provider/package/apt_spec.rb +0 -1
  653. data/spec/unit/provider/package/ips_spec.rb +0 -1
  654. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  655. data/spec/unit/provider/package/rubygems_spec.rb +1 -1
  656. data/spec/unit/provider/package/smartos_spec.rb +3 -2
  657. data/spec/unit/provider/package/zypper_spec.rb +84 -22
  658. data/spec/unit/provider/package_spec.rb +7 -9
  659. data/spec/unit/provider/powershell_spec.rb +38 -0
  660. data/spec/unit/provider/registry_key_spec.rb +269 -0
  661. data/spec/unit/provider/remote_directory_spec.rb +7 -7
  662. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
  663. data/spec/unit/provider/remote_file/content_spec.rb +230 -0
  664. data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
  665. data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
  666. data/spec/unit/provider/remote_file/http_spec.rb +319 -0
  667. data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
  668. data/spec/unit/provider/remote_file_spec.rb +33 -259
  669. data/spec/unit/provider/route_spec.rb +29 -12
  670. data/spec/unit/provider/ruby_block_spec.rb +8 -0
  671. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  672. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  673. data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
  674. data/spec/unit/provider/service/init_service_spec.rb +27 -4
  675. data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
  676. data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
  677. data/spec/unit/provider/service/macosx_spec.rb +176 -207
  678. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  679. data/spec/unit/provider/service/simple_service_spec.rb +3 -3
  680. data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
  681. data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
  682. data/spec/unit/provider/service/upstart_service_spec.rb +11 -11
  683. data/spec/unit/provider/service_spec.rb +3 -3
  684. data/spec/unit/provider/subversion_spec.rb +1 -1
  685. data/spec/unit/provider/template/content_spec.rb +78 -0
  686. data/spec/unit/provider/template_spec.rb +52 -160
  687. data/spec/unit/provider/user/dscl_spec.rb +285 -681
  688. data/spec/unit/provider/user/solaris_spec.rb +39 -373
  689. data/spec/unit/provider/user/useradd_spec.rb +12 -379
  690. data/spec/unit/provider/user_spec.rb +1 -1
  691. data/spec/unit/recipe_spec.rb +10 -8
  692. data/spec/unit/registry_helper_spec.rb +376 -0
  693. data/spec/unit/resource/batch_spec.rb +48 -0
  694. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
  695. data/spec/unit/resource/execute_spec.rb +3 -101
  696. data/spec/unit/resource/file_spec.rb +0 -5
  697. data/spec/unit/resource/group_spec.rb +9 -0
  698. data/spec/unit/resource/ifconfig_spec.rb +60 -1
  699. data/spec/unit/resource/link_spec.rb +1 -0
  700. data/spec/unit/resource/mount_spec.rb +37 -11
  701. data/spec/unit/resource/powershell_spec.rb +48 -0
  702. data/spec/unit/resource/registry_key_spec.rb +171 -0
  703. data/spec/unit/resource/remote_file_spec.rb +63 -25
  704. data/spec/unit/resource/route_spec.rb +1 -1
  705. data/spec/unit/resource/ruby_block_spec.rb +7 -3
  706. data/spec/unit/resource/script_spec.rb +13 -36
  707. data/spec/unit/resource/service_spec.rb +11 -0
  708. data/spec/unit/resource/template_spec.rb +111 -8
  709. data/spec/unit/resource/user_spec.rb +7 -0
  710. data/spec/unit/resource_collection_spec.rb +61 -32
  711. data/spec/unit/resource_reporter_spec.rb +115 -102
  712. data/spec/unit/resource_spec.rb +197 -5
  713. data/spec/unit/rest/auth_credentials_spec.rb +4 -21
  714. data/spec/unit/rest_spec.rb +134 -284
  715. data/spec/unit/run_context/cookbook_compiler_spec.rb +190 -0
  716. data/spec/unit/run_context_spec.rb +18 -4
  717. data/spec/unit/run_list_spec.rb +0 -209
  718. data/spec/unit/run_lock_spec.rb +37 -0
  719. data/spec/unit/runner_spec.rb +102 -3
  720. data/spec/unit/scan_access_control_spec.rb +8 -6
  721. data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
  722. data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
  723. data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +16 -58
  724. data/spec/unit/shell_out_spec.rb +18 -0
  725. data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
  726. data/spec/unit/user_spec.rb +255 -0
  727. data/spec/unit/util/backup_spec.rb +149 -0
  728. data/spec/unit/util/diff_spec.rb +596 -0
  729. data/spec/unit/util/selinux_spec.rb +172 -0
  730. data/spec/unit/version/platform_spec.rb +61 -0
  731. data/spec/unit/version_constraint/platform_spec.rb +46 -0
  732. data/spec/unit/version_constraint_spec.rb +5 -0
  733. metadata +493 -264
  734. data/README.rdoc +0 -177
  735. data/distro/common/html/knife-recipe.1.html +0 -92
  736. data/lib/chef/certificate.rb +0 -161
  737. data/lib/chef/checksum.rb +0 -167
  738. data/lib/chef/checksum_cache.rb +0 -190
  739. data/lib/chef/cookbook_version_selector.rb +0 -168
  740. data/lib/chef/couchdb.rb +0 -246
  741. data/lib/chef/index_queue/amqp_client.rb +0 -116
  742. data/lib/chef/index_queue/consumer.rb +0 -76
  743. data/lib/chef/index_queue/indexable.rb +0 -109
  744. data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
  745. data/lib/chef/monkey_patches/dir.rb +0 -36
  746. data/lib/chef/monkey_patches/moneta.rb +0 -50
  747. data/lib/chef/monkey_patches/uri.rb +0 -70
  748. data/lib/chef/openid_registration.rb +0 -187
  749. data/lib/chef/solr_query.rb +0 -187
  750. data/lib/chef/solr_query/lucene.treetop +0 -150
  751. data/lib/chef/solr_query/lucene_nodes.rb +0 -285
  752. data/lib/chef/solr_query/query_transform.rb +0 -65
  753. data/lib/chef/solr_query/solr_http_request.rb +0 -132
  754. data/lib/chef/webui_user.rb +0 -231
  755. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  756. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  757. data/spec/data/mac_users/10.7.plist.xml +0 -559
  758. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  759. data/spec/data/mac_users/10.8.plist.xml +0 -559
  760. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  761. data/spec/data/mac_users/10.9.plist.xml +0 -560
  762. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  763. data/spec/functional/resource/base.rb +0 -40
  764. data/spec/functional/resource/group_spec.rb +0 -343
  765. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  766. data/spec/unit/certificate_spec.rb +0 -76
  767. data/spec/unit/checksum_cache_spec.rb +0 -209
  768. data/spec/unit/checksum_spec.rb +0 -94
  769. data/spec/unit/couchdb_spec.rb +0 -274
  770. data/spec/unit/index_queue_spec.rb +0 -391
  771. data/spec/unit/mixin/language_spec.rb +0 -305
  772. data/spec/unit/openid_registration_spec.rb +0 -153
  773. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
  774. data/spec/unit/solr_query/query_transform_spec.rb +0 -454
  775. data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
  776. data/spec/unit/solr_query_spec.rb +0 -203
  777. data/spec/unit/webui_user_spec.rb +0 -238
@@ -0,0 +1,79 @@
1
+ class Chef
2
+ module ChefFS
3
+ module RawRequest
4
+ def self.raw_json(chef_rest, api_path)
5
+ JSON.parse(raw_request(chef_rest, api_path), :create_additions => false)
6
+ end
7
+
8
+ def self.raw_request(chef_rest, api_path)
9
+ api_request(chef_rest, :GET, chef_rest.create_url(api_path), {}, false)
10
+ end
11
+
12
+ def self.api_request(chef_rest, method, url, headers={}, data=false)
13
+ json_body = data
14
+ # json_body = data ? Chef::JSONCompat.to_json(data) : nil
15
+ # Force encoding to binary to fix SSL related EOFErrors
16
+ # cf. http://tickets.opscode.com/browse/CHEF-2363
17
+ # http://redmine.ruby-lang.org/issues/5233
18
+ # json_body.force_encoding(Encoding::BINARY) if json_body.respond_to?(:force_encoding)
19
+ headers = build_headers(chef_rest, method, url, headers, json_body)
20
+
21
+ chef_rest.retriable_rest_request(method, url, json_body, headers) do |rest_request|
22
+ response = rest_request.call {|r| r.read_body}
23
+
24
+ response_body = chef_rest.decompress_body(response)
25
+
26
+ if response.kind_of?(Net::HTTPSuccess)
27
+ response_body
28
+ elsif redirect_location = redirected_to(response)
29
+ if [:GET, :HEAD].include?(method)
30
+ chef_rest.follow_redirect do
31
+ api_request(chef_rest, method, chef_rest.create_url(redirect_location))
32
+ end
33
+ else
34
+ raise Exceptions::InvalidRedirect, "#{method} request was redirected from #{url} to #{redirect_location}. Only GET and HEAD support redirects."
35
+ end
36
+ else
37
+ # have to decompress the body before making an exception for it. But the body could be nil.
38
+ response.body.replace(chef_rest.decompress_body(response)) if response.body.respond_to?(:replace)
39
+
40
+ if response['content-type'] =~ /json/
41
+ exception = response_body
42
+ msg = "HTTP Request Returned #{response.code} #{response.message}: "
43
+ msg << (exception["error"].respond_to?(:join) ? exception["error"].join(", ") : exception["error"].to_s)
44
+ Chef::Log.info(msg)
45
+ end
46
+ response.error!
47
+ end
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ # Copied so that it does not automatically inflate an object
54
+ # This is also used by knife raw_essentials
55
+
56
+ ACCEPT_ENCODING = "Accept-Encoding".freeze
57
+ ENCODING_GZIP_DEFLATE = "gzip;q=1.0,deflate;q=0.6,identity;q=0.3".freeze
58
+
59
+ def self.redirected_to(response)
60
+ return nil unless response.kind_of?(Net::HTTPRedirection)
61
+ # Net::HTTPNotModified is undesired subclass of Net::HTTPRedirection so test for this
62
+ return nil if response.kind_of?(Net::HTTPNotModified)
63
+ response['location']
64
+ end
65
+
66
+ def self.build_headers(chef_rest, method, url, headers={}, json_body=false, raw=false)
67
+ # headers = @default_headers.merge(headers)
68
+ #headers['Accept'] = "application/json" unless raw
69
+ headers['Accept'] = "application/json" unless raw
70
+ headers["Content-Type"] = 'application/json' if json_body
71
+ headers['Content-Length'] = json_body.bytesize.to_s if json_body
72
+ headers[Chef::REST::RESTRequest::ACCEPT_ENCODING] = Chef::REST::RESTRequest::ENCODING_GZIP_DEFLATE
73
+ headers.merge!(chef_rest.authentication_headers(method, url, json_body)) if chef_rest.sign_requests?
74
+ headers.merge!(Chef::Config[:custom_http_headers]) if Chef::Config[:custom_http_headers]
75
+ headers
76
+ end
77
+ end
78
+ end
79
+ end
@@ -24,7 +24,8 @@ require 'chef/mixin/path_sanity'
24
24
  require 'chef/log'
25
25
  require 'chef/rest'
26
26
  require 'chef/api_client'
27
- require 'chef/platform'
27
+ require 'chef/api_client/registration'
28
+ require 'chef/platform/query_helpers'
28
29
  require 'chef/node'
29
30
  require 'chef/role'
30
31
  require 'chef/file_cache'
@@ -41,6 +42,7 @@ require 'chef/formatters/doc'
41
42
  require 'chef/formatters/minimal'
42
43
  require 'chef/version'
43
44
  require 'chef/resource_reporter'
45
+ require 'chef/run_lock'
44
46
  require 'ohai'
45
47
  require 'rbconfig'
46
48
 
@@ -101,6 +103,7 @@ class Chef
101
103
  self.class.run_start_notifications.each do |notification|
102
104
  notification.call(run_status)
103
105
  end
106
+ @events.run_started(run_status)
104
107
  end
105
108
 
106
109
  # Callback to fire notifications that the run completed successfully
@@ -127,8 +130,8 @@ class Chef
127
130
  #--
128
131
  # TODO: timh/cw: 5-19-2010: json_attribs should be moved to RunContext?
129
132
  attr_reader :json_attribs
130
-
131
133
  attr_reader :run_status
134
+ attr_reader :events
132
135
 
133
136
  # Creates a new Chef::Client.
134
137
  def initialize(json_attribs=nil, args={})
@@ -138,15 +141,6 @@ class Chef
138
141
  @runner = nil
139
142
  @ohai = Ohai::System.new
140
143
 
141
- # If we want why-run output and user hasn't explicitly specified a format
142
- # we need to use a formatter that will render whyrun output.
143
- if Chef::Config.why_run
144
- if Chef::Config.formatter == "null"
145
- Chef::Log.warn("Forcing formatter of 'doc' to capture whyrun output.")
146
- Chef::Config[:formatter] = 'doc'
147
- end
148
- end
149
-
150
144
  event_handlers = configure_formatters
151
145
  event_handlers += Array(Chef::Config[:event_handlers])
152
146
 
@@ -156,7 +150,31 @@ class Chef
156
150
  end
157
151
 
158
152
  def configure_formatters
159
- [Chef::Formatters.new(Chef::Config.formatter, STDOUT, STDERR)]
153
+ formatters_for_run.map do |formatter_name, output_path|
154
+ if output_path.nil?
155
+ Chef::Formatters.new(formatter_name, STDOUT, STDERR)
156
+ else
157
+ io = File.open(output_path, "a+")
158
+ io.sync = true
159
+ Chef::Formatters.new(formatter_name, io, io)
160
+ end
161
+ end
162
+ end
163
+
164
+ def formatters_for_run
165
+ if Chef::Config.formatters.empty?
166
+ [default_formatter]
167
+ else
168
+ Chef::Config.formatters
169
+ end
170
+ end
171
+
172
+ def default_formatter
173
+ if (STDOUT.tty? && !Chef::Config[:force_logger]) || Chef::Config[:force_formatter]
174
+ [:doc]
175
+ else
176
+ [:null]
177
+ end
160
178
  end
161
179
 
162
180
  # Do a full run for this Chef::Client. Calls:
@@ -167,23 +185,47 @@ class Chef
167
185
  # === Returns
168
186
  # boolean:: Return value from #do_run. Should always returns true.
169
187
  def run
188
+ # win32-process gem exposes some form of :fork for Process
189
+ # class. So we are seperately ensuring that the platform we're
190
+ # running on is not windows before forking.
170
191
  if(Chef::Config[:client_fork] && Process.respond_to?(:fork) && !Chef::Platform.windows?)
171
192
  Chef::Log.info "Forking chef instance to converge..."
172
193
  pid = fork do
173
- Chef::Log.info "Forked instance now converging"
174
- do_run
175
- exit
194
+ [:INT, :TERM].each {|s| trap(s, "EXIT") }
195
+ client_solo = Chef::Config[:solo] ? "chef-solo" : "chef-client"
196
+ $0 = "#{client_solo} worker: ppid=#{Process.ppid};start=#{Time.new.strftime("%R:%S")};"
197
+ begin
198
+ Chef::Log.debug "Forked instance now converging"
199
+ do_run
200
+ rescue Exception
201
+ exit 1
202
+ else
203
+ exit 0
204
+ end
176
205
  end
177
- Chef::Log.info "Fork successful. Waiting for new chef pid: #{pid}"
206
+ Chef::Log.debug "Fork successful. Waiting for new chef pid: #{pid}"
178
207
  result = Process.waitpid2(pid)
179
- raise "Forked convergence run failed" unless result.last.success?
180
- Chef::Log.info "Forked child successfully reaped (pid: #{pid})"
208
+ handle_child_exit(result)
209
+ Chef::Log.debug "Forked child successfully reaped (pid: #{pid})"
181
210
  true
182
211
  else
183
212
  do_run
184
213
  end
185
214
  end
186
215
 
216
+ def handle_child_exit(pid_and_status)
217
+ status = pid_and_status[1]
218
+ return true if status.success?
219
+ message = if status.signaled?
220
+ "Chef run process terminated by signal #{status.termsig} (#{Signal.list.invert[status.termsig]})"
221
+ else
222
+ "Chef run process exited unsuccessfully (exit code #{status.exitstatus})"
223
+ end
224
+ raise Exceptions::ChildConvergeError, message
225
+ end
226
+
227
+
228
+
187
229
  # Configures the Chef::Cookbook::FileVendor class to fetch file from the
188
230
  # server or disk as appropriate, creates the run context for this run, and
189
231
  # sanity checks the cookbook collection.
@@ -192,7 +234,9 @@ class Chef
192
234
  def setup_run_context
193
235
  if Chef::Config[:solo]
194
236
  Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest, Chef::Config[:cookbook_path]) }
195
- cookbook_collection = Chef::CookbookCollection.new(Chef::CookbookLoader.new(Chef::Config[:cookbook_path]))
237
+ cl = Chef::CookbookLoader.new(Chef::Config[:cookbook_path])
238
+ cl.load_cookbooks
239
+ cookbook_collection = Chef::CookbookCollection.new(cl)
196
240
  run_context = Chef::RunContext.new(node, cookbook_collection, @events)
197
241
  else
198
242
  Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::RemoteFileVendor.new(manifest, rest) }
@@ -212,7 +256,7 @@ class Chef
212
256
  Chef::Log.debug("Saving the current state of node #{node_name}")
213
257
  if(@original_runlist)
214
258
  @node.run_list(*@original_runlist)
215
- @node.set[:runlist_override_history] = {Time.now.to_i => @override_runlist.inspect}
259
+ @node.automatic_attrs[:runlist_override_history] = {Time.now.to_i => @override_runlist.inspect}
216
260
  end
217
261
  @node.save
218
262
  end
@@ -248,7 +292,7 @@ class Chef
248
292
  def build_node
249
293
  # Allow user to override the environment of a node by specifying
250
294
  # a config parameter.
251
- if Chef::Config[:environment] && !Chef::Config[:environment].chomp.empty?
295
+ if Chef::Config[:environment] && !Chef::Config[:environment].chop.empty?
252
296
  @node.chef_environment(Chef::Config[:environment])
253
297
  end
254
298
 
@@ -329,7 +373,7 @@ class Chef
329
373
  else
330
374
  @events.registration_start(node_name, config)
331
375
  Chef::Log.info("Client key #{config[:client_key]} is not present - registering")
332
- Chef::REST.new(config[:client_url], config[:validation_client_name], config[:validation_key]).register(client_name, config[:client_key])
376
+ Chef::ApiClient::Registration.new(node_name, config[:client_key]).run
333
377
  @events.registration_completed
334
378
  end
335
379
  # We now have the client key, and should use it from now on.
@@ -385,12 +429,31 @@ class Chef
385
429
  runner.converge
386
430
  @events.converge_complete
387
431
  true
388
- rescue Exception => e
432
+ rescue Exception
389
433
  # TODO: should this be a separate #converge_failed(exception) method?
390
434
  @events.converge_complete
391
435
  raise
392
436
  end
393
437
 
438
+ def do_windows_admin_check
439
+ if Chef::Platform.windows?
440
+ Chef::Log.debug("Checking for administrator privileges....")
441
+
442
+ if !has_admin_privileges?
443
+ message = "chef-client doesn't have administrator privileges on node #{node_name}."
444
+ if Chef::Config[:fatal_windows_admin_check]
445
+ Chef::Log.fatal(message)
446
+ Chef::Log.fatal("fatal_windows_admin_check is set to TRUE.")
447
+ raise Chef::Exceptions::WindowsNotAdmin, message
448
+ else
449
+ Chef::Log.warn("#{message} This might cause unexpected resource failures.")
450
+ end
451
+ else
452
+ Chef::Log.debug("chef-client has administrator privileges on node #{node_name}.")
453
+ end
454
+ end
455
+ end
456
+
394
457
  private
395
458
 
396
459
  # Do a full run for this Chef::Client. Calls:
@@ -404,24 +467,28 @@ class Chef
404
467
  # === Returns
405
468
  # true:: Always returns true.
406
469
  def do_run
407
- run_context = nil
408
-
409
- @events.run_start(Chef::VERSION)
410
- Chef::Log.info("*** Chef #{Chef::VERSION} ***")
411
- enforce_path_sanity
412
- run_ohai
413
- @events.ohai_completed(node)
414
- register unless Chef::Config[:solo]
470
+ runlock = RunLock.new(Chef::Config)
471
+ runlock.acquire
472
+ # don't add code that may fail before entering this section to be sure to release lock
473
+ begin
474
+ run_context = nil
475
+ @events.run_start(Chef::VERSION)
476
+ Chef::Log.info("*** Chef #{Chef::VERSION} ***")
477
+ enforce_path_sanity
478
+ run_ohai
479
+ @events.ohai_completed(node)
480
+ register unless Chef::Config[:solo]
415
481
 
416
- load_node
482
+ load_node
417
483
 
418
- begin
419
484
  build_node
420
485
 
421
486
  run_status.start_clock
422
487
  Chef::Log.info("Starting Chef Run for #{node.name}")
423
488
  run_started
424
489
 
490
+ do_windows_admin_check
491
+
425
492
  run_context = setup_run_context
426
493
 
427
494
  converge(run_context)
@@ -442,11 +509,13 @@ class Chef
442
509
  run_status.exception = e
443
510
  run_failed
444
511
  end
512
+ Chef::Application.debug_stacktrace(e)
445
513
  @events.run_failed(e)
446
514
  raise
447
515
  ensure
448
- run_status = nil
516
+ @run_status = nil
449
517
  run_context = nil
518
+ runlock.release
450
519
  GC.start
451
520
  end
452
521
  true
@@ -496,6 +565,13 @@ class Chef
496
565
  end
497
566
 
498
567
  end
568
+
569
+ def has_admin_privileges?
570
+ require 'chef/win32/security'
571
+
572
+ Chef::ReservedNames::Win32::Security.has_admin_privileges?
573
+ end
574
+
499
575
  end
500
576
  end
501
577
 
@@ -503,3 +579,4 @@ end
503
579
  require 'chef/cookbook_loader'
504
580
  require 'chef/cookbook_version'
505
581
  require 'chef/cookbook/synchronizer'
582
+
@@ -2,7 +2,8 @@
2
2
  # Author:: Adam Jacob (<adam@opscode.com>)
3
3
  # Author:: Christopher Brown (<cb@opscode.com>)
4
4
  # Author:: AJ Christensen (<aj@opscode.com>)
5
- # Author:: Mark Mzyk (mmzyk@opscode.com)
5
+ # Author:: Mark Mzyk (<mmzyk@opscode.com>)
6
+ # Author:: Kyle Goodwin (<kgoodwin@primerevenue.com>)
6
7
  # Copyright:: Copyright (c) 2008 Opscode, Inc.
7
8
  # License:: Apache License, Version 2.0
8
9
  #
@@ -19,7 +20,9 @@
19
20
  # limitations under the License.
20
21
 
21
22
  require 'chef/log'
23
+ require 'chef/exceptions'
22
24
  require 'mixlib/config'
25
+ require 'chef/util/selinux'
23
26
 
24
27
  class Chef
25
28
  class Config
@@ -48,9 +51,6 @@ class Chef
48
51
  end
49
52
 
50
53
  def self.platform_specific_path(path)
51
- #10.times { puts "* " * 40}
52
- #pp caller
53
-
54
54
  if RUBY_PLATFORM =~ /mswin|mingw|windows/
55
55
  # turns /etc/chef/client.rb into C:/chef/client.rb
56
56
  system_drive = ENV['SYSTEMDRIVE'] ? ENV['SYSTEMDRIVE'] : ""
@@ -61,6 +61,14 @@ class Chef
61
61
  path
62
62
  end
63
63
 
64
+ def self.add_formatter(name, file_path=nil)
65
+ formatters << [name, file_path]
66
+ end
67
+
68
+ def self.formatters
69
+ @formatters ||= []
70
+ end
71
+
64
72
  # Override the config dispatch to set the value of multiple server options simultaneously
65
73
  #
66
74
  # === Parameters
@@ -69,14 +77,7 @@ class Chef
69
77
  config_attr_writer :chef_server_url do |url|
70
78
  url = url.strip
71
79
  configure do |c|
72
- [ :registration_url,
73
- :template_url,
74
- :remotefile_url,
75
- :search_url,
76
- :chef_server_url,
77
- :role_url ].each do |u|
78
- c[u] = url
79
- end
80
+ c[:chef_server_url] = url
80
81
  end
81
82
  url
82
83
  end
@@ -104,35 +105,19 @@ class Chef
104
105
  begin
105
106
  f = File.new(location.to_str, "a")
106
107
  f.sync = true
107
- rescue Errno::ENOENT => error
108
- raise Chef::Exceptions::ConfigurationError("Failed to open or create log file at #{location.to_str}")
108
+ rescue Errno::ENOENT
109
+ raise Chef::Exceptions::ConfigurationError, "Failed to open or create log file at #{location.to_str}"
109
110
  end
110
111
  f
111
112
  end
112
113
  end
113
114
 
114
- # Override the config dispatch to set the value of authorized_openid_providers when openid_providers (deprecated) is used
115
- #
116
- # === Parameters
117
- # providers<Array>:: An array of openid providers that are authorized to login to the chef server
118
- #
119
- config_attr_writer :openid_providers do |providers|
120
- configure { |c| c[:authorized_openid_providers] = providers }
121
- providers
122
- end
123
-
124
115
  # Turn on "path sanity" by default. See also: http://wiki.opscode.com/display/chef/User+Environment+PATH+Sanity
125
116
  enforce_path_sanity(true)
126
117
 
127
118
  # Formatted Chef Client output is a beta feature, disabled by default:
128
119
  formatter "null"
129
120
 
130
- # Used when OpenID authentication is enabled in the Web UI
131
- authorized_openid_identifiers nil
132
- authorized_openid_providers nil
133
- openid_cstore_couchdb false
134
- openid_cstore_path "/var/chef/openid/cstore"
135
-
136
121
  # The number of times the client should retry when registering with the server
137
122
  client_registration_retries 5
138
123
 
@@ -144,64 +129,72 @@ class Chef
144
129
  # An array of paths to search for knife exec scripts if they aren't in the current directory
145
130
  script_path []
146
131
 
147
- # Where files are stored temporarily during uploads
148
- sandbox_path "/var/chef/sandboxes"
149
-
150
132
  # Where cookbook files are stored on the server (by content checksum)
151
133
  checksum_path "/var/chef/checksums"
152
134
 
153
- # CouchDB database name to use
154
- couchdb_database "chef"
155
-
156
- couchdb_url "http://localhost:5984"
157
-
158
135
  # Where chef's cache files should be stored
159
136
  file_cache_path platform_specific_path("/var/chef/cache")
160
137
 
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.
141
+ #
142
+ # If your `file_cache_path` resides on a NFS (or non-flock()-supporting
143
+ # fs), it's recommended to set this to something like
144
+ # '/tmp/chef-client-running.pid'
145
+ lockfile nil
146
+
161
147
  # Where backups of chef-managed files should go
162
148
  file_backup_path platform_specific_path("/var/chef/backup")
163
149
 
164
150
  ## Daemonization Settings ##
165
151
  # What user should Chef run as?
166
152
  user nil
167
- # What group should the chef-server, -solr, -solr-indexer run as
168
153
  group nil
169
154
  umask 0022
170
155
 
156
+ # Valid log_levels are:
157
+ # * :debug
158
+ # * :info
159
+ # * :warn
160
+ # * :fatal
161
+ # These work as you'd expect. There is also a special `:auto` setting.
162
+ # When set to :auto, Chef will auto adjust the log verbosity based on
163
+ # context. When a tty is available (usually becase the user is running chef
164
+ # in a console), the log level is set to :warn, and output formatters are
165
+ # used as the primary mode of output. When a tty is not available, the
166
+ # logger is the primary mode of output, and the log level is set to :info
167
+ log_level :auto
168
+
169
+ # Using `force_formatter` causes chef to default to formatter output when STDOUT is not a tty
170
+ force_formatter false
171
+
172
+ # Using `force_logger` causes chef to default to logger output when STDOUT is a tty
173
+ force_logger false
174
+
171
175
  http_retry_count 5
172
176
  http_retry_delay 5
173
177
  interval nil
174
178
  json_attribs nil
175
- log_level :info
176
179
  log_location STDOUT
177
180
  # toggle info level log items that can create a lot of output
178
181
  verbose_logging true
179
182
  node_name nil
180
- node_path "/var/chef/node"
181
- diff_disable false
183
+ diff_disabled false
182
184
  diff_filesize_threshold 10000000
183
185
  diff_output_threshold 1000000
184
186
 
185
187
  pid_file nil
186
188
 
187
- chef_server_url "http://localhost:4000"
188
- registration_url "http://localhost:4000"
189
- template_url "http://localhost:4000"
190
- role_url "http://localhost:4000"
191
- remotefile_url "http://localhost:4000"
192
- search_url "http://localhost:4000"
193
-
194
- client_url "http://localhost:4042"
189
+ chef_server_url "https://localhost:443"
195
190
 
196
191
  rest_timeout 300
197
- yum_timeout 120
198
- run_command_stderr_timeout 120
199
- run_command_stdout_timeout 120
192
+ yum_timeout 900
200
193
  solo false
201
194
  splay nil
202
195
  why_run false
203
196
  color false
204
- client_fork false
197
+ client_fork true
205
198
  enable_reporting true
206
199
  enable_reporting_url_fatals false
207
200
 
@@ -213,32 +206,16 @@ class Chef
213
206
  ssl_ca_path nil
214
207
  ssl_ca_file nil
215
208
 
216
-
217
209
  # Where should chef-solo look for role files?
218
210
  role_path platform_specific_path("/var/chef/roles")
219
211
 
220
212
  data_bag_path platform_specific_path("/var/chef/data_bags")
221
213
 
214
+ environment_path platform_specific_path("/var/chef/environments")
215
+
222
216
  # Where should chef-solo download recipes from?
223
217
  recipe_url nil
224
218
 
225
- solr_url "http://localhost:8983/solr"
226
- solr_jetty_path "/var/chef/solr-jetty"
227
- solr_data_path "/var/chef/solr/data"
228
- solr_home_path "/var/chef/solr"
229
- solr_heap_size "256M"
230
- solr_java_opts nil
231
-
232
- # Parameters for connecting to RabbitMQ
233
- amqp_host '0.0.0.0'
234
- amqp_port '5672'
235
- amqp_user 'chef'
236
- amqp_pass 'testing'
237
- amqp_vhost '/chef'
238
- # Setting this to a UUID string also makes the queue durable
239
- # (persist across rabbitmq restarts)
240
- amqp_consumer_id "default"
241
-
242
219
  # Sets the version of the signed header authentication protocol to use (see
243
220
  # the 'mixlib-authorization' project for more detail). Currently, versions
244
221
  # 1.0 and 1.1 are available; however, the chef-server must first be
@@ -263,6 +240,32 @@ class Chef
263
240
  # `node_name` of the client.
264
241
  client_key platform_specific_path("/etc/chef/client.pem")
265
242
 
243
+ # 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)
252
+ end
253
+
254
+ # As of Chef 11.0, version "1" is the default encrypted data bag item
255
+ # format. Version "2" is available which adds encrypt-then-mac protection.
256
+ # To maintain compatibility, versions other than 1 must be opt-in.
257
+ #
258
+ # Set this to `2` if you have chef-client 11.6.0+ in your infrastructure:
259
+ data_bag_encrypt_version 1
260
+
261
+ # When reading data bag items, any supported version is accepted. However,
262
+ # if all encrypted data bags have been generated with the version 2 format,
263
+ # it is recommended to disable support for earlier formats to improve
264
+ # security. For example, the version 2 format is identical to version 1
265
+ # except for the addition of an HMAC, so an attacker with MITM capability
266
+ # could downgrade an encrypted data bag to version 1 as part of an attack.
267
+ data_bag_decrypt_minimum_version 0
268
+
266
269
  # If there is no file in the location given by `client_key`, chef-client
267
270
  # will temporarily use the "validator" identity to generate one. If the
268
271
  # `client_key` is not present and the `validation_key` is also not present,
@@ -271,41 +274,35 @@ class Chef
271
274
  # The `validation_key` is never used if the `client_key` exists.
272
275
  validation_key platform_specific_path("/etc/chef/validation.pem")
273
276
  validation_client_name "chef-validator"
274
- web_ui_client_name "chef-webui"
275
- web_ui_key "/etc/chef/webui.pem"
276
- web_ui_admin_user_name "admin"
277
- web_ui_admin_default_password "p@ssw0rd1"
278
277
 
279
- # Server Signing CA
280
- #
281
- # In truth, these don't even have to change
282
- signing_ca_cert "/var/chef/ca/cert.pem"
283
- signing_ca_key "/var/chef/ca/key.pem"
284
- signing_ca_user nil
285
- signing_ca_group nil
286
- signing_ca_country "US"
287
- signing_ca_state "Washington"
288
- signing_ca_location "Seattle"
289
- signing_ca_org "Chef User"
290
- signing_ca_domain "opensource.opscode.com"
291
- signing_ca_email "opensource-cert@opscode.com"
278
+ # Zypper package provider gpg checks. Set to true to enable package
279
+ # gpg signature checking. This will be default in the
280
+ # future. Setting to false disables the warnings.
281
+ # Leaving this set to nil or false is a security hazard!
282
+ zypper_check_gpg nil
292
283
 
293
284
  # Report Handlers
294
285
  report_handlers []
295
286
 
296
- # Event Handlers
297
- event_handlers []
298
-
299
287
  # Exception Handlers
300
288
  exception_handlers []
301
289
 
302
290
  # Start handlers
303
291
  start_handlers []
304
292
 
305
- # Checksum Cache
306
- # Uses Moneta on the back-end
307
- cache_type "BasicFile"
308
- cache_options({ :path => platform_specific_path("/var/chef/cache/checksums"), :skip_expires => true })
293
+ # Syntax Check Cache. Knife keeps track of files that is has already syntax
294
+ # checked by storing files in this directory. `syntax_check_cache_path` is
295
+ # 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
303
+
304
+ # Deprecated:
305
+ cache_options({ :path => platform_specific_path("/var/chef/cache/checksums") })
309
306
 
310
307
  # Set to false to silence Chef 11 deprecation warnings:
311
308
  chef11_deprecation_warnings true
@@ -321,17 +318,29 @@ class Chef
321
318
  principal_valid_regex_part = '[^"\/\\\\\[\]\:;|=,+*?<>]+'
322
319
  user_valid_regex [ /^(#{principal_valid_regex_part}\\)?#{principal_valid_regex_part}$/ ]
323
320
  group_valid_regex [ /^(#{principal_valid_regex_part}\\)?#{principal_valid_regex_part}$/ ]
321
+
322
+ fatal_windows_admin_check false
324
323
  else
325
- user_valid_regex [ /^([-a-zA-Z0-9_.]+)$/, /^\d+$/ ]
326
- group_valid_regex [ /^([-a-zA-Z0-9_.\\ ]+)$/, /^\d+$/ ]
324
+ user_valid_regex [ /^([-a-zA-Z0-9_.]+[\\@]?[-a-zA-Z0-9_.]+)$/, /^\d+$/ ]
325
+ group_valid_regex [ /^([-a-zA-Z0-9_.\\@^ ]+)$/, /^\d+$/ ]
327
326
  end
328
327
 
329
328
  # returns a platform specific path to the user home dir
330
329
  windows_home_path = ENV['SYSTEMDRIVE'] + ENV['HOMEPATH'] if ENV['SYSTEMDRIVE'] && ENV['HOMEPATH']
331
- user_home (ENV['HOME'] || windows_home_path || ENV['USERPROFILE'])
330
+ user_home(ENV['HOME'] || windows_home_path || ENV['USERPROFILE'])
331
+
332
+ # Enable file permission fixup for selinux. Fixup will be done
333
+ # only if selinux is enabled in the system.
334
+ enable_selinux_file_permission_fixup true
335
+
336
+ # Use atomic updates (i.e. move operation) while updating contents
337
+ # of the files resources. When set to false copy operation is
338
+ # used to update files.
339
+ file_atomic_update true
332
340
 
333
- # CHEF-4631
334
- # Enables the concatanation behavior instead of merging
335
- deep_merge_array_concat true
341
+ # If false file staging is will be done via tempfiles that are
342
+ # created under ENV['TMP'] otherwise tempfiles will be created in
343
+ # the directory that files are going to reside.
344
+ file_staging_uses_destdir false
336
345
  end
337
346
  end