chef 11.4.4 → 11.6.0.hotfix.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) hide show
  1. data/README.md +1 -1
  2. data/Rakefile +18 -1
  3. data/bin/chef-service-manager +37 -0
  4. data/distro/common/html/chef-client.8.html +4 -4
  5. data/distro/common/html/chef-expander.8.html +4 -4
  6. data/distro/common/html/chef-expanderctl.8.html +4 -4
  7. data/distro/common/html/chef-server-webui.8.html +4 -4
  8. data/distro/common/html/chef-server.8.html +4 -4
  9. data/distro/common/html/chef-shell.1.html +4 -4
  10. data/distro/common/html/chef-solo.8.html +12 -18
  11. data/distro/common/html/chef-solr.8.html +4 -4
  12. data/distro/common/html/knife-bootstrap.1.html +4 -4
  13. data/distro/common/html/knife-client.1.html +4 -4
  14. data/distro/common/html/knife-configure.1.html +4 -4
  15. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  16. data/distro/common/html/knife-cookbook.1.html +7 -10
  17. data/distro/common/html/knife-data-bag.1.html +7 -10
  18. data/distro/common/html/knife-environment.1.html +6 -8
  19. data/distro/common/html/knife-exec.1.html +4 -4
  20. data/distro/common/html/knife-index.1.html +4 -4
  21. data/distro/common/html/knife-node.1.html +4 -4
  22. data/distro/common/html/knife-role.1.html +4 -4
  23. data/distro/common/html/knife-search.1.html +4 -4
  24. data/distro/common/html/knife-ssh.1.html +4 -4
  25. data/distro/common/html/knife-status.1.html +4 -4
  26. data/distro/common/html/knife-tag.1.html +4 -4
  27. data/distro/common/html/knife.1.html +4 -4
  28. data/distro/common/man/man1/chef-shell.1 +1 -1
  29. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  30. data/distro/common/man/man1/knife-client.1 +1 -1
  31. data/distro/common/man/man1/knife-configure.1 +1 -1
  32. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  33. data/distro/common/man/man1/knife-cookbook.1 +2 -15
  34. data/distro/common/man/man1/knife-data-bag.1 +2 -15
  35. data/distro/common/man/man1/knife-environment.1 +2 -12
  36. data/distro/common/man/man1/knife-exec.1 +1 -1
  37. data/distro/common/man/man1/knife-index.1 +1 -1
  38. data/distro/common/man/man1/knife-node.1 +1 -1
  39. data/distro/common/man/man1/knife-role.1 +1 -1
  40. data/distro/common/man/man1/knife-search.1 +1 -1
  41. data/distro/common/man/man1/knife-ssh.1 +1 -1
  42. data/distro/common/man/man1/knife-status.1 +1 -1
  43. data/distro/common/man/man1/knife-tag.1 +1 -1
  44. data/distro/common/man/man1/knife.1 +1 -1
  45. data/distro/common/man/man8/chef-client.8 +1 -1
  46. data/distro/common/man/man8/chef-expander.8 +1 -1
  47. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  48. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  49. data/distro/common/man/man8/chef-server.8 +1 -1
  50. data/distro/common/man/man8/chef-solo.8 +4 -36
  51. data/distro/common/man/man8/chef-solr.8 +1 -1
  52. data/distro/debian/etc/init.d/chef-client +4 -2
  53. data/distro/windows/service_manager.rb +2 -146
  54. data/lib/chef.rb +1 -1
  55. data/lib/chef/application.rb +5 -12
  56. data/lib/chef/application/apply.rb +2 -0
  57. data/lib/chef/application/client.rb +12 -12
  58. data/lib/chef/application/knife.rb +2 -2
  59. data/lib/chef/application/solo.rb +4 -5
  60. data/lib/chef/application/windows_service.rb +113 -56
  61. data/lib/chef/application/windows_service_manager.rb +179 -0
  62. data/lib/chef/chef_fs.rb +2 -4
  63. data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
  64. data/lib/chef/chef_fs/command_line.rb +145 -93
  65. data/lib/chef/chef_fs/config.rb +205 -0
  66. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
  67. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
  68. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
  69. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
  70. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
  71. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
  72. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
  73. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
  74. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
  75. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
  76. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
  77. data/lib/chef/chef_fs/file_system.rb +195 -127
  78. data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
  79. data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
  80. data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
  81. data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
  82. data/lib/chef/chef_fs/file_system/base_fs_object.rb +98 -39
  83. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
  84. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
  85. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
  86. data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
  87. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +14 -63
  88. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +93 -3
  89. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +35 -9
  90. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +67 -32
  91. data/lib/chef/chef_fs/file_system/cookbook_file.rb +13 -6
  92. data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
  93. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
  94. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +102 -21
  95. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +12 -21
  96. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +14 -8
  97. data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
  98. data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
  99. data/lib/chef/chef_fs/file_system/file_system_entry.rb +8 -8
  100. data/lib/chef/chef_fs/file_system/file_system_error.rb +3 -1
  101. data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
  102. data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
  103. data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
  104. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
  105. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +2 -2
  106. data/lib/chef/chef_fs/file_system/nodes_dir.rb +17 -9
  107. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +0 -4
  108. data/lib/chef/chef_fs/file_system/not_found_error.rb +2 -2
  109. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
  110. data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
  111. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +42 -13
  112. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +81 -27
  113. data/lib/chef/chef_fs/knife.rb +68 -29
  114. data/lib/chef/chef_fs/parallelizer.rb +129 -0
  115. data/lib/chef/chef_fs/path_utils.rb +29 -3
  116. data/lib/chef/chef_fs/raw_request.rb +79 -0
  117. data/lib/chef/client.rb +46 -20
  118. data/lib/chef/config.rb +59 -61
  119. data/lib/chef/cookbook/chefignore.rb +2 -1
  120. data/lib/chef/cookbook/synchronizer.rb +8 -6
  121. data/lib/chef/cookbook/syntax_check.rb +17 -2
  122. data/lib/chef/cookbook_uploader.rb +10 -1
  123. data/lib/chef/cookbook_version.rb +0 -109
  124. data/lib/chef/data_bag.rb +15 -6
  125. data/lib/chef/deprecation/mixin/template.rb +49 -0
  126. data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
  127. data/lib/chef/deprecation/provider/file.rb +197 -0
  128. data/lib/chef/deprecation/provider/remote_file.rb +86 -0
  129. data/lib/chef/deprecation/provider/template.rb +63 -0
  130. data/lib/chef/deprecation/warnings.rb +38 -0
  131. data/lib/chef/encrypted_data_bag_item.rb +153 -61
  132. data/lib/chef/environment.rb +34 -3
  133. data/lib/chef/event_dispatch/base.rb +3 -0
  134. data/lib/chef/exceptions.rb +27 -2
  135. data/lib/chef/file_access_control/unix.rb +64 -7
  136. data/lib/chef/file_access_control/windows.rb +22 -11
  137. data/lib/chef/file_content_management/content_base.rb +56 -0
  138. data/lib/chef/file_content_management/deploy.rb +38 -0
  139. data/lib/chef/file_content_management/deploy/cp.rb +48 -0
  140. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
  141. data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
  142. data/lib/chef/file_content_management/tempfile.rb +61 -0
  143. data/lib/chef/formatters/doc.rb +1 -1
  144. data/lib/chef/formatters/error_descriptor.rb +5 -4
  145. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
  146. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +4 -0
  147. data/lib/chef/json_compat.rb +3 -0
  148. data/lib/chef/knife.rb +12 -3
  149. data/lib/chef/knife/bootstrap.rb +46 -2
  150. data/lib/chef/knife/bootstrap/archlinux-gems.erb +3 -3
  151. data/lib/chef/knife/bootstrap/centos5-gems.erb +3 -3
  152. data/lib/chef/knife/bootstrap/chef-full.erb +4 -4
  153. data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -3
  154. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +3 -3
  155. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +3 -3
  156. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +3 -3
  157. data/lib/chef/knife/client_show.rb +2 -5
  158. data/lib/chef/knife/configure.rb +3 -3
  159. data/lib/chef/knife/cookbook_create.rb +6 -5
  160. data/lib/chef/knife/cookbook_download.rb +13 -5
  161. data/lib/chef/knife/cookbook_site_share.rb +1 -0
  162. data/lib/chef/knife/cookbook_test.rb +1 -0
  163. data/lib/chef/knife/cookbook_upload.rb +4 -9
  164. data/lib/chef/knife/core/bootstrap_context.rb +10 -4
  165. data/lib/chef/knife/core/generic_presenter.rb +16 -0
  166. data/lib/chef/knife/core/node_editor.rb +1 -1
  167. data/lib/chef/knife/core/subcommand_loader.rb +43 -12
  168. data/lib/chef/knife/core/ui.rb +19 -4
  169. data/lib/chef/knife/delete.rb +76 -9
  170. data/lib/chef/knife/deps.rb +139 -0
  171. data/lib/chef/knife/diff.rb +22 -5
  172. data/lib/chef/knife/download.rb +16 -3
  173. data/lib/chef/knife/edit.rb +76 -0
  174. data/lib/chef/knife/environment_show.rb +2 -7
  175. data/lib/chef/knife/list.rb +91 -47
  176. data/lib/chef/knife/node_run_list_set.rb +66 -0
  177. data/lib/chef/knife/node_show.rb +1 -7
  178. data/lib/chef/knife/raw.rb +20 -64
  179. data/lib/chef/knife/role_show.rb +2 -4
  180. data/lib/chef/knife/search.rb +5 -6
  181. data/lib/chef/knife/show.rb +34 -11
  182. data/lib/chef/knife/ssh.rb +8 -0
  183. data/lib/chef/knife/upload.rb +23 -4
  184. data/lib/chef/knife/user_show.rb +2 -5
  185. data/lib/chef/knife/xargs.rb +265 -0
  186. data/lib/chef/log.rb +2 -2
  187. data/lib/chef/mixin/file_class.rb +0 -9
  188. data/lib/chef/mixin/language_include_recipe.rb +1 -1
  189. data/lib/chef/mixin/params_validate.rb +19 -9
  190. data/lib/chef/mixin/template.rb +126 -36
  191. data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
  192. data/lib/chef/monkey_patches/file.rb +26 -0
  193. data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
  194. data/lib/chef/monkey_patches/securerandom.rb +44 -0
  195. data/lib/chef/monologger.rb +93 -0
  196. data/lib/chef/node.rb +4 -0
  197. data/lib/chef/platform.rb +4 -490
  198. data/lib/chef/platform/provider_mapping.rb +529 -0
  199. data/lib/chef/{monkey_patches/dir.rb → platform/query_helpers.rb} +25 -19
  200. data/lib/chef/provider.rb +12 -9
  201. data/lib/chef/provider/batch.rb +35 -0
  202. data/lib/chef/provider/cookbook_file.rb +9 -78
  203. data/lib/chef/provider/cookbook_file/content.rb +49 -0
  204. data/lib/chef/provider/deploy.rb +24 -20
  205. data/lib/chef/provider/deploy/revision.rb +27 -0
  206. data/lib/chef/provider/directory.rb +19 -22
  207. data/lib/chef/provider/execute.rb +22 -5
  208. data/lib/chef/provider/file.rb +299 -217
  209. data/lib/chef/provider/file/content.rb +39 -0
  210. data/lib/chef/provider/git.rb +76 -43
  211. data/lib/chef/provider/group/usermod.rb +2 -2
  212. data/lib/chef/provider/ifconfig.rb +25 -35
  213. data/lib/chef/provider/ifconfig/debian.rb +71 -0
  214. data/lib/chef/provider/ifconfig/redhat.rb +47 -0
  215. data/lib/chef/provider/link.rb +10 -3
  216. data/lib/chef/provider/mount.rb +1 -1
  217. data/lib/chef/provider/mount/mount.rb +8 -3
  218. data/lib/chef/provider/mount/windows.rb +4 -1
  219. data/lib/chef/provider/package/portage.rb +9 -4
  220. data/lib/chef/provider/package/rubygems.rb +45 -10
  221. data/lib/chef/provider/package/smartos.rb +47 -36
  222. data/lib/chef/provider/package/yum.rb +19 -12
  223. data/lib/chef/provider/package/zypper.rb +45 -55
  224. data/lib/chef/provider/powershell_script.rb +77 -0
  225. data/lib/chef/provider/remote_directory.rb +5 -6
  226. data/lib/chef/provider/remote_file.rb +12 -108
  227. data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
  228. data/lib/chef/provider/remote_file/content.rb +75 -0
  229. data/lib/chef/provider/remote_file/fetcher.rb +43 -0
  230. data/lib/chef/provider/remote_file/ftp.rb +183 -0
  231. data/lib/chef/provider/remote_file/http.rb +124 -0
  232. data/lib/chef/provider/remote_file/local_file.rb +47 -0
  233. data/lib/chef/provider/route.rb +6 -2
  234. data/lib/chef/provider/script.rb +14 -2
  235. data/lib/chef/provider/service/macosx.rb +16 -10
  236. data/lib/chef/provider/service/solaris.rb +6 -5
  237. data/lib/chef/provider/template.rb +16 -78
  238. data/lib/chef/provider/template/content.rb +61 -0
  239. data/lib/chef/provider/user/solaris.rb +90 -0
  240. data/lib/chef/provider/user/useradd.rb +76 -63
  241. data/lib/chef/provider/windows_script.rb +73 -0
  242. data/lib/chef/providers.rb +16 -0
  243. data/lib/chef/resource.rb +23 -2
  244. data/lib/chef/resource/batch.rb +31 -0
  245. data/lib/chef/resource/conditional.rb +4 -0
  246. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
  247. data/lib/chef/resource/file.rb +31 -3
  248. data/lib/chef/resource/link.rb +17 -0
  249. data/lib/chef/resource/lwrp_base.rb +1 -1
  250. data/lib/chef/resource/mount.rb +29 -2
  251. data/lib/chef/resource/powershell_script.rb +31 -0
  252. data/lib/chef/resource/remote_file.rb +47 -1
  253. data/lib/chef/resource/route.rb +1 -1
  254. data/lib/chef/resource/template.rb +145 -0
  255. data/lib/chef/resource/windows_script.rb +62 -0
  256. data/lib/chef/resource_collection.rb +45 -11
  257. data/lib/chef/resource_reporter.rb +81 -52
  258. data/lib/chef/resources.rb +2 -0
  259. data/lib/chef/rest.rb +13 -4
  260. data/lib/chef/rest/rest_request.rb +5 -1
  261. data/lib/chef/run_context/cookbook_compiler.rb +3 -3
  262. data/lib/chef/run_list/run_list_expansion.rb +1 -1
  263. data/lib/chef/run_lock.rb +7 -1
  264. data/lib/chef/runner.rb +0 -1
  265. data/lib/chef/scan_access_control.rb +6 -1
  266. data/lib/chef/search/query.rb +2 -2
  267. data/lib/chef/shell/shell_session.rb +2 -2
  268. data/lib/chef/util/backup.rb +84 -0
  269. data/lib/chef/util/diff.rb +145 -0
  270. data/lib/chef/util/file_edit.rb +1 -1
  271. data/lib/chef/util/selinux.rb +100 -0
  272. data/lib/chef/util/windows/net_user.rb +14 -1
  273. data/lib/chef/util/windows/volume.rb +2 -2
  274. data/lib/chef/version.rb +1 -1
  275. data/lib/chef/version/platform.rb +42 -0
  276. data/lib/chef/version_class.rb +1 -1
  277. data/lib/chef/version_constraint.rb +6 -5
  278. data/lib/chef/version_constraint/platform.rb +26 -0
  279. data/lib/chef/win32/api/file.rb +8 -2
  280. data/lib/chef/win32/version.rb +25 -8
  281. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
  282. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
  283. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
  284. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
  285. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
  286. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
  287. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
  288. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
  289. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
  290. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
  291. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
  292. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
  293. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
  294. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
  295. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
  296. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  297. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  298. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
  299. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  300. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  301. data/spec/data/apt/var/www/apt/conf/distributions +7 -0
  302. data/spec/data/apt/var/www/apt/conf/incoming +4 -0
  303. data/spec/data/apt/var/www/apt/conf/pulls +3 -0
  304. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  305. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  306. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  307. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  308. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  309. data/spec/data/apt/var/www/apt/db/version +4 -0
  310. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
  311. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
  312. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  313. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
  314. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  315. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  316. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  317. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
  318. data/spec/data/bootstrap/secret.erb +9 -0
  319. data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
  320. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
  321. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
  322. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
  323. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
  324. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
  325. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
  326. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
  327. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
  328. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
  329. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
  330. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
  331. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
  332. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
  333. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  334. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  335. data/spec/data/knife_subcommand/test_yourself.rb +8 -0
  336. data/spec/data/null_config.rb +1 -0
  337. data/spec/data/partial_one.erb +1 -1
  338. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  339. data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
  340. data/spec/functional/knife/exec_spec.rb +2 -2
  341. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
  342. data/spec/functional/resource/batch_spec.rb +64 -0
  343. data/spec/functional/resource/cookbook_file_spec.rb +2 -3
  344. data/spec/functional/resource/deploy_revision_spec.rb +180 -0
  345. data/spec/functional/resource/directory_spec.rb +2 -2
  346. data/spec/functional/resource/file_spec.rb +17 -1
  347. data/spec/functional/resource/git_spec.rb +259 -0
  348. data/spec/functional/resource/link_spec.rb +422 -388
  349. data/spec/functional/resource/package_spec.rb +297 -0
  350. data/spec/functional/resource/powershell_spec.rb +188 -0
  351. data/spec/functional/resource/registry_spec.rb +8 -4
  352. data/spec/functional/resource/remote_directory_spec.rb +2 -2
  353. data/spec/functional/resource/remote_file_spec.rb +97 -29
  354. data/spec/functional/resource/template_spec.rb +173 -17
  355. data/spec/functional/resource/user_spec.rb +547 -0
  356. data/spec/functional/run_lock_spec.rb +5 -0
  357. data/spec/functional/shell_spec.rb +2 -1
  358. data/spec/functional/win32/service_manager_spec.rb +269 -0
  359. data/spec/functional/win32/versions_spec.rb +78 -0
  360. data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
  361. data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
  362. data/spec/integration/knife/chefignore_spec.rb +271 -0
  363. data/spec/integration/knife/delete_spec.rb +944 -0
  364. data/spec/integration/knife/deps_spec.rb +648 -0
  365. data/spec/integration/knife/diff_spec.rb +536 -0
  366. data/spec/integration/knife/download_spec.rb +962 -0
  367. data/spec/integration/knife/list_spec.rb +633 -0
  368. data/spec/integration/knife/raw_spec.rb +166 -0
  369. data/spec/integration/knife/redirection_spec.rb +57 -0
  370. data/spec/integration/knife/show_spec.rb +158 -0
  371. data/spec/integration/knife/upload_spec.rb +1060 -0
  372. data/spec/integration/solo/solo_spec.rb +41 -0
  373. data/spec/spec_helper.rb +55 -1
  374. data/spec/support/chef_helpers.rb +32 -0
  375. data/spec/support/platform_helpers.rb +40 -0
  376. data/spec/support/platforms/win32/spec_service.rb +59 -0
  377. data/spec/support/shared/functional/directory_resource.rb +43 -16
  378. data/spec/support/shared/functional/file_resource.rb +661 -20
  379. data/spec/support/shared/functional/securable_resource.rb +109 -8
  380. data/spec/support/shared/functional/securable_resource_with_reporting.rb +39 -31
  381. data/spec/support/shared/integration/integration_helper.rb +166 -0
  382. data/spec/support/shared/integration/knife_support.rb +171 -0
  383. data/spec/support/shared/unit/execute_resource.rb +125 -0
  384. data/spec/support/shared/unit/file_system_support.rb +8 -48
  385. data/spec/support/shared/unit/provider/file.rb +609 -0
  386. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
  387. data/spec/support/shared/unit/script_resource.rb +52 -0
  388. data/spec/support/shared/unit/windows_script_resource.rb +48 -0
  389. data/spec/tiny_server.rb +13 -11
  390. data/spec/unit/application/client_spec.rb +39 -1
  391. data/spec/unit/application/knife_spec.rb +12 -0
  392. data/spec/unit/application/solo_spec.rb +1 -1
  393. data/spec/unit/application_spec.rb +57 -2
  394. data/spec/unit/chef_fs/diff_spec.rb +30 -31
  395. data/spec/unit/chef_fs/file_pattern_spec.rb +2 -2
  396. data/spec/unit/chef_fs/file_system_spec.rb +2 -3
  397. data/spec/unit/client_spec.rb +20 -1
  398. data/spec/unit/config_spec.rb +70 -52
  399. data/spec/unit/cookbook/synchronizer_spec.rb +49 -1
  400. data/spec/unit/cookbook/syntax_check_spec.rb +28 -3
  401. data/spec/unit/cookbook_loader_spec.rb +3 -2
  402. data/spec/unit/daemon_spec.rb +7 -7
  403. data/spec/unit/data_bag_spec.rb +7 -0
  404. data/spec/unit/deprecation_spec.rb +86 -0
  405. data/spec/unit/encrypted_data_bag_item_spec.rb +183 -88
  406. data/spec/unit/environment_spec.rb +98 -0
  407. data/spec/unit/exceptions_spec.rb +6 -1
  408. data/spec/unit/file_access_control_spec.rb +21 -1
  409. data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
  410. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
  411. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
  412. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
  413. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -2
  414. data/spec/unit/knife/bootstrap_spec.rb +128 -29
  415. data/spec/unit/knife/configure_spec.rb +42 -26
  416. data/spec/unit/knife/cookbook_download_spec.rb +24 -3
  417. data/spec/unit/knife/cookbook_upload_spec.rb +8 -4
  418. data/spec/unit/knife/core/bootstrap_context_spec.rb +78 -61
  419. data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
  420. data/spec/unit/knife/core/ui_spec.rb +41 -0
  421. data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
  422. data/spec/unit/knife_spec.rb +21 -0
  423. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +1 -0
  424. data/spec/unit/mixin/params_validate_spec.rb +35 -0
  425. data/spec/unit/mixin/template_spec.rb +69 -57
  426. data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
  427. data/spec/unit/node_spec.rb +7 -0
  428. data/spec/unit/platform_spec.rb +15 -1
  429. data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
  430. data/spec/unit/provider/cookbook_file_spec.rb +26 -183
  431. data/spec/unit/provider/cron/solaris_spec.rb +1 -1
  432. data/spec/unit/provider/deploy/revision_spec.rb +19 -11
  433. data/spec/unit/provider/deploy_spec.rb +2 -2
  434. data/spec/unit/provider/directory_spec.rb +23 -23
  435. data/spec/unit/provider/execute_spec.rb +27 -1
  436. data/spec/unit/provider/file/content_spec.rb +101 -0
  437. data/spec/unit/provider/file_spec.rb +25 -484
  438. data/spec/unit/provider/git_spec.rb +224 -28
  439. data/spec/unit/provider/group/usermod_spec.rb +3 -1
  440. data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
  441. data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
  442. data/spec/unit/provider/ifconfig_spec.rb +0 -33
  443. data/spec/unit/provider/mount/mount_spec.rb +33 -2
  444. data/spec/unit/provider/mount/windows_spec.rb +4 -1
  445. data/spec/unit/provider/mount_spec.rb +16 -6
  446. data/spec/unit/provider/package/portage_spec.rb +44 -0
  447. data/spec/unit/provider/package/rubygems_spec.rb +44 -1
  448. data/spec/unit/provider/package/smartos_spec.rb +3 -2
  449. data/spec/unit/provider/package/yum_spec.rb +36 -39
  450. data/spec/unit/provider/package/zypper_spec.rb +84 -22
  451. data/spec/unit/provider/package_spec.rb +0 -4
  452. data/spec/unit/provider/powershell_spec.rb +38 -0
  453. data/spec/unit/provider/remote_directory_spec.rb +0 -4
  454. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
  455. data/spec/unit/provider/remote_file/content_spec.rb +230 -0
  456. data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
  457. data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
  458. data/spec/unit/provider/remote_file/http_spec.rb +319 -0
  459. data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
  460. data/spec/unit/provider/remote_file_spec.rb +33 -295
  461. data/spec/unit/provider/route_spec.rb +25 -9
  462. data/spec/unit/provider/service/macosx_spec.rb +176 -152
  463. data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
  464. data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
  465. data/spec/unit/provider/service/upstart_service_spec.rb +2 -2
  466. data/spec/unit/provider/service_spec.rb +3 -3
  467. data/spec/unit/provider/template/content_spec.rb +78 -0
  468. data/spec/unit/provider/template_spec.rb +52 -184
  469. data/spec/unit/provider/user/solaris_spec.rb +80 -0
  470. data/spec/unit/provider/user/useradd_spec.rb +12 -358
  471. data/spec/unit/resource/batch_spec.rb +48 -0
  472. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
  473. data/spec/unit/resource/execute_spec.rb +3 -101
  474. data/spec/unit/resource/file_spec.rb +0 -5
  475. data/spec/unit/resource/group_spec.rb +9 -0
  476. data/spec/unit/resource/ifconfig_spec.rb +60 -1
  477. data/spec/unit/resource/link_spec.rb +1 -0
  478. data/spec/unit/resource/mount_spec.rb +37 -0
  479. data/spec/unit/resource/powershell_spec.rb +48 -0
  480. data/spec/unit/resource/remote_file_spec.rb +44 -4
  481. data/spec/unit/resource/route_spec.rb +1 -1
  482. data/spec/unit/resource/script_spec.rb +13 -36
  483. data/spec/unit/resource/template_spec.rb +111 -8
  484. data/spec/unit/resource/user_spec.rb +7 -0
  485. data/spec/unit/resource_collection_spec.rb +61 -32
  486. data/spec/unit/resource_reporter_spec.rb +115 -102
  487. data/spec/unit/resource_spec.rb +170 -1
  488. data/spec/unit/rest/auth_credentials_spec.rb +2 -2
  489. data/spec/unit/rest_spec.rb +6 -2
  490. data/spec/unit/run_context/cookbook_compiler_spec.rb +9 -0
  491. data/spec/unit/runner_spec.rb +1 -1
  492. data/spec/unit/scan_access_control_spec.rb +4 -2
  493. data/spec/unit/shell/shell_session_spec.rb +15 -2
  494. data/spec/unit/util/backup_spec.rb +149 -0
  495. data/spec/unit/util/diff_spec.rb +596 -0
  496. data/spec/unit/util/selinux_spec.rb +172 -0
  497. data/spec/unit/version/platform_spec.rb +61 -0
  498. data/spec/unit/version_constraint/platform_spec.rb +46 -0
  499. data/spec/unit/version_constraint_spec.rb +5 -0
  500. metadata +233 -10
  501. data/lib/chef/chef_fs/file_system/data_bag_item.rb +0 -59
  502. data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +0 -237
  503. data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +0 -568
  504. data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +0 -220
@@ -0,0 +1,536 @@
1
+ #
2
+ # Author:: John Keiser (<jkeiser@opscode.com>)
3
+ # Copyright:: Copyright (c) 2013 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require 'support/shared/integration/integration_helper'
19
+ require 'chef/knife/diff'
20
+
21
+ describe 'knife diff' do
22
+ extend IntegrationSupport
23
+ include KnifeSupport
24
+
25
+ context 'without versioned cookbooks' do
26
+ when_the_chef_server "has one of each thing" do
27
+ client 'x', '{}'
28
+ cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' }
29
+ data_bag 'x', { 'y' => '{}' }
30
+ environment 'x', '{}'
31
+ node 'x', '{}'
32
+ role 'x', '{}'
33
+ user 'x', '{}'
34
+
35
+ when_the_repository 'has only top-level directories' do
36
+ directory 'clients'
37
+ directory 'cookbooks'
38
+ directory 'data_bags'
39
+ directory 'environments'
40
+ directory 'nodes'
41
+ directory 'roles'
42
+ directory 'users'
43
+
44
+ it 'knife diff reports everything as deleted' do
45
+ knife('diff --name-status /').should_succeed <<EOM
46
+ D\t/clients/chef-validator.json
47
+ D\t/clients/chef-webui.json
48
+ D\t/clients/x.json
49
+ D\t/cookbooks/x
50
+ D\t/data_bags/x
51
+ D\t/environments/_default.json
52
+ D\t/environments/x.json
53
+ D\t/nodes/x.json
54
+ D\t/roles/x.json
55
+ D\t/users/admin.json
56
+ D\t/users/x.json
57
+ EOM
58
+ end
59
+ end
60
+
61
+ when_the_repository 'has an identical copy of each thing' do
62
+
63
+ file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY }
64
+ file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY }
65
+ file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY }
66
+ file 'cookbooks/x/metadata.rb', 'version "1.0.0"'
67
+ file 'data_bags/x/y.json', {}
68
+ file 'environments/_default.json', { "description" => "The default Chef environment" }
69
+ file 'environments/x.json', {}
70
+ file 'nodes/x.json', {}
71
+ file 'roles/x.json', {}
72
+ file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY }
73
+ file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY }
74
+
75
+ it 'knife diff reports no differences' do
76
+ knife('diff /').should_succeed ''
77
+ end
78
+
79
+ it 'knife diff /environments/nonexistent.json reports an error' do
80
+ knife('diff /environments/nonexistent.json').should_fail "ERROR: /environments/nonexistent.json: No such file or directory on remote or local\n"
81
+ end
82
+
83
+ it 'knife diff /environments/*.txt reports an error' do
84
+ knife('diff /environments/*.txt').should_fail "ERROR: /environments/*.txt: No such file or directory on remote or local\n"
85
+ end
86
+
87
+ context 'except the role file' do
88
+ file 'roles/x.json', <<EOM
89
+ {
90
+ "foo": "bar"
91
+ }
92
+ EOM
93
+ it 'knife diff reports the role as different' do
94
+ knife('diff --name-status /').should_succeed <<EOM
95
+ M\t/roles/x.json
96
+ EOM
97
+ end
98
+ end
99
+
100
+ context 'as well as one extra copy of each thing' do
101
+ file 'clients/y.json', { 'public_key' => ChefZero::PUBLIC_KEY }
102
+ file 'cookbooks/x/blah.rb', ''
103
+ file 'cookbooks/y/metadata.rb', 'version "1.0.0"'
104
+ file 'data_bags/x/z.json', {}
105
+ file 'data_bags/y/zz.json', {}
106
+ file 'environments/y.json', {}
107
+ file 'nodes/y.json', {}
108
+ file 'roles/y.json', {}
109
+ file 'users/y.json', { 'public_key' => ChefZero::PUBLIC_KEY }
110
+
111
+ it 'knife diff reports the new files as added' do
112
+ knife('diff --name-status /').should_succeed <<EOM
113
+ A\t/clients/y.json
114
+ A\t/cookbooks/x/blah.rb
115
+ A\t/cookbooks/y
116
+ A\t/data_bags/x/z.json
117
+ A\t/data_bags/y
118
+ A\t/environments/y.json
119
+ A\t/nodes/y.json
120
+ A\t/roles/y.json
121
+ A\t/users/y.json
122
+ EOM
123
+ end
124
+
125
+ context 'when cwd is the data_bags directory' do
126
+ cwd 'data_bags'
127
+ it 'knife diff reports different data bags' do
128
+ knife('diff --name-status').should_succeed <<EOM
129
+ A\tx/z.json
130
+ A\ty
131
+ EOM
132
+ end
133
+ it 'knife diff * reports different data bags' do
134
+ knife('diff --name-status *').should_succeed <<EOM
135
+ A\tx/z.json
136
+ A\ty
137
+ EOM
138
+ end
139
+ end
140
+ end
141
+ end
142
+
143
+ when_the_repository 'is empty' do
144
+ it 'knife diff reports everything as deleted' do
145
+ knife('diff --name-status /').should_succeed <<EOM
146
+ D\t/clients
147
+ D\t/cookbooks
148
+ D\t/data_bags
149
+ D\t/environments
150
+ D\t/nodes
151
+ D\t/roles
152
+ D\t/users
153
+ EOM
154
+ end
155
+ end
156
+ end
157
+
158
+ when_the_repository 'has a cookbook' do
159
+ file 'cookbooks/x/metadata.rb', 'version "1.0.0"'
160
+ file 'cookbooks/x/onlyin1.0.0.rb', ''
161
+
162
+ when_the_chef_server 'has a later version for the cookbook' do
163
+ cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => ''}
164
+ cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => '' }
165
+
166
+ it 'knife diff /cookbooks/x shows differences' do
167
+ knife('diff --name-status /cookbooks/x').should_succeed <<EOM
168
+ M\t/cookbooks/x/metadata.rb
169
+ D\t/cookbooks/x/onlyin1.0.1.rb
170
+ A\t/cookbooks/x/onlyin1.0.0.rb
171
+ EOM
172
+ end
173
+
174
+ it 'knife diff --diff-filter=MAT does not show deleted files' do
175
+ knife('diff --diff-filter=MAT --name-status /cookbooks/x').should_succeed <<EOM
176
+ M\t/cookbooks/x/metadata.rb
177
+ A\t/cookbooks/x/onlyin1.0.0.rb
178
+ EOM
179
+ end
180
+ end
181
+
182
+ when_the_chef_server 'has an earlier version for the cookbook' do
183
+ cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => '' }
184
+ cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => '' }
185
+ it 'knife diff /cookbooks/x shows no differences' do
186
+ knife('diff --name-status /cookbooks/x').should_succeed ''
187
+ end
188
+ end
189
+
190
+ when_the_chef_server 'has a later version for the cookbook, and no current version' do
191
+ cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => '' }
192
+
193
+ it 'knife diff /cookbooks/x shows the differences' do
194
+ knife('diff --name-status /cookbooks/x').should_succeed <<EOM
195
+ M\t/cookbooks/x/metadata.rb
196
+ D\t/cookbooks/x/onlyin1.0.1.rb
197
+ A\t/cookbooks/x/onlyin1.0.0.rb
198
+ EOM
199
+ end
200
+ end
201
+
202
+ when_the_chef_server 'has an earlier version for the cookbook, and no current version' do
203
+ cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => '' }
204
+
205
+ it 'knife diff /cookbooks/x shows the differences' do
206
+ knife('diff --name-status /cookbooks/x').should_succeed <<EOM
207
+ M\t/cookbooks/x/metadata.rb
208
+ D\t/cookbooks/x/onlyin0.9.9.rb
209
+ A\t/cookbooks/x/onlyin1.0.0.rb
210
+ EOM
211
+ end
212
+ end
213
+ end
214
+
215
+ context 'json diff tests' do
216
+ when_the_repository 'has an empty environment file' do
217
+ file 'environments/x.json', {}
218
+ when_the_chef_server 'has an empty environment' do
219
+ environment 'x', {}
220
+ it 'knife diff returns no differences' do
221
+ knife('diff /environments/x.json').should_succeed ''
222
+ end
223
+ end
224
+ when_the_chef_server 'has an environment with a different value' do
225
+ environment 'x', { 'description' => 'hi' }
226
+ it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do
227
+ knife('diff /environments/x.json').should_succeed(/
228
+ {
229
+ - "name": "x",
230
+ - "description": "hi"
231
+ \+ "name": "x"
232
+ }
233
+ /)
234
+ end
235
+ end
236
+ end
237
+
238
+ when_the_repository 'has an environment file with a value in it' do
239
+ file 'environments/x.json', { 'description' => 'hi' }
240
+ when_the_chef_server 'has an environment with the same value' do
241
+ environment 'x', { 'description' => 'hi' }
242
+ it 'knife diff returns no differences' do
243
+ knife('diff /environments/x.json').should_succeed ''
244
+ end
245
+ end
246
+ when_the_chef_server 'has an environment with no value' do
247
+ environment 'x', {}
248
+ it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do
249
+ knife('diff /environments/x.json').should_succeed(/
250
+ {
251
+ - "name": "x"
252
+ \+ "name": "x",
253
+ \+ "description": "hi"
254
+ }
255
+ /)
256
+ end
257
+ end
258
+ when_the_chef_server 'has an environment with a different value' do
259
+ environment 'x', { 'description' => 'lo' }
260
+ it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do
261
+ knife('diff /environments/x.json').should_succeed(/
262
+ {
263
+ "name": "x",
264
+ - "description": "lo"
265
+ \+ "description": "hi"
266
+ }
267
+ /)
268
+ end
269
+ end
270
+ end
271
+ end
272
+
273
+ when_the_chef_server 'has an environment' do
274
+ environment 'x', {}
275
+ when_the_repository 'has an environment with bad JSON' do
276
+ file 'environments/x.json', '{'
277
+ it 'knife diff reports an error and does a textual diff' do
278
+ knife('diff /environments/x.json').should_succeed(/- "name": "x"/, :stderr => "WARN: Parse error reading #{path_to('environments/x.json')} as JSON: A JSON text must at least contain two octets!\n")
279
+ end
280
+ end
281
+ end
282
+ end # without versioned cookbooks
283
+
284
+ with_versioned_cookbooks do
285
+ when_the_chef_server "has one of each thing" do
286
+ client 'x', '{}'
287
+ cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"' }
288
+ data_bag 'x', { 'y' => '{}' }
289
+ environment 'x', '{}'
290
+ node 'x', '{}'
291
+ role 'x', '{}'
292
+ user 'x', '{}'
293
+
294
+ when_the_repository 'has only top-level directories' do
295
+ directory 'clients'
296
+ directory 'cookbooks'
297
+ directory 'data_bags'
298
+ directory 'environments'
299
+ directory 'nodes'
300
+ directory 'roles'
301
+ directory 'users'
302
+
303
+ it 'knife diff reports everything as deleted' do
304
+ knife('diff --name-status /').should_succeed <<EOM
305
+ D\t/clients/chef-validator.json
306
+ D\t/clients/chef-webui.json
307
+ D\t/clients/x.json
308
+ D\t/cookbooks/x-1.0.0
309
+ D\t/data_bags/x
310
+ D\t/environments/_default.json
311
+ D\t/environments/x.json
312
+ D\t/nodes/x.json
313
+ D\t/roles/x.json
314
+ D\t/users/admin.json
315
+ D\t/users/x.json
316
+ EOM
317
+ end
318
+ end
319
+
320
+ when_the_repository 'has an identical copy of each thing' do
321
+ file 'clients/chef-validator.json', { 'validator' => true, 'public_key' => ChefZero::PUBLIC_KEY }
322
+ file 'clients/chef-webui.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY }
323
+ file 'clients/x.json', { 'public_key' => ChefZero::PUBLIC_KEY }
324
+ file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"'
325
+ file 'data_bags/x/y.json', {}
326
+ file 'environments/_default.json', { "description" => "The default Chef environment" }
327
+ file 'environments/x.json', {}
328
+ file 'nodes/x.json', {}
329
+ file 'roles/x.json', {}
330
+ file 'users/admin.json', { 'admin' => true, 'public_key' => ChefZero::PUBLIC_KEY }
331
+ file 'users/x.json', { 'public_key' => ChefZero::PUBLIC_KEY }
332
+
333
+ it 'knife diff reports no differences' do
334
+ knife('diff /').should_succeed ''
335
+ end
336
+
337
+ it 'knife diff /environments/nonexistent.json reports an error' do
338
+ knife('diff /environments/nonexistent.json').should_fail "ERROR: /environments/nonexistent.json: No such file or directory on remote or local\n"
339
+ end
340
+
341
+ it 'knife diff /environments/*.txt reports an error' do
342
+ knife('diff /environments/*.txt').should_fail "ERROR: /environments/*.txt: No such file or directory on remote or local\n"
343
+ end
344
+
345
+ context 'except the role file' do
346
+ file 'roles/x.json', <<EOM
347
+ {
348
+ "foo": "bar"
349
+ }
350
+ EOM
351
+ it 'knife diff reports the role as different' do
352
+ knife('diff --name-status /').should_succeed <<EOM
353
+ M\t/roles/x.json
354
+ EOM
355
+ end
356
+ end
357
+
358
+ context 'as well as one extra copy of each thing' do
359
+ file 'clients/y.json', {}
360
+ file 'cookbooks/x-1.0.0/blah.rb', ''
361
+ file 'cookbooks/x-2.0.0/metadata.rb', 'version "2.0.0"'
362
+ file 'cookbooks/y-1.0.0/metadata.rb', 'version "1.0.0"'
363
+ file 'data_bags/x/z.json', {}
364
+ file 'data_bags/y/zz.json', {}
365
+ file 'environments/y.json', {}
366
+ file 'nodes/y.json', {}
367
+ file 'roles/y.json', {}
368
+ file 'users/y.json', {}
369
+
370
+ it 'knife diff reports the new files as added' do
371
+ knife('diff --name-status /').should_succeed <<EOM
372
+ A\t/clients/y.json
373
+ A\t/cookbooks/x-1.0.0/blah.rb
374
+ A\t/cookbooks/x-2.0.0
375
+ A\t/cookbooks/y-1.0.0
376
+ A\t/data_bags/x/z.json
377
+ A\t/data_bags/y
378
+ A\t/environments/y.json
379
+ A\t/nodes/y.json
380
+ A\t/roles/y.json
381
+ A\t/users/y.json
382
+ EOM
383
+ end
384
+
385
+ context 'when cwd is the data_bags directory' do
386
+ cwd 'data_bags'
387
+ it 'knife diff reports different data bags' do
388
+ knife('diff --name-status').should_succeed <<EOM
389
+ A\tx/z.json
390
+ A\ty
391
+ EOM
392
+ end
393
+ it 'knife diff * reports different data bags' do
394
+ knife('diff --name-status *').should_succeed <<EOM
395
+ A\tx/z.json
396
+ A\ty
397
+ EOM
398
+ end
399
+ end
400
+ end
401
+ end
402
+
403
+ when_the_repository 'is empty' do
404
+ it 'knife diff reports everything as deleted' do
405
+ knife('diff --name-status /').should_succeed <<EOM
406
+ D\t/clients
407
+ D\t/cookbooks
408
+ D\t/data_bags
409
+ D\t/environments
410
+ D\t/nodes
411
+ D\t/roles
412
+ D\t/users
413
+ EOM
414
+ end
415
+ end
416
+ end
417
+
418
+ when_the_repository 'has a cookbook' do
419
+ file 'cookbooks/x-1.0.0/metadata.rb', 'version "1.0.0"'
420
+ file 'cookbooks/x-1.0.0/onlyin1.0.0.rb', ''
421
+
422
+ when_the_chef_server 'has a later version for the cookbook' do
423
+ cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => ''}
424
+ cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => '' }
425
+
426
+ it 'knife diff /cookbooks shows differences' do
427
+ knife('diff --name-status /cookbooks').should_succeed <<EOM
428
+ D\t/cookbooks/x-1.0.1
429
+ EOM
430
+ end
431
+
432
+ it 'knife diff --diff-filter=MAT does not show deleted files' do
433
+ knife('diff --diff-filter=MAT --name-status /cookbooks').should_succeed ''
434
+ end
435
+ end
436
+
437
+ when_the_chef_server 'has an earlier version for the cookbook' do
438
+ cookbook 'x', '1.0.0', { 'metadata.rb' => 'version "1.0.0"', 'onlyin1.0.0.rb' => '' }
439
+ cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => '' }
440
+ it 'knife diff /cookbooks shows the differences' do
441
+ knife('diff --name-status /cookbooks').should_succeed "D\t/cookbooks/x-0.9.9\n"
442
+ end
443
+ end
444
+
445
+ when_the_chef_server 'has a later version for the cookbook, and no current version' do
446
+ cookbook 'x', '1.0.1', { 'metadata.rb' => 'version "1.0.1"', 'onlyin1.0.1.rb' => '' }
447
+
448
+ it 'knife diff /cookbooks shows the differences' do
449
+ knife('diff --name-status /cookbooks').should_succeed <<EOM
450
+ D\t/cookbooks/x-1.0.1
451
+ A\t/cookbooks/x-1.0.0
452
+ EOM
453
+ end
454
+ end
455
+
456
+ when_the_chef_server 'has an earlier version for the cookbook, and no current version' do
457
+ cookbook 'x', '0.9.9', { 'metadata.rb' => 'version "0.9.9"', 'onlyin0.9.9.rb' => '' }
458
+
459
+ it 'knife diff /cookbooks shows the differences' do
460
+ knife('diff --name-status /cookbooks').should_succeed <<EOM
461
+ D\t/cookbooks/x-0.9.9
462
+ A\t/cookbooks/x-1.0.0
463
+ EOM
464
+ end
465
+ end
466
+ end
467
+
468
+ context 'json diff tests' do
469
+ when_the_repository 'has an empty environment file' do
470
+ file 'environments/x.json', {}
471
+ when_the_chef_server 'has an empty environment' do
472
+ environment 'x', {}
473
+ it 'knife diff returns no differences' do
474
+ knife('diff /environments/x.json').should_succeed ''
475
+ end
476
+ end
477
+ when_the_chef_server 'has an environment with a different value' do
478
+ environment 'x', { 'description' => 'hi' }
479
+ it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do
480
+ knife('diff /environments/x.json').should_succeed(/
481
+ {
482
+ - "name": "x",
483
+ - "description": "hi"
484
+ \+ "name": "x"
485
+ }
486
+ /)
487
+ end
488
+ end
489
+ end
490
+
491
+ when_the_repository 'has an environment file with a value in it' do
492
+ file 'environments/x.json', { 'description' => 'hi' }
493
+ when_the_chef_server 'has an environment with the same value' do
494
+ environment 'x', { 'description' => 'hi' }
495
+ it 'knife diff returns no differences' do
496
+ knife('diff /environments/x.json').should_succeed ''
497
+ end
498
+ end
499
+ when_the_chef_server 'has an environment with no value' do
500
+ environment 'x', {}
501
+ it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do
502
+ knife('diff /environments/x.json').should_succeed(/
503
+ {
504
+ - "name": "x"
505
+ \+ "name": "x",
506
+ \+ "description": "hi"
507
+ }
508
+ /)
509
+ end
510
+ end
511
+ when_the_chef_server 'has an environment with a different value' do
512
+ environment 'x', { 'description' => 'lo' }
513
+ it 'knife diff reports the difference', :pending => (RUBY_VERSION < "1.9") do
514
+ knife('diff /environments/x.json').should_succeed(/
515
+ {
516
+ "name": "x",
517
+ - "description": "lo"
518
+ \+ "description": "hi"
519
+ }
520
+ /)
521
+ end
522
+ end
523
+ end
524
+ end
525
+
526
+ when_the_chef_server 'has an environment' do
527
+ environment 'x', {}
528
+ when_the_repository 'has an environment with bad JSON' do
529
+ file 'environments/x.json', '{'
530
+ it 'knife diff reports an error and does a textual diff' do
531
+ knife('diff /environments/x.json').should_succeed(/- "name": "x"/, :stderr => "WARN: Parse error reading #{path_to('environments/x.json')} as JSON: A JSON text must at least contain two octets!\n")
532
+ end
533
+ end
534
+ end
535
+ end # without versioned cookbooks
536
+ end