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
@@ -6,9 +6,9 @@
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
8
8
  # You may obtain a copy of the License at
9
- #
9
+ #
10
10
  # http://www.apache.org/licenses/LICENSE-2.0
11
- #
11
+ #
12
12
  # Unless required by applicable law or agreed to in writing, software
13
13
  # distributed under the License is distributed on an "AS IS" BASIS,
14
14
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -21,7 +21,7 @@ require 'spec_helper'
21
21
  describe Chef::Knife::Help do
22
22
  before(:each) do
23
23
  # Perilously use the build in list even though it is dynamic so we don't get warnings about the constant
24
- # HELP_TOPICS = [ "foo", "bar", "knife-kittens", "ceiling-cat", "shef" ]
24
+ # HELP_TOPICS = [ "foo", "bar", "knife-kittens", "ceiling-cat", "shell" ]
25
25
  @knife = Chef::Knife::Help.new
26
26
  end
27
27
 
@@ -30,8 +30,8 @@ describe Chef::Knife::Help do
30
30
  end
31
31
 
32
32
  it "should run man for you" do
33
- @knife.name_args = [ "shef" ]
34
- @knife.should_receive(:exec).with(/^man \/.*\/shef.1$/)
33
+ @knife.name_args = [ "shell" ]
34
+ @knife.should_receive(:exec).with(/^man \/.*\/shell.1$/)
35
35
  @knife.run
36
36
  end
37
37
 
@@ -47,9 +47,9 @@ describe Chef::Knife::Help do
47
47
 
48
48
  describe "find_manpage_path" do
49
49
  it "should find the man page in the gem" do
50
- @knife.find_manpage_path("shef").should =~ /distro\/common\/man\/man1\/shef.1$/
50
+ @knife.find_manpage_path("shell").should =~ /distro\/common\/man\/man1\/chef-shell.1$/
51
51
  end
52
-
52
+
53
53
  it "should provide the man page name if not in the gem" do
54
54
  @knife.find_manpage_path("foo").should == "foo"
55
55
  end
@@ -20,12 +20,6 @@ require 'spec_helper'
20
20
  Chef::Knife::NodeEdit.load_deps
21
21
 
22
22
  describe Chef::Knife::NodeEdit do
23
-
24
- # helper to convert the view from Chef objects into Ruby objects representing JSON
25
- def deserialized_json_view
26
- actual = Chef::JSONCompat.from_json(Chef::JSONCompat.to_json_pretty(@knife.node_editor.send(:view)))
27
- end
28
-
29
23
  before(:each) do
30
24
  Chef::Config[:node_name] = "webmonkey.example.com"
31
25
  @knife = Chef::Knife::NodeEdit.new
@@ -55,7 +49,7 @@ describe Chef::Knife::NodeEdit do
55
49
  end
56
50
 
57
51
  it "creates a view of the node without attributes from roles or ohai" do
58
- actual = deserialized_json_view
52
+ actual = Chef::JSONCompat.from_json(@knife.node_editor.view)
59
53
  actual.should_not have_key("automatic")
60
54
  actual.should_not have_key("override")
61
55
  actual.should_not have_key("default")
@@ -67,7 +61,7 @@ describe Chef::Knife::NodeEdit do
67
61
  it "shows the extra attributes when given the --all option" do
68
62
  @knife.config[:all_attributes] = true
69
63
 
70
- actual = deserialized_json_view
64
+ actual = Chef::JSONCompat.from_json(@knife.node_editor.view)
71
65
  actual["automatic"].should == {"go" => "away"}
72
66
  actual["override"].should == {"dont" => "show"}
73
67
  actual["default"].should == {"hide" => "me"}
@@ -77,39 +71,18 @@ describe Chef::Knife::NodeEdit do
77
71
  end
78
72
 
79
73
  it "does not consider unedited data updated" do
80
- view = deserialized_json_view
81
- @knife.node_editor.send(:apply_updates, view)
74
+ view = Chef::JSONCompat.from_json( @knife.node_editor.view )
75
+ @knife.node_editor.apply_updates(view)
82
76
  @knife.node_editor.should_not be_updated
83
77
  end
84
78
 
85
79
  it "considers edited data updated" do
86
- view = deserialized_json_view
80
+ view = Chef::JSONCompat.from_json( @knife.node_editor.view )
87
81
  view["run_list"] << "role[fuuu]"
88
- @knife.node_editor.send(:apply_updates, view)
82
+ @knife.node_editor.apply_updates(view)
89
83
  @knife.node_editor.should be_updated
90
84
  end
91
85
 
92
86
  end
93
-
94
- describe "edit_node" do
95
-
96
- before do
97
- @knife.stub!(:node).and_return(@node)
98
- end
99
-
100
- let(:subject) { @knife.node_editor.edit_node }
101
-
102
- it "raises an exception when editing is disabled" do
103
- @knife.config[:disable_editing] = true
104
- expect{ subject }.to raise_error(SystemExit)
105
- end
106
-
107
- it "raises an exception when the editor is not set" do
108
- @knife.config[:editor] = nil
109
- expect{ subject }.to raise_error(SystemExit)
110
- end
111
-
112
- end
113
-
114
87
  end
115
88
 
@@ -25,6 +25,7 @@ describe Chef::Knife::NodeRunListRemove do
25
25
  @knife.config[:print_after] = nil
26
26
  @knife.name_args = [ "adam", "role[monkey]" ]
27
27
  @node = Chef::Node.new()
28
+ @node.name("knifetest-node")
28
29
  @node.run_list << "role[monkey]"
29
30
  @node.stub!(:save).and_return(true)
30
31
 
@@ -52,7 +53,7 @@ describe Chef::Knife::NodeRunListRemove do
52
53
 
53
54
  it "should print the run list" do
54
55
  @knife.config[:print_after] = true
55
- @knife.ui.should_receive(:output).with({ 'run_list' => [] })
56
+ @knife.ui.should_receive(:output).with({ "knifetest-node" => { 'run_list' => [] } })
56
57
  @knife.run
57
58
  end
58
59
 
@@ -34,14 +34,14 @@ describe Chef::Knife::Ssh do
34
34
 
35
35
  before do
36
36
  @knife = Chef::Knife::Ssh.new
37
- @knife.config = {}
37
+ @knife.merge_configs
38
38
  @knife.config[:attribute] = "fqdn"
39
- @node_foo = Chef::Node.new('foo')
40
- @node_foo[:fqdn] = "foo.example.org"
41
- @node_foo[:ipaddress] = "10.0.0.1"
42
- @node_bar = Chef::Node.new('bar')
43
- @node_bar[:fqdn] = "bar.example.org"
44
- @node_bar[:ipaddress] = "10.0.0.2"
39
+ @node_foo = Chef::Node.new
40
+ @node_foo.automatic_attrs[:fqdn] = "foo.example.org"
41
+ @node_foo.automatic_attrs[:ipaddress] = "10.0.0.1"
42
+ @node_bar = Chef::Node.new
43
+ @node_bar.automatic_attrs[:fqdn] = "bar.example.org"
44
+ @node_bar.automatic_attrs[:ipaddress] = "10.0.0.2"
45
45
  end
46
46
 
47
47
  describe "#configure_session" do
@@ -64,7 +64,7 @@ describe Chef::Knife::Ssh do
64
64
  @knife.should_receive(:session_from_list).with(['10.0.0.1', '10.0.0.2'])
65
65
  @knife.configure_session
66
66
  end
67
-
67
+
68
68
  it "returns an array of the attributes specified on the command line even when a config value is set" do
69
69
  @knife.config[:attribute] = "config_file" # this value will be the config file
70
70
  @knife.config[:override_attribute] = "ipaddress" # this is the value of the command line via #configure_attribute
@@ -84,10 +84,8 @@ describe Chef::Knife::Ssh do
84
84
 
85
85
  context "when cloud hostnames are available" do
86
86
  before do
87
- @node_foo[:cloud] = Mash.new
88
- @node_bar[:cloud] = Mash.new
89
- @node_foo[:cloud][:public_hostname] = "ec2-10-0-0-1.compute-1.amazonaws.com"
90
- @node_bar[:cloud][:public_hostname] = "ec2-10-0-0-2.compute-1.amazonaws.com"
87
+ @node_foo.automatic_attrs[:cloud][:public_hostname] = "ec2-10-0-0-1.compute-1.amazonaws.com"
88
+ @node_bar.automatic_attrs[:cloud][:public_hostname] = "ec2-10-0-0-2.compute-1.amazonaws.com"
91
89
  end
92
90
 
93
91
  it "returns an array of cloud public hostnames" do
@@ -109,8 +107,8 @@ describe Chef::Knife::Ssh do
109
107
  context "when there are some hosts found but they do not have an attribute to connect with" do
110
108
  before do
111
109
  @query.stub!(:search).and_return([[@node_foo, @node_bar]])
112
- @node_foo[:fqdn] = nil
113
- @node_bar[:fqdn] = nil
110
+ @node_foo.automatic_attrs[:fqdn] = nil
111
+ @node_bar.automatic_attrs[:fqdn] = nil
114
112
  Chef::Search::Query.stub!(:new).and_return(@query)
115
113
  end
116
114
 
@@ -269,7 +267,6 @@ describe Chef::Knife::Ssh do
269
267
  Chef::Search::Query.stub!(:new).and_return(@query)
270
268
  @knife.stub(:ssh_command).and_return(exit_code)
271
269
  @knife.name_args = ['*:*', 'false']
272
- @knife.config[:manual] = false
273
270
  end
274
271
 
275
272
  context "with an error" do
@@ -22,8 +22,8 @@ require 'highline'
22
22
  describe Chef::Knife::Status do
23
23
  before(:each) do
24
24
  node = Chef::Node.new.tap do |n|
25
- n["fqdn"] = "foobar"
26
- n["ohai_time"] = 1343845969
25
+ n.automatic_attrs["fqdn"] = "foobar"
26
+ n.automatic_attrs["ohai_time"] = 1343845969
27
27
  end
28
28
  query = mock("Chef::Search::Query")
29
29
  query.stub!(:search).and_yield(node)
@@ -40,6 +40,29 @@ describe Chef::Knife do
40
40
  @stdout = StringIO.new
41
41
  end
42
42
 
43
+ describe "selecting a config file" do
44
+ context "when the current working dir is inside a symlinked directory" do
45
+ before do
46
+ Chef::Knife.reset_config_path!
47
+ # pwd according to your shell is /home/someuser/prod/chef-repo, but
48
+ # chef-repo is a symlink to /home/someuser/codes/chef-repo
49
+ ENV.stub!(:[]).with("PWD").and_return("/home/someuser/prod/chef-repo")
50
+ Dir.stub!(:pwd).and_return("/home/someuser/codes/chef-repo")
51
+ end
52
+
53
+ after do
54
+ Chef::Knife.reset_config_path!
55
+ end
56
+
57
+ it "loads the config from the non-dereferenced directory path" do
58
+ File.should_receive(:exist?).with("/home/someuser/prod/chef-repo/.chef").and_return(false)
59
+ File.should_receive(:exist?).with("/home/someuser/prod/.chef").and_return(true)
60
+ File.should_receive(:directory?).with("/home/someuser/prod/.chef").and_return(true)
61
+ Chef::Knife.chef_config_dir.should == "/home/someuser/prod/.chef"
62
+ end
63
+ end
64
+ end
65
+
43
66
  describe "after loading a subcommand" do
44
67
  before do
45
68
  Chef::Knife.reset_subcommands!
@@ -157,6 +180,36 @@ describe Chef::Knife do
157
180
  lambda {Chef::Knife.run(%w{fuuu uuuu fuuuu})}.should raise_error(SystemExit) { |e| e.status.should_not == 0 }
158
181
  end
159
182
 
183
+ describe "merging configuration options" do
184
+ before do
185
+ KnifeSpecs::TestYourself.option(:opt_with_default,
186
+ :short => "-D VALUE",
187
+ :default => "default-value")
188
+ Chef::Config[:knife] = {}
189
+ end
190
+
191
+ it "prefers the default value if no config or command line value is present" do
192
+ knife_command = KnifeSpecs::TestYourself.new([]) #empty argv
193
+ knife_command.configure_chef
194
+ knife_command.config[:opt_with_default].should == "default-value"
195
+ end
196
+
197
+ it "prefers a value in Chef::Config[:knife] to the default" do
198
+ Chef::Config[:knife][:opt_with_default] = "from-knife-config"
199
+ knife_command = KnifeSpecs::TestYourself.new([]) #empty argv
200
+ knife_command.configure_chef
201
+ knife_command.config[:opt_with_default].should == "from-knife-config"
202
+ end
203
+
204
+ it "prefers a value from command line over Chef::Config and the default" do
205
+ Chef::Config[:knife][:opt_with_default] = "from-knife-config"
206
+ knife_command = KnifeSpecs::TestYourself.new(["-D", "from-cli"])
207
+ knife_command.configure_chef
208
+ knife_command.config[:opt_with_default].should == "from-cli"
209
+ end
210
+ end
211
+
212
+
160
213
  end
161
214
 
162
215
  describe "when first created" do
@@ -6,9 +6,9 @@
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
8
8
  # You may obtain a copy of the License at
9
- #
9
+ #
10
10
  # http://www.apache.org/licenses/LICENSE-2.0
11
- #
11
+ #
12
12
  # Unless required by applicable law or agreed to in writing, software
13
13
  # distributed under the License is distributed on an "AS IS" BASIS,
14
14
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -18,9 +18,6 @@
18
18
 
19
19
  require 'spec_helper'
20
20
 
21
- module LwrpConstScopingConflict
22
- end
23
-
24
21
  describe "override logging" do
25
22
  before :each do
26
23
  $stderr.stub!(:write)
@@ -28,48 +25,26 @@ describe "override logging" do
28
25
 
29
26
  it "should log if attempting to load resource of same name" do
30
27
  Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "resources", "*"))].each do |file|
31
- Chef::Resource.build_from_file("lwrp", file, nil)
28
+ Chef::Resource::LWRPBase.build_from_file("lwrp", file, nil)
32
29
  end
33
30
 
34
31
  Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp_override", "resources", "*"))].each do |file|
35
32
  Chef::Log.should_receive(:info).with(/overriding/)
36
- Chef::Resource.build_from_file("lwrp", file, nil)
33
+ Chef::Resource::LWRPBase.build_from_file("lwrp", file, nil)
37
34
  end
38
35
  end
39
36
 
40
37
  it "should log if attempting to load provider of same name" do
41
38
  Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "providers", "*"))].each do |file|
42
- Chef::Provider.build_from_file("lwrp", file, nil)
39
+ Chef::Provider::LWRPBase.build_from_file("lwrp", file, nil)
43
40
  end
44
41
 
45
42
  Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp_override", "providers", "*"))].each do |file|
46
43
  Chef::Log.should_receive(:info).with(/overriding/)
47
- Chef::Provider.build_from_file("lwrp", file, nil)
48
- end
49
- end
50
-
51
- it "removes the old LRWP resource class from the list of resource subclasses [CHEF-3432]" do
52
- # CHEF-3432 regression test:
53
- # Chef::Resource keeps a list of all subclasses to assist class inflation
54
- # for json parsing (see Chef::JSONCompat). When replacing LWRP resources,
55
- # we need to ensure the old resource class is remove from that list.
56
- Dir[File.expand_path( "lwrp/resources/*", CHEF_SPEC_DATA)].each do |file|
57
- Chef::Resource.build_from_file("lwrp", file, nil)
58
- end
59
- first_lwr_foo_class = Chef::Resource::LwrpFoo
60
- Chef::Resource.resource_classes.should include(first_lwr_foo_class)
61
- Dir[File.expand_path( "lwrp/resources/*", CHEF_SPEC_DATA)].each do |file|
62
- Chef::Resource.build_from_file("lwrp", file, nil)
44
+ Chef::Provider::LWRPBase.build_from_file("lwrp", file, nil)
63
45
  end
64
- Chef::Resource.resource_classes.should_not include(first_lwr_foo_class)
65
46
  end
66
47
 
67
- it "does not attempt to remove classes from higher up namespaces [CHEF-4117]" do
68
- conflicting_lwrp_file = File.expand_path( "lwrp_const_scoping/resources/conflict.rb", CHEF_SPEC_DATA)
69
- # The test is that this should not raise an error:
70
- Chef::Resource.build_from_file("lwrp_const_scoping", conflicting_lwrp_file, nil)
71
- end
72
-
73
48
  end
74
49
 
75
50
  describe "LWRP" do
@@ -86,11 +61,11 @@ describe "LWRP" do
86
61
 
87
62
  before do
88
63
  Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "resources", "*"))].each do |file|
89
- Chef::Resource.build_from_file("lwrp", file, nil)
64
+ Chef::Resource::LWRPBase.build_from_file("lwrp", file, nil)
90
65
  end
91
66
 
92
67
  Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp_override", "resources", "*"))].each do |file|
93
- Chef::Resource.build_from_file("lwrp", file, nil)
68
+ Chef::Resource::LWRPBase.build_from_file("lwrp", file, nil)
94
69
  end
95
70
  end
96
71
 
@@ -119,12 +94,12 @@ describe "LWRP" do
119
94
  end
120
95
 
121
96
  it "should have access to the run context and node during class definition" do
122
- node = Chef::Node.new(nil)
123
- node[:penguin_name] = "jackass"
97
+ node = Chef::Node.new
98
+ node.normal[:penguin_name] = "jackass"
124
99
  run_context = Chef::RunContext.new(node, Chef::CookbookCollection.new, @events)
125
100
 
126
101
  Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "resources_with_default_attributes", "*"))].each do |file|
127
- Chef::Resource.build_from_file("lwrp", file, run_context)
102
+ Chef::Resource::LWRPBase.build_from_file("lwrp", file, run_context)
128
103
  end
129
104
 
130
105
  cls = Chef::Resource.const_get("LwrpNodeattr")
@@ -138,8 +113,8 @@ describe "LWRP" do
138
113
  describe "Lightweight Chef::Provider" do
139
114
  before do
140
115
  @node = Chef::Node.new
141
- @node.platform(:ubuntu)
142
- @node.platform_version('8.10')
116
+ @node.automatic[:platform] = :ubuntu
117
+ @node.automatic[:platform_version] = '8.10'
143
118
  @events = Chef::EventDispatch::Dispatcher.new
144
119
  @run_context = Chef::RunContext.new(@node, Chef::CookbookCollection.new({}), @events)
145
120
  @runner = Chef::Runner.new(@run_context)
@@ -147,19 +122,19 @@ describe "LWRP" do
147
122
 
148
123
  before(:each) do
149
124
  Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "resources", "*"))].each do |file|
150
- Chef::Resource.build_from_file("lwrp", file, @run_context)
125
+ Chef::Resource::LWRPBase.build_from_file("lwrp", file, @run_context)
151
126
  end
152
127
 
153
128
  Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp_override", "resources", "*"))].each do |file|
154
- Chef::Resource.build_from_file("lwrp", file, @run_context)
129
+ Chef::Resource::LWRPBase.build_from_file("lwrp", file, @run_context)
155
130
  end
156
131
 
157
132
  Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp", "providers", "*"))].each do |file|
158
- Chef::Provider.build_from_file("lwrp", file, @run_context)
133
+ Chef::Provider::LWRPBase.build_from_file("lwrp", file, @run_context)
159
134
  end
160
135
 
161
136
  Dir[File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "lwrp_override", "providers", "*"))].each do |file|
162
- Chef::Provider.build_from_file("lwrp", file, @run_context)
137
+ Chef::Provider::LWRPBase.build_from_file("lwrp", file, @run_context)
163
138
  end
164
139
 
165
140
  end
@@ -251,6 +226,48 @@ describe "LWRP" do
251
226
  provider.enclosed_resource.monkey.should == 'bob, the monkey'
252
227
  end
253
228
 
229
+ describe "when using inline compilation" do
230
+ before do
231
+ # Behavior in these examples depends on implementation of fixture provider.
232
+ # See spec/data/lwrp/providers/inline_compiler
233
+
234
+ # Side effect of lwrp_inline_compiler provider for testing notifications.
235
+ $interior_ruby_block_2 = nil
236
+ # resource type doesn't matter, so make an existing resource type work with provider.
237
+ @resource = Chef::Resource::LwrpFoo.new("morpheus", @run_context)
238
+ @resource.allowed_actions << :test
239
+ @resource.action(:test)
240
+ @resource.provider(:lwrp_inline_compiler)
241
+ end
242
+
243
+ it "does not add interior resources to the exterior resource collection" do
244
+ @resource.run_action(:test)
245
+ @run_context.resource_collection.should be_empty
246
+ end
247
+
248
+ context "when interior resources are updated" do
249
+ it "processes notifications within the LWRP provider's action" do
250
+ @resource.run_action(:test)
251
+ $interior_ruby_block_2.should == "executed"
252
+ end
253
+
254
+ it "marks the parent resource updated" do
255
+ @resource.run_action(:test)
256
+ @resource.should be_updated
257
+ @resource.should be_updated_by_last_action
258
+ end
259
+ end
260
+
261
+ context "when interior resources are not updated" do
262
+ it "does not mark the parent resource updated" do
263
+ @resource.run_action(:no_updates)
264
+ @resource.should_not be_updated
265
+ @resource.should_not be_updated_by_last_action
266
+ end
267
+ end
268
+
269
+ end
270
+
254
271
  end
255
272
 
256
273
  end