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,276 @@
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/list'
20
+ require 'chef/knife/show'
21
+
22
+ describe 'General chef_repo file system checks' do
23
+ extend IntegrationSupport
24
+ include KnifeSupport
25
+
26
+ context 'directories and files that should/should not be ignored' do
27
+ when_the_repository "has empty roles, environments and data bag item directories" do
28
+ directory "roles"
29
+ directory "environments"
30
+ directory "data_bags/bag1"
31
+
32
+ it "knife list --local -Rfp / returns them" do
33
+ knife('list --local -Rfp /').should_succeed <<EOM
34
+ /data_bags/
35
+ /data_bags/bag1/
36
+ /environments/
37
+ /roles/
38
+ EOM
39
+ end
40
+ end
41
+
42
+ when_the_repository "has an empty data_bags directory" do
43
+ directory "data_bags"
44
+
45
+ it "knife list --local / returns it" do
46
+ knife('list --local /').should_succeed "/data_bags\n"
47
+ end
48
+ end
49
+
50
+ when_the_repository "has an empty cookbook directory" do
51
+ directory 'cookbooks/cookbook1'
52
+
53
+ it "knife list --local -Rfp / does not return it" do
54
+ knife('list --local -Rfp /').should_succeed(<<EOM, :stderr => "WARN: Cookbook 'cookbook1' is empty or entirely chefignored at #{Chef::Config.chef_repo_path}/cookbooks/cookbook1\n")
55
+ /cookbooks/
56
+ EOM
57
+ end
58
+ end
59
+
60
+ when_the_repository "has only empty cookbook subdirectories" do
61
+ directory 'cookbooks/cookbook1/recipes'
62
+
63
+ it "knife list --local -Rfp / does not return it" do
64
+ knife('list --local -Rfp /').should_succeed(<<EOM, :stderr => "WARN: Cookbook 'cookbook1' is empty or entirely chefignored at #{Chef::Config.chef_repo_path}/cookbooks/cookbook1\n")
65
+ /cookbooks/
66
+ EOM
67
+ end
68
+ end
69
+
70
+ when_the_repository "has empty and non-empty cookbook subdirectories" do
71
+ directory 'cookbooks/cookbook1/recipes'
72
+ file 'cookbooks/cookbook1/templates/default/x.txt', ''
73
+
74
+ it "knife list --local -Rfp / does not return the empty ones" do
75
+ knife('list --local -Rfp /').should_succeed <<EOM
76
+ /cookbooks/
77
+ /cookbooks/cookbook1/
78
+ /cookbooks/cookbook1/templates/
79
+ /cookbooks/cookbook1/templates/default/
80
+ /cookbooks/cookbook1/templates/default/x.txt
81
+ EOM
82
+ end
83
+ end
84
+
85
+ when_the_repository "has only empty cookbook sub-sub-directories" do
86
+ directory 'cookbooks/cookbook1/templates/default'
87
+
88
+ it "knife list --local -Rfp / does not return it" do
89
+ knife('list --local -Rfp /').should_succeed(<<EOM, :stderr => "WARN: Cookbook 'cookbook1' is empty or entirely chefignored at #{Chef::Config.chef_repo_path}/cookbooks/cookbook1\n")
90
+ /cookbooks/
91
+ EOM
92
+ end
93
+ end
94
+
95
+ when_the_repository "has empty cookbook sub-sub-directories alongside non-empty ones" do
96
+ file 'cookbooks/cookbook1/templates/default/x.txt', ''
97
+ directory 'cookbooks/cookbook1/templates/rhel'
98
+ directory 'cookbooks/cookbook1/files/default'
99
+
100
+ it "knife list --local -Rfp / does not return the empty ones" do
101
+ knife('list --local -Rfp /').should_succeed <<EOM
102
+ /cookbooks/
103
+ /cookbooks/cookbook1/
104
+ /cookbooks/cookbook1/templates/
105
+ /cookbooks/cookbook1/templates/default/
106
+ /cookbooks/cookbook1/templates/default/x.txt
107
+ EOM
108
+ end
109
+ end
110
+
111
+ when_the_repository "has an extra schmenvironments directory" do
112
+ directory "schmenvironments" do
113
+ file "_default.json", {}
114
+ end
115
+
116
+ it "knife list --local -Rfp / should NOT return it" do
117
+ knife('list --local -Rfp /').should_succeed ""
118
+ end
119
+ end
120
+
121
+ when_the_repository "has extra subdirectories and files under data bag items, roles, and environments" do
122
+ directory "data_bags/bag1" do
123
+ file "item1.json", {}
124
+ file "item2.xml", ""
125
+ file "another_subdir/item.json", {}
126
+ end
127
+ directory "roles" do
128
+ file "role1.json", {}
129
+ file "role2.xml", ""
130
+ file "subdir/role.json", {}
131
+ end
132
+ directory "environments" do
133
+ file "environment1.json", {}
134
+ file "environment2.xml", ""
135
+ file "subdir/environment.json", {}
136
+ end
137
+
138
+ it "knife list --local -Rfp / should NOT return them" do
139
+ knife('list --local -Rfp /').should_succeed <<EOM
140
+ /data_bags/
141
+ /data_bags/bag1/
142
+ /data_bags/bag1/item1.json
143
+ /environments/
144
+ /environments/environment1.json
145
+ /roles/
146
+ /roles/role1.json
147
+ EOM
148
+ end
149
+ end
150
+
151
+ when_the_repository "has extraneous subdirectories and files under a cookbook" do
152
+ directory 'cookbooks/cookbook1' do
153
+ file 'a.rb', ''
154
+ file 'blarghle/blah.rb', ''
155
+ directory 'attributes' do
156
+ file 'a.rb', ''
157
+ file 'b.json', {}
158
+ file 'c/d.rb', ''
159
+ file 'c/e.json', {}
160
+ end
161
+ directory 'definitions' do
162
+ file 'a.rb', ''
163
+ file 'b.json', {}
164
+ file 'c/d.rb', ''
165
+ file 'c/e.json', {}
166
+ end
167
+ directory 'recipes' do
168
+ file 'a.rb', ''
169
+ file 'b.json', {}
170
+ file 'c/d.rb', ''
171
+ file 'c/e.json', {}
172
+ end
173
+ directory 'libraries' do
174
+ file 'a.rb', ''
175
+ file 'b.json', {}
176
+ file 'c/d.rb', ''
177
+ file 'c/e.json', {}
178
+ end
179
+ directory 'templates' do
180
+ file 'a.rb', ''
181
+ file 'b.json', {}
182
+ file 'c/d.rb', ''
183
+ file 'c/e.json', {}
184
+ end
185
+ directory 'files' do
186
+ file 'a.rb', ''
187
+ file 'b.json', {}
188
+ file 'c/d.rb', ''
189
+ file 'c/e.json', {}
190
+ end
191
+ directory 'resources' do
192
+ file 'a.rb', ''
193
+ file 'b.json', {}
194
+ file 'c/d.rb', ''
195
+ file 'c/e.json', {}
196
+ end
197
+ directory 'providers' do
198
+ file 'a.rb', ''
199
+ file 'b.json', {}
200
+ file 'c/d.rb', ''
201
+ file 'c/e.json', {}
202
+ end
203
+ end
204
+
205
+ it "knife list --local -Rfp / should NOT return them" do
206
+ knife('list --local -Rfp /').should_succeed <<EOM
207
+ /cookbooks/
208
+ /cookbooks/cookbook1/
209
+ /cookbooks/cookbook1/a.rb
210
+ /cookbooks/cookbook1/attributes/
211
+ /cookbooks/cookbook1/attributes/a.rb
212
+ /cookbooks/cookbook1/definitions/
213
+ /cookbooks/cookbook1/definitions/a.rb
214
+ /cookbooks/cookbook1/files/
215
+ /cookbooks/cookbook1/files/a.rb
216
+ /cookbooks/cookbook1/files/b.json
217
+ /cookbooks/cookbook1/files/c/
218
+ /cookbooks/cookbook1/files/c/d.rb
219
+ /cookbooks/cookbook1/files/c/e.json
220
+ /cookbooks/cookbook1/libraries/
221
+ /cookbooks/cookbook1/libraries/a.rb
222
+ /cookbooks/cookbook1/providers/
223
+ /cookbooks/cookbook1/providers/a.rb
224
+ /cookbooks/cookbook1/providers/c/
225
+ /cookbooks/cookbook1/providers/c/d.rb
226
+ /cookbooks/cookbook1/recipes/
227
+ /cookbooks/cookbook1/recipes/a.rb
228
+ /cookbooks/cookbook1/resources/
229
+ /cookbooks/cookbook1/resources/a.rb
230
+ /cookbooks/cookbook1/resources/c/
231
+ /cookbooks/cookbook1/resources/c/d.rb
232
+ /cookbooks/cookbook1/templates/
233
+ /cookbooks/cookbook1/templates/a.rb
234
+ /cookbooks/cookbook1/templates/b.json
235
+ /cookbooks/cookbook1/templates/c/
236
+ /cookbooks/cookbook1/templates/c/d.rb
237
+ /cookbooks/cookbook1/templates/c/e.json
238
+ EOM
239
+ end
240
+ end
241
+
242
+ when_the_repository "has a file in cookbooks/" do
243
+ file 'cookbooks/file', ''
244
+ it 'does not show up in list -Rfp' do
245
+ knife('list --local -Rfp /').should_succeed <<EOM
246
+ /cookbooks/
247
+ EOM
248
+ end
249
+ end
250
+
251
+ when_the_repository "has a file in data_bags/" do
252
+ file 'data_bags/file', ''
253
+ it 'does not show up in list -Rfp' do
254
+ knife('list --local -Rfp /').should_succeed <<EOM
255
+ /data_bags/
256
+ EOM
257
+ end
258
+ end
259
+ end
260
+
261
+ when_the_repository 'has a cookbook starting with .' do
262
+ file 'cookbooks/.svn/metadata.rb', ''
263
+ file 'cookbooks/a.b/metadata.rb', ''
264
+ it 'knife list does not show it' do
265
+ knife('list --local -fp /cookbooks').should_succeed "/cookbooks/a.b/\n"
266
+ end
267
+ end
268
+
269
+ when_the_repository 'has a data bag starting with .' do
270
+ file 'data_bags/.svn/x.json', {}
271
+ file 'data_bags/a.b/x.json', {}
272
+ it 'knife list does not show it' do
273
+ knife('list --local -fp /data_bags').should_succeed "/data_bags/a.b/\n"
274
+ end
275
+ end
276
+ end
@@ -0,0 +1,271 @@
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/list'
20
+ require 'chef/knife/show'
21
+
22
+ describe 'chefignore tests' do
23
+ extend IntegrationSupport
24
+ include KnifeSupport
25
+
26
+ when_the_repository "has lots of stuff in it" do
27
+ file 'roles/x.json', {}
28
+ file 'environments/x.json', {}
29
+ file 'data_bags/bag1/x.json', {}
30
+ file 'cookbooks/cookbook1/x.json', {}
31
+
32
+ context "and has a chefignore everywhere except cookbooks" do
33
+ chefignore = "x.json\nroles/x.json\nenvironments/x.json\ndata_bags/bag1/x.json\nbag1/x.json\ncookbooks/cookbook1/x.json\ncookbook1/x.json\n"
34
+ file 'chefignore', chefignore
35
+ file 'roles/chefignore', chefignore
36
+ file 'environments/chefignore', chefignore
37
+ file 'data_bags/chefignore', chefignore
38
+ file 'data_bags/bag1/chefignore', chefignore
39
+ file 'cookbooks/cookbook1/chefignore', chefignore
40
+
41
+ it 'nothing is ignored' do
42
+ # NOTE: many of the "chefignore" files should probably not show up
43
+ # themselves, but we have other tests that talk about that
44
+ knife('list --local -Rfp /').should_succeed <<EOM
45
+ /cookbooks/
46
+ /cookbooks/cookbook1/
47
+ /cookbooks/cookbook1/chefignore
48
+ /cookbooks/cookbook1/x.json
49
+ /data_bags/
50
+ /data_bags/bag1/
51
+ /data_bags/bag1/x.json
52
+ /environments/
53
+ /environments/x.json
54
+ /roles/
55
+ /roles/x.json
56
+ EOM
57
+ end
58
+ end
59
+ end
60
+
61
+ when_the_repository 'has a cookbook with only chefignored files' do
62
+ file 'cookbooks/cookbook1/templates/default/x.rb', ''
63
+ file 'cookbooks/cookbook1/libraries/x.rb', ''
64
+ file 'cookbooks/chefignore', "libraries/x.rb\ntemplates/default/x.rb\n"
65
+
66
+ it 'the cookbook is not listed' do
67
+ knife('list --local -Rfp /').should_succeed(<<EOM, :stderr => "WARN: Cookbook 'cookbook1' is empty or entirely chefignored at #{Chef::Config.chef_repo_path}/cookbooks/cookbook1\n")
68
+ /cookbooks/
69
+ EOM
70
+ end
71
+ end
72
+
73
+ when_the_repository "has multiple cookbooks" do
74
+ file 'cookbooks/cookbook1/x.json', {}
75
+ file 'cookbooks/cookbook1/y.json', {}
76
+ file 'cookbooks/cookbook2/x.json', {}
77
+ file 'cookbooks/cookbook2/y.json', {}
78
+
79
+ context 'and has a chefignore with filenames' do
80
+ file 'cookbooks/chefignore', "x.json\n"
81
+
82
+ it 'matching files and directories get ignored in all cookbooks' do
83
+ knife('list --local -Rfp /').should_succeed <<EOM
84
+ /cookbooks/
85
+ /cookbooks/cookbook1/
86
+ /cookbooks/cookbook1/y.json
87
+ /cookbooks/cookbook2/
88
+ /cookbooks/cookbook2/y.json
89
+ EOM
90
+ end
91
+ end
92
+
93
+ context "and has a chefignore with wildcards" do
94
+ file 'cookbooks/chefignore', "x.*\n"
95
+ file 'cookbooks/cookbook1/x.rb', ''
96
+
97
+ it 'matching files and directories get ignored in all cookbooks' do
98
+ knife('list --local -Rfp /').should_succeed <<EOM
99
+ /cookbooks/
100
+ /cookbooks/cookbook1/
101
+ /cookbooks/cookbook1/y.json
102
+ /cookbooks/cookbook2/
103
+ /cookbooks/cookbook2/y.json
104
+ EOM
105
+ end
106
+ end
107
+
108
+ context "and has a chefignore with relative paths" do
109
+ file 'cookbooks/cookbook1/recipes/x.rb', ''
110
+ file 'cookbooks/cookbook2/recipes/y.rb', ''
111
+ file 'cookbooks/chefignore', "recipes/x.rb\n"
112
+
113
+ it 'matching directories get ignored' do
114
+ knife('list --local -Rfp /').should_succeed <<EOM
115
+ /cookbooks/
116
+ /cookbooks/cookbook1/
117
+ /cookbooks/cookbook1/x.json
118
+ /cookbooks/cookbook1/y.json
119
+ /cookbooks/cookbook2/
120
+ /cookbooks/cookbook2/recipes/
121
+ /cookbooks/cookbook2/recipes/y.rb
122
+ /cookbooks/cookbook2/x.json
123
+ /cookbooks/cookbook2/y.json
124
+ EOM
125
+ end
126
+ end
127
+
128
+ context "and has a chefignore with subdirectories" do
129
+ file 'cookbooks/cookbook1/recipes/y.rb', ''
130
+ file 'cookbooks/chefignore', "recipes\nrecipes/\n"
131
+
132
+ it 'matching directories do NOT get ignored' do
133
+ knife('list --local -Rfp /').should_succeed <<EOM
134
+ /cookbooks/
135
+ /cookbooks/cookbook1/
136
+ /cookbooks/cookbook1/recipes/
137
+ /cookbooks/cookbook1/recipes/y.rb
138
+ /cookbooks/cookbook1/x.json
139
+ /cookbooks/cookbook1/y.json
140
+ /cookbooks/cookbook2/
141
+ /cookbooks/cookbook2/x.json
142
+ /cookbooks/cookbook2/y.json
143
+ EOM
144
+ end
145
+ end
146
+
147
+ context "and has a chefignore that ignores all files in a subdirectory" do
148
+ file 'cookbooks/cookbook1/templates/default/x.rb', ''
149
+ file 'cookbooks/cookbook1/libraries/x.rb', ''
150
+ file 'cookbooks/chefignore', "libraries/x.rb\ntemplates/default/x.rb\n"
151
+
152
+ it 'ignores the subdirectory entirely' do
153
+ knife('list --local -Rfp /').should_succeed <<EOM
154
+ /cookbooks/
155
+ /cookbooks/cookbook1/
156
+ /cookbooks/cookbook1/x.json
157
+ /cookbooks/cookbook1/y.json
158
+ /cookbooks/cookbook2/
159
+ /cookbooks/cookbook2/x.json
160
+ /cookbooks/cookbook2/y.json
161
+ EOM
162
+ end
163
+ end
164
+
165
+ context "and has an empty chefignore" do
166
+ file 'cookbooks/chefignore', "\n"
167
+
168
+ it 'nothing is ignored' do
169
+ knife('list --local -Rfp /').should_succeed <<EOM
170
+ /cookbooks/
171
+ /cookbooks/cookbook1/
172
+ /cookbooks/cookbook1/x.json
173
+ /cookbooks/cookbook1/y.json
174
+ /cookbooks/cookbook2/
175
+ /cookbooks/cookbook2/x.json
176
+ /cookbooks/cookbook2/y.json
177
+ EOM
178
+ end
179
+ end
180
+
181
+ context "and has a chefignore with comments and empty lines" do
182
+ file 'cookbooks/chefignore', "\n\n # blah\n#\nx.json\n\n"
183
+
184
+ it 'matching files and directories get ignored in all cookbooks' do
185
+ knife('list --local -Rfp /').should_succeed <<EOM
186
+ /cookbooks/
187
+ /cookbooks/cookbook1/
188
+ /cookbooks/cookbook1/y.json
189
+ /cookbooks/cookbook2/
190
+ /cookbooks/cookbook2/y.json
191
+ EOM
192
+ end
193
+ end
194
+ end
195
+
196
+ when_the_repository "has multiple cookbook paths" do
197
+ before :each do
198
+ Chef::Config.cookbook_path = [
199
+ File.join(Chef::Config.chef_repo_path, 'cookbooks1'),
200
+ File.join(Chef::Config.chef_repo_path, 'cookbooks2')
201
+ ]
202
+ end
203
+
204
+ file 'cookbooks1/mycookbook/metadata.rb', ''
205
+ file 'cookbooks1/mycookbook/x.json', {}
206
+ file 'cookbooks2/yourcookbook/metadata.rb', ''
207
+ file 'cookbooks2/yourcookbook/x.json', ''
208
+
209
+ context "and multiple chefignores" do
210
+ file 'cookbooks1/chefignore', "metadata.rb\n"
211
+ file 'cookbooks2/chefignore', "x.json\n"
212
+ it "chefignores apply only to the directories they are in" do
213
+ knife('list --local -Rfp /').should_succeed <<EOM
214
+ /cookbooks/
215
+ /cookbooks/mycookbook/
216
+ /cookbooks/mycookbook/x.json
217
+ /cookbooks/yourcookbook/
218
+ /cookbooks/yourcookbook/metadata.rb
219
+ EOM
220
+ end
221
+
222
+ context "and conflicting cookbooks" do
223
+ file 'cookbooks1/yourcookbook/metadata.rb', ''
224
+ file 'cookbooks1/yourcookbook/x.json', ''
225
+ file 'cookbooks1/yourcookbook/onlyincookbooks1.rb', ''
226
+ file 'cookbooks2/yourcookbook/onlyincookbooks2.rb', ''
227
+
228
+ it "chefignores apply only to the winning cookbook" do
229
+ knife('list --local -Rfp /').should_succeed(<<EOM, :stderr => "WARN: Child with name 'yourcookbook' found in multiple directories: #{Chef::Config.chef_repo_path}/cookbooks1/yourcookbook and #{Chef::Config.chef_repo_path}/cookbooks2/yourcookbook\n")
230
+ /cookbooks/
231
+ /cookbooks/mycookbook/
232
+ /cookbooks/mycookbook/x.json
233
+ /cookbooks/yourcookbook/
234
+ /cookbooks/yourcookbook/onlyincookbooks1.rb
235
+ /cookbooks/yourcookbook/x.json
236
+ EOM
237
+ end
238
+ end
239
+ end
240
+ end
241
+
242
+ when_the_repository 'has a cookbook named chefignore' do
243
+ file 'cookbooks/chefignore/metadata.rb', {}
244
+ it 'knife list -Rfp /cookbooks shows it' do
245
+ knife('list --local -Rfp /cookbooks').should_succeed <<EOM
246
+ /cookbooks/chefignore/
247
+ /cookbooks/chefignore/metadata.rb
248
+ EOM
249
+ end
250
+ end
251
+
252
+ when_the_repository 'has multiple cookbook paths, one with a chefignore file and the other with a cookbook named chefignore' do
253
+ file 'cookbooks1/chefignore', ''
254
+ file 'cookbooks1/blah/metadata.rb', ''
255
+ file 'cookbooks2/chefignore/metadata.rb', ''
256
+ before :each do
257
+ Chef::Config.cookbook_path = [
258
+ File.join(Chef::Config.chef_repo_path, 'cookbooks1'),
259
+ File.join(Chef::Config.chef_repo_path, 'cookbooks2')
260
+ ]
261
+ end
262
+ it 'knife list -Rfp /cookbooks shows the chefignore cookbook' do
263
+ knife('list --local -Rfp /cookbooks').should_succeed <<EOM
264
+ /cookbooks/blah/
265
+ /cookbooks/blah/metadata.rb
266
+ /cookbooks/chefignore/
267
+ /cookbooks/chefignore/metadata.rb
268
+ EOM
269
+ end
270
+ end
271
+ end