chef 12.0.3-x86-mingw32 → 12.1.0.rc.0-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 (653) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +4 -1
  3. data/README.md +42 -18
  4. data/distro/common/html/_sources/ctl_chef_client.txt +1 -1
  5. data/distro/common/html/_sources/ctl_chef_server.txt +53 -35
  6. data/distro/common/html/_sources/ctl_chef_solo.txt +1 -1
  7. data/distro/common/html/_sources/knife_bootstrap.txt +1 -1
  8. data/distro/common/html/_sources/knife_cookbook_site.txt +1 -1
  9. data/distro/common/html/_sources/knife_data_bag.txt +4 -4
  10. data/distro/common/html/_sources/knife_status.txt +1 -1
  11. data/distro/common/html/_static/searchtools.js +1 -1
  12. data/distro/common/html/ctl_chef_client.html +55 -7
  13. data/distro/common/html/ctl_chef_server.html +84 -41
  14. data/distro/common/html/ctl_chef_shell.html +45 -1
  15. data/distro/common/html/ctl_chef_solo.html +51 -5
  16. data/distro/common/html/index.html +2 -2
  17. data/distro/common/html/knife.html +1 -1
  18. data/distro/common/html/knife_bootstrap.html +30 -10
  19. data/distro/common/html/knife_cookbook_site.html +2 -0
  20. data/distro/common/html/knife_data_bag.html +4 -4
  21. data/distro/common/html/knife_node.html +2 -2
  22. data/distro/common/html/knife_raw.html +1 -1
  23. data/distro/common/html/knife_role.html +1 -1
  24. data/distro/common/html/knife_search.html +3 -3
  25. data/distro/common/html/knife_status.html +4 -0
  26. data/distro/common/html/searchindex.js +1 -1
  27. data/distro/common/man/man1/chef-shell.1 +72 -1
  28. data/distro/common/man/man1/knife-bootstrap.1 +71 -63
  29. data/distro/common/man/man1/knife-client.1 +1 -1
  30. data/distro/common/man/man1/knife-configure.1 +1 -1
  31. data/distro/common/man/man1/knife-cookbook-site.1 +4 -1
  32. data/distro/common/man/man1/knife-cookbook.1 +1 -1
  33. data/distro/common/man/man1/knife-data-bag.1 +5 -5
  34. data/distro/common/man/man1/knife-delete.1 +1 -1
  35. data/distro/common/man/man1/knife-deps.1 +1 -1
  36. data/distro/common/man/man1/knife-diff.1 +1 -1
  37. data/distro/common/man/man1/knife-download.1 +1 -1
  38. data/distro/common/man/man1/knife-edit.1 +1 -1
  39. data/distro/common/man/man1/knife-environment.1 +1 -1
  40. data/distro/common/man/man1/knife-exec.1 +1 -1
  41. data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
  42. data/distro/common/man/man1/knife-list.1 +1 -1
  43. data/distro/common/man/man1/knife-node.1 +3 -3
  44. data/distro/common/man/man1/knife-raw.1 +2 -2
  45. data/distro/common/man/man1/knife-recipe-list.1 +1 -1
  46. data/distro/common/man/man1/knife-role.1 +2 -2
  47. data/distro/common/man/man1/knife-search.1 +4 -4
  48. data/distro/common/man/man1/knife-serve.1 +1 -1
  49. data/distro/common/man/man1/knife-show.1 +1 -1
  50. data/distro/common/man/man1/knife-ssh.1 +1 -1
  51. data/distro/common/man/man1/knife-ssl-check.1 +1 -1
  52. data/distro/common/man/man1/knife-ssl-fetch.1 +1 -1
  53. data/distro/common/man/man1/knife-status.1 +1 -1
  54. data/distro/common/man/man1/knife-tag.1 +1 -1
  55. data/distro/common/man/man1/knife-upload.1 +1 -1
  56. data/distro/common/man/man1/knife-user.1 +1 -1
  57. data/distro/common/man/man1/knife-xargs.1 +1 -1
  58. data/distro/common/man/man1/knife.1 +1 -1
  59. data/distro/common/man/man8/chef-apply.8 +86 -0
  60. data/distro/common/man/man8/chef-client.8 +76 -5
  61. data/distro/common/man/man8/chef-solo.8 +79 -6
  62. data/distro/common/markdown/man1/knife-bootstrap.mkd +1 -1
  63. data/distro/common/markdown/man1/knife-cookbook-site.mkd +1 -1
  64. data/distro/common/markdown/man1/knife-data-bag.mkd +1 -1
  65. data/distro/common/markdown/man1/knife-environment.mkd +1 -1
  66. data/distro/common/markdown/man1/knife.mkd +1 -1
  67. data/lib/chef.rb +0 -7
  68. data/lib/chef/api_client.rb +10 -2
  69. data/lib/chef/api_client/registration.rb +7 -9
  70. data/lib/chef/application.rb +28 -12
  71. data/lib/chef/application/apply.rb +17 -1
  72. data/lib/chef/application/client.rb +74 -6
  73. data/lib/chef/application/knife.rb +1 -2
  74. data/lib/chef/application/solo.rb +30 -0
  75. data/lib/chef/application/windows_service.rb +1 -0
  76. data/lib/chef/application/windows_service_manager.rb +8 -2
  77. data/lib/chef/applications.rb +0 -1
  78. data/lib/chef/audit/audit_event_proxy.rb +93 -0
  79. data/lib/chef/audit/audit_reporter.rb +169 -0
  80. data/lib/chef/audit/control_group_data.rb +140 -0
  81. data/lib/chef/audit/rspec_formatter.rb +37 -0
  82. data/lib/chef/audit/runner.rb +178 -0
  83. data/lib/chef/chef_fs/chef_fs_data_store.rb +11 -2
  84. data/lib/chef/chef_fs/config.rb +25 -4
  85. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +15 -0
  86. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -0
  87. data/lib/chef/chef_fs/file_system.rb +1 -1
  88. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +5 -0
  89. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +3 -2
  90. data/lib/chef/{shef/ext.rb → chef_fs/file_system/chef_repository_file_system_policies_dir.rb} +22 -3
  91. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +4 -0
  92. data/lib/chef/client.rb +81 -52
  93. data/lib/chef/config.rb +35 -3
  94. data/lib/chef/cookbook/metadata.rb +3 -3
  95. data/lib/chef/cookbook_manifest.rb +275 -0
  96. data/lib/chef/cookbook_site_streaming_uploader.rb +24 -23
  97. data/lib/chef/cookbook_uploader.rb +11 -2
  98. data/lib/chef/cookbook_version.rb +71 -194
  99. data/lib/chef/data_bag.rb +5 -2
  100. data/lib/chef/data_bag_item.rb +6 -3
  101. data/lib/chef/deprecation/warnings.rb +5 -4
  102. data/lib/chef/dsl/audit.rb +51 -0
  103. data/lib/chef/dsl/include_recipe.rb +2 -3
  104. data/lib/chef/dsl/reboot_pending.rb +1 -1
  105. data/lib/chef/dsl/recipe.rb +49 -31
  106. data/lib/chef/encrypted_data_bag_item/assertions.rb +0 -3
  107. data/lib/chef/environment.rb +5 -2
  108. data/lib/chef/event_dispatch/base.rb +36 -1
  109. data/lib/chef/event_dispatch/dispatcher.rb +3 -5
  110. data/lib/chef/exceptions.rb +61 -2
  111. data/lib/chef/file_access_control/unix.rb +12 -0
  112. data/lib/chef/file_access_control/windows.rb +14 -0
  113. data/lib/chef/formatters/doc.rb +47 -1
  114. data/{spec/unit/monkey_patches/string_spec.rb → lib/chef/guard_interpreter.rb} +11 -16
  115. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -2
  116. data/lib/chef/http.rb +1 -2
  117. data/lib/chef/knife.rb +5 -3
  118. data/lib/chef/knife/bootstrap.rb +84 -15
  119. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +165 -0
  120. data/lib/chef/knife/bootstrap/client_builder.rb +190 -0
  121. data/lib/chef/knife/bootstrap/{README.md → templates/README.md} +0 -0
  122. data/lib/chef/knife/bootstrap/{archlinux-gems.erb → templates/archlinux-gems.erb} +9 -0
  123. data/lib/chef/knife/bootstrap/{chef-aix.erb → templates/chef-aix.erb} +9 -0
  124. data/lib/chef/knife/bootstrap/{chef-full.erb → templates/chef-full.erb} +10 -1
  125. data/lib/chef/knife/client_create.rb +8 -7
  126. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  127. data/lib/chef/knife/cookbook_site_install.rb +1 -1
  128. data/lib/chef/knife/cookbook_site_list.rb +1 -1
  129. data/lib/chef/knife/cookbook_site_search.rb +1 -1
  130. data/lib/chef/knife/cookbook_site_share.rb +39 -28
  131. data/lib/chef/knife/cookbook_site_show.rb +3 -3
  132. data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
  133. data/lib/chef/knife/cookbook_test.rb +1 -0
  134. data/lib/chef/knife/cookbook_upload.rb +13 -8
  135. data/lib/chef/knife/core/bootstrap_context.rb +14 -3
  136. data/lib/chef/knife/core/generic_presenter.rb +5 -2
  137. data/lib/chef/knife/core/object_loader.rb +1 -1
  138. data/lib/chef/knife/core/subcommand_loader.rb +24 -0
  139. data/lib/chef/knife/core/ui.rb +9 -1
  140. data/lib/chef/knife/node_run_list_remove.rb +11 -3
  141. data/lib/chef/knife/raw.rb +14 -3
  142. data/lib/chef/knife/role_env_run_list_add.rb +86 -0
  143. data/lib/chef/knife/role_env_run_list_clear.rb +55 -0
  144. data/lib/chef/knife/role_env_run_list_remove.rb +57 -0
  145. data/lib/chef/knife/role_env_run_list_replace.rb +59 -0
  146. data/lib/chef/knife/role_env_run_list_set.rb +70 -0
  147. data/lib/chef/knife/role_run_list_add.rb +86 -0
  148. data/lib/chef/knife/role_run_list_clear.rb +55 -0
  149. data/lib/chef/knife/role_run_list_remove.rb +57 -0
  150. data/lib/chef/knife/role_run_list_replace.rb +59 -0
  151. data/lib/chef/knife/role_run_list_set.rb +70 -0
  152. data/lib/chef/knife/search.rb +4 -4
  153. data/lib/chef/knife/serve.rb +3 -0
  154. data/lib/chef/knife/ssh.rb +1 -1
  155. data/lib/chef/knife/ssl_check.rb +2 -2
  156. data/lib/chef/knife/ssl_fetch.rb +14 -1
  157. data/lib/chef/log.rb +10 -1
  158. data/lib/chef/mixin/command.rb +1 -1
  159. data/lib/chef/mixin/command/windows.rb +1 -5
  160. data/lib/chef/mixin/get_source_from_package.rb +1 -0
  161. data/lib/chef/mixin/params_validate.rb +2 -2
  162. data/lib/chef/mixin/securable.rb +1 -7
  163. data/lib/chef/mixin/shell_out.rb +7 -1
  164. data/lib/chef/mixin/template.rb +2 -14
  165. data/lib/chef/mixin/why_run.rb +1 -1
  166. data/lib/chef/monkey_patches/net_http.rb +4 -0
  167. data/lib/chef/monologger.rb +0 -2
  168. data/lib/chef/node.rb +5 -2
  169. data/lib/chef/node/attribute.rb +11 -9
  170. data/lib/chef/node/attribute_collections.rb +8 -12
  171. data/lib/chef/node/immutable_collections.rb +4 -10
  172. data/lib/chef/org.rb +148 -0
  173. data/lib/chef/platform/provider_mapping.rb +3 -2
  174. data/lib/chef/platform/provider_priority_map.rb +2 -0
  175. data/lib/chef/platform/query_helpers.rb +0 -3
  176. data/lib/chef/policy_builder/policyfile.rb +51 -8
  177. data/lib/chef/provider/deploy.rb +1 -2
  178. data/lib/chef/provider/directory.rb +3 -3
  179. data/lib/chef/provider/dsc_script.rb +13 -7
  180. data/lib/chef/provider/env.rb +8 -8
  181. data/lib/chef/provider/execute.rb +55 -36
  182. data/lib/chef/provider/file.rb +8 -0
  183. data/lib/chef/provider/group.rb +2 -0
  184. data/lib/chef/provider/group/dscl.rb +3 -4
  185. data/lib/chef/provider/ifconfig.rb +25 -25
  186. data/lib/chef/provider/ifconfig/aix.rb +25 -27
  187. data/lib/chef/provider/lwrp_base.rb +1 -1
  188. data/lib/chef/provider/mount.rb +2 -2
  189. data/lib/chef/provider/mount/mount.rb +3 -4
  190. data/lib/chef/provider/mount/solaris.rb +1 -1
  191. data/lib/chef/provider/package.rb +297 -48
  192. data/lib/chef/provider/package/aix.rb +25 -30
  193. data/lib/chef/provider/package/apt.rb +63 -19
  194. data/lib/chef/provider/package/dpkg.rb +15 -16
  195. data/lib/chef/provider/package/macports.rb +7 -7
  196. data/lib/chef/provider/package/openbsd.rb +107 -0
  197. data/lib/chef/provider/package/pacman.rb +13 -15
  198. data/lib/chef/provider/package/portage.rb +3 -4
  199. data/lib/chef/provider/package/rpm.rb +28 -17
  200. data/lib/chef/provider/package/rubygems.rb +9 -9
  201. data/lib/chef/provider/package/solaris.rb +17 -21
  202. data/lib/chef/provider/package/windows/msi.rb +1 -1
  203. data/lib/chef/provider/package/yum-dump.py +2 -2
  204. data/lib/chef/provider/package/yum.rb +117 -51
  205. data/lib/chef/provider/package/zypper.rb +17 -18
  206. data/lib/chef/provider/powershell_script.rb +4 -4
  207. data/lib/chef/provider/registry_key.rb +2 -2
  208. data/lib/chef/provider/remote_directory.rb +1 -1
  209. data/lib/chef/provider/script.rb +25 -16
  210. data/lib/chef/provider/service.rb +1 -1
  211. data/lib/chef/provider/service/freebsd.rb +1 -1
  212. data/lib/chef/provider/service/openbsd.rb +216 -0
  213. data/lib/chef/provider/service/upstart.rb +1 -1
  214. data/lib/chef/provider/service/windows.rb +99 -1
  215. data/lib/chef/provider/user.rb +1 -1
  216. data/lib/chef/provider/user/dscl.rb +19 -4
  217. data/lib/chef/providers.rb +2 -0
  218. data/lib/chef/recipe.rb +11 -5
  219. data/lib/chef/request_id.rb +1 -1
  220. data/lib/chef/resource.rb +839 -444
  221. data/lib/chef/resource/chef_gem.rb +20 -3
  222. data/lib/chef/resource/conditional.rb +3 -14
  223. data/lib/chef/resource/dsc_script.rb +14 -0
  224. data/lib/chef/resource/execute.rb +14 -7
  225. data/lib/chef/resource/file.rb +14 -0
  226. data/lib/chef/resource/file/verification.rb +122 -0
  227. data/lib/chef/resource/ips_package.rb +1 -1
  228. data/lib/chef/resource/lwrp_base.rb +2 -11
  229. data/lib/chef/resource/macports_package.rb +2 -1
  230. data/lib/chef/resource/openbsd_package.rb +51 -0
  231. data/lib/chef/resource/package.rb +2 -2
  232. data/lib/chef/resource/paludis_package.rb +1 -1
  233. data/lib/chef/resource/reboot.rb +1 -1
  234. data/lib/chef/resource/remote_file.rb +1 -0
  235. data/lib/chef/resource/rpm_package.rb +9 -0
  236. data/lib/chef/resource/script.rb +11 -0
  237. data/lib/chef/resource/template.rb +2 -3
  238. data/lib/chef/resource/windows_package.rb +1 -1
  239. data/lib/chef/resource/windows_service.rb +18 -0
  240. data/lib/chef/resource_builder.rb +137 -0
  241. data/lib/chef/resource_definition.rb +1 -1
  242. data/lib/chef/resource_reporter.rb +1 -1
  243. data/lib/chef/resources.rb +1 -0
  244. data/lib/chef/role.rb +17 -4
  245. data/lib/chef/run_context.rb +10 -6
  246. data/lib/chef/search/query.rb +66 -87
  247. data/lib/chef/shell/ext.rb +2 -2
  248. data/lib/chef/util/diff.rb +1 -4
  249. data/lib/chef/util/dsc/configuration_generator.rb +30 -6
  250. data/lib/chef/util/dsc/lcm_output_parser.rb +7 -3
  251. data/lib/chef/util/dsc/local_configuration_manager.rb +8 -8
  252. data/lib/chef/util/file_edit.rb +2 -2
  253. data/lib/chef/util/path_helper.rb +1 -4
  254. data/lib/chef/util/windows/net_use.rb +3 -3
  255. data/lib/chef/version.rb +1 -1
  256. data/lib/chef/win32/api.rb +1 -0
  257. data/lib/chef/win32/api/security.rb +26 -0
  258. data/lib/chef/win32/file.rb +21 -0
  259. data/lib/chef/win32/security.rb +46 -0
  260. data/lib/chef/win32/security/token.rb +8 -0
  261. data/lib/chef/win32/version.rb +0 -4
  262. data/spec/data/recipes.tgz +0 -0
  263. data/spec/functional/application_spec.rb +1 -1
  264. data/spec/functional/audit/rspec_formatter_spec.rb +54 -0
  265. data/spec/functional/audit/runner_spec.rb +137 -0
  266. data/spec/functional/dsl/reboot_pending_spec.rb +10 -10
  267. data/spec/functional/dsl/registry_helper_spec.rb +6 -6
  268. data/spec/functional/event_loggers/windows_eventlog_spec.rb +5 -5
  269. data/spec/functional/file_content_management/deploy_strategies_spec.rb +12 -21
  270. data/spec/functional/http/simple_spec.rb +1 -1
  271. data/spec/functional/knife/cookbook_delete_spec.rb +24 -24
  272. data/spec/functional/knife/exec_spec.rb +2 -4
  273. data/spec/functional/knife/smoke_test.rb +1 -1
  274. data/spec/functional/knife/ssh_spec.rb +23 -23
  275. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +8 -8
  276. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  277. data/spec/functional/rebooter_spec.rb +1 -1
  278. data/spec/functional/resource/aix_service_spec.rb +3 -0
  279. data/spec/functional/resource/aixinit_service_spec.rb +3 -3
  280. data/spec/functional/resource/bash_spec.rb +88 -0
  281. data/spec/functional/resource/deploy_revision_spec.rb +99 -100
  282. data/spec/functional/resource/env_spec.rb +3 -3
  283. data/spec/functional/resource/execute_spec.rb +97 -63
  284. data/spec/functional/resource/file_spec.rb +7 -7
  285. data/spec/functional/resource/git_spec.rb +13 -13
  286. data/spec/functional/resource/group_spec.rb +28 -25
  287. data/spec/functional/resource/ifconfig_spec.rb +2 -2
  288. data/spec/functional/resource/link_spec.rb +77 -78
  289. data/spec/functional/resource/mount_spec.rb +5 -5
  290. data/spec/functional/resource/ohai_spec.rb +1 -1
  291. data/spec/functional/resource/package_spec.rb +22 -22
  292. data/spec/functional/resource/powershell_spec.rb +57 -42
  293. data/spec/functional/resource/reboot_spec.rb +2 -2
  294. data/spec/functional/resource/registry_spec.rb +91 -91
  295. data/spec/functional/resource/remote_directory_spec.rb +19 -19
  296. data/spec/functional/resource/remote_file_spec.rb +18 -18
  297. data/spec/functional/resource/template_spec.rb +4 -4
  298. data/spec/functional/resource/user/dscl_spec.rb +4 -4
  299. data/spec/functional/resource/user/useradd_spec.rb +64 -51
  300. data/spec/functional/resource/windows_service_spec.rb +98 -0
  301. data/spec/functional/run_lock_spec.rb +9 -9
  302. data/spec/functional/shell_spec.rb +3 -3
  303. data/spec/functional/tiny_server_spec.rb +12 -12
  304. data/spec/functional/util/path_helper_spec.rb +1 -1
  305. data/spec/functional/version_spec.rb +1 -1
  306. data/spec/functional/win32/registry_helper_spec.rb +125 -125
  307. data/spec/functional/win32/security_spec.rb +65 -2
  308. data/spec/functional/win32/service_manager_spec.rb +30 -84
  309. data/spec/functional/win32/versions_spec.rb +6 -6
  310. data/spec/integration/client/client_spec.rb +102 -9
  311. data/spec/integration/knife/chef_fs_data_store_spec.rb +12 -8
  312. data/spec/integration/knife/common_options_spec.rb +3 -3
  313. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
  314. data/spec/integration/knife/deps_spec.rb +4 -4
  315. data/spec/integration/knife/diff_spec.rb +6 -6
  316. data/spec/integration/knife/download_spec.rb +6 -6
  317. data/spec/integration/knife/list_spec.rb +2 -2
  318. data/spec/integration/knife/raw_spec.rb +5 -5
  319. data/spec/integration/knife/serve_spec.rb +3 -3
  320. data/spec/integration/knife/show_spec.rb +3 -3
  321. data/spec/integration/knife/upload_spec.rb +18 -18
  322. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  323. data/spec/integration/solo/solo_spec.rb +11 -12
  324. data/spec/spec_helper.rb +27 -15
  325. data/spec/stress/win32/file_spec.rb +4 -4
  326. data/spec/stress/win32/security_spec.rb +4 -4
  327. data/spec/support/chef_helpers.rb +3 -3
  328. data/spec/support/matchers/leak.rb +2 -2
  329. data/spec/support/mock/platform.rb +1 -1
  330. data/spec/support/pedant/Gemfile +3 -0
  331. data/spec/support/pedant/pedant_config.rb +9 -2
  332. data/spec/support/pedant/run_pedant.rb +15 -16
  333. data/spec/support/platform_helpers.rb +8 -12
  334. data/spec/support/shared/functional/directory_resource.rb +13 -13
  335. data/spec/support/shared/functional/file_resource.rb +83 -83
  336. data/spec/support/shared/functional/http.rb +1 -1
  337. data/spec/support/shared/functional/securable_resource.rb +64 -64
  338. data/spec/support/shared/functional/securable_resource_with_reporting.rb +43 -41
  339. data/spec/support/shared/functional/win32_service.rb +60 -0
  340. data/spec/support/shared/functional/windows_script.rb +8 -8
  341. data/spec/support/shared/integration/knife_support.rb +8 -5
  342. data/spec/support/shared/matchers/exit_with_code.rb +6 -2
  343. data/spec/support/shared/unit/api_error_inspector.rb +8 -8
  344. data/spec/support/shared/unit/execute_resource.rb +24 -20
  345. data/spec/support/shared/unit/file_system_support.rb +2 -2
  346. data/spec/support/shared/unit/platform_introspector.rb +21 -21
  347. data/spec/support/shared/unit/provider/file.rb +239 -210
  348. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +69 -69
  349. data/spec/support/shared/unit/script_resource.rb +40 -32
  350. data/spec/support/shared/unit/windows_script_resource.rb +8 -8
  351. data/spec/unit/api_client/registration_spec.rb +47 -47
  352. data/spec/unit/api_client_spec.rb +107 -69
  353. data/spec/unit/application/apply_spec.rb +31 -15
  354. data/spec/unit/application/client_spec.rb +146 -45
  355. data/spec/unit/application/knife_spec.rb +31 -31
  356. data/spec/unit/application/solo_spec.rb +59 -43
  357. data/spec/unit/application_spec.rb +109 -74
  358. data/spec/unit/audit/audit_event_proxy_spec.rb +311 -0
  359. data/spec/unit/audit/audit_reporter_spec.rb +393 -0
  360. data/spec/unit/audit/control_group_data_spec.rb +478 -0
  361. data/{lib/chef/monkey_patches/file.rb → spec/unit/audit/rspec_formatter_spec.rb} +11 -8
  362. data/spec/unit/audit/runner_spec.rb +135 -0
  363. data/spec/unit/chef_fs/config_spec.rb +52 -0
  364. data/spec/unit/chef_fs/diff_spec.rb +12 -12
  365. data/spec/unit/chef_fs/file_pattern_spec.rb +276 -277
  366. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +6 -6
  367. data/spec/unit/chef_fs/file_system_spec.rb +26 -13
  368. data/spec/unit/chef_fs/parallelizer.rb +87 -87
  369. data/spec/unit/chef_spec.rb +1 -1
  370. data/spec/unit/client_spec.rb +263 -97
  371. data/spec/unit/config_fetcher_spec.rb +13 -13
  372. data/spec/unit/config_spec.rb +105 -66
  373. data/spec/unit/cookbook/chefignore_spec.rb +6 -6
  374. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +3 -3
  375. data/spec/unit/cookbook/metadata_spec.rb +149 -149
  376. data/spec/unit/cookbook/syntax_check_spec.rb +36 -31
  377. data/spec/unit/cookbook_loader_spec.rb +62 -58
  378. data/spec/unit/cookbook_manifest_spec.rb +141 -468
  379. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +27 -27
  380. data/spec/unit/cookbook_spec.rb +15 -15
  381. data/spec/unit/cookbook_uploader_spec.rb +37 -3
  382. data/spec/unit/cookbook_version_file_specificity_spec.rb +554 -0
  383. data/spec/unit/cookbook_version_spec.rb +98 -240
  384. data/spec/unit/daemon_spec.rb +31 -31
  385. data/spec/unit/data_bag_item_spec.rb +121 -89
  386. data/spec/unit/data_bag_spec.rb +35 -35
  387. data/spec/unit/deprecation_spec.rb +27 -14
  388. data/spec/unit/digester_spec.rb +3 -3
  389. data/spec/unit/dsl/audit_spec.rb +43 -0
  390. data/spec/unit/dsl/data_query_spec.rb +1 -1
  391. data/spec/unit/dsl/platform_introspection_spec.rb +14 -14
  392. data/spec/unit/dsl/reboot_pending_spec.rb +18 -18
  393. data/spec/unit/dsl/regsitry_helper_spec.rb +6 -6
  394. data/spec/unit/encrypted_data_bag_item_spec.rb +58 -82
  395. data/spec/unit/environment_spec.rb +105 -105
  396. data/spec/unit/exceptions_spec.rb +47 -1
  397. data/spec/unit/file_access_control_spec.rb +62 -56
  398. data/spec/unit/file_cache_spec.rb +11 -11
  399. data/spec/unit/file_content_management/deploy/cp_spec.rb +2 -2
  400. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +10 -10
  401. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +23 -23
  402. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +14 -14
  403. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +12 -12
  404. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +1 -1
  405. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +16 -16
  406. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +4 -4
  407. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +103 -13
  408. data/spec/unit/guard_interpreter_spec.rb +41 -0
  409. data/spec/unit/handler/json_file_spec.rb +10 -10
  410. data/spec/unit/handler_spec.rb +39 -39
  411. data/spec/unit/http/basic_client_spec.rb +3 -3
  412. data/spec/unit/http/http_request_spec.rb +10 -10
  413. data/spec/unit/http/simple_spec.rb +3 -3
  414. data/spec/unit/http/ssl_policies_spec.rb +15 -15
  415. data/spec/unit/http/validate_content_length_spec.rb +18 -13
  416. data/spec/unit/http_spec.rb +16 -9
  417. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +153 -0
  418. data/spec/unit/knife/bootstrap/client_builder_spec.rb +178 -0
  419. data/spec/unit/knife/bootstrap_spec.rb +144 -91
  420. data/spec/unit/knife/client_bulk_delete_spec.rb +24 -24
  421. data/spec/unit/knife/client_create_spec.rb +57 -43
  422. data/spec/unit/knife/client_delete_spec.rb +15 -15
  423. data/spec/unit/knife/client_edit_spec.rb +4 -4
  424. data/spec/unit/knife/client_list_spec.rb +2 -2
  425. data/spec/unit/knife/client_reregister_spec.rb +9 -9
  426. data/spec/unit/knife/configure_client_spec.rb +20 -20
  427. data/spec/unit/knife/configure_spec.rb +85 -85
  428. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +15 -15
  429. data/spec/unit/knife/cookbook_create_spec.rb +59 -59
  430. data/spec/unit/knife/cookbook_delete_spec.rb +49 -49
  431. data/spec/unit/knife/cookbook_download_spec.rb +56 -56
  432. data/spec/unit/knife/cookbook_list_spec.rb +9 -9
  433. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +8 -8
  434. data/spec/unit/knife/cookbook_metadata_spec.rb +44 -44
  435. data/spec/unit/knife/cookbook_show_spec.rb +29 -29
  436. data/spec/unit/knife/cookbook_site_download_spec.rb +26 -26
  437. data/spec/unit/knife/cookbook_site_install_spec.rb +5 -1
  438. data/spec/unit/knife/cookbook_site_share_spec.rb +68 -59
  439. data/spec/unit/knife/cookbook_site_unshare_spec.rb +15 -15
  440. data/spec/unit/knife/cookbook_test_spec.rb +16 -16
  441. data/spec/unit/knife/cookbook_upload_spec.rb +105 -71
  442. data/spec/unit/knife/core/bootstrap_context_spec.rb +37 -22
  443. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +36 -36
  444. data/spec/unit/knife/core/object_loader_spec.rb +3 -3
  445. data/spec/unit/knife/core/subcommand_loader_spec.rb +107 -33
  446. data/spec/unit/knife/core/ui_spec.rb +84 -72
  447. data/spec/unit/knife/data_bag_from_file_spec.rb +1 -1
  448. data/spec/unit/knife/environment_compare_spec.rb +12 -12
  449. data/spec/unit/knife/environment_create_spec.rb +16 -16
  450. data/spec/unit/knife/environment_delete_spec.rb +14 -14
  451. data/spec/unit/knife/environment_edit_spec.rb +15 -15
  452. data/spec/unit/knife/environment_from_file_spec.rb +17 -17
  453. data/spec/unit/knife/environment_list_spec.rb +7 -7
  454. data/spec/unit/knife/environment_show_spec.rb +10 -10
  455. data/spec/unit/knife/index_rebuild_spec.rb +17 -17
  456. data/spec/unit/knife/knife_help.rb +24 -24
  457. data/spec/unit/knife/node_bulk_delete_spec.rb +14 -14
  458. data/spec/unit/knife/node_delete_spec.rb +11 -11
  459. data/spec/unit/knife/node_edit_spec.rb +17 -17
  460. data/spec/unit/knife/node_environment_set_spec.rb +12 -12
  461. data/spec/unit/knife/node_from_file_spec.rb +8 -8
  462. data/spec/unit/knife/node_list_spec.rb +9 -9
  463. data/spec/unit/knife/node_run_list_add_spec.rb +29 -29
  464. data/spec/unit/knife/node_run_list_remove_spec.rb +28 -13
  465. data/spec/unit/knife/node_run_list_set_spec.rb +27 -27
  466. data/spec/unit/knife/raw_spec.rb +43 -0
  467. data/spec/unit/knife/role_bulk_delete_spec.rb +12 -12
  468. data/spec/unit/knife/role_create_spec.rb +12 -12
  469. data/spec/unit/knife/role_delete_spec.rb +10 -10
  470. data/spec/unit/knife/role_edit_spec.rb +13 -13
  471. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -0
  472. data/spec/unit/knife/role_env_run_list_clear_spec.rb +100 -0
  473. data/spec/unit/knife/role_env_run_list_remove_spec.rb +108 -0
  474. data/spec/unit/knife/role_env_run_list_replace_spec.rb +108 -0
  475. data/spec/unit/knife/role_env_run_list_set_spec.rb +102 -0
  476. data/spec/unit/knife/role_from_file_spec.rb +10 -10
  477. data/spec/unit/knife/role_list_spec.rb +7 -7
  478. data/spec/unit/knife/role_run_list_add_spec.rb +179 -0
  479. data/spec/unit/knife/role_run_list_clear_spec.rb +90 -0
  480. data/spec/unit/knife/role_run_list_remove_spec.rb +98 -0
  481. data/spec/unit/knife/role_run_list_replace_spec.rb +101 -0
  482. data/spec/unit/knife/role_run_list_set_spec.rb +92 -0
  483. data/spec/unit/knife/ssh_spec.rb +66 -66
  484. data/spec/unit/knife/ssl_check_spec.rb +27 -27
  485. data/spec/unit/knife/ssl_fetch_spec.rb +45 -12
  486. data/spec/unit/knife/status_spec.rb +5 -5
  487. data/spec/unit/knife/tag_create_spec.rb +5 -5
  488. data/spec/unit/knife/tag_delete_spec.rb +6 -6
  489. data/spec/unit/knife/tag_list_spec.rb +4 -4
  490. data/spec/unit/knife/user_create_spec.rb +18 -18
  491. data/spec/unit/knife/user_delete_spec.rb +4 -4
  492. data/spec/unit/knife/user_edit_spec.rb +7 -7
  493. data/spec/unit/knife/user_list_spec.rb +2 -2
  494. data/spec/unit/knife/user_reregister_spec.rb +10 -10
  495. data/spec/unit/knife/user_show_spec.rb +5 -5
  496. data/spec/unit/knife_spec.rb +36 -36
  497. data/spec/unit/lwrp_spec.rb +63 -39
  498. data/spec/unit/mash_spec.rb +6 -6
  499. data/spec/unit/mixin/checksum_spec.rb +2 -2
  500. data/spec/unit/mixin/command_spec.rb +13 -13
  501. data/spec/unit/mixin/convert_to_class_name_spec.rb +6 -6
  502. data/spec/unit/mixin/deep_merge_spec.rb +49 -49
  503. data/spec/unit/mixin/deprecation_spec.rb +5 -5
  504. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +14 -14
  505. data/spec/unit/mixin/homebrew_user_spec.rb +3 -3
  506. data/spec/unit/mixin/params_validate_spec.rb +71 -71
  507. data/spec/unit/mixin/path_sanity_spec.rb +14 -14
  508. data/spec/unit/mixin/securable_spec.rb +177 -177
  509. data/spec/unit/mixin/shell_out_spec.rb +56 -27
  510. data/spec/unit/mixin/template_spec.rb +31 -31
  511. data/spec/unit/mixin/windows_architecture_helper_spec.rb +5 -5
  512. data/spec/unit/mixin/xml_escape_spec.rb +7 -7
  513. data/spec/unit/monkey_patches/uri_spec.rb +1 -1
  514. data/spec/unit/monologger_spec.rb +3 -3
  515. data/spec/unit/node/attribute_spec.rb +185 -136
  516. data/spec/unit/node/immutable_collections_spec.rb +22 -22
  517. data/spec/unit/node_spec.rb +210 -179
  518. data/spec/unit/org_spec.rb +196 -0
  519. data/spec/unit/platform/query_helpers_spec.rb +5 -5
  520. data/spec/unit/platform_spec.rb +46 -46
  521. data/spec/unit/policy_builder/expand_node_object_spec.rb +17 -18
  522. data/spec/unit/policy_builder/policyfile_spec.rb +159 -71
  523. data/spec/unit/provider/directory_spec.rb +5 -5
  524. data/spec/unit/provider/dsc_script_spec.rb +6 -6
  525. data/spec/unit/provider/env_spec.rb +27 -14
  526. data/spec/unit/provider/execute_spec.rb +139 -68
  527. data/spec/unit/provider/file/content_spec.rb +8 -8
  528. data/spec/unit/provider/git_spec.rb +10 -5
  529. data/spec/unit/provider/group/dscl_spec.rb +8 -11
  530. data/spec/unit/provider/group_spec.rb +13 -13
  531. data/spec/unit/provider/ifconfig/aix_spec.rb +3 -2
  532. data/spec/unit/provider/ifconfig/debian_spec.rb +19 -19
  533. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  534. data/spec/unit/provider/mdadm_spec.rb +2 -2
  535. data/spec/unit/provider/mount/aix_spec.rb +5 -5
  536. data/spec/unit/provider/mount/mount_spec.rb +22 -22
  537. data/spec/unit/provider/mount/solaris_spec.rb +20 -20
  538. data/spec/unit/provider/package/aix_spec.rb +23 -22
  539. data/spec/unit/provider/package/apt_spec.rb +23 -4
  540. data/spec/unit/provider/package/dpkg_spec.rb +14 -15
  541. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
  542. data/spec/unit/provider/package/freebsd/port_spec.rb +1 -1
  543. data/spec/unit/provider/package/ips_spec.rb +1 -2
  544. data/spec/unit/provider/package/macports_spec.rb +14 -14
  545. data/spec/unit/provider/package/openbsd_spec.rb +66 -0
  546. data/spec/unit/provider/package/pacman_spec.rb +15 -14
  547. data/spec/unit/provider/package/portage_spec.rb +11 -11
  548. data/spec/unit/provider/package/rpm_spec.rb +132 -84
  549. data/spec/unit/provider/package/rubygems_spec.rb +54 -25
  550. data/spec/unit/provider/package/solaris_spec.rb +22 -25
  551. data/spec/unit/provider/package/yum_spec.rb +237 -36
  552. data/spec/unit/provider/package/zypper_spec.rb +9 -12
  553. data/spec/unit/provider/package_spec.rb +276 -2
  554. data/spec/unit/provider/package_spec.rbe +0 -0
  555. data/spec/unit/provider/remote_directory_spec.rb +25 -25
  556. data/spec/unit/provider/remote_file/ftp_spec.rb +3 -3
  557. data/spec/unit/provider/route_spec.rb +3 -3
  558. data/spec/unit/provider/script_spec.rb +61 -43
  559. data/spec/unit/provider/service/aix_service_spec.rb +5 -5
  560. data/spec/unit/provider/service/arch_service_spec.rb +5 -5
  561. data/spec/unit/provider/service/debian_service_spec.rb +8 -8
  562. data/spec/unit/provider/service/freebsd_service_spec.rb +16 -2
  563. data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
  564. data/spec/unit/provider/service/init_service_spec.rb +5 -5
  565. data/spec/unit/provider/service/insserv_service_spec.rb +2 -2
  566. data/spec/unit/provider/service/invokercd_service_spec.rb +5 -5
  567. data/spec/unit/provider/service/macosx_spec.rb +7 -7
  568. data/spec/unit/provider/service/openbsd_service_spec.rb +543 -0
  569. data/spec/unit/provider/service/redhat_spec.rb +4 -4
  570. data/spec/unit/provider/service/simple_service_spec.rb +2 -2
  571. data/spec/unit/provider/service/solaris_smf_service_spec.rb +14 -14
  572. data/spec/unit/provider/service/systemd_service_spec.rb +15 -7
  573. data/spec/unit/provider/service/upstart_service_spec.rb +4 -4
  574. data/spec/unit/provider/service/windows_spec.rb +119 -25
  575. data/spec/unit/provider/service_spec.rb +1 -1
  576. data/spec/unit/provider/user/dscl_spec.rb +38 -30
  577. data/spec/unit/provider/user_spec.rb +1 -1
  578. data/spec/unit/provider_resolver_spec.rb +7 -7
  579. data/spec/unit/provider_spec.rb +23 -23
  580. data/spec/unit/recipe_spec.rb +194 -83
  581. data/spec/unit/registry_helper_spec.rb +143 -143
  582. data/spec/unit/resource/chef_gem_spec.rb +117 -3
  583. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
  584. data/spec/unit/resource/conditional_spec.rb +56 -15
  585. data/spec/unit/resource/deploy_spec.rb +2 -2
  586. data/spec/unit/resource/dsc_script_spec.rb +32 -0
  587. data/spec/unit/resource/execute_spec.rb +4 -0
  588. data/spec/unit/resource/file/verification_spec.rb +111 -0
  589. data/spec/unit/resource/file_spec.rb +14 -0
  590. data/spec/unit/resource/openbsd_package_spec.rb +49 -0
  591. data/spec/unit/resource/remote_file_spec.rb +12 -12
  592. data/spec/unit/resource/resource_notification_spec.rb +18 -18
  593. data/spec/unit/resource/rpm_package_spec.rb +12 -0
  594. data/spec/unit/resource/scm_spec.rb +4 -4
  595. data/spec/unit/resource/script_spec.rb +3 -5
  596. data/spec/unit/resource/subversion_spec.rb +1 -1
  597. data/spec/unit/resource_builder_spec.rb +1 -0
  598. data/spec/unit/resource_collection/resource_list_spec.rb +2 -2
  599. data/spec/unit/resource_collection/resource_set_spec.rb +3 -3
  600. data/spec/unit/resource_collection/stepable_iterator_spec.rb +24 -24
  601. data/spec/unit/resource_collection_spec.rb +52 -52
  602. data/spec/unit/resource_definition_spec.rb +1 -1
  603. data/spec/unit/resource_reporter_spec.rb +118 -118
  604. data/spec/unit/resource_spec.rb +131 -125
  605. data/spec/unit/rest/auth_credentials_spec.rb +73 -73
  606. data/spec/unit/rest_spec.rb +12 -12
  607. data/spec/unit/role_spec.rb +85 -84
  608. data/spec/unit/run_context/cookbook_compiler_spec.rb +18 -18
  609. data/spec/unit/run_context_spec.rb +39 -68
  610. data/spec/unit/run_list/run_list_expansion_spec.rb +21 -21
  611. data/spec/unit/run_list/run_list_item_spec.rb +28 -28
  612. data/spec/unit/run_list/versioned_recipe_list_spec.rb +14 -14
  613. data/spec/unit/run_list_spec.rb +55 -55
  614. data/spec/unit/run_lock_spec.rb +14 -14
  615. data/spec/unit/run_status_spec.rb +24 -24
  616. data/spec/unit/scan_access_control_spec.rb +23 -23
  617. data/spec/unit/search/query_spec.rb +54 -66
  618. data/spec/unit/shell/model_wrapper_spec.rb +13 -13
  619. data/spec/unit/shell/shell_ext_spec.rb +32 -32
  620. data/spec/unit/shell/shell_session_spec.rb +24 -24
  621. data/spec/unit/shell_out_spec.rb +4 -4
  622. data/spec/unit/shell_spec.rb +27 -27
  623. data/spec/unit/user_spec.rb +50 -50
  624. data/spec/unit/util/backup_spec.rb +32 -32
  625. data/spec/unit/util/diff_spec.rb +31 -31
  626. data/spec/unit/util/dsc/configuration_generator_spec.rb +38 -16
  627. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +21 -26
  628. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +10 -10
  629. data/spec/unit/util/editor_spec.rb +10 -10
  630. data/spec/unit/util/file_edit_spec.rb +10 -10
  631. data/spec/unit/util/path_helper_spec.rb +38 -46
  632. data/spec/unit/util/powershell/cmdlet_spec.rb +9 -9
  633. data/spec/unit/util/selinux_spec.rb +30 -30
  634. data/spec/unit/util/threaded_job_queue_spec.rb +6 -6
  635. data/spec/unit/version/platform_spec.rb +5 -5
  636. data/spec/unit/version_class_spec.rb +15 -15
  637. data/spec/unit/version_constraint/platform_spec.rb +7 -7
  638. data/spec/unit/version_constraint_spec.rb +43 -43
  639. data/spec/unit/windows_service_spec.rb +15 -15
  640. data/spec/unit/workstation_config_loader_spec.rb +2 -2
  641. data/tasks/rspec.rb +16 -18
  642. metadata +126 -49
  643. data/bin/shef +0 -35
  644. data/lib/chef/application/agent.rb +0 -18
  645. data/lib/chef/monkey_patches/fileutils.rb +0 -65
  646. data/lib/chef/monkey_patches/numeric.rb +0 -15
  647. data/lib/chef/monkey_patches/object.rb +0 -9
  648. data/lib/chef/monkey_patches/pathname.rb +0 -32
  649. data/lib/chef/monkey_patches/regexp.rb +0 -34
  650. data/lib/chef/monkey_patches/securerandom.rb +0 -44
  651. data/lib/chef/monkey_patches/string.rb +0 -49
  652. data/lib/chef/monkey_patches/tempfile.rb +0 -64
  653. data/lib/chef/monkey_patches/uri.rb +0 -70
@@ -0,0 +1,37 @@
1
+ #
2
+ # Author:: Serdar Sutay (<serdar@chef.io>)
3
+ # Copyright:: Copyright (c) 2014 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'rspec/core'
20
+
21
+ class Chef
22
+ class Audit
23
+ class RspecFormatter < RSpec::Core::Formatters::DocumentationFormatter
24
+ RSpec::Core::Formatters.register self, :close
25
+
26
+ # @api public
27
+ #
28
+ # Invoked at the very end, `close` allows the formatter to clean
29
+ # up resources, e.g. open streams, etc.
30
+ #
31
+ # @param _notification [NullNotification] (Ignored)
32
+ def close(_notification)
33
+ # Normally Rspec closes the streams it's given. We don't want it for Chef.
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,178 @@
1
+ #
2
+ # Author:: Claire McQuin (<claire@getchef.com>)
3
+ # Copyright:: Copyright (c) 2014 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ class Chef
20
+ class Audit
21
+ class Runner
22
+
23
+ attr_reader :run_context
24
+ private :run_context
25
+
26
+ def initialize(run_context)
27
+ @run_context = run_context
28
+ end
29
+
30
+ def run
31
+ setup
32
+ register_control_groups
33
+ do_run
34
+ end
35
+
36
+ def failed?
37
+ RSpec.world.reporter.failed_examples.size > 0
38
+ end
39
+
40
+ def num_failed
41
+ RSpec.world.reporter.failed_examples.size
42
+ end
43
+
44
+ def num_total
45
+ RSpec.world.reporter.examples.size
46
+ end
47
+
48
+ private
49
+ # Prepare to run audits:
50
+ # - Require files
51
+ # - Configure RSpec
52
+ # - Configure Specinfra/Serverspec
53
+ def setup
54
+ require_deps
55
+ configure_rspec
56
+ configure_specinfra
57
+ end
58
+
59
+ # RSpec uses a global configuration object, RSpec.configuration. We found
60
+ # there was interference between the configuration for audit-mode and
61
+ # the configuration for our own spec tests in these cases:
62
+ # 1. Specinfra and Serverspec modify RSpec.configuration when loading.
63
+ # 2. Setting output/error streams.
64
+ # 3. Adding formatters.
65
+ # 4. Defining example group aliases.
66
+ #
67
+ # Moreover, Serverspec loads its DSL methods into the global namespace,
68
+ # which causes conflicts with the Chef namespace for resources and packages.
69
+ #
70
+ # We wait until we're in the audit-phase of the chef-client run to load
71
+ # these files. This helps with the namespacing problems we saw, and
72
+ # prevents Specinfra and Serverspec from modifying the RSpec configuration
73
+ # used by our spec tests.
74
+ def require_deps
75
+ require 'rspec'
76
+ require 'rspec/its'
77
+ require 'specinfra'
78
+ require 'serverspec/helper'
79
+ require 'serverspec/matcher'
80
+ require 'serverspec/subject'
81
+ require 'chef/audit/audit_event_proxy'
82
+ require 'chef/audit/rspec_formatter'
83
+ end
84
+
85
+ # Configure RSpec just the way we like it:
86
+ # - Set location of error and output streams
87
+ # - Add custom audit-mode formatters
88
+ # - Explicitly disable :should syntax
89
+ # - Set :color option according to chef config
90
+ # - Disable exposure of global DSL
91
+ def configure_rspec
92
+ set_streams
93
+ add_formatters
94
+ disable_should_syntax
95
+
96
+ RSpec.configure do |c|
97
+ c.color = Chef::Config[:color]
98
+ c.expose_dsl_globally = false
99
+ end
100
+ end
101
+
102
+ # Set the error and output streams which audit-mode will use to report
103
+ # human-readable audit information.
104
+ #
105
+ # This should always be called before #add_formatters. RSpec won't allow
106
+ # the output stream to be changed for a formatter once the formatter has
107
+ # been added.
108
+ def set_streams
109
+ RSpec.configuration.output_stream = Chef::Config[:log_location]
110
+ RSpec.configuration.error_stream = Chef::Config[:log_location]
111
+ end
112
+
113
+ # Add formatters which we use to
114
+ # 1. Output human-readable data to the output stream,
115
+ # 2. Collect JSON data to send back to the analytics server.
116
+ def add_formatters
117
+ RSpec.configuration.add_formatter(Chef::Audit::AuditEventProxy)
118
+ RSpec.configuration.add_formatter(Chef::Audit::RspecFormatter)
119
+ Chef::Audit::AuditEventProxy.events = run_context.events
120
+ end
121
+
122
+ # Audit-mode uses RSpec 3. :should syntax is deprecated by default in
123
+ # RSpec 3, so we explicitly disable it here.
124
+ #
125
+ # This can be removed once :should is removed from RSpec.
126
+ def disable_should_syntax
127
+ RSpec.configure do |config|
128
+ config.expect_with :rspec do |c|
129
+ c.syntax = :expect
130
+ end
131
+ end
132
+ end
133
+
134
+ # Set up the backend for Specinfra/Serverspec. :exec is the local system.
135
+ def configure_specinfra
136
+ Specinfra.configuration.backend = :exec
137
+ end
138
+
139
+ # Iterates through the control groups registered to this run_context, builds an
140
+ # example group (RSpec::Core::ExampleGroup) object per control group, and
141
+ # registers the group with the RSpec.world.
142
+ #
143
+ # We could just store an array of example groups and not use RSpec.world,
144
+ # but it may be useful later if we decide to apply our own ordering scheme
145
+ # or use example group filters.
146
+ def register_control_groups
147
+ add_example_group_methods
148
+ run_context.audits.each do |name, group|
149
+ ctl_grp = RSpec::Core::ExampleGroup.__control_group__(*group.args, &group.block)
150
+ RSpec.world.register(ctl_grp)
151
+ end
152
+ end
153
+
154
+ # Add example group method aliases to RSpec.
155
+ #
156
+ # __control_group__: Used internally to create example groups from the control
157
+ # groups saved in the run_context.
158
+ # control: Used within the context of a control group block, like RSpec's
159
+ # describe or context.
160
+ def add_example_group_methods
161
+ RSpec::Core::ExampleGroup.define_example_group_method :__control_group__
162
+ RSpec::Core::ExampleGroup.define_example_group_method :control
163
+ end
164
+
165
+ # Run the audits!
166
+ def do_run
167
+ # RSpec::Core::Runner wants to be initialized with an
168
+ # RSpec::Core::ConfigurationOptions object, which is used to process
169
+ # command line configuration arguments. We directly fiddle with the
170
+ # internal RSpec configuration object, so we give nil here and let
171
+ # RSpec pick up its own configuration and world.
172
+ runner = RSpec::Core::Runner.new(nil)
173
+ runner.run_specs(RSpec.world.ordered_example_groups)
174
+ end
175
+
176
+ end
177
+ end
178
+ end
@@ -16,6 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
+ require 'chef/cookbook_manifest'
19
20
  require 'chef_zero/data_store/memory_store'
20
21
  require 'chef_zero/data_store/data_already_exists_error'
21
22
  require 'chef_zero/data_store/data_not_found_error'
@@ -147,7 +148,7 @@ class Chef
147
148
  # get /cookbooks/NAME/version
148
149
  result = nil
149
150
  begin
150
- result = entry.chef_object.to_hash
151
+ result = Chef::CookbookManifest.new(entry.chef_object).to_hash
151
152
  rescue Chef::ChefFS::FileSystem::NotFoundError => e
152
153
  raise ChefZero::DataStore::DataNotFoundError.new(to_zero_path(e.entry), e)
153
154
  end
@@ -369,6 +370,11 @@ class Chef
369
370
  if path.length >= 3
370
371
  path[2] = "#{path[2]}.json"
371
372
  end
373
+ elsif path[0] == 'policies'
374
+ path = path.dup
375
+ if path.length >= 3
376
+ path[2] = "#{path[2]}.json"
377
+ end
372
378
  elsif path[0] == 'cookbooks'
373
379
  if path.length == 2
374
380
  raise ChefZero::DataStore::DataNotFoundError.new(path)
@@ -445,10 +451,13 @@ class Chef
445
451
  def with_dir(path)
446
452
  # Do not automatically create data bags
447
453
  create = !(path[0] == 'data' && path.size >= 2)
454
+
448
455
  begin
449
456
  yield get_dir(_to_chef_fs_path(path), create)
450
457
  rescue Chef::ChefFS::FileSystem::NotFoundError => e
451
- raise ChefZero::DataStore::DataNotFoundError.new(to_zero_path(e.entry), e)
458
+ err = ChefZero::DataStore::DataNotFoundError.new(to_zero_path(e.entry), e)
459
+ err.set_backtrace(e.backtrace)
460
+ raise err
452
461
  end
453
462
  end
454
463
 
@@ -26,6 +26,25 @@ class Chef
26
26
  # objects representing the server and local repository, respectively).
27
27
  #
28
28
  class Config
29
+
30
+ # Not all of our object types pluralize by adding an 's', so we map them
31
+ # out here:
32
+ INFLECTIONS = {
33
+ "acls" => "acl",
34
+ "clients" => "client",
35
+ "cookbooks" => "cookbook",
36
+ "containers" => "container",
37
+ "data_bags" => "data_bag",
38
+ "environments" => "environment",
39
+ "groups" => "group",
40
+ "nodes" => "node",
41
+ "roles" => "role",
42
+ "users" => "user",
43
+ "policies" => "policy"
44
+ }
45
+ INFLECTIONS.each { |k,v| k.freeze; v.freeze }
46
+ INFLECTIONS.freeze
47
+
29
48
  #
30
49
  # Create a new Config object which can produce a chef_fs and local_fs.
31
50
  #
@@ -215,14 +234,16 @@ class Chef
215
234
  result = {}
216
235
  case @chef_config[:repo_mode]
217
236
  when 'static'
218
- object_names = %w(cookbooks data_bags environments roles)
237
+ object_names = %w(cookbooks data_bags environments roles policies)
219
238
  when 'hosted_everything'
220
- object_names = %w(acls clients cookbooks containers data_bags environments groups nodes roles)
239
+ object_names = %w(acls clients cookbooks containers data_bags environments groups nodes roles policies)
221
240
  else
222
- object_names = %w(clients cookbooks data_bags environments nodes roles users)
241
+ object_names = %w(clients cookbooks data_bags environments nodes roles users policies)
223
242
  end
224
243
  object_names.each do |object_name|
225
- variable_name = "#{object_name[0..-2]}_path" # cookbooks -> cookbook_path
244
+ # cookbooks -> cookbook_path
245
+ singular_name = INFLECTIONS[object_name] or raise "Unknown object name #{object_name}"
246
+ variable_name = "#{singular_name}_path"
226
247
  paths = Array(@chef_config[variable_name]).flatten
227
248
  result[object_name] = paths.map { |path| File.expand_path(path) }
228
249
  end
@@ -0,0 +1,15 @@
1
+ require 'chef/chef_fs/data_handler/data_handler_base'
2
+
3
+ class Chef
4
+ module ChefFS
5
+ module DataHandler
6
+ class PolicyDataHandler < DataHandlerBase
7
+
8
+ def normalize(policy, entry)
9
+ policy
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+
@@ -8,6 +8,7 @@ class Chef
8
8
  normalize_hash(user, {
9
9
  'name' => remove_dot_json(entry.name),
10
10
  'username' => remove_dot_json(entry.name),
11
+ 'display_name' => remove_dot_json(entry.name),
11
12
  'admin' => false,
12
13
  'json_class' => 'Chef::WebUIUser',
13
14
  'chef_type' => 'webui_user',
@@ -379,7 +379,7 @@ class Chef
379
379
  should_copy = true
380
380
  src_value = nil
381
381
  else
382
- are_same, src_value, dest_value = compare(src_entry, dest_entry)
382
+ are_same, src_value, _dest_value = compare(src_entry, dest_entry)
383
383
  should_copy = !are_same
384
384
  end
385
385
  if should_copy
@@ -40,6 +40,11 @@ class Chef
40
40
  true
41
41
  end
42
42
 
43
+ # An empty children array is an empty dir
44
+ def empty?
45
+ children.empty?
46
+ end
47
+
43
48
  # Abstract: children
44
49
  end
45
50
  end
@@ -53,7 +53,7 @@ class Chef
53
53
 
54
54
  # Check chefignore
55
55
  ignorer = parent
56
- begin
56
+ loop do
57
57
  if ignorer.is_a?(ChefRepositoryFileSystemCookbooksDir)
58
58
  # Grab the path from entry to child
59
59
  path_to_child = name
@@ -66,7 +66,8 @@ class Chef
66
66
  return !ignorer.chefignore || !ignorer.chefignore.ignored?(path_to_child)
67
67
  end
68
68
  ignorer = ignorer.parent
69
- end while ignorer
69
+ break unless ignorer
70
+ end
70
71
 
71
72
  true
72
73
  end
@@ -1,5 +1,5 @@
1
- #--
2
- # Author:: Joshua Timberman (<joshua@opscode.com>)
1
+ #
2
+ # Author:: John Keiser (<jkeiser@opscode.com>)
3
3
  # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
@@ -16,4 +16,23 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require 'chef/shell/ext'
19
+ require 'chef/chef_fs/file_system/chef_repository_file_system_entry'
20
+ require 'chef/chef_fs/data_handler/policy_data_handler'
21
+
22
+ class Chef
23
+ module ChefFS
24
+ module FileSystem
25
+
26
+ class ChefRepositoryFileSystemPoliciesDir < ChefRepositoryFileSystemEntry
27
+ def initialize(name, parent, path = nil)
28
+ super(name, parent, path, Chef::ChefFS::DataHandler::PolicyDataHandler.new)
29
+ end
30
+
31
+ def can_have_child?(name, is_dir)
32
+ is_dir && !name.start_with?('.')
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
@@ -21,6 +21,7 @@ require 'chef/chef_fs/file_system/chef_repository_file_system_entry'
21
21
  require 'chef/chef_fs/file_system/chef_repository_file_system_acls_dir'
22
22
  require 'chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir'
23
23
  require 'chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir'
24
+ require 'chef/chef_fs/file_system/chef_repository_file_system_policies_dir'
24
25
  require 'chef/chef_fs/file_system/multiplexed_dir'
25
26
  require 'chef/chef_fs/data_handler/client_data_handler'
26
27
  require 'chef/chef_fs/data_handler/environment_data_handler'
@@ -33,6 +34,7 @@ require 'chef/chef_fs/data_handler/container_data_handler'
33
34
  class Chef
34
35
  module ChefFS
35
36
  module FileSystem
37
+
36
38
  #
37
39
  # Represents the root of a local Chef repository, with directories for
38
40
  # nodes, cookbooks, roles, etc. under it.
@@ -157,6 +159,8 @@ class Chef
157
159
  dirs = paths.map { |path| ChefRepositoryFileSystemCookbooksDir.new(name, self, path) }
158
160
  elsif name == 'data_bags'
159
161
  dirs = paths.map { |path| ChefRepositoryFileSystemDataBagsDir.new(name, self, path) }
162
+ elsif name == 'policies'
163
+ dirs = paths.map { |path| ChefRepositoryFileSystemPoliciesDir.new(name, self, path) }
160
164
  elsif name == 'acls'
161
165
  dirs = paths.map { |path| ChefRepositoryFileSystemAclsDir.new(name, self, path) }
162
166
  else
@@ -25,6 +25,7 @@ require 'chef/log'
25
25
  require 'chef/rest'
26
26
  require 'chef/api_client'
27
27
  require 'chef/api_client/registration'
28
+ require 'chef/audit/runner'
28
29
  require 'chef/node'
29
30
  require 'chef/role'
30
31
  require 'chef/file_cache'
@@ -38,11 +39,13 @@ require 'chef/cookbook/remote_file_vendor'
38
39
  require 'chef/event_dispatch/dispatcher'
39
40
  require 'chef/event_loggers/base'
40
41
  require 'chef/event_loggers/windows_eventlog'
42
+ require 'chef/exceptions'
41
43
  require 'chef/formatters/base'
42
44
  require 'chef/formatters/doc'
43
45
  require 'chef/formatters/minimal'
44
46
  require 'chef/version'
45
47
  require 'chef/resource_reporter'
48
+ require 'chef/audit/audit_reporter'
46
49
  require 'chef/run_lock'
47
50
  require 'chef/policy_builder'
48
51
  require 'chef/request_id'
@@ -209,6 +212,17 @@ class Chef
209
212
  end
210
213
  end
211
214
 
215
+ # Resource repoters send event information back to the chef server for processing.
216
+ # Can only be called after we have a @rest object
217
+ def register_reporters
218
+ [
219
+ Chef::ResourceReporter.new(rest),
220
+ Chef::Audit::AuditReporter.new(rest)
221
+ ].each do |r|
222
+ events.register(r)
223
+ end
224
+ end
225
+
212
226
  # Instantiates a Chef::Node object, possibly loading the node's prior state
213
227
  # when using chef-client. Delegates to policy_builder
214
228
  #
@@ -246,7 +260,6 @@ class Chef
246
260
  @policy_builder ||= Chef::PolicyBuilder.strategy.new(node_name, ohai.data, json_attribs, @override_runlist, events)
247
261
  end
248
262
 
249
-
250
263
  def save_updated_node
251
264
  if Chef::Config[:solo]
252
265
  # nothing to do
@@ -260,6 +273,7 @@ class Chef
260
273
 
261
274
  def run_ohai
262
275
  ohai.all_plugins
276
+ @events.ohai_completed(node)
263
277
  end
264
278
 
265
279
  def node_name
@@ -295,8 +309,7 @@ class Chef
295
309
  end
296
310
  # We now have the client key, and should use it from now on.
297
311
  @rest = Chef::REST.new(config[:chef_server_url], client_name, config[:client_key])
298
- @resource_reporter = Chef::ResourceReporter.new(@rest)
299
- @events.register(@resource_reporter)
312
+ register_reporters
300
313
  rescue Exception => e
301
314
  # TODO: munge exception so a semantic failure message can be given to the
302
315
  # user
@@ -307,18 +320,56 @@ class Chef
307
320
  # Converges the node.
308
321
  #
309
322
  # === Returns
310
- # true:: Always returns true
323
+ # The thrown exception, if there was one. If this returns nil the converge was successful.
311
324
  def converge(run_context)
312
- @events.converge_start(run_context)
313
- Chef::Log.debug("Converging node #{node_name}")
314
- @runner = Chef::Runner.new(run_context)
315
- runner.converge
316
- @events.converge_complete
317
- true
318
- rescue Exception
319
- # TODO: should this be a separate #converge_failed(exception) method?
320
- @events.converge_complete
321
- raise
325
+ converge_exception = nil
326
+ catch(:end_client_run_early) do
327
+ begin
328
+ @events.converge_start(run_context)
329
+ Chef::Log.debug("Converging node #{node_name}")
330
+ @runner = Chef::Runner.new(run_context)
331
+ runner.converge
332
+ @events.converge_complete
333
+ rescue Exception => e
334
+ Chef::Log.error("Converge failed with error message #{e.message}")
335
+ @events.converge_failed(e)
336
+ converge_exception = e
337
+ end
338
+ end
339
+ converge_exception
340
+ end
341
+
342
+ # We don't want to change the old API on the `converge` method to have it perform
343
+ # saving. So we wrap it in this method.
344
+ def converge_and_save(run_context)
345
+ converge_exception = converge(run_context)
346
+ unless converge_exception
347
+ begin
348
+ save_updated_node
349
+ rescue Exception => e
350
+ converge_exception = e
351
+ end
352
+ end
353
+ converge_exception
354
+ end
355
+
356
+ def run_audits(run_context)
357
+ audit_exception = nil
358
+ begin
359
+ @events.audit_phase_start(run_status)
360
+ Chef::Log.info("Starting audit phase")
361
+ auditor = Chef::Audit::Runner.new(run_context)
362
+ auditor.run
363
+ if auditor.failed?
364
+ raise Chef::Exceptions::AuditsFailed.new(auditor.num_failed, auditor.num_total)
365
+ end
366
+ @events.audit_phase_complete
367
+ rescue Exception => e
368
+ Chef::Log.error("Audit phase failed with error message: #{e.message}")
369
+ @events.audit_phase_failed(e)
370
+ audit_exception = e
371
+ end
372
+ audit_exception
322
373
  end
323
374
 
324
375
  # Expands the run list. Delegates to the policy_builder.
@@ -333,7 +384,6 @@ class Chef
333
384
  policy_builder.expand_run_list
334
385
  end
335
386
 
336
-
337
387
  def do_windows_admin_check
338
388
  if Chef::Platform.windows?
339
389
  Chef::Log.debug("Checking for administrator privileges....")
@@ -370,8 +420,6 @@ class Chef
370
420
  begin
371
421
  runlock.save_pid
372
422
 
373
- check_ssl_config
374
-
375
423
  request_id = Chef::RequestID.instance.request_id
376
424
  run_context = nil
377
425
  @events.run_start(Chef::VERSION)
@@ -380,7 +428,7 @@ class Chef
380
428
  Chef::Log.debug("Chef-client request_id: #{request_id}")
381
429
  enforce_path_sanity
382
430
  run_ohai
383
- @events.ohai_completed(node)
431
+
384
432
  register unless Chef::Config[:solo]
385
433
 
386
434
  load_node
@@ -396,11 +444,22 @@ class Chef
396
444
 
397
445
  run_context = setup_run_context
398
446
 
399
- catch(:end_client_run_early) do
400
- converge(run_context)
447
+ if Chef::Config[:audit_mode] != :audit_only
448
+ converge_error = converge_and_save(run_context)
449
+ end
450
+
451
+ if Chef::Config[:why_run] == true
452
+ # why_run should probably be renamed to why_converge
453
+ Chef::Log.debug("Not running audits in 'why_run' mode - this mode is used to see potential converge changes")
454
+ elsif Chef::Config[:audit_mode] != :disabled
455
+ audit_error = run_audits(run_context)
401
456
  end
402
457
 
403
- save_updated_node
458
+ if converge_error || audit_error
459
+ e = Chef::Exceptions::RunFailedWrappingError.new(converge_error, audit_error)
460
+ e.fill_backtrace
461
+ raise e
462
+ end
404
463
 
405
464
  run_status.stop_clock
406
465
  Chef::Log.info("Chef Run complete in #{run_status.elapsed_time} seconds")
@@ -411,6 +470,7 @@ class Chef
411
470
  Chef::Platform::Rebooter.reboot_if_needed!(node)
412
471
 
413
472
  true
473
+
414
474
  rescue Exception => e
415
475
  # CHEF-3336: Send the error first in case something goes wrong below and we don't know why
416
476
  Chef::Log.debug("Re-raising exception: #{e.class} - #{e.message}\n#{e.backtrace.join("\n ")}")
@@ -468,37 +528,6 @@ class Chef
468
528
  Chef::ReservedNames::Win32::Security.has_admin_privileges?
469
529
  end
470
530
 
471
- def check_ssl_config
472
- if Chef::Config[:ssl_verify_mode] == :verify_none and !Chef::Config[:verify_api_cert]
473
- Chef::Log.warn(<<-WARN)
474
-
475
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
476
- SSL validation of HTTPS requests is disabled. HTTPS connections are still
477
- encrypted, but chef is not able to detect forged replies or man in the middle
478
- attacks.
479
-
480
- To fix this issue add an entry like this to your configuration file:
481
-
482
- ```
483
- # Verify all HTTPS connections (recommended)
484
- ssl_verify_mode :verify_peer
485
-
486
- # OR, Verify only connections to chef-server
487
- verify_api_cert true
488
- ```
489
-
490
- To check your SSL configuration, or troubleshoot errors, you can use the
491
- `knife ssl check` command like so:
492
-
493
- ```
494
- knife ssl check -c #{Chef::Config.config_file}
495
- ```
496
-
497
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
498
- WARN
499
- end
500
- end
501
-
502
531
  end
503
532
  end
504
533