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
@@ -42,7 +42,8 @@ describe Chef::Knife::CookbookUpload do
42
42
 
43
43
  describe 'run' do
44
44
  before(:each) do
45
- @knife.stub!(:upload).and_return(true)
45
+ @cookbook_uploader = stub(:upload_cookbooks => nil)
46
+ Chef::CookbookUploader.stub(:new => @cookbook_uploader)
46
47
  Chef::CookbookVersion.stub(:list_all_versions).and_return({})
47
48
  end
48
49
 
@@ -164,8 +165,11 @@ describe Chef::Knife::CookbookUpload do
164
165
 
165
166
  describe 'when a frozen cookbook exists on the server' do
166
167
  it 'should fail to replace it' do
167
- @knife.stub!(:upload).and_raise(Chef::Exceptions::CookbookFrozen)
168
- @knife.ui.should_receive(:error).with(/Failed to upload 1 cookbook/)
168
+ exception = Chef::Exceptions::CookbookFrozen.new
169
+ @cookbook_uploader.should_receive(:upload_cookbooks).
170
+ and_raise(exception)
171
+ @knife.ui.stub(:error)
172
+ @knife.ui.should_receive(:error).with(exception)
169
173
  lambda { @knife.run }.should raise_error(SystemExit)
170
174
  end
171
175
 
@@ -180,4 +184,4 @@ describe Chef::Knife::CookbookUpload do
180
184
  end
181
185
  end
182
186
  end # run
183
- end # Chef::Knife::CookbookUpload
187
+ end
@@ -20,47 +20,29 @@ require 'spec_helper'
20
20
  require 'chef/knife/core/bootstrap_context'
21
21
 
22
22
  describe Chef::Knife::Core::BootstrapContext do
23
- before do
24
- @config = {:foo => :bar}
25
- @run_list = Chef::RunList.new('recipe[tmux]', 'role[base]')
26
- @chef_config = {:validation_key => File.join(CHEF_SPEC_DATA, 'ssl', 'private_key.pem')}
27
- @chef_config[:chef_server_url] = 'http://chef.example.com:4444'
28
- @chef_config[:validation_client_name] = 'chef-validator-testing'
29
- @context = Chef::Knife::Core::BootstrapContext.new(@config, @run_list, @chef_config)
23
+ let(:config) { {:foo => :bar} }
24
+ let(:run_list) { Chef::RunList.new('recipe[tmux]', 'role[base]') }
25
+ let(:chef_config) do
26
+ {
27
+ :validation_key => File.join(CHEF_SPEC_DATA, 'ssl', 'private_key.pem'),
28
+ :chef_server_url => 'http://chef.example.com:4444',
29
+ :validation_client_name => 'chef-validator-testing'
30
+ }
30
31
  end
32
+ let(:secret_file) { File.join(CHEF_SPEC_DATA, 'bootstrap', 'encrypted_data_bag_secret') }
31
33
 
32
- describe "to support compatability with existing templates" do
33
- it "sets the @config instance variable" do
34
- @context.instance_eval { @config }.should == {:foo => :bar}
35
- end
36
-
37
- it "sets the @run_list instance variable" do
38
- @context.instance_eval { @run_list }.should equal(@run_list)
39
- end
40
- end
34
+ subject(:bootstrap_context) { described_class.new(config, run_list, chef_config) }
41
35
 
42
36
  it "installs the same version of chef on the remote host" do
43
- @context.bootstrap_version_string.should == "--version #{Chef::VERSION}"
37
+ bootstrap_context.bootstrap_version_string.should eq "--version #{Chef::VERSION}"
44
38
  end
45
39
 
46
40
  it "runs chef with the first-boot.json in the _default environment" do
47
- @context.start_chef.should == "chef-client -j /etc/chef/first-boot.json -E _default"
48
- end
49
-
50
- it "it runs chef-client from another path when specified" do
51
- @chef_config[:chef_client_path] = '/usr/local/bin/chef-client'
52
- @context.start_chef.should == "/usr/local/bin/chef-client -j /etc/chef/first-boot.json -E _default"
41
+ bootstrap_context.start_chef.should eq "chef-client -j /etc/chef/first-boot.json -E _default"
53
42
  end
54
43
 
55
44
  it "reads the validation key" do
56
- @context.validation_key.should == IO.read(File.join(CHEF_SPEC_DATA, 'ssl', 'private_key.pem'))
57
- end
58
-
59
- it "reads the validation key when it contains a ~" do
60
- IO.should_receive(:read).with(File.expand_path("my.key", ENV['HOME']))
61
- @chef_config = {:validation_key => '~/my.key'}
62
- @context = Chef::Knife::Core::BootstrapContext.new(@config, @run_list, @chef_config)
63
- @context.validation_key
45
+ bootstrap_context.validation_key.should eq IO.read(File.join(CHEF_SPEC_DATA, 'ssl', 'private_key.pem'))
64
46
  end
65
47
 
66
48
  it "generates the config file data" do
@@ -71,65 +53,100 @@ chef_server_url "http://chef.example.com:4444"
71
53
  validation_client_name "chef-validator-testing"
72
54
  # Using default node name (fqdn)
73
55
  EXPECTED
74
- @context.config_content.should == expected
56
+ bootstrap_context.config_content.should eq expected
75
57
  end
76
58
 
77
- describe "when an explicit node name is given" do
78
- before do
79
- @config[:chef_node_name] = 'foobar.example.com'
59
+ describe "alternate chef-client path" do
60
+ let(:chef_config){ {:chef_client_path => '/usr/local/bin/chef-client'} }
61
+ it "runs chef-client from another path when specified" do
62
+ bootstrap_context.start_chef.should eq "/usr/local/bin/chef-client -j /etc/chef/first-boot.json -E _default"
80
63
  end
81
- it "sets the node name in the client.rb" do
82
- @context.config_content.should match(/node_name "foobar\.example\.com"/)
64
+ end
65
+
66
+ describe "validation key path that contains a ~" do
67
+ let(:chef_config){ {:validation_key => '~/my.key'} }
68
+ it "reads the validation key when it contains a ~" do
69
+ IO.should_receive(:read).with(File.expand_path("my.key", ENV['HOME']))
70
+ bootstrap_context.validation_key
83
71
  end
84
72
  end
85
73
 
86
- describe "when bootstrapping into a specific environment" do
87
- before do
88
- @chef_config[:environment] = "prodtastic"
74
+ describe "when an explicit node name is given" do
75
+ let(:config){ {:chef_node_name => 'foobar.example.com' }}
76
+ it "sets the node name in the client.rb" do
77
+ bootstrap_context.config_content.should match(/node_name "foobar\.example\.com"/)
89
78
  end
79
+ end
90
80
 
81
+ describe "when bootstrapping into a specific environment" do
82
+ let(:chef_config){ {:environment => "prodtastic"} }
91
83
  it "starts chef in the configured environment" do
92
- @context.start_chef.should == 'chef-client -j /etc/chef/first-boot.json -E prodtastic'
84
+ bootstrap_context.start_chef.should == 'chef-client -j /etc/chef/first-boot.json -E prodtastic'
93
85
  end
94
86
  end
95
87
 
96
88
  describe "when installing a prerelease version of chef" do
97
- before do
98
- @config[:prerelease] = true
99
- end
89
+ let(:config){ {:prerelease => true }}
100
90
  it "supplies --prerelease as the version string" do
101
- @context.bootstrap_version_string.should == '--prerelease'
91
+ bootstrap_context.bootstrap_version_string.should eq '--prerelease'
102
92
  end
103
93
  end
104
94
 
105
95
  describe "when installing an explicit version of chef" do
106
- before do
107
- @context = Chef::Knife::Core::BootstrapContext.new(@config, @run_list, :knife => { :bootstrap_version => '123.45.678' })
96
+ let(:chef_config) do
97
+ {
98
+ :knife => { :bootstrap_version => '123.45.678' }
99
+ }
108
100
  end
109
-
110
101
  it "gives --version $VERSION as the version string" do
111
- @context.bootstrap_version_string.should == '--version 123.45.678'
102
+ bootstrap_context.bootstrap_version_string.should eq '--version 123.45.678'
112
103
  end
113
104
  end
114
-
115
- describe "when JSON attributes are given" do
116
- before do
117
- conf = @config.dup
118
- conf[:first_boot_attributes] = {:baz => :quux}
119
- @context = Chef::Knife::Core::BootstrapContext.new(conf, @run_list, @chef_config)
120
- end
121
105
 
106
+ describe "when JSON attributes are given" do
107
+ let(:config) { {:first_boot_attributes => {:baz => :quux}} }
122
108
  it "adds the attributes to first_boot" do
123
- @context.first_boot.to_json.should == {:baz => :quux, :run_list => @run_list}.to_json
109
+ bootstrap_context.first_boot.to_json.should eq({:baz => :quux, :run_list => run_list}.to_json)
124
110
  end
125
111
  end
126
-
112
+
127
113
  describe "when JSON attributes are NOT given" do
128
114
  it "sets first_boot equal to run_list" do
129
- @context.first_boot.to_json.should == {:run_list => @run_list}.to_json
115
+ bootstrap_context.first_boot.to_json.should eq({:run_list => run_list}.to_json)
116
+ end
117
+ end
118
+
119
+ describe "when an encrypted_data_bag_secret is provided" do
120
+ context "via config[:secret]" do
121
+ let(:config){ {:secret => "supersekret" }}
122
+ it "reads the encrypted_data_bag_secret" do
123
+ bootstrap_context.encrypted_data_bag_secret.should eq "supersekret"
124
+ end
125
+ end
126
+
127
+ context "via config[:secret_file]" do
128
+ let(:config){ {:secret_file => secret_file}}
129
+ it "reads the encrypted_data_bag_secret" do
130
+ bootstrap_context.encrypted_data_bag_secret.should eq IO.read(secret_file)
131
+ end
132
+ end
133
+ end
134
+
135
+ describe "to support compatibility with existing templates" do
136
+ it "sets the @config instance variable" do
137
+ bootstrap_context.instance_variable_get(:@config).should eq config
138
+ end
139
+
140
+ it "sets the @run_list instance variable" do
141
+ bootstrap_context.instance_variable_get(:@run_list).should eq run_list
142
+ end
143
+
144
+ describe "accepts encrypted_data_bag_secret via Chef::Config" do
145
+ let(:chef_config) { {:encrypted_data_bag_secret => secret_file }}
146
+ it "reads the encrypted_data_bag_secret" do
147
+ bootstrap_context.encrypted_data_bag_secret.should eq IO.read(secret_file)
148
+ end
130
149
  end
131
150
  end
132
-
133
-
134
151
  end
135
152
 
@@ -37,6 +37,26 @@ describe Chef::Knife::SubcommandLoader do
37
37
  @loader.find_subcommands_via_rubygems.each {|rel_path, abs_path| abs_path.should match(%r[chef/knife/.+])}
38
38
  end
39
39
 
40
+ it "finds files from latest version of installed gems" do
41
+ gems = [ double('knife-ec2-0.5.12') ]
42
+ gem_files = [
43
+ '/usr/lib/ruby/gems/knife-ec2-0.5.12/lib/chef/knife/ec2_base.rb',
44
+ '/usr/lib/ruby/gems/knife-ec2-0.5.12/lib/chef/knife/ec2_otherstuff.rb'
45
+ ]
46
+ $LOAD_PATH.should_receive(:map).and_return([])
47
+ if Gem::Specification.respond_to? :latest_specs
48
+ Gem::Specification.should_receive(:latest_specs).and_return(gems)
49
+ gems[0].should_receive(:matches_for_glob).with(/chef\/knife\/\*\.rb{(.*),\.rb,(.*)}/).and_return(gem_files)
50
+ else
51
+ Gem.source_index.should_receive(:latest_specs).and_return(gems)
52
+ gems[0].should_receive(:require_paths).twice.and_return(['lib'])
53
+ gems[0].should_receive(:full_gem_path).and_return('/usr/lib/ruby/gems/knife-ec2-0.5.12')
54
+ Dir.should_receive(:[]).with('/usr/lib/ruby/gems/knife-ec2-0.5.12/lib/chef/knife/*.rb').and_return(gem_files)
55
+ end
56
+ @loader.should_receive(:find_subcommands_via_dirglob).and_return({})
57
+ @loader.find_subcommands_via_rubygems.values.select { |file| file =~ /knife-ec2/ }.sort.should == gem_files
58
+ end
59
+
40
60
  it "finds files using a dirglob when rubygems is not available" do
41
61
  @loader.find_subcommands_via_dirglob.should include('chef/knife/node_create')
42
62
  @loader.find_subcommands_via_dirglob.each {|rel_path, abs_path| abs_path.should match(%r[chef/knife/.+])}
@@ -40,7 +40,30 @@ describe Chef::Knife::UI do
40
40
  end
41
41
  end
42
42
 
43
+ shared_examples "an output mehthod handling IO exceptions" do |method|
44
+ it "should throw Errno::EIO exceptions" do
45
+ @out.stub(:puts).and_raise(Errno::EIO)
46
+ @err.stub(:puts).and_raise(Errno::EIO)
47
+ lambda {@ui.send(method, "hi")}.should raise_error(Errno::EIO)
48
+ end
49
+
50
+ it "should ignore Errno::EPIPE exceptions (CHEF-3516)" do
51
+ @out.stub(:puts).and_raise(Errno::EPIPE)
52
+ @err.stub(:puts).and_raise(Errno::EPIPE)
53
+ lambda {@ui.send(method, "hi")}.should_not raise_error(Errno::EPIPE)
54
+ end
55
+
56
+ it "should throw Errno::EPIPE exceptions with -VV (CHEF-3516)" do
57
+ @config[:verbosity] = 2
58
+ @out.stub(:puts).and_raise(Errno::EPIPE)
59
+ @err.stub(:puts).and_raise(Errno::EPIPE)
60
+ lambda {@ui.send(method, "hi")}.should raise_error(Errno::EPIPE)
61
+ end
62
+ end
63
+
43
64
  describe "output" do
65
+ it_behaves_like "an output mehthod handling IO exceptions", :output
66
+
44
67
  it "formats strings appropriately" do
45
68
  @ui.output("hi")
46
69
  @out.string.should == "hi\n"
@@ -187,6 +210,18 @@ EOM
187
210
  end
188
211
  end
189
212
 
213
+ describe "warn" do
214
+ it_behaves_like "an output mehthod handling IO exceptions", :warn
215
+ end
216
+
217
+ describe "error" do
218
+ it_behaves_like "an output mehthod handling IO exceptions", :warn
219
+ end
220
+
221
+ describe "fatal" do
222
+ it_behaves_like "an output mehthod handling IO exceptions", :warn
223
+ end
224
+
190
225
  describe "format_for_display" do
191
226
  it "should return the raw data" do
192
227
  input = { :gi => :go }
@@ -199,6 +234,12 @@ EOM
199
234
  @ui.config[:attribute] = "gi.go"
200
235
  @ui.format_for_display(input).should == { "sample-data-bag-item" => { "gi.go" => "ge" } }
201
236
  end
237
+
238
+ it "should return multiple attributes" do
239
+ input = { "gi" => "go", "hi" => "ho", "id" => "sample-data-bag-item" }
240
+ @ui.config[:attribute] = ["gi", "hi"]
241
+ @ui.format_for_display(input).should == { "sample-data-bag-item" => { "gi" => "go", "hi"=> "ho" } }
242
+ end
202
243
  end
203
244
 
204
245
  describe "with --run-list passed" do
@@ -0,0 +1,140 @@
1
+ #
2
+ # Author:: Mike Fiedler (<miketheman@gmail.com>)
3
+ # Copyright:: Copyright (c) 2013 Mike Fiedler
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
+
21
+ describe Chef::Knife::NodeRunListSet do
22
+ before(:each) do
23
+ Chef::Config[:node_name] = "webmonkey.example.com"
24
+ @knife = Chef::Knife::NodeRunListSet.new
25
+ @knife.config = {}
26
+ @knife.name_args = [ "adam", "role[monkey]" ]
27
+ @knife.stub!(:output).and_return(true)
28
+ @node = Chef::Node.new()
29
+ @node.stub!(:save).and_return(true)
30
+ Chef::Node.stub!(:load).and_return(@node)
31
+ end
32
+
33
+ describe "run" do
34
+ it "should load the node" do
35
+ Chef::Node.should_receive(:load).with("adam")
36
+ @knife.run
37
+ end
38
+
39
+ it "should set the run list" do
40
+ @knife.run
41
+ @node.run_list[0].should == 'role[monkey]'
42
+ end
43
+
44
+ it "should save the node" do
45
+ @node.should_receive(:save)
46
+ @knife.run
47
+ end
48
+
49
+ it "should print the run list" do
50
+ @knife.should_receive(:output).and_return(true)
51
+ @knife.run
52
+ end
53
+
54
+ describe "with more than one role or recipe" do
55
+ it "should set the run list to all the entries" do
56
+ @knife.name_args = [ "adam", "role[monkey],role[duck]" ]
57
+ @knife.run
58
+ @node.run_list[0].should == "role[monkey]"
59
+ @node.run_list[1].should == "role[duck]"
60
+ end
61
+ end
62
+
63
+ describe "with more than one role or recipe with space between items" do
64
+ it "should set the run list to all the entries" do
65
+ @knife.name_args = [ "adam", "role[monkey], role[duck]" ]
66
+ @knife.run
67
+ @node.run_list[0].should == "role[monkey]"
68
+ @node.run_list[1].should == "role[duck]"
69
+ end
70
+ end
71
+
72
+ describe "with more than one role or recipe as different arguments" do
73
+ it "should set the run list to all the entries" do
74
+ @knife.name_args = [ "adam", "role[monkey]", "role[duck]" ]
75
+ @knife.run
76
+ @node.run_list[0].should == "role[monkey]"
77
+ @node.run_list[1].should == "role[duck]"
78
+ end
79
+ end
80
+
81
+ describe "with more than one role or recipe as different arguments and list separated by comas" do
82
+ it "should add to the run list all the entries" do
83
+ @knife.name_args = [ "adam", "role[monkey]", "role[duck],recipe[bird::fly]" ]
84
+ @knife.run
85
+ @node.run_list[0].should == "role[monkey]"
86
+ @node.run_list[1].should == "role[duck]"
87
+ end
88
+ end
89
+
90
+ describe "with one role or recipe but with an extraneous comma" do
91
+ it "should add to the run list one item" do
92
+ @knife.name_args = [ "adam", "role[monkey]," ]
93
+ @knife.run
94
+ @node.run_list[0].should == "role[monkey]"
95
+ end
96
+ end
97
+
98
+ describe "with an existing run list" do
99
+ it "should overwrite any existing run list items" do
100
+ @node.run_list << "role[acorns]"
101
+ @node.run_list << "role[zebras]"
102
+ @node.run_list[0].should == "role[acorns]"
103
+ @node.run_list[1].should == "role[zebras]"
104
+ @node.run_list.run_list_items.size.should == 2
105
+
106
+ @knife.name_args = [ "adam", "role[monkey]", "role[duck]" ]
107
+ @knife.run
108
+ @node.run_list[0].should == "role[monkey]"
109
+ @node.run_list[1].should == "role[duck]"
110
+ @node.run_list.run_list_items.size.should == 2
111
+ end
112
+ end
113
+
114
+ describe "with no role or recipe" do
115
+ # Set up outputs for inspection later
116
+ before(:each) do
117
+ @stdout = StringIO.new
118
+ @stderr = StringIO.new
119
+
120
+ @knife.ui.stub!(:stdout).and_return(@stdout)
121
+ @knife.ui.stub!(:stderr).and_return(@stderr)
122
+ end
123
+
124
+ it "should exit" do
125
+ @knife.name_args = [ "adam" ]
126
+ lambda { @knife.run }.should raise_error SystemExit
127
+ end
128
+
129
+ it "should show the user" do
130
+ @knife.name_args = [ "adam" ]
131
+
132
+ begin ; @knife.run ; rescue SystemExit ; end
133
+
134
+ @stdout.string.should eq "USAGE: knife node run_list set NODE ENTRIES (options)\n"
135
+ @stderr.string.should eq "FATAL: You must supply both a node name and a run list.\n"
136
+ end
137
+ end
138
+
139
+ end
140
+ end