chef 10.34.6-x86-mingw32 → 11.6.2-x86-mingw32

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 (777) hide show
  1. checksums.yaml +5 -13
  2. data/CONTRIBUTING.md +155 -0
  3. data/README.md +89 -0
  4. data/Rakefile +18 -1
  5. data/bin/chef-apply +25 -0
  6. data/bin/chef-service-manager +37 -0
  7. data/bin/chef-shell +34 -0
  8. data/bin/shef +6 -5
  9. data/distro/common/html/chef-client.8.html +4 -4
  10. data/distro/common/html/chef-expander.8.html +4 -4
  11. data/distro/common/html/chef-expanderctl.8.html +4 -4
  12. data/distro/common/html/chef-server-webui.8.html +4 -4
  13. data/distro/common/html/chef-server.8.html +4 -4
  14. data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
  15. data/distro/common/html/chef-solo.8.html +4 -4
  16. data/distro/common/html/chef-solr.8.html +5 -5
  17. data/distro/common/html/knife-bootstrap.1.html +4 -4
  18. data/distro/common/html/knife-client.1.html +4 -4
  19. data/distro/common/html/knife-configure.1.html +4 -4
  20. data/distro/common/html/knife-cookbook-site.1.html +4 -4
  21. data/distro/common/html/knife-cookbook.1.html +4 -4
  22. data/distro/common/html/knife-data-bag.1.html +4 -4
  23. data/distro/common/html/knife-environment.1.html +4 -4
  24. data/distro/common/html/knife-exec.1.html +9 -9
  25. data/distro/common/html/knife-index.1.html +4 -4
  26. data/distro/common/html/knife-node.1.html +4 -4
  27. data/distro/common/html/knife-role.1.html +4 -4
  28. data/distro/common/html/knife-search.1.html +4 -4
  29. data/distro/common/html/knife-ssh.1.html +4 -4
  30. data/distro/common/html/knife-status.1.html +4 -4
  31. data/distro/common/html/knife-tag.1.html +4 -4
  32. data/distro/common/html/knife.1.html +8 -13
  33. data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
  34. data/distro/common/man/man1/knife-bootstrap.1 +1 -1
  35. data/distro/common/man/man1/knife-client.1 +0 -99
  36. data/distro/common/man/man1/knife-configure.1 +1 -1
  37. data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
  38. data/distro/common/man/man1/knife-cookbook.1 +1 -1
  39. data/distro/common/man/man1/knife-data-bag.1 +1 -1
  40. data/distro/common/man/man1/knife-environment.1 +0 -168
  41. data/distro/common/man/man1/knife-exec.1 +4 -7
  42. data/distro/common/man/man1/knife-index.1 +1 -1
  43. data/distro/common/man/man1/knife-node.1 +1 -1
  44. data/distro/common/man/man1/knife-role.1 +1 -1
  45. data/distro/common/man/man1/knife-search.1 +1 -1
  46. data/distro/common/man/man1/knife-ssh.1 +1 -1
  47. data/distro/common/man/man1/knife-status.1 +1 -1
  48. data/distro/common/man/man1/knife-tag.1 +1 -1
  49. data/distro/common/man/man1/knife.1 +3 -6
  50. data/distro/common/man/man8/chef-client.8 +1 -1
  51. data/distro/common/man/man8/chef-expander.8 +1 -1
  52. data/distro/common/man/man8/chef-expanderctl.8 +1 -1
  53. data/distro/common/man/man8/chef-server-webui.8 +1 -1
  54. data/distro/common/man/man8/chef-server.8 +1 -1
  55. data/distro/common/man/man8/chef-solo.8 +1 -1
  56. data/distro/common/man/man8/chef-solr.8 +1 -1
  57. data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
  58. data/distro/common/markdown/man1/knife-exec.mkd +11 -6
  59. data/distro/common/markdown/man1/knife.mkd +4 -9
  60. data/distro/debian/etc/default/chef-client +0 -1
  61. data/distro/debian/etc/init.d/chef-client +6 -4
  62. data/distro/windows/service_manager.rb +2 -146
  63. data/lib/chef.rb +3 -6
  64. data/lib/chef/api_client.rb +20 -130
  65. data/lib/chef/api_client/registration.rb +126 -0
  66. data/lib/chef/application.rb +68 -18
  67. data/lib/chef/application/apply.rb +162 -0
  68. data/lib/chef/application/client.rb +37 -22
  69. data/lib/chef/application/knife.rb +2 -4
  70. data/lib/chef/application/solo.rb +27 -13
  71. data/lib/chef/application/windows_service.rb +114 -54
  72. data/lib/chef/application/windows_service_manager.rb +179 -0
  73. data/lib/chef/applications.rb +1 -0
  74. data/lib/chef/chef_fs.rb +9 -0
  75. data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
  76. data/lib/chef/chef_fs/command_line.rb +284 -0
  77. data/lib/chef/chef_fs/config.rb +205 -0
  78. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
  79. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
  80. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
  81. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
  82. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
  83. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
  84. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
  85. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
  86. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
  87. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
  88. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
  89. data/lib/chef/chef_fs/file_pattern.rb +312 -0
  90. data/lib/chef/chef_fs/file_system.rb +426 -0
  91. data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
  92. data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
  93. data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
  94. data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
  95. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
  96. data/lib/chef/chef_fs/file_system/base_fs_object.rb +180 -0
  97. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
  98. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
  99. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
  100. data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
  101. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +60 -0
  102. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +121 -0
  103. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +110 -0
  104. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +223 -0
  105. data/lib/chef/chef_fs/file_system/cookbook_file.rb +85 -0
  106. data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
  107. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
  108. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
  109. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +149 -0
  110. data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
  111. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +72 -0
  112. data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
  113. data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
  114. data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
  115. data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
  116. data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
  117. data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
  118. data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
  119. data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
  120. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
  121. data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
  122. data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
  123. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
  124. data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
  125. data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
  126. data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
  127. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +113 -0
  128. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +177 -0
  129. data/lib/chef/chef_fs/knife.rb +116 -0
  130. data/lib/chef/chef_fs/parallelizer.rb +129 -0
  131. data/lib/chef/chef_fs/path_utils.rb +90 -0
  132. data/lib/chef/chef_fs/raw_request.rb +79 -0
  133. data/lib/chef/client.rb +111 -34
  134. data/lib/chef/config.rb +111 -102
  135. data/lib/chef/cookbook/chefignore.rb +2 -1
  136. data/lib/chef/cookbook/metadata.rb +0 -2
  137. data/lib/chef/cookbook/syntax_check.rb +76 -14
  138. data/lib/chef/cookbook_loader.rb +39 -26
  139. data/lib/chef/cookbook_uploader.rb +16 -9
  140. data/lib/chef/cookbook_version.rb +2 -410
  141. data/lib/chef/daemon.rb +24 -19
  142. data/lib/chef/data_bag.rb +20 -104
  143. data/lib/chef/data_bag_item.rb +2 -65
  144. data/lib/chef/deprecation/mixin/template.rb +49 -0
  145. data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
  146. data/lib/chef/deprecation/provider/file.rb +197 -0
  147. data/lib/chef/deprecation/provider/remote_file.rb +86 -0
  148. data/lib/chef/deprecation/provider/template.rb +63 -0
  149. data/lib/chef/deprecation/warnings.rb +38 -0
  150. data/lib/chef/digester.rb +73 -0
  151. data/lib/chef/dsl.rb +6 -0
  152. data/lib/chef/dsl/data_query.rb +71 -0
  153. data/lib/chef/dsl/include_attribute.rb +63 -0
  154. data/lib/chef/dsl/include_recipe.rb +45 -0
  155. data/lib/chef/dsl/platform_introspection.rb +218 -0
  156. data/lib/chef/dsl/recipe.rb +87 -0
  157. data/lib/chef/dsl/registry_helper.rb +59 -0
  158. data/lib/chef/encrypted_data_bag_item.rb +171 -24
  159. data/lib/chef/environment.rb +39 -179
  160. data/lib/chef/event_dispatch/base.rb +3 -0
  161. data/lib/chef/exceptions.rb +107 -8
  162. data/lib/chef/file_access_control/unix.rb +64 -7
  163. data/lib/chef/file_access_control/windows.rb +22 -11
  164. data/lib/chef/file_content_management/content_base.rb +56 -0
  165. data/lib/chef/file_content_management/deploy.rb +38 -0
  166. data/lib/chef/file_content_management/deploy/cp.rb +48 -0
  167. data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
  168. data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
  169. data/lib/chef/file_content_management/tempfile.rb +61 -0
  170. data/lib/chef/formatters/base.rb +4 -1
  171. data/lib/chef/formatters/doc.rb +1 -1
  172. data/lib/chef/formatters/error_descriptor.rb +5 -4
  173. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
  174. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +8 -0
  175. data/lib/chef/json_compat.rb +15 -14
  176. data/lib/chef/knife.rb +99 -41
  177. data/lib/chef/knife/bootstrap.rb +46 -2
  178. data/lib/chef/knife/bootstrap/archlinux-gems.erb +1 -1
  179. data/lib/chef/knife/bootstrap/centos5-gems.erb +1 -1
  180. data/lib/chef/knife/bootstrap/chef-full.erb +1 -1
  181. data/lib/chef/knife/bootstrap/fedora13-gems.erb +1 -1
  182. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +1 -1
  183. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +1 -1
  184. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +1 -1
  185. data/lib/chef/knife/client_show.rb +2 -5
  186. data/lib/chef/knife/configure.rb +19 -17
  187. data/lib/chef/knife/cookbook_create.rb +6 -5
  188. data/lib/chef/knife/cookbook_download.rb +13 -5
  189. data/lib/chef/knife/cookbook_metadata.rb +1 -0
  190. data/lib/chef/knife/cookbook_site_share.rb +1 -0
  191. data/lib/chef/knife/cookbook_test.rb +4 -2
  192. data/lib/chef/knife/cookbook_upload.rb +4 -4
  193. data/lib/chef/knife/core/bootstrap_context.rb +11 -5
  194. data/lib/chef/knife/core/generic_presenter.rb +42 -13
  195. data/lib/chef/knife/core/node_editor.rb +36 -16
  196. data/lib/chef/knife/core/node_presenter.rb +1 -1
  197. data/lib/chef/knife/core/subcommand_loader.rb +43 -12
  198. data/lib/chef/knife/core/text_formatter.rb +23 -37
  199. data/lib/chef/knife/core/ui.rb +34 -13
  200. data/lib/chef/knife/delete.rb +106 -0
  201. data/lib/chef/knife/deps.rb +139 -0
  202. data/lib/chef/knife/diff.rb +63 -0
  203. data/lib/chef/knife/download.rb +63 -0
  204. data/lib/chef/knife/edit.rb +76 -0
  205. data/lib/chef/knife/environment_show.rb +2 -0
  206. data/lib/chef/knife/exec.rb +5 -5
  207. data/lib/chef/knife/help_topics.rb +1 -1
  208. data/lib/chef/knife/index_rebuild.rb +91 -7
  209. data/lib/chef/knife/list.rb +153 -0
  210. data/lib/chef/knife/node_run_list_set.rb +66 -0
  211. data/lib/chef/knife/node_show.rb +1 -7
  212. data/lib/chef/knife/raw.rb +64 -0
  213. data/lib/chef/knife/role_show.rb +2 -4
  214. data/lib/chef/knife/search.rb +45 -28
  215. data/lib/chef/knife/show.rb +55 -0
  216. data/lib/chef/knife/ssh.rb +14 -2
  217. data/lib/chef/knife/upload.rb +69 -0
  218. data/lib/chef/knife/user_create.rb +93 -0
  219. data/lib/chef/knife/user_delete.rb +46 -0
  220. data/lib/chef/knife/user_edit.rb +53 -0
  221. data/lib/chef/{provider/whyrun_safe_ruby_block.rb → knife/user_list.rb} +21 -9
  222. data/lib/chef/knife/user_reregister.rb +59 -0
  223. data/lib/chef/knife/user_show.rb +49 -0
  224. data/lib/chef/knife/xargs.rb +265 -0
  225. data/lib/chef/log.rb +2 -2
  226. data/lib/chef/mixin/checksum.rb +3 -3
  227. data/lib/chef/mixin/deep_merge.rb +78 -194
  228. data/lib/chef/mixin/deprecation.rb +35 -0
  229. data/lib/chef/mixin/file_class.rb +0 -9
  230. data/lib/chef/mixin/language.rb +22 -223
  231. data/lib/chef/mixin/language_include_attribute.rb +10 -36
  232. data/lib/chef/mixin/language_include_recipe.rb +7 -33
  233. data/lib/chef/mixin/params_validate.rb +0 -3
  234. data/lib/chef/mixin/recipe_definition_dsl_core.rb +10 -61
  235. data/lib/chef/mixin/securable.rb +32 -7
  236. data/lib/chef/mixin/template.rb +156 -26
  237. data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
  238. data/lib/chef/mixins.rb +1 -5
  239. data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/monkey_patches/file.rb} +6 -14
  240. data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
  241. data/lib/chef/monkey_patches/net_http.rb +0 -34
  242. data/lib/chef/monkey_patches/securerandom.rb +44 -0
  243. data/lib/chef/monologger.rb +93 -0
  244. data/lib/chef/node.rb +139 -308
  245. data/lib/chef/node/attribute.rb +367 -473
  246. data/lib/chef/node/attribute_collections.rb +206 -0
  247. data/lib/chef/node/immutable_collections.rb +186 -0
  248. data/lib/chef/platform.rb +4 -496
  249. data/lib/chef/platform/provider_mapping.rb +529 -0
  250. data/lib/chef/{mixin/check_helper.rb → platform/query_helpers.rb} +20 -9
  251. data/lib/chef/provider.rb +14 -58
  252. data/lib/chef/provider/batch.rb +35 -0
  253. data/lib/chef/provider/breakpoint.rb +6 -6
  254. data/lib/chef/provider/cookbook_file.rb +11 -80
  255. data/lib/chef/provider/cookbook_file/content.rb +49 -0
  256. data/lib/chef/provider/deploy.rb +26 -21
  257. data/lib/chef/provider/deploy/revision.rb +27 -0
  258. data/lib/chef/provider/directory.rb +12 -18
  259. data/lib/chef/provider/execute.rb +22 -5
  260. data/lib/chef/provider/file.rb +297 -248
  261. data/lib/chef/provider/file/content.rb +39 -0
  262. data/lib/chef/provider/git.rb +76 -43
  263. data/lib/chef/provider/group.rb +31 -51
  264. data/lib/chef/provider/group/dscl.rb +13 -53
  265. data/lib/chef/provider/group/gpasswd.rb +19 -14
  266. data/lib/chef/provider/group/groupadd.rb +1 -41
  267. data/lib/chef/provider/group/groupmod.rb +36 -46
  268. data/lib/chef/provider/group/pw.rb +16 -59
  269. data/lib/chef/provider/group/suse.rb +13 -16
  270. data/lib/chef/provider/group/usermod.rb +18 -40
  271. data/lib/chef/provider/group/windows.rb +6 -13
  272. data/lib/chef/provider/http_request.rb +25 -42
  273. data/lib/chef/provider/ifconfig.rb +25 -35
  274. data/lib/chef/provider/ifconfig/debian.rb +71 -0
  275. data/lib/chef/provider/ifconfig/redhat.rb +47 -0
  276. data/lib/chef/provider/link.rb +12 -3
  277. data/lib/chef/provider/lwrp_base.rb +150 -0
  278. data/lib/chef/provider/mount.rb +1 -1
  279. data/lib/chef/provider/mount/mount.rb +8 -3
  280. data/lib/chef/provider/mount/windows.rb +4 -1
  281. data/lib/chef/provider/package/rpm.rb +2 -2
  282. data/lib/chef/provider/package/rubygems.rb +4 -1
  283. data/lib/chef/provider/package/smartos.rb +47 -36
  284. data/lib/chef/provider/package/zypper.rb +45 -55
  285. data/lib/chef/provider/powershell_script.rb +77 -0
  286. data/lib/chef/provider/registry_key.rb +156 -0
  287. data/lib/chef/provider/remote_directory.rb +6 -5
  288. data/lib/chef/provider/remote_file.rb +13 -100
  289. data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
  290. data/lib/chef/provider/remote_file/content.rb +75 -0
  291. data/lib/chef/provider/remote_file/fetcher.rb +43 -0
  292. data/lib/chef/provider/remote_file/ftp.rb +183 -0
  293. data/lib/chef/provider/remote_file/http.rb +124 -0
  294. data/lib/chef/provider/remote_file/local_file.rb +47 -0
  295. data/lib/chef/provider/route.rb +6 -2
  296. data/lib/chef/provider/ruby_block.rb +5 -2
  297. data/lib/chef/provider/script.rb +14 -2
  298. data/lib/chef/provider/service.rb +15 -0
  299. data/lib/chef/provider/service/init.rb +9 -7
  300. data/lib/chef/provider/service/macosx.rb +29 -81
  301. data/lib/chef/provider/service/simple.rb +1 -1
  302. data/lib/chef/provider/service/solaris.rb +6 -5
  303. data/lib/chef/provider/template.rb +16 -81
  304. data/lib/chef/provider/template/content.rb +61 -0
  305. data/lib/chef/provider/template_finder.rb +61 -0
  306. data/lib/chef/provider/user.rb +0 -1
  307. data/lib/chef/provider/user/dscl.rb +175 -568
  308. data/lib/chef/provider/user/useradd.rb +50 -54
  309. data/lib/chef/provider/windows_script.rb +73 -0
  310. data/lib/chef/providers.rb +18 -1
  311. data/lib/chef/recipe.rb +14 -8
  312. data/lib/chef/resource.rb +52 -146
  313. data/lib/chef/resource/{whyrun_safe_ruby_block.rb → batch.rb} +10 -10
  314. data/lib/chef/resource/conditional.rb +4 -0
  315. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
  316. data/lib/chef/resource/file.rb +31 -3
  317. data/lib/chef/resource/group.rb +1 -11
  318. data/lib/chef/resource/http_request.rb +2 -1
  319. data/lib/chef/resource/link.rb +17 -0
  320. data/lib/chef/resource/lwrp_base.rb +132 -0
  321. data/lib/chef/resource/mount.rb +39 -13
  322. data/lib/chef/resource/powershell_script.rb +31 -0
  323. data/lib/chef/resource/registry_key.rb +86 -0
  324. data/lib/chef/resource/remote_directory.rb +6 -5
  325. data/lib/chef/resource/remote_file.rb +62 -25
  326. data/lib/chef/resource/route.rb +1 -1
  327. data/lib/chef/resource/ruby_block.rb +2 -2
  328. data/lib/chef/resource/service.rb +14 -0
  329. data/lib/chef/resource/template.rb +145 -0
  330. data/lib/chef/resource/user.rb +0 -18
  331. data/lib/chef/resource/windows_script.rb +62 -0
  332. data/lib/chef/resource_collection.rb +69 -31
  333. data/lib/chef/resource_reporter.rb +81 -52
  334. data/lib/chef/resources.rb +4 -1
  335. data/lib/chef/rest.rb +55 -127
  336. data/lib/chef/rest/auth_credentials.rb +4 -20
  337. data/lib/chef/rest/rest_request.rb +7 -8
  338. data/lib/chef/role.rb +1 -97
  339. data/lib/chef/run_context.rb +108 -130
  340. data/lib/chef/run_context/cookbook_compiler.rb +280 -0
  341. data/lib/chef/run_list.rb +0 -2
  342. data/lib/chef/run_list/run_list_expansion.rb +1 -16
  343. data/lib/chef/run_lock.rb +96 -0
  344. data/lib/chef/runner.rb +28 -6
  345. data/lib/chef/sandbox.rb +15 -148
  346. data/lib/chef/scan_access_control.rb +8 -5
  347. data/lib/chef/search/query.rb +2 -2
  348. data/lib/chef/shef/ext.rb +3 -575
  349. data/lib/chef/{shef.rb → shell.rb} +35 -40
  350. data/lib/chef/shell/ext.rb +593 -0
  351. data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
  352. data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
  353. data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +15 -13
  354. data/lib/chef/shell_out.rb +7 -0
  355. data/lib/chef/user.rb +182 -0
  356. data/lib/chef/util/backup.rb +84 -0
  357. data/lib/chef/util/diff.rb +145 -0
  358. data/lib/chef/util/file_edit.rb +1 -1
  359. data/lib/chef/util/selinux.rb +100 -0
  360. data/lib/chef/util/windows/net_group.rb +1 -5
  361. data/lib/chef/util/windows/net_user.rb +14 -1
  362. data/lib/chef/util/windows/volume.rb +2 -2
  363. data/lib/chef/version.rb +1 -1
  364. data/lib/chef/version/platform.rb +42 -0
  365. data/lib/chef/version_class.rb +1 -1
  366. data/lib/chef/version_constraint.rb +6 -5
  367. data/lib/chef/{index_queue.rb → version_constraint/platform.rb} +11 -14
  368. data/lib/chef/win32/api/file.rb +8 -2
  369. data/lib/chef/win32/api/security.rb +45 -1
  370. data/lib/chef/win32/registry.rb +382 -0
  371. data/lib/chef/win32/security.rb +19 -0
  372. data/lib/chef/win32/version.rb +25 -8
  373. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
  374. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
  375. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
  376. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
  377. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
  378. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
  379. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
  380. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
  381. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
  382. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
  383. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
  384. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
  385. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
  386. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
  387. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
  388. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  389. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  390. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
  391. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  392. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  393. data/spec/data/apt/var/www/apt/conf/distributions +7 -0
  394. data/spec/data/apt/var/www/apt/conf/incoming +4 -0
  395. data/spec/data/apt/var/www/apt/conf/pulls +3 -0
  396. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  397. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  398. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  399. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  400. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  401. data/spec/data/apt/var/www/apt/db/version +4 -0
  402. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
  403. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
  404. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  405. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
  406. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  407. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  408. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  409. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
  410. data/spec/data/bootstrap/secret.erb +9 -0
  411. data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
  412. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
  413. data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
  414. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  415. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
  416. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
  417. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
  418. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
  419. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
  420. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
  421. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
  422. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
  423. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  424. data/spec/data/knife_subcommand/test_yourself.rb +8 -0
  425. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  426. data/spec/data/nodes/default.rb +3 -3
  427. data/spec/data/nodes/test.example.com.rb +3 -3
  428. data/spec/data/nodes/test.rb +3 -3
  429. data/spec/data/null_config.rb +1 -0
  430. data/spec/data/partial_one.erb +1 -0
  431. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  432. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  433. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  434. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  435. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  436. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  437. data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
  438. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  439. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  440. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  441. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  442. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  443. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  444. data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
  445. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  446. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  447. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  448. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  449. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  450. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  451. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  452. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  453. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  454. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  455. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  456. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  457. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  458. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  459. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  460. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  461. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  462. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  463. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  464. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  465. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  466. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  467. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  468. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  469. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  470. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  471. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  472. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  473. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  474. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  475. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  476. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  477. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  478. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  479. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  480. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  481. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  482. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  483. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  484. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  485. data/spec/data/shef-config.rb +10 -0
  486. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  487. data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
  488. data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
  489. data/spec/functional/knife/exec_spec.rb +3 -3
  490. data/spec/functional/knife/smoke_test.rb +34 -0
  491. data/spec/functional/knife/ssh_spec.rb +5 -1
  492. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
  493. data/spec/functional/resource/batch_spec.rb +64 -0
  494. data/spec/functional/resource/cookbook_file_spec.rb +15 -9
  495. data/spec/functional/resource/deploy_revision_spec.rb +180 -0
  496. data/spec/functional/resource/directory_spec.rb +5 -1
  497. data/spec/functional/resource/file_spec.rb +71 -21
  498. data/spec/functional/resource/git_spec.rb +259 -0
  499. data/spec/functional/resource/link_spec.rb +424 -388
  500. data/spec/functional/resource/package_spec.rb +297 -0
  501. data/spec/functional/resource/powershell_spec.rb +188 -0
  502. data/spec/functional/resource/registry_spec.rb +576 -0
  503. data/spec/functional/resource/remote_directory_spec.rb +143 -37
  504. data/spec/functional/resource/remote_file_spec.rb +99 -13
  505. data/spec/functional/resource/template_spec.rb +180 -3
  506. data/spec/functional/resource/user_spec.rb +547 -0
  507. data/spec/functional/run_lock_spec.rb +243 -0
  508. data/spec/functional/shell_spec.rb +102 -0
  509. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  510. data/spec/functional/win32/security_spec.rb +37 -0
  511. data/spec/functional/win32/service_manager_spec.rb +269 -0
  512. data/spec/functional/win32/versions_spec.rb +78 -0
  513. data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
  514. data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
  515. data/spec/integration/knife/chefignore_spec.rb +271 -0
  516. data/spec/integration/knife/delete_spec.rb +944 -0
  517. data/spec/integration/knife/deps_spec.rb +648 -0
  518. data/spec/integration/knife/diff_spec.rb +536 -0
  519. data/spec/integration/knife/download_spec.rb +962 -0
  520. data/spec/integration/knife/list_spec.rb +633 -0
  521. data/spec/integration/knife/raw_spec.rb +166 -0
  522. data/spec/integration/knife/redirection_spec.rb +57 -0
  523. data/spec/integration/knife/show_spec.rb +158 -0
  524. data/spec/integration/knife/upload_spec.rb +1060 -0
  525. data/spec/integration/solo/solo_spec.rb +41 -0
  526. data/spec/spec_helper.rb +49 -13
  527. data/spec/stress/win32/security_spec.rb +1 -1
  528. data/spec/support/chef_helpers.rb +33 -3
  529. data/spec/support/lib/chef/resource/cat.rb +3 -5
  530. data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
  531. data/spec/support/lib/chef/resource/zen_master.rb +8 -10
  532. data/spec/support/platform_helpers.rb +46 -13
  533. data/spec/support/platforms/win32/spec_service.rb +59 -0
  534. data/spec/support/shared/functional/diff_disabled.rb +10 -0
  535. data/spec/support/shared/functional/directory_resource.rb +129 -38
  536. data/spec/support/shared/functional/file_resource.rb +837 -71
  537. data/spec/support/shared/functional/securable_resource.rb +189 -58
  538. data/spec/support/shared/functional/securable_resource_with_reporting.rb +385 -0
  539. data/spec/support/shared/integration/integration_helper.rb +166 -0
  540. data/spec/support/shared/integration/knife_support.rb +171 -0
  541. data/spec/support/shared/unit/execute_resource.rb +125 -0
  542. data/spec/support/shared/unit/file_system_support.rb +70 -0
  543. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  544. data/spec/support/shared/unit/provider/file.rb +609 -0
  545. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
  546. data/spec/support/shared/unit/script_resource.rb +52 -0
  547. data/spec/support/shared/unit/windows_script_resource.rb +48 -0
  548. data/spec/tiny_server.rb +13 -11
  549. data/spec/unit/api_client/registration_spec.rb +172 -0
  550. data/spec/unit/api_client_spec.rb +78 -156
  551. data/spec/unit/application/apply.rb +84 -0
  552. data/spec/unit/application/client_spec.rb +16 -14
  553. data/spec/unit/application/knife_spec.rb +17 -0
  554. data/spec/unit/application/solo_spec.rb +1 -1
  555. data/spec/unit/application_spec.rb +113 -3
  556. data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
  557. data/spec/unit/chef_fs/diff_spec.rb +328 -0
  558. data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
  559. data/spec/unit/chef_fs/file_system_spec.rb +135 -0
  560. data/spec/unit/client_spec.rb +195 -23
  561. data/spec/unit/config_spec.rb +102 -51
  562. data/spec/unit/cookbook/syntax_check_spec.rb +75 -111
  563. data/spec/unit/cookbook_loader_spec.rb +154 -91
  564. data/spec/unit/cookbook_manifest_spec.rb +81 -81
  565. data/spec/unit/cookbook_spec.rb +3 -20
  566. data/spec/unit/cookbook_version_spec.rb +23 -122
  567. data/spec/unit/daemon_spec.rb +24 -19
  568. data/spec/unit/data_bag_spec.rb +13 -4
  569. data/spec/unit/deprecation_spec.rb +86 -0
  570. data/spec/unit/digester_spec.rb +50 -0
  571. data/spec/unit/dsl/data_query_spec.rb +66 -0
  572. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  573. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  574. data/spec/unit/encrypted_data_bag_item_spec.rb +197 -157
  575. data/spec/unit/environment_spec.rb +94 -126
  576. data/spec/unit/exceptions_spec.rb +8 -4
  577. data/spec/unit/file_access_control_spec.rb +21 -1
  578. data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
  579. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
  580. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
  581. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
  582. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +6 -5
  583. data/spec/unit/json_compat_spec.rb +8 -0
  584. data/spec/unit/knife/bootstrap_spec.rb +130 -29
  585. data/spec/unit/knife/configure_spec.rb +64 -45
  586. data/spec/unit/knife/cookbook_download_spec.rb +24 -3
  587. data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
  588. data/spec/unit/knife/cookbook_test_spec.rb +1 -0
  589. data/spec/unit/knife/cookbook_upload_spec.rb +39 -0
  590. data/spec/unit/knife/core/bootstrap_context_spec.rb +79 -62
  591. data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
  592. data/spec/unit/knife/core/ui_spec.rb +196 -124
  593. data/spec/unit/knife/data_bag_create_spec.rb +9 -0
  594. data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
  595. data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
  596. data/spec/unit/knife/data_bag_show_spec.rb +11 -4
  597. data/spec/unit/knife/index_rebuild_spec.rb +96 -33
  598. data/spec/unit/knife/knife_help.rb +7 -7
  599. data/spec/unit/knife/node_edit_spec.rb +6 -33
  600. data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
  601. data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
  602. data/spec/unit/knife/ssh_spec.rb +12 -15
  603. data/spec/unit/knife/status_spec.rb +2 -2
  604. data/spec/unit/knife/user_create_spec.rb +86 -0
  605. data/spec/unit/knife/user_delete_spec.rb +39 -0
  606. data/spec/unit/knife/user_edit_spec.rb +42 -0
  607. data/spec/unit/knife/user_list_spec.rb +32 -0
  608. data/spec/unit/knife/user_reregister_spec.rb +53 -0
  609. data/spec/unit/knife/user_show_spec.rb +41 -0
  610. data/spec/unit/knife_spec.rb +74 -0
  611. data/spec/unit/lwrp_spec.rb +102 -60
  612. data/spec/unit/mixin/checksum_spec.rb +2 -2
  613. data/spec/unit/mixin/deep_merge_spec.rb +130 -791
  614. data/spec/unit/mixin/deprecation_spec.rb +23 -0
  615. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +7 -1
  616. data/spec/unit/mixin/params_validate_spec.rb +4 -2
  617. data/spec/unit/mixin/securable_spec.rb +5 -3
  618. data/spec/unit/mixin/template_spec.rb +145 -14
  619. data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
  620. data/spec/unit/node/attribute_spec.rb +273 -173
  621. data/spec/unit/node/immutable_collections_spec.rb +139 -0
  622. data/spec/unit/node_spec.rb +418 -370
  623. data/spec/unit/platform_spec.rb +21 -8
  624. data/spec/unit/provider/breakpoint_spec.rb +8 -8
  625. data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
  626. data/spec/unit/provider/cookbook_file_spec.rb +26 -187
  627. data/spec/unit/provider/cron/solaris_spec.rb +1 -1
  628. data/spec/unit/provider/deploy/revision_spec.rb +19 -11
  629. data/spec/unit/provider/deploy_spec.rb +2 -2
  630. data/spec/unit/provider/directory_spec.rb +99 -67
  631. data/spec/unit/provider/env_spec.rb +2 -2
  632. data/spec/unit/provider/execute_spec.rb +27 -1
  633. data/spec/unit/provider/file/content_spec.rb +101 -0
  634. data/spec/unit/provider/file_spec.rb +25 -475
  635. data/spec/unit/provider/git_spec.rb +224 -28
  636. data/spec/unit/provider/group/dscl_spec.rb +0 -36
  637. data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
  638. data/spec/unit/provider/group/groupadd_spec.rb +4 -3
  639. data/spec/unit/provider/group/groupmod_spec.rb +1 -0
  640. data/spec/unit/provider/group/pw_spec.rb +15 -12
  641. data/spec/unit/provider/group/usermod_spec.rb +9 -22
  642. data/spec/unit/provider/group/windows_spec.rb +8 -0
  643. data/spec/unit/provider/group_spec.rb +6 -28
  644. data/spec/unit/provider/http_request_spec.rb +28 -69
  645. data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
  646. data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
  647. data/spec/unit/provider/ifconfig_spec.rb +0 -33
  648. data/spec/unit/provider/mount/mount_spec.rb +33 -2
  649. data/spec/unit/provider/mount/windows_spec.rb +4 -1
  650. data/spec/unit/provider/mount_spec.rb +16 -6
  651. data/spec/unit/provider/ohai_spec.rb +4 -4
  652. data/spec/unit/provider/package/apt_spec.rb +0 -1
  653. data/spec/unit/provider/package/ips_spec.rb +0 -1
  654. data/spec/unit/provider/package/rpm_spec.rb +0 -12
  655. data/spec/unit/provider/package/rubygems_spec.rb +1 -1
  656. data/spec/unit/provider/package/smartos_spec.rb +3 -2
  657. data/spec/unit/provider/package/zypper_spec.rb +84 -22
  658. data/spec/unit/provider/package_spec.rb +7 -9
  659. data/spec/unit/provider/powershell_spec.rb +38 -0
  660. data/spec/unit/provider/registry_key_spec.rb +269 -0
  661. data/spec/unit/provider/remote_directory_spec.rb +7 -7
  662. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
  663. data/spec/unit/provider/remote_file/content_spec.rb +230 -0
  664. data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
  665. data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
  666. data/spec/unit/provider/remote_file/http_spec.rb +319 -0
  667. data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
  668. data/spec/unit/provider/remote_file_spec.rb +33 -259
  669. data/spec/unit/provider/route_spec.rb +29 -12
  670. data/spec/unit/provider/ruby_block_spec.rb +8 -0
  671. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  672. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  673. data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
  674. data/spec/unit/provider/service/init_service_spec.rb +27 -4
  675. data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
  676. data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
  677. data/spec/unit/provider/service/macosx_spec.rb +176 -207
  678. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  679. data/spec/unit/provider/service/simple_service_spec.rb +3 -3
  680. data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
  681. data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
  682. data/spec/unit/provider/service/upstart_service_spec.rb +11 -11
  683. data/spec/unit/provider/service_spec.rb +3 -3
  684. data/spec/unit/provider/subversion_spec.rb +1 -1
  685. data/spec/unit/provider/template/content_spec.rb +78 -0
  686. data/spec/unit/provider/template_spec.rb +52 -160
  687. data/spec/unit/provider/user/dscl_spec.rb +285 -681
  688. data/spec/unit/provider/user/solaris_spec.rb +39 -373
  689. data/spec/unit/provider/user/useradd_spec.rb +12 -379
  690. data/spec/unit/provider/user_spec.rb +1 -1
  691. data/spec/unit/recipe_spec.rb +10 -8
  692. data/spec/unit/registry_helper_spec.rb +376 -0
  693. data/spec/unit/resource/batch_spec.rb +48 -0
  694. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
  695. data/spec/unit/resource/execute_spec.rb +3 -101
  696. data/spec/unit/resource/file_spec.rb +0 -5
  697. data/spec/unit/resource/group_spec.rb +9 -0
  698. data/spec/unit/resource/ifconfig_spec.rb +60 -1
  699. data/spec/unit/resource/link_spec.rb +1 -0
  700. data/spec/unit/resource/mount_spec.rb +37 -11
  701. data/spec/unit/resource/powershell_spec.rb +48 -0
  702. data/spec/unit/resource/registry_key_spec.rb +171 -0
  703. data/spec/unit/resource/remote_file_spec.rb +63 -25
  704. data/spec/unit/resource/route_spec.rb +1 -1
  705. data/spec/unit/resource/ruby_block_spec.rb +7 -3
  706. data/spec/unit/resource/script_spec.rb +13 -36
  707. data/spec/unit/resource/service_spec.rb +11 -0
  708. data/spec/unit/resource/template_spec.rb +111 -8
  709. data/spec/unit/resource/user_spec.rb +7 -0
  710. data/spec/unit/resource_collection_spec.rb +61 -32
  711. data/spec/unit/resource_reporter_spec.rb +115 -102
  712. data/spec/unit/resource_spec.rb +197 -5
  713. data/spec/unit/rest/auth_credentials_spec.rb +4 -21
  714. data/spec/unit/rest_spec.rb +134 -284
  715. data/spec/unit/run_context/cookbook_compiler_spec.rb +190 -0
  716. data/spec/unit/run_context_spec.rb +18 -4
  717. data/spec/unit/run_list_spec.rb +0 -209
  718. data/spec/unit/run_lock_spec.rb +37 -0
  719. data/spec/unit/runner_spec.rb +102 -3
  720. data/spec/unit/scan_access_control_spec.rb +8 -6
  721. data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
  722. data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
  723. data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +16 -58
  724. data/spec/unit/shell_out_spec.rb +18 -0
  725. data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
  726. data/spec/unit/user_spec.rb +255 -0
  727. data/spec/unit/util/backup_spec.rb +149 -0
  728. data/spec/unit/util/diff_spec.rb +596 -0
  729. data/spec/unit/util/selinux_spec.rb +172 -0
  730. data/spec/unit/version/platform_spec.rb +61 -0
  731. data/spec/unit/version_constraint/platform_spec.rb +46 -0
  732. data/spec/unit/version_constraint_spec.rb +5 -0
  733. metadata +493 -264
  734. data/README.rdoc +0 -177
  735. data/distro/common/html/knife-recipe.1.html +0 -92
  736. data/lib/chef/certificate.rb +0 -161
  737. data/lib/chef/checksum.rb +0 -167
  738. data/lib/chef/checksum_cache.rb +0 -190
  739. data/lib/chef/cookbook_version_selector.rb +0 -168
  740. data/lib/chef/couchdb.rb +0 -246
  741. data/lib/chef/index_queue/amqp_client.rb +0 -116
  742. data/lib/chef/index_queue/consumer.rb +0 -76
  743. data/lib/chef/index_queue/indexable.rb +0 -109
  744. data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
  745. data/lib/chef/monkey_patches/dir.rb +0 -36
  746. data/lib/chef/monkey_patches/moneta.rb +0 -50
  747. data/lib/chef/monkey_patches/uri.rb +0 -70
  748. data/lib/chef/openid_registration.rb +0 -187
  749. data/lib/chef/solr_query.rb +0 -187
  750. data/lib/chef/solr_query/lucene.treetop +0 -150
  751. data/lib/chef/solr_query/lucene_nodes.rb +0 -285
  752. data/lib/chef/solr_query/query_transform.rb +0 -65
  753. data/lib/chef/solr_query/solr_http_request.rb +0 -132
  754. data/lib/chef/webui_user.rb +0 -231
  755. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  756. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  757. data/spec/data/mac_users/10.7.plist.xml +0 -559
  758. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  759. data/spec/data/mac_users/10.8.plist.xml +0 -559
  760. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  761. data/spec/data/mac_users/10.9.plist.xml +0 -560
  762. data/spec/data/mac_users/10.9.shadow.xml +0 -21
  763. data/spec/functional/resource/base.rb +0 -40
  764. data/spec/functional/resource/group_spec.rb +0 -343
  765. data/spec/functional/resource/user/dscl_spec.rb +0 -199
  766. data/spec/unit/certificate_spec.rb +0 -76
  767. data/spec/unit/checksum_cache_spec.rb +0 -209
  768. data/spec/unit/checksum_spec.rb +0 -94
  769. data/spec/unit/couchdb_spec.rb +0 -274
  770. data/spec/unit/index_queue_spec.rb +0 -391
  771. data/spec/unit/mixin/language_spec.rb +0 -305
  772. data/spec/unit/openid_registration_spec.rb +0 -153
  773. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
  774. data/spec/unit/solr_query/query_transform_spec.rb +0 -454
  775. data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
  776. data/spec/unit/solr_query_spec.rb +0 -203
  777. data/spec/unit/webui_user_spec.rb +0 -238
@@ -2,10 +2,10 @@ require 'spec_helper'
2
2
 
3
3
  describe Chef::Knife::Configure do
4
4
  before do
5
- @original_config = Chef::Config.configuration.dup
6
-
7
5
  Chef::Log.logger = Logger.new(StringIO.new)
8
6
 
7
+ @original_config = Chef::Config.configuration.dup
8
+
9
9
  Chef::Config[:node_name] = "webmonkey.example.com"
10
10
  @knife = Chef::Knife::Configure.new
11
11
  @rest_client = mock("null rest client", :post_rest => { :result => :true })
@@ -21,27 +21,43 @@ 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
41
57
  @knife.config[:initial] = true
42
58
  Etc.stub!(:getlogin).and_return("a-new-user")
43
59
  @knife.ask_user_for_config
44
- @out.string.should match(Regexp.escape("Please enter a clientname for the new client: [a-new-user]"))
60
+ @out.string.should match(Regexp.escape("Please enter a name for the new user: [a-new-user]"))
45
61
  @knife.new_client_name.should == Etc.getlogin
46
62
  end
47
63
 
@@ -50,7 +66,7 @@ describe Chef::Knife::Configure do
50
66
  @knife.config[:node_name] = 'testnode'
51
67
  Etc.stub!(:getlogin).and_return("a-new-user")
52
68
  @knife.ask_user_for_config
53
- @out.string.should_not match(Regexp.escape("Please enter a clientname for the new client"))
69
+ @out.string.should_not match(Regexp.escape("Please enter a name for the new user"))
54
70
  @knife.new_client_name.should == 'testnode'
55
71
  end
56
72
 
@@ -64,32 +80,32 @@ describe Chef::Knife::Configure do
64
80
  it "asks the user for the existing admin client's name if -i is specified" do
65
81
  @knife.config[:initial] = true
66
82
  @knife.ask_user_for_config
67
- @out.string.should match(Regexp.escape("Please enter the existing admin clientname: [chef-webui]"))
68
- @knife.admin_client_name.should == 'chef-webui'
83
+ @out.string.should match(Regexp.escape("Please enter the existing admin name: [admin]"))
84
+ @knife.admin_client_name.should == 'admin'
69
85
  end
70
86
 
71
87
  it "should not ask the user for the existing admin client's name if -i and --admin-client_name are specified" do
72
88
  @knife.config[:initial] = true
73
89
  @knife.config[:admin_client_name] = 'my-webui'
74
90
  @knife.ask_user_for_config
75
- @out.string.should_not match(Regexp.escape("Please enter the existing admin clientname:"))
91
+ @out.string.should_not match(Regexp.escape("Please enter the existing admin:"))
76
92
  @knife.admin_client_name.should == 'my-webui'
77
93
  end
78
94
 
79
95
  it "should not ask the user for the existing admin client's name if -i is not specified" do
80
96
  @knife.ask_user_for_config
81
- @out.string.should_not match(Regexp.escape("Please enter the existing admin clientname: [chef-webui]"))
82
- @knife.admin_client_name.should_not == 'chef-webui'
97
+ @out.string.should_not match(Regexp.escape("Please enter the existing admin: [admin]"))
98
+ @knife.admin_client_name.should_not == 'admin'
83
99
  end
84
100
 
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 client's private key: [/etc/chef/webui.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.capitalize.should == 'C:/etc/chef/webui.pem'
106
+ @knife.admin_client_key.capitalize.should == default_admin_key_win32.capitalize
91
107
  else
92
- @knife.admin_client_key.should == '/etc/chef/webui.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.capitalize.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.capitalize.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.capitalize.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.capitalize.should == 'C:/home/you/.chef/my-webui.pem'
178
- @knife.validation_key.capitalize.should == 'C:/home/you/.chef/my-validation.pem'
179
- @knife.new_client_key.capitalize.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,31 +215,34 @@ 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
- File.stub!(:expand_path).with("/home/you/.chef/knife.rb").and_return("/home/you/.chef/knife.rb")
209
- File.stub!(:expand_path).with("/home/you/.chef/a-new-user.pem").and_return("/home/you/.chef/a-new-user.pem")
210
- File.stub!(:expand_path).with("/etc/chef/validation.pem").and_return("/etc/chef/validation.pem")
211
- File.stub!(:expand_path).with("/etc/chef/webui.pem").and_return("/etc/chef/webui.pem")
224
+ File.should_receive(:expand_path).with("/home/you/.chef/knife.rb").and_return("/home/you/.chef/knife.rb")
225
+ File.should_receive(:expand_path).with("/home/you/.chef/a-new-user.pem").and_return("/home/you/.chef/a-new-user.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
- client_command = Chef::Knife::ClientCreate.new
214
- client_command.should_receive(:run)
229
+
230
+ user_command = Chef::Knife::UserCreate.new
231
+ user_command.should_receive(:run)
215
232
 
216
233
  Etc.stub!(:getlogin).and_return("a-new-user")
217
234
 
218
- Chef::Knife::ClientCreate.stub!(:new).and_return(client_command)
235
+ Chef::Knife::UserCreate.stub!(:new).and_return(user_command)
219
236
  FileUtils.should_receive(:mkdir_p).with("/home/you/.chef")
220
237
  ::File.should_receive(:open).with("/home/you/.chef/knife.rb", "w")
221
238
  @knife.config[:initial] = true
239
+ @knife.config[:user_password] = "blah"
222
240
  @knife.run
223
- client_command.name_args.should == Array("a-new-user")
224
- client_command.config[:admin].should be_true
225
- client_command.config[:file].should == "/home/you/.chef/a-new-user.pem"
226
- client_command.config[:yes].should be_true
227
- client_command.config[:disable_editing].should be_true
241
+ user_command.name_args.should == Array("a-new-user")
242
+ user_command.config[:user_password].should == "blah"
243
+ user_command.config[:admin].should be_true
244
+ user_command.config[:file].should == "/home/you/.chef/a-new-user.pem"
245
+ user_command.config[:yes].should be_true
246
+ user_command.config[:disable_editing].should be_true
228
247
  end
229
248
  end
@@ -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'])
@@ -51,22 +51,29 @@ describe Chef::Knife::CookbookMetadata do
51
51
  describe 'with -a or --all' do
52
52
  before(:each) do
53
53
  @knife.config[:all] = true
54
+ @foo = Chef::CookbookVersion.new('foo')
55
+ @foo.version = '1.0.0'
56
+ @bar = Chef::CookbookVersion.new('bar')
57
+ @bar.version = '2.0.0'
58
+ @cookbook_loader = {
59
+ "foo" => @foo,
60
+ "bar" => @bar
61
+ }
62
+ @cookbook_loader.should_receive(:load_cookbooks).and_return(@cookbook_loader)
54
63
  @knife.should_receive(:generate_metadata).with('foo')
55
64
  @knife.should_receive(:generate_metadata).with('bar')
56
65
  end
57
66
 
58
67
  it 'should generate the metadata for each cookbook' do
59
68
  Chef::Config[:cookbook_path] = @cookbook_dir
60
- Chef::CookbookLoader.should_receive(:new).with(@cookbook_dir).
61
- and_return({'foo' => '1.0.0', 'bar' => '2.0.0'})
69
+ Chef::CookbookLoader.should_receive(:new).with(@cookbook_dir).and_return(@cookbook_loader)
62
70
  @knife.run
63
71
  end
64
72
 
65
73
  describe 'and with -o or --cookbook-path' do
66
74
  it 'should look in the provided path and generate cookbook metadata' do
67
75
  @knife.config[:cookbook_path] = '/opt/chef/cookbooks'
68
- Chef::CookbookLoader.should_receive(:new).with('/opt/chef/cookbooks').
69
- and_return({'foo' => '1.0.0', 'bar' => '2.0.0'})
76
+ Chef::CookbookLoader.should_receive(:new).with('/opt/chef/cookbooks').and_return(@cookbook_loader)
70
77
  @knife.run
71
78
  end
72
79
  end
@@ -68,6 +68,7 @@ describe Chef::Knife::CookbookTest do
68
68
  @knife.stub!(:test_cookbook).and_return(true)
69
69
  @knife.config[:all] = true
70
70
  @loader = {}
71
+ @loader.stub!(:load_cookbooks).and_return(@loader)
71
72
  @cookbooks.each do |cookbook|
72
73
  @loader[cookbook.name] = cookbook
73
74
  end
@@ -32,6 +32,7 @@ describe Chef::Knife::CookbookUpload do
32
32
  @cookbook_loader = {}
33
33
  @cookbook_loader.stub!(:[]).and_return(@cookbook)
34
34
  @cookbook_loader.stub!(:merged_cookbooks).and_return([])
35
+ @cookbook_loader.stub!(:load_cookbooks).and_return(@cookbook_loader)
35
36
  Chef::CookbookLoader.stub!(:new).and_return(@cookbook_loader)
36
37
 
37
38
  @output = StringIO.new
@@ -66,6 +67,44 @@ describe Chef::Knife::CookbookUpload do
66
67
  end
67
68
  end
68
69
 
70
+ describe 'when specifying the same cookbook name twice' do
71
+ it 'should upload the cookbook only once' do
72
+ @knife.name_args = ['test_cookbook', 'test_cookbook']
73
+ @knife.should_receive(:upload).once
74
+ @knife.run
75
+ end
76
+ end
77
+
78
+ describe 'when specifying a cookbook name among many' do
79
+ before(:each) do
80
+ @knife.name_args = ['test_cookbook1']
81
+ @cookbooks = {
82
+ 'test_cookbook1' => Chef::CookbookVersion.new('test_cookbook1'),
83
+ 'test_cookbook2' => Chef::CookbookVersion.new('test_cookbook2'),
84
+ 'test_cookbook3' => Chef::CookbookVersion.new('test_cookbook3')
85
+ }
86
+ @cookbook_loader = {}
87
+ @cookbook_loader.stub!(:merged_cookbooks).and_return([])
88
+ @cookbook_loader.stub(:[]) { |ckbk| @cookbooks[ckbk] }
89
+ Chef::CookbookLoader.stub!(:new).and_return(@cookbook_loader)
90
+ end
91
+
92
+ it "should read only one cookbook" do
93
+ @cookbook_loader.should_receive(:[]).once.with('test_cookbook1')
94
+ @knife.run
95
+ end
96
+
97
+ it "should not read all cookbooks" do
98
+ @cookbook_loader.should_not_receive(:load_cookbooks)
99
+ @knife.run
100
+ end
101
+
102
+ it "should upload only one cookbook" do
103
+ @knife.should_receive(:upload).exactly(1).times
104
+ @knife.run
105
+ end
106
+ end
107
+
69
108
  # This is testing too much. We should break it up.
70
109
  describe 'when specifying a cookbook name with dependencies' do
71
110
  it "should upload all dependencies once" do
@@ -20,116 +20,133 @@ 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
67
49
  expected=<<-EXPECTED
68
- log_level :info
50
+ log_level :auto
69
51
  log_location STDOUT
70
52
  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