knife 18.0.185 → 18.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (667) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +29 -29
  3. data/LICENSE +201 -201
  4. data/Rakefile +33 -33
  5. data/bin/knife +24 -24
  6. data/knife.gemspec +60 -60
  7. data/lib/chef/application/knife.rb +234 -234
  8. data/lib/chef/chef_fs/knife.rb +162 -162
  9. data/lib/chef/knife/acl_add.rb +57 -57
  10. data/lib/chef/knife/acl_base.rb +183 -183
  11. data/lib/chef/knife/acl_bulk_add.rb +78 -78
  12. data/lib/chef/knife/acl_bulk_remove.rb +83 -83
  13. data/lib/chef/knife/acl_remove.rb +62 -62
  14. data/lib/chef/knife/acl_show.rb +56 -56
  15. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +160 -160
  16. data/lib/chef/knife/bootstrap/client_builder.rb +212 -212
  17. data/lib/chef/knife/bootstrap/templates/README.md +11 -11
  18. data/lib/chef/knife/bootstrap/templates/chef-full.erb +242 -242
  19. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +278 -278
  20. data/lib/chef/knife/bootstrap/train_connector.rb +334 -334
  21. data/lib/chef/knife/bootstrap.rb +1193 -1193
  22. data/lib/chef/knife/client_bulk_delete.rb +104 -104
  23. data/lib/chef/knife/client_create.rb +140 -140
  24. data/lib/chef/knife/client_delete.rb +62 -62
  25. data/lib/chef/knife/client_edit.rb +52 -52
  26. data/lib/chef/knife/client_key_create.rb +73 -73
  27. data/lib/chef/knife/client_key_delete.rb +80 -80
  28. data/lib/chef/knife/client_key_edit.rb +83 -83
  29. data/lib/chef/knife/client_key_list.rb +73 -73
  30. data/lib/chef/knife/client_key_show.rb +80 -80
  31. data/lib/chef/knife/client_list.rb +41 -41
  32. data/lib/chef/knife/client_reregister.rb +58 -58
  33. data/lib/chef/knife/client_show.rb +48 -48
  34. data/lib/chef/knife/config_get.rb +39 -39
  35. data/lib/chef/knife/config_get_profile.rb +37 -37
  36. data/lib/chef/knife/config_list.rb +139 -139
  37. data/lib/chef/knife/config_list_profiles.rb +37 -37
  38. data/lib/chef/knife/config_show.rb +127 -127
  39. data/lib/chef/knife/config_use.rb +61 -61
  40. data/lib/chef/knife/config_use_profile.rb +47 -47
  41. data/lib/chef/knife/configure.rb +150 -150
  42. data/lib/chef/knife/configure_client.rb +48 -48
  43. data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
  44. data/lib/chef/knife/cookbook_delete.rb +151 -151
  45. data/lib/chef/knife/cookbook_download.rb +142 -142
  46. data/lib/chef/knife/cookbook_list.rb +47 -47
  47. data/lib/chef/knife/cookbook_metadata.rb +106 -106
  48. data/lib/chef/knife/cookbook_metadata_from_file.rb +49 -49
  49. data/lib/chef/knife/cookbook_show.rb +98 -98
  50. data/lib/chef/knife/cookbook_upload.rb +313 -313
  51. data/lib/chef/knife/core/bootstrap_context.rb +264 -264
  52. data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
  53. data/lib/chef/knife/core/cookbook_site_streaming_uploader.rb +249 -249
  54. data/lib/chef/knife/core/formatting_options.rb +49 -49
  55. data/lib/chef/knife/core/gem_glob_loader.rb +134 -134
  56. data/lib/chef/knife/core/generic_presenter.rb +232 -232
  57. data/lib/chef/knife/core/hashed_command_loader.rb +100 -100
  58. data/lib/chef/knife/core/node_editor.rb +130 -130
  59. data/lib/chef/knife/core/node_presenter.rb +133 -133
  60. data/lib/chef/knife/core/object_loader.rb +115 -115
  61. data/lib/chef/knife/core/status_presenter.rb +147 -147
  62. data/lib/chef/knife/core/subcommand_loader.rb +208 -208
  63. data/lib/chef/knife/core/text_formatter.rb +85 -85
  64. data/lib/chef/knife/core/ui.rb +338 -338
  65. data/lib/chef/knife/core/windows_bootstrap_context.rb +405 -405
  66. data/lib/chef/knife/data_bag_create.rb +81 -81
  67. data/lib/chef/knife/data_bag_delete.rb +49 -49
  68. data/lib/chef/knife/data_bag_edit.rb +74 -74
  69. data/lib/chef/knife/data_bag_from_file.rb +113 -113
  70. data/lib/chef/knife/data_bag_list.rb +42 -42
  71. data/lib/chef/knife/data_bag_secret_options.rb +122 -122
  72. data/lib/chef/knife/data_bag_show.rb +69 -69
  73. data/lib/chef/knife/delete.rb +125 -125
  74. data/lib/chef/knife/deps.rb +156 -156
  75. data/lib/chef/knife/diff.rb +83 -83
  76. data/lib/chef/knife/download.rb +85 -84
  77. data/lib/chef/knife/edit.rb +88 -88
  78. data/lib/chef/knife/environment_compare.rb +128 -128
  79. data/lib/chef/knife/environment_create.rb +52 -52
  80. data/lib/chef/knife/environment_delete.rb +44 -44
  81. data/lib/chef/knife/environment_edit.rb +44 -44
  82. data/lib/chef/knife/environment_from_file.rb +84 -84
  83. data/lib/chef/knife/environment_list.rb +41 -41
  84. data/lib/chef/knife/environment_show.rb +47 -47
  85. data/lib/chef/knife/exec.rb +99 -99
  86. data/lib/chef/knife/group_add.rb +55 -55
  87. data/lib/chef/knife/group_create.rb +49 -49
  88. data/lib/chef/knife/group_destroy.rb +53 -53
  89. data/lib/chef/knife/group_list.rb +43 -43
  90. data/lib/chef/knife/group_remove.rb +56 -56
  91. data/lib/chef/knife/group_show.rb +49 -49
  92. data/lib/chef/knife/key_create.rb +112 -112
  93. data/lib/chef/knife/key_create_base.rb +50 -50
  94. data/lib/chef/knife/key_delete.rb +55 -55
  95. data/lib/chef/knife/key_edit.rb +118 -118
  96. data/lib/chef/knife/key_edit_base.rb +55 -55
  97. data/lib/chef/knife/key_list.rb +90 -90
  98. data/lib/chef/knife/key_list_base.rb +45 -45
  99. data/lib/chef/knife/key_show.rb +53 -53
  100. data/lib/chef/knife/list.rb +177 -177
  101. data/lib/chef/knife/node_bulk_delete.rb +75 -75
  102. data/lib/chef/knife/node_create.rb +47 -47
  103. data/lib/chef/knife/node_delete.rb +46 -46
  104. data/lib/chef/knife/node_edit.rb +70 -70
  105. data/lib/chef/knife/node_environment_set.rb +53 -53
  106. data/lib/chef/knife/node_from_file.rb +51 -51
  107. data/lib/chef/knife/node_list.rb +44 -44
  108. data/lib/chef/knife/node_policy_set.rb +79 -79
  109. data/lib/chef/knife/node_run_list_add.rb +104 -104
  110. data/lib/chef/knife/node_run_list_remove.rb +67 -67
  111. data/lib/chef/knife/node_run_list_set.rb +66 -66
  112. data/lib/chef/knife/node_show.rb +63 -63
  113. data/lib/chef/knife/null.rb +12 -12
  114. data/lib/chef/knife/org_create.rb +70 -70
  115. data/lib/chef/knife/org_delete.rb +32 -32
  116. data/lib/chef/knife/org_edit.rb +48 -48
  117. data/lib/chef/knife/org_list.rb +44 -44
  118. data/lib/chef/knife/org_show.rb +31 -31
  119. data/lib/chef/knife/org_user_add.rb +62 -62
  120. data/lib/chef/knife/org_user_remove.rb +103 -103
  121. data/lib/chef/knife/raw.rb +123 -123
  122. data/lib/chef/knife/recipe_list.rb +32 -32
  123. data/lib/chef/knife/rehash.rb +50 -50
  124. data/lib/chef/knife/role_bulk_delete.rb +66 -66
  125. data/lib/chef/knife/role_create.rb +53 -53
  126. data/lib/chef/knife/role_delete.rb +46 -46
  127. data/lib/chef/knife/role_edit.rb +45 -45
  128. data/lib/chef/knife/role_env_run_list_add.rb +87 -87
  129. data/lib/chef/knife/role_env_run_list_clear.rb +55 -55
  130. data/lib/chef/knife/role_env_run_list_remove.rb +57 -57
  131. data/lib/chef/knife/role_env_run_list_replace.rb +60 -60
  132. data/lib/chef/knife/role_env_run_list_set.rb +70 -70
  133. data/lib/chef/knife/role_from_file.rb +51 -51
  134. data/lib/chef/knife/role_list.rb +42 -42
  135. data/lib/chef/knife/role_run_list_add.rb +87 -87
  136. data/lib/chef/knife/role_run_list_clear.rb +55 -55
  137. data/lib/chef/knife/role_run_list_remove.rb +56 -56
  138. data/lib/chef/knife/role_run_list_replace.rb +60 -60
  139. data/lib/chef/knife/role_run_list_set.rb +69 -69
  140. data/lib/chef/knife/role_show.rb +48 -48
  141. data/lib/chef/knife/search.rb +194 -194
  142. data/lib/chef/knife/serve.rb +65 -65
  143. data/lib/chef/knife/show.rb +72 -72
  144. data/lib/chef/knife/ssh.rb +657 -657
  145. data/lib/chef/knife/ssl_check.rb +284 -284
  146. data/lib/chef/knife/ssl_fetch.rb +162 -162
  147. data/lib/chef/knife/status.rb +95 -95
  148. data/lib/chef/knife/supermarket_download.rb +119 -119
  149. data/lib/chef/knife/supermarket_install.rb +192 -192
  150. data/lib/chef/knife/supermarket_list.rb +76 -76
  151. data/lib/chef/knife/supermarket_search.rb +53 -53
  152. data/lib/chef/knife/supermarket_share.rb +166 -166
  153. data/lib/chef/knife/supermarket_show.rb +66 -66
  154. data/lib/chef/knife/supermarket_unshare.rb +62 -62
  155. data/lib/chef/knife/tag_create.rb +52 -52
  156. data/lib/chef/knife/tag_delete.rb +60 -60
  157. data/lib/chef/knife/tag_list.rb +47 -47
  158. data/lib/chef/knife/upload.rb +87 -86
  159. data/lib/chef/knife/user_create.rb +180 -180
  160. data/lib/chef/knife/user_delete.rb +151 -151
  161. data/lib/chef/knife/user_dissociate.rb +42 -42
  162. data/lib/chef/knife/user_edit.rb +94 -94
  163. data/lib/chef/knife/user_invite_add.rb +43 -43
  164. data/lib/chef/knife/user_invite_list.rb +34 -34
  165. data/lib/chef/knife/user_invite_rescind.rb +63 -63
  166. data/lib/chef/knife/user_key_create.rb +73 -73
  167. data/lib/chef/knife/user_key_delete.rb +80 -80
  168. data/lib/chef/knife/user_key_edit.rb +83 -83
  169. data/lib/chef/knife/user_key_list.rb +73 -73
  170. data/lib/chef/knife/user_key_show.rb +80 -80
  171. data/lib/chef/knife/user_list.rb +43 -43
  172. data/lib/chef/knife/user_password.rb +70 -70
  173. data/lib/chef/knife/user_reregister.rb +59 -59
  174. data/lib/chef/knife/user_show.rb +52 -52
  175. data/lib/chef/knife/version.rb +24 -24
  176. data/lib/chef/knife/xargs.rb +282 -282
  177. data/lib/chef/knife/yaml_convert.rb +91 -91
  178. data/lib/chef/knife.rb +673 -673
  179. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
  180. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
  181. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
  182. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -34
  183. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
  184. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
  185. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
  186. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
  187. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
  188. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
  189. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -34
  190. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
  191. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
  192. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
  193. data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -5
  194. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -1
  195. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -10
  196. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -1
  197. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -45
  198. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -1
  199. data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -1
  200. data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -1
  201. data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -13
  202. data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -34
  203. data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -1
  204. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -13
  205. data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -1
  206. data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -18
  207. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -91
  208. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -31
  209. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
  210. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
  211. data/spec/data/apt/var/www/apt/conf/distributions +7 -7
  212. data/spec/data/apt/var/www/apt/conf/incoming +4 -4
  213. data/spec/data/apt/var/www/apt/conf/pulls +3 -3
  214. data/spec/data/apt/var/www/apt/db/version +4 -4
  215. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
  216. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
  217. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
  218. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
  219. data/spec/data/bootstrap/no_proxy.erb +2 -2
  220. data/spec/data/bootstrap/secret.erb +9 -9
  221. data/spec/data/bootstrap/test-hints.erb +12 -12
  222. data/spec/data/bootstrap/test.erb +1 -1
  223. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
  224. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
  225. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
  226. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
  227. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
  228. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
  229. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
  230. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
  231. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
  232. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
  233. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
  234. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
  235. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
  236. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
  237. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
  238. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
  239. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
  240. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
  241. data/spec/data/client.d_00/00-foo.rb +2 -2
  242. data/spec/data/client.d_00/01-bar.rb +1 -1
  243. data/spec/data/client.d_00/02-strings.rb +2 -2
  244. data/spec/data/client.d_00/bar +1 -1
  245. data/spec/data/client.d_01/foo/bar.rb +1 -1
  246. data/spec/data/client.d_02/foo.rb/foo.txt +1 -1
  247. data/spec/data/config.rb +6 -6
  248. data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
  249. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
  250. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
  251. data/spec/data/cookbooks/apache2/metadata.json +33 -33
  252. data/spec/data/cookbooks/apache2/metadata.rb +2 -2
  253. data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
  254. data/spec/data/cookbooks/borken/metadata.rb +2 -2
  255. data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
  256. data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
  257. data/spec/data/cookbooks/chefignore +8 -8
  258. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
  259. data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
  260. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
  261. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
  262. data/spec/data/cookbooks/irssi/files/default/irssi.response +2 -2
  263. data/spec/data/cookbooks/java/files/default/java.response +1 -1
  264. data/spec/data/cookbooks/java/metadata.json +33 -33
  265. data/spec/data/cookbooks/java/metadata.rb +2 -2
  266. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
  267. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
  268. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -8
  269. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
  270. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  271. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
  272. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
  273. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
  274. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
  275. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
  276. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
  277. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
  278. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
  279. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
  280. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
  281. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
  282. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
  283. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
  284. data/spec/data/cookbooks/openldap/metadata.rb +8 -8
  285. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
  286. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
  287. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
  288. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
  289. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
  290. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -14
  291. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
  292. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -1
  293. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -1
  294. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
  295. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -1
  296. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
  297. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
  298. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
  299. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
  300. data/spec/data/cookbooks/preseed/metadata.rb +2 -2
  301. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
  302. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
  303. data/spec/data/cookbooks/starter/chefignore +8 -8
  304. data/spec/data/cookbooks/starter/metadata.rb +2 -2
  305. data/spec/data/cookbooks/starter/recipes/default.rb +4 -4
  306. data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +5 -5
  307. data/spec/data/cookbooks/wget/files/default/wget.response +2 -2
  308. data/spec/data/definitions/test.rb +4 -4
  309. data/spec/data/environment-config.rb +4 -4
  310. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
  311. data/spec/data/fileedit/hosts +4 -4
  312. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
  313. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
  314. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -8
  315. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
  316. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +9 -9
  317. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -8
  318. data/spec/data/kitchen/chefignore +6 -6
  319. data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
  320. data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
  321. data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
  322. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
  323. data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
  324. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
  325. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
  326. data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
  327. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
  328. data/spec/data/knife_subcommand/test_yourself.rb +21 -21
  329. data/spec/data/lwrp/providers/buck_passer.rb +28 -28
  330. data/spec/data/lwrp/providers/buck_passer_2.rb +26 -26
  331. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -28
  332. data/spec/data/lwrp/providers/inline_compiler.rb +24 -24
  333. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
  334. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
  335. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
  336. data/spec/data/lwrp/resources/bar.rb +4 -4
  337. data/spec/data/lwrp/resources/buck_passer.rb +6 -6
  338. data/spec/data/lwrp/resources/buck_passer_2.rb +4 -4
  339. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +4 -4
  340. data/spec/data/lwrp/resources/foo.rb +6 -6
  341. data/spec/data/lwrp/resources/inline_compiler.rb +4 -4
  342. data/spec/data/lwrp/resources/monkey_name_printer.rb +6 -6
  343. data/spec/data/lwrp/resources/paint_drying_watcher.rb +4 -4
  344. data/spec/data/lwrp/resources/thumb_twiddler.rb +4 -4
  345. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +3 -3
  346. data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -1
  347. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
  348. data/spec/data/lwrp_override/resources/foo.rb +11 -11
  349. data/spec/data/mac_users/10.9.plist.xml +560 -560
  350. data/spec/data/mac_users/10.9.shadow.xml +21 -21
  351. data/spec/data/metadata/quick_start/metadata.rb +14 -14
  352. data/spec/data/mixin/invalid_data.rb +3 -3
  353. data/spec/data/mixin/real_data.rb +2 -2
  354. data/spec/data/nested.json +2 -2
  355. data/spec/data/nodes/default.rb +15 -15
  356. data/spec/data/nodes/test.example.com.rb +17 -17
  357. data/spec/data/nodes/test.rb +15 -15
  358. data/spec/data/null_config.rb +1 -1
  359. data/spec/data/object_loader/environments/test.json +7 -7
  360. data/spec/data/object_loader/environments/test.rb +2 -2
  361. data/spec/data/object_loader/environments/test_json_class.json +8 -8
  362. data/spec/data/object_loader/nodes/test.json +7 -7
  363. data/spec/data/object_loader/nodes/test.rb +2 -2
  364. data/spec/data/object_loader/nodes/test_json_class.json +8 -8
  365. data/spec/data/object_loader/roles/test.json +7 -7
  366. data/spec/data/object_loader/roles/test.rb +2 -2
  367. data/spec/data/object_loader/roles/test_json_class.json +8 -8
  368. data/spec/data/partial_one.erb +1 -1
  369. data/spec/data/prefer_metadata_json/metadata.json +51 -51
  370. data/spec/data/prefer_metadata_json/metadata.rb +6 -6
  371. data/spec/data/recipes/test.rb +7 -7
  372. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -1
  373. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -1
  374. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -2
  375. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -3
  376. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -1
  377. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -2
  378. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -3
  379. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -3
  380. data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -1
  381. data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -2
  382. data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -3
  383. data/spec/data/rubygems.org/sexp_processor-info +49 -49
  384. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -2
  385. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
  386. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
  387. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
  388. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
  389. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +2 -2
  390. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -2
  391. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
  392. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
  393. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
  394. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
  395. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +2 -2
  396. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  397. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  398. data/spec/data/run_context/cookbooks/dependency1/attributes/unparsed_file +1 -1
  399. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -2
  400. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
  401. data/spec/data/run_context/cookbooks/dependency1/definitions/unparsed_file +1 -1
  402. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
  403. data/spec/data/run_context/cookbooks/dependency1/libraries/unparsed_file +1 -1
  404. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
  405. data/spec/data/run_context/cookbooks/dependency1/providers/unparsed_file +1 -1
  406. data/spec/data/run_context/cookbooks/dependency1/recipes/unparsed_file +1 -1
  407. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +2 -2
  408. data/spec/data/run_context/cookbooks/dependency1/resources/unparsed_file +1 -1
  409. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -2
  410. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
  411. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
  412. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
  413. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +2 -2
  414. data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -24
  415. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -3
  416. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -2
  417. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
  418. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
  419. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +2 -2
  420. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  421. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
  422. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
  423. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
  424. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
  425. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
  426. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
  427. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
  428. data/spec/data/run_context/cookbooks/test/resources/resource.rb +3 -3
  429. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -2
  430. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
  431. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
  432. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
  433. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
  434. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +3 -3
  435. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -2
  436. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
  437. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
  438. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
  439. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
  440. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +2 -2
  441. data/spec/data/run_context/nodes/run_context.rb +5 -5
  442. data/spec/data/sample_msu1.xml +10 -10
  443. data/spec/data/sample_msu2.xml +14 -14
  444. data/spec/data/sample_msu3.xml +16 -16
  445. data/spec/data/search_queries_to_transform.txt +98 -98
  446. data/spec/data/shef-config.rb +11 -11
  447. data/spec/data/snap_package/async_result_success.json +6 -6
  448. data/spec/data/snap_package/change_id_result.json +175 -175
  449. data/spec/data/snap_package/find_result_failure.json +10 -10
  450. data/spec/data/snap_package/find_result_success.json +70 -70
  451. data/spec/data/snap_package/get_by_name_result_failure.json +10 -10
  452. data/spec/data/snap_package/get_by_name_result_success.json +38 -38
  453. data/spec/data/snap_package/get_conf_success.json +10 -10
  454. data/spec/data/snap_package/result_failure.json +9 -9
  455. data/spec/data/ssl/5e707473.0 +18 -18
  456. data/spec/data/ssl/chef-rspec.cert +27 -27
  457. data/spec/data/ssl/chef-rspec.key +27 -27
  458. data/spec/data/ssl/key.pem +15 -15
  459. data/spec/data/ssl/private_key.pem +27 -27
  460. data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
  461. data/spec/data/standalone_cookbook/chefignore +9 -9
  462. data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
  463. data/spec/data/templates/failed.erb +5 -5
  464. data/spec/data/trusted_certs/example.crt +22 -22
  465. data/spec/data/trusted_certs/example_no_cn.crt +36 -36
  466. data/spec/data/trusted_certs/intermediate.pem +27 -27
  467. data/spec/data/trusted_certs/opscode.pem +57 -57
  468. data/spec/data/trusted_certs/root.pem +22 -22
  469. data/spec/data/windows_certificates/base64_test.cer +20 -20
  470. data/spec/data/windows_certificates/othertest.cer +20 -20
  471. data/spec/data/windows_certificates/test.cer +20 -20
  472. data/spec/data/windows_certificates/test.pem +20 -20
  473. data/spec/functional/configure_spec.rb +33 -33
  474. data/spec/functional/cookbook_delete_spec.rb +156 -156
  475. data/spec/functional/exec_spec.rb +55 -55
  476. data/spec/functional/rehash_spec.rb +39 -39
  477. data/spec/functional/smoke_test.rb +42 -42
  478. data/spec/functional/ssh_spec.rb +352 -352
  479. data/spec/functional/version_spec.rb +26 -26
  480. data/spec/integration/chef_fs_data_store_spec.rb +557 -557
  481. data/spec/integration/chef_repo_path_spec.rb +962 -962
  482. data/spec/integration/chef_repository_file_system_spec.rb +200 -200
  483. data/spec/integration/chefignore_spec.rb +301 -301
  484. data/spec/integration/client_bulk_delete_spec.rb +131 -131
  485. data/spec/integration/client_create_spec.rb +70 -70
  486. data/spec/integration/client_delete_spec.rb +64 -64
  487. data/spec/integration/client_key_create_spec.rb +66 -66
  488. data/spec/integration/client_key_delete_spec.rb +43 -43
  489. data/spec/integration/client_key_list_spec.rb +61 -61
  490. data/spec/integration/client_key_show_spec.rb +45 -45
  491. data/spec/integration/client_list_spec.rb +49 -49
  492. data/spec/integration/client_show_spec.rb +37 -37
  493. data/spec/integration/commands_spec.rb +55 -55
  494. data/spec/integration/common_options_spec.rb +174 -174
  495. data/spec/integration/config_list_spec.rb +220 -220
  496. data/spec/integration/config_show_spec.rb +192 -192
  497. data/spec/integration/config_use_spec.rb +198 -198
  498. data/spec/integration/cookbook_api_ipv6_spec.rb +113 -113
  499. data/spec/integration/cookbook_bulk_delete_spec.rb +65 -65
  500. data/spec/integration/cookbook_download_spec.rb +72 -72
  501. data/spec/integration/cookbook_list_spec.rb +55 -55
  502. data/spec/integration/cookbook_show_spec.rb +149 -149
  503. data/spec/integration/cookbook_upload_spec.rb +128 -128
  504. data/spec/integration/data_bag_create_spec.rb +125 -125
  505. data/spec/integration/data_bag_delete_spec.rb +59 -59
  506. data/spec/integration/data_bag_edit_spec.rb +105 -105
  507. data/spec/integration/data_bag_from_file_spec.rb +116 -116
  508. data/spec/integration/data_bag_list_spec.rb +44 -44
  509. data/spec/integration/data_bag_show_spec.rb +95 -95
  510. data/spec/integration/delete_spec.rb +1018 -1018
  511. data/spec/integration/deps_spec.rb +703 -703
  512. data/spec/integration/diff_spec.rb +605 -605
  513. data/spec/integration/download_spec.rb +1336 -1336
  514. data/spec/integration/environment_compare_spec.rb +75 -75
  515. data/spec/integration/environment_create_spec.rb +41 -41
  516. data/spec/integration/environment_delete_spec.rb +37 -37
  517. data/spec/integration/environment_from_file_spec.rb +116 -116
  518. data/spec/integration/environment_list_spec.rb +42 -42
  519. data/spec/integration/environment_show_spec.rb +77 -77
  520. data/spec/integration/list_spec.rb +1060 -1060
  521. data/spec/integration/node_bulk_delete_spec.rb +52 -52
  522. data/spec/integration/node_create_spec.rb +47 -47
  523. data/spec/integration/node_delete_spec.rb +48 -48
  524. data/spec/integration/node_environment_set_spec.rb +46 -46
  525. data/spec/integration/node_from_file_spec.rb +59 -59
  526. data/spec/integration/node_list_spec.rb +45 -45
  527. data/spec/integration/node_run_list_add_spec.rb +54 -54
  528. data/spec/integration/node_run_list_remove_spec.rb +36 -36
  529. data/spec/integration/node_run_list_set_spec.rb +41 -41
  530. data/spec/integration/node_show_spec.rb +36 -36
  531. data/spec/integration/raw_spec.rb +297 -297
  532. data/spec/integration/redirection_spec.rb +64 -64
  533. data/spec/integration/role_bulk_delete_spec.rb +52 -52
  534. data/spec/integration/role_create_spec.rb +41 -41
  535. data/spec/integration/role_delete_spec.rb +48 -48
  536. data/spec/integration/role_from_file_spec.rb +96 -96
  537. data/spec/integration/role_list_spec.rb +45 -45
  538. data/spec/integration/role_show_spec.rb +51 -51
  539. data/spec/integration/search_node_spec.rb +40 -40
  540. data/spec/integration/serve_spec.rb +92 -92
  541. data/spec/integration/show_spec.rb +197 -197
  542. data/spec/integration/upload_spec.rb +1616 -1616
  543. data/spec/knife_spec_helper.rb +241 -241
  544. data/spec/support/chef_helpers.rb +79 -79
  545. data/spec/support/key_helpers.rb +102 -102
  546. data/spec/support/platform_helpers.rb +255 -255
  547. data/spec/support/platforms/prof/gc.rb +51 -51
  548. data/spec/support/platforms/prof/win32.rb +45 -45
  549. data/spec/support/platforms/win32/spec_service.rb +57 -57
  550. data/spec/support/recipe_dsl_helper.rb +83 -83
  551. data/spec/support/shared/context/config.rb +18 -18
  552. data/spec/support/shared/functional/knife.rb +37 -37
  553. data/spec/support/shared/integration/integration_helper.rb +122 -122
  554. data/spec/support/shared/integration/knife_support.rb +192 -192
  555. data/spec/support/shared/matchers/exit_with_code.rb +32 -32
  556. data/spec/support/shared/matchers/match_environment_variable.rb +17 -17
  557. data/spec/support/shared/unit/knife_shared.rb +39 -39
  558. data/spec/support/shared/unit/mock_shellout.rb +49 -49
  559. data/spec/tiny_server.rb +190 -190
  560. data/spec/unit/application/knife_spec.rb +241 -241
  561. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +152 -152
  562. data/spec/unit/knife/bootstrap/client_builder_spec.rb +207 -207
  563. data/spec/unit/knife/bootstrap/train_connector_spec.rb +244 -244
  564. data/spec/unit/knife/bootstrap_spec.rb +2233 -2233
  565. data/spec/unit/knife/client_bulk_delete_spec.rb +166 -166
  566. data/spec/unit/knife/client_create_spec.rb +232 -232
  567. data/spec/unit/knife/client_delete_spec.rb +99 -99
  568. data/spec/unit/knife/client_edit_spec.rb +53 -53
  569. data/spec/unit/knife/client_list_spec.rb +34 -34
  570. data/spec/unit/knife/client_reregister_spec.rb +62 -62
  571. data/spec/unit/knife/client_show_spec.rb +52 -52
  572. data/spec/unit/knife/configure_client_spec.rb +81 -81
  573. data/spec/unit/knife/configure_spec.rb +190 -190
  574. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
  575. data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
  576. data/spec/unit/knife/cookbook_download_spec.rb +255 -255
  577. data/spec/unit/knife/cookbook_list_spec.rb +88 -88
  578. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +72 -72
  579. data/spec/unit/knife/cookbook_metadata_spec.rb +182 -182
  580. data/spec/unit/knife/cookbook_show_spec.rb +253 -253
  581. data/spec/unit/knife/cookbook_upload_spec.rb +426 -426
  582. data/spec/unit/knife/core/bootstrap_context_spec.rb +287 -287
  583. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
  584. data/spec/unit/knife/core/cookbook_site_streaming_uploader_spec.rb +198 -198
  585. data/spec/unit/knife/core/gem_glob_loader_spec.rb +242 -242
  586. data/spec/unit/knife/core/hashed_command_loader_spec.rb +112 -112
  587. data/spec/unit/knife/core/node_editor_spec.rb +211 -211
  588. data/spec/unit/knife/core/object_loader_spec.rb +81 -81
  589. data/spec/unit/knife/core/status_presenter_spec.rb +54 -54
  590. data/spec/unit/knife/core/subcommand_loader_spec.rb +64 -64
  591. data/spec/unit/knife/core/ui_spec.rb +656 -656
  592. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +238 -238
  593. data/spec/unit/knife/data_bag_create_spec.rb +175 -175
  594. data/spec/unit/knife/data_bag_edit_spec.rb +126 -126
  595. data/spec/unit/knife/data_bag_from_file_spec.rb +174 -174
  596. data/spec/unit/knife/data_bag_secret_options_spec.rb +173 -173
  597. data/spec/unit/knife/data_bag_show_spec.rb +139 -139
  598. data/spec/unit/knife/environment_compare_spec.rb +112 -112
  599. data/spec/unit/knife/environment_create_spec.rb +91 -91
  600. data/spec/unit/knife/environment_delete_spec.rb +71 -71
  601. data/spec/unit/knife/environment_edit_spec.rb +79 -79
  602. data/spec/unit/knife/environment_from_file_spec.rb +90 -90
  603. data/spec/unit/knife/environment_list_spec.rb +54 -54
  604. data/spec/unit/knife/environment_show_spec.rb +52 -52
  605. data/spec/unit/knife/key_create_spec.rb +223 -223
  606. data/spec/unit/knife/key_delete_spec.rb +133 -133
  607. data/spec/unit/knife/key_edit_spec.rb +264 -264
  608. data/spec/unit/knife/key_helper.rb +74 -74
  609. data/spec/unit/knife/key_list_spec.rb +216 -216
  610. data/spec/unit/knife/key_show_spec.rb +126 -126
  611. data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
  612. data/spec/unit/knife/node_delete_spec.rb +77 -77
  613. data/spec/unit/knife/node_edit_spec.rb +116 -116
  614. data/spec/unit/knife/node_environment_set_spec.rb +61 -61
  615. data/spec/unit/knife/node_from_file_spec.rb +59 -59
  616. data/spec/unit/knife/node_list_spec.rb +62 -62
  617. data/spec/unit/knife/node_policy_set_spec.rb +122 -122
  618. data/spec/unit/knife/node_run_list_add_spec.rb +145 -145
  619. data/spec/unit/knife/node_run_list_remove_spec.rb +106 -106
  620. data/spec/unit/knife/node_run_list_set_spec.rb +115 -115
  621. data/spec/unit/knife/node_show_spec.rb +65 -65
  622. data/spec/unit/knife/org_create_spec.rb +76 -76
  623. data/spec/unit/knife/org_delete_spec.rb +41 -41
  624. data/spec/unit/knife/org_edit_spec.rb +49 -49
  625. data/spec/unit/knife/org_list_spec.rb +58 -58
  626. data/spec/unit/knife/org_show_spec.rb +45 -45
  627. data/spec/unit/knife/org_user_add_spec.rb +39 -39
  628. data/spec/unit/knife/raw_spec.rb +43 -43
  629. data/spec/unit/knife/role_bulk_delete_spec.rb +80 -80
  630. data/spec/unit/knife/role_create_spec.rb +80 -80
  631. data/spec/unit/knife/role_delete_spec.rb +67 -67
  632. data/spec/unit/knife/role_edit_spec.rb +77 -77
  633. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -217
  634. data/spec/unit/knife/role_env_run_list_clear_spec.rb +94 -94
  635. data/spec/unit/knife/role_env_run_list_remove_spec.rb +102 -102
  636. data/spec/unit/knife/role_env_run_list_replace_spec.rb +105 -105
  637. data/spec/unit/knife/role_env_run_list_set_spec.rb +99 -99
  638. data/spec/unit/knife/role_from_file_spec.rb +69 -69
  639. data/spec/unit/knife/role_list_spec.rb +54 -54
  640. data/spec/unit/knife/role_run_list_add_spec.rb +179 -179
  641. data/spec/unit/knife/role_run_list_clear_spec.rb +84 -84
  642. data/spec/unit/knife/role_run_list_remove_spec.rb +92 -92
  643. data/spec/unit/knife/role_run_list_replace_spec.rb +98 -98
  644. data/spec/unit/knife/role_run_list_set_spec.rb +89 -89
  645. data/spec/unit/knife/role_show_spec.rb +59 -59
  646. data/spec/unit/knife/ssh_spec.rb +403 -403
  647. data/spec/unit/knife/ssl_check_spec.rb +256 -256
  648. data/spec/unit/knife/ssl_fetch_spec.rb +222 -222
  649. data/spec/unit/knife/status_spec.rb +112 -112
  650. data/spec/unit/knife/supermarket_download_spec.rb +152 -152
  651. data/spec/unit/knife/supermarket_install_spec.rb +203 -203
  652. data/spec/unit/knife/supermarket_list_spec.rb +70 -70
  653. data/spec/unit/knife/supermarket_search_spec.rb +85 -85
  654. data/spec/unit/knife/supermarket_share_spec.rb +208 -208
  655. data/spec/unit/knife/supermarket_unshare_spec.rb +78 -78
  656. data/spec/unit/knife/tag_create_spec.rb +23 -23
  657. data/spec/unit/knife/tag_delete_spec.rb +25 -25
  658. data/spec/unit/knife/tag_list_spec.rb +23 -23
  659. data/spec/unit/knife/user_create_spec.rb +282 -282
  660. data/spec/unit/knife/user_delete_spec.rb +171 -171
  661. data/spec/unit/knife/user_edit_spec.rb +54 -54
  662. data/spec/unit/knife/user_list_spec.rb +73 -73
  663. data/spec/unit/knife/user_password_spec.rb +64 -64
  664. data/spec/unit/knife/user_reregister_spec.rb +56 -56
  665. data/spec/unit/knife/user_show_spec.rb +91 -91
  666. data/spec/unit/knife_spec.rb +634 -634
  667. metadata +3 -3
@@ -1,1018 +1,1018 @@
1
- #
2
- # Author:: John Keiser (<jkeiser@chef.io>)
3
- # Copyright:: Copyright (c) Chef Software 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 "knife_spec_helper"
19
- require "support/shared/integration/integration_helper"
20
- require "chef/knife/delete"
21
- require "chef/knife/list"
22
- require "chef/knife/raw"
23
-
24
- describe "knife delete", :workstation do
25
- include IntegrationSupport
26
- include KnifeSupport
27
-
28
- let :everything do
29
- <<~EOM
30
- /clients
31
- /clients/x.json
32
- /cookbooks
33
- /cookbooks/x
34
- /cookbooks/x/metadata.rb
35
- /data_bags
36
- /data_bags/x
37
- /data_bags/x/y.json
38
- /environments
39
- /environments/_default.json
40
- /environments/x.json
41
- /nodes
42
- /nodes/x.json
43
- /roles
44
- /roles/x.json
45
- /users
46
- /users/x.json
47
- EOM
48
- end
49
-
50
- let :server_everything do
51
- <<~EOM
52
- /clients
53
- /clients/chef-validator.json
54
- /clients/chef-webui.json
55
- /clients/x.json
56
- /cookbooks
57
- /cookbooks/x
58
- /cookbooks/x/metadata.rb
59
- /data_bags
60
- /data_bags/x
61
- /data_bags/x/y.json
62
- /environments
63
- /environments/_default.json
64
- /environments/x.json
65
- /nodes
66
- /nodes/x.json
67
- /roles
68
- /roles/x.json
69
- /users
70
- /users/admin.json
71
- /users/x.json
72
- EOM
73
- end
74
- let :server_nothing do
75
- <<~EOM
76
- /clients
77
- /clients/chef-validator.json
78
- /clients/chef-webui.json
79
- /cookbooks
80
- /data_bags
81
- /environments
82
- /environments/_default.json
83
- /nodes
84
- /roles
85
- /users
86
- /users/admin.json
87
- EOM
88
- end
89
-
90
- let :nothing do
91
- <<~EOM
92
- /clients
93
- /cookbooks
94
- /data_bags
95
- /environments
96
- /nodes
97
- /roles
98
- /users
99
- EOM
100
- end
101
-
102
- when_the_chef_server "has one of each thing" do
103
- before do
104
- client "x", "{}"
105
- cookbook "x", "1.0.0"
106
- data_bag "x", { "y" => "{}" }
107
- environment "x", "{}"
108
- node "x", "{}"
109
- role "x", "{}"
110
- user "x", "{}"
111
- end
112
-
113
- when_the_repository "also has one of each thing" do
114
- before do
115
- file "clients/x.json", {}
116
- file "cookbooks/x/metadata.rb", ""
117
- file "data_bags/x/y.json", {}
118
- file "environments/_default.json", {}
119
- file "environments/x.json", {}
120
- file "nodes/x.json", {}
121
- file "roles/x.json", {}
122
- file "users/x.json", {}
123
- end
124
-
125
- it "knife delete --both /cookbooks/x fails" do
126
- knife("delete --both /cookbooks/x").should_fail <<~EOM
127
- ERROR: /cookbooks/x (remote) must be deleted recursively! Pass -r to knife delete.
128
- ERROR: /cookbooks/x (local) must be deleted recursively! Pass -r to knife delete.
129
- EOM
130
- knife("list -Rf /").should_succeed server_everything
131
- knife("list -Rf --local /").should_succeed everything
132
- end
133
-
134
- it "knife delete --both -r /cookbooks/x deletes x" do
135
- knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
136
- knife("list -Rf /").should_succeed <<~EOM
137
- /clients
138
- /clients/chef-validator.json
139
- /clients/chef-webui.json
140
- /clients/x.json
141
- /cookbooks
142
- /data_bags
143
- /data_bags/x
144
- /data_bags/x/y.json
145
- /environments
146
- /environments/_default.json
147
- /environments/x.json
148
- /nodes
149
- /nodes/x.json
150
- /roles
151
- /roles/x.json
152
- /users
153
- /users/admin.json
154
- /users/x.json
155
- EOM
156
- knife("list -Rf --local /").should_succeed <<~EOM
157
- /clients
158
- /clients/x.json
159
- /cookbooks
160
- /data_bags
161
- /data_bags/x
162
- /data_bags/x/y.json
163
- /environments
164
- /environments/_default.json
165
- /environments/x.json
166
- /nodes
167
- /nodes/x.json
168
- /roles
169
- /roles/x.json
170
- /users
171
- /users/x.json
172
- EOM
173
- end
174
-
175
- it "knife delete -r --local /cookbooks/x deletes x locally but not remotely" do
176
- knife("delete -r --local /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
177
- knife("list -Rf /").should_succeed server_everything
178
- knife("list -Rf --local /").should_succeed <<~EOM
179
- /clients
180
- /clients/x.json
181
- /cookbooks
182
- /data_bags
183
- /data_bags/x
184
- /data_bags/x/y.json
185
- /environments
186
- /environments/_default.json
187
- /environments/x.json
188
- /nodes
189
- /nodes/x.json
190
- /roles
191
- /roles/x.json
192
- /users
193
- /users/x.json
194
- EOM
195
- end
196
-
197
- it "knife delete -r /cookbooks/x deletes x remotely but not locally" do
198
- knife("delete -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
199
- knife("list -Rf /").should_succeed <<~EOM
200
- /clients
201
- /clients/chef-validator.json
202
- /clients/chef-webui.json
203
- /clients/x.json
204
- /cookbooks
205
- /data_bags
206
- /data_bags/x
207
- /data_bags/x/y.json
208
- /environments
209
- /environments/_default.json
210
- /environments/x.json
211
- /nodes
212
- /nodes/x.json
213
- /roles
214
- /roles/x.json
215
- /users
216
- /users/admin.json
217
- /users/x.json
218
- EOM
219
- knife("list -Rf --local /").should_succeed everything
220
- end
221
-
222
- # TODO delete empty data bag (particularly different on local side)
223
- context "with an empty data bag on both" do
224
- before do
225
- data_bag "empty", {}
226
- directory "data_bags/empty"
227
- end
228
-
229
- it "knife delete --both /data_bags/empty fails but deletes local version" do
230
- knife("delete --both /data_bags/empty").should_fail <<~EOM
231
- ERROR: /data_bags/empty (remote) must be deleted recursively! Pass -r to knife delete.
232
- ERROR: /data_bags/empty (local) must be deleted recursively! Pass -r to knife delete.
233
- EOM
234
- knife("list -Rf /").should_succeed <<~EOM
235
- /clients
236
- /clients/chef-validator.json
237
- /clients/chef-webui.json
238
- /clients/x.json
239
- /cookbooks
240
- /cookbooks/x
241
- /cookbooks/x/metadata.rb
242
- /data_bags
243
- /data_bags/empty
244
- /data_bags/x
245
- /data_bags/x/y.json
246
- /environments
247
- /environments/_default.json
248
- /environments/x.json
249
- /nodes
250
- /nodes/x.json
251
- /roles
252
- /roles/x.json
253
- /users
254
- /users/admin.json
255
- /users/x.json
256
- EOM
257
- knife("list -Rf --local /").should_succeed <<~EOM
258
- /clients
259
- /clients/x.json
260
- /cookbooks
261
- /cookbooks/x
262
- /cookbooks/x/metadata.rb
263
- /data_bags
264
- /data_bags/empty
265
- /data_bags/x
266
- /data_bags/x/y.json
267
- /environments
268
- /environments/_default.json
269
- /environments/x.json
270
- /nodes
271
- /nodes/x.json
272
- /roles
273
- /roles/x.json
274
- /users
275
- /users/x.json
276
- EOM
277
- end
278
- end
279
-
280
- it "knife delete --both /data_bags/x fails" do
281
- knife("delete --both /data_bags/x").should_fail <<~EOM
282
- ERROR: /data_bags/x (remote) must be deleted recursively! Pass -r to knife delete.
283
- ERROR: /data_bags/x (local) must be deleted recursively! Pass -r to knife delete.
284
- EOM
285
- knife("list -Rf /").should_succeed server_everything
286
- knife("list -Rf --local /").should_succeed everything
287
- end
288
-
289
- it "knife delete --both -r /data_bags/x deletes x" do
290
- knife("delete --both -r /data_bags/x").should_succeed "Deleted /data_bags/x\n"
291
- knife("list -Rf /").should_succeed <<~EOM
292
- /clients
293
- /clients/chef-validator.json
294
- /clients/chef-webui.json
295
- /clients/x.json
296
- /cookbooks
297
- /cookbooks/x
298
- /cookbooks/x/metadata.rb
299
- /data_bags
300
- /environments
301
- /environments/_default.json
302
- /environments/x.json
303
- /nodes
304
- /nodes/x.json
305
- /roles
306
- /roles/x.json
307
- /users
308
- /users/admin.json
309
- /users/x.json
310
- EOM
311
- knife("list -Rf --local /").should_succeed <<~EOM
312
- /clients
313
- /clients/x.json
314
- /cookbooks
315
- /cookbooks/x
316
- /cookbooks/x/metadata.rb
317
- /data_bags
318
- /environments
319
- /environments/_default.json
320
- /environments/x.json
321
- /nodes
322
- /nodes/x.json
323
- /roles
324
- /roles/x.json
325
- /users
326
- /users/x.json
327
- EOM
328
- end
329
-
330
- it "knife delete --both /environments/x.json deletes x" do
331
- knife("delete --both /environments/x.json").should_succeed "Deleted /environments/x.json\n"
332
- knife("list -Rf /").should_succeed <<~EOM
333
- /clients
334
- /clients/chef-validator.json
335
- /clients/chef-webui.json
336
- /clients/x.json
337
- /cookbooks
338
- /cookbooks/x
339
- /cookbooks/x/metadata.rb
340
- /data_bags
341
- /data_bags/x
342
- /data_bags/x/y.json
343
- /environments
344
- /environments/_default.json
345
- /nodes
346
- /nodes/x.json
347
- /roles
348
- /roles/x.json
349
- /users
350
- /users/admin.json
351
- /users/x.json
352
- EOM
353
- knife("list -Rf --local /").should_succeed <<~EOM
354
- /clients
355
- /clients/x.json
356
- /cookbooks
357
- /cookbooks/x
358
- /cookbooks/x/metadata.rb
359
- /data_bags
360
- /data_bags/x
361
- /data_bags/x/y.json
362
- /environments
363
- /environments/_default.json
364
- /nodes
365
- /nodes/x.json
366
- /roles
367
- /roles/x.json
368
- /users
369
- /users/x.json
370
- EOM
371
- end
372
-
373
- it "knife delete --both /roles/x.json deletes x" do
374
- knife("delete --both /roles/x.json").should_succeed "Deleted /roles/x.json\n"
375
- knife("list -Rf /").should_succeed <<~EOM
376
- /clients
377
- /clients/chef-validator.json
378
- /clients/chef-webui.json
379
- /clients/x.json
380
- /cookbooks
381
- /cookbooks/x
382
- /cookbooks/x/metadata.rb
383
- /data_bags
384
- /data_bags/x
385
- /data_bags/x/y.json
386
- /environments
387
- /environments/_default.json
388
- /environments/x.json
389
- /nodes
390
- /nodes/x.json
391
- /roles
392
- /users
393
- /users/admin.json
394
- /users/x.json
395
- EOM
396
- knife("list -Rf --local /").should_succeed <<~EOM
397
- /clients
398
- /clients/x.json
399
- /cookbooks
400
- /cookbooks/x
401
- /cookbooks/x/metadata.rb
402
- /data_bags
403
- /data_bags/x
404
- /data_bags/x/y.json
405
- /environments
406
- /environments/_default.json
407
- /environments/x.json
408
- /nodes
409
- /nodes/x.json
410
- /roles
411
- /users
412
- /users/x.json
413
- EOM
414
- end
415
-
416
- it "knife delete --both /environments/_default.json fails but still deletes the local copy" do
417
- 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"
418
- knife("list -Rf /").should_succeed server_everything
419
- knife("list -Rf --local /").should_succeed <<~EOM
420
- /clients
421
- /clients/x.json
422
- /cookbooks
423
- /cookbooks/x
424
- /cookbooks/x/metadata.rb
425
- /data_bags
426
- /data_bags/x
427
- /data_bags/x/y.json
428
- /environments
429
- /environments/x.json
430
- /nodes
431
- /nodes/x.json
432
- /roles
433
- /roles/x.json
434
- /users
435
- /users/x.json
436
- EOM
437
- end
438
-
439
- it "knife delete --both /environments/nonexistent.json fails" do
440
- knife("delete --both /environments/nonexistent.json").should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
441
- knife("list -Rf /").should_succeed server_everything
442
- knife("list -Rf --local /").should_succeed everything
443
- end
444
-
445
- it "knife delete --both / fails" do
446
- knife("delete --both /").should_fail <<~EOM
447
- ERROR: / (remote) cannot be deleted.
448
- ERROR: / (local) cannot be deleted.
449
- EOM
450
- knife("list -Rf /").should_succeed server_everything
451
- knife("list -Rf --local /").should_succeed everything
452
- end
453
-
454
- it "knife delete --both -r /* fails" do
455
- knife("delete --both -r /*").should_fail <<~EOM
456
- ERROR: / (remote) cannot be deleted.
457
- ERROR: / (local) cannot be deleted.
458
- ERROR: /clients (remote) cannot be deleted.
459
- ERROR: /clients (local) cannot be deleted.
460
- ERROR: /cookbooks (remote) cannot be deleted.
461
- ERROR: /cookbooks (local) cannot be deleted.
462
- ERROR: /data_bags (remote) cannot be deleted.
463
- ERROR: /data_bags (local) cannot be deleted.
464
- ERROR: /environments (remote) cannot be deleted.
465
- ERROR: /environments (local) cannot be deleted.
466
- ERROR: /nodes (remote) cannot be deleted.
467
- ERROR: /nodes (local) cannot be deleted.
468
- ERROR: /roles (remote) cannot be deleted.
469
- ERROR: /roles (local) cannot be deleted.
470
- ERROR: /users (remote) cannot be deleted.
471
- ERROR: /users (local) cannot be deleted.
472
- EOM
473
- knife("list -Rf /").should_succeed server_everything
474
- knife("list -Rf --local /").should_succeed everything
475
- end
476
- end
477
-
478
- when_the_repository "has only top-level directories" do
479
- before do
480
- directory "clients"
481
- directory "cookbooks"
482
- directory "data_bags"
483
- directory "environments"
484
- directory "nodes"
485
- directory "roles"
486
- directory "users"
487
- end
488
-
489
- it "knife delete --both /cookbooks/x fails" do
490
- knife("delete --both /cookbooks/x").should_fail "ERROR: /cookbooks/x (remote) must be deleted recursively! Pass -r to knife delete.\n"
491
- knife("list -Rf /").should_succeed server_everything
492
- knife("list -Rf --local /").should_succeed nothing
493
- end
494
-
495
- it "knife delete --both -r /cookbooks/x deletes x" do
496
- knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
497
- knife("list -Rf /").should_succeed <<~EOM
498
- /clients
499
- /clients/chef-validator.json
500
- /clients/chef-webui.json
501
- /clients/x.json
502
- /cookbooks
503
- /data_bags
504
- /data_bags/x
505
- /data_bags/x/y.json
506
- /environments
507
- /environments/_default.json
508
- /environments/x.json
509
- /nodes
510
- /nodes/x.json
511
- /roles
512
- /roles/x.json
513
- /users
514
- /users/admin.json
515
- /users/x.json
516
- EOM
517
- knife("list -Rf --local /").should_succeed nothing
518
- end
519
-
520
- it "knife delete --both /data_bags/x fails" do
521
- knife("delete --both /data_bags/x").should_fail "ERROR: /data_bags/x (remote) must be deleted recursively! Pass -r to knife delete.\n"
522
- knife("list -Rf /").should_succeed server_everything
523
- knife("list -Rf --local /").should_succeed nothing
524
- end
525
-
526
- it "knife delete --both -r /data_bags/x deletes x" do
527
- knife("delete --both -r /data_bags/x").should_succeed "Deleted /data_bags/x\n"
528
- knife("list -Rf /").should_succeed <<~EOM
529
- /clients
530
- /clients/chef-validator.json
531
- /clients/chef-webui.json
532
- /clients/x.json
533
- /cookbooks
534
- /cookbooks/x
535
- /cookbooks/x/metadata.rb
536
- /data_bags
537
- /environments
538
- /environments/_default.json
539
- /environments/x.json
540
- /nodes
541
- /nodes/x.json
542
- /roles
543
- /roles/x.json
544
- /users
545
- /users/admin.json
546
- /users/x.json
547
- EOM
548
- knife("list -Rf --local /").should_succeed nothing
549
- end
550
-
551
- it "knife delete --both /environments/x.json deletes x" do
552
- knife("delete --both /environments/x.json").should_succeed "Deleted /environments/x.json\n"
553
- knife("list -Rf /").should_succeed <<~EOM
554
- /clients
555
- /clients/chef-validator.json
556
- /clients/chef-webui.json
557
- /clients/x.json
558
- /cookbooks
559
- /cookbooks/x
560
- /cookbooks/x/metadata.rb
561
- /data_bags
562
- /data_bags/x
563
- /data_bags/x/y.json
564
- /environments
565
- /environments/_default.json
566
- /nodes
567
- /nodes/x.json
568
- /roles
569
- /roles/x.json
570
- /users
571
- /users/admin.json
572
- /users/x.json
573
- EOM
574
- knife("list -Rf --local /").should_succeed nothing
575
- end
576
-
577
- it "knife delete --both /roles/x.json deletes x" do
578
- knife("delete --both /roles/x.json").should_succeed "Deleted /roles/x.json\n"
579
- knife("list -Rf /").should_succeed <<~EOM
580
- /clients
581
- /clients/chef-validator.json
582
- /clients/chef-webui.json
583
- /clients/x.json
584
- /cookbooks
585
- /cookbooks/x
586
- /cookbooks/x/metadata.rb
587
- /data_bags
588
- /data_bags/x
589
- /data_bags/x/y.json
590
- /environments
591
- /environments/_default.json
592
- /environments/x.json
593
- /nodes
594
- /nodes/x.json
595
- /roles
596
- /users
597
- /users/admin.json
598
- /users/x.json
599
- EOM
600
- knife("list -Rf --local /").should_succeed nothing
601
- end
602
-
603
- it "knife delete --both /environments/_default.json fails" do
604
- knife("delete --both /environments/_default.json").should_fail "", stderr: "ERROR: /environments/_default.json (remote) cannot be deleted (default environment cannot be modified).\n"
605
- knife("list -Rf /").should_succeed server_everything
606
- knife("list -Rf --local /").should_succeed nothing
607
- end
608
-
609
- it "knife delete --both / fails" do
610
- knife("delete --both /").should_fail "ERROR: / (remote) cannot be deleted.\nERROR: / (local) cannot be deleted.\n"
611
- knife("list -Rf /").should_succeed server_everything
612
- knife("list -Rf --local /").should_succeed nothing
613
- end
614
-
615
- it "knife delete --both -r /* fails" do
616
- knife("delete --both -r /*").should_fail <<~EOM
617
- ERROR: / (remote) cannot be deleted.
618
- ERROR: / (local) cannot be deleted.
619
- ERROR: /clients (remote) cannot be deleted.
620
- ERROR: /clients (local) cannot be deleted.
621
- ERROR: /cookbooks (remote) cannot be deleted.
622
- ERROR: /cookbooks (local) cannot be deleted.
623
- ERROR: /data_bags (remote) cannot be deleted.
624
- ERROR: /data_bags (local) cannot be deleted.
625
- ERROR: /environments (remote) cannot be deleted.
626
- ERROR: /environments (local) cannot be deleted.
627
- ERROR: /nodes (remote) cannot be deleted.
628
- ERROR: /nodes (local) cannot be deleted.
629
- ERROR: /roles (remote) cannot be deleted.
630
- ERROR: /roles (local) cannot be deleted.
631
- ERROR: /users (remote) cannot be deleted.
632
- ERROR: /users (local) cannot be deleted.
633
- EOM
634
- knife("list -Rf /").should_succeed server_everything
635
- knife("list -Rf --local /").should_succeed nothing
636
- end
637
-
638
- it "knife delete --both /environments/nonexistent.json fails" do
639
- knife("delete --both /environments/nonexistent.json").should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
640
- knife("list -Rf /").should_succeed server_everything
641
- knife("list -Rf --local /").should_succeed nothing
642
- end
643
-
644
- context "and cwd is at the top level" do
645
- before { cwd "." }
646
- it "knife delete fails" do
647
- knife("delete").should_fail "FATAL: You must specify at least one argument. If you want to delete everything in this directory, run \"knife delete --recurse .\"\n", stdout: /USAGE/
648
- knife("list -Rf /").should_succeed <<~EOM
649
- clients
650
- clients/chef-validator.json
651
- clients/chef-webui.json
652
- clients/x.json
653
- cookbooks
654
- cookbooks/x
655
- cookbooks/x/metadata.rb
656
- data_bags
657
- data_bags/x
658
- data_bags/x/y.json
659
- environments
660
- environments/_default.json
661
- environments/x.json
662
- nodes
663
- nodes/x.json
664
- roles
665
- roles/x.json
666
- users
667
- users/admin.json
668
- users/x.json
669
- EOM
670
- knife("list -Rf --local /").should_succeed <<~EOM
671
- clients
672
- cookbooks
673
- data_bags
674
- environments
675
- nodes
676
- roles
677
- users
678
- EOM
679
- end
680
- end
681
- end
682
- end
683
-
684
- when_the_chef_server "is empty" do
685
- when_the_repository "has one of each thing" do
686
- before do
687
- file "clients/x.json", {}
688
- file "cookbooks/x/metadata.rb", ""
689
- file "data_bags/x/y.json", {}
690
- file "environments/_default.json", {}
691
- file "environments/x.json", {}
692
- file "nodes/x.json", {}
693
- file "roles/x.json", {}
694
- file "users/x.json", {}
695
- end
696
-
697
- it "knife delete --both /cookbooks/x fails" do
698
- knife("delete --both /cookbooks/x").should_fail "ERROR: /cookbooks/x (local) must be deleted recursively! Pass -r to knife delete.\n"
699
- knife("list -Rf /").should_succeed server_nothing
700
- knife("list -Rf --local /").should_succeed everything
701
- end
702
-
703
- it "knife delete --both -r /cookbooks/x deletes x" do
704
- knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
705
- knife("list -Rf /").should_succeed server_nothing
706
- knife("list -Rf --local /").should_succeed <<~EOM
707
- /clients
708
- /clients/x.json
709
- /cookbooks
710
- /data_bags
711
- /data_bags/x
712
- /data_bags/x/y.json
713
- /environments
714
- /environments/_default.json
715
- /environments/x.json
716
- /nodes
717
- /nodes/x.json
718
- /roles
719
- /roles/x.json
720
- /users
721
- /users/x.json
722
- EOM
723
- end
724
-
725
- it "knife delete --both /data_bags/x fails" do
726
- knife("delete --both /data_bags/x").should_fail "ERROR: /data_bags/x (local) must be deleted recursively! Pass -r to knife delete.\n"
727
- knife("list -Rf /").should_succeed server_nothing
728
- knife("list -Rf --local /").should_succeed everything
729
- end
730
-
731
- it "knife delete --both -r /data_bags/x deletes x" do
732
- knife("delete --both -r /data_bags/x").should_succeed "Deleted /data_bags/x\n"
733
- knife("list -Rf /").should_succeed server_nothing
734
- knife("list -Rf --local /").should_succeed <<~EOM
735
- /clients
736
- /clients/x.json
737
- /cookbooks
738
- /cookbooks/x
739
- /cookbooks/x/metadata.rb
740
- /data_bags
741
- /environments
742
- /environments/_default.json
743
- /environments/x.json
744
- /nodes
745
- /nodes/x.json
746
- /roles
747
- /roles/x.json
748
- /users
749
- /users/x.json
750
- EOM
751
- end
752
-
753
- it "knife delete --both /environments/x.json deletes x" do
754
- knife("delete --both /environments/x.json").should_succeed "Deleted /environments/x.json\n"
755
- knife("list -Rf /").should_succeed server_nothing
756
- knife("list -Rf --local /").should_succeed <<~EOM
757
- /clients
758
- /clients/x.json
759
- /cookbooks
760
- /cookbooks/x
761
- /cookbooks/x/metadata.rb
762
- /data_bags
763
- /data_bags/x
764
- /data_bags/x/y.json
765
- /environments
766
- /environments/_default.json
767
- /nodes
768
- /nodes/x.json
769
- /roles
770
- /roles/x.json
771
- /users
772
- /users/x.json
773
- EOM
774
- end
775
-
776
- it "knife delete --both /roles/x.json deletes x" do
777
- knife("delete --both /roles/x.json").should_succeed "Deleted /roles/x.json\n"
778
- knife("list -Rf /").should_succeed server_nothing
779
- knife("list -Rf --local /").should_succeed <<~EOM
780
- /clients
781
- /clients/x.json
782
- /cookbooks
783
- /cookbooks/x
784
- /cookbooks/x/metadata.rb
785
- /data_bags
786
- /data_bags/x
787
- /data_bags/x/y.json
788
- /environments
789
- /environments/_default.json
790
- /environments/x.json
791
- /nodes
792
- /nodes/x.json
793
- /roles
794
- /users
795
- /users/x.json
796
- EOM
797
- end
798
-
799
- it "knife delete --both /environments/_default.json fails but still deletes the local copy" do
800
- 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"
801
- knife("list -Rf /").should_succeed server_nothing
802
- knife("list -Rf --local /").should_succeed <<~EOM
803
- /clients
804
- /clients/x.json
805
- /cookbooks
806
- /cookbooks/x
807
- /cookbooks/x/metadata.rb
808
- /data_bags
809
- /data_bags/x
810
- /data_bags/x/y.json
811
- /environments
812
- /environments/x.json
813
- /nodes
814
- /nodes/x.json
815
- /roles
816
- /roles/x.json
817
- /users
818
- /users/x.json
819
- EOM
820
- end
821
-
822
- it "knife delete --both / fails" do
823
- knife("delete --both /").should_fail "ERROR: / (remote) cannot be deleted.\nERROR: / (local) cannot be deleted.\n"
824
- knife("list -Rf /").should_succeed server_nothing
825
- knife("list -Rf --local /").should_succeed everything
826
- end
827
-
828
- it "knife delete --both -r /* fails" do
829
- knife("delete --both -r /*").should_fail <<~EOM
830
- ERROR: / (remote) cannot be deleted.
831
- ERROR: / (local) cannot be deleted.
832
- ERROR: /clients (remote) cannot be deleted.
833
- ERROR: /clients (local) cannot be deleted.
834
- ERROR: /cookbooks (remote) cannot be deleted.
835
- ERROR: /cookbooks (local) cannot be deleted.
836
- ERROR: /data_bags (remote) cannot be deleted.
837
- ERROR: /data_bags (local) cannot be deleted.
838
- ERROR: /environments (remote) cannot be deleted.
839
- ERROR: /environments (local) cannot be deleted.
840
- ERROR: /nodes (remote) cannot be deleted.
841
- ERROR: /nodes (local) cannot be deleted.
842
- ERROR: /roles (remote) cannot be deleted.
843
- ERROR: /roles (local) cannot be deleted.
844
- ERROR: /users (remote) cannot be deleted.
845
- ERROR: /users (local) cannot be deleted.
846
- EOM
847
- knife("list -Rf /").should_succeed server_nothing
848
- knife("list -Rf --local /").should_succeed everything
849
- end
850
-
851
- it "knife delete --both /environments/nonexistent.json fails" do
852
- knife("delete --both /environments/nonexistent.json").should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
853
- knife("list -Rf /").should_succeed server_nothing
854
- knife("list -Rf --local /").should_succeed everything
855
- end
856
-
857
- context "and cwd is at the top level" do
858
- before { cwd "." }
859
- it "knife delete fails" do
860
- knife("delete").should_fail "FATAL: You must specify at least one argument. If you want to delete everything in this directory, run \"knife delete --recurse .\"\n", stdout: /USAGE/
861
- knife("list -Rf /").should_succeed <<~EOM
862
- clients
863
- clients/chef-validator.json
864
- clients/chef-webui.json
865
- cookbooks
866
- data_bags
867
- environments
868
- environments/_default.json
869
- nodes
870
- roles
871
- users
872
- users/admin.json
873
- EOM
874
- knife("list -Rf --local /").should_succeed <<~EOM
875
- clients
876
- clients/x.json
877
- cookbooks
878
- cookbooks/x
879
- cookbooks/x/metadata.rb
880
- data_bags
881
- data_bags/x
882
- data_bags/x/y.json
883
- environments
884
- environments/_default.json
885
- environments/x.json
886
- nodes
887
- nodes/x.json
888
- roles
889
- roles/x.json
890
- users
891
- users/x.json
892
- EOM
893
- end
894
- end
895
- end
896
- end
897
-
898
- when_the_repository "has a cookbook" do
899
- before do
900
- file "cookbooks/x/metadata.rb", 'version "1.0.0"'
901
- file "cookbooks/x/onlyin1.0.0.rb", "old_text"
902
- end
903
-
904
- when_the_chef_server "has a later version for the cookbook" do
905
- before do
906
- cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
907
- cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
908
- end
909
-
910
- # TODO this seems wrong
911
- it "knife delete --both -r /cookbooks/x deletes the latest version on the server and the local version" do
912
- knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
913
- knife("raw /cookbooks/x").should_succeed(/1.0.0/)
914
- knife("list --local /cookbooks").should_succeed ""
915
- end
916
- end
917
-
918
- when_the_chef_server "has an earlier version for the cookbook" do
919
- before do
920
- cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
921
- cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
922
- end
923
-
924
- it "knife delete --both /cookbooks/x deletes the latest version on the server and the local version" do
925
- knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
926
- knife("raw /cookbooks/x").should_succeed(/0.9.9/)
927
- knife("list --local /cookbooks").should_succeed ""
928
- end
929
- end
930
-
931
- when_the_chef_server "has a later version for the cookbook, and no current version" do
932
- before { cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" } }
933
-
934
- it "knife delete --both /cookbooks/x deletes the server and client version of the cookbook" do
935
- knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
936
- knife("raw /cookbooks/x").should_fail(/404/)
937
- knife("list --local /cookbooks").should_succeed ""
938
- end
939
- end
940
-
941
- when_the_chef_server "has an earlier version for the cookbook, and no current version" do
942
- before { cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" } }
943
-
944
- it "knife delete --both /cookbooks/x deletes the server and client version of the cookbook" do
945
- knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
946
- knife("raw /cookbooks/x").should_fail(/404/)
947
- knife("list --local /cookbooks").should_succeed ""
948
- end
949
- end
950
- end
951
-
952
- when_the_repository "is empty" do
953
- when_the_chef_server "has two versions of a cookbook" do
954
- before do
955
- cookbook "x", "2.0.11"
956
- cookbook "x", "11.0.0"
957
- end
958
-
959
- it "knife delete deletes the latest version" do
960
- knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
961
- knife("raw /cookbooks/x").should_succeed( /2.0.11/ )
962
- end
963
- end
964
- end
965
-
966
- when_the_chef_server "is in Enterprise mode", osc_compat: false, single_org: false do
967
- before do
968
- organization "foo" do
969
- container "x", {}
970
- group "x", {}
971
- policy "x", "1.2.3", {}
972
- policy_group "x", { "policies" => { "x" => { "revision_id" => "1.2.3" } } }
973
- end
974
- end
975
-
976
- before :each do
977
- Chef::Config.chef_server_url = URI.join(Chef::Config.chef_server_url, "/organizations/foo")
978
- end
979
-
980
- it "knife delete /acls/containers/environments.json fails with a reasonable error" do
981
- knife("delete /acls/containers/environments.json").should_fail "ERROR: /acls/containers/environments.json (remote) ACLs cannot be deleted.\n"
982
- end
983
-
984
- it "knife delete /containers/x.json succeeds" do
985
- knife("delete /containers/x.json").should_succeed "Deleted /containers/x.json\n"
986
- knife("raw /containers/x.json").should_fail(/404/)
987
- end
988
-
989
- it "knife delete /groups/x.json succeeds" do
990
- knife("delete /groups/x.json").should_succeed "Deleted /groups/x.json\n"
991
- knife("raw /groups/x.json").should_fail(/404/)
992
- end
993
-
994
- it "knife delete /policies/x-1.2.3.json succeeds" do
995
- knife("raw /policies/x/revisions/1.2.3").should_succeed "{\n \"policy_group_list\": [\n \"x\"\n ],\n \"name\": \"x\",\n \"revision_id\": \"1.2.3\",\n \"run_list\": [\n\n ],\n \"cookbook_locks\": {\n\n }\n}\n"
996
- knife("delete /policies/x-1.2.3.json").should_succeed "Deleted /policies/x-1.2.3.json\n"
997
- knife("raw /policies/x/revisions/1.2.3").should_fail(/404/)
998
- end
999
-
1000
- it "knife delete /policy_groups/x.json succeeds" do
1001
- knife("raw /policy_groups/x").should_succeed "{\n \"uri\": \"http://127.0.0.1:8900/organizations/foo/policy_groups/x\",\n \"policies\": {\n \"x\": {\n \"revision_id\": \"1.2.3\"\n }\n }\n}\n"
1002
- knife("delete /policy_groups/x.json").should_succeed "Deleted /policy_groups/x.json\n"
1003
- knife("raw /policy_groups/x").should_fail(/404/)
1004
- end
1005
-
1006
- it "knife delete /org.json fails with a reasonable error" do
1007
- knife("delete /org.json").should_fail "ERROR: /org.json (remote) cannot be deleted.\n"
1008
- end
1009
-
1010
- it "knife delete /invitations.json fails with a reasonable error" do
1011
- knife("delete /invitations.json").should_fail "ERROR: /invitations.json (remote) cannot be deleted.\n"
1012
- end
1013
-
1014
- it "knife delete /members.json fails with a reasonable error" do
1015
- knife("delete /members.json").should_fail "ERROR: /members.json (remote) cannot be deleted.\n"
1016
- end
1017
- end
1018
- end
1
+ #
2
+ # Author:: John Keiser (<jkeiser@chef.io>)
3
+ # Copyright:: Copyright (c) Chef Software 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 "knife_spec_helper"
19
+ require "support/shared/integration/integration_helper"
20
+ require "chef/knife/delete"
21
+ require "chef/knife/list"
22
+ require "chef/knife/raw"
23
+
24
+ describe "knife delete", :workstation do
25
+ include IntegrationSupport
26
+ include KnifeSupport
27
+
28
+ let :everything do
29
+ <<~EOM
30
+ /clients
31
+ /clients/x.json
32
+ /cookbooks
33
+ /cookbooks/x
34
+ /cookbooks/x/metadata.rb
35
+ /data_bags
36
+ /data_bags/x
37
+ /data_bags/x/y.json
38
+ /environments
39
+ /environments/_default.json
40
+ /environments/x.json
41
+ /nodes
42
+ /nodes/x.json
43
+ /roles
44
+ /roles/x.json
45
+ /users
46
+ /users/x.json
47
+ EOM
48
+ end
49
+
50
+ let :server_everything do
51
+ <<~EOM
52
+ /clients
53
+ /clients/chef-validator.json
54
+ /clients/chef-webui.json
55
+ /clients/x.json
56
+ /cookbooks
57
+ /cookbooks/x
58
+ /cookbooks/x/metadata.rb
59
+ /data_bags
60
+ /data_bags/x
61
+ /data_bags/x/y.json
62
+ /environments
63
+ /environments/_default.json
64
+ /environments/x.json
65
+ /nodes
66
+ /nodes/x.json
67
+ /roles
68
+ /roles/x.json
69
+ /users
70
+ /users/admin.json
71
+ /users/x.json
72
+ EOM
73
+ end
74
+ let :server_nothing do
75
+ <<~EOM
76
+ /clients
77
+ /clients/chef-validator.json
78
+ /clients/chef-webui.json
79
+ /cookbooks
80
+ /data_bags
81
+ /environments
82
+ /environments/_default.json
83
+ /nodes
84
+ /roles
85
+ /users
86
+ /users/admin.json
87
+ EOM
88
+ end
89
+
90
+ let :nothing do
91
+ <<~EOM
92
+ /clients
93
+ /cookbooks
94
+ /data_bags
95
+ /environments
96
+ /nodes
97
+ /roles
98
+ /users
99
+ EOM
100
+ end
101
+
102
+ when_the_chef_server "has one of each thing" do
103
+ before do
104
+ client "x", "{}"
105
+ cookbook "x", "1.0.0"
106
+ data_bag "x", { "y" => "{}" }
107
+ environment "x", "{}"
108
+ node "x", "{}"
109
+ role "x", "{}"
110
+ user "x", "{}"
111
+ end
112
+
113
+ when_the_repository "also has one of each thing" do
114
+ before do
115
+ file "clients/x.json", {}
116
+ file "cookbooks/x/metadata.rb", ""
117
+ file "data_bags/x/y.json", {}
118
+ file "environments/_default.json", {}
119
+ file "environments/x.json", {}
120
+ file "nodes/x.json", {}
121
+ file "roles/x.json", {}
122
+ file "users/x.json", {}
123
+ end
124
+
125
+ it "knife delete --both /cookbooks/x fails" do
126
+ knife("delete --both /cookbooks/x").should_fail <<~EOM
127
+ ERROR: /cookbooks/x (remote) must be deleted recursively! Pass -r to knife delete.
128
+ ERROR: /cookbooks/x (local) must be deleted recursively! Pass -r to knife delete.
129
+ EOM
130
+ knife("list -Rf /").should_succeed server_everything
131
+ knife("list -Rf --local /").should_succeed everything
132
+ end
133
+
134
+ it "knife delete --both -r /cookbooks/x deletes x" do
135
+ knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
136
+ knife("list -Rf /").should_succeed <<~EOM
137
+ /clients
138
+ /clients/chef-validator.json
139
+ /clients/chef-webui.json
140
+ /clients/x.json
141
+ /cookbooks
142
+ /data_bags
143
+ /data_bags/x
144
+ /data_bags/x/y.json
145
+ /environments
146
+ /environments/_default.json
147
+ /environments/x.json
148
+ /nodes
149
+ /nodes/x.json
150
+ /roles
151
+ /roles/x.json
152
+ /users
153
+ /users/admin.json
154
+ /users/x.json
155
+ EOM
156
+ knife("list -Rf --local /").should_succeed <<~EOM
157
+ /clients
158
+ /clients/x.json
159
+ /cookbooks
160
+ /data_bags
161
+ /data_bags/x
162
+ /data_bags/x/y.json
163
+ /environments
164
+ /environments/_default.json
165
+ /environments/x.json
166
+ /nodes
167
+ /nodes/x.json
168
+ /roles
169
+ /roles/x.json
170
+ /users
171
+ /users/x.json
172
+ EOM
173
+ end
174
+
175
+ it "knife delete -r --local /cookbooks/x deletes x locally but not remotely" do
176
+ knife("delete -r --local /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
177
+ knife("list -Rf /").should_succeed server_everything
178
+ knife("list -Rf --local /").should_succeed <<~EOM
179
+ /clients
180
+ /clients/x.json
181
+ /cookbooks
182
+ /data_bags
183
+ /data_bags/x
184
+ /data_bags/x/y.json
185
+ /environments
186
+ /environments/_default.json
187
+ /environments/x.json
188
+ /nodes
189
+ /nodes/x.json
190
+ /roles
191
+ /roles/x.json
192
+ /users
193
+ /users/x.json
194
+ EOM
195
+ end
196
+
197
+ it "knife delete -r /cookbooks/x deletes x remotely but not locally" do
198
+ knife("delete -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
199
+ knife("list -Rf /").should_succeed <<~EOM
200
+ /clients
201
+ /clients/chef-validator.json
202
+ /clients/chef-webui.json
203
+ /clients/x.json
204
+ /cookbooks
205
+ /data_bags
206
+ /data_bags/x
207
+ /data_bags/x/y.json
208
+ /environments
209
+ /environments/_default.json
210
+ /environments/x.json
211
+ /nodes
212
+ /nodes/x.json
213
+ /roles
214
+ /roles/x.json
215
+ /users
216
+ /users/admin.json
217
+ /users/x.json
218
+ EOM
219
+ knife("list -Rf --local /").should_succeed everything
220
+ end
221
+
222
+ # TODO delete empty data bag (particularly different on local side)
223
+ context "with an empty data bag on both" do
224
+ before do
225
+ data_bag "empty", {}
226
+ directory "data_bags/empty"
227
+ end
228
+
229
+ it "knife delete --both /data_bags/empty fails but deletes local version" do
230
+ knife("delete --both /data_bags/empty").should_fail <<~EOM
231
+ ERROR: /data_bags/empty (remote) must be deleted recursively! Pass -r to knife delete.
232
+ ERROR: /data_bags/empty (local) must be deleted recursively! Pass -r to knife delete.
233
+ EOM
234
+ knife("list -Rf /").should_succeed <<~EOM
235
+ /clients
236
+ /clients/chef-validator.json
237
+ /clients/chef-webui.json
238
+ /clients/x.json
239
+ /cookbooks
240
+ /cookbooks/x
241
+ /cookbooks/x/metadata.rb
242
+ /data_bags
243
+ /data_bags/empty
244
+ /data_bags/x
245
+ /data_bags/x/y.json
246
+ /environments
247
+ /environments/_default.json
248
+ /environments/x.json
249
+ /nodes
250
+ /nodes/x.json
251
+ /roles
252
+ /roles/x.json
253
+ /users
254
+ /users/admin.json
255
+ /users/x.json
256
+ EOM
257
+ knife("list -Rf --local /").should_succeed <<~EOM
258
+ /clients
259
+ /clients/x.json
260
+ /cookbooks
261
+ /cookbooks/x
262
+ /cookbooks/x/metadata.rb
263
+ /data_bags
264
+ /data_bags/empty
265
+ /data_bags/x
266
+ /data_bags/x/y.json
267
+ /environments
268
+ /environments/_default.json
269
+ /environments/x.json
270
+ /nodes
271
+ /nodes/x.json
272
+ /roles
273
+ /roles/x.json
274
+ /users
275
+ /users/x.json
276
+ EOM
277
+ end
278
+ end
279
+
280
+ it "knife delete --both /data_bags/x fails" do
281
+ knife("delete --both /data_bags/x").should_fail <<~EOM
282
+ ERROR: /data_bags/x (remote) must be deleted recursively! Pass -r to knife delete.
283
+ ERROR: /data_bags/x (local) must be deleted recursively! Pass -r to knife delete.
284
+ EOM
285
+ knife("list -Rf /").should_succeed server_everything
286
+ knife("list -Rf --local /").should_succeed everything
287
+ end
288
+
289
+ it "knife delete --both -r /data_bags/x deletes x" do
290
+ knife("delete --both -r /data_bags/x").should_succeed "Deleted /data_bags/x\n"
291
+ knife("list -Rf /").should_succeed <<~EOM
292
+ /clients
293
+ /clients/chef-validator.json
294
+ /clients/chef-webui.json
295
+ /clients/x.json
296
+ /cookbooks
297
+ /cookbooks/x
298
+ /cookbooks/x/metadata.rb
299
+ /data_bags
300
+ /environments
301
+ /environments/_default.json
302
+ /environments/x.json
303
+ /nodes
304
+ /nodes/x.json
305
+ /roles
306
+ /roles/x.json
307
+ /users
308
+ /users/admin.json
309
+ /users/x.json
310
+ EOM
311
+ knife("list -Rf --local /").should_succeed <<~EOM
312
+ /clients
313
+ /clients/x.json
314
+ /cookbooks
315
+ /cookbooks/x
316
+ /cookbooks/x/metadata.rb
317
+ /data_bags
318
+ /environments
319
+ /environments/_default.json
320
+ /environments/x.json
321
+ /nodes
322
+ /nodes/x.json
323
+ /roles
324
+ /roles/x.json
325
+ /users
326
+ /users/x.json
327
+ EOM
328
+ end
329
+
330
+ it "knife delete --both /environments/x.json deletes x" do
331
+ knife("delete --both /environments/x.json").should_succeed "Deleted /environments/x.json\n"
332
+ knife("list -Rf /").should_succeed <<~EOM
333
+ /clients
334
+ /clients/chef-validator.json
335
+ /clients/chef-webui.json
336
+ /clients/x.json
337
+ /cookbooks
338
+ /cookbooks/x
339
+ /cookbooks/x/metadata.rb
340
+ /data_bags
341
+ /data_bags/x
342
+ /data_bags/x/y.json
343
+ /environments
344
+ /environments/_default.json
345
+ /nodes
346
+ /nodes/x.json
347
+ /roles
348
+ /roles/x.json
349
+ /users
350
+ /users/admin.json
351
+ /users/x.json
352
+ EOM
353
+ knife("list -Rf --local /").should_succeed <<~EOM
354
+ /clients
355
+ /clients/x.json
356
+ /cookbooks
357
+ /cookbooks/x
358
+ /cookbooks/x/metadata.rb
359
+ /data_bags
360
+ /data_bags/x
361
+ /data_bags/x/y.json
362
+ /environments
363
+ /environments/_default.json
364
+ /nodes
365
+ /nodes/x.json
366
+ /roles
367
+ /roles/x.json
368
+ /users
369
+ /users/x.json
370
+ EOM
371
+ end
372
+
373
+ it "knife delete --both /roles/x.json deletes x" do
374
+ knife("delete --both /roles/x.json").should_succeed "Deleted /roles/x.json\n"
375
+ knife("list -Rf /").should_succeed <<~EOM
376
+ /clients
377
+ /clients/chef-validator.json
378
+ /clients/chef-webui.json
379
+ /clients/x.json
380
+ /cookbooks
381
+ /cookbooks/x
382
+ /cookbooks/x/metadata.rb
383
+ /data_bags
384
+ /data_bags/x
385
+ /data_bags/x/y.json
386
+ /environments
387
+ /environments/_default.json
388
+ /environments/x.json
389
+ /nodes
390
+ /nodes/x.json
391
+ /roles
392
+ /users
393
+ /users/admin.json
394
+ /users/x.json
395
+ EOM
396
+ knife("list -Rf --local /").should_succeed <<~EOM
397
+ /clients
398
+ /clients/x.json
399
+ /cookbooks
400
+ /cookbooks/x
401
+ /cookbooks/x/metadata.rb
402
+ /data_bags
403
+ /data_bags/x
404
+ /data_bags/x/y.json
405
+ /environments
406
+ /environments/_default.json
407
+ /environments/x.json
408
+ /nodes
409
+ /nodes/x.json
410
+ /roles
411
+ /users
412
+ /users/x.json
413
+ EOM
414
+ end
415
+
416
+ it "knife delete --both /environments/_default.json fails but still deletes the local copy" do
417
+ 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"
418
+ knife("list -Rf /").should_succeed server_everything
419
+ knife("list -Rf --local /").should_succeed <<~EOM
420
+ /clients
421
+ /clients/x.json
422
+ /cookbooks
423
+ /cookbooks/x
424
+ /cookbooks/x/metadata.rb
425
+ /data_bags
426
+ /data_bags/x
427
+ /data_bags/x/y.json
428
+ /environments
429
+ /environments/x.json
430
+ /nodes
431
+ /nodes/x.json
432
+ /roles
433
+ /roles/x.json
434
+ /users
435
+ /users/x.json
436
+ EOM
437
+ end
438
+
439
+ it "knife delete --both /environments/nonexistent.json fails" do
440
+ knife("delete --both /environments/nonexistent.json").should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
441
+ knife("list -Rf /").should_succeed server_everything
442
+ knife("list -Rf --local /").should_succeed everything
443
+ end
444
+
445
+ it "knife delete --both / fails" do
446
+ knife("delete --both /").should_fail <<~EOM
447
+ ERROR: / (remote) cannot be deleted.
448
+ ERROR: / (local) cannot be deleted.
449
+ EOM
450
+ knife("list -Rf /").should_succeed server_everything
451
+ knife("list -Rf --local /").should_succeed everything
452
+ end
453
+
454
+ it "knife delete --both -r /* fails" do
455
+ knife("delete --both -r /*").should_fail <<~EOM
456
+ ERROR: / (remote) cannot be deleted.
457
+ ERROR: / (local) cannot be deleted.
458
+ ERROR: /clients (remote) cannot be deleted.
459
+ ERROR: /clients (local) cannot be deleted.
460
+ ERROR: /cookbooks (remote) cannot be deleted.
461
+ ERROR: /cookbooks (local) cannot be deleted.
462
+ ERROR: /data_bags (remote) cannot be deleted.
463
+ ERROR: /data_bags (local) cannot be deleted.
464
+ ERROR: /environments (remote) cannot be deleted.
465
+ ERROR: /environments (local) cannot be deleted.
466
+ ERROR: /nodes (remote) cannot be deleted.
467
+ ERROR: /nodes (local) cannot be deleted.
468
+ ERROR: /roles (remote) cannot be deleted.
469
+ ERROR: /roles (local) cannot be deleted.
470
+ ERROR: /users (remote) cannot be deleted.
471
+ ERROR: /users (local) cannot be deleted.
472
+ EOM
473
+ knife("list -Rf /").should_succeed server_everything
474
+ knife("list -Rf --local /").should_succeed everything
475
+ end
476
+ end
477
+
478
+ when_the_repository "has only top-level directories" do
479
+ before do
480
+ directory "clients"
481
+ directory "cookbooks"
482
+ directory "data_bags"
483
+ directory "environments"
484
+ directory "nodes"
485
+ directory "roles"
486
+ directory "users"
487
+ end
488
+
489
+ it "knife delete --both /cookbooks/x fails" do
490
+ knife("delete --both /cookbooks/x").should_fail "ERROR: /cookbooks/x (remote) must be deleted recursively! Pass -r to knife delete.\n"
491
+ knife("list -Rf /").should_succeed server_everything
492
+ knife("list -Rf --local /").should_succeed nothing
493
+ end
494
+
495
+ it "knife delete --both -r /cookbooks/x deletes x" do
496
+ knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
497
+ knife("list -Rf /").should_succeed <<~EOM
498
+ /clients
499
+ /clients/chef-validator.json
500
+ /clients/chef-webui.json
501
+ /clients/x.json
502
+ /cookbooks
503
+ /data_bags
504
+ /data_bags/x
505
+ /data_bags/x/y.json
506
+ /environments
507
+ /environments/_default.json
508
+ /environments/x.json
509
+ /nodes
510
+ /nodes/x.json
511
+ /roles
512
+ /roles/x.json
513
+ /users
514
+ /users/admin.json
515
+ /users/x.json
516
+ EOM
517
+ knife("list -Rf --local /").should_succeed nothing
518
+ end
519
+
520
+ it "knife delete --both /data_bags/x fails" do
521
+ knife("delete --both /data_bags/x").should_fail "ERROR: /data_bags/x (remote) must be deleted recursively! Pass -r to knife delete.\n"
522
+ knife("list -Rf /").should_succeed server_everything
523
+ knife("list -Rf --local /").should_succeed nothing
524
+ end
525
+
526
+ it "knife delete --both -r /data_bags/x deletes x" do
527
+ knife("delete --both -r /data_bags/x").should_succeed "Deleted /data_bags/x\n"
528
+ knife("list -Rf /").should_succeed <<~EOM
529
+ /clients
530
+ /clients/chef-validator.json
531
+ /clients/chef-webui.json
532
+ /clients/x.json
533
+ /cookbooks
534
+ /cookbooks/x
535
+ /cookbooks/x/metadata.rb
536
+ /data_bags
537
+ /environments
538
+ /environments/_default.json
539
+ /environments/x.json
540
+ /nodes
541
+ /nodes/x.json
542
+ /roles
543
+ /roles/x.json
544
+ /users
545
+ /users/admin.json
546
+ /users/x.json
547
+ EOM
548
+ knife("list -Rf --local /").should_succeed nothing
549
+ end
550
+
551
+ it "knife delete --both /environments/x.json deletes x" do
552
+ knife("delete --both /environments/x.json").should_succeed "Deleted /environments/x.json\n"
553
+ knife("list -Rf /").should_succeed <<~EOM
554
+ /clients
555
+ /clients/chef-validator.json
556
+ /clients/chef-webui.json
557
+ /clients/x.json
558
+ /cookbooks
559
+ /cookbooks/x
560
+ /cookbooks/x/metadata.rb
561
+ /data_bags
562
+ /data_bags/x
563
+ /data_bags/x/y.json
564
+ /environments
565
+ /environments/_default.json
566
+ /nodes
567
+ /nodes/x.json
568
+ /roles
569
+ /roles/x.json
570
+ /users
571
+ /users/admin.json
572
+ /users/x.json
573
+ EOM
574
+ knife("list -Rf --local /").should_succeed nothing
575
+ end
576
+
577
+ it "knife delete --both /roles/x.json deletes x" do
578
+ knife("delete --both /roles/x.json").should_succeed "Deleted /roles/x.json\n"
579
+ knife("list -Rf /").should_succeed <<~EOM
580
+ /clients
581
+ /clients/chef-validator.json
582
+ /clients/chef-webui.json
583
+ /clients/x.json
584
+ /cookbooks
585
+ /cookbooks/x
586
+ /cookbooks/x/metadata.rb
587
+ /data_bags
588
+ /data_bags/x
589
+ /data_bags/x/y.json
590
+ /environments
591
+ /environments/_default.json
592
+ /environments/x.json
593
+ /nodes
594
+ /nodes/x.json
595
+ /roles
596
+ /users
597
+ /users/admin.json
598
+ /users/x.json
599
+ EOM
600
+ knife("list -Rf --local /").should_succeed nothing
601
+ end
602
+
603
+ it "knife delete --both /environments/_default.json fails" do
604
+ knife("delete --both /environments/_default.json").should_fail "", stderr: "ERROR: /environments/_default.json (remote) cannot be deleted (default environment cannot be modified).\n"
605
+ knife("list -Rf /").should_succeed server_everything
606
+ knife("list -Rf --local /").should_succeed nothing
607
+ end
608
+
609
+ it "knife delete --both / fails" do
610
+ knife("delete --both /").should_fail "ERROR: / (remote) cannot be deleted.\nERROR: / (local) cannot be deleted.\n"
611
+ knife("list -Rf /").should_succeed server_everything
612
+ knife("list -Rf --local /").should_succeed nothing
613
+ end
614
+
615
+ it "knife delete --both -r /* fails" do
616
+ knife("delete --both -r /*").should_fail <<~EOM
617
+ ERROR: / (remote) cannot be deleted.
618
+ ERROR: / (local) cannot be deleted.
619
+ ERROR: /clients (remote) cannot be deleted.
620
+ ERROR: /clients (local) cannot be deleted.
621
+ ERROR: /cookbooks (remote) cannot be deleted.
622
+ ERROR: /cookbooks (local) cannot be deleted.
623
+ ERROR: /data_bags (remote) cannot be deleted.
624
+ ERROR: /data_bags (local) cannot be deleted.
625
+ ERROR: /environments (remote) cannot be deleted.
626
+ ERROR: /environments (local) cannot be deleted.
627
+ ERROR: /nodes (remote) cannot be deleted.
628
+ ERROR: /nodes (local) cannot be deleted.
629
+ ERROR: /roles (remote) cannot be deleted.
630
+ ERROR: /roles (local) cannot be deleted.
631
+ ERROR: /users (remote) cannot be deleted.
632
+ ERROR: /users (local) cannot be deleted.
633
+ EOM
634
+ knife("list -Rf /").should_succeed server_everything
635
+ knife("list -Rf --local /").should_succeed nothing
636
+ end
637
+
638
+ it "knife delete --both /environments/nonexistent.json fails" do
639
+ knife("delete --both /environments/nonexistent.json").should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
640
+ knife("list -Rf /").should_succeed server_everything
641
+ knife("list -Rf --local /").should_succeed nothing
642
+ end
643
+
644
+ context "and cwd is at the top level" do
645
+ before { cwd "." }
646
+ it "knife delete fails" do
647
+ knife("delete").should_fail "FATAL: You must specify at least one argument. If you want to delete everything in this directory, run \"knife delete --recurse .\"\n", stdout: /USAGE/
648
+ knife("list -Rf /").should_succeed <<~EOM
649
+ clients
650
+ clients/chef-validator.json
651
+ clients/chef-webui.json
652
+ clients/x.json
653
+ cookbooks
654
+ cookbooks/x
655
+ cookbooks/x/metadata.rb
656
+ data_bags
657
+ data_bags/x
658
+ data_bags/x/y.json
659
+ environments
660
+ environments/_default.json
661
+ environments/x.json
662
+ nodes
663
+ nodes/x.json
664
+ roles
665
+ roles/x.json
666
+ users
667
+ users/admin.json
668
+ users/x.json
669
+ EOM
670
+ knife("list -Rf --local /").should_succeed <<~EOM
671
+ clients
672
+ cookbooks
673
+ data_bags
674
+ environments
675
+ nodes
676
+ roles
677
+ users
678
+ EOM
679
+ end
680
+ end
681
+ end
682
+ end
683
+
684
+ when_the_chef_server "is empty" do
685
+ when_the_repository "has one of each thing" do
686
+ before do
687
+ file "clients/x.json", {}
688
+ file "cookbooks/x/metadata.rb", ""
689
+ file "data_bags/x/y.json", {}
690
+ file "environments/_default.json", {}
691
+ file "environments/x.json", {}
692
+ file "nodes/x.json", {}
693
+ file "roles/x.json", {}
694
+ file "users/x.json", {}
695
+ end
696
+
697
+ it "knife delete --both /cookbooks/x fails" do
698
+ knife("delete --both /cookbooks/x").should_fail "ERROR: /cookbooks/x (local) must be deleted recursively! Pass -r to knife delete.\n"
699
+ knife("list -Rf /").should_succeed server_nothing
700
+ knife("list -Rf --local /").should_succeed everything
701
+ end
702
+
703
+ it "knife delete --both -r /cookbooks/x deletes x" do
704
+ knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
705
+ knife("list -Rf /").should_succeed server_nothing
706
+ knife("list -Rf --local /").should_succeed <<~EOM
707
+ /clients
708
+ /clients/x.json
709
+ /cookbooks
710
+ /data_bags
711
+ /data_bags/x
712
+ /data_bags/x/y.json
713
+ /environments
714
+ /environments/_default.json
715
+ /environments/x.json
716
+ /nodes
717
+ /nodes/x.json
718
+ /roles
719
+ /roles/x.json
720
+ /users
721
+ /users/x.json
722
+ EOM
723
+ end
724
+
725
+ it "knife delete --both /data_bags/x fails" do
726
+ knife("delete --both /data_bags/x").should_fail "ERROR: /data_bags/x (local) must be deleted recursively! Pass -r to knife delete.\n"
727
+ knife("list -Rf /").should_succeed server_nothing
728
+ knife("list -Rf --local /").should_succeed everything
729
+ end
730
+
731
+ it "knife delete --both -r /data_bags/x deletes x" do
732
+ knife("delete --both -r /data_bags/x").should_succeed "Deleted /data_bags/x\n"
733
+ knife("list -Rf /").should_succeed server_nothing
734
+ knife("list -Rf --local /").should_succeed <<~EOM
735
+ /clients
736
+ /clients/x.json
737
+ /cookbooks
738
+ /cookbooks/x
739
+ /cookbooks/x/metadata.rb
740
+ /data_bags
741
+ /environments
742
+ /environments/_default.json
743
+ /environments/x.json
744
+ /nodes
745
+ /nodes/x.json
746
+ /roles
747
+ /roles/x.json
748
+ /users
749
+ /users/x.json
750
+ EOM
751
+ end
752
+
753
+ it "knife delete --both /environments/x.json deletes x" do
754
+ knife("delete --both /environments/x.json").should_succeed "Deleted /environments/x.json\n"
755
+ knife("list -Rf /").should_succeed server_nothing
756
+ knife("list -Rf --local /").should_succeed <<~EOM
757
+ /clients
758
+ /clients/x.json
759
+ /cookbooks
760
+ /cookbooks/x
761
+ /cookbooks/x/metadata.rb
762
+ /data_bags
763
+ /data_bags/x
764
+ /data_bags/x/y.json
765
+ /environments
766
+ /environments/_default.json
767
+ /nodes
768
+ /nodes/x.json
769
+ /roles
770
+ /roles/x.json
771
+ /users
772
+ /users/x.json
773
+ EOM
774
+ end
775
+
776
+ it "knife delete --both /roles/x.json deletes x" do
777
+ knife("delete --both /roles/x.json").should_succeed "Deleted /roles/x.json\n"
778
+ knife("list -Rf /").should_succeed server_nothing
779
+ knife("list -Rf --local /").should_succeed <<~EOM
780
+ /clients
781
+ /clients/x.json
782
+ /cookbooks
783
+ /cookbooks/x
784
+ /cookbooks/x/metadata.rb
785
+ /data_bags
786
+ /data_bags/x
787
+ /data_bags/x/y.json
788
+ /environments
789
+ /environments/_default.json
790
+ /environments/x.json
791
+ /nodes
792
+ /nodes/x.json
793
+ /roles
794
+ /users
795
+ /users/x.json
796
+ EOM
797
+ end
798
+
799
+ it "knife delete --both /environments/_default.json fails but still deletes the local copy" do
800
+ 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"
801
+ knife("list -Rf /").should_succeed server_nothing
802
+ knife("list -Rf --local /").should_succeed <<~EOM
803
+ /clients
804
+ /clients/x.json
805
+ /cookbooks
806
+ /cookbooks/x
807
+ /cookbooks/x/metadata.rb
808
+ /data_bags
809
+ /data_bags/x
810
+ /data_bags/x/y.json
811
+ /environments
812
+ /environments/x.json
813
+ /nodes
814
+ /nodes/x.json
815
+ /roles
816
+ /roles/x.json
817
+ /users
818
+ /users/x.json
819
+ EOM
820
+ end
821
+
822
+ it "knife delete --both / fails" do
823
+ knife("delete --both /").should_fail "ERROR: / (remote) cannot be deleted.\nERROR: / (local) cannot be deleted.\n"
824
+ knife("list -Rf /").should_succeed server_nothing
825
+ knife("list -Rf --local /").should_succeed everything
826
+ end
827
+
828
+ it "knife delete --both -r /* fails" do
829
+ knife("delete --both -r /*").should_fail <<~EOM
830
+ ERROR: / (remote) cannot be deleted.
831
+ ERROR: / (local) cannot be deleted.
832
+ ERROR: /clients (remote) cannot be deleted.
833
+ ERROR: /clients (local) cannot be deleted.
834
+ ERROR: /cookbooks (remote) cannot be deleted.
835
+ ERROR: /cookbooks (local) cannot be deleted.
836
+ ERROR: /data_bags (remote) cannot be deleted.
837
+ ERROR: /data_bags (local) cannot be deleted.
838
+ ERROR: /environments (remote) cannot be deleted.
839
+ ERROR: /environments (local) cannot be deleted.
840
+ ERROR: /nodes (remote) cannot be deleted.
841
+ ERROR: /nodes (local) cannot be deleted.
842
+ ERROR: /roles (remote) cannot be deleted.
843
+ ERROR: /roles (local) cannot be deleted.
844
+ ERROR: /users (remote) cannot be deleted.
845
+ ERROR: /users (local) cannot be deleted.
846
+ EOM
847
+ knife("list -Rf /").should_succeed server_nothing
848
+ knife("list -Rf --local /").should_succeed everything
849
+ end
850
+
851
+ it "knife delete --both /environments/nonexistent.json fails" do
852
+ knife("delete --both /environments/nonexistent.json").should_fail "ERROR: /environments/nonexistent.json: No such file or directory\n"
853
+ knife("list -Rf /").should_succeed server_nothing
854
+ knife("list -Rf --local /").should_succeed everything
855
+ end
856
+
857
+ context "and cwd is at the top level" do
858
+ before { cwd "." }
859
+ it "knife delete fails" do
860
+ knife("delete").should_fail "FATAL: You must specify at least one argument. If you want to delete everything in this directory, run \"knife delete --recurse .\"\n", stdout: /USAGE/
861
+ knife("list -Rf /").should_succeed <<~EOM
862
+ clients
863
+ clients/chef-validator.json
864
+ clients/chef-webui.json
865
+ cookbooks
866
+ data_bags
867
+ environments
868
+ environments/_default.json
869
+ nodes
870
+ roles
871
+ users
872
+ users/admin.json
873
+ EOM
874
+ knife("list -Rf --local /").should_succeed <<~EOM
875
+ clients
876
+ clients/x.json
877
+ cookbooks
878
+ cookbooks/x
879
+ cookbooks/x/metadata.rb
880
+ data_bags
881
+ data_bags/x
882
+ data_bags/x/y.json
883
+ environments
884
+ environments/_default.json
885
+ environments/x.json
886
+ nodes
887
+ nodes/x.json
888
+ roles
889
+ roles/x.json
890
+ users
891
+ users/x.json
892
+ EOM
893
+ end
894
+ end
895
+ end
896
+ end
897
+
898
+ when_the_repository "has a cookbook" do
899
+ before do
900
+ file "cookbooks/x/metadata.rb", 'version "1.0.0"'
901
+ file "cookbooks/x/onlyin1.0.0.rb", "old_text"
902
+ end
903
+
904
+ when_the_chef_server "has a later version for the cookbook" do
905
+ before do
906
+ cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
907
+ cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" }
908
+ end
909
+
910
+ # TODO this seems wrong
911
+ it "knife delete --both -r /cookbooks/x deletes the latest version on the server and the local version" do
912
+ knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
913
+ knife("raw /cookbooks/x").should_succeed(/1.0.0/)
914
+ knife("list --local /cookbooks").should_succeed ""
915
+ end
916
+ end
917
+
918
+ when_the_chef_server "has an earlier version for the cookbook" do
919
+ before do
920
+ cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" }
921
+ cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" }
922
+ end
923
+
924
+ it "knife delete --both /cookbooks/x deletes the latest version on the server and the local version" do
925
+ knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
926
+ knife("raw /cookbooks/x").should_succeed(/0.9.9/)
927
+ knife("list --local /cookbooks").should_succeed ""
928
+ end
929
+ end
930
+
931
+ when_the_chef_server "has a later version for the cookbook, and no current version" do
932
+ before { cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" } }
933
+
934
+ it "knife delete --both /cookbooks/x deletes the server and client version of the cookbook" do
935
+ knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
936
+ knife("raw /cookbooks/x").should_fail(/404/)
937
+ knife("list --local /cookbooks").should_succeed ""
938
+ end
939
+ end
940
+
941
+ when_the_chef_server "has an earlier version for the cookbook, and no current version" do
942
+ before { cookbook "x", "0.9.9", { "onlyin0.9.9.rb" => "hi" } }
943
+
944
+ it "knife delete --both /cookbooks/x deletes the server and client version of the cookbook" do
945
+ knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
946
+ knife("raw /cookbooks/x").should_fail(/404/)
947
+ knife("list --local /cookbooks").should_succeed ""
948
+ end
949
+ end
950
+ end
951
+
952
+ when_the_repository "is empty" do
953
+ when_the_chef_server "has two versions of a cookbook" do
954
+ before do
955
+ cookbook "x", "2.0.11"
956
+ cookbook "x", "11.0.0"
957
+ end
958
+
959
+ it "knife delete deletes the latest version" do
960
+ knife("delete --both -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
961
+ knife("raw /cookbooks/x").should_succeed( /2.0.11/ )
962
+ end
963
+ end
964
+ end
965
+
966
+ when_the_chef_server "is in Enterprise mode", osc_compat: false, single_org: false do
967
+ before do
968
+ organization "foo" do
969
+ container "x", {}
970
+ group "x", {}
971
+ policy "x", "1.2.3", {}
972
+ policy_group "x", { "policies" => { "x" => { "revision_id" => "1.2.3" } } }
973
+ end
974
+ end
975
+
976
+ before :each do
977
+ Chef::Config.chef_server_url = URI.join(Chef::Config.chef_server_url, "/organizations/foo")
978
+ end
979
+
980
+ it "knife delete /acls/containers/environments.json fails with a reasonable error" do
981
+ knife("delete /acls/containers/environments.json").should_fail "ERROR: /acls/containers/environments.json (remote) ACLs cannot be deleted.\n"
982
+ end
983
+
984
+ it "knife delete /containers/x.json succeeds" do
985
+ knife("delete /containers/x.json").should_succeed "Deleted /containers/x.json\n"
986
+ knife("raw /containers/x.json").should_fail(/404/)
987
+ end
988
+
989
+ it "knife delete /groups/x.json succeeds" do
990
+ knife("delete /groups/x.json").should_succeed "Deleted /groups/x.json\n"
991
+ knife("raw /groups/x.json").should_fail(/404/)
992
+ end
993
+
994
+ it "knife delete /policies/x-1.2.3.json succeeds" do
995
+ knife("raw /policies/x/revisions/1.2.3").should_succeed "{\n \"policy_group_list\": [\n \"x\"\n ],\n \"name\": \"x\",\n \"revision_id\": \"1.2.3\",\n \"run_list\": [\n\n ],\n \"cookbook_locks\": {\n\n }\n}\n"
996
+ knife("delete /policies/x-1.2.3.json").should_succeed "Deleted /policies/x-1.2.3.json\n"
997
+ knife("raw /policies/x/revisions/1.2.3").should_fail(/404/)
998
+ end
999
+
1000
+ it "knife delete /policy_groups/x.json succeeds" do
1001
+ knife("raw /policy_groups/x").should_succeed "{\n \"uri\": \"http://127.0.0.1:8900/organizations/foo/policy_groups/x\",\n \"policies\": {\n \"x\": {\n \"revision_id\": \"1.2.3\"\n }\n }\n}\n"
1002
+ knife("delete /policy_groups/x.json").should_succeed "Deleted /policy_groups/x.json\n"
1003
+ knife("raw /policy_groups/x").should_fail(/404/)
1004
+ end
1005
+
1006
+ it "knife delete /org.json fails with a reasonable error" do
1007
+ knife("delete /org.json").should_fail "ERROR: /org.json (remote) cannot be deleted.\n"
1008
+ end
1009
+
1010
+ it "knife delete /invitations.json fails with a reasonable error" do
1011
+ knife("delete /invitations.json").should_fail "ERROR: /invitations.json (remote) cannot be deleted.\n"
1012
+ end
1013
+
1014
+ it "knife delete /members.json fails with a reasonable error" do
1015
+ knife("delete /members.json").should_fail "ERROR: /members.json (remote) cannot be deleted.\n"
1016
+ end
1017
+ end
1018
+ end