chef 10.34.6 → 11.0.0.beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. data/CONTRIBUTING.md +155 -0
  2. data/README.md +89 -0
  3. data/Rakefile +4 -12
  4. data/bin/chef-apply +25 -0
  5. data/bin/chef-shell +34 -0
  6. data/bin/shef +6 -5
  7. data/distro/common/html/chef-client.8.html +4 -4
  8. data/distro/common/html/chef-expander.8.html +4 -4
  9. data/distro/common/html/chef-expanderctl.8.html +4 -4
  10. data/distro/common/html/chef-server-webui.8.html +4 -4
  11. data/distro/common/html/chef-server.8.html +4 -4
  12. data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
  13. data/distro/common/html/chef-solo.8.html +18 -12
  14. data/distro/common/html/chef-solr.8.html +4 -4
  15. data/distro/common/html/knife-bootstrap.1.html +4 -4
  16. data/distro/common/html/knife-client.1.html +4 -4
  17. data/distro/common/html/knife-configure.1.html +4 -4
  18. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  19. data/distro/common/html/knife-cookbook.1.html +10 -7
  20. data/distro/common/html/knife-data-bag.1.html +10 -7
  21. data/distro/common/html/knife-environment.1.html +8 -6
  22. data/distro/common/html/knife-exec.1.html +9 -9
  23. data/distro/common/html/knife-index.1.html +4 -4
  24. data/distro/common/html/knife-node.1.html +4 -4
  25. data/distro/common/html/knife-role.1.html +4 -4
  26. data/distro/common/html/knife-search.1.html +4 -4
  27. data/distro/common/html/knife-ssh.1.html +4 -4
  28. data/distro/common/html/knife-status.1.html +4 -4
  29. data/distro/common/html/knife-tag.1.html +4 -4
  30. data/distro/common/html/knife.1.html +8 -13
  31. data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
  32. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  33. data/distro/common/man/man1/knife-client.1 +1 -1
  34. data/distro/common/man/man1/knife-configure.1 +1 -1
  35. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  36. data/distro/common/man/man1/knife-cookbook.1 +15 -2
  37. data/distro/common/man/man1/knife-data-bag.1 +15 -2
  38. data/distro/common/man/man1/knife-environment.1 +12 -2
  39. data/distro/common/man/man1/knife-exec.1 +4 -7
  40. data/distro/common/man/man1/knife-index.1 +1 -1
  41. data/distro/common/man/man1/knife-node.1 +1 -1
  42. data/distro/common/man/man1/knife-role.1 +1 -1
  43. data/distro/common/man/man1/knife-search.1 +1 -1
  44. data/distro/common/man/man1/knife-ssh.1 +1 -1
  45. data/distro/common/man/man1/knife-status.1 +1 -1
  46. data/distro/common/man/man1/knife-tag.1 +1 -1
  47. data/distro/common/man/man1/knife.1 +3 -6
  48. data/distro/common/man/man8/chef-client.8 +1 -1
  49. data/distro/common/man/man8/chef-expander.8 +1 -1
  50. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  51. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  52. data/distro/common/man/man8/chef-server.8 +1 -1
  53. data/distro/common/man/man8/chef-solo.8 +36 -4
  54. data/distro/common/man/man8/chef-solr.8 +1 -1
  55. data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
  56. data/distro/common/markdown/man1/knife-exec.mkd +11 -6
  57. data/distro/common/markdown/man1/knife.mkd +4 -9
  58. data/distro/debian/etc/default/chef-client +0 -1
  59. data/distro/debian/etc/init.d/chef-client +2 -2
  60. data/lib/chef.rb +2 -5
  61. data/lib/chef/api_client.rb +20 -130
  62. data/lib/chef/api_client/registration.rb +126 -0
  63. data/lib/chef/application.rb +71 -14
  64. data/lib/chef/application/apply.rb +160 -0
  65. data/lib/chef/application/client.rb +25 -18
  66. data/lib/chef/application/knife.rb +0 -2
  67. data/lib/chef/application/solo.rb +23 -8
  68. data/lib/chef/application/windows_service.rb +5 -2
  69. data/lib/chef/applications.rb +1 -0
  70. data/lib/chef/chef_fs.rb +11 -0
  71. data/lib/chef/chef_fs/command_line.rb +232 -0
  72. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  73. data/lib/chef/chef_fs/file_system.rb +358 -0
  74. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
  75. data/lib/chef/chef_fs/file_system/base_fs_object.rb +121 -0
  76. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +109 -0
  77. data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb} +12 -15
  78. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +84 -0
  79. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +188 -0
  80. data/lib/chef/chef_fs/file_system/cookbook_file.rb +78 -0
  81. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  82. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +68 -0
  83. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +78 -0
  84. data/lib/chef/chef_fs/file_system/data_bag_item.rb +59 -0
  85. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +66 -0
  86. data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
  87. data/lib/chef/{index_queue.rb → chef_fs/file_system/file_system_error.rb} +14 -12
  88. data/lib/chef/{resource/whyrun_safe_ruby_block.rb → chef_fs/file_system/file_system_root_dir.rb} +10 -10
  89. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  90. data/lib/chef/chef_fs/file_system/nodes_dir.rb +47 -0
  91. data/lib/chef/{provider/whyrun_safe_ruby_block.rb → chef_fs/file_system/nonexistent_fs_object.rb} +19 -9
  92. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  93. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +84 -0
  94. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +123 -0
  95. data/lib/chef/chef_fs/knife.rb +77 -0
  96. data/lib/chef/chef_fs/path_utils.rb +64 -0
  97. data/lib/chef/client.rb +44 -21
  98. data/lib/chef/config.rb +52 -43
  99. data/lib/chef/cookbook/synchronizer.rb +6 -8
  100. data/lib/chef/cookbook/syntax_check.rb +61 -14
  101. data/lib/chef/cookbook_loader.rb +39 -26
  102. data/lib/chef/cookbook_uploader.rb +17 -19
  103. data/lib/chef/cookbook_version.rb +3 -302
  104. data/lib/chef/daemon.rb +3 -18
  105. data/lib/chef/data_bag.rb +4 -97
  106. data/lib/chef/data_bag_item.rb +2 -65
  107. data/lib/chef/digester.rb +73 -0
  108. data/lib/chef/dsl.rb +6 -0
  109. data/lib/chef/dsl/data_query.rb +66 -0
  110. data/lib/chef/dsl/include_attribute.rb +60 -0
  111. data/lib/chef/dsl/include_recipe.rb +42 -0
  112. data/lib/chef/dsl/platform_introspection.rb +213 -0
  113. data/lib/chef/dsl/recipe.rb +84 -0
  114. data/lib/chef/dsl/registry_helper.rb +59 -0
  115. data/lib/chef/encrypted_data_bag_item.rb +74 -19
  116. data/lib/chef/environment.rb +9 -180
  117. data/lib/chef/exceptions.rb +87 -14
  118. data/lib/chef/formatters/base.rb +4 -1
  119. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +0 -4
  120. data/lib/chef/json_compat.rb +1 -97
  121. data/lib/chef/knife.rb +90 -41
  122. data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
  123. data/lib/chef/knife/bootstrap/centos5-gems.erb +2 -2
  124. data/lib/chef/knife/bootstrap/chef-full.erb +3 -3
  125. data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -2
  126. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
  127. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +2 -2
  128. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +2 -2
  129. data/lib/chef/knife/configure.rb +1 -2
  130. data/lib/chef/knife/cookbook_metadata.rb +1 -0
  131. data/lib/chef/knife/cookbook_test.rb +3 -2
  132. data/lib/chef/knife/cookbook_upload.rb +12 -7
  133. data/lib/chef/knife/core/bootstrap_context.rb +1 -1
  134. data/lib/chef/knife/core/generic_presenter.rb +26 -13
  135. data/lib/chef/knife/core/node_editor.rb +36 -16
  136. data/lib/chef/knife/core/node_presenter.rb +1 -1
  137. data/lib/chef/knife/core/text_formatter.rb +23 -37
  138. data/lib/chef/knife/core/ui.rb +15 -9
  139. data/lib/chef/knife/delete.rb +39 -0
  140. data/lib/chef/knife/diff.rb +46 -0
  141. data/lib/chef/knife/download.rb +50 -0
  142. data/lib/chef/knife/environment_show.rb +7 -0
  143. data/lib/chef/knife/exec.rb +5 -5
  144. data/lib/chef/knife/help_topics.rb +1 -1
  145. data/lib/chef/knife/index_rebuild.rb +91 -7
  146. data/lib/chef/knife/list.rb +109 -0
  147. data/lib/chef/knife/raw.rb +108 -0
  148. data/lib/chef/knife/search.rb +40 -22
  149. data/lib/chef/knife/show.rb +32 -0
  150. data/lib/chef/knife/ssh.rb +6 -2
  151. data/lib/chef/knife/upload.rb +50 -0
  152. data/lib/chef/mixin/checksum.rb +3 -3
  153. data/lib/chef/mixin/deep_merge.rb +55 -197
  154. data/lib/chef/mixin/language.rb +9 -222
  155. data/lib/chef/mixin/language_include_attribute.rb +6 -38
  156. data/lib/chef/mixin/language_include_recipe.rb +3 -35
  157. data/lib/chef/mixin/params_validate.rb +6 -19
  158. data/lib/chef/mixin/recipe_definition_dsl_core.rb +8 -61
  159. data/lib/chef/mixin/securable.rb +32 -7
  160. data/lib/chef/mixin/template.rb +40 -0
  161. data/lib/chef/mixins.rb +0 -4
  162. data/lib/chef/monkey_patches/net_http.rb +0 -34
  163. data/lib/chef/node.rb +133 -309
  164. data/lib/chef/node/attribute.rb +333 -473
  165. data/lib/chef/node/attribute_collections.rb +199 -0
  166. data/lib/chef/node/immutable_collections.rb +186 -0
  167. data/lib/chef/platform.rb +7 -22
  168. data/lib/chef/provider.rb +2 -49
  169. data/lib/chef/provider/breakpoint.rb +6 -6
  170. data/lib/chef/provider/cookbook_file.rb +5 -33
  171. data/lib/chef/provider/deploy.rb +2 -1
  172. data/lib/chef/provider/directory.rb +14 -17
  173. data/lib/chef/provider/file.rb +19 -52
  174. data/lib/chef/provider/group.rb +31 -51
  175. data/lib/chef/provider/group/dscl.rb +13 -53
  176. data/lib/chef/provider/group/gpasswd.rb +19 -14
  177. data/lib/chef/provider/group/groupadd.rb +1 -41
  178. data/lib/chef/provider/group/groupmod.rb +36 -46
  179. data/lib/chef/provider/group/pw.rb +16 -59
  180. data/lib/chef/provider/group/suse.rb +13 -16
  181. data/lib/chef/provider/group/usermod.rb +18 -40
  182. data/lib/chef/provider/group/windows.rb +6 -13
  183. data/lib/chef/provider/http_request.rb +25 -42
  184. data/lib/chef/provider/link.rb +2 -0
  185. data/lib/chef/provider/lwrp_base.rb +150 -0
  186. data/lib/chef/provider/package/portage.rb +4 -9
  187. data/lib/chef/provider/package/rpm.rb +2 -2
  188. data/lib/chef/provider/package/rubygems.rb +9 -41
  189. data/lib/chef/provider/package/yum.rb +12 -19
  190. data/lib/chef/provider/registry_key.rb +156 -0
  191. data/lib/chef/provider/remote_directory.rb +2 -0
  192. data/lib/chef/provider/remote_file.rb +21 -12
  193. data/lib/chef/provider/ruby_block.rb +5 -2
  194. data/lib/chef/provider/service.rb +15 -0
  195. data/lib/chef/provider/service/init.rb +9 -7
  196. data/lib/chef/provider/service/macosx.rb +15 -73
  197. data/lib/chef/provider/service/simple.rb +1 -1
  198. data/lib/chef/provider/service/solaris.rb +3 -3
  199. data/lib/chef/provider/template.rb +22 -25
  200. data/lib/chef/provider/template_finder.rb +61 -0
  201. data/lib/chef/provider/user.rb +0 -1
  202. data/lib/chef/provider/user/dscl.rb +175 -568
  203. data/lib/chef/provider/user/useradd.rb +30 -47
  204. data/lib/chef/providers.rb +3 -2
  205. data/lib/chef/recipe.rb +14 -8
  206. data/lib/chef/resource.rb +13 -154
  207. data/lib/chef/resource/group.rb +1 -11
  208. data/lib/chef/resource/http_request.rb +2 -1
  209. data/lib/chef/resource/lwrp_base.rb +127 -0
  210. data/lib/chef/resource/mount.rb +10 -11
  211. data/lib/chef/resource/registry_key.rb +86 -0
  212. data/lib/chef/resource/remote_directory.rb +6 -5
  213. data/lib/chef/resource/remote_file.rb +22 -31
  214. data/lib/chef/resource/ruby_block.rb +2 -2
  215. data/lib/chef/resource/service.rb +14 -0
  216. data/lib/chef/resource/user.rb +0 -18
  217. data/lib/chef/resource_collection.rb +25 -21
  218. data/lib/chef/resources.rb +2 -1
  219. data/lib/chef/rest.rb +50 -131
  220. data/lib/chef/rest/auth_credentials.rb +4 -20
  221. data/lib/chef/rest/rest_request.rb +2 -7
  222. data/lib/chef/role.rb +1 -97
  223. data/lib/chef/run_context.rb +108 -130
  224. data/lib/chef/run_context/cookbook_compiler.rb +280 -0
  225. data/lib/chef/run_list.rb +0 -2
  226. data/lib/chef/run_list/run_list_expansion.rb +0 -15
  227. data/lib/chef/run_lock.rb +90 -0
  228. data/lib/chef/runner.rb +28 -5
  229. data/lib/chef/sandbox.rb +15 -148
  230. data/lib/chef/scan_access_control.rb +2 -4
  231. data/lib/chef/shef/ext.rb +3 -575
  232. data/lib/chef/{shef.rb → shell.rb} +35 -40
  233. data/lib/chef/shell/ext.rb +593 -0
  234. data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
  235. data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
  236. data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +17 -15
  237. data/lib/chef/shell_out.rb +7 -0
  238. data/lib/chef/util/windows/net_group.rb +1 -5
  239. data/lib/chef/version.rb +3 -3
  240. data/lib/chef/win32/api/process.rb +0 -1
  241. data/lib/chef/win32/handle.rb +1 -8
  242. data/lib/chef/win32/registry.rb +371 -0
  243. data/spec/data/big_json.json +1 -2
  244. data/spec/data/big_json_plus_one.json +1 -2
  245. data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
  246. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  247. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  248. data/spec/data/nodes/default.rb +3 -3
  249. data/spec/data/nodes/test.example.com.rb +3 -3
  250. data/spec/data/nodes/test.rb +3 -3
  251. data/spec/data/partial_one.erb +1 -0
  252. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  253. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  254. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  255. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  256. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  257. data/spec/data/{knife-home/.chef/plugins/knife/example_home_subcommand.rb → run_context/cookbooks/circular-dep1/recipes/default.rb} +0 -0
  258. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  259. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  260. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  261. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  262. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  263. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  264. data/spec/data/{lwrp_const_scoping/resources/conflict.rb → run_context/cookbooks/circular-dep2/recipes/default.rb} +0 -0
  265. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  266. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  267. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  268. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  269. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  270. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  271. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  272. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  273. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  274. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  275. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  276. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  277. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  278. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  279. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  280. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  281. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  282. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  283. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  284. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  285. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  286. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  287. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  288. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  289. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  290. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  291. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  292. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  293. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  294. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  295. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  296. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  297. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  298. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  299. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  300. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  301. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  302. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  303. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  304. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  305. data/spec/data/shef-config.rb +7 -0
  306. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  307. data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
  308. data/spec/functional/knife/exec_spec.rb +2 -2
  309. data/spec/functional/knife/ssh_spec.rb +5 -1
  310. data/spec/functional/resource/cookbook_file_spec.rb +7 -19
  311. data/spec/functional/resource/directory_spec.rb +4 -0
  312. data/spec/functional/resource/file_spec.rb +56 -22
  313. data/spec/functional/resource/link_spec.rb +2 -0
  314. data/spec/functional/resource/registry_spec.rb +576 -0
  315. data/spec/functional/resource/remote_directory_spec.rb +142 -36
  316. data/spec/functional/resource/remote_file_spec.rb +18 -0
  317. data/spec/functional/resource/template_spec.rb +23 -2
  318. data/spec/functional/run_lock_spec.rb +106 -0
  319. data/spec/functional/shell_spec.rb +100 -0
  320. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  321. data/spec/spec_helper.rb +5 -29
  322. data/spec/stress/win32/security_spec.rb +1 -1
  323. data/spec/support/chef_helpers.rb +0 -2
  324. data/spec/support/platform_helpers.rb +8 -15
  325. data/spec/support/shared/functional/directory_resource.rb +84 -22
  326. data/spec/support/shared/functional/file_resource.rb +169 -71
  327. data/spec/support/shared/functional/securable_resource.rb +143 -119
  328. data/spec/support/shared/functional/securable_resource_with_reporting.rb +375 -0
  329. data/spec/support/shared/unit/file_system_support.rb +110 -0
  330. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  331. data/spec/unit/api_client/registration_spec.rb +175 -0
  332. data/spec/unit/api_client_spec.rb +78 -156
  333. data/spec/unit/application/apply.rb +84 -0
  334. data/spec/unit/application/client_spec.rb +1 -37
  335. data/spec/unit/application/knife_spec.rb +5 -0
  336. data/spec/unit/application_spec.rb +57 -2
  337. data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
  338. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  339. data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
  340. data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +237 -0
  341. data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +568 -0
  342. data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +220 -0
  343. data/spec/unit/chef_fs/file_system_spec.rb +136 -0
  344. data/spec/unit/client_spec.rb +124 -33
  345. data/spec/unit/config_spec.rb +46 -13
  346. data/spec/unit/cookbook/synchronizer_spec.rb +1 -49
  347. data/spec/unit/cookbook/syntax_check_spec.rb +48 -109
  348. data/spec/unit/cookbook_loader_spec.rb +153 -91
  349. data/spec/unit/cookbook_manifest_spec.rb +81 -81
  350. data/spec/unit/cookbook_spec.rb +3 -20
  351. data/spec/unit/cookbook_version_spec.rb +23 -122
  352. data/spec/unit/daemon_spec.rb +3 -24
  353. data/spec/unit/data_bag_spec.rb +6 -4
  354. data/spec/unit/digester_spec.rb +50 -0
  355. data/spec/unit/dsl/data_query_spec.rb +66 -0
  356. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  357. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  358. data/spec/unit/encrypted_data_bag_item_spec.rb +50 -105
  359. data/spec/unit/environment_spec.rb +0 -130
  360. data/spec/unit/exceptions_spec.rb +2 -3
  361. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -3
  362. data/spec/unit/json_compat_spec.rb +15 -7
  363. data/spec/unit/knife/bootstrap_spec.rb +2 -0
  364. data/spec/unit/knife/configure_spec.rb +20 -14
  365. data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
  366. data/spec/unit/knife/cookbook_test_spec.rb +1 -0
  367. data/spec/unit/knife/cookbook_upload_spec.rb +43 -8
  368. data/spec/unit/knife/core/bootstrap_context_spec.rb +1 -1
  369. data/spec/unit/knife/core/ui_spec.rb +156 -125
  370. data/spec/unit/knife/data_bag_create_spec.rb +9 -0
  371. data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
  372. data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
  373. data/spec/unit/knife/data_bag_show_spec.rb +11 -4
  374. data/spec/unit/knife/index_rebuild_spec.rb +96 -33
  375. data/spec/unit/knife/knife_help.rb +7 -7
  376. data/spec/unit/knife/node_edit_spec.rb +6 -33
  377. data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
  378. data/spec/unit/knife/ssh_spec.rb +12 -15
  379. data/spec/unit/knife/status_spec.rb +2 -2
  380. data/spec/unit/knife_spec.rb +53 -0
  381. data/spec/unit/lwrp_spec.rb +59 -42
  382. data/spec/unit/mixin/checksum_spec.rb +2 -2
  383. data/spec/unit/mixin/deep_merge_spec.rb +101 -799
  384. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +6 -1
  385. data/spec/unit/mixin/params_validate_spec.rb +4 -37
  386. data/spec/unit/mixin/securable_spec.rb +5 -3
  387. data/spec/unit/mixin/template_spec.rb +119 -0
  388. data/spec/unit/node/attribute_spec.rb +195 -173
  389. data/spec/unit/node/immutable_collections_spec.rb +139 -0
  390. data/spec/unit/node_spec.rb +366 -370
  391. data/spec/unit/platform_spec.rb +9 -10
  392. data/spec/unit/provider/breakpoint_spec.rb +8 -8
  393. data/spec/unit/provider/cookbook_file_spec.rb +4 -8
  394. data/spec/unit/provider/directory_spec.rb +96 -64
  395. data/spec/unit/provider/env_spec.rb +2 -2
  396. data/spec/unit/provider/file_spec.rb +48 -39
  397. data/spec/unit/provider/group/dscl_spec.rb +0 -36
  398. data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
  399. data/spec/unit/provider/group/groupadd_spec.rb +4 -3
  400. data/spec/unit/provider/group/groupmod_spec.rb +1 -0
  401. data/spec/unit/provider/group/pw_spec.rb +15 -12
  402. data/spec/unit/provider/group/usermod_spec.rb +6 -21
  403. data/spec/unit/provider/group/windows_spec.rb +8 -0
  404. data/spec/unit/provider/group_spec.rb +6 -28
  405. data/spec/unit/provider/http_request_spec.rb +28 -69
  406. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  407. data/spec/unit/provider/ohai_spec.rb +4 -4
  408. data/spec/unit/provider/package/apt_spec.rb +0 -1
  409. data/spec/unit/provider/package/ips_spec.rb +0 -1
  410. data/spec/unit/provider/package/portage_spec.rb +0 -44
  411. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  412. data/spec/unit/provider/package/rubygems_spec.rb +1 -44
  413. data/spec/unit/provider/package/yum_spec.rb +39 -36
  414. data/spec/unit/provider/package_spec.rb +7 -5
  415. data/spec/unit/provider/registry_key_spec.rb +269 -0
  416. data/spec/unit/provider/remote_directory_spec.rb +7 -3
  417. data/spec/unit/provider/remote_file_spec.rb +36 -0
  418. data/spec/unit/provider/route_spec.rb +4 -3
  419. data/spec/unit/provider/ruby_block_spec.rb +8 -0
  420. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  421. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  422. data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
  423. data/spec/unit/provider/service/init_service_spec.rb +27 -4
  424. data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
  425. data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
  426. data/spec/unit/provider/service/macosx_spec.rb +11 -66
  427. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  428. data/spec/unit/provider/service/simple_service_spec.rb +3 -3
  429. data/spec/unit/provider/service/upstart_service_spec.rb +9 -9
  430. data/spec/unit/provider/subversion_spec.rb +1 -1
  431. data/spec/unit/provider/template_spec.rb +35 -11
  432. data/spec/unit/provider/user/dscl_spec.rb +285 -681
  433. data/spec/unit/provider/user/useradd_spec.rb +1 -22
  434. data/spec/unit/provider/user_spec.rb +1 -1
  435. data/spec/unit/recipe_spec.rb +10 -8
  436. data/spec/unit/registry_helper_spec.rb +374 -0
  437. data/spec/unit/resource/mount_spec.rb +0 -11
  438. data/spec/unit/resource/registry_key_spec.rb +171 -0
  439. data/spec/unit/resource/remote_file_spec.rb +21 -23
  440. data/spec/unit/resource/ruby_block_spec.rb +7 -3
  441. data/spec/unit/resource/service_spec.rb +11 -0
  442. data/spec/unit/resource_spec.rb +4 -19
  443. data/spec/unit/rest/auth_credentials_spec.rb +2 -19
  444. data/spec/unit/rest_spec.rb +130 -284
  445. data/spec/unit/run_context/cookbook_compiler_spec.rb +181 -0
  446. data/spec/unit/run_context_spec.rb +18 -4
  447. data/spec/unit/run_list_spec.rb +0 -209
  448. data/spec/unit/run_lock_spec.rb +37 -0
  449. data/spec/unit/runner_spec.rb +101 -2
  450. data/spec/unit/scan_access_control_spec.rb +4 -4
  451. data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
  452. data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
  453. data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +14 -69
  454. data/spec/unit/shell_out_spec.rb +18 -0
  455. data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
  456. metadata +275 -234
  457. checksums.yaml +0 -15
  458. data/README.rdoc +0 -177
  459. data/distro/common/html/knife-recipe.1.html +0 -92
  460. data/lib/chef/certificate.rb +0 -161
  461. data/lib/chef/checksum.rb +0 -167
  462. data/lib/chef/checksum_cache.rb +0 -190
  463. data/lib/chef/cookbook_version_selector.rb +0 -168
  464. data/lib/chef/couchdb.rb +0 -246
  465. data/lib/chef/index_queue/amqp_client.rb +0 -116
  466. data/lib/chef/index_queue/consumer.rb +0 -76
  467. data/lib/chef/index_queue/indexable.rb +0 -109
  468. data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
  469. data/lib/chef/monkey_patches/moneta.rb +0 -50
  470. data/lib/chef/monkey_patches/uri.rb +0 -70
  471. data/lib/chef/openid_registration.rb +0 -187
  472. data/lib/chef/provider/user/solaris.rb +0 -90
  473. data/lib/chef/solr_query.rb +0 -187
  474. data/lib/chef/solr_query/lucene.treetop +0 -150
  475. data/lib/chef/solr_query/lucene_nodes.rb +0 -285
  476. data/lib/chef/solr_query/query_transform.rb +0 -65
  477. data/lib/chef/solr_query/solr_http_request.rb +0 -132
  478. data/lib/chef/webui_user.rb +0 -231
  479. data/spec/data/cookbooks/openldap/files/default/.dotfile +0 -1
  480. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +0 -1
  481. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +0 -1
  482. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +0 -1
  483. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  484. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  485. data/spec/data/mac_users/10.7.plist.xml +0 -559
  486. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  487. data/spec/data/mac_users/10.8.plist.xml +0 -559
  488. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  489. data/spec/data/mac_users/10.9.plist.xml +0 -560
  490. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  491. data/spec/functional/resource/base.rb +0 -40
  492. data/spec/functional/resource/group_spec.rb +0 -343
  493. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  494. data/spec/unit/certificate_spec.rb +0 -76
  495. data/spec/unit/checksum_cache_spec.rb +0 -209
  496. data/spec/unit/checksum_spec.rb +0 -94
  497. data/spec/unit/couchdb_spec.rb +0 -274
  498. data/spec/unit/index_queue_spec.rb +0 -391
  499. data/spec/unit/mixin/language_spec.rb +0 -305
  500. data/spec/unit/openid_registration_spec.rb +0 -153
  501. data/spec/unit/provider/user/solaris_spec.rb +0 -414
  502. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
  503. data/spec/unit/solr_query/query_transform_spec.rb +0 -454
  504. data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
  505. data/spec/unit/solr_query_spec.rb +0 -203
  506. data/spec/unit/webui_user_spec.rb +0 -238
@@ -50,7 +50,7 @@ class Chef
50
50
  #--
51
51
  # TODO: is it too clever to be defining new() on a module like this?
52
52
  def self.new(name, out, err)
53
- formatter_class = by_name(name) or
53
+ formatter_class = by_name(name.to_s) or
54
54
  raise UnknownFormatter, "No output formatter found for #{name} (available: #{available_formatters.join(', ')})"
55
55
 
56
56
  formatter_class.new(out, err)
@@ -62,6 +62,9 @@ class Chef
62
62
  # TODO: Duplicates functionality from knife, upfactor.
63
63
  class Outputter
64
64
 
65
+ attr_reader :out
66
+ attr_reader :err
67
+
65
68
  def initialize(out, err)
66
69
  @out, @err = out, err
67
70
  end
@@ -40,10 +40,6 @@ readable by chef-client.
40
40
  E
41
41
  error_description.section("Relevant Config Settings:",<<-E)
42
42
  validation_key "#{api_key}"
43
- E
44
- when Chef::Exceptions::InvalidRedirect
45
- error_description.section("Invalid Redirect:",<<-E)
46
- Change your server location in client.rb to the server's FQDN to avoid unwanted redirections.
47
43
  E
48
44
  else
49
45
  "#{exception.class.name}: #{exception.message}"
@@ -24,22 +24,6 @@ class Chef
24
24
  class JSONCompat
25
25
  JSON_MAX_NESTING = 1000
26
26
 
27
- JSON_CLASS = "json_class".freeze
28
-
29
- CHEF_APICLIENT = "Chef::ApiClient".freeze
30
- CHEF_CHECKSUM = "Chef::Checksum".freeze
31
- CHEF_COOKBOOKVERSION = "Chef::CookbookVersion".freeze
32
- CHEF_DATABAG = "Chef::DataBag".freeze
33
- CHEF_DATABAGITEM = "Chef::DataBagItem".freeze
34
- CHEF_ENVIRONMENT = "Chef::Environment".freeze
35
- CHEF_NODE = "Chef::Node".freeze
36
- CHEF_ROLE = "Chef::Role".freeze
37
- CHEF_SANDBOX = "Chef::Sandbox".freeze
38
- CHEF_RESOURCE = "Chef::Resource".freeze
39
- CHEF_RESOURCECOLLECTION = "Chef::ResourceCollection".freeze
40
- CHEF_WEBUIUSER = "Chef::WebUIUser".freeze
41
- CHEF_OPENIDREGISTRAION = "Chef::OpenIDRegistration".freeze
42
-
43
27
  class <<self
44
28
  # See CHEF-1292/PL-538. Increase the max nesting for JSON, which defaults
45
29
  # to 19, and isn't enough for some (for example, a Node within a Node)
@@ -54,49 +38,7 @@ class Chef
54
38
 
55
39
  # Just call the JSON gem's parse method with a modified :max_nesting field
56
40
  def from_json(source, opts = {})
57
- obj = ::Yajl::Parser.parse(source)
58
-
59
- unless obj.kind_of?(Hash) || obj.kind_of?(Array)
60
- raise JSON::ParserError, "Top level JSON object must be a Hash or Array (actual: #{obj.class})"
61
- end
62
-
63
- # The old default in the json gem (which we are mimicing because we
64
- # sadly rely on this misfeature) is to "create additions" i.e., convert
65
- # JSON objects into ruby objects. Explicit :create_additions => false
66
- # is required to turn it off.
67
- if opts[:create_additions].nil? || opts[:create_additions]
68
- map_to_rb_obj(obj)
69
- else
70
- obj
71
- end
72
- rescue Yajl::ParseError => e
73
- raise JSON::ParserError, e.message
74
- end
75
-
76
- # Look at an object that's a basic type (from json parse) and convert it
77
- # to an instance of Chef classes if desired.
78
- def map_to_rb_obj(json_obj)
79
- res = case json_obj
80
- when Hash
81
- mapped_hash = map_hash_to_rb_obj(json_obj)
82
- if json_obj.has_key?(JSON_CLASS) && (class_to_inflate = class_for_json_class(json_obj[JSON_CLASS]))
83
- class_to_inflate.json_create(mapped_hash)
84
- else
85
- mapped_hash
86
- end
87
- when Array
88
- json_obj.map {|e| map_to_rb_obj(e) }
89
- else
90
- json_obj
91
- end
92
- res
93
- end
94
-
95
- def map_hash_to_rb_obj(json_hash)
96
- json_hash.each do |key, value|
97
- json_hash[key] = map_to_rb_obj(value)
98
- end
99
- json_hash
41
+ ::JSON.parse(source, opts_add_max_nesting(opts))
100
42
  end
101
43
 
102
44
  def to_json(obj, opts = nil)
@@ -106,44 +48,6 @@ class Chef
106
48
  def to_json_pretty(obj, opts = nil)
107
49
  ::JSON.pretty_generate(obj, opts_add_max_nesting(opts))
108
50
  end
109
-
110
-
111
- def class_for_json_class(json_class)
112
- case json_class
113
- when CHEF_APICLIENT
114
- Chef::ApiClient
115
- when CHEF_CHECKSUM
116
- Chef::Checksum
117
- when CHEF_COOKBOOKVERSION
118
- Chef::CookbookVersion
119
- when CHEF_DATABAG
120
- Chef::DataBag
121
- when CHEF_DATABAGITEM
122
- Chef::DataBagItem
123
- when CHEF_ENVIRONMENT
124
- Chef::Environment
125
- when CHEF_NODE
126
- Chef::Node
127
- when CHEF_ROLE
128
- Chef::Role
129
- when CHEF_SANDBOX
130
- Chef::Sandbox
131
- when CHEF_RESOURCE
132
- Chef::Resource
133
- when CHEF_RESOURCECOLLECTION
134
- Chef::ResourceCollection
135
- when CHEF_WEBUIUSER
136
- Chef::WebUIUser
137
- when CHEF_OPENIDREGISTRAION
138
- Chef::OpenIDRegistration
139
- when /^Chef::Resource/
140
- Chef::Resource.find_subclass_by_name(json_class)
141
- else
142
- raise JSON::ParserError, "Unsupported `json_class` type '#{json_class}'"
143
- end
144
- end
145
-
146
51
  end
147
52
  end
148
53
  end
149
-
@@ -57,6 +57,11 @@ class Chef
57
57
  attr_accessor :name_args
58
58
  attr_accessor :ui
59
59
 
60
+ # Configure mixlib-cli to always separate defaults from user-supplied CLI options
61
+ def self.use_separate_defaults?
62
+ true
63
+ end
64
+
60
65
  def self.ui
61
66
  @ui ||= Chef::Knife::UI.new(STDOUT, STDERR, STDIN, {})
62
67
  end
@@ -226,13 +231,22 @@ class Chef
226
231
  exit 10
227
232
  end
228
233
 
229
- @@chef_config_dir = nil
234
+ def self.working_directory
235
+ ENV['PWD'] || Dir.pwd
236
+ end
237
+
238
+ def self.reset_config_path!
239
+ @@chef_config_dir = nil
240
+ end
241
+
242
+ reset_config_path!
243
+
230
244
 
231
245
  # search upward from current_dir until .chef directory is found
232
246
  def self.chef_config_dir
233
247
  if @@chef_config_dir.nil? # share this with subclasses
234
248
  @@chef_config_dir = false
235
- full_path = Dir.pwd.split(File::SEPARATOR)
249
+ full_path = working_directory.split(File::SEPARATOR)
236
250
  (full_path.length - 1).downto(0) do |i|
237
251
  candidate_directory = File.join(full_path[0..i] + [".chef" ])
238
252
  if File.exist?(candidate_directory) && File.directory?(candidate_directory)
@@ -283,49 +297,70 @@ class Chef
283
297
  exit(1)
284
298
  end
285
299
 
286
- def configure_chef
287
- unless config[:config_file]
288
- candidate_configs = []
300
+ # Returns a subset of the Chef::Config[:knife] Hash that is relevant to the
301
+ # currently executing knife command. This is used by #configure_chef to
302
+ # apply settings from knife.rb to the +config+ hash.
303
+ def config_file_settings
304
+ config_file_settings = {}
305
+ self.class.options.keys.each do |key|
306
+ config_file_settings[key] = Chef::Config[:knife][key] if Chef::Config[:knife].has_key?(key)
307
+ end
308
+ config_file_settings
309
+ end
289
310
 
290
- # Look for $KNIFE_HOME/knife.rb (allow multiple knives config on same machine)
291
- if ENV['KNIFE_HOME']
292
- candidate_configs << File.join(ENV['KNIFE_HOME'], 'knife.rb')
293
- end
294
- # Look for $PWD/knife.rb
295
- if Dir.pwd
296
- candidate_configs << File.join(Dir.pwd, 'knife.rb')
297
- end
298
- # Look for $UPWARD/.chef/knife.rb
299
- if self.class.chef_config_dir
300
- candidate_configs << File.join(self.class.chef_config_dir, 'knife.rb')
301
- end
302
- # Look for $HOME/.chef/knife.rb
303
- if ENV['HOME']
304
- candidate_configs << File.join(ENV['HOME'], '.chef', 'knife.rb')
305
- end
311
+ def locate_config_file
312
+ candidate_configs = []
306
313
 
307
- candidate_configs.each do | candidate_config |
308
- candidate_config = File.expand_path(candidate_config)
309
- if File.exist?(candidate_config)
310
- config[:config_file] = candidate_config
311
- break
312
- end
313
- end
314
+ # Look for $KNIFE_HOME/knife.rb (allow multiple knives config on same machine)
315
+ if ENV['KNIFE_HOME']
316
+ candidate_configs << File.join(ENV['KNIFE_HOME'], 'knife.rb')
317
+ end
318
+ # Look for $PWD/knife.rb
319
+ if Dir.pwd
320
+ candidate_configs << File.join(Dir.pwd, 'knife.rb')
321
+ end
322
+ # Look for $UPWARD/.chef/knife.rb
323
+ if self.class.chef_config_dir
324
+ candidate_configs << File.join(self.class.chef_config_dir, 'knife.rb')
325
+ end
326
+ # Look for $HOME/.chef/knife.rb
327
+ if ENV['HOME']
328
+ candidate_configs << File.join(ENV['HOME'], '.chef', 'knife.rb')
314
329
  end
315
330
 
316
- # Don't try to load a knife.rb if it doesn't exist.
317
- if config[:config_file]
318
- read_config_file(config[:config_file])
319
- else
320
- # ...but do log a message if no config was found.
321
- Chef::Config[:color] = config[:color]
322
- ui.warn("No knife configuration file found")
331
+ candidate_configs.each do | candidate_config |
332
+ candidate_config = File.expand_path(candidate_config)
333
+ if File.exist?(candidate_config)
334
+ config[:config_file] = candidate_config
335
+ break
336
+ end
323
337
  end
338
+ end
324
339
 
340
+ # Apply Config in this order:
341
+ # defaults from mixlib-cli
342
+ # settings from config file, via Chef::Config[:knife]
343
+ # config from command line
344
+ def merge_configs
345
+ # Apply config file settings on top of mixlib-cli defaults
346
+ combined_config = default_config.merge(config_file_settings)
347
+ # Apply user-supplied options on top of the above combination
348
+ combined_config = combined_config.merge(config)
349
+ # replace the config hash from mixlib-cli with our own.
350
+ # Need to use the mutate-in-place #replace method instead of assigning to
351
+ # the instance variable because other code may have a reference to the
352
+ # original config hash object.
353
+ config.replace(combined_config)
354
+ end
355
+
356
+ # Catch-all method that does any massaging needed for various config
357
+ # components, such as expanding file paths and converting verbosity level
358
+ # into log level.
359
+ def apply_computed_config
325
360
  Chef::Config[:color] = config[:color]
326
361
 
327
362
  case Chef::Config[:verbosity]
328
- when 0
363
+ when 0, nil
329
364
  Chef::Config[:log_level] = :error
330
365
  when 1
331
366
  Chef::Config[:log_level] = :info
@@ -348,8 +383,6 @@ class Chef
348
383
  Chef::Log.init(Chef::Config[:log_location])
349
384
  Chef::Log.level(Chef::Config[:log_level] || :error)
350
385
 
351
- Chef::Log.debug("Using configuration from #{config[:config_file]}")
352
-
353
386
  if Chef::Config[:node_name] && Chef::Config[:node_name].bytesize > 90
354
387
  # node names > 90 bytes only work with authentication protocol >= 1.1
355
388
  # see discussion in config.rb.
@@ -357,6 +390,25 @@ class Chef
357
390
  end
358
391
  end
359
392
 
393
+ def configure_chef
394
+ unless config[:config_file]
395
+ locate_config_file
396
+ end
397
+
398
+ # Don't try to load a knife.rb if it doesn't exist.
399
+ if config[:config_file]
400
+ Chef::Log.debug("Using configuration from #{config[:config_file]}")
401
+ read_config_file(config[:config_file])
402
+ else
403
+ # ...but do log a message if no config was found.
404
+ Chef::Config[:color] = config[:color]
405
+ ui.warn("No knife configuration file found")
406
+ end
407
+
408
+ merge_configs
409
+ apply_computed_config
410
+ end
411
+
360
412
  def read_config_file(file)
361
413
  Chef::Config.from_file(file)
362
414
  rescue SyntaxError => e
@@ -429,9 +481,6 @@ class Chef
429
481
  when Chef::Exceptions::PrivateKeyMissing
430
482
  ui.error "Your private key could not be loaded from #{api_key}"
431
483
  ui.info "Check your configuration file and ensure that your private key is readable"
432
- when Chef::Exceptions::InvalidRedirect
433
- ui.error "Invalid Redirect: #{e.message}"
434
- ui.info "Change your server location in knife.rb to the server's FQDN to avoid unwanted redirections."
435
484
  else
436
485
  ui.error "#{e.class.name}: #{e.message}"
437
486
  end
@@ -11,13 +11,13 @@ fi
11
11
 
12
12
  mkdir -p /etc/chef
13
13
 
14
- cat > /etc/chef/validation.pem <<'EOP'
14
+ awk NF > /etc/chef/validation.pem <<'EOP'
15
15
  <%= validation_key %>
16
16
  EOP
17
17
  chmod 0600 /etc/chef/validation.pem
18
18
 
19
19
  <% if @chef_config[:encrypted_data_bag_secret] -%>
20
- cat > /etc/chef/encrypted_data_bag_secret <<'EOP'
20
+ awk NF > /etc/chef/encrypted_data_bag_secret <<'EOP'
21
21
  <%= encrypted_data_bag_secret %>
22
22
  EOP
23
23
  chmod 0600 /etc/chef/encrypted_data_bag_secret
@@ -28,13 +28,13 @@ gem install chef --no-rdoc --no-ri --verbose <%= bootstrap_version_string %>
28
28
 
29
29
  mkdir -p /etc/chef
30
30
 
31
- cat > /etc/chef/validation.pem <<'EOP'
31
+ awk NF > /etc/chef/validation.pem <<'EOP'
32
32
  <%= validation_key %>
33
33
  EOP
34
34
  chmod 0600 /etc/chef/validation.pem
35
35
 
36
36
  <% if @chef_config[:encrypted_data_bag_secret] -%>
37
- cat > /etc/chef/encrypted_data_bag_secret <<'EOP'
37
+ awk NF > /etc/chef/encrypted_data_bag_secret <<'EOP'
38
38
  <%= encrypted_data_bag_secret %>
39
39
  EOP
40
40
  chmod 0600 /etc/chef/encrypted_data_bag_secret
@@ -10,7 +10,7 @@ exists() {
10
10
  fi
11
11
  }
12
12
 
13
- install_sh="https://www.opscode.com/chef/install.sh"
13
+ install_sh="http://opscode.com/chef/install.sh"
14
14
  version_string="-v <%= chef_version %>"
15
15
 
16
16
  if ! exists /usr/bin/chef-client; then
@@ -26,13 +26,13 @@ fi
26
26
 
27
27
  mkdir -p /etc/chef
28
28
 
29
- cat > /etc/chef/validation.pem <<'EOP'
29
+ awk NF > /etc/chef/validation.pem <<'EOP'
30
30
  <%= validation_key %>
31
31
  EOP
32
32
  chmod 0600 /etc/chef/validation.pem
33
33
 
34
34
  <% if @chef_config[:encrypted_data_bag_secret] -%>
35
- cat > /etc/chef/encrypted_data_bag_secret <<'EOP'
35
+ awk NF > /etc/chef/encrypted_data_bag_secret <<'EOP'
36
36
  <%= encrypted_data_bag_secret %>
37
37
  EOP
38
38
  chmod 0600 /etc/chef/encrypted_data_bag_secret
@@ -10,13 +10,13 @@ gem install chef --no-rdoc --no-ri --verbose <%= bootstrap_version_string %>
10
10
 
11
11
  mkdir -p /etc/chef
12
12
 
13
- cat > /etc/chef/validation.pem <<'EOP'
13
+ awk NF > /etc/chef/validation.pem <<'EOP'
14
14
  <%= validation_key %>
15
15
  EOP
16
16
  chmod 0600 /etc/chef/validation.pem
17
17
 
18
18
  <% if @chef_config[:encrypted_data_bag_secret] -%>
19
- cat > /etc/chef/encrypted_data_bag_secret <<'EOP'
19
+ awk NF > /etc/chef/encrypted_data_bag_secret <<'EOP'
20
20
  <%= encrypted_data_bag_secret %>
21
21
  EOP
22
22
  chmod 0600 /etc/chef/encrypted_data_bag_secret
@@ -10,13 +10,13 @@ fi
10
10
  apt-get update
11
11
  apt-get install -y chef
12
12
 
13
- cat > /etc/chef/validation.pem <<'EOP'
13
+ awk NF > /etc/chef/validation.pem <<'EOP'
14
14
  <%= validation_key %>
15
15
  EOP
16
16
  chmod 0600 /etc/chef/validation.pem
17
17
 
18
18
  <% if @chef_config[:encrypted_data_bag_secret] -%>
19
- cat > /etc/chef/encrypted_data_bag_secret <<'EOP'
19
+ awk NF > /etc/chef/encrypted_data_bag_secret <<'EOP'
20
20
  <%= encrypted_data_bag_secret %>
21
21
  EOP
22
22
  chmod 0600 /etc/chef/encrypted_data_bag_secret
@@ -14,13 +14,13 @@ gem install chef --no-rdoc --no-ri --verbose <%= bootstrap_version_string %>
14
14
 
15
15
  mkdir -p /etc/chef
16
16
 
17
- cat > /etc/chef/validation.pem <<'EOP'
17
+ awk NF > /etc/chef/validation.pem <<'EOP'
18
18
  <%= validation_key %>
19
19
  EOP
20
20
  chmod 0600 /etc/chef/validation.pem
21
21
 
22
22
  <% if @chef_config[:encrypted_data_bag_secret] -%>
23
- cat > /etc/chef/encrypted_data_bag_secret <<'EOP'
23
+ awk NF > /etc/chef/encrypted_data_bag_secret <<'EOP'
24
24
  <%= encrypted_data_bag_secret %>
25
25
  EOP
26
26
  chmod 0600 /etc/chef/encrypted_data_bag_secret
@@ -12,13 +12,13 @@ gem install chef --no-rdoc --no-ri --verbose <%= bootstrap_version_string %>
12
12
 
13
13
  mkdir -p /etc/chef
14
14
 
15
- cat > /etc/chef/validation.pem <<'EOP'
15
+ awk NF > /etc/chef/validation.pem <<'EOP'
16
16
  <%= validation_key %>
17
17
  EOP
18
18
  chmod 0600 /etc/chef/validation.pem
19
19
 
20
20
  <% if @chef_config[:encrypted_data_bag_secret] -%>
21
- cat > /etc/chef/encrypted_data_bag_secret <<'EOP'
21
+ awk NF > /etc/chef/encrypted_data_bag_secret <<'EOP'
22
22
  <%= encrypted_data_bag_secret %>
23
23
  EOP
24
24
  chmod 0600 /etc/chef/encrypted_data_bag_secret