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
@@ -21,19 +21,16 @@
21
21
 
22
22
  require 'forwardable'
23
23
  require 'chef/config'
24
- require 'chef/cookbook/cookbook_collection'
25
24
  require 'chef/nil_argument'
26
- require 'chef/mixin/check_helper'
27
25
  require 'chef/mixin/params_validate'
28
26
  require 'chef/mixin/from_file'
29
- require 'chef/mixin/language_include_attribute'
30
27
  require 'chef/mixin/deep_merge'
28
+ require 'chef/dsl/include_attribute'
29
+ require 'chef/dsl/platform_introspection'
31
30
  require 'chef/environment'
32
- require 'chef/couchdb'
33
31
  require 'chef/rest'
34
32
  require 'chef/run_list'
35
33
  require 'chef/node/attribute'
36
- require 'chef/index_queue'
37
34
  require 'chef/mash'
38
35
  require 'chef/json_compat'
39
36
  require 'chef/search/query'
@@ -43,144 +40,34 @@ class Chef
43
40
 
44
41
  extend Forwardable
45
42
 
46
- def_delegators :construct_attributes, :keys, :each_key, :each_value, :key?, :has_key?
43
+ def_delegators :attributes, :keys, :each_key, :each_value, :key?, :has_key?
47
44
 
48
- attr_accessor :recipe_list, :couchdb, :couchdb_rev, :run_state, :run_list
49
- attr_accessor :override_attrs, :default_attrs, :normal_attrs, :automatic_attrs
50
- attr_reader :couchdb_id
45
+ attr_accessor :recipe_list, :run_state, :run_list
51
46
 
52
- # TODO: 5/18/2010 cw/timh. cookbook_collection should be removed
53
- # from here and for any place it's needed, it should be accessed
54
- # through a Chef::RunContext
55
- attr_accessor :cookbook_collection
47
+ # RunContext will set itself as run_context via this setter when
48
+ # initialized. This is needed so DSL::IncludeAttribute (in particular,
49
+ # #include_recipe) can access the run_context to determine if an attributes
50
+ # file has been seen yet.
51
+ #--
52
+ # TODO: This is a pretty ugly way to solve that problem.
53
+ attr_accessor :run_context
56
54
 
57
- include Chef::Mixin::CheckHelper
58
55
  include Chef::Mixin::FromFile
56
+ include Chef::DSL::IncludeAttribute
57
+ include Chef::DSL::PlatformIntrospection
58
+
59
59
  include Chef::Mixin::ParamsValidate
60
- include Chef::Mixin::LanguageIncludeAttribute
61
- include Chef::IndexQueue::Indexable
62
-
63
- DESIGN_DOCUMENT = {
64
- "version" => 11,
65
- "language" => "javascript",
66
- "views" => {
67
- "all" => {
68
- "map" => <<-EOJS
69
- function(doc) {
70
- if (doc.chef_type == "node") {
71
- emit(doc.name, doc);
72
- }
73
- }
74
- EOJS
75
- },
76
- "all_id" => {
77
- "map" => <<-EOJS
78
- function(doc) {
79
- if (doc.chef_type == "node") {
80
- emit(doc.name, doc.name);
81
- }
82
- }
83
- EOJS
84
- },
85
- "status" => {
86
- "map" => <<-EOJS
87
- function(doc) {
88
- if (doc.chef_type == "node") {
89
- var to_emit = { "name": doc.name, "chef_environment": doc.chef_environment };
90
- if (doc["attributes"]["fqdn"]) {
91
- to_emit["fqdn"] = doc["attributes"]["fqdn"];
92
- } else {
93
- to_emit["fqdn"] = "Undefined";
94
- }
95
- if (doc["attributes"]["ipaddress"]) {
96
- to_emit["ipaddress"] = doc["attributes"]["ipaddress"];
97
- } else {
98
- to_emit["ipaddress"] = "Undefined";
99
- }
100
- if (doc["attributes"]["ohai_time"]) {
101
- to_emit["ohai_time"] = doc["attributes"]["ohai_time"];
102
- } else {
103
- to_emit["ohai_time"] = "Undefined";
104
- }
105
- if (doc["attributes"]["uptime"]) {
106
- to_emit["uptime"] = doc["attributes"]["uptime"];
107
- } else {
108
- to_emit["uptime"] = "Undefined";
109
- }
110
- if (doc["attributes"]["platform"]) {
111
- to_emit["platform"] = doc["attributes"]["platform"];
112
- } else {
113
- to_emit["platform"] = "Undefined";
114
- }
115
- if (doc["attributes"]["platform_version"]) {
116
- to_emit["platform_version"] = doc["attributes"]["platform_version"];
117
- } else {
118
- to_emit["platform_version"] = "Undefined";
119
- }
120
- if (doc["run_list"]) {
121
- to_emit["run_list"] = doc["run_list"];
122
- } else {
123
- to_emit["run_list"] = "Undefined";
124
- }
125
- emit(doc.name, to_emit);
126
- }
127
- }
128
- EOJS
129
- },
130
- "by_run_list" => {
131
- "map" => <<-EOJS
132
- function(doc) {
133
- if (doc.chef_type == "node") {
134
- if (doc['run_list']) {
135
- for (var i=0; i < doc.run_list.length; i++) {
136
- emit(doc['run_list'][i], doc.name);
137
- }
138
- }
139
- }
140
- }
141
- EOJS
142
- },
143
- "by_environment" => {
144
- "map" => <<-EOJS
145
- function(doc) {
146
- if (doc.chef_type == "node") {
147
- var env = (doc['chef_environment'] == null ? "_default" : doc['chef_environment']);
148
- emit(env, doc.name);
149
- }
150
- }
151
- EOJS
152
- }
153
- },
154
- }
155
60
 
156
61
  # Create a new Chef::Node object.
157
- def initialize(couchdb=nil)
62
+ def initialize
158
63
  @name = nil
159
64
 
160
65
  @chef_environment = '_default'
161
- @normal_attrs = Mash.new
162
- @override_attrs = Mash.new
163
- @default_attrs = Mash.new
164
- @automatic_attrs = Mash.new
165
66
  @run_list = Chef::RunList.new
166
67
 
167
- @couchdb_rev = nil
168
- @couchdb_id = nil
169
- @couchdb = couchdb || Chef::CouchDB.new
170
-
171
- @run_state = {
172
- :template_cache => Hash.new,
173
- :seen_recipes => Hash.new,
174
- :seen_attributes => Hash.new
175
- }
176
- # TODO: 5/20/2010 need this here as long as other objects try to access
177
- # the cookbook collection via Node, otherwise get NoMethodError on nil.
178
- @cookbook_collection = CookbookCollection.new
179
- end
68
+ @attributes = Chef::Node::Attribute.new({}, {}, {}, {})
180
69
 
181
- def couchdb_id=(value)
182
- @couchdb_id = value
183
- @index_id = value
70
+ @run_state = {}
184
71
  end
185
72
 
186
73
  # Used by DSL
@@ -192,24 +79,6 @@ class Chef
192
79
  Chef::REST.new(Chef::Config[:chef_server_url])
193
80
  end
194
81
 
195
- # Find a recipe for this Chef::Node by fqdn. Will search first for
196
- # Chef::Config["node_path"]/fqdn.rb, then hostname.rb, then default.rb.
197
- #
198
- # Returns a new Chef::Node object.
199
- #
200
- # Raises an ArgumentError if it cannot find the node.
201
- def find_file(fqdn)
202
- host_parts = fqdn.split(".")
203
- hostname = host_parts[0]
204
-
205
- [fqdn, hostname, "default"].each { |fname|
206
- node_file = File.join(Chef::Config[:node_path], "#{fname.to_s}.rb")
207
- return self.from_file(node_file) if File.exists?(node_file)
208
- }
209
-
210
- raise ArgumentError, "Cannot find a node matching #{fqdn}, not even with default.rb!"
211
- end
212
-
213
82
  # Set the name of this Node, or return the current name.
214
83
  def name(arg=nil)
215
84
  if arg != nil
@@ -233,91 +102,114 @@ class Chef
233
102
  )
234
103
  end
235
104
 
236
- # Used by the DSL
237
- def attribute
238
- construct_attributes
105
+ def chef_environment=(environment)
106
+ chef_environment(environment)
239
107
  end
240
108
 
241
- def construct_attributes
242
- Chef::Node::Attribute.new(normal_attrs, default_attrs, override_attrs, automatic_attrs)
243
- end
109
+ alias :environment :chef_environment
244
110
 
245
- def attribute=(value)
246
- self.normal_attrs = value
111
+ def attributes
112
+ @attributes
247
113
  end
248
114
 
115
+ alias :attribute :attributes
116
+ alias :construct_attributes :attributes
117
+
249
118
  # Return an attribute of this node. Returns nil if the attribute is not found.
250
119
  def [](attrib)
251
- construct_attributes[attrib]
120
+ attributes[attrib]
252
121
  end
253
122
 
254
- # Set an attribute of this node
255
- def []=(attrib, value)
256
- construct_attributes[attrib] = value
257
- end
258
-
259
- def store(attrib, value)
260
- self[attrib] = value
261
- end
262
-
263
- # Set a normal attribute of this node, but auto-vivifiy any Mashes that
123
+ # Set a normal attribute of this node, but auto-vivify any Mashes that
264
124
  # might be missing
265
125
  def normal
266
- attrs = construct_attributes
267
- attrs.set_type = :normal
268
- attrs.auto_vivifiy_on_read = true
269
- attrs
126
+ attributes.set_unless_value_present = false
127
+ attributes.normal
270
128
  end
271
129
 
272
130
  alias_method :set, :normal
273
131
 
274
- # Set a normal attribute of this node, auto-vivifiying any mashes that are
132
+ # Set a normal attribute of this node, auto-vivifying any mashes that are
275
133
  # missing, but if the final value already exists, don't set it
276
134
  def normal_unless
277
- attrs = construct_attributes
278
- attrs.set_type = :normal
279
- attrs.auto_vivifiy_on_read = true
280
- attrs.set_unless_value_present = true
281
- attrs
135
+ attributes.set_unless_value_present = true
136
+ attributes.normal
282
137
  end
283
138
  alias_method :set_unless, :normal_unless
284
139
 
285
- # Set a default of this node, but auto-vivifiy any Mashes that might
140
+ # Set a default of this node, but auto-vivify any Mashes that might
286
141
  # be missing
287
142
  def default
288
- attrs = construct_attributes
289
- attrs.set_type = :default
290
- attrs.auto_vivifiy_on_read = true
291
- attrs
143
+ attributes.set_unless_value_present = false
144
+ attributes.default
292
145
  end
293
146
 
294
- # Set a default attribute of this node, auto-vivifiying any mashes that are
147
+ # Set a force default attribute. Intermediate mashes will be created by
148
+ # auto-vivify if necessary.
149
+ def default!
150
+ attributes.set_unless_value_present = false
151
+ attributes.default!
152
+ end
153
+
154
+ # Set a default attribute of this node, auto-vivifying any mashes that are
295
155
  # missing, but if the final value already exists, don't set it
296
156
  def default_unless
297
- attrs = construct_attributes
298
- attrs.set_type = :default
299
- attrs.auto_vivifiy_on_read = true
300
- attrs.set_unless_value_present = true
301
- attrs
157
+ attributes.set_unless_value_present = true
158
+ attributes.default
302
159
  end
303
160
 
304
- # Set an override attribute of this node, but auto-vivifiy any Mashes that
161
+ # Set an override attribute of this node, but auto-vivify any Mashes that
305
162
  # might be missing
306
163
  def override
307
- attrs = construct_attributes
308
- attrs.set_type = :override
309
- attrs.auto_vivifiy_on_read = true
310
- attrs
164
+ attributes.set_unless_value_present = false
165
+ attributes.override
166
+ end
167
+
168
+ # Set a force override attribute. Intermediate mashes will be created by
169
+ # auto-vivify if needed.
170
+ def override!
171
+ attributes.set_unless_value_present = false
172
+ attributes.override!
311
173
  end
312
174
 
313
- # Set an override attribute of this node, auto-vivifiying any mashes that
175
+ # Set an override attribute of this node, auto-vivifying any mashes that
314
176
  # are missing, but if the final value already exists, don't set it
315
177
  def override_unless
316
- attrs = construct_attributes
317
- attrs.set_type = :override
318
- attrs.auto_vivifiy_on_read = true
319
- attrs.set_unless_value_present = true
320
- attrs
178
+ attributes.set_unless_value_present = true
179
+ attributes.override
180
+ end
181
+
182
+
183
+ def override_attrs
184
+ attributes.override
185
+ end
186
+
187
+ def override_attrs=(new_values)
188
+ attributes.override = new_values
189
+ end
190
+
191
+ def default_attrs
192
+ attributes.default
193
+ end
194
+
195
+ def default_attrs=(new_values)
196
+ attributes.default = new_values
197
+ end
198
+
199
+ def normal_attrs
200
+ attributes.normal
201
+ end
202
+
203
+ def normal_attrs=(new_values)
204
+ attributes.normal = new_values
205
+ end
206
+
207
+ def automatic_attrs
208
+ attributes.automatic
209
+ end
210
+
211
+ def automatic_attrs=(new_values)
212
+ attributes.automatic = new_values
321
213
  end
322
214
 
323
215
  # Return true if this Node has a given attribute, false if not. Takes either a symbol or
@@ -326,36 +218,33 @@ class Chef
326
218
  # Only works on the top level. Preferred way is to use the normal [] style
327
219
  # lookup and call attribute?()
328
220
  def attribute?(attrib)
329
- construct_attributes.attribute?(attrib)
221
+ attributes.attribute?(attrib)
330
222
  end
331
223
 
332
224
  # Yield each key of the top level to the block.
333
225
  def each(&block)
334
- construct_attributes.each(&block)
226
+ attributes.each(&block)
335
227
  end
336
228
 
337
229
  # Iterates over each attribute, passing the attribute and value to the block.
338
230
  def each_attribute(&block)
339
- construct_attributes.each_attribute(&block)
231
+ attributes.each_attribute(&block)
340
232
  end
341
233
 
342
- # Encouraged to only get used for lookups - while you can do sets from here, it's not as explicit
343
- # as using the normal/default/override interface.
234
+ # Only works for attribute fetches, setting is no longer supported
344
235
  def method_missing(symbol, *args)
345
- attrs = construct_attributes
346
- attrs.send(symbol, *args)
236
+ attributes.send(symbol, *args)
347
237
  end
348
238
 
349
239
  # Returns true if this Node expects a given recipe, false if not.
350
240
  #
351
241
  # First, the run list is consulted to see whether the recipe is
352
242
  # explicitly included. If it's not there, it looks in
353
- # run_state[:seen_recipes], which is populated by include_recipe
354
- # statements in the DSL (and thus would not be in the run list).
243
+ # `node[:recipes]`, which is populated when the run_list is expanded
355
244
  #
356
245
  # NOTE: It's used by cookbook authors
357
246
  def recipe?(recipe_name)
358
- run_list.include?(recipe_name) || run_state[:seen_recipes].include?(recipe_name)
247
+ run_list.include?(recipe_name) || Array(self[:recipes]).include?(recipe_name)
359
248
  end
360
249
 
361
250
  # Returns true if this Node expects a given role, false if not.
@@ -379,26 +268,26 @@ class Chef
379
268
  Chef::Log.debug("Extracting run list from JSON attributes provided on command line")
380
269
  consume_attributes(json_cli_attrs)
381
270
 
382
- @automatic_attrs = ohai_data
271
+ self.automatic_attrs = ohai_data
383
272
 
384
273
  platform, version = Chef::Platform.find_platform_and_version(self)
385
274
  Chef::Log.debug("Platform is #{platform} version #{version}")
386
- @automatic_attrs[:platform] = platform
387
- @automatic_attrs[:platform_version] = version
275
+ self.automatic[:platform] = platform
276
+ self.automatic[:platform_version] = version
388
277
  end
389
278
 
390
279
  # Consumes the combined run_list and other attributes in +attrs+
391
280
  def consume_attributes(attrs)
392
281
  normal_attrs_to_merge = consume_run_list(attrs)
393
282
  Chef::Log.debug("Applying attributes from json file")
394
- @normal_attrs = Chef::Mixin::DeepMerge.horizontal_merge(@normal_attrs,normal_attrs_to_merge)
283
+ self.normal_attrs = Chef::Mixin::DeepMerge.merge(normal_attrs,normal_attrs_to_merge)
395
284
  self.tags # make sure they're defined
396
285
  end
397
286
 
398
287
  # Lazy initializer for tags attribute
399
288
  def tags
400
- self.set[:tags] = [] unless attribute?(:tags)
401
- self[:tags]
289
+ normal[:tags] = [] unless attribute?(:tags)
290
+ normal[:tags]
402
291
  end
403
292
 
404
293
  # Extracts the run list from +attrs+ and applies it. Returns the remaining attributes
@@ -417,8 +306,8 @@ class Chef
417
306
  # Clear defaults and overrides, so that any deleted attributes
418
307
  # between runs are still gone.
419
308
  def reset_defaults_and_overrides
420
- @default_attrs = Mash.new
421
- @override_attrs = Mash.new
309
+ self.default.clear
310
+ self.override.clear
422
311
  end
423
312
 
424
313
  # Expands the node's run list and sets the default and override
@@ -439,8 +328,10 @@ class Chef
439
328
 
440
329
  self.tags # make sure they're defined
441
330
 
442
- @automatic_attrs[:recipes] = expansion.recipes
443
- @automatic_attrs[:roles] = expansion.roles
331
+ automatic_attrs[:recipes] = expansion.recipes
332
+ automatic_attrs[:roles] = expansion.roles
333
+
334
+ apply_expansion_attributes(expansion)
444
335
 
445
336
  expansion
446
337
  end
@@ -448,13 +339,17 @@ class Chef
448
339
  # Apply the default and overrides attributes from the expansion
449
340
  # passed in, which came from roles.
450
341
  def apply_expansion_attributes(expansion)
451
- load_chef_environment_object = (chef_environment == "_default" ? nil : Chef::Environment.load(chef_environment))
452
- environment_default_attrs = load_chef_environment_object.nil? ? {} : load_chef_environment_object.default_attributes
453
- default_before_roles = Chef::Mixin::DeepMerge.horizontal_merge(default_attrs, environment_default_attrs)
454
- @default_attrs = Chef::Mixin::DeepMerge.horizontal_merge(default_before_roles, expansion.default_attrs)
455
- environment_override_attrs = load_chef_environment_object.nil? ? {} : load_chef_environment_object.override_attributes
456
- overrides_before_environments = Chef::Mixin::DeepMerge.horizontal_merge(override_attrs, expansion.override_attrs)
457
- @override_attrs = Chef::Mixin::DeepMerge.horizontal_merge(overrides_before_environments, environment_override_attrs)
342
+ loaded_environment = if chef_environment == "_default"
343
+ Chef::Environment.new.tap {|e| e.name("_default")}
344
+ else
345
+ Chef::Environment.load(chef_environment)
346
+ end
347
+
348
+ attributes.env_default = loaded_environment.default_attributes
349
+ attributes.env_override = loaded_environment.override_attributes
350
+
351
+ attribute.role_default = expansion.default_attrs
352
+ attributes.role_override = expansion.override_attrs
458
353
  end
459
354
 
460
355
  # Transform the node to a Hash
@@ -478,36 +373,39 @@ class Chef
478
373
  display["chef_environment"] = chef_environment
479
374
  display["automatic"] = automatic_attrs
480
375
  display["normal"] = normal_attrs
481
- display["default"] = default_attrs
482
- display["override"] = override_attrs
376
+ display["default"] = attributes.combined_default
377
+ display["override"] = attributes.combined_override
483
378
  display["run_list"] = run_list.run_list
484
379
  display
485
380
  end
486
381
 
487
382
  # Serialize this object as a hash
488
383
  def to_json(*a)
384
+ for_json.to_json(*a)
385
+ end
386
+
387
+ def for_json
489
388
  result = {
490
389
  "name" => name,
491
390
  "chef_environment" => chef_environment,
492
391
  'json_class' => self.class.name,
493
- "automatic" => automatic_attrs,
494
- "normal" => normal_attrs,
392
+ "automatic" => attributes.automatic,
393
+ "normal" => attributes.normal,
495
394
  "chef_type" => "node",
496
- "default" => default_attrs,
497
- "override" => override_attrs,
395
+ "default" => attributes.combined_default,
396
+ "override" => attributes.combined_override,
498
397
  #Render correctly for run_list items so malformed json does not result
499
398
  "run_list" => run_list.run_list.map { |item| item.to_s }
500
399
  }
501
- result["_rev"] = couchdb_rev if couchdb_rev
502
- result.to_json(*a)
400
+ result
503
401
  end
504
402
 
505
403
  def update_from!(o)
506
404
  run_list.reset!(o.run_list)
507
- @automatic_attrs = o.automatic_attrs
508
- @normal_attrs = o.normal_attrs
509
- @override_attrs = o.override_attrs
510
- @default_attrs = o.default_attrs
405
+ self.automatic_attrs = o.automatic_attrs
406
+ self.normal_attrs = o.normal_attrs
407
+ self.override_attrs = o.override_attrs
408
+ self.default_attrs = o.default_attrs
511
409
  chef_environment(o.chef_environment)
512
410
  self
513
411
  end
@@ -530,17 +428,9 @@ class Chef
530
428
  else
531
429
  o["recipes"].each { |r| node.recipes << r }
532
430
  end
533
- node.couchdb_rev = o["_rev"] if o.has_key?("_rev")
534
- node.couchdb_id = o["_id"] if o.has_key?("_id")
535
- node.index_id = node.couchdb_id
536
431
  node
537
432
  end
538
433
 
539
- def self.cdb_list_by_environment(environment, inflate=false, couchdb=nil)
540
- rs = (couchdb || Chef::CouchDB.new).get_view("nodes", "by_environment", :include_docs => inflate, :startkey => environment, :endkey => environment)
541
- inflate ? rs["rows"].collect {|r| r["doc"]} : rs["rows"].collect {|r| r["value"]}
542
- end
543
-
544
434
  def self.list_by_environment(environment, inflate=false)
545
435
  if inflate
546
436
  response = Hash.new
@@ -551,14 +441,6 @@ class Chef
551
441
  end
552
442
  end
553
443
 
554
- # List all the Chef::Node objects in the CouchDB. If inflate is set to true, you will get
555
- # the full list of all Nodes, fully inflated.
556
- def self.cdb_list(inflate=false, couchdb=nil)
557
- rs =(couchdb || Chef::CouchDB.new).list("nodes", inflate)
558
- lookup = (inflate ? "value" : "key")
559
- rs["rows"].collect { |r| r[lookup] }
560
- end
561
-
562
444
  def self.list(inflate=false)
563
445
  if inflate
564
446
  response = Hash.new
@@ -571,19 +453,6 @@ class Chef
571
453
  end
572
454
  end
573
455
 
574
- # Load a node by name from CouchDB
575
- def self.cdb_load(name, couchdb=nil)
576
- (couchdb || Chef::CouchDB.new).load("node", name)
577
- end
578
-
579
- def self.exists?(nodename, couchdb)
580
- begin
581
- self.cdb_load(nodename, couchdb)
582
- rescue Chef::Exceptions::CouchDBNotFound
583
- nil
584
- end
585
- end
586
-
587
456
  def self.find_or_create(node_name)
588
457
  load(node_name)
589
458
  rescue Net::HTTPServerException => e
@@ -595,7 +464,7 @@ class Chef
595
464
  def self.build(node_name)
596
465
  node = new
597
466
  node.name(node_name)
598
- node.chef_environment(Chef::Config[:environment]) unless Chef::Config[:environment].nil? || Chef::Config[:environment].chomp.empty?
467
+ node.chef_environment(Chef::Config[:environment]) unless Chef::Config[:environment].nil? || Chef::Config[:environment].chop.empty?
599
468
  node
600
469
  end
601
470
 
@@ -604,21 +473,11 @@ class Chef
604
473
  Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("nodes/#{name}")
605
474
  end
606
475
 
607
- # Remove this node from the CouchDB
608
- def cdb_destroy
609
- couchdb.delete("node", name, couchdb_rev)
610
- end
611
-
612
476
  # Remove this node via the REST API
613
477
  def destroy
614
478
  chef_server_rest.delete_rest("nodes/#{name}")
615
479
  end
616
480
 
617
- # Save this node to the CouchDB
618
- def cdb_save
619
- @couchdb_rev = couchdb.store("node", name, self)["rev"]
620
- end
621
-
622
481
  # Save this node via the REST API
623
482
  def save
624
483
  # Try PUT. If the node doesn't yet exist, PUT will return 404,
@@ -642,41 +501,13 @@ class Chef
642
501
  self
643
502
  end
644
503
 
645
- # Set up our CouchDB design document
646
- def self.create_design_document(couchdb=nil)
647
- (couchdb || Chef::CouchDB.new).create_design_document("nodes", DESIGN_DOCUMENT)
648
- end
649
-
650
504
  def to_s
651
505
  "node[#{name}]"
652
506
  end
653
507
 
654
- # Load all attribute files for all cookbooks associated with this
655
- # node.
656
- def load_attributes
657
- cookbook_collection.values.each do |cookbook|
658
- cookbook.segment_filenames(:attributes).each do |segment_filename|
659
- Chef::Log.debug("Node #{name} loading cookbook #{cookbook.name}'s attribute file #{segment_filename}")
660
- self.from_file(segment_filename)
661
- end
662
- end
508
+ def <=>(other_node)
509
+ self.name <=> other_node.name
663
510
  end
664
511
 
665
- # Used by DSL.
666
- # Loads the attribute file specified by the short name of the
667
- # file, e.g., loads specified cookbook's
668
- # "attributes/mailservers.rb"
669
- # if passed
670
- # "mailservers"
671
- def load_attribute_by_short_filename(name, src_cookbook_name)
672
- src_cookbook = cookbook_collection[src_cookbook_name]
673
- raise Chef::Exceptions::CookbookNotFound, "could not find cookbook #{src_cookbook_name} while loading attribute #{name}" unless src_cookbook
674
-
675
- attribute_filename = src_cookbook.attribute_filenames_by_short_filename[name]
676
- raise Chef::Exceptions::AttributeNotFound, "could not find filename for attribute #{name} in cookbook #{src_cookbook_name}" unless attribute_filename
677
-
678
- self.from_file(attribute_filename)
679
- self
680
- end
681
512
  end
682
513
  end