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
@@ -39,28 +39,16 @@ class Chef
39
39
  def create_group
40
40
  command = "pw groupadd"
41
41
  command << set_options
42
- member_options = set_members_options
43
- if member_options.empty?
44
- run_command(:command => command)
45
- else
46
- member_options.each do |option|
47
- run_command(:command => command + option)
48
- end
49
- end
42
+ command << set_members_option
43
+ run_command(:command => command)
50
44
  end
51
45
 
52
46
  # Manage the group when it already exists
53
47
  def manage_group
54
48
  command = "pw groupmod"
55
49
  command << set_options
56
- member_options = set_members_options
57
- if member_options.empty?
58
- run_command(:command => command)
59
- else
60
- member_options.each do |option|
61
- run_command(:command => command + option)
62
- end
63
- end
50
+ command << set_members_option
51
+ run_command(:command => command)
64
52
  end
65
53
 
66
54
  # Remove the group
@@ -82,52 +70,21 @@ class Chef
82
70
  end
83
71
 
84
72
  # Set the membership option depending on the current resource states
85
- def set_members_options
86
- opts = [ ]
87
- members_to_be_added = [ ]
88
- members_to_be_removed = [ ]
89
-
90
- if @new_resource.append
91
- # Append is set so we will only add members given in the
92
- # members list and remove members given in the
93
- # excluded_members list.
94
- if @new_resource.members && !@new_resource.members.empty?
95
- @new_resource.members.each do |member|
96
- members_to_be_added << member if !@current_resource.members.include?(member)
97
- end
98
- end
99
-
100
- if @new_resource.excluded_members && !@new_resource.excluded_members.empty?
101
- @new_resource.excluded_members.each do |member|
102
- members_to_be_removed << member if @current_resource.members.include?(member)
103
- end
104
- end
73
+ def set_members_option
74
+ opt = ""
75
+ unless @new_resource.members.empty?
76
+ opt << " -M #{@new_resource.members.join(',')}"
77
+ Chef::Log.debug("#{@new_resource} setting group members to #{@new_resource.members.join(', ')}")
105
78
  else
106
- # Append is not set so we're resetting the membership of
107
- # the group to the given members.
108
- members_to_be_added = @new_resource.members
109
- @current_resource.members.each do |member|
110
- # No need to re-add a member if it's present in the new
111
- # list of members
112
- if members_to_be_added.include? member
113
- members_to_be_added.delete member
114
- else
115
- members_to_be_removed << member
116
- end
79
+ # New member list is empty so we should delete any old group members
80
+ unless @current_resource.members.empty?
81
+ opt << " -d #{@current_resource.members.join(',')}"
82
+ Chef::Log.debug("#{@new_resource} removing group members #{@current_resource.members.join(', ')}")
83
+ else
84
+ Chef::Log.debug("#{@new_resource} not changing group members, the group has no members")
117
85
  end
118
86
  end
119
-
120
- unless members_to_be_added.empty?
121
- Chef::Log.debug("#{@new_resource} adding group members: #{members_to_be_added.join(',')}")
122
- opts << " -m #{members_to_be_added.join(',')}"
123
- end
124
-
125
- unless members_to_be_removed.empty?
126
- Chef::Log.debug("#{@new_resource} removing group members: #{members_to_be_removed.join(',')}")
127
- opts << " -d #{members_to_be_removed.join(',')}"
128
- end
129
-
130
- opts
87
+ opt
131
88
  end
132
89
 
133
90
  end
@@ -39,24 +39,21 @@ class Chef
39
39
  end
40
40
  end
41
41
 
42
- def set_members(members)
43
- unless @current_resource.members.empty?
44
- shell_out!("groupmod -R #{@current_resource.members.join(',')} #{@new_resource.group_name}")
42
+ def modify_group_members
43
+ unless @new_resource.members.empty?
44
+ if(@new_resource.append)
45
+ @new_resource.members.each do |member|
46
+ Chef::Log.debug("#{@new_resource} appending member #{member} to group #{@new_resource.group_name}")
47
+ shell_out!("groupmod -A #{member} #{@new_resource.group_name}")
48
+ end
49
+ else
50
+ Chef::Log.debug("#{@new_resource} setting group members to #{@new_resource.members.join(', ')}")
51
+ shell_out!("groupmod -A #{@new_resource.members.join(',')} #{@new_resource.group_name}")
52
+ end
53
+ else
54
+ Chef::Log.debug("#{@new_resource} not changing group members, the group has no members")
45
55
  end
46
-
47
- unless members.empty?
48
- shell_out!("groupmod -A #{members.join(',')} #{@new_resource.group_name}")
49
- end
50
- end
51
-
52
- def add_member(member)
53
- shell_out!("groupmod -A #{member} #{@new_resource.group_name}")
54
56
  end
55
-
56
- def remove_member(member)
57
- shell_out!("groupmod -R #{member} #{@new_resource.group_name}")
58
- end
59
-
60
57
  end
61
58
  end
62
59
  end
@@ -17,14 +17,12 @@
17
17
  #
18
18
 
19
19
  require 'chef/provider/group/groupadd'
20
- require 'chef/mixin/shell_out'
21
20
 
22
21
  class Chef
23
22
  class Provider
24
23
  class Group
25
24
  class Usermod < Chef::Provider::Group::Groupadd
26
- include Chef::Mixin::ShellOut
27
-
25
+
28
26
  def load_current_resource
29
27
  super
30
28
  end
@@ -38,52 +36,32 @@ class Chef
38
36
  # No whyrun alternative: this component should be available in the base install of any given system that uses it
39
37
  end
40
38
 
41
- requirements.assert(:modify, :manage) do |a|
42
- a.assertion { @new_resource.members.empty? || @new_resource.append }
39
+ requirements.assert(:modify, :create) do |a|
40
+ a.assertion { @new_resource.members.empty? || @new_resource.append }
43
41
  a.failure_message Chef::Exceptions::Group, "setting group members directly is not supported by #{self.to_s}, must set append true in group"
44
42
  # No whyrun alternative - this action is simply not supported.
45
43
  end
46
-
47
- requirements.assert(:all_actions) do |a|
48
- a.assertion { @new_resource.excluded_members.empty? }
49
- a.failure_message Chef::Exceptions::Group, "excluded_members is not supported by #{self.to_s}"
50
- # No whyrun alternative - this action is simply not supported.
51
- end
52
44
  end
45
+
46
+ def modify_group_members
47
+ case node[:platform]
48
+ when "openbsd", "netbsd", "aix", "solaris2"
49
+ append_flags = "-G"
50
+ when "solaris"
51
+ append_flags = "-a -G"
52
+ end
53
53
 
54
- def set_members(members)
55
- return if members.empty?
56
- # This provider only supports adding members with
57
- # append. Only if the action is create we will go
58
- # ahead and add members.
59
- if @new_resource.action == :create
60
- members.each do |member|
61
- add_member(member)
54
+ unless @new_resource.members.empty?
55
+ if(@new_resource.append)
56
+ @new_resource.members.each do |member|
57
+ Chef::Log.debug("#{@new_resource} appending member #{member} to group #{@new_resource.group_name}")
58
+ run_command(:command => "usermod #{append_flags} #{@new_resource.group_name} #{member}" )
59
+ end
62
60
  end
63
61
  else
64
- raise Chef::Exceptions::UnsupportedAction, "Setting members directly is not supported by #{self.to_s}"
62
+ Chef::Log.debug("#{@new_resource} not changing group members, the group has no members")
65
63
  end
66
64
  end
67
-
68
- def add_member(member)
69
- shell_out!("usermod #{append_flags} #{@new_resource.group_name} #{member}")
70
- end
71
-
72
- def remove_member(member)
73
- # This provider only supports adding members with
74
- # append. This function should never be called.
75
- raise Chef::Exceptions::UnsupportedAction, "Removing members members is not supported by #{self.to_s}"
76
- end
77
-
78
- def append_flags
79
- case node[:platform]
80
- when "openbsd", "netbsd", "aix", "solaris2", "smartos"
81
- "-G"
82
- when "solaris", "suse", "opensuse"
83
- "-a -G"
84
- end
85
- end
86
-
87
65
  end
88
66
  end
89
67
  end
@@ -57,20 +57,13 @@ class Chef
57
57
 
58
58
  def manage_group
59
59
  if @new_resource.append
60
- members_to_be_added = [ ]
61
- @new_resource.members.each do |member|
62
- members_to_be_added << member if !@current_resource.members.include?(member)
60
+ begin
61
+ #ERROR_MEMBER_IN_ALIAS if a member already exists in the group
62
+ @net_group.local_add_members(@new_resource.members)
63
+ rescue
64
+ members = @new_resource.members + @current_resource.members
65
+ @net_group.local_set_members(members.uniq)
63
66
  end
64
-
65
- # local_add_members will raise ERROR_MEMBER_IN_ALIAS if a
66
- # member already exists in the group.
67
- @net_group.local_add_members(members_to_be_added) unless members_to_be_added.empty?
68
-
69
- members_to_be_removed = [ ]
70
- @new_resource.excluded_members.each do |member|
71
- members_to_be_removed << member if @current_resource.members.include?(member)
72
- end
73
- @net_group.local_delete_members(members_to_be_removed) unless members_to_be_removed.empty?
74
67
  else
75
68
  @net_group.local_set_members(@new_resource.members)
76
69
  end
@@ -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.
@@ -36,13 +36,9 @@ class Chef
36
36
  def action_head
37
37
  message = check_message(@new_resource.message)
38
38
  # returns true from Chef::REST if returns 2XX (Net::HTTPSuccess)
39
- modified = @rest.run_request(
40
- :HEAD,
41
- @rest.create_url("#{@new_resource.url}?message=#{message}"),
42
- @new_resource.headers,
43
- false,
44
- 10,
45
- false
39
+ modified = @rest.head(
40
+ "#{@new_resource.url}?message=#{message}",
41
+ @new_resource.headers
46
42
  )
47
43
  Chef::Log.info("#{@new_resource} HEAD to #{@new_resource.url} successful")
48
44
  Chef::Log.debug("#{@new_resource} HEAD request response: #{modified}")
@@ -53,76 +49,63 @@ class Chef
53
49
  end
54
50
 
55
51
  # Send a GET request to @new_resource.url, with ?message=@new_resource.message
56
- def action_get
52
+ def action_get
57
53
  converge_by("#{@new_resource} GET to #{@new_resource.url}") do
58
54
 
59
55
  message = check_message(@new_resource.message)
60
- body = @rest.run_request(
61
- :GET,
62
- @rest.create_url("#{@new_resource.url}?message=#{message}"),
63
- @new_resource.headers,
56
+ body = @rest.get(
57
+ "#{@new_resource.url}?message=#{message}",
64
58
  false,
65
- 10,
66
- false
59
+ @new_resource.headers
67
60
  )
68
61
  Chef::Log.info("#{@new_resource} GET to #{@new_resource.url} successful")
69
62
  Chef::Log.debug("#{@new_resource} GET request response: #{body}")
70
63
  end
71
64
  end
72
-
65
+
73
66
  # Send a PUT request to @new_resource.url, with the message as the payload
74
- def action_put
67
+ def action_put
75
68
  converge_by("#{@new_resource} PUT to #{@new_resource.url}") do
76
69
  message = check_message(@new_resource.message)
77
- body = @rest.run_request(
78
- :PUT,
79
- @rest.create_url("#{@new_resource.url}"),
80
- @new_resource.headers,
70
+ body = @rest.put(
71
+ "#{@new_resource.url}",
81
72
  message,
82
- 10,
83
- false
73
+ @new_resource.headers
84
74
  )
85
75
  Chef::Log.info("#{@new_resource} PUT to #{@new_resource.url} successful")
86
76
  Chef::Log.debug("#{@new_resource} PUT request response: #{body}")
87
77
  end
88
78
  end
89
-
79
+
90
80
  # Send a POST request to @new_resource.url, with the message as the payload
91
81
  def action_post
92
82
  converge_by("#{@new_resource} POST to #{@new_resource.url}") do
93
83
  message = check_message(@new_resource.message)
94
- body = @rest.run_request(
95
- :POST,
96
- @rest.create_url("#{@new_resource.url}"),
97
- @new_resource.headers,
84
+ body = @rest.post(
85
+ "#{@new_resource.url}",
98
86
  message,
99
- 10,
100
- false
87
+ @new_resource.headers
101
88
  )
102
89
  Chef::Log.info("#{@new_resource} POST to #{@new_resource.url} message: #{message.inspect} successful")
103
90
  Chef::Log.debug("#{@new_resource} POST request response: #{body}")
104
91
  end
105
92
  end
106
-
93
+
107
94
  # Send a DELETE request to @new_resource.url
108
95
  def action_delete
109
96
  converge_by("#{@new_resource} DELETE to #{@new_resource.url}") do
110
- body = @rest.run_request(
111
- :DELETE,
112
- @rest.create_url("#{@new_resource.url}"),
113
- @new_resource.headers,
114
- false,
115
- 10,
116
- false
97
+ body = @rest.delete(
98
+ "#{@new_resource.url}",
99
+ @new_resource.headers
117
100
  )
118
101
  @new_resource.updated_by_last_action(true)
119
102
  Chef::Log.info("#{@new_resource} DELETE to #{@new_resource.url} successful")
120
103
  Chef::Log.debug("#{@new_resource} DELETE request response: #{body}")
121
104
  end
122
105
  end
123
-
106
+
124
107
  private
125
-
108
+
126
109
  def check_message(message)
127
110
  if message.kind_of?(Proc)
128
111
  message.call
@@ -130,7 +113,7 @@ class Chef
130
113
  message
131
114
  end
132
115
  end
133
-
116
+
134
117
  end
135
118
  end
136
119
  end
@@ -27,6 +27,8 @@ require 'chef/scan_access_control'
27
27
  class Chef
28
28
  class Provider
29
29
  class Link < Chef::Provider
30
+
31
+ include Chef::Mixin::EnforceOwnershipAndPermissions
30
32
  include Chef::Mixin::ShellOut
31
33
  include Chef::Mixin::FileClass
32
34
 
@@ -0,0 +1,150 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Christopher Walters (<cw@opscode.com>)
4
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
5
+ # Copyright:: Copyright (c) 2008-2012 Opscode, Inc.
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ require 'chef/provider'
22
+
23
+ class Chef
24
+ class Provider
25
+
26
+ # == Chef::Provider::LWRPBase
27
+ # Base class from which LWRP providers inherit.
28
+ class LWRPBase < Provider
29
+
30
+ # Chef::Provider::LWRPBase::InlineResources
31
+ # Implementation of inline resource convergence for LWRP providers. See
32
+ # Provider::LWRPBase.use_inline_resources for a longer explanation.
33
+ #
34
+ # This code is restricted to a module so that it can be selectively
35
+ # applied to providers on an opt-in basis.
36
+ module InlineResources
37
+
38
+ # Class methods for InlineResources. Overrides the `action` DSL method
39
+ # with one that enables inline resource convergence.
40
+ module ClassMethods
41
+ # Defines an action method on the provider, using
42
+ # recipe_eval_with_update_check to execute the given block.
43
+ def action(name, &block)
44
+ define_method("action_#{name}") do
45
+ recipe_eval_with_update_check(&block)
46
+ end
47
+ end
48
+ end
49
+
50
+ # Executes the given block in a temporary run_context with its own
51
+ # resource collection. After the block is executed, any resources
52
+ # declared inside are converged, and if any are updated, the
53
+ # new_resource will be marked updated.
54
+ def recipe_eval_with_update_check(&block)
55
+ saved_run_context = @run_context
56
+ temp_run_context = @run_context.dup
57
+ @run_context = temp_run_context
58
+ @run_context.resource_collection = Chef::ResourceCollection.new
59
+
60
+ return_value = instance_eval(&block)
61
+ Chef::Runner.new(@run_context).converge
62
+ return_value
63
+ ensure
64
+ @run_context = saved_run_context
65
+ if temp_run_context.resource_collection.any? {|r| r.updated? }
66
+ new_resource.updated_by_last_action(true)
67
+ end
68
+ end
69
+
70
+ end
71
+
72
+ extend Chef::Mixin::ConvertToClassName
73
+ extend Chef::Mixin::FromFile
74
+
75
+ include Chef::DSL::Recipe
76
+
77
+ # These were previously provided by Chef::Mixin::RecipeDefinitionDSLCore.
78
+ # They are not included by its replacment, Chef::DSL::Recipe, but
79
+ # they may be used in existing LWRPs.
80
+ include Chef::DSL::PlatformIntrospection
81
+ include Chef::DSL::DataQuery
82
+
83
+ def self.build_from_file(cookbook_name, filename, run_context)
84
+ provider_name = filename_to_qualified_string(cookbook_name, filename)
85
+
86
+ # Add log entry if we override an existing light-weight provider.
87
+ class_name = convert_to_class_name(provider_name)
88
+
89
+ if Chef::Provider.const_defined?(class_name)
90
+ Chef::Log.info("#{class_name} light-weight provider already initialized -- overriding!")
91
+ end
92
+
93
+ provider_class = Class.new(self)
94
+ provider_class.class_from_file(filename)
95
+
96
+ class_name = convert_to_class_name(provider_name)
97
+ Chef::Provider.const_set(class_name, provider_class)
98
+ Chef::Log.debug("Loaded contents of #{filename} into a provider named #{provider_name} defined in Chef::Provider::#{class_name}")
99
+
100
+ provider_class
101
+ end
102
+
103
+ # Enables inline evaluation of resources in provider actions.
104
+ #
105
+ # Without this option, any resources declared inside the LWRP are added
106
+ # to the resource collection after the current position at the time the
107
+ # action is executed. Because they are added to the primary resource
108
+ # collection for the chef run, they can notify other resources outside
109
+ # the LWRP, and potentially be notified by resources outside the LWRP
110
+ # (but this is complicated by the fact that they don't exist until the
111
+ # provider executes). In this mode, it is impossible to correctly set the
112
+ # updated_by_last_action flag on the parent LWRP resource, since it
113
+ # executes and returns before its component resources are run.
114
+ #
115
+ # With this option enabled, each action creates a temporary run_context
116
+ # with its own resource collection, evaluates the action's code in that
117
+ # context, and then converges the resources created. If any resources
118
+ # were updated, then this provider's new_resource will be marked updated.
119
+ #
120
+ # In this mode, resources created within the LWRP cannot interact with
121
+ # external resources via notifies, though notifications to other
122
+ # resources within the LWRP will work. Delayed notifications are executed
123
+ # at the conclusion of the provider's action, *not* at the end of the
124
+ # main chef run.
125
+ #
126
+ # This mode of evaluation is experimental, but is believed to be a better
127
+ # set of tradeoffs than the append-after mode, so it will likely become
128
+ # the default in a future major release of Chef.
129
+ #
130
+ def self.use_inline_resources
131
+ extend InlineResources::ClassMethods
132
+ include InlineResources
133
+ end
134
+
135
+ # DSL for defining a provider's actions.
136
+ def self.action(name, &block)
137
+ define_method("action_#{name}") do
138
+ instance_eval(&block)
139
+ end
140
+ end
141
+
142
+ # no-op `load_current_resource`. Allows simple LWRP providers to work
143
+ # without defining this method explicitly (silences
144
+ # Chef::Exceptions::Override exception)
145
+ def load_current_resource
146
+ end
147
+
148
+ end
149
+ end
150
+ end