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,944 @@
1
+ #
2
+ # Author:: John Keiser (<jkeiser@opscode.com>)
3
+ # Copyright:: Copyright (c) 2013 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
+ require 'support/shared/integration/integration_helper'
19
+ require 'chef/knife/delete'
20
+ require 'chef/knife/list'
21
+ require 'chef/knife/raw'
22
+
23
+ describe 'knife delete' do
24
+ extend IntegrationSupport
25
+ include KnifeSupport
26
+
27
+ let :everything do
28
+ <<EOM
29
+ /clients
30
+ /clients/x.json
31
+ /cookbooks
32
+ /cookbooks/x
33
+ /cookbooks/x/metadata.rb
34
+ /data_bags
35
+ /data_bags/x
36
+ /data_bags/x/y.json
37
+ /environments
38
+ /environments/_default.json
39
+ /environments/x.json
40
+ /nodes
41
+ /nodes/x.json
42
+ /roles
43
+ /roles/x.json
44
+ /users
45
+ /users/x.json
46
+ EOM
47
+ end
48
+
49
+ let :server_everything do
50
+ <<EOM
51
+ /clients
52
+ /clients/chef-validator.json
53
+ /clients/chef-webui.json
54
+ /clients/x.json
55
+ /cookbooks
56
+ /cookbooks/x
57
+ /cookbooks/x/metadata.rb
58
+ /data_bags
59
+ /data_bags/x
60
+ /data_bags/x/y.json
61
+ /environments
62
+ /environments/_default.json
63
+ /environments/x.json
64
+ /nodes
65
+ /nodes/x.json
66
+ /roles
67
+ /roles/x.json
68
+ /users
69
+ /users/admin.json
70
+ /users/x.json
71
+ EOM
72
+ end
73
+ let :server_nothing do
74
+ <<EOM
75
+ /clients
76
+ /clients/chef-validator.json
77
+ /clients/chef-webui.json
78
+ /cookbooks
79
+ /data_bags
80
+ /environments
81
+ /environments/_default.json
82
+ /nodes
83
+ /roles
84
+ /users
85
+ /users/admin.json
86
+ EOM
87
+ end
88
+
89
+ let :nothing do
90
+ <<EOM
91
+ /clients
92
+ /cookbooks
93
+ /data_bags
94
+ /environments
95
+ /nodes
96
+ /roles
97
+ /users
98
+ EOM
99
+ end
100
+
101
+ when_the_chef_server "has one of each thing" do
102
+ client 'x', '{}'
103
+ cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' }
104
+ data_bag 'x', { 'y' => '{}' }
105
+ environment 'x', '{}'
106
+ node 'x', '{}'
107
+ role 'x', '{}'
108
+ user 'x', '{}'
109
+
110
+ when_the_repository 'also has one of each thing' do
111
+ file 'clients/x.json', {}
112
+ file 'cookbooks/x/metadata.rb', ''
113
+ file 'data_bags/x/y.json', {}
114
+ file 'environments/_default.json', {}
115
+ file 'environments/x.json', {}
116
+ file 'nodes/x.json', {}
117
+ file 'roles/x.json', {}
118
+ file 'users/x.json', {}
119
+
120
+ it 'knife delete --both /cookbooks/x fails' do
121
+ knife('delete --both /cookbooks/x').should_fail <<EOM
122
+ ERROR: /cookbooks/x (remote) must be deleted recursively! Pass -r to knife delete.
123
+ ERROR: /cookbooks/x (local) must be deleted recursively! Pass -r to knife delete.
124
+ EOM
125
+ knife('list -Rf /').should_succeed server_everything
126
+ knife('list -Rf --local /').should_succeed everything
127
+ end
128
+
129
+ it 'knife delete --both -r /cookbooks/x deletes x' do
130
+ knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
131
+ knife('list -Rf /').should_succeed <<EOM
132
+ /clients
133
+ /clients/chef-validator.json
134
+ /clients/chef-webui.json
135
+ /clients/x.json
136
+ /cookbooks
137
+ /data_bags
138
+ /data_bags/x
139
+ /data_bags/x/y.json
140
+ /environments
141
+ /environments/_default.json
142
+ /environments/x.json
143
+ /nodes
144
+ /nodes/x.json
145
+ /roles
146
+ /roles/x.json
147
+ /users
148
+ /users/admin.json
149
+ /users/x.json
150
+ EOM
151
+ knife('list -Rf --local /').should_succeed <<EOM
152
+ /clients
153
+ /clients/x.json
154
+ /cookbooks
155
+ /data_bags
156
+ /data_bags/x
157
+ /data_bags/x/y.json
158
+ /environments
159
+ /environments/_default.json
160
+ /environments/x.json
161
+ /nodes
162
+ /nodes/x.json
163
+ /roles
164
+ /roles/x.json
165
+ /users
166
+ /users/x.json
167
+ EOM
168
+ end
169
+
170
+ it 'knife delete -r --local /cookbooks/x deletes x locally but not remotely' do
171
+ knife('delete -r --local /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
172
+ knife('list -Rf /').should_succeed server_everything
173
+ knife('list -Rf --local /').should_succeed <<EOM
174
+ /clients
175
+ /clients/x.json
176
+ /cookbooks
177
+ /data_bags
178
+ /data_bags/x
179
+ /data_bags/x/y.json
180
+ /environments
181
+ /environments/_default.json
182
+ /environments/x.json
183
+ /nodes
184
+ /nodes/x.json
185
+ /roles
186
+ /roles/x.json
187
+ /users
188
+ /users/x.json
189
+ EOM
190
+ end
191
+
192
+ it 'knife delete -r /cookbooks/x deletes x remotely but not locally' do
193
+ knife('delete -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
194
+ knife('list -Rf /').should_succeed <<EOM
195
+ /clients
196
+ /clients/chef-validator.json
197
+ /clients/chef-webui.json
198
+ /clients/x.json
199
+ /cookbooks
200
+ /data_bags
201
+ /data_bags/x
202
+ /data_bags/x/y.json
203
+ /environments
204
+ /environments/_default.json
205
+ /environments/x.json
206
+ /nodes
207
+ /nodes/x.json
208
+ /roles
209
+ /roles/x.json
210
+ /users
211
+ /users/admin.json
212
+ /users/x.json
213
+ EOM
214
+ knife('list -Rf --local /').should_succeed everything
215
+ end
216
+
217
+ # TODO delete empty data bag (particularly different on local side)
218
+ context 'with an empty data bag on both' do
219
+ data_bag 'empty', {}
220
+ directory 'data_bags/empty'
221
+ it 'knife delete --both /data_bags/empty fails but deletes local version' do
222
+ knife('delete --both /data_bags/empty').should_fail <<EOM
223
+ ERROR: /data_bags/empty (remote) must be deleted recursively! Pass -r to knife delete.
224
+ ERROR: /data_bags/empty (local) must be deleted recursively! Pass -r to knife delete.
225
+ EOM
226
+ knife('list -Rf /').should_succeed <<EOM
227
+ /clients
228
+ /clients/chef-validator.json
229
+ /clients/chef-webui.json
230
+ /clients/x.json
231
+ /cookbooks
232
+ /cookbooks/x
233
+ /cookbooks/x/metadata.rb
234
+ /data_bags
235
+ /data_bags/empty
236
+ /data_bags/x
237
+ /data_bags/x/y.json
238
+ /environments
239
+ /environments/_default.json
240
+ /environments/x.json
241
+ /nodes
242
+ /nodes/x.json
243
+ /roles
244
+ /roles/x.json
245
+ /users
246
+ /users/admin.json
247
+ /users/x.json
248
+ EOM
249
+ knife('list -Rf --local /').should_succeed <<EOM
250
+ /clients
251
+ /clients/x.json
252
+ /cookbooks
253
+ /cookbooks/x
254
+ /cookbooks/x/metadata.rb
255
+ /data_bags
256
+ /data_bags/empty
257
+ /data_bags/x
258
+ /data_bags/x/y.json
259
+ /environments
260
+ /environments/_default.json
261
+ /environments/x.json
262
+ /nodes
263
+ /nodes/x.json
264
+ /roles
265
+ /roles/x.json
266
+ /users
267
+ /users/x.json
268
+ EOM
269
+ end
270
+ end
271
+
272
+ it 'knife delete --both /data_bags/x fails' do
273
+ knife('delete --both /data_bags/x').should_fail <<EOM
274
+ ERROR: /data_bags/x (remote) must be deleted recursively! Pass -r to knife delete.
275
+ ERROR: /data_bags/x (local) must be deleted recursively! Pass -r to knife delete.
276
+ EOM
277
+ knife('list -Rf /').should_succeed server_everything
278
+ knife('list -Rf --local /').should_succeed everything
279
+ end
280
+
281
+ it 'knife delete --both -r /data_bags/x deletes x' do
282
+ knife('delete --both -r /data_bags/x').should_succeed "Deleted /data_bags/x\n"
283
+ knife('list -Rf /').should_succeed <<EOM
284
+ /clients
285
+ /clients/chef-validator.json
286
+ /clients/chef-webui.json
287
+ /clients/x.json
288
+ /cookbooks
289
+ /cookbooks/x
290
+ /cookbooks/x/metadata.rb
291
+ /data_bags
292
+ /environments
293
+ /environments/_default.json
294
+ /environments/x.json
295
+ /nodes
296
+ /nodes/x.json
297
+ /roles
298
+ /roles/x.json
299
+ /users
300
+ /users/admin.json
301
+ /users/x.json
302
+ EOM
303
+ knife('list -Rf --local /').should_succeed <<EOM
304
+ /clients
305
+ /clients/x.json
306
+ /cookbooks
307
+ /cookbooks/x
308
+ /cookbooks/x/metadata.rb
309
+ /data_bags
310
+ /environments
311
+ /environments/_default.json
312
+ /environments/x.json
313
+ /nodes
314
+ /nodes/x.json
315
+ /roles
316
+ /roles/x.json
317
+ /users
318
+ /users/x.json
319
+ EOM
320
+ end
321
+
322
+ it 'knife delete --both /environments/x.json deletes x' do
323
+ knife('delete --both /environments/x.json').should_succeed "Deleted /environments/x.json\n"
324
+ knife('list -Rf /').should_succeed <<EOM
325
+ /clients
326
+ /clients/chef-validator.json
327
+ /clients/chef-webui.json
328
+ /clients/x.json
329
+ /cookbooks
330
+ /cookbooks/x
331
+ /cookbooks/x/metadata.rb
332
+ /data_bags
333
+ /data_bags/x
334
+ /data_bags/x/y.json
335
+ /environments
336
+ /environments/_default.json
337
+ /nodes
338
+ /nodes/x.json
339
+ /roles
340
+ /roles/x.json
341
+ /users
342
+ /users/admin.json
343
+ /users/x.json
344
+ EOM
345
+ knife('list -Rf --local /').should_succeed <<EOM
346
+ /clients
347
+ /clients/x.json
348
+ /cookbooks
349
+ /cookbooks/x
350
+ /cookbooks/x/metadata.rb
351
+ /data_bags
352
+ /data_bags/x
353
+ /data_bags/x/y.json
354
+ /environments
355
+ /environments/_default.json
356
+ /nodes
357
+ /nodes/x.json
358
+ /roles
359
+ /roles/x.json
360
+ /users
361
+ /users/x.json
362
+ EOM
363
+ end
364
+
365
+ it 'knife delete --both /roles/x.json deletes x' do
366
+ knife('delete --both /roles/x.json').should_succeed "Deleted /roles/x.json\n"
367
+ knife('list -Rf /').should_succeed <<EOM
368
+ /clients
369
+ /clients/chef-validator.json
370
+ /clients/chef-webui.json
371
+ /clients/x.json
372
+ /cookbooks
373
+ /cookbooks/x
374
+ /cookbooks/x/metadata.rb
375
+ /data_bags
376
+ /data_bags/x
377
+ /data_bags/x/y.json
378
+ /environments
379
+ /environments/_default.json
380
+ /environments/x.json
381
+ /nodes
382
+ /nodes/x.json
383
+ /roles
384
+ /users
385
+ /users/admin.json
386
+ /users/x.json
387
+ EOM
388
+ knife('list -Rf --local /').should_succeed <<EOM
389
+ /clients
390
+ /clients/x.json
391
+ /cookbooks
392
+ /cookbooks/x
393
+ /cookbooks/x/metadata.rb
394
+ /data_bags
395
+ /data_bags/x
396
+ /data_bags/x/y.json
397
+ /environments
398
+ /environments/_default.json
399
+ /environments/x.json
400
+ /nodes
401
+ /nodes/x.json
402
+ /roles
403
+ /users
404
+ /users/x.json
405
+ EOM
406
+ end
407
+
408
+ it 'knife delete --both /environments/_default.json fails but still deletes the local copy' do
409
+ knife('delete --both /environments/_default.json').should_fail :stderr => "ERROR: /environments/_default.json (remote) cannot be deleted (default environment cannot be modified).\n", :stdout => "Deleted /environments/_default.json\n"
410
+ knife('list -Rf /').should_succeed server_everything
411
+ knife('list -Rf --local /').should_succeed <<EOM
412
+ /clients
413
+ /clients/x.json
414
+ /cookbooks
415
+ /cookbooks/x
416
+ /cookbooks/x/metadata.rb
417
+ /data_bags
418
+ /data_bags/x
419
+ /data_bags/x/y.json
420
+ /environments
421
+ /environments/x.json
422
+ /nodes
423
+ /nodes/x.json
424
+ /roles
425
+ /roles/x.json
426
+ /users
427
+ /users/x.json
428
+ EOM
429
+ end
430
+
431
+ it 'knife delete --both /environments/nonexistent.json fails' do
432
+ knife('delete --both /environments/nonexistent.json').should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
433
+ knife('list -Rf /').should_succeed server_everything
434
+ knife('list -Rf --local /').should_succeed everything
435
+ end
436
+
437
+ it 'knife delete --both / fails' do
438
+ knife('delete --both /').should_fail <<EOM
439
+ ERROR: / (remote) cannot be deleted.
440
+ ERROR: / (local) cannot be deleted.
441
+ EOM
442
+ knife('list -Rf /').should_succeed server_everything
443
+ knife('list -Rf --local /').should_succeed everything
444
+ end
445
+
446
+ it 'knife delete --both -r /* fails' do
447
+ knife('delete --both -r /*').should_fail <<EOM
448
+ ERROR: / (remote) cannot be deleted.
449
+ ERROR: / (local) cannot be deleted.
450
+ ERROR: /clients (remote) cannot be deleted.
451
+ ERROR: /clients (local) cannot be deleted.
452
+ ERROR: /cookbooks (remote) cannot be deleted.
453
+ ERROR: /cookbooks (local) cannot be deleted.
454
+ ERROR: /data_bags (remote) cannot be deleted.
455
+ ERROR: /data_bags (local) cannot be deleted.
456
+ ERROR: /environments (remote) cannot be deleted.
457
+ ERROR: /environments (local) cannot be deleted.
458
+ ERROR: /nodes (remote) cannot be deleted.
459
+ ERROR: /nodes (local) cannot be deleted.
460
+ ERROR: /roles (remote) cannot be deleted.
461
+ ERROR: /roles (local) cannot be deleted.
462
+ ERROR: /users (remote) cannot be deleted.
463
+ ERROR: /users (local) cannot be deleted.
464
+ EOM
465
+ knife('list -Rf /').should_succeed server_everything
466
+ knife('list -Rf --local /').should_succeed everything
467
+ end
468
+ end
469
+
470
+ when_the_repository 'has only top-level directories' do
471
+ directory 'clients'
472
+ directory 'cookbooks'
473
+ directory 'data_bags'
474
+ directory 'environments'
475
+ directory 'nodes'
476
+ directory 'roles'
477
+ directory 'users'
478
+
479
+ it 'knife delete --both /cookbooks/x fails' do
480
+ knife('delete --both /cookbooks/x').should_fail "ERROR: /cookbooks/x (remote) must be deleted recursively! Pass -r to knife delete.\n"
481
+ knife('list -Rf /').should_succeed server_everything
482
+ knife('list -Rf --local /').should_succeed nothing
483
+ end
484
+
485
+ it 'knife delete --both -r /cookbooks/x deletes x' do
486
+ knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
487
+ knife('list -Rf /').should_succeed <<EOM
488
+ /clients
489
+ /clients/chef-validator.json
490
+ /clients/chef-webui.json
491
+ /clients/x.json
492
+ /cookbooks
493
+ /data_bags
494
+ /data_bags/x
495
+ /data_bags/x/y.json
496
+ /environments
497
+ /environments/_default.json
498
+ /environments/x.json
499
+ /nodes
500
+ /nodes/x.json
501
+ /roles
502
+ /roles/x.json
503
+ /users
504
+ /users/admin.json
505
+ /users/x.json
506
+ EOM
507
+ knife('list -Rf --local /').should_succeed nothing
508
+ end
509
+
510
+ it 'knife delete --both /data_bags/x fails' do
511
+ knife('delete --both /data_bags/x').should_fail "ERROR: /data_bags/x (remote) must be deleted recursively! Pass -r to knife delete.\n"
512
+ knife('list -Rf /').should_succeed server_everything
513
+ knife('list -Rf --local /').should_succeed nothing
514
+ end
515
+
516
+ it 'knife delete --both -r /data_bags/x deletes x' do
517
+ knife('delete --both -r /data_bags/x').should_succeed "Deleted /data_bags/x\n"
518
+ knife('list -Rf /').should_succeed <<EOM
519
+ /clients
520
+ /clients/chef-validator.json
521
+ /clients/chef-webui.json
522
+ /clients/x.json
523
+ /cookbooks
524
+ /cookbooks/x
525
+ /cookbooks/x/metadata.rb
526
+ /data_bags
527
+ /environments
528
+ /environments/_default.json
529
+ /environments/x.json
530
+ /nodes
531
+ /nodes/x.json
532
+ /roles
533
+ /roles/x.json
534
+ /users
535
+ /users/admin.json
536
+ /users/x.json
537
+ EOM
538
+ knife('list -Rf --local /').should_succeed nothing
539
+ end
540
+
541
+ it 'knife delete --both /environments/x.json deletes x' do
542
+ knife('delete --both /environments/x.json').should_succeed "Deleted /environments/x.json\n"
543
+ knife('list -Rf /').should_succeed <<EOM
544
+ /clients
545
+ /clients/chef-validator.json
546
+ /clients/chef-webui.json
547
+ /clients/x.json
548
+ /cookbooks
549
+ /cookbooks/x
550
+ /cookbooks/x/metadata.rb
551
+ /data_bags
552
+ /data_bags/x
553
+ /data_bags/x/y.json
554
+ /environments
555
+ /environments/_default.json
556
+ /nodes
557
+ /nodes/x.json
558
+ /roles
559
+ /roles/x.json
560
+ /users
561
+ /users/admin.json
562
+ /users/x.json
563
+ EOM
564
+ knife('list -Rf --local /').should_succeed nothing
565
+ end
566
+
567
+ it 'knife delete --both /roles/x.json deletes x' do
568
+ knife('delete --both /roles/x.json').should_succeed "Deleted /roles/x.json\n"
569
+ knife('list -Rf /').should_succeed <<EOM
570
+ /clients
571
+ /clients/chef-validator.json
572
+ /clients/chef-webui.json
573
+ /clients/x.json
574
+ /cookbooks
575
+ /cookbooks/x
576
+ /cookbooks/x/metadata.rb
577
+ /data_bags
578
+ /data_bags/x
579
+ /data_bags/x/y.json
580
+ /environments
581
+ /environments/_default.json
582
+ /environments/x.json
583
+ /nodes
584
+ /nodes/x.json
585
+ /roles
586
+ /users
587
+ /users/admin.json
588
+ /users/x.json
589
+ EOM
590
+ knife('list -Rf --local /').should_succeed nothing
591
+ end
592
+
593
+ it 'knife delete --both /environments/_default.json fails' do
594
+ knife('delete --both /environments/_default.json').should_fail "", :stderr => "ERROR: /environments/_default.json (remote) cannot be deleted (default environment cannot be modified).\n"
595
+ knife('list -Rf /').should_succeed server_everything
596
+ knife('list -Rf --local /').should_succeed nothing
597
+ end
598
+
599
+ it 'knife delete --both / fails' do
600
+ knife('delete --both /').should_fail "ERROR: / (remote) cannot be deleted.\nERROR: / (local) cannot be deleted.\n"
601
+ knife('list -Rf /').should_succeed server_everything
602
+ knife('list -Rf --local /').should_succeed nothing
603
+ end
604
+
605
+ it 'knife delete --both -r /* fails' do
606
+ knife('delete --both -r /*').should_fail <<EOM
607
+ ERROR: / (remote) cannot be deleted.
608
+ ERROR: / (local) cannot be deleted.
609
+ ERROR: /clients (remote) cannot be deleted.
610
+ ERROR: /clients (local) cannot be deleted.
611
+ ERROR: /cookbooks (remote) cannot be deleted.
612
+ ERROR: /cookbooks (local) cannot be deleted.
613
+ ERROR: /data_bags (remote) cannot be deleted.
614
+ ERROR: /data_bags (local) cannot be deleted.
615
+ ERROR: /environments (remote) cannot be deleted.
616
+ ERROR: /environments (local) cannot be deleted.
617
+ ERROR: /nodes (remote) cannot be deleted.
618
+ ERROR: /nodes (local) cannot be deleted.
619
+ ERROR: /roles (remote) cannot be deleted.
620
+ ERROR: /roles (local) cannot be deleted.
621
+ ERROR: /users (remote) cannot be deleted.
622
+ ERROR: /users (local) cannot be deleted.
623
+ EOM
624
+ knife('list -Rf /').should_succeed server_everything
625
+ knife('list -Rf --local /').should_succeed nothing
626
+ end
627
+
628
+ it 'knife delete --both /environments/nonexistent.json fails' do
629
+ knife('delete --both /environments/nonexistent.json').should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
630
+ knife('list -Rf /').should_succeed server_everything
631
+ knife('list -Rf --local /').should_succeed nothing
632
+ end
633
+
634
+ context 'and cwd is at the top level' do
635
+ cwd '.'
636
+ it 'knife delete fails' do
637
+ knife('delete').should_fail "FATAL: Must specify at least one argument. If you want to delete everything in this directory, type \"knife delete --recurse .\"\n", :stdout => /USAGE/
638
+ knife('list -Rf /').should_succeed <<EOM
639
+ clients
640
+ clients/chef-validator.json
641
+ clients/chef-webui.json
642
+ clients/x.json
643
+ cookbooks
644
+ cookbooks/x
645
+ cookbooks/x/metadata.rb
646
+ data_bags
647
+ data_bags/x
648
+ data_bags/x/y.json
649
+ environments
650
+ environments/_default.json
651
+ environments/x.json
652
+ nodes
653
+ nodes/x.json
654
+ roles
655
+ roles/x.json
656
+ users
657
+ users/admin.json
658
+ users/x.json
659
+ EOM
660
+ knife('list -Rf --local /').should_succeed <<EOM
661
+ clients
662
+ cookbooks
663
+ data_bags
664
+ environments
665
+ nodes
666
+ roles
667
+ users
668
+ EOM
669
+ end
670
+ end
671
+ end
672
+ end
673
+
674
+ when_the_chef_server 'is empty' do
675
+ when_the_repository 'has one of each thing' do
676
+ file 'clients/x.json', {}
677
+ file 'cookbooks/x/metadata.rb', ''
678
+ file 'data_bags/x/y.json', {}
679
+ file 'environments/_default.json', {}
680
+ file 'environments/x.json', {}
681
+ file 'nodes/x.json', {}
682
+ file 'roles/x.json', {}
683
+ file 'users/x.json', {}
684
+
685
+ it 'knife delete --both /cookbooks/x fails' do
686
+ knife('delete --both /cookbooks/x').should_fail "ERROR: /cookbooks/x (local) must be deleted recursively! Pass -r to knife delete.\n"
687
+ knife('list -Rf /').should_succeed server_nothing
688
+ knife('list -Rf --local /').should_succeed everything
689
+ end
690
+
691
+ it 'knife delete --both -r /cookbooks/x deletes x' do
692
+ knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
693
+ knife('list -Rf /').should_succeed server_nothing
694
+ knife('list -Rf --local /').should_succeed <<EOM
695
+ /clients
696
+ /clients/x.json
697
+ /cookbooks
698
+ /data_bags
699
+ /data_bags/x
700
+ /data_bags/x/y.json
701
+ /environments
702
+ /environments/_default.json
703
+ /environments/x.json
704
+ /nodes
705
+ /nodes/x.json
706
+ /roles
707
+ /roles/x.json
708
+ /users
709
+ /users/x.json
710
+ EOM
711
+ end
712
+
713
+ it 'knife delete --both /data_bags/x fails' do
714
+ knife('delete --both /data_bags/x').should_fail "ERROR: /data_bags/x (local) must be deleted recursively! Pass -r to knife delete.\n"
715
+ knife('list -Rf /').should_succeed server_nothing
716
+ knife('list -Rf --local /').should_succeed everything
717
+ end
718
+
719
+ it 'knife delete --both -r /data_bags/x deletes x' do
720
+ knife('delete --both -r /data_bags/x').should_succeed "Deleted /data_bags/x\n"
721
+ knife('list -Rf /').should_succeed server_nothing
722
+ knife('list -Rf --local /').should_succeed <<EOM
723
+ /clients
724
+ /clients/x.json
725
+ /cookbooks
726
+ /cookbooks/x
727
+ /cookbooks/x/metadata.rb
728
+ /data_bags
729
+ /environments
730
+ /environments/_default.json
731
+ /environments/x.json
732
+ /nodes
733
+ /nodes/x.json
734
+ /roles
735
+ /roles/x.json
736
+ /users
737
+ /users/x.json
738
+ EOM
739
+ end
740
+
741
+ it 'knife delete --both /environments/x.json deletes x' do
742
+ knife('delete --both /environments/x.json').should_succeed "Deleted /environments/x.json\n"
743
+ knife('list -Rf /').should_succeed server_nothing
744
+ knife('list -Rf --local /').should_succeed <<EOM
745
+ /clients
746
+ /clients/x.json
747
+ /cookbooks
748
+ /cookbooks/x
749
+ /cookbooks/x/metadata.rb
750
+ /data_bags
751
+ /data_bags/x
752
+ /data_bags/x/y.json
753
+ /environments
754
+ /environments/_default.json
755
+ /nodes
756
+ /nodes/x.json
757
+ /roles
758
+ /roles/x.json
759
+ /users
760
+ /users/x.json
761
+ EOM
762
+ end
763
+
764
+ it 'knife delete --both /roles/x.json deletes x' do
765
+ knife('delete --both /roles/x.json').should_succeed "Deleted /roles/x.json\n"
766
+ knife('list -Rf /').should_succeed server_nothing
767
+ knife('list -Rf --local /').should_succeed <<EOM
768
+ /clients
769
+ /clients/x.json
770
+ /cookbooks
771
+ /cookbooks/x
772
+ /cookbooks/x/metadata.rb
773
+ /data_bags
774
+ /data_bags/x
775
+ /data_bags/x/y.json
776
+ /environments
777
+ /environments/_default.json
778
+ /environments/x.json
779
+ /nodes
780
+ /nodes/x.json
781
+ /roles
782
+ /users
783
+ /users/x.json
784
+ EOM
785
+ end
786
+
787
+ it 'knife delete --both /environments/_default.json fails but still deletes the local copy' do
788
+ knife('delete --both /environments/_default.json').should_fail :stderr => "ERROR: /environments/_default.json (remote) cannot be deleted (default environment cannot be modified).\n", :stdout => "Deleted /environments/_default.json\n"
789
+ knife('list -Rf /').should_succeed server_nothing
790
+ knife('list -Rf --local /').should_succeed <<EOM
791
+ /clients
792
+ /clients/x.json
793
+ /cookbooks
794
+ /cookbooks/x
795
+ /cookbooks/x/metadata.rb
796
+ /data_bags
797
+ /data_bags/x
798
+ /data_bags/x/y.json
799
+ /environments
800
+ /environments/x.json
801
+ /nodes
802
+ /nodes/x.json
803
+ /roles
804
+ /roles/x.json
805
+ /users
806
+ /users/x.json
807
+ EOM
808
+ end
809
+
810
+ it 'knife delete --both / fails' do
811
+ knife('delete --both /').should_fail "ERROR: / (remote) cannot be deleted.\nERROR: / (local) cannot be deleted.\n"
812
+ knife('list -Rf /').should_succeed server_nothing
813
+ knife('list -Rf --local /').should_succeed everything
814
+ end
815
+
816
+ it 'knife delete --both -r /* fails' do
817
+ knife('delete --both -r /*').should_fail <<EOM
818
+ ERROR: / (remote) cannot be deleted.
819
+ ERROR: / (local) cannot be deleted.
820
+ ERROR: /clients (remote) cannot be deleted.
821
+ ERROR: /clients (local) cannot be deleted.
822
+ ERROR: /cookbooks (remote) cannot be deleted.
823
+ ERROR: /cookbooks (local) cannot be deleted.
824
+ ERROR: /data_bags (remote) cannot be deleted.
825
+ ERROR: /data_bags (local) cannot be deleted.
826
+ ERROR: /environments (remote) cannot be deleted.
827
+ ERROR: /environments (local) cannot be deleted.
828
+ ERROR: /nodes (remote) cannot be deleted.
829
+ ERROR: /nodes (local) cannot be deleted.
830
+ ERROR: /roles (remote) cannot be deleted.
831
+ ERROR: /roles (local) cannot be deleted.
832
+ ERROR: /users (remote) cannot be deleted.
833
+ ERROR: /users (local) cannot be deleted.
834
+ EOM
835
+ knife('list -Rf /').should_succeed server_nothing
836
+ knife('list -Rf --local /').should_succeed everything
837
+ end
838
+
839
+ it 'knife delete --both /environments/nonexistent.json fails' do
840
+ knife('delete --both /environments/nonexistent.json').should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
841
+ knife('list -Rf /').should_succeed server_nothing
842
+ knife('list -Rf --local /').should_succeed everything
843
+ end
844
+
845
+ context 'and cwd is at the top level' do
846
+ cwd '.'
847
+ it 'knife delete fails' do
848
+ knife('delete').should_fail "FATAL: Must specify at least one argument. If you want to delete everything in this directory, type \"knife delete --recurse .\"\n", :stdout => /USAGE/
849
+ knife('list -Rf /').should_succeed <<EOM
850
+ clients
851
+ clients/chef-validator.json
852
+ clients/chef-webui.json
853
+ cookbooks
854
+ data_bags
855
+ environments
856
+ environments/_default.json
857
+ nodes
858
+ roles
859
+ users
860
+ users/admin.json
861
+ EOM
862
+ knife('list -Rf --local /').should_succeed <<EOM
863
+ clients
864
+ clients/x.json
865
+ cookbooks
866
+ cookbooks/x
867
+ cookbooks/x/metadata.rb
868
+ data_bags
869
+ data_bags/x
870
+ data_bags/x/y.json
871
+ environments
872
+ environments/_default.json
873
+ environments/x.json
874
+ nodes
875
+ nodes/x.json
876
+ roles
877
+ roles/x.json
878
+ users
879
+ users/x.json
880
+ EOM
881
+ end
882
+ end
883
+ end
884
+ end
885
+
886
+ when_the_repository 'has a cookbook' do
887
+ file 'cookbooks/x/metadata.rb', 'version "1.0.0"'
888
+ file 'cookbooks/x/onlyin1.0.0.rb', 'old_text'
889
+
890
+ when_the_chef_server 'has a later version for the cookbook' do
891
+ cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => '' }
892
+ cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' }
893
+
894
+ # TODO this seems wrong
895
+ it 'knife delete --both -r /cookbooks/x deletes the latest version on the server and the local version' do
896
+ knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
897
+ knife('raw /cookbooks/x').should_succeed(/1.0.0/)
898
+ knife('list --local /cookbooks').should_succeed ''
899
+ end
900
+ end
901
+
902
+ when_the_chef_server 'has an earlier version for the cookbook' do
903
+ cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => ''}
904
+ cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' }
905
+
906
+ it 'knife delete --both /cookbooks/x deletes the latest version on the server and the local version' do
907
+ knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
908
+ knife('raw /cookbooks/x').should_succeed(/0.9.9/)
909
+ knife('list --local /cookbooks').should_succeed ''
910
+ end
911
+ end
912
+
913
+ when_the_chef_server 'has a later version for the cookbook, and no current version' do
914
+ cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => 'hi' }
915
+
916
+ it 'knife delete --both /cookbooks/x deletes the server and client version of the cookbook' do
917
+ knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
918
+ knife('raw /cookbooks/x').should_fail(/404/)
919
+ knife('list --local /cookbooks').should_succeed ''
920
+ end
921
+ end
922
+
923
+ when_the_chef_server 'has an earlier version for the cookbook, and no current version' do
924
+ cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => 'hi' }
925
+
926
+ it 'knife delete --both /cookbooks/x deletes the server and client version of the cookbook' do
927
+ knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
928
+ knife('raw /cookbooks/x').should_fail(/404/)
929
+ knife('list --local /cookbooks').should_succeed ''
930
+ end
931
+ end
932
+ end
933
+
934
+ when_the_repository 'is empty' do
935
+ when_the_chef_server 'has two versions of a cookbook' do
936
+ cookbook 'x', '2.0.11', { 'metadata.rb' => 'version "2.0.11"' }
937
+ cookbook 'x', '11.0.0', { 'metadata.rb' => 'version "11.0.0"' }
938
+ it 'knife delete deletes the latest version' do
939
+ knife('delete --both -r /cookbooks/x').should_succeed "Deleted /cookbooks/x\n"
940
+ knife('raw /cookbooks/x').should_succeed /2.0.11/
941
+ end
942
+ end
943
+ end
944
+ end