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
@@ -82,7 +82,7 @@ describe Chef::Provider::Git do
82
82
  context "resolving revisions to a SHA" do
83
83
 
84
84
  before do
85
- @git_ls_remote = "git ls-remote git://github.com/opscode/chef.git "
85
+ @git_ls_remote = "git ls-remote \"git://github.com/opscode/chef.git\" "
86
86
  end
87
87
 
88
88
  it "returns resource.revision as is if revision is already a full SHA" do
@@ -91,15 +91,25 @@ describe Chef::Provider::Git do
91
91
 
92
92
  it "converts resource.revision from a tag to a SHA" do
93
93
  @resource.revision "v1.0"
94
- @stdout = "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n"
95
- @provider.should_receive(:shell_out!).with(@git_ls_remote + "v1.0", {:log_tag=>"git[web2.0 app]", :log_level=>:debug}).and_return(mock("ShellOut result", :stdout => @stdout))
94
+ @stdout = ("d03c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n" +
95
+ "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0\n")
96
+ @provider.should_receive(:shell_out!).with(@git_ls_remote + "v1.0*", {:log_tag=>"git[web2.0 app]"}).and_return(mock("ShellOut result", :stdout => @stdout))
96
97
  @provider.target_revision.should eql("503c22a5e41f5ae3193460cca044ed1435029f53")
97
98
  end
98
99
 
100
+ it "converts resource.revision from an annotated tag to the tagged SHA (not SHA of tag)" do
101
+ @resource.revision "v1.0"
102
+ @stdout = ("d03c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n" +
103
+ "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0\n" +
104
+ "663c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0^{}\n")
105
+ @provider.should_receive(:shell_out!).with(@git_ls_remote + "v1.0*", {:log_tag=>"git[web2.0 app]"}).and_return(mock("ShellOut result", :stdout => @stdout))
106
+ @provider.target_revision.should eql("663c22a5e41f5ae3193460cca044ed1435029f53")
107
+ end
108
+
99
109
  it "raises an invalid remote reference error if you try to deploy from ``origin'' and assertions are run" do
100
110
  @resource.revision "origin/"
101
111
  @provider.action = :checkout
102
- @provider.define_resource_requirements
112
+ @provider.define_resource_requirements
103
113
  ::File.stub!(:directory?).with("/my/deploy").and_return(true)
104
114
  lambda {@provider.process_resource_requirements}.should raise_error(Chef::Exceptions::InvalidRemoteGitReference)
105
115
  end
@@ -108,7 +118,7 @@ describe Chef::Provider::Git do
108
118
  @resource.revision "FAIL, that's the revision I want"
109
119
  @provider.action = :checkout
110
120
  @provider.should_receive(:shell_out!).and_return(mock("ShellOut result", :stdout => "\n"))
111
- @provider.define_resource_requirements
121
+ @provider.define_resource_requirements
112
122
  lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::UnresolvableGitReference)
113
123
  end
114
124
 
@@ -118,13 +128,13 @@ describe Chef::Provider::Git do
118
128
  @provider.target_revision.should == nil
119
129
  end
120
130
 
121
- it "does not raise an error when the revision is valid and assertions are run." do
122
- @resource.revision "v1.0"
131
+ it "does not raise an error when the revision is valid and assertions are run." do
132
+ @resource.revision "0.8-alpha"
123
133
  @stdout = "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n"
124
- @provider.should_receive(:shell_out!).with(@git_ls_remote + "v1.0", {:log_tag=>"git[web2.0 app]", :log_level=>:debug}).and_return(mock("ShellOut result", :stdout => @stdout))
134
+ @provider.should_receive(:shell_out!).with(@git_ls_remote + "0.8-alpha*", {:log_tag=>"git[web2.0 app]"}).and_return(mock("ShellOut result", :stdout => @stdout))
125
135
  @provider.action = :checkout
126
136
  ::File.stub!(:directory?).with("/my/deploy").and_return(true)
127
- @provider.define_resource_requirements
137
+ @provider.define_resource_requirements
128
138
  lambda { @provider.process_resource_requirements }.should_not raise_error(RuntimeError)
129
139
  end
130
140
 
@@ -146,7 +156,7 @@ b7d19519a1c15f1c1a324e2683bd728b6198ce5a\trefs/tags/0.7.8^{}
146
156
  ebc1b392fe7e8f0fbabc305c299b4d365d2b4d9b\trefs/tags/chef-server-package
147
157
  SHAS
148
158
  @resource.revision ''
149
- @provider.should_receive(:shell_out!).with(@git_ls_remote, {:log_tag=>"git[web2.0 app]", :log_level=>:debug}).and_return(mock("ShellOut result", :stdout => @stdout))
159
+ @provider.should_receive(:shell_out!).with(@git_ls_remote + "HEAD", {:log_tag=>"git[web2.0 app]"}).and_return(mock("ShellOut result", :stdout => @stdout))
150
160
  @provider.target_revision.should eql("28af684d8460ba4793eda3e7ac238c864a5d029a")
151
161
  end
152
162
  end
@@ -158,9 +168,10 @@ SHAS
158
168
  it "runs a clone command with default git options" do
159
169
  @resource.user "deployNinja"
160
170
  @resource.ssh_wrapper "do_it_this_way.sh"
161
- expected_cmd = "git clone git://github.com/opscode/chef.git /my/deploy/dir"
171
+ expected_cmd = "git clone \"git://github.com/opscode/chef.git\" \"/my/deploy/dir\""
162
172
  @provider.should_receive(:shell_out!).with(expected_cmd, :user => "deployNinja",
163
- :environment =>{"GIT_SSH"=>"do_it_this_way.sh"}, :log_level => :info, :log_tag => "git[web2.0 app]", :live_stream => STDOUT)
173
+ :environment =>{"GIT_SSH"=>"do_it_this_way.sh"},
174
+ :log_tag => "git[web2.0 app]" )
164
175
 
165
176
  @provider.clone
166
177
  end
@@ -169,36 +180,41 @@ SHAS
169
180
  @resource.user "deployNinja"
170
181
  @resource.destination "/Application Support/with/space"
171
182
  @resource.ssh_wrapper "do_it_this_way.sh"
172
- expected_cmd = "git clone git://github.com/opscode/chef.git /Application\\ Support/with/space"
183
+ expected_cmd = "git clone \"git://github.com/opscode/chef.git\" \"/Application Support/with/space\""
173
184
  @provider.should_receive(:shell_out!).with(expected_cmd, :user => "deployNinja",
174
- :environment =>{"GIT_SSH"=>"do_it_this_way.sh"}, :log_level => :info, :log_tag => "git[web2.0 app]", :live_stream => STDOUT)
185
+ :environment =>{"GIT_SSH"=>"do_it_this_way.sh"},
186
+ :log_tag => "git[web2.0 app]")
175
187
  @provider.clone
176
188
  end
177
189
 
178
190
  it "compiles a clone command using --depth for shallow cloning" do
179
191
  @resource.depth 5
180
- expected_cmd = 'git clone --depth 5 git://github.com/opscode/chef.git /my/deploy/dir'
181
- @provider.should_receive(:shell_out!).with(expected_cmd, {:log_level => :info, :log_tag => "git[web2.0 app]", :live_stream => STDOUT})
192
+ expected_cmd = "git clone --depth 5 \"git://github.com/opscode/chef.git\" \"/my/deploy/dir\""
193
+ @provider.should_receive(:shell_out!).with(expected_cmd, :log_tag => "git[web2.0 app]")
182
194
  @provider.clone
183
195
  end
184
196
 
185
197
  it "compiles a clone command with a remote other than ``origin''" do
186
198
  @resource.remote "opscode"
187
- expected_cmd = 'git clone -o opscode git://github.com/opscode/chef.git /my/deploy/dir'
188
- @provider.should_receive(:shell_out!).with(expected_cmd, {:log_level => :info, :log_tag => "git[web2.0 app]", :live_stream => STDOUT})
199
+ expected_cmd = "git clone -o opscode \"git://github.com/opscode/chef.git\" \"/my/deploy/dir\""
200
+ @provider.should_receive(:shell_out!).with(expected_cmd, :log_tag => "git[web2.0 app]")
189
201
  @provider.clone
190
202
  end
191
203
 
192
204
  it "runs a checkout command with default options" do
193
205
  expected_cmd = 'git checkout -b deploy d35af14d41ae22b19da05d7d03a0bafc321b244c'
194
- @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir", :log_level => :debug, :log_tag => "git[web2.0 app]")
206
+ @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
207
+ :log_tag => "git[web2.0 app]")
195
208
  @provider.checkout
196
209
  end
197
210
 
198
211
  it "runs an enable_submodule command" do
199
212
  @resource.enable_submodules true
213
+ expected_cmd = "git submodule sync"
214
+ @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
215
+ :log_tag => "git[web2.0 app]")
200
216
  expected_cmd = "git submodule update --init --recursive"
201
- @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir", :log_level => :info, :log_tag => "git[web2.0 app]", :live_stream => STDOUT)
217
+ @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
202
218
  @provider.enable_submodules
203
219
  end
204
220
 
@@ -208,37 +224,150 @@ SHAS
208
224
  end
209
225
 
210
226
  it "runs a sync command with default options" do
227
+ @provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
211
228
  expected_cmd = "git fetch origin && git fetch origin --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
212
- @provider.should_receive(:shell_out!).with(expected_cmd, :cwd=> "/my/deploy/dir", :log_level => :debug, :log_tag => "git[web2.0 app]")
229
+ @provider.should_receive(:shell_out!).with(expected_cmd, :cwd=> "/my/deploy/dir", :log_tag => "git[web2.0 app]")
213
230
  @provider.fetch_updates
214
231
  end
215
232
 
216
233
  it "runs a sync command with the user and group specified in the resource" do
217
234
  @resource.user("whois")
218
235
  @resource.group("thisis")
236
+ @provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
219
237
  expected_cmd = "git fetch origin && git fetch origin --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
220
238
  @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
221
- :user => "whois", :group => "thisis", :log_level => :debug, :log_tag => "git[web2.0 app]")
239
+ :user => "whois", :group => "thisis", :log_tag => "git[web2.0 app]")
240
+ @provider.fetch_updates
241
+ end
242
+
243
+ it "configures remote tracking branches when remote is ``origin''" do
244
+ @resource.remote "origin"
245
+ @provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
246
+ fetch_command = "git fetch origin && git fetch origin --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
247
+ @provider.should_receive(:shell_out!).with(fetch_command, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
222
248
  @provider.fetch_updates
223
249
  end
224
250
 
225
251
  it "configures remote tracking branches when remote is not ``origin''" do
226
252
  @resource.remote "opscode"
227
- conf_tracking_branches = "git config remote.opscode.url git://github.com/opscode/chef.git && " +
228
- "git config remote.opscode.fetch +refs/heads/*:refs/remotes/opscode/*"
229
- @provider.should_receive(:shell_out!).with(conf_tracking_branches, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]", :log_level => :debug)
253
+ @provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
230
254
  fetch_command = "git fetch opscode && git fetch opscode --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
231
- @provider.should_receive(:shell_out!).with(fetch_command, :cwd => "/my/deploy/dir", :log_level => :debug, :log_tag => "git[web2.0 app]")
255
+ @provider.should_receive(:shell_out!).with(fetch_command, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
232
256
  @provider.fetch_updates
233
257
  end
234
258
 
259
+ context "configuring remote tracking branches" do
260
+
261
+ it "checks if a remote with this name already exists" do
262
+ command_response = double('shell_out')
263
+ command_response.stub(:exitstatus) { 1 }
264
+ expected_command = "git config --get remote.#{@resource.remote}.url"
265
+ @provider.should_receive(:shell_out!).with(expected_command,
266
+ :cwd => "/my/deploy/dir",
267
+ :log_tag => "git[web2.0 app]",
268
+ :returns => [0,1,2]).and_return(command_response)
269
+ add_remote_command = "git remote add #{@resource.remote} #{@resource.repository}"
270
+ @provider.should_receive(:shell_out!).with(add_remote_command,
271
+ :cwd => "/my/deploy/dir",
272
+ :log_tag => "git[web2.0 app]")
273
+ @provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
274
+ end
275
+
276
+ it "runs the config with the user and group specified in the resource" do
277
+ @resource.user("whois")
278
+ @resource.group("thisis")
279
+ command_response = double('shell_out')
280
+ command_response.stub(:exitstatus) { 1 }
281
+ expected_command = "git config --get remote.#{@resource.remote}.url"
282
+ @provider.should_receive(:shell_out!).with(expected_command,
283
+ :cwd => "/my/deploy/dir",
284
+ :log_tag => "git[web2.0 app]",
285
+ :user => "whois",
286
+ :group => "thisis",
287
+ :returns => [0,1,2]).and_return(command_response)
288
+ add_remote_command = "git remote add #{@resource.remote} #{@resource.repository}"
289
+ @provider.should_receive(:shell_out!).with(add_remote_command,
290
+ :cwd => "/my/deploy/dir",
291
+ :log_tag => "git[web2.0 app]",
292
+ :user => "whois",
293
+ :group => "thisis")
294
+ @provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
295
+ end
296
+
297
+ describe "when a remote with a given name hasn't been configured yet" do
298
+ it "adds a new remote " do
299
+ command_response = double('shell_out')
300
+ command_response.stub(:exitstatus) { 1 }
301
+ check_remote_command = "git config --get remote.#{@resource.remote}.url"
302
+ @provider.should_receive(:shell_out!).with(check_remote_command,
303
+ :cwd => "/my/deploy/dir",
304
+ :log_tag => "git[web2.0 app]",
305
+ :returns => [0,1,2]).and_return(command_response)
306
+ expected_command = "git remote add #{@resource.remote} #{@resource.repository}"
307
+ @provider.should_receive(:shell_out!).with(expected_command,
308
+ :cwd => "/my/deploy/dir",
309
+ :log_tag => "git[web2.0 app]")
310
+ @provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
311
+ end
312
+ end
313
+
314
+ describe "when a remote with a given name has already been configured" do
315
+ it "updates remote url when the url is different" do
316
+ command_response = double('shell_out')
317
+ command_response.stub(:exitstatus) { 0 }
318
+ command_response.stub(:stdout) { "some_other_url" }
319
+ check_remote_command = "git config --get remote.#{@resource.remote}.url"
320
+ @provider.should_receive(:shell_out!).with(check_remote_command,
321
+ :cwd => "/my/deploy/dir",
322
+ :log_tag => "git[web2.0 app]",
323
+ :returns => [0,1,2]).and_return(command_response)
324
+ expected_command = "git config --replace-all remote.#{@resource.remote}.url #{@resource.repository}"
325
+ @provider.should_receive(:shell_out!).with(expected_command,
326
+ :cwd => "/my/deploy/dir",
327
+ :log_tag => "git[web2.0 app]")
328
+ @provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
329
+ end
330
+
331
+ it "doesn't update remote url when the url is the same" do
332
+ command_response = double('shell_out')
333
+ command_response.stub(:exitstatus) { 0 }
334
+ command_response.stub(:stdout) { @resource.repository }
335
+ check_remote_command = "git config --get remote.#{@resource.remote}.url"
336
+ @provider.should_receive(:shell_out!).with(check_remote_command,
337
+ :cwd => "/my/deploy/dir",
338
+ :log_tag => "git[web2.0 app]",
339
+ :returns => [0,1,2]).and_return(command_response)
340
+ unexpected_command = "git config --replace-all remote.#{@resource.remote}.url #{@resource.repository}"
341
+ @provider.should_not_receive(:shell_out!).with(unexpected_command,
342
+ :cwd => "/my/deploy/dir",
343
+ :log_tag => "git[web2.0 app]")
344
+ @provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
345
+ end
346
+
347
+ it "resets remote url when it has multiple values" do
348
+ command_response = double('shell_out')
349
+ command_response.stub(:exitstatus) { 2 }
350
+ check_remote_command = "git config --get remote.#{@resource.remote}.url"
351
+ @provider.should_receive(:shell_out!).with(check_remote_command,
352
+ :cwd => "/my/deploy/dir",
353
+ :log_tag => "git[web2.0 app]",
354
+ :returns => [0,1,2]).and_return(command_response)
355
+ expected_command = "git config --replace-all remote.#{@resource.remote}.url #{@resource.repository}"
356
+ @provider.should_receive(:shell_out!).with(expected_command,
357
+ :cwd => "/my/deploy/dir",
358
+ :log_tag => "git[web2.0 app]")
359
+ @provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
360
+ end
361
+ end
362
+ end
363
+
235
364
  it "raises an error if the git clone command would fail because the enclosing directory doesn't exist" do
236
365
  @provider.stub!(:shell_out!)
237
366
  lambda {@provider.run_action(:sync)}.should raise_error(Chef::Exceptions::MissingParentDirectory)
238
367
  end
239
368
 
240
369
  it "does a checkout by cloning the repo and then enabling submodules" do
241
- # will be invoked in load_current_resource
370
+ # will be invoked in load_current_resource
242
371
  ::File.stub!(:exist?).with("/my/deploy/dir/.git").and_return(false)
243
372
 
244
373
  ::File.stub!(:exist?).with("/my/deploy/dir").and_return(true)
@@ -263,12 +392,13 @@ SHAS
263
392
  @provider.should_receive(:clone)
264
393
  @provider.should_receive(:checkout)
265
394
  @provider.should_receive(:enable_submodules)
395
+ @provider.should_receive(:add_remotes)
266
396
  @provider.run_action(:checkout)
267
397
  # @resource.should be_updated
268
398
  end
269
399
 
270
400
  it "should not checkout if the destination exists or is a non empty directory" do
271
- # will be invoked in load_current_resource
401
+ # will be invoked in load_current_resource
272
402
  ::File.stub!(:exist?).with("/my/deploy/dir/.git").and_return(false)
273
403
 
274
404
  ::File.stub!(:exist?).with("/my/deploy/dir").and_return(true)
@@ -277,6 +407,7 @@ SHAS
277
407
  @provider.should_not_receive(:clone)
278
408
  @provider.should_not_receive(:checkout)
279
409
  @provider.should_not_receive(:enable_submodules)
410
+ @provider.should_not_receive(:add_remotes)
280
411
  @provider.run_action(:checkout)
281
412
  @resource.should_not be_updated
282
413
  end
@@ -286,6 +417,7 @@ SHAS
286
417
  ::File.stub!(:directory?).with("/my/deploy").and_return(true)
287
418
  @provider.should_receive(:find_current_revision).exactly(2).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
288
419
  @provider.should_not_receive(:fetch_updates)
420
+ @provider.should_receive(:add_remotes)
289
421
  @provider.run_action(:sync)
290
422
  @resource.should_not be_updated
291
423
  end
@@ -298,6 +430,7 @@ SHAS
298
430
  @provider.stub!(:target_revision).and_return('28af684d8460ba4793eda3e7ac238c864a5d029a')
299
431
  @provider.should_receive(:fetch_updates)
300
432
  @provider.should_receive(:enable_submodules)
433
+ @provider.should_receive(:add_remotes)
301
434
  @provider.run_action(:sync)
302
435
  # @resource.should be_updated
303
436
  end
@@ -308,6 +441,7 @@ SHAS
308
441
  @provider.stub!(:find_current_revision).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
309
442
  @provider.stub!(:target_revision).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
310
443
  @provider.should_not_receive(:fetch_updates)
444
+ @provider.should_receive(:add_remotes)
311
445
  @provider.run_action(:sync)
312
446
  @resource.should_not be_updated
313
447
  end
@@ -339,4 +473,66 @@ SHAS
339
473
  @resource.should be_updated
340
474
  end
341
475
 
476
+ describe "calling add_remotes" do
477
+ it "adds a new remote for each entry in additional remotes hash" do
478
+ @resource.additional_remotes({:opscode => "opscode_repo_url",
479
+ :another_repo => "some_other_repo_url"})
480
+ STDOUT.stub(:tty?).and_return(false)
481
+ command_response = double('shell_out')
482
+ command_response.stub(:exitstatus) { 0 }
483
+ @resource.additional_remotes.each_pair do |remote_name, remote_url|
484
+ @provider.should_receive(:setup_remote_tracking_branches).with(remote_name, remote_url)
485
+ end
486
+ @provider.add_remotes
487
+ end
488
+ end
489
+
490
+ describe "calling multiple_remotes?" do
491
+ before(:each) do
492
+ @command_response = double('shell_out')
493
+ end
494
+
495
+ describe "when check remote command returns with status 2" do
496
+ it "returns true" do
497
+ @command_response.stub(:exitstatus) { 2 }
498
+ @provider.multiple_remotes?(@command_response).should be_true
499
+ end
500
+ end
501
+
502
+ describe "when check remote command returns with status 0" do
503
+ it "returns false" do
504
+ @command_response.stub(:exitstatus) { 0 }
505
+ @provider.multiple_remotes?(@command_response).should be_false
506
+ end
507
+ end
508
+
509
+ describe "when check remote command returns with status 0" do
510
+ it "returns false" do
511
+ @command_response.stub(:exitstatus) { 1 }
512
+ @provider.multiple_remotes?(@command_response).should be_false
513
+ end
514
+ end
515
+ end
516
+
517
+ describe "calling remote_matches?" do
518
+ before(:each) do
519
+ @command_response = double('shell_out')
520
+ end
521
+
522
+ describe "when output of the check remote command matches the repository url" do
523
+ it "returns true" do
524
+ @command_response.stub(:exitstatus) { 0 }
525
+ @command_response.stub(:stdout) { @resource.repository }
526
+ @provider.remote_matches?(@resource.repository, @command_response).should be_true
527
+ end
528
+ end
529
+
530
+ describe "when output of the check remote command doesn't match the repository url" do
531
+ it "returns false" do
532
+ @command_response.stub(:exitstatus) { 0 }
533
+ @command_response.stub(:stdout) { @resource.repository + "test" }
534
+ @provider.remote_matches?(@resource.repository, @command_response).should be_false
535
+ end
536
+ end
537
+ end
342
538
  end
@@ -46,7 +46,9 @@ describe Chef::Provider::Group::Usermod do
46
46
  platforms = {
47
47
  "openbsd" => "-G",
48
48
  "netbsd" => "-G",
49
- "solaris" => "-a -G"
49
+ "solaris" => "-a -G",
50
+ "suse" => "-a -G",
51
+ "smartos" => "-G"
50
52
  }
51
53
 
52
54
  before do
@@ -0,0 +1,89 @@
1
+ #
2
+ # Author:: Xabier de Zuazo (xabier@onddo.com)
3
+ # Copyright:: Copyright (c) 2013 Onddo Labs, SL.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+ require 'chef/exceptions'
21
+
22
+ describe Chef::Provider::Ifconfig::Debian do
23
+ before do
24
+ @node = Chef::Node.new
25
+ @cookbook_collection = Chef::CookbookCollection.new([])
26
+ @events = Chef::EventDispatch::Dispatcher.new
27
+ @run_context = Chef::RunContext.new(@node, @cookbook_collection, @events)
28
+ #This new_resource can be called anything --> it is not the same as in ifconfig.rb
29
+ @new_resource = Chef::Resource::Ifconfig.new("10.0.0.1", @run_context)
30
+ @new_resource.mask "255.255.254.0"
31
+ @new_resource.metric "1"
32
+ @new_resource.mtu "1500"
33
+ @new_resource.device "eth0"
34
+ @provider = Chef::Provider::Ifconfig::Debian.new(@new_resource, @run_context)
35
+ @current_resource = Chef::Resource::Ifconfig.new("10.0.0.1", @run_context)
36
+
37
+ status = mock("Status", :exitstatus => 0)
38
+ @provider.instance_variable_set("@status", status)
39
+ @provider.current_resource = @current_resource
40
+ @provider.stub!(:load_current_resource)
41
+ @provider.stub!(:run_command)
42
+
43
+ @config_filename_ifaces = "/etc/network/interfaces"
44
+ @config_filename_ifcfg = "/etc/network/interfaces.d/ifcfg-#{@new_resource.device}"
45
+ end
46
+
47
+ describe "generate_config for action_add" do
48
+ before do
49
+ @config_file_ifaces = StringIO.new
50
+ @config_file_ifcfg = StringIO.new
51
+ FileUtils.should_receive(:cp)
52
+ File.should_receive(:new).with(@config_filename_ifaces).and_return(StringIO.new)
53
+ File.should_receive(:open).with(@config_filename_ifaces, "w").and_yield(@config_file_ifaces)
54
+ File.should_receive(:new).with(@config_filename_ifcfg, "w").and_return(@config_file_ifcfg)
55
+ File.should_receive(:exist?).with(@config_filename_ifaces).and_return(true)
56
+ end
57
+
58
+ it "should create network-scripts directory" do
59
+ File.should_receive(:directory?).with(File.dirname(@config_filename_ifcfg)).and_return(false)
60
+ Dir.should_receive(:mkdir).with(File.dirname(@config_filename_ifcfg))
61
+ @provider.run_action(:add)
62
+ end
63
+
64
+ it "should write configure network-scripts directory" do
65
+ File.should_receive(:directory?).with(File.dirname(@config_filename_ifcfg)).and_return(true)
66
+ @provider.run_action(:add)
67
+ @config_file_ifaces.string.should match(/^\s*source\s+\/etc\/network\/interfaces[.]d\/[*]\s*$/)
68
+ end
69
+
70
+ it "should write a network-script" do
71
+ File.should_receive(:directory?).with(File.dirname(@config_filename_ifcfg)).and_return(true)
72
+ @provider.run_action(:add)
73
+ @config_file_ifcfg.string.should match(/^iface eth0 inet static\s*$/)
74
+ @config_file_ifcfg.string.should match(/^\s+address 10\.0\.0\.1\s*$/)
75
+ @config_file_ifcfg.string.should match(/^\s+netmask 255\.255\.254\.0\s*$/)
76
+ end
77
+ end
78
+
79
+ describe "delete_config for action_delete" do
80
+
81
+ it "should delete network-script if it exists" do
82
+ @current_resource.device @new_resource.device
83
+ File.should_receive(:exist?).with(@config_filename_ifcfg).and_return(true)
84
+ FileUtils.should_receive(:rm_f).with(@config_filename_ifcfg, :verbose => false)
85
+
86
+ @provider.run_action(:delete)
87
+ end
88
+ end
89
+ end