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
@@ -83,14 +83,15 @@ describe Chef::Formatters::ErrorInspectors::ResourceFailureInspector do
83
83
  @description = Chef::Formatters::ErrorDescription.new("Error Converging Resource:")
84
84
  @template_class = Class.new { include Chef::Mixin::Template }
85
85
  @template = @template_class.new
86
- @context = {:chef => "cool"}
86
+ @context = Chef::Mixin::Template::TemplateContext.new({})
87
+ @context[:chef] = "cool"
87
88
 
88
89
  @resource = template("/tmp/foo.txt") do
89
90
  mode "0644"
90
91
  end
91
92
 
92
93
  @error = begin
93
- @template.render_template("foo\nbar\nbaz\n<%= this_is_not_defined %>\nquin\nqunx\ndunno", @context) {|r| r}
94
+ @context.render_template_from_string("foo\nbar\nbaz\n<%= this_is_not_defined %>\nquin\nqunx\ndunno")
94
95
  rescue Chef::Mixin::Template::TemplateError => e
95
96
  e
96
97
  end
@@ -128,13 +128,65 @@ describe Chef::Knife::Bootstrap do
128
128
  @knife.render_template(template_string).should match /\{\"foo\":\"bar\"\}/
129
129
  end
130
130
 
131
-
132
131
  it "should take the node name from ARGV" do
133
132
  @knife.name_args = ['barf']
134
133
  @knife.name_args.first.should == "barf"
135
134
  end
136
135
 
137
- describe "when configuring the underlying knife ssh command"
136
+ describe "specifying the encrypted data bag secret key" do
137
+ subject(:knife) { described_class.new }
138
+ let(:secret) { "supersekret" }
139
+ let(:secret_file) { File.join(CHEF_SPEC_DATA, 'bootstrap', 'encrypted_data_bag_secret') }
140
+ let(:options) { [] }
141
+ let(:template_file) { File.expand_path(File.join(CHEF_SPEC_DATA, "bootstrap", "secret.erb")) }
142
+ let(:rendered_template) do
143
+ knife.instance_variable_set("@template_file", template_file)
144
+ knife.parse_options(options)
145
+ template_string = knife.read_template
146
+ knife.render_template(template_string)
147
+ end
148
+
149
+ context "via --secret" do
150
+ let(:options){ ["--secret", secret] }
151
+
152
+ it "creates a secret file" do
153
+ rendered_template.should match(%r{#{secret}})
154
+ end
155
+
156
+ it "renders the client.rb with an encrypted_data_bag_secret entry" do
157
+ rendered_template.should match(%r{encrypted_data_bag_secret\s*"/etc/chef/encrypted_data_bag_secret"})
158
+ end
159
+ end
160
+
161
+ context "via --secret-file" do
162
+ let(:options) { ["--secret-file", secret_file] }
163
+ let(:secret) { IO.read(secret_file) }
164
+
165
+ it "creates a secret file" do
166
+ rendered_template.should match(%r{#{secret}})
167
+ end
168
+
169
+ it "renders the client.rb with an encrypted_data_bag_secret entry" do
170
+ rendered_template.should match(%r{encrypted_data_bag_secret\s*"/etc/chef/encrypted_data_bag_secret"})
171
+ end
172
+ end
173
+
174
+ context "via Chef::Config[:encrypted_data_bag_secret]" do
175
+ before(:each) { Chef::Config[:encrypted_data_bag_secret] = secret_file }
176
+ let(:secret) { IO.read(secret_file) }
177
+
178
+ it "creates a secret file" do
179
+ rendered_template.should match(%r{#{secret}})
180
+ end
181
+
182
+ it "renders the client.rb with an encrypted_data_bag_secret entry" do
183
+ rendered_template.should match(%r{encrypted_data_bag_secret\s*"/etc/chef/encrypted_data_bag_secret"})
184
+ end
185
+ after(:each) { Chef::Config.configuration = @original_config }
186
+ end
187
+ end
188
+
189
+ describe "when configuring the underlying knife ssh command" do
138
190
  context "from the command line" do
139
191
  before do
140
192
  @knife.name_args = ["foo.example.com"]
@@ -143,61 +195,96 @@ describe Chef::Knife::Bootstrap do
143
195
  @knife.config[:ssh_password] = "open_sesame"
144
196
  Chef::Config[:knife][:ssh_user] = nil
145
197
  Chef::Config[:knife][:ssh_port] = nil
198
+ @knife.config[:forward_agent] = true
146
199
  @knife.config[:identity_file] = "~/.ssh/me.rsa"
147
200
  @knife.stub!(:read_template).and_return("")
148
201
  @knife_ssh = @knife.knife_ssh
149
202
  end
150
-
203
+
151
204
  it "configures the hostname" do
152
205
  @knife_ssh.name_args.first.should == "foo.example.com"
153
206
  end
154
-
207
+
155
208
  it "configures the ssh user" do
156
209
  @knife_ssh.config[:ssh_user].should == 'rooty'
157
210
  end
158
-
211
+
159
212
  it "configures the ssh password" do
160
213
  @knife_ssh.config[:ssh_password].should == 'open_sesame'
161
214
  end
162
-
215
+
163
216
  it "configures the ssh port" do
164
217
  @knife_ssh.config[:ssh_port].should == '4001'
165
218
  end
166
219
 
220
+ it "configures the ssh agent forwarding" do
221
+ @knife_ssh.config[:forward_agent].should == true
222
+ end
223
+
167
224
  it "configures the ssh identity file" do
168
225
  @knife_ssh.config[:identity_file].should == '~/.ssh/me.rsa'
169
226
  end
170
227
  end
228
+ context "validating use_sudo_password" do
229
+ before do
230
+ @knife.config[:distro] = "ubuntu"
231
+ @knife.config[:ssh_password] = "password"
232
+ @knife.stub(:read_template).and_return(IO.read(@knife.find_template).chomp)
233
+ end
234
+
235
+ it "use_sudo_password contains description and long params for help" do
236
+ @knife.options.should have_key(:use_sudo_password) \
237
+ and @knife.options[:use_sudo_password][:description].to_s.should_not == ''\
238
+ and @knife.options[:use_sudo_password][:long].to_s.should_not == ''
239
+ end
171
240
 
241
+ it "uses the password from --ssh-password for sudo when --use-sudo-password is set" do
242
+ @knife.config[:use_sudo] = true
243
+ @knife.config[:use_sudo_password] = true
244
+ @knife.ssh_command.should include("echo #{@knife.config[:ssh_password]} | sudo -S")
245
+ end
246
+
247
+ it "should not honor --use-sudo-password when --use-sudo is not set" do
248
+ @knife.config[:use_sudo] = false
249
+ @knife.config[:use_sudo_password] = true
250
+ @knife.ssh_command.should_not include("echo #{@knife.config[:ssh_password]} | sudo -S")
251
+ end
252
+ end
172
253
  context "from the knife config file" do
173
254
  before do
174
255
  @knife.name_args = ["config.example.com"]
175
256
  @knife.config[:ssh_user] = nil
176
257
  @knife.config[:ssh_port] = nil
177
258
  @knife.config[:ssh_gateway] = nil
259
+ @knife.config[:forward_agent] = nil
178
260
  @knife.config[:identity_file] = nil
179
261
  @knife.config[:host_key_verify] = nil
180
262
  Chef::Config[:knife][:ssh_user] = "curiosity"
181
263
  Chef::Config[:knife][:ssh_port] = "2430"
264
+ Chef::Config[:knife][:forward_agent] = true
182
265
  Chef::Config[:knife][:identity_file] = "~/.ssh/you.rsa"
183
266
  Chef::Config[:knife][:ssh_gateway] = "towel.blinkenlights.nl"
184
267
  Chef::Config[:knife][:host_key_verify] = true
185
268
  @knife.stub!(:read_template).and_return("")
186
269
  @knife_ssh = @knife.knife_ssh
187
270
  end
188
-
271
+
189
272
  it "configures the ssh user" do
190
273
  @knife_ssh.config[:ssh_user].should == 'curiosity'
191
274
  end
192
-
275
+
193
276
  it "configures the ssh port" do
194
277
  @knife_ssh.config[:ssh_port].should == '2430'
195
278
  end
196
279
 
280
+ it "configures the ssh agent forwarding" do
281
+ @knife_ssh.config[:forward_agent].should == true
282
+ end
283
+
197
284
  it "configures the ssh identity file" do
198
285
  @knife_ssh.config[:identity_file].should == '~/.ssh/you.rsa'
199
286
  end
200
-
287
+
201
288
  it "configures the ssh gateway" do
202
289
  @knife_ssh.config[:ssh_gateway].should == 'towel.blinkenlights.nl'
203
290
  end
@@ -205,29 +292,30 @@ describe Chef::Knife::Bootstrap do
205
292
  it "configures the host key verify mode" do
206
293
  @knife_ssh.config[:host_key_verify].should == true
207
294
  end
208
- end
209
-
210
- describe "when falling back to password auth when host key auth fails" do
211
- before do
212
- @knife.name_args = ["foo.example.com"]
213
- @knife.config[:ssh_user] = "rooty"
214
- @knife.config[:identity_file] = "~/.ssh/me.rsa"
215
- @knife.stub!(:read_template).and_return("")
216
- @knife_ssh = @knife.knife_ssh
217
295
  end
218
296
 
219
- it "prompts the user for a password " do
220
- @knife.stub!(:knife_ssh).and_return(@knife_ssh)
221
- @knife_ssh.stub!(:get_password).and_return('typed_in_password')
222
- alternate_knife_ssh = @knife.knife_ssh_with_password_auth
223
- alternate_knife_ssh.config[:ssh_password].should == 'typed_in_password'
224
- end
297
+ describe "when falling back to password auth when host key auth fails" do
298
+ before do
299
+ @knife.name_args = ["foo.example.com"]
300
+ @knife.config[:ssh_user] = "rooty"
301
+ @knife.config[:identity_file] = "~/.ssh/me.rsa"
302
+ @knife.stub!(:read_template).and_return("")
303
+ @knife_ssh = @knife.knife_ssh
304
+ end
225
305
 
226
- it "configures knife not to use the identity file that didn't work previously" do
227
- @knife.stub!(:knife_ssh).and_return(@knife_ssh)
228
- @knife_ssh.stub!(:get_password).and_return('typed_in_password')
229
- alternate_knife_ssh = @knife.knife_ssh_with_password_auth
230
- alternate_knife_ssh.config[:identity_file].should be_nil
306
+ it "prompts the user for a password " do
307
+ @knife.stub!(:knife_ssh).and_return(@knife_ssh)
308
+ @knife_ssh.stub!(:get_password).and_return('typed_in_password')
309
+ alternate_knife_ssh = @knife.knife_ssh_with_password_auth
310
+ alternate_knife_ssh.config[:ssh_password].should == 'typed_in_password'
311
+ end
312
+
313
+ it "configures knife not to use the identity file that didn't work previously" do
314
+ @knife.stub!(:knife_ssh).and_return(@knife_ssh)
315
+ @knife_ssh.stub!(:get_password).and_return('typed_in_password')
316
+ alternate_knife_ssh = @knife.knife_ssh_with_password_auth
317
+ alternate_knife_ssh.config[:identity_file].should be_nil
318
+ end
231
319
  end
232
320
  end
233
321
 
@@ -262,6 +350,17 @@ describe Chef::Knife::Bootstrap do
262
350
  @knife.run
263
351
  end
264
352
 
353
+ context "Chef::Config[:encrypted_data_bag_secret] is set" do
354
+ let(:secret_file) { File.join(CHEF_SPEC_DATA, 'bootstrap', 'encrypted_data_bag_secret') }
355
+ before { Chef::Config[:encrypted_data_bag_secret] = secret_file }
356
+
357
+ it "warns the configuration option is deprecated" do
358
+ @knife_ssh.should_receive(:run)
359
+ @knife.ui.should_receive(:warn).at_least(3).times
360
+ @knife.run
361
+ end
362
+ end
363
+
265
364
  end
266
365
 
267
366
  end
@@ -21,20 +21,36 @@ describe Chef::Knife::Configure do
21
21
  @err = StringIO.new
22
22
  @knife.ui.stub!(:stderr).and_return(@err)
23
23
 
24
- @ohai = Ohai::System.new
25
- @ohai.stub(:require_plugin)
26
- @ohai[:fqdn] = "foo.example.org"
27
- Ohai::System.stub!(:new).and_return(@ohai)
24
+ Ohai::System.stub!(:new).and_return(ohai)
28
25
  end
29
26
 
30
27
  after do
31
28
  Chef::Config.configuration.replace(@original_config)
32
29
  end
33
30
 
31
+
32
+ let(:fqdn) { "foo.example.org" }
33
+
34
+ let(:ohai) do
35
+ o = {}
36
+ o.stub(:require_plugin)
37
+ o[:fqdn] = fqdn
38
+ o
39
+ end
40
+
41
+ let(:default_admin_key) { "/etc/chef-server/admin.pem" }
42
+ let(:default_admin_key_win32) { File.expand_path(default_admin_key) }
43
+
44
+ let(:default_validator_key) { "/etc/chef-server/chef-validator.pem" }
45
+ let(:default_validator_key_win32) { File.expand_path(default_validator_key) }
46
+
47
+ let(:default_server_url) { "https://#{fqdn}:443" }
48
+
49
+
34
50
  it "asks the user for the URL of the chef server" do
35
51
  @knife.ask_user_for_config
36
- @out.string.should match(Regexp.escape('Please enter the chef server URL: [http://foo.example.org:4000]'))
37
- @knife.chef_server.should == 'http://foo.example.org:4000'
52
+ @out.string.should match(Regexp.escape("Please enter the chef server URL: [#{default_server_url}]"))
53
+ @knife.chef_server.should == default_server_url
38
54
  end
39
55
 
40
56
  it "asks the user for the clientname they want for the new client if -i is specified" do
@@ -85,11 +101,11 @@ describe Chef::Knife::Configure do
85
101
  it "asks the user for the location of the existing admin key if -i is specified" do
86
102
  @knife.config[:initial] = true
87
103
  @knife.ask_user_for_config
88
- @out.string.should match(Regexp.escape("Please enter the location of the existing admin's private key: [/etc/chef/admin.pem]"))
104
+ @out.string.should match(Regexp.escape("Please enter the location of the existing admin's private key: [#{default_admin_key}]"))
89
105
  if windows?
90
- @knife.admin_client_key.should == 'C:/etc/chef/admin.pem'
106
+ @knife.admin_client_key.capitalize.should == default_admin_key_win32.capitalize
91
107
  else
92
- @knife.admin_client_key.should == '/etc/chef/admin.pem'
108
+ @knife.admin_client_key.should == default_admin_key
93
109
  end
94
110
  end
95
111
 
@@ -99,7 +115,7 @@ describe Chef::Knife::Configure do
99
115
  @knife.ask_user_for_config
100
116
  @out.string.should_not match(Regexp.escape("Please enter the location of the existing admin client's private key:"))
101
117
  if windows?
102
- @knife.admin_client_key.should == 'C:/home/you/.chef/my-webui.pem'
118
+ @knife.admin_client_key.should match %r{^[A-Za-z]:/home/you/\.chef/my-webui\.pem$}
103
119
  else
104
120
  @knife.admin_client_key.should == '/home/you/.chef/my-webui.pem'
105
121
  end
@@ -107,11 +123,11 @@ describe Chef::Knife::Configure do
107
123
 
108
124
  it "should not ask the user for the location of the existing admin key if -i is not specified" do
109
125
  @knife.ask_user_for_config
110
- @out.string.should_not match(Regexp.escape("Please enter the location of the existing admin client's private key: [/etc/chef/webui.pem]"))
126
+ @out.string.should_not match(Regexp.escape("Please enter the location of the existing admin client's private key: [#{default_admin_key}]"))
111
127
  if windows?
112
- @knife.admin_client_key.should_not == 'C:/etc//chef/webui.pem'
128
+ @knife.admin_client_key.should_not == default_admin_key_win32
113
129
  else
114
- @knife.admin_client_key.should_not == '/etc/chef/webui.pem'
130
+ @knife.admin_client_key.should_not == default_admin_key
115
131
  end
116
132
  end
117
133
 
@@ -136,11 +152,11 @@ describe Chef::Knife::Configure do
136
152
 
137
153
  it "asks the users for the location of the validation key" do
138
154
  @knife.ask_user_for_config
139
- @out.string.should match(Regexp.escape("Please enter the location of the validation key: [/etc/chef/validation.pem]"))
155
+ @out.string.should match(Regexp.escape("Please enter the location of the validation key: [#{default_validator_key}]"))
140
156
  if windows?
141
- @knife.validation_key.should == 'C:/etc/chef/validation.pem'
157
+ @knife.validation_key.capitalize.should == default_validator_key_win32.capitalize
142
158
  else
143
- @knife.validation_key.should == '/etc/chef/validation.pem'
159
+ @knife.validation_key.should == default_validator_key
144
160
  end
145
161
  end
146
162
 
@@ -149,7 +165,7 @@ describe Chef::Knife::Configure do
149
165
  @knife.ask_user_for_config
150
166
  @out.string.should_not match(Regexp.escape("Please enter the location of the validation key:"))
151
167
  if windows?
152
- @knife.validation_key.should == 'C:/home/you/.chef/my-validation.pem'
168
+ @knife.validation_key.should match %r{^[A-Za-z]:/home/you/\.chef/my-validation\.pem$}
153
169
  else
154
170
  @knife.validation_key.should == '/home/you/.chef/my-validation.pem'
155
171
  end
@@ -174,9 +190,9 @@ describe Chef::Knife::Configure do
174
190
  @knife.chef_server.should == 'http://localhost:5000'
175
191
  @knife.admin_client_name.should == 'my-webui'
176
192
  if windows?
177
- @knife.admin_client_key.should == 'C:/home/you/.chef/my-webui.pem'
178
- @knife.validation_key.should == 'C:/home/you/.chef/my-validation.pem'
179
- @knife.new_client_key.should == 'C:/home/you/a-new-user.pem'
193
+ @knife.admin_client_key.should match %r{^[A-Za-z]:/home/you/\.chef/my-webui\.pem$}
194
+ @knife.validation_key.should match %r{^[A-Za-z]:/home/you/\.chef/my-validation\.pem$}
195
+ @knife.new_client_key.should match %r{^[A-Za-z]:/home/you/a-new-user\.pem$}
180
196
  else
181
197
  @knife.admin_client_key.should == '/home/you/.chef/my-webui.pem'
182
198
  @knife.validation_key.should == '/home/you/.chef/my-validation.pem'
@@ -189,8 +205,8 @@ describe Chef::Knife::Configure do
189
205
  it "writes the new data to a config file" do
190
206
  File.stub!(:expand_path).with("/home/you/.chef/knife.rb").and_return("/home/you/.chef/knife.rb")
191
207
  File.stub!(:expand_path).with("/home/you/.chef/#{Etc.getlogin}.pem").and_return("/home/you/.chef/#{Etc.getlogin}.pem")
192
- File.stub!(:expand_path).with("/etc/chef/validation.pem").and_return("/etc/chef/validation.pem")
193
- File.stub!(:expand_path).with("/etc/chef/webui.pem").and_return("/etc/chef/webui.pem")
208
+ File.stub!(:expand_path).with(default_validator_key).and_return(default_validator_key)
209
+ File.stub!(:expand_path).with(default_admin_key).and_return(default_admin_key)
194
210
  FileUtils.should_receive(:mkdir_p).with("/home/you/.chef")
195
211
  config_file = StringIO.new
196
212
  ::File.should_receive(:open).with("/home/you/.chef/knife.rb", "w").and_yield config_file
@@ -199,16 +215,16 @@ describe Chef::Knife::Configure do
199
215
  config_file.string.should match(/^node_name[\s]+'#{Etc.getlogin}'$/)
200
216
  config_file.string.should match(%r{^client_key[\s]+'/home/you/.chef/#{Etc.getlogin}.pem'$})
201
217
  config_file.string.should match(/^validation_client_name\s+'chef-validator'$/)
202
- config_file.string.should match(%r{^validation_key\s+'/etc/chef/validation.pem'$})
203
- config_file.string.should match(%r{^chef_server_url\s+'http://foo.example.org:4000'$})
218
+ config_file.string.should match(%r{^validation_key\s+'#{default_validator_key}'$})
219
+ config_file.string.should match(%r{^chef_server_url\s+'#{default_server_url}'$})
204
220
  config_file.string.should match(%r{cookbook_path\s+\[ '/home/you/chef-repo/cookbooks' \]})
205
221
  end
206
222
 
207
223
  it "creates a new client when given the --initial option" do
208
224
  File.should_receive(:expand_path).with("/home/you/.chef/knife.rb").and_return("/home/you/.chef/knife.rb")
209
225
  File.should_receive(:expand_path).with("/home/you/.chef/a-new-user.pem").and_return("/home/you/.chef/a-new-user.pem")
210
- File.should_receive(:expand_path).with("/etc/chef/validation.pem").and_return("/etc/chef/validation.pem")
211
- File.should_receive(:expand_path).with("/etc/chef/admin.pem").and_return("/etc/chef/admin.pem")
226
+ File.should_receive(:expand_path).with(default_validator_key).and_return(default_validator_key)
227
+ File.should_receive(:expand_path).with(default_admin_key).and_return(default_admin_key)
212
228
  Chef::Config[:node_name] = "webmonkey.example.com"
213
229
 
214
230
  user_command = Chef::Knife::UserCreate.new
@@ -33,6 +33,13 @@ describe Chef::Knife::CookbookDownload do
33
33
  lambda { @knife.run }.should raise_error(SystemExit)
34
34
  end
35
35
 
36
+ it 'should exit with a fatal error when there is no cookbook on the server' do
37
+ @knife.name_args = ['foobar', nil]
38
+ @knife.should_receive(:determine_version).and_return(nil)
39
+ @knife.ui.should_receive(:fatal).with('No such cookbook found')
40
+ lambda { @knife.run }.should raise_error(SystemExit)
41
+ end
42
+
36
43
  describe 'with a cookbook name' do
37
44
  before(:each) do
38
45
  @knife.name_args = ['foobar']
@@ -136,6 +143,13 @@ describe Chef::Knife::CookbookDownload do
136
143
  end
137
144
 
138
145
  describe 'determine_version' do
146
+
147
+ it 'should return nil if there are no versions' do
148
+ @knife.should_receive(:available_versions).and_return(nil)
149
+ @knife.determine_version.should == nil
150
+ @knife.version.should == nil
151
+ end
152
+
139
153
  it 'should return and set the version if there is only one version' do
140
154
  @knife.should_receive(:available_versions).at_least(:once).and_return(['1.0.0'])
141
155
  @knife.determine_version.should == '1.0.0'
@@ -143,7 +157,7 @@ describe Chef::Knife::CookbookDownload do
143
157
  end
144
158
 
145
159
  it 'should ask which version to download and return it if there is more than one' do
146
- @knife.should_receive(:available_versions).and_return(['1.0.0', '2.0.0'])
160
+ @knife.should_receive(:available_versions).at_least(:once).and_return(['1.0.0', '2.0.0'])
147
161
  @knife.should_receive(:ask_which_version).and_return('1.0.0')
148
162
  @knife.determine_version.should == '1.0.0'
149
163
  end
@@ -152,7 +166,7 @@ describe Chef::Knife::CookbookDownload do
152
166
  it 'should return and set the version to the latest version' do
153
167
  @knife.config[:latest] = true
154
168
  @knife.should_receive(:available_versions).at_least(:once).
155
- and_return(['1.0.0', '2.0.0', '1.1.0'])
169
+ and_return(['1.0.0', '1.1.0', '2.0.0'])
156
170
  @knife.determine_version
157
171
  @knife.version.to_s.should == '2.0.0'
158
172
  end
@@ -164,7 +178,14 @@ describe Chef::Knife::CookbookDownload do
164
178
  @knife.cookbook_name = 'foobar'
165
179
  end
166
180
 
167
- it 'should return the available vesions' do
181
+ it 'should return nil if there are no versions' do
182
+ Chef::CookbookVersion.should_receive(:available_versions).
183
+ with('foobar').
184
+ and_return(nil)
185
+ @knife.available_versions.should == nil
186
+ end
187
+
188
+ it 'should return the available versions' do
168
189
  Chef::CookbookVersion.should_receive(:available_versions).
169
190
  with('foobar').
170
191
  and_return(['1.1.0', '2.0.0', '1.0.0'])