chef 10.34.6-x86-mingw32 → 11.6.2-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (777) hide show
  1. checksums.yaml +5 -13
  2. data/CONTRIBUTING.md +155 -0
  3. data/README.md +89 -0
  4. data/Rakefile +18 -1
  5. data/bin/chef-apply +25 -0
  6. data/bin/chef-service-manager +37 -0
  7. data/bin/chef-shell +34 -0
  8. data/bin/shef +6 -5
  9. data/distro/common/html/chef-client.8.html +4 -4
  10. data/distro/common/html/chef-expander.8.html +4 -4
  11. data/distro/common/html/chef-expanderctl.8.html +4 -4
  12. data/distro/common/html/chef-server-webui.8.html +4 -4
  13. data/distro/common/html/chef-server.8.html +4 -4
  14. data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
  15. data/distro/common/html/chef-solo.8.html +4 -4
  16. data/distro/common/html/chef-solr.8.html +5 -5
  17. data/distro/common/html/knife-bootstrap.1.html +4 -4
  18. data/distro/common/html/knife-client.1.html +4 -4
  19. data/distro/common/html/knife-configure.1.html +4 -4
  20. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  21. data/distro/common/html/knife-cookbook.1.html +4 -4
  22. data/distro/common/html/knife-data-bag.1.html +4 -4
  23. data/distro/common/html/knife-environment.1.html +4 -4
  24. data/distro/common/html/knife-exec.1.html +9 -9
  25. data/distro/common/html/knife-index.1.html +4 -4
  26. data/distro/common/html/knife-node.1.html +4 -4
  27. data/distro/common/html/knife-role.1.html +4 -4
  28. data/distro/common/html/knife-search.1.html +4 -4
  29. data/distro/common/html/knife-ssh.1.html +4 -4
  30. data/distro/common/html/knife-status.1.html +4 -4
  31. data/distro/common/html/knife-tag.1.html +4 -4
  32. data/distro/common/html/knife.1.html +8 -13
  33. data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
  34. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  35. data/distro/common/man/man1/knife-client.1 +0 -99
  36. data/distro/common/man/man1/knife-configure.1 +1 -1
  37. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  38. data/distro/common/man/man1/knife-cookbook.1 +1 -1
  39. data/distro/common/man/man1/knife-data-bag.1 +1 -1
  40. data/distro/common/man/man1/knife-environment.1 +0 -168
  41. data/distro/common/man/man1/knife-exec.1 +4 -7
  42. data/distro/common/man/man1/knife-index.1 +1 -1
  43. data/distro/common/man/man1/knife-node.1 +1 -1
  44. data/distro/common/man/man1/knife-role.1 +1 -1
  45. data/distro/common/man/man1/knife-search.1 +1 -1
  46. data/distro/common/man/man1/knife-ssh.1 +1 -1
  47. data/distro/common/man/man1/knife-status.1 +1 -1
  48. data/distro/common/man/man1/knife-tag.1 +1 -1
  49. data/distro/common/man/man1/knife.1 +3 -6
  50. data/distro/common/man/man8/chef-client.8 +1 -1
  51. data/distro/common/man/man8/chef-expander.8 +1 -1
  52. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  53. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  54. data/distro/common/man/man8/chef-server.8 +1 -1
  55. data/distro/common/man/man8/chef-solo.8 +1 -1
  56. data/distro/common/man/man8/chef-solr.8 +1 -1
  57. data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
  58. data/distro/common/markdown/man1/knife-exec.mkd +11 -6
  59. data/distro/common/markdown/man1/knife.mkd +4 -9
  60. data/distro/debian/etc/default/chef-client +0 -1
  61. data/distro/debian/etc/init.d/chef-client +6 -4
  62. data/distro/windows/service_manager.rb +2 -146
  63. data/lib/chef.rb +3 -6
  64. data/lib/chef/api_client.rb +20 -130
  65. data/lib/chef/api_client/registration.rb +126 -0
  66. data/lib/chef/application.rb +68 -18
  67. data/lib/chef/application/apply.rb +162 -0
  68. data/lib/chef/application/client.rb +37 -22
  69. data/lib/chef/application/knife.rb +2 -4
  70. data/lib/chef/application/solo.rb +27 -13
  71. data/lib/chef/application/windows_service.rb +114 -54
  72. data/lib/chef/application/windows_service_manager.rb +179 -0
  73. data/lib/chef/applications.rb +1 -0
  74. data/lib/chef/chef_fs.rb +9 -0
  75. data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
  76. data/lib/chef/chef_fs/command_line.rb +284 -0
  77. data/lib/chef/chef_fs/config.rb +205 -0
  78. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
  79. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
  80. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
  81. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
  82. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
  83. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
  84. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
  85. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
  86. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
  87. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
  88. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
  89. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  90. data/lib/chef/chef_fs/file_system.rb +426 -0
  91. data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
  92. data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
  93. data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
  94. data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
  95. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
  96. data/lib/chef/chef_fs/file_system/base_fs_object.rb +180 -0
  97. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
  98. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
  99. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
  100. data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
  101. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +60 -0
  102. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +121 -0
  103. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +110 -0
  104. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +223 -0
  105. data/lib/chef/chef_fs/file_system/cookbook_file.rb +85 -0
  106. data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
  107. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  108. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
  109. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +149 -0
  110. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
  111. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +72 -0
  112. data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
  113. data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
  114. data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
  115. data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
  116. data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
  117. data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
  118. data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
  119. data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
  120. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
  121. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  122. data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
  123. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
  124. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  125. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
  126. data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
  127. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +113 -0
  128. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +177 -0
  129. data/lib/chef/chef_fs/knife.rb +116 -0
  130. data/lib/chef/chef_fs/parallelizer.rb +129 -0
  131. data/lib/chef/chef_fs/path_utils.rb +90 -0
  132. data/lib/chef/chef_fs/raw_request.rb +79 -0
  133. data/lib/chef/client.rb +111 -34
  134. data/lib/chef/config.rb +111 -102
  135. data/lib/chef/cookbook/chefignore.rb +2 -1
  136. data/lib/chef/cookbook/metadata.rb +0 -2
  137. data/lib/chef/cookbook/syntax_check.rb +76 -14
  138. data/lib/chef/cookbook_loader.rb +39 -26
  139. data/lib/chef/cookbook_uploader.rb +16 -9
  140. data/lib/chef/cookbook_version.rb +2 -410
  141. data/lib/chef/daemon.rb +24 -19
  142. data/lib/chef/data_bag.rb +20 -104
  143. data/lib/chef/data_bag_item.rb +2 -65
  144. data/lib/chef/deprecation/mixin/template.rb +49 -0
  145. data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
  146. data/lib/chef/deprecation/provider/file.rb +197 -0
  147. data/lib/chef/deprecation/provider/remote_file.rb +86 -0
  148. data/lib/chef/deprecation/provider/template.rb +63 -0
  149. data/lib/chef/deprecation/warnings.rb +38 -0
  150. data/lib/chef/digester.rb +73 -0
  151. data/lib/chef/dsl.rb +6 -0
  152. data/lib/chef/dsl/data_query.rb +71 -0
  153. data/lib/chef/dsl/include_attribute.rb +63 -0
  154. data/lib/chef/dsl/include_recipe.rb +45 -0
  155. data/lib/chef/dsl/platform_introspection.rb +218 -0
  156. data/lib/chef/dsl/recipe.rb +87 -0
  157. data/lib/chef/dsl/registry_helper.rb +59 -0
  158. data/lib/chef/encrypted_data_bag_item.rb +171 -24
  159. data/lib/chef/environment.rb +39 -179
  160. data/lib/chef/event_dispatch/base.rb +3 -0
  161. data/lib/chef/exceptions.rb +107 -8
  162. data/lib/chef/file_access_control/unix.rb +64 -7
  163. data/lib/chef/file_access_control/windows.rb +22 -11
  164. data/lib/chef/file_content_management/content_base.rb +56 -0
  165. data/lib/chef/file_content_management/deploy.rb +38 -0
  166. data/lib/chef/file_content_management/deploy/cp.rb +48 -0
  167. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
  168. data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
  169. data/lib/chef/file_content_management/tempfile.rb +61 -0
  170. data/lib/chef/formatters/base.rb +4 -1
  171. data/lib/chef/formatters/doc.rb +1 -1
  172. data/lib/chef/formatters/error_descriptor.rb +5 -4
  173. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
  174. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +8 -0
  175. data/lib/chef/json_compat.rb +15 -14
  176. data/lib/chef/knife.rb +99 -41
  177. data/lib/chef/knife/bootstrap.rb +46 -2
  178. data/lib/chef/knife/bootstrap/archlinux-gems.erb +1 -1
  179. data/lib/chef/knife/bootstrap/centos5-gems.erb +1 -1
  180. data/lib/chef/knife/bootstrap/chef-full.erb +1 -1
  181. data/lib/chef/knife/bootstrap/fedora13-gems.erb +1 -1
  182. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +1 -1
  183. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +1 -1
  184. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +1 -1
  185. data/lib/chef/knife/client_show.rb +2 -5
  186. data/lib/chef/knife/configure.rb +19 -17
  187. data/lib/chef/knife/cookbook_create.rb +6 -5
  188. data/lib/chef/knife/cookbook_download.rb +13 -5
  189. data/lib/chef/knife/cookbook_metadata.rb +1 -0
  190. data/lib/chef/knife/cookbook_site_share.rb +1 -0
  191. data/lib/chef/knife/cookbook_test.rb +4 -2
  192. data/lib/chef/knife/cookbook_upload.rb +4 -4
  193. data/lib/chef/knife/core/bootstrap_context.rb +11 -5
  194. data/lib/chef/knife/core/generic_presenter.rb +42 -13
  195. data/lib/chef/knife/core/node_editor.rb +36 -16
  196. data/lib/chef/knife/core/node_presenter.rb +1 -1
  197. data/lib/chef/knife/core/subcommand_loader.rb +43 -12
  198. data/lib/chef/knife/core/text_formatter.rb +23 -37
  199. data/lib/chef/knife/core/ui.rb +34 -13
  200. data/lib/chef/knife/delete.rb +106 -0
  201. data/lib/chef/knife/deps.rb +139 -0
  202. data/lib/chef/knife/diff.rb +63 -0
  203. data/lib/chef/knife/download.rb +63 -0
  204. data/lib/chef/knife/edit.rb +76 -0
  205. data/lib/chef/knife/environment_show.rb +2 -0
  206. data/lib/chef/knife/exec.rb +5 -5
  207. data/lib/chef/knife/help_topics.rb +1 -1
  208. data/lib/chef/knife/index_rebuild.rb +91 -7
  209. data/lib/chef/knife/list.rb +153 -0
  210. data/lib/chef/knife/node_run_list_set.rb +66 -0
  211. data/lib/chef/knife/node_show.rb +1 -7
  212. data/lib/chef/knife/raw.rb +64 -0
  213. data/lib/chef/knife/role_show.rb +2 -4
  214. data/lib/chef/knife/search.rb +45 -28
  215. data/lib/chef/knife/show.rb +55 -0
  216. data/lib/chef/knife/ssh.rb +14 -2
  217. data/lib/chef/knife/upload.rb +69 -0
  218. data/lib/chef/knife/user_create.rb +93 -0
  219. data/lib/chef/knife/user_delete.rb +46 -0
  220. data/lib/chef/knife/user_edit.rb +53 -0
  221. data/lib/chef/{provider/whyrun_safe_ruby_block.rb → knife/user_list.rb} +21 -9
  222. data/lib/chef/knife/user_reregister.rb +59 -0
  223. data/lib/chef/knife/user_show.rb +49 -0
  224. data/lib/chef/knife/xargs.rb +265 -0
  225. data/lib/chef/log.rb +2 -2
  226. data/lib/chef/mixin/checksum.rb +3 -3
  227. data/lib/chef/mixin/deep_merge.rb +78 -194
  228. data/lib/chef/mixin/deprecation.rb +35 -0
  229. data/lib/chef/mixin/file_class.rb +0 -9
  230. data/lib/chef/mixin/language.rb +22 -223
  231. data/lib/chef/mixin/language_include_attribute.rb +10 -36
  232. data/lib/chef/mixin/language_include_recipe.rb +7 -33
  233. data/lib/chef/mixin/params_validate.rb +0 -3
  234. data/lib/chef/mixin/recipe_definition_dsl_core.rb +10 -61
  235. data/lib/chef/mixin/securable.rb +32 -7
  236. data/lib/chef/mixin/template.rb +156 -26
  237. data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
  238. data/lib/chef/mixins.rb +1 -5
  239. data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/monkey_patches/file.rb} +6 -14
  240. data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
  241. data/lib/chef/monkey_patches/net_http.rb +0 -34
  242. data/lib/chef/monkey_patches/securerandom.rb +44 -0
  243. data/lib/chef/monologger.rb +93 -0
  244. data/lib/chef/node.rb +139 -308
  245. data/lib/chef/node/attribute.rb +367 -473
  246. data/lib/chef/node/attribute_collections.rb +206 -0
  247. data/lib/chef/node/immutable_collections.rb +186 -0
  248. data/lib/chef/platform.rb +4 -496
  249. data/lib/chef/platform/provider_mapping.rb +529 -0
  250. data/lib/chef/{mixin/check_helper.rb → platform/query_helpers.rb} +20 -9
  251. data/lib/chef/provider.rb +14 -58
  252. data/lib/chef/provider/batch.rb +35 -0
  253. data/lib/chef/provider/breakpoint.rb +6 -6
  254. data/lib/chef/provider/cookbook_file.rb +11 -80
  255. data/lib/chef/provider/cookbook_file/content.rb +49 -0
  256. data/lib/chef/provider/deploy.rb +26 -21
  257. data/lib/chef/provider/deploy/revision.rb +27 -0
  258. data/lib/chef/provider/directory.rb +12 -18
  259. data/lib/chef/provider/execute.rb +22 -5
  260. data/lib/chef/provider/file.rb +297 -248
  261. data/lib/chef/provider/file/content.rb +39 -0
  262. data/lib/chef/provider/git.rb +76 -43
  263. data/lib/chef/provider/group.rb +31 -51
  264. data/lib/chef/provider/group/dscl.rb +13 -53
  265. data/lib/chef/provider/group/gpasswd.rb +19 -14
  266. data/lib/chef/provider/group/groupadd.rb +1 -41
  267. data/lib/chef/provider/group/groupmod.rb +36 -46
  268. data/lib/chef/provider/group/pw.rb +16 -59
  269. data/lib/chef/provider/group/suse.rb +13 -16
  270. data/lib/chef/provider/group/usermod.rb +18 -40
  271. data/lib/chef/provider/group/windows.rb +6 -13
  272. data/lib/chef/provider/http_request.rb +25 -42
  273. data/lib/chef/provider/ifconfig.rb +25 -35
  274. data/lib/chef/provider/ifconfig/debian.rb +71 -0
  275. data/lib/chef/provider/ifconfig/redhat.rb +47 -0
  276. data/lib/chef/provider/link.rb +12 -3
  277. data/lib/chef/provider/lwrp_base.rb +150 -0
  278. data/lib/chef/provider/mount.rb +1 -1
  279. data/lib/chef/provider/mount/mount.rb +8 -3
  280. data/lib/chef/provider/mount/windows.rb +4 -1
  281. data/lib/chef/provider/package/rpm.rb +2 -2
  282. data/lib/chef/provider/package/rubygems.rb +4 -1
  283. data/lib/chef/provider/package/smartos.rb +47 -36
  284. data/lib/chef/provider/package/zypper.rb +45 -55
  285. data/lib/chef/provider/powershell_script.rb +77 -0
  286. data/lib/chef/provider/registry_key.rb +156 -0
  287. data/lib/chef/provider/remote_directory.rb +6 -5
  288. data/lib/chef/provider/remote_file.rb +13 -100
  289. data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
  290. data/lib/chef/provider/remote_file/content.rb +75 -0
  291. data/lib/chef/provider/remote_file/fetcher.rb +43 -0
  292. data/lib/chef/provider/remote_file/ftp.rb +183 -0
  293. data/lib/chef/provider/remote_file/http.rb +124 -0
  294. data/lib/chef/provider/remote_file/local_file.rb +47 -0
  295. data/lib/chef/provider/route.rb +6 -2
  296. data/lib/chef/provider/ruby_block.rb +5 -2
  297. data/lib/chef/provider/script.rb +14 -2
  298. data/lib/chef/provider/service.rb +15 -0
  299. data/lib/chef/provider/service/init.rb +9 -7
  300. data/lib/chef/provider/service/macosx.rb +29 -81
  301. data/lib/chef/provider/service/simple.rb +1 -1
  302. data/lib/chef/provider/service/solaris.rb +6 -5
  303. data/lib/chef/provider/template.rb +16 -81
  304. data/lib/chef/provider/template/content.rb +61 -0
  305. data/lib/chef/provider/template_finder.rb +61 -0
  306. data/lib/chef/provider/user.rb +0 -1
  307. data/lib/chef/provider/user/dscl.rb +175 -568
  308. data/lib/chef/provider/user/useradd.rb +50 -54
  309. data/lib/chef/provider/windows_script.rb +73 -0
  310. data/lib/chef/providers.rb +18 -1
  311. data/lib/chef/recipe.rb +14 -8
  312. data/lib/chef/resource.rb +52 -146
  313. data/lib/chef/resource/{whyrun_safe_ruby_block.rb → batch.rb} +10 -10
  314. data/lib/chef/resource/conditional.rb +4 -0
  315. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
  316. data/lib/chef/resource/file.rb +31 -3
  317. data/lib/chef/resource/group.rb +1 -11
  318. data/lib/chef/resource/http_request.rb +2 -1
  319. data/lib/chef/resource/link.rb +17 -0
  320. data/lib/chef/resource/lwrp_base.rb +132 -0
  321. data/lib/chef/resource/mount.rb +39 -13
  322. data/lib/chef/resource/powershell_script.rb +31 -0
  323. data/lib/chef/resource/registry_key.rb +86 -0
  324. data/lib/chef/resource/remote_directory.rb +6 -5
  325. data/lib/chef/resource/remote_file.rb +62 -25
  326. data/lib/chef/resource/route.rb +1 -1
  327. data/lib/chef/resource/ruby_block.rb +2 -2
  328. data/lib/chef/resource/service.rb +14 -0
  329. data/lib/chef/resource/template.rb +145 -0
  330. data/lib/chef/resource/user.rb +0 -18
  331. data/lib/chef/resource/windows_script.rb +62 -0
  332. data/lib/chef/resource_collection.rb +69 -31
  333. data/lib/chef/resource_reporter.rb +81 -52
  334. data/lib/chef/resources.rb +4 -1
  335. data/lib/chef/rest.rb +55 -127
  336. data/lib/chef/rest/auth_credentials.rb +4 -20
  337. data/lib/chef/rest/rest_request.rb +7 -8
  338. data/lib/chef/role.rb +1 -97
  339. data/lib/chef/run_context.rb +108 -130
  340. data/lib/chef/run_context/cookbook_compiler.rb +280 -0
  341. data/lib/chef/run_list.rb +0 -2
  342. data/lib/chef/run_list/run_list_expansion.rb +1 -16
  343. data/lib/chef/run_lock.rb +96 -0
  344. data/lib/chef/runner.rb +28 -6
  345. data/lib/chef/sandbox.rb +15 -148
  346. data/lib/chef/scan_access_control.rb +8 -5
  347. data/lib/chef/search/query.rb +2 -2
  348. data/lib/chef/shef/ext.rb +3 -575
  349. data/lib/chef/{shef.rb → shell.rb} +35 -40
  350. data/lib/chef/shell/ext.rb +593 -0
  351. data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
  352. data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
  353. data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +15 -13
  354. data/lib/chef/shell_out.rb +7 -0
  355. data/lib/chef/user.rb +182 -0
  356. data/lib/chef/util/backup.rb +84 -0
  357. data/lib/chef/util/diff.rb +145 -0
  358. data/lib/chef/util/file_edit.rb +1 -1
  359. data/lib/chef/util/selinux.rb +100 -0
  360. data/lib/chef/util/windows/net_group.rb +1 -5
  361. data/lib/chef/util/windows/net_user.rb +14 -1
  362. data/lib/chef/util/windows/volume.rb +2 -2
  363. data/lib/chef/version.rb +1 -1
  364. data/lib/chef/version/platform.rb +42 -0
  365. data/lib/chef/version_class.rb +1 -1
  366. data/lib/chef/version_constraint.rb +6 -5
  367. data/lib/chef/{index_queue.rb → version_constraint/platform.rb} +11 -14
  368. data/lib/chef/win32/api/file.rb +8 -2
  369. data/lib/chef/win32/api/security.rb +45 -1
  370. data/lib/chef/win32/registry.rb +382 -0
  371. data/lib/chef/win32/security.rb +19 -0
  372. data/lib/chef/win32/version.rb +25 -8
  373. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
  374. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
  375. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
  376. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
  377. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
  378. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
  379. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
  380. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
  381. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
  382. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
  383. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
  384. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
  385. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
  386. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
  387. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
  388. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  389. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  390. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
  391. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  392. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  393. data/spec/data/apt/var/www/apt/conf/distributions +7 -0
  394. data/spec/data/apt/var/www/apt/conf/incoming +4 -0
  395. data/spec/data/apt/var/www/apt/conf/pulls +3 -0
  396. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  397. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  398. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  399. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  400. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  401. data/spec/data/apt/var/www/apt/db/version +4 -0
  402. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
  403. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
  404. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  405. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
  406. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  407. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  408. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  409. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
  410. data/spec/data/bootstrap/secret.erb +9 -0
  411. data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
  412. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
  413. data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
  414. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  415. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
  416. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
  417. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
  418. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
  419. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
  420. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
  421. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
  422. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
  423. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  424. data/spec/data/knife_subcommand/test_yourself.rb +8 -0
  425. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  426. data/spec/data/nodes/default.rb +3 -3
  427. data/spec/data/nodes/test.example.com.rb +3 -3
  428. data/spec/data/nodes/test.rb +3 -3
  429. data/spec/data/null_config.rb +1 -0
  430. data/spec/data/partial_one.erb +1 -0
  431. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  432. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  433. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  434. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  435. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  436. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  437. data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
  438. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  439. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  440. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  441. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  442. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  443. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  444. data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
  445. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  446. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  447. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  448. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  449. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  450. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  451. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  452. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  453. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  454. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  455. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  456. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  457. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  458. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  459. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  460. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  461. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  462. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  463. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  464. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  465. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  466. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  467. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  468. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  469. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  470. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  471. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  472. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  473. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  474. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  475. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  476. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  477. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  478. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  479. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  480. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  481. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  482. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  483. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  484. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  485. data/spec/data/shef-config.rb +10 -0
  486. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  487. data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
  488. data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
  489. data/spec/functional/knife/exec_spec.rb +3 -3
  490. data/spec/functional/knife/smoke_test.rb +34 -0
  491. data/spec/functional/knife/ssh_spec.rb +5 -1
  492. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
  493. data/spec/functional/resource/batch_spec.rb +64 -0
  494. data/spec/functional/resource/cookbook_file_spec.rb +15 -9
  495. data/spec/functional/resource/deploy_revision_spec.rb +180 -0
  496. data/spec/functional/resource/directory_spec.rb +5 -1
  497. data/spec/functional/resource/file_spec.rb +71 -21
  498. data/spec/functional/resource/git_spec.rb +259 -0
  499. data/spec/functional/resource/link_spec.rb +424 -388
  500. data/spec/functional/resource/package_spec.rb +297 -0
  501. data/spec/functional/resource/powershell_spec.rb +188 -0
  502. data/spec/functional/resource/registry_spec.rb +576 -0
  503. data/spec/functional/resource/remote_directory_spec.rb +143 -37
  504. data/spec/functional/resource/remote_file_spec.rb +99 -13
  505. data/spec/functional/resource/template_spec.rb +180 -3
  506. data/spec/functional/resource/user_spec.rb +547 -0
  507. data/spec/functional/run_lock_spec.rb +243 -0
  508. data/spec/functional/shell_spec.rb +102 -0
  509. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  510. data/spec/functional/win32/security_spec.rb +37 -0
  511. data/spec/functional/win32/service_manager_spec.rb +269 -0
  512. data/spec/functional/win32/versions_spec.rb +78 -0
  513. data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
  514. data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
  515. data/spec/integration/knife/chefignore_spec.rb +271 -0
  516. data/spec/integration/knife/delete_spec.rb +944 -0
  517. data/spec/integration/knife/deps_spec.rb +648 -0
  518. data/spec/integration/knife/diff_spec.rb +536 -0
  519. data/spec/integration/knife/download_spec.rb +962 -0
  520. data/spec/integration/knife/list_spec.rb +633 -0
  521. data/spec/integration/knife/raw_spec.rb +166 -0
  522. data/spec/integration/knife/redirection_spec.rb +57 -0
  523. data/spec/integration/knife/show_spec.rb +158 -0
  524. data/spec/integration/knife/upload_spec.rb +1060 -0
  525. data/spec/integration/solo/solo_spec.rb +41 -0
  526. data/spec/spec_helper.rb +49 -13
  527. data/spec/stress/win32/security_spec.rb +1 -1
  528. data/spec/support/chef_helpers.rb +33 -3
  529. data/spec/support/lib/chef/resource/cat.rb +3 -5
  530. data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
  531. data/spec/support/lib/chef/resource/zen_master.rb +8 -10
  532. data/spec/support/platform_helpers.rb +46 -13
  533. data/spec/support/platforms/win32/spec_service.rb +59 -0
  534. data/spec/support/shared/functional/diff_disabled.rb +10 -0
  535. data/spec/support/shared/functional/directory_resource.rb +129 -38
  536. data/spec/support/shared/functional/file_resource.rb +837 -71
  537. data/spec/support/shared/functional/securable_resource.rb +189 -58
  538. data/spec/support/shared/functional/securable_resource_with_reporting.rb +385 -0
  539. data/spec/support/shared/integration/integration_helper.rb +166 -0
  540. data/spec/support/shared/integration/knife_support.rb +171 -0
  541. data/spec/support/shared/unit/execute_resource.rb +125 -0
  542. data/spec/support/shared/unit/file_system_support.rb +70 -0
  543. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  544. data/spec/support/shared/unit/provider/file.rb +609 -0
  545. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
  546. data/spec/support/shared/unit/script_resource.rb +52 -0
  547. data/spec/support/shared/unit/windows_script_resource.rb +48 -0
  548. data/spec/tiny_server.rb +13 -11
  549. data/spec/unit/api_client/registration_spec.rb +172 -0
  550. data/spec/unit/api_client_spec.rb +78 -156
  551. data/spec/unit/application/apply.rb +84 -0
  552. data/spec/unit/application/client_spec.rb +16 -14
  553. data/spec/unit/application/knife_spec.rb +17 -0
  554. data/spec/unit/application/solo_spec.rb +1 -1
  555. data/spec/unit/application_spec.rb +113 -3
  556. data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
  557. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  558. data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
  559. data/spec/unit/chef_fs/file_system_spec.rb +135 -0
  560. data/spec/unit/client_spec.rb +195 -23
  561. data/spec/unit/config_spec.rb +102 -51
  562. data/spec/unit/cookbook/syntax_check_spec.rb +75 -111
  563. data/spec/unit/cookbook_loader_spec.rb +154 -91
  564. data/spec/unit/cookbook_manifest_spec.rb +81 -81
  565. data/spec/unit/cookbook_spec.rb +3 -20
  566. data/spec/unit/cookbook_version_spec.rb +23 -122
  567. data/spec/unit/daemon_spec.rb +24 -19
  568. data/spec/unit/data_bag_spec.rb +13 -4
  569. data/spec/unit/deprecation_spec.rb +86 -0
  570. data/spec/unit/digester_spec.rb +50 -0
  571. data/spec/unit/dsl/data_query_spec.rb +66 -0
  572. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  573. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  574. data/spec/unit/encrypted_data_bag_item_spec.rb +197 -157
  575. data/spec/unit/environment_spec.rb +94 -126
  576. data/spec/unit/exceptions_spec.rb +8 -4
  577. data/spec/unit/file_access_control_spec.rb +21 -1
  578. data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
  579. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
  580. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
  581. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
  582. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +6 -5
  583. data/spec/unit/json_compat_spec.rb +8 -0
  584. data/spec/unit/knife/bootstrap_spec.rb +130 -29
  585. data/spec/unit/knife/configure_spec.rb +64 -45
  586. data/spec/unit/knife/cookbook_download_spec.rb +24 -3
  587. data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
  588. data/spec/unit/knife/cookbook_test_spec.rb +1 -0
  589. data/spec/unit/knife/cookbook_upload_spec.rb +39 -0
  590. data/spec/unit/knife/core/bootstrap_context_spec.rb +79 -62
  591. data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
  592. data/spec/unit/knife/core/ui_spec.rb +196 -124
  593. data/spec/unit/knife/data_bag_create_spec.rb +9 -0
  594. data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
  595. data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
  596. data/spec/unit/knife/data_bag_show_spec.rb +11 -4
  597. data/spec/unit/knife/index_rebuild_spec.rb +96 -33
  598. data/spec/unit/knife/knife_help.rb +7 -7
  599. data/spec/unit/knife/node_edit_spec.rb +6 -33
  600. data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
  601. data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
  602. data/spec/unit/knife/ssh_spec.rb +12 -15
  603. data/spec/unit/knife/status_spec.rb +2 -2
  604. data/spec/unit/knife/user_create_spec.rb +86 -0
  605. data/spec/unit/knife/user_delete_spec.rb +39 -0
  606. data/spec/unit/knife/user_edit_spec.rb +42 -0
  607. data/spec/unit/knife/user_list_spec.rb +32 -0
  608. data/spec/unit/knife/user_reregister_spec.rb +53 -0
  609. data/spec/unit/knife/user_show_spec.rb +41 -0
  610. data/spec/unit/knife_spec.rb +74 -0
  611. data/spec/unit/lwrp_spec.rb +102 -60
  612. data/spec/unit/mixin/checksum_spec.rb +2 -2
  613. data/spec/unit/mixin/deep_merge_spec.rb +130 -791
  614. data/spec/unit/mixin/deprecation_spec.rb +23 -0
  615. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +7 -1
  616. data/spec/unit/mixin/params_validate_spec.rb +4 -2
  617. data/spec/unit/mixin/securable_spec.rb +5 -3
  618. data/spec/unit/mixin/template_spec.rb +145 -14
  619. data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
  620. data/spec/unit/node/attribute_spec.rb +273 -173
  621. data/spec/unit/node/immutable_collections_spec.rb +139 -0
  622. data/spec/unit/node_spec.rb +418 -370
  623. data/spec/unit/platform_spec.rb +21 -8
  624. data/spec/unit/provider/breakpoint_spec.rb +8 -8
  625. data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
  626. data/spec/unit/provider/cookbook_file_spec.rb +26 -187
  627. data/spec/unit/provider/cron/solaris_spec.rb +1 -1
  628. data/spec/unit/provider/deploy/revision_spec.rb +19 -11
  629. data/spec/unit/provider/deploy_spec.rb +2 -2
  630. data/spec/unit/provider/directory_spec.rb +99 -67
  631. data/spec/unit/provider/env_spec.rb +2 -2
  632. data/spec/unit/provider/execute_spec.rb +27 -1
  633. data/spec/unit/provider/file/content_spec.rb +101 -0
  634. data/spec/unit/provider/file_spec.rb +25 -475
  635. data/spec/unit/provider/git_spec.rb +224 -28
  636. data/spec/unit/provider/group/dscl_spec.rb +0 -36
  637. data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
  638. data/spec/unit/provider/group/groupadd_spec.rb +4 -3
  639. data/spec/unit/provider/group/groupmod_spec.rb +1 -0
  640. data/spec/unit/provider/group/pw_spec.rb +15 -12
  641. data/spec/unit/provider/group/usermod_spec.rb +9 -22
  642. data/spec/unit/provider/group/windows_spec.rb +8 -0
  643. data/spec/unit/provider/group_spec.rb +6 -28
  644. data/spec/unit/provider/http_request_spec.rb +28 -69
  645. data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
  646. data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
  647. data/spec/unit/provider/ifconfig_spec.rb +0 -33
  648. data/spec/unit/provider/mount/mount_spec.rb +33 -2
  649. data/spec/unit/provider/mount/windows_spec.rb +4 -1
  650. data/spec/unit/provider/mount_spec.rb +16 -6
  651. data/spec/unit/provider/ohai_spec.rb +4 -4
  652. data/spec/unit/provider/package/apt_spec.rb +0 -1
  653. data/spec/unit/provider/package/ips_spec.rb +0 -1
  654. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  655. data/spec/unit/provider/package/rubygems_spec.rb +1 -1
  656. data/spec/unit/provider/package/smartos_spec.rb +3 -2
  657. data/spec/unit/provider/package/zypper_spec.rb +84 -22
  658. data/spec/unit/provider/package_spec.rb +7 -9
  659. data/spec/unit/provider/powershell_spec.rb +38 -0
  660. data/spec/unit/provider/registry_key_spec.rb +269 -0
  661. data/spec/unit/provider/remote_directory_spec.rb +7 -7
  662. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
  663. data/spec/unit/provider/remote_file/content_spec.rb +230 -0
  664. data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
  665. data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
  666. data/spec/unit/provider/remote_file/http_spec.rb +319 -0
  667. data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
  668. data/spec/unit/provider/remote_file_spec.rb +33 -259
  669. data/spec/unit/provider/route_spec.rb +29 -12
  670. data/spec/unit/provider/ruby_block_spec.rb +8 -0
  671. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  672. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  673. data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
  674. data/spec/unit/provider/service/init_service_spec.rb +27 -4
  675. data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
  676. data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
  677. data/spec/unit/provider/service/macosx_spec.rb +176 -207
  678. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  679. data/spec/unit/provider/service/simple_service_spec.rb +3 -3
  680. data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
  681. data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
  682. data/spec/unit/provider/service/upstart_service_spec.rb +11 -11
  683. data/spec/unit/provider/service_spec.rb +3 -3
  684. data/spec/unit/provider/subversion_spec.rb +1 -1
  685. data/spec/unit/provider/template/content_spec.rb +78 -0
  686. data/spec/unit/provider/template_spec.rb +52 -160
  687. data/spec/unit/provider/user/dscl_spec.rb +285 -681
  688. data/spec/unit/provider/user/solaris_spec.rb +39 -373
  689. data/spec/unit/provider/user/useradd_spec.rb +12 -379
  690. data/spec/unit/provider/user_spec.rb +1 -1
  691. data/spec/unit/recipe_spec.rb +10 -8
  692. data/spec/unit/registry_helper_spec.rb +376 -0
  693. data/spec/unit/resource/batch_spec.rb +48 -0
  694. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
  695. data/spec/unit/resource/execute_spec.rb +3 -101
  696. data/spec/unit/resource/file_spec.rb +0 -5
  697. data/spec/unit/resource/group_spec.rb +9 -0
  698. data/spec/unit/resource/ifconfig_spec.rb +60 -1
  699. data/spec/unit/resource/link_spec.rb +1 -0
  700. data/spec/unit/resource/mount_spec.rb +37 -11
  701. data/spec/unit/resource/powershell_spec.rb +48 -0
  702. data/spec/unit/resource/registry_key_spec.rb +171 -0
  703. data/spec/unit/resource/remote_file_spec.rb +63 -25
  704. data/spec/unit/resource/route_spec.rb +1 -1
  705. data/spec/unit/resource/ruby_block_spec.rb +7 -3
  706. data/spec/unit/resource/script_spec.rb +13 -36
  707. data/spec/unit/resource/service_spec.rb +11 -0
  708. data/spec/unit/resource/template_spec.rb +111 -8
  709. data/spec/unit/resource/user_spec.rb +7 -0
  710. data/spec/unit/resource_collection_spec.rb +61 -32
  711. data/spec/unit/resource_reporter_spec.rb +115 -102
  712. data/spec/unit/resource_spec.rb +197 -5
  713. data/spec/unit/rest/auth_credentials_spec.rb +4 -21
  714. data/spec/unit/rest_spec.rb +134 -284
  715. data/spec/unit/run_context/cookbook_compiler_spec.rb +190 -0
  716. data/spec/unit/run_context_spec.rb +18 -4
  717. data/spec/unit/run_list_spec.rb +0 -209
  718. data/spec/unit/run_lock_spec.rb +37 -0
  719. data/spec/unit/runner_spec.rb +102 -3
  720. data/spec/unit/scan_access_control_spec.rb +8 -6
  721. data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
  722. data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
  723. data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +16 -58
  724. data/spec/unit/shell_out_spec.rb +18 -0
  725. data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
  726. data/spec/unit/user_spec.rb +255 -0
  727. data/spec/unit/util/backup_spec.rb +149 -0
  728. data/spec/unit/util/diff_spec.rb +596 -0
  729. data/spec/unit/util/selinux_spec.rb +172 -0
  730. data/spec/unit/version/platform_spec.rb +61 -0
  731. data/spec/unit/version_constraint/platform_spec.rb +46 -0
  732. data/spec/unit/version_constraint_spec.rb +5 -0
  733. metadata +493 -264
  734. data/README.rdoc +0 -177
  735. data/distro/common/html/knife-recipe.1.html +0 -92
  736. data/lib/chef/certificate.rb +0 -161
  737. data/lib/chef/checksum.rb +0 -167
  738. data/lib/chef/checksum_cache.rb +0 -190
  739. data/lib/chef/cookbook_version_selector.rb +0 -168
  740. data/lib/chef/couchdb.rb +0 -246
  741. data/lib/chef/index_queue/amqp_client.rb +0 -116
  742. data/lib/chef/index_queue/consumer.rb +0 -76
  743. data/lib/chef/index_queue/indexable.rb +0 -109
  744. data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
  745. data/lib/chef/monkey_patches/dir.rb +0 -36
  746. data/lib/chef/monkey_patches/moneta.rb +0 -50
  747. data/lib/chef/monkey_patches/uri.rb +0 -70
  748. data/lib/chef/openid_registration.rb +0 -187
  749. data/lib/chef/solr_query.rb +0 -187
  750. data/lib/chef/solr_query/lucene.treetop +0 -150
  751. data/lib/chef/solr_query/lucene_nodes.rb +0 -285
  752. data/lib/chef/solr_query/query_transform.rb +0 -65
  753. data/lib/chef/solr_query/solr_http_request.rb +0 -132
  754. data/lib/chef/webui_user.rb +0 -231
  755. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  756. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  757. data/spec/data/mac_users/10.7.plist.xml +0 -559
  758. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  759. data/spec/data/mac_users/10.8.plist.xml +0 -559
  760. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  761. data/spec/data/mac_users/10.9.plist.xml +0 -560
  762. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  763. data/spec/functional/resource/base.rb +0 -40
  764. data/spec/functional/resource/group_spec.rb +0 -343
  765. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  766. data/spec/unit/certificate_spec.rb +0 -76
  767. data/spec/unit/checksum_cache_spec.rb +0 -209
  768. data/spec/unit/checksum_spec.rb +0 -94
  769. data/spec/unit/couchdb_spec.rb +0 -274
  770. data/spec/unit/index_queue_spec.rb +0 -391
  771. data/spec/unit/mixin/language_spec.rb +0 -305
  772. data/spec/unit/openid_registration_spec.rb +0 -153
  773. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
  774. data/spec/unit/solr_query/query_transform_spec.rb +0 -454
  775. data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
  776. data/spec/unit/solr_query_spec.rb +0 -203
  777. data/spec/unit/webui_user_spec.rb +0 -238
@@ -0,0 +1,206 @@
1
+ #--
2
+ # Author:: Daniel DeLeo (<dan@opscode.com>)
3
+ # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ class Chef
20
+ class Node
21
+
22
+ # == AttrArray
23
+ # AttrArray is identical to Array, except that it keeps a reference to the
24
+ # "root" (Chef::Node::Attribute) object, and will trigger a cache
25
+ # invalidation on that object when mutated.
26
+ class AttrArray < Array
27
+
28
+ MUTATOR_METHODS = [
29
+ :<<,
30
+ :[]=,
31
+ :clear,
32
+ :collect!,
33
+ :compact!,
34
+ :default=,
35
+ :default_proc=,
36
+ :delete,
37
+ :delete_at,
38
+ :delete_if,
39
+ :fill,
40
+ :flatten!,
41
+ :insert,
42
+ :keep_if,
43
+ :map!,
44
+ :merge!,
45
+ :pop,
46
+ :push,
47
+ :update,
48
+ :reject!,
49
+ :reverse!,
50
+ :replace,
51
+ :select!,
52
+ :shift,
53
+ :slice!,
54
+ :sort!,
55
+ :sort_by!,
56
+ :uniq!,
57
+ :unshift
58
+ ]
59
+
60
+ # For all of the methods that may mutate an Array, we override them to
61
+ # also invalidate the cached merged_attributes on the root
62
+ # Node::Attribute object.
63
+ MUTATOR_METHODS.each do |mutator|
64
+ class_eval(<<-METHOD_DEFN, __FILE__, __LINE__)
65
+ def #{mutator}(*args, &block)
66
+ root.reset_cache
67
+ super
68
+ end
69
+ METHOD_DEFN
70
+ end
71
+
72
+ attr_reader :root
73
+
74
+ def initialize(root, data)
75
+ @root = root
76
+ super(data)
77
+ end
78
+
79
+ def dup
80
+ Array.new(map {|e| e.dup})
81
+ end
82
+
83
+ end
84
+
85
+ # == VividMash
86
+ # VividMash is identical to a Mash, with a few exceptions:
87
+ # * It has a reference to the root Chef::Node::Attribute to which it
88
+ # belongs, and will trigger cache invalidation on that object when
89
+ # mutated.
90
+ # * It auto-vivifies, that is a reference to a missing element will result
91
+ # in the creation of a new VividMash for that key. (This only works when
92
+ # using the element reference method, `[]` -- other methods, such as
93
+ # #fetch, work as normal).
94
+ # * It supports a set_unless flag (via the root Attribute object) which
95
+ # allows `||=` style behavior (`||=` does not work with
96
+ # auto-vivification). This is only implemented for #[]=; methods such as
97
+ # #store work as normal.
98
+ # * attr_accessor style element set and get are supported via method_missing
99
+ class VividMash < Mash
100
+ attr_reader :root
101
+
102
+ # Methods that mutate a VividMash. Each of them is overridden so that it
103
+ # also invalidates the cached merged_attributes on the root Attribute
104
+ # object.
105
+ MUTATOR_METHODS = [
106
+ :clear,
107
+ :delete,
108
+ :delete_if,
109
+ :keep_if,
110
+ :merge!,
111
+ :update,
112
+ :reject!,
113
+ :replace,
114
+ :select!,
115
+ :shift
116
+ ]
117
+
118
+ # For all of the mutating methods on Mash, override them so that they
119
+ # also invalidate the cached `merged_attributes` on the root Attribute
120
+ # object.
121
+ MUTATOR_METHODS.each do |mutator|
122
+ class_eval(<<-METHOD_DEFN, __FILE__, __LINE__)
123
+ def #{mutator}(*args, &block)
124
+ root.reset_cache
125
+ super
126
+ end
127
+ METHOD_DEFN
128
+ end
129
+
130
+ def initialize(root, data={})
131
+ @root = root
132
+ super(data)
133
+ end
134
+
135
+ def [](key)
136
+ value = super
137
+ if !key?(key)
138
+ value = self.class.new(root)
139
+ self[key] = value
140
+ else
141
+ value
142
+ end
143
+ end
144
+
145
+ def []=(key, value)
146
+ if set_unless? && key?(key)
147
+ self[key]
148
+ else
149
+ root.reset_cache
150
+ super
151
+ end
152
+ end
153
+
154
+ alias :attribute? :has_key?
155
+
156
+ def method_missing(symbol, *args)
157
+ # Calling `puts arg` implicitly calls #to_ary on `arg`. If `arg` does
158
+ # not implement #to_ary, ruby recognizes it as a single argument, and
159
+ # if it returns an Array, then ruby prints each element. If we don't
160
+ # account for that here, we'll auto-vivify a VividMash for the key
161
+ # :to_ary which creates an unwanted key and raises a TypeError.
162
+ if symbol == :to_ary
163
+ super
164
+ elsif args.empty?
165
+ self[symbol]
166
+ elsif symbol.to_s =~ /=$/
167
+ key_to_set = symbol.to_s[/^(.+)=$/, 1]
168
+ self[key_to_set] = (args.length == 1 ? args[0] : args)
169
+ else
170
+ raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'. To set an attribute, use `#{symbol}=value' instead."
171
+ end
172
+ end
173
+
174
+ def set_unless?
175
+ @root.set_unless?
176
+ end
177
+
178
+ def convert_key(key)
179
+ super
180
+ end
181
+
182
+ # Mash uses #convert_value to mashify values on input.
183
+ # We override it here to convert hash or array values to VividMash or
184
+ # AttrArray for consistency and to ensure that the added parts of the
185
+ # attribute tree will have the correct cache invalidation behavior.
186
+ def convert_value(value)
187
+ case value
188
+ when VividMash
189
+ value
190
+ when Hash
191
+ VividMash.new(root, value)
192
+ when Array
193
+ AttrArray.new(root, value)
194
+ else
195
+ value
196
+ end
197
+ end
198
+
199
+ def dup
200
+ Mash.new(self)
201
+ end
202
+
203
+ end
204
+
205
+ end
206
+ end
@@ -0,0 +1,186 @@
1
+
2
+ class Chef
3
+ class Node
4
+
5
+ module Immutablize
6
+ def immutablize(value)
7
+ case value
8
+ when Hash
9
+ ImmutableMash.new(value)
10
+ when Array
11
+ ImmutableArray.new(value)
12
+ else
13
+ value
14
+ end
15
+ end
16
+ end
17
+
18
+ # == ImmutableArray
19
+ # ImmutableArray is used to implement Array collections when reading node
20
+ # attributes.
21
+ #
22
+ # ImmutableArray acts like an ordinary Array, except:
23
+ # * Methods that mutate the array are overridden to raise an error, making
24
+ # the collection more or less immutable.
25
+ # * Since this class stores values computed from a parent
26
+ # Chef::Node::Attribute's values, it overrides all reader methods to
27
+ # detect staleness and raise an error if accessed when stale.
28
+ class ImmutableArray < Array
29
+ include Immutablize
30
+
31
+ alias :internal_push :<<
32
+ private :internal_push
33
+
34
+ # A list of methods that mutate Array. Each of these is overridden to
35
+ # raise an error, making this instances of this class more or less
36
+ # immutable.
37
+ DISALLOWED_MUTATOR_METHODS = [
38
+ :<<,
39
+ :[]=,
40
+ :clear,
41
+ :collect!,
42
+ :compact!,
43
+ :default=,
44
+ :default_proc=,
45
+ :delete,
46
+ :delete_at,
47
+ :delete_if,
48
+ :fill,
49
+ :flatten!,
50
+ :insert,
51
+ :keep_if,
52
+ :map!,
53
+ :merge!,
54
+ :pop,
55
+ :push,
56
+ :update,
57
+ :reject!,
58
+ :reverse!,
59
+ :replace,
60
+ :select!,
61
+ :shift,
62
+ :slice!,
63
+ :sort!,
64
+ :sort_by!,
65
+ :uniq!,
66
+ :unshift
67
+ ]
68
+
69
+ def initialize(array_data)
70
+ array_data.each do |value|
71
+ internal_push(immutablize(value))
72
+ end
73
+ end
74
+
75
+ # Redefine all of the methods that mutate a Hash to raise an error when called.
76
+ # This is the magic that makes this object "Immutable"
77
+ DISALLOWED_MUTATOR_METHODS.each do |mutator_method_name|
78
+ # Ruby 1.8 blocks can't have block arguments, so we must use string eval:
79
+ class_eval(<<-METHOD_DEFN, __FILE__, __LINE__)
80
+ def #{mutator_method_name}(*args, &block)
81
+ msg = "Node attributes are read-only when you do not specify which precedence level to set. " +
82
+ %Q(To set an attribute use code like `node.default["key"] = "value"')
83
+ raise Exceptions::ImmutableAttributeModification, msg
84
+ end
85
+ METHOD_DEFN
86
+ end
87
+
88
+ def dup
89
+ Array.new(map {|e| e.dup })
90
+ end
91
+
92
+ end
93
+
94
+ # == ImmutableMash
95
+ # ImmutableMash implements Hash/Dict behavior for reading values from node
96
+ # attributes.
97
+ #
98
+ # ImmutableMash acts like a Mash (Hash that is indifferent to String or
99
+ # Symbol keys), with some important exceptions:
100
+ # * Methods that mutate state are overridden to raise an error instead.
101
+ # * Methods that read from the collection are overriden so that they check
102
+ # if the Chef::Node::Attribute has been modified since an instance of
103
+ # this class was generated. An error is raised if the object detects that
104
+ # it is stale.
105
+ # * Values can be accessed in attr_reader-like fashion via method_missing.
106
+ class ImmutableMash < Mash
107
+
108
+ include Immutablize
109
+
110
+ alias :internal_set :[]=
111
+ private :internal_set
112
+
113
+ DISALLOWED_MUTATOR_METHODS = [
114
+ :[]=,
115
+ :clear,
116
+ :collect!,
117
+ :default=,
118
+ :default_proc=,
119
+ :delete,
120
+ :delete_if,
121
+ :keep_if,
122
+ :map!,
123
+ :merge!,
124
+ :update,
125
+ :reject!,
126
+ :replace,
127
+ :select!,
128
+ :shift
129
+ ]
130
+
131
+ def initialize(mash_data)
132
+ mash_data.each do |key, value|
133
+ internal_set(key, immutablize(value))
134
+ end
135
+ end
136
+
137
+ alias :attribute? :has_key?
138
+
139
+ # Redefine all of the methods that mutate a Hash to raise an error when called.
140
+ # This is the magic that makes this object "Immutable"
141
+ DISALLOWED_MUTATOR_METHODS.each do |mutator_method_name|
142
+ # Ruby 1.8 blocks can't have block arguments, so we must use string eval:
143
+ class_eval(<<-METHOD_DEFN, __FILE__, __LINE__)
144
+ def #{mutator_method_name}(*args, &block)
145
+ msg = "Node attributes are read-only when you do not specify which precedence level to set. " +
146
+ %Q(To set an attribute use code like `node.default["key"] = "value"')
147
+ raise Exceptions::ImmutableAttributeModification, msg
148
+ end
149
+ METHOD_DEFN
150
+ end
151
+
152
+ def method_missing(symbol, *args)
153
+ if args.empty?
154
+ if key?(symbol)
155
+ self[symbol]
156
+ else
157
+ raise NoMethodError, "Undefined method or attribute `#{symbol}' on `node'"
158
+ end
159
+ # This will raise a ImmutableAttributeModification error:
160
+ elsif symbol.to_s =~ /=$/
161
+ key_to_set = symbol.to_s[/^(.+)=$/, 1]
162
+ self[key_to_set] = (args.length == 1 ? args[0] : args)
163
+ else
164
+ raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'"
165
+ end
166
+ end
167
+
168
+ # Mash uses #convert_value to mashify values on input.
169
+ # Since we're handling this ourselves, override it to be a no-op
170
+ def convert_value(value)
171
+ value
172
+ end
173
+
174
+ # NOTE: #default and #default= are likely to be pretty confusing. For a
175
+ # regular ruby Hash, they control what value is returned for, e.g.,
176
+ # hash[:no_such_key] #=> hash.default
177
+ # Of course, 'default' has a specific meaning in Chef-land
178
+
179
+ def dup
180
+ Mash.new(self)
181
+ end
182
+
183
+ end
184
+
185
+ end
186
+ end
@@ -16,506 +16,14 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require 'chef/config'
20
- require 'chef/log'
21
- require 'chef/mixin/params_validate'
22
-
23
- # Actually, this file depends on nearly every provider in chef, but actually
24
- # requiring them causes circular requires resulting in uninitialized constant
25
- # errors.
26
- require 'chef/provider'
27
- require 'chef/provider/log'
28
- require 'chef/provider/user'
29
- require 'chef/provider/group'
30
- require 'chef/provider/mount'
31
- require 'chef/provider/service'
32
- require 'chef/provider/package'
33
-
19
+ require 'chef/platform/provider_mapping'
20
+ require 'chef/platform/query_helpers'
34
21
 
35
22
  class Chef
36
23
  class Platform
37
24
 
38
- class << self
39
- attr_writer :platforms
40
-
41
- def platforms
42
- @platforms ||= {
43
- :mac_os_x => {
44
- :default => {
45
- :package => Chef::Provider::Package::Macports,
46
- :service => Chef::Provider::Service::Macosx,
47
- :user => Chef::Provider::User::Dscl,
48
- :group => Chef::Provider::Group::Dscl
49
- }
50
- },
51
- :mac_os_x_server => {
52
- :default => {
53
- :package => Chef::Provider::Package::Macports,
54
- :service => Chef::Provider::Service::Macosx,
55
- :user => Chef::Provider::User::Dscl,
56
- :group => Chef::Provider::Group::Dscl
57
- }
58
- },
59
- :freebsd => {
60
- :default => {
61
- :group => Chef::Provider::Group::Pw,
62
- :package => Chef::Provider::Package::Freebsd,
63
- :service => Chef::Provider::Service::Freebsd,
64
- :user => Chef::Provider::User::Pw,
65
- :cron => Chef::Provider::Cron
66
- }
67
- },
68
- :ubuntu => {
69
- :default => {
70
- :package => Chef::Provider::Package::Apt,
71
- :service => Chef::Provider::Service::Debian,
72
- :cron => Chef::Provider::Cron,
73
- :mdadm => Chef::Provider::Mdadm
74
- }
75
- },
76
- :gcel => {
77
- :default => {
78
- :package => Chef::Provider::Package::Apt,
79
- :service => Chef::Provider::Service::Debian,
80
- :cron => Chef::Provider::Cron,
81
- :mdadm => Chef::Provider::Mdadm
82
- }
83
- },
84
- :linaro => {
85
- :default => {
86
- :package => Chef::Provider::Package::Apt,
87
- :service => Chef::Provider::Service::Debian,
88
- :cron => Chef::Provider::Cron,
89
- :mdadm => Chef::Provider::Mdadm
90
- }
91
- },
92
- :raspbian => {
93
- :default => {
94
- :package => Chef::Provider::Package::Apt,
95
- :service => Chef::Provider::Service::Debian,
96
- :cron => Chef::Provider::Cron,
97
- :mdadm => Chef::Provider::Mdadm
98
- }
99
- },
100
- :linuxmint => {
101
- :default => {
102
- :package => Chef::Provider::Package::Apt,
103
- :service => Chef::Provider::Service::Upstart,
104
- :cron => Chef::Provider::Cron,
105
- :mdadm => Chef::Provider::Mdadm
106
- }
107
- },
108
- :debian => {
109
- :default => {
110
- :package => Chef::Provider::Package::Apt,
111
- :service => Chef::Provider::Service::Debian,
112
- :cron => Chef::Provider::Cron,
113
- :mdadm => Chef::Provider::Mdadm
114
- },
115
- "6.0" => {
116
- :service => Chef::Provider::Service::Insserv
117
- }
118
- },
119
- :xenserver => {
120
- :default => {
121
- :service => Chef::Provider::Service::Redhat,
122
- :cron => Chef::Provider::Cron,
123
- :package => Chef::Provider::Package::Yum,
124
- :mdadm => Chef::Provider::Mdadm
125
- }
126
- },
127
- :centos => {
128
- :default => {
129
- :service => Chef::Provider::Service::Redhat,
130
- :cron => Chef::Provider::Cron,
131
- :package => Chef::Provider::Package::Yum,
132
- :mdadm => Chef::Provider::Mdadm
133
- }
134
- },
135
- :amazon => {
136
- :default => {
137
- :service => Chef::Provider::Service::Redhat,
138
- :cron => Chef::Provider::Cron,
139
- :package => Chef::Provider::Package::Yum,
140
- :mdadm => Chef::Provider::Mdadm
141
- }
142
- },
143
- :scientific => {
144
- :default => {
145
- :service => Chef::Provider::Service::Redhat,
146
- :cron => Chef::Provider::Cron,
147
- :package => Chef::Provider::Package::Yum,
148
- :mdadm => Chef::Provider::Mdadm
149
- }
150
- },
151
- :fedora => {
152
- :default => {
153
- :service => Chef::Provider::Service::Redhat,
154
- :cron => Chef::Provider::Cron,
155
- :package => Chef::Provider::Package::Yum,
156
- :mdadm => Chef::Provider::Mdadm
157
- }
158
- },
159
- :suse => {
160
- :default => {
161
- :service => Chef::Provider::Service::Redhat,
162
- :cron => Chef::Provider::Cron,
163
- :package => Chef::Provider::Package::Zypper,
164
- :group => Chef::Provider::Group::Suse
165
- }
166
- },
167
- :oracle => {
168
- :default => {
169
- :service => Chef::Provider::Service::Redhat,
170
- :cron => Chef::Provider::Cron,
171
- :package => Chef::Provider::Package::Yum,
172
- :mdadm => Chef::Provider::Mdadm
173
- }
174
- },
175
- :redhat => {
176
- :default => {
177
- :service => Chef::Provider::Service::Redhat,
178
- :cron => Chef::Provider::Cron,
179
- :package => Chef::Provider::Package::Yum,
180
- :mdadm => Chef::Provider::Mdadm
181
- }
182
- },
183
- :gentoo => {
184
- :default => {
185
- :package => Chef::Provider::Package::Portage,
186
- :service => Chef::Provider::Service::Gentoo,
187
- :cron => Chef::Provider::Cron,
188
- :mdadm => Chef::Provider::Mdadm
189
- }
190
- },
191
- :arch => {
192
- :default => {
193
- :package => Chef::Provider::Package::Pacman,
194
- :service => Chef::Provider::Service::Arch,
195
- :cron => Chef::Provider::Cron,
196
- :mdadm => Chef::Provider::Mdadm
197
- }
198
- },
199
- :mswin => {
200
- :default => {
201
- :env => Chef::Provider::Env::Windows,
202
- :service => Chef::Provider::Service::Windows,
203
- :user => Chef::Provider::User::Windows,
204
- :group => Chef::Provider::Group::Windows,
205
- :mount => Chef::Provider::Mount::Windows
206
- }
207
- },
208
- :mingw32 => {
209
- :default => {
210
- :env => Chef::Provider::Env::Windows,
211
- :service => Chef::Provider::Service::Windows,
212
- :user => Chef::Provider::User::Windows,
213
- :group => Chef::Provider::Group::Windows,
214
- :mount => Chef::Provider::Mount::Windows
215
- }
216
- },
217
- :windows => {
218
- :default => {
219
- :env => Chef::Provider::Env::Windows,
220
- :service => Chef::Provider::Service::Windows,
221
- :user => Chef::Provider::User::Windows,
222
- :group => Chef::Provider::Group::Windows,
223
- :mount => Chef::Provider::Mount::Windows
224
- }
225
- },
226
- :solaris => {},
227
- :openindiana => {
228
- :default => {
229
- :service => Chef::Provider::Service::Solaris,
230
- :package => Chef::Provider::Package::Ips,
231
- :cron => Chef::Provider::Cron::Solaris,
232
- :group => Chef::Provider::Group::Usermod
233
- }
234
- },
235
- :opensolaris => {
236
- :default => {
237
- :service => Chef::Provider::Service::Solaris,
238
- :package => Chef::Provider::Package::Ips,
239
- :cron => Chef::Provider::Cron::Solaris,
240
- :group => Chef::Provider::Group::Usermod
241
- }
242
- },
243
- :nexentacore => {
244
- :default => {
245
- :service => Chef::Provider::Service::Solaris,
246
- :package => Chef::Provider::Package::Solaris,
247
- :cron => Chef::Provider::Cron::Solaris,
248
- :group => Chef::Provider::Group::Usermod
249
- }
250
- },
251
- :omnios => {
252
- :default => {
253
- :service => Chef::Provider::Service::Solaris,
254
- :package => Chef::Provider::Package::Ips,
255
- :cron => Chef::Provider::Cron::Solaris,
256
- :group => Chef::Provider::Group::Usermod,
257
- :user => Chef::Provider::User::Solaris,
258
- }
259
- },
260
- :solaris2 => {
261
- :default => {
262
- :service => Chef::Provider::Service::Solaris,
263
- :package => Chef::Provider::Package::Ips,
264
- :cron => Chef::Provider::Cron::Solaris,
265
- :group => Chef::Provider::Group::Usermod,
266
- :user => Chef::Provider::User::Solaris
267
- },
268
- "5.9" => {
269
- :service => Chef::Provider::Service::Solaris,
270
- :package => Chef::Provider::Package::Solaris,
271
- :cron => Chef::Provider::Cron::Solaris,
272
- :group => Chef::Provider::Group::Usermod,
273
- :user => Chef::Provider::User::Solaris
274
- },
275
- "5.10" => {
276
- :service => Chef::Provider::Service::Solaris,
277
- :package => Chef::Provider::Package::Solaris,
278
- :cron => Chef::Provider::Cron::Solaris,
279
- :group => Chef::Provider::Group::Usermod,
280
- :user => Chef::Provider::User::Solaris
281
- }
282
- },
283
- :smartos => {
284
- :default => {
285
- :service => Chef::Provider::Service::Solaris,
286
- :package => Chef::Provider::Package::SmartOS,
287
- :cron => Chef::Provider::Cron::Solaris,
288
- :group => Chef::Provider::Group::Usermod,
289
- :user => Chef::Provider::User::Solaris
290
- }
291
- },
292
- :netbsd => {
293
- :default => {
294
- :service => Chef::Provider::Service::Freebsd,
295
- :group => Chef::Provider::Group::Groupmod
296
- }
297
- },
298
- :openbsd => {
299
- :default => {
300
- :group => Chef::Provider::Group::Usermod
301
- }
302
- },
303
- :hpux => {
304
- :default => {
305
- :group => Chef::Provider::Group::Usermod
306
- }
307
- },
308
- :aix => {
309
- :default => {
310
- :group => Chef::Provider::Group::Aix
311
- }
312
- },
313
- :default => {
314
- :file => Chef::Provider::File,
315
- :directory => Chef::Provider::Directory,
316
- :link => Chef::Provider::Link,
317
- :template => Chef::Provider::Template,
318
- :remote_directory => Chef::Provider::RemoteDirectory,
319
- :execute => Chef::Provider::Execute,
320
- :mount => Chef::Provider::Mount::Mount,
321
- :script => Chef::Provider::Script,
322
- :service => Chef::Provider::Service::Init,
323
- :perl => Chef::Provider::Script,
324
- :python => Chef::Provider::Script,
325
- :ruby => Chef::Provider::Script,
326
- :bash => Chef::Provider::Script,
327
- :csh => Chef::Provider::Script,
328
- :user => Chef::Provider::User::Useradd,
329
- :group => Chef::Provider::Group::Gpasswd,
330
- :http_request => Chef::Provider::HttpRequest,
331
- :route => Chef::Provider::Route,
332
- :ifconfig => Chef::Provider::Ifconfig,
333
- :ruby_block => Chef::Provider::RubyBlock,
334
- :whyrun_safe_ruby_block => Chef::Provider::WhyrunSafeRubyBlock,
335
- :erl_call => Chef::Provider::ErlCall,
336
- :log => Chef::Provider::Log::ChefLog
337
- }
338
- }
339
- end
340
-
341
- include Chef::Mixin::ParamsValidate
342
-
343
- def find(name, version)
344
- provider_map = platforms[:default].clone
345
-
346
- name_sym = name
347
- if name.kind_of?(String)
348
- name.downcase!
349
- name.gsub!(/\s/, "_")
350
- name_sym = name.to_sym
351
- end
352
-
353
- if platforms.has_key?(name_sym)
354
- if platforms[name_sym].has_key?(version)
355
- Chef::Log.debug("Platform #{name.to_s} version #{version} found")
356
- if platforms[name_sym].has_key?(:default)
357
- provider_map.merge!(platforms[name_sym][:default])
358
- end
359
- provider_map.merge!(platforms[name_sym][version])
360
- elsif platforms[name_sym].has_key?(:default)
361
- provider_map.merge!(platforms[name_sym][:default])
362
- end
363
- else
364
- Chef::Log.debug("Platform #{name} not found, using all defaults. (Unsupported platform?)")
365
- end
366
- provider_map
367
- end
368
-
369
- def find_platform_and_version(node)
370
- platform = nil
371
- version = nil
372
-
373
- if node[:platform]
374
- platform = node[:platform]
375
- elsif node.attribute?("os")
376
- platform = node[:os]
377
- end
378
-
379
- raise ArgumentError, "Cannot find a platform for #{node}" unless platform
380
-
381
- if node[:platform_version]
382
- version = node[:platform_version]
383
- elsif node[:os_version]
384
- version = node[:os_version]
385
- elsif node[:os_release]
386
- version = node[:os_release]
387
- end
388
-
389
- raise ArgumentError, "Cannot find a version for #{node}" unless version
390
-
391
- return platform, version
392
- end
393
-
394
- def provider_for_resource(resource, action=:nothing)
395
- node = resource.run_context && resource.run_context.node
396
- raise ArgumentError, "Cannot find the provider for a resource with no run context set" unless node
397
- provider = find_provider_for_node(node, resource).new(resource, resource.run_context)
398
- provider.action = action
399
- provider
400
- end
401
-
402
- def provider_for_node(node, resource_type)
403
- raise NotImplementedError, "#{self.class.name} no longer supports #provider_for_node"
404
- find_provider_for_node(node, resource_type).new(node, resource_type)
405
- end
406
-
407
- def find_provider_for_node(node, resource_type)
408
- platform, version = find_platform_and_version(node)
409
- provider = find_provider(platform, version, resource_type)
410
- end
411
-
412
- def set(args)
413
- validate(
414
- args,
415
- {
416
- :platform => {
417
- :kind_of => Symbol,
418
- :required => false,
419
- },
420
- :version => {
421
- :kind_of => String,
422
- :required => false,
423
- },
424
- :resource => {
425
- :kind_of => Symbol,
426
- },
427
- :provider => {
428
- :kind_of => [ String, Symbol, Class ],
429
- }
430
- }
431
- )
432
- if args.has_key?(:platform)
433
- if args.has_key?(:version)
434
- if platforms.has_key?(args[:platform])
435
- if platforms[args[:platform]].has_key?(args[:version])
436
- platforms[args[:platform]][args[:version]][args[:resource].to_sym] = args[:provider]
437
- else
438
- platforms[args[:platform]][args[:version]] = {
439
- args[:resource].to_sym => args[:provider]
440
- }
441
- end
442
- else
443
- platforms[args[:platform]] = {
444
- args[:version] => {
445
- args[:resource].to_sym => args[:provider]
446
- }
447
- }
448
- end
449
- else
450
- if platforms.has_key?(args[:platform])
451
- if platforms[args[:platform]].has_key?(:default)
452
- platforms[args[:platform]][:default][args[:resource].to_sym] = args[:provider]
453
- else
454
- platforms[args[:platform]] = { :default => { args[:resource].to_sym => args[:provider] } }
455
- end
456
- else
457
- platforms[args[:platform]] = {
458
- :default => {
459
- args[:resource].to_sym => args[:provider]
460
- }
461
- }
462
- end
463
- end
464
- else
465
- if platforms.has_key?(:default)
466
- platforms[:default][args[:resource].to_sym] = args[:provider]
467
- else
468
- platforms[:default] = {
469
- args[:resource].to_sym => args[:provider]
470
- }
471
- end
472
- end
473
- end
474
-
475
- def find_provider(platform, version, resource_type)
476
- pmap = Chef::Platform.find(platform, version)
477
- provider_klass = explicit_provider(platform, version, resource_type) ||
478
- platform_provider(platform, version, resource_type) ||
479
- resource_matching_provider(platform, version, resource_type)
480
-
481
- raise ArgumentError, "Cannot find a provider for #{resource_type} on #{platform} version #{version}" if provider_klass.nil?
482
-
483
- provider_klass
484
- end
485
-
486
- def windows?
487
- if RUBY_PLATFORM =~ /mswin|mingw|windows/
488
- true
489
- else
490
- false
491
- end
492
- end
493
-
494
- private
495
-
496
- def explicit_provider(platform, version, resource_type)
497
- resource_type.kind_of?(Chef::Resource) ? resource_type.provider : nil
498
- end
499
-
500
- def platform_provider(platform, version, resource_type)
501
- pmap = Chef::Platform.find(platform, version)
502
- rtkey = resource_type.kind_of?(Chef::Resource) ? resource_type.resource_name.to_sym : resource_type
503
- pmap.has_key?(rtkey) ? pmap[rtkey] : nil
504
- end
505
-
506
- def resource_matching_provider(platform, version, resource_type)
507
- if resource_type.kind_of?(Chef::Resource)
508
- begin
509
- Chef::Provider.const_get(resource_type.class.to_s.split('::').last)
510
- rescue NameError
511
- nil
512
- end
513
- else
514
- nil
515
- end
516
- end
517
-
518
- end
25
+ # Functionality for this class is defined in chef/platform/provider_mapping
26
+ # and chef/platform/query_helpers
519
27
 
520
28
  end
521
29
  end