chef 12.10.24-universal-mingw32 → 12.11.18-universal-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 (525) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +3 -38
  3. data/Gemfile +6 -11
  4. data/LICENSE +201 -201
  5. data/README.md +11 -1
  6. data/VERSION +1 -1
  7. data/acceptance/.bundle/config +2 -0
  8. data/acceptance/Gemfile.lock +27 -26
  9. data/acceptance/basics/.kitchen/logs/chef-current-install-ubuntu-1404.log +2 -0
  10. data/acceptance/basics/.kitchen/logs/kitchen.log +3 -0
  11. data/acceptance/data-collector/.acceptance/acceptance-cookbook/.gitignore +2 -0
  12. data/acceptance/data-collector/.acceptance/acceptance-cookbook/metadata.rb +3 -0
  13. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/destroy.rb +2 -0
  14. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/provision.rb +2 -0
  15. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/verify.rb +2 -0
  16. data/acceptance/data-collector/.acceptance/data-collector-test/.gitignore +16 -0
  17. data/acceptance/data-collector/.acceptance/data-collector-test/Berksfile +3 -0
  18. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb +85 -0
  19. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/apigemfile +3 -0
  20. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-both-mode.rb +4 -0
  21. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-client-mode.rb +4 -0
  22. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-no-endpoint.rb +2 -0
  23. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-solo-mode.rb +4 -0
  24. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/config.ru +2 -0
  25. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +7 -0
  26. data/acceptance/data-collector/.acceptance/data-collector-test/recipes/default.rb +38 -0
  27. data/acceptance/data-collector/.kitchen.yml +9 -0
  28. data/acceptance/data-collector/Berksfile +3 -0
  29. data/acceptance/data-collector/Berksfile.lock +6 -0
  30. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +251 -0
  31. data/acceptance/fips/.kitchen/logs/fips-integration-centos-6.log +3 -0
  32. data/acceptance/fips/.kitchen/logs/fips-integration-windows-2012r2.log +3 -0
  33. data/acceptance/fips/.kitchen/logs/fips-unit-functional-centos-6.log +3 -0
  34. data/acceptance/fips/.kitchen/logs/fips-unit-functional-windows-2012r2.log +3 -0
  35. data/acceptance/fips/.kitchen/logs/kitchen.log +6 -0
  36. data/acceptance/fips/test/integration/fips-integration/serverspec/fips-integration_spec.rb +2 -1
  37. data/acceptance/top-cookbooks/.kitchen.docker.yml +1 -4
  38. data/acceptance/trivial/.kitchen/logs/chef-current-install-windows-2012r2.log +2 -0
  39. data/acceptance/trivial/.kitchen/logs/kitchen.log +3 -0
  40. data/acceptance/windows-service/.kitchen/logs/chef-windows-service-windows-2012r2.log +2 -0
  41. data/acceptance/windows-service/.kitchen/logs/kitchen.log +3 -0
  42. data/bin/chef-apply +0 -0
  43. data/bin/chef-client +0 -0
  44. data/bin/chef-service-manager +0 -0
  45. data/bin/chef-shell +0 -0
  46. data/bin/chef-solo +0 -0
  47. data/bin/chef-windows-service +0 -0
  48. data/bin/knife +0 -0
  49. data/chef.gemspec +1 -0
  50. data/distro/common/html/_sources/ctl_chef_client.txt +35 -35
  51. data/distro/common/html/_sources/ctl_chef_server.txt +341 -341
  52. data/distro/common/html/_sources/ctl_chef_shell.txt +15 -15
  53. data/distro/common/html/_sources/ctl_chef_solo.txt +25 -25
  54. data/distro/common/html/_sources/index.txt +135 -135
  55. data/distro/common/html/_sources/knife.txt +74 -74
  56. data/distro/common/html/_sources/knife_bootstrap.txt +56 -56
  57. data/distro/common/html/_sources/knife_client.txt +150 -150
  58. data/distro/common/html/_sources/knife_common_options.txt +6 -6
  59. data/distro/common/html/_sources/knife_configure.txt +29 -29
  60. data/distro/common/html/_sources/knife_cookbook.txt +236 -236
  61. data/distro/common/html/_sources/knife_cookbook_site.txt +157 -157
  62. data/distro/common/html/_sources/knife_data_bag.txt +159 -159
  63. data/distro/common/html/_sources/knife_delete.txt +26 -26
  64. data/distro/common/html/_sources/knife_deps.txt +61 -61
  65. data/distro/common/html/_sources/knife_diff.txt +34 -34
  66. data/distro/common/html/_sources/knife_download.txt +44 -44
  67. data/distro/common/html/_sources/knife_edit.txt +26 -26
  68. data/distro/common/html/_sources/knife_environment.txt +158 -158
  69. data/distro/common/html/_sources/knife_exec.txt +47 -47
  70. data/distro/common/html/_sources/knife_index_rebuild.txt +20 -20
  71. data/distro/common/html/_sources/knife_list.txt +33 -33
  72. data/distro/common/html/_sources/knife_node.txt +250 -250
  73. data/distro/common/html/_sources/knife_raw.txt +35 -35
  74. data/distro/common/html/_sources/knife_recipe_list.txt +23 -23
  75. data/distro/common/html/_sources/knife_role.txt +157 -157
  76. data/distro/common/html/_sources/knife_search.txt +53 -53
  77. data/distro/common/html/_sources/knife_serve.txt +18 -18
  78. data/distro/common/html/_sources/knife_show.txt +26 -26
  79. data/distro/common/html/_sources/knife_ssh.txt +43 -43
  80. data/distro/common/html/_sources/knife_ssl_check.txt +41 -41
  81. data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -41
  82. data/distro/common/html/_sources/knife_status.txt +37 -37
  83. data/distro/common/html/_sources/knife_tag.txt +69 -69
  84. data/distro/common/html/_sources/knife_upload.txt +49 -49
  85. data/distro/common/html/_sources/knife_user.txt +127 -127
  86. data/distro/common/html/_sources/knife_using.txt +43 -43
  87. data/distro/common/html/_sources/knife_xargs.txt +30 -30
  88. data/distro/common/html/_static/guide.css +504 -504
  89. data/distro/common/html/_static/pygments.css +61 -61
  90. data/distro/common/html/_static/underscore.js +31 -31
  91. data/distro/common/html/ctl_chef_client.html +269 -269
  92. data/distro/common/html/ctl_chef_server.html +727 -727
  93. data/distro/common/html/ctl_chef_shell.html +162 -162
  94. data/distro/common/html/ctl_chef_solo.html +193 -193
  95. data/distro/common/html/index.html +201 -201
  96. data/distro/common/html/knife.html +169 -169
  97. data/distro/common/html/knife_bootstrap.html +284 -284
  98. data/distro/common/html/knife_client.html +284 -284
  99. data/distro/common/html/knife_common_options.html +95 -95
  100. data/distro/common/html/knife_configure.html +104 -104
  101. data/distro/common/html/knife_cookbook.html +486 -486
  102. data/distro/common/html/knife_data_bag.html +373 -373
  103. data/distro/common/html/knife_delete.html +92 -92
  104. data/distro/common/html/knife_deps.html +142 -142
  105. data/distro/common/html/knife_diff.html +122 -122
  106. data/distro/common/html/knife_download.html +144 -144
  107. data/distro/common/html/knife_edit.html +88 -88
  108. data/distro/common/html/knife_environment.html +325 -325
  109. data/distro/common/html/knife_exec.html +219 -219
  110. data/distro/common/html/knife_index_rebuild.html +82 -82
  111. data/distro/common/html/knife_list.html +113 -113
  112. data/distro/common/html/knife_node.html +457 -457
  113. data/distro/common/html/knife_raw.html +109 -109
  114. data/distro/common/html/knife_recipe_list.html +90 -90
  115. data/distro/common/html/knife_role.html +294 -294
  116. data/distro/common/html/knife_search.html +202 -202
  117. data/distro/common/html/knife_serve.html +78 -78
  118. data/distro/common/html/knife_show.html +103 -103
  119. data/distro/common/html/knife_ssh.html +176 -176
  120. data/distro/common/html/knife_ssl_check.html +150 -150
  121. data/distro/common/html/knife_ssl_fetch.html +150 -150
  122. data/distro/common/html/knife_status.html +143 -143
  123. data/distro/common/html/knife_tag.html +137 -137
  124. data/distro/common/html/knife_upload.html +152 -152
  125. data/distro/common/html/knife_user.html +241 -241
  126. data/distro/common/html/knife_using.html +209 -209
  127. data/distro/common/html/knife_xargs.html +121 -121
  128. data/distro/common/html/search.html +81 -81
  129. data/distro/common/man/man1/README.md +58 -58
  130. data/distro/common/man/man1/chef-shell.1 +194 -194
  131. data/distro/common/man/man1/knife-bootstrap.1 +215 -215
  132. data/distro/common/man/man1/knife-client.1 +443 -443
  133. data/distro/common/man/man1/knife-configure.1 +161 -161
  134. data/distro/common/man/man1/knife-cookbook.1 +770 -770
  135. data/distro/common/man/man1/knife-data-bag.1 +617 -617
  136. data/distro/common/man/man1/knife-delete.1 +127 -127
  137. data/distro/common/man/man1/knife-deps.1 +246 -246
  138. data/distro/common/man/man1/knife-diff.1 +226 -226
  139. data/distro/common/man/man1/knife-download.1 +258 -258
  140. data/distro/common/man/man1/knife-edit.1 +121 -121
  141. data/distro/common/man/man1/knife-environment.1 +508 -508
  142. data/distro/common/man/man1/knife-exec.1 +362 -362
  143. data/distro/common/man/man1/knife-index-rebuild.1 +63 -63
  144. data/distro/common/man/man1/knife-list.1 +174 -174
  145. data/distro/common/man/man1/knife-node.1 +716 -716
  146. data/distro/common/man/man1/knife-raw.1 +172 -172
  147. data/distro/common/man/man1/knife-recipe-list.1 +85 -85
  148. data/distro/common/man/man1/knife-role.1 +426 -426
  149. data/distro/common/man/man1/knife-search.1 +359 -359
  150. data/distro/common/man/man1/knife-serve.1 +109 -109
  151. data/distro/common/man/man1/knife-show.1 +160 -160
  152. data/distro/common/man/man1/knife-ssh.1 +284 -284
  153. data/distro/common/man/man1/knife-ssl-check.1 +207 -207
  154. data/distro/common/man/man1/knife-ssl-fetch.1 +207 -207
  155. data/distro/common/man/man1/knife-status.1 +234 -234
  156. data/distro/common/man/man1/knife-tag.1 +189 -189
  157. data/distro/common/man/man1/knife-upload.1 +280 -280
  158. data/distro/common/man/man1/knife-user.1 +356 -356
  159. data/distro/common/man/man1/knife-xargs.1 +189 -189
  160. data/distro/common/man/man1/knife.1 +332 -332
  161. data/distro/common/man/man8/chef-apply.8 +86 -86
  162. data/distro/common/man/man8/chef-client.8 +398 -398
  163. data/distro/common/man/man8/chef-solo.8 +260 -260
  164. data/distro/common/markdown/README +3 -3
  165. data/lib/chef/application.rb +14 -9
  166. data/lib/chef/application/apply.rb +5 -5
  167. data/lib/chef/application/client.rb +3 -3
  168. data/lib/chef/application/exit_code.rb +226 -0
  169. data/lib/chef/application/solo.rb +37 -7
  170. data/lib/chef/application/windows_service.rb +3 -3
  171. data/lib/chef/chef_fs/command_line.rb +7 -0
  172. data/lib/chef/chef_fs/config.rb +1 -1
  173. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +11 -10
  174. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  175. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  176. data/lib/chef/chef_fs/file_system.rb +15 -13
  177. data/lib/chef/chef_fs/file_system/base_fs_object.rb +4 -0
  178. data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +1 -1
  179. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +9 -0
  180. data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +6 -0
  181. data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -0
  182. data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +1 -1
  183. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +1 -1
  184. data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +4 -0
  185. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +4 -0
  186. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +4 -0
  187. data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +4 -0
  188. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +3 -3
  189. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +15 -4
  190. data/lib/chef/chef_fs/file_system/exceptions.rb +7 -0
  191. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +2 -2
  192. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +0 -4
  193. data/lib/chef/chef_fs/file_system/repository/acl.rb +7 -0
  194. data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +0 -4
  195. data/lib/chef/chef_fs/file_system/repository/base_file.rb +36 -4
  196. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +4 -0
  197. data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +0 -4
  198. data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +0 -3
  199. data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +0 -4
  200. data/lib/chef/chef_fs/file_system/repository/directory.rb +4 -0
  201. data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +0 -4
  202. data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +0 -4
  203. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +0 -4
  204. data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +0 -4
  205. data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +0 -4
  206. data/lib/chef/chef_fs/file_system/repository/users_dir.rb +0 -4
  207. data/lib/chef/client.rb +11 -3
  208. data/lib/chef/config_fetcher.rb +4 -4
  209. data/lib/chef/cookbook/gem_installer.rb +1 -0
  210. data/lib/chef/cookbook/synchronizer.rb +1 -1
  211. data/lib/chef/data_bag.rb +2 -2
  212. data/lib/chef/data_bag_item.rb +1 -1
  213. data/lib/chef/data_collector.rb +345 -0
  214. data/lib/chef/data_collector/messages.rb +125 -0
  215. data/lib/chef/data_collector/messages/helpers.rb +161 -0
  216. data/lib/chef/data_collector/resource_report.rb +84 -0
  217. data/lib/chef/decorator.rb +81 -0
  218. data/lib/chef/decorator/lazy.rb +60 -0
  219. data/lib/chef/decorator/lazy_array.rb +59 -0
  220. data/lib/chef/deprecation/provider/remote_file.rb +1 -1
  221. data/lib/chef/dsl/core.rb +19 -11
  222. data/lib/chef/dsl/platform_introspection.rb +16 -0
  223. data/lib/chef/dsl/recipe.rb +15 -9
  224. data/lib/chef/dsl/universal.rb +50 -0
  225. data/lib/chef/environment.rb +2 -2
  226. data/lib/chef/exceptions.rb +19 -4
  227. data/lib/chef/handler.rb +33 -0
  228. data/lib/chef/knife/cookbook_show.rb +6 -10
  229. data/lib/chef/knife/cookbook_site_install.rb +7 -2
  230. data/lib/chef/knife/help_topics.rb +4 -4
  231. data/lib/chef/knife/list.rb +1 -2
  232. data/lib/chef/knife/ssl_check.rb +2 -1
  233. data/lib/chef/monkey_patches/win32/registry.rb +11 -0
  234. data/lib/chef/nil_argument.rb +3 -3
  235. data/lib/chef/node.rb +2 -2
  236. data/lib/chef/platform/rebooter.rb +13 -2
  237. data/lib/chef/policy_builder/dynamic.rb +1 -1
  238. data/lib/chef/policy_builder/expand_node_object.rb +3 -3
  239. data/lib/chef/policy_builder/policyfile.rb +1 -1
  240. data/lib/chef/provider/git.rb +43 -41
  241. data/lib/chef/provider/lwrp_base.rb +0 -1
  242. data/lib/chef/provider/osx_profile.rb +2 -3
  243. data/lib/chef/provider/package.rb +51 -13
  244. data/lib/chef/provider/package/apt.rb +97 -103
  245. data/lib/chef/provider/package/chocolatey.rb +9 -10
  246. data/lib/chef/provider/package/dpkg.rb +2 -2
  247. data/lib/chef/provider/package/portage.rb +1 -1
  248. data/lib/chef/provider/package/rubygems.rb +8 -12
  249. data/lib/chef/provider/package/yum.rb +4 -959
  250. data/lib/chef/provider/package/yum/rpm_utils.rb +642 -0
  251. data/lib/chef/provider/package/{yum-dump.py → yum/yum-dump.py} +0 -0
  252. data/lib/chef/provider/package/yum/yum_cache.rb +376 -0
  253. data/lib/chef/provider/resource_update.rb +52 -52
  254. data/lib/chef/provider/systemd_unit.rb +238 -0
  255. data/lib/chef/providers.rb +1 -0
  256. data/lib/chef/reserved_names.rb +9 -9
  257. data/lib/chef/resource.rb +2 -7
  258. data/lib/chef/resource/file.rb +6 -1
  259. data/lib/chef/resource/systemd_unit.rb +63 -0
  260. data/lib/chef/resources.rb +1 -0
  261. data/lib/chef/sandbox.rb +20 -20
  262. data/lib/chef/shell/shell_session.rb +3 -3
  263. data/lib/chef/version.rb +1 -1
  264. data/lib/chef/win32/system.rb +0 -0
  265. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
  266. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
  267. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
  268. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
  269. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
  270. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
  271. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
  272. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
  273. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
  274. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
  275. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
  276. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
  277. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +0 -0
  278. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
  279. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
  280. data/spec/data/apt/var/www/apt/conf/distributions +7 -7
  281. data/spec/data/apt/var/www/apt/conf/incoming +4 -4
  282. data/spec/data/apt/var/www/apt/conf/pulls +3 -3
  283. data/spec/data/apt/var/www/apt/db/version +4 -4
  284. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
  285. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
  286. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
  287. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
  288. data/spec/data/bootstrap/no_proxy.erb +2 -2
  289. data/spec/data/bootstrap/secret.erb +9 -9
  290. data/spec/data/bootstrap/test-hints.erb +12 -12
  291. data/spec/data/bootstrap/test.erb +1 -1
  292. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
  293. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
  294. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
  295. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
  296. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
  297. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
  298. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
  299. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
  300. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
  301. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
  302. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
  303. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
  304. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
  305. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
  306. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
  307. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
  308. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
  309. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
  310. data/spec/data/config.rb +6 -6
  311. data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
  312. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
  313. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
  314. data/spec/data/cookbooks/apache2/metadata.rb +2 -2
  315. data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
  316. data/spec/data/cookbooks/borken/metadata.rb +2 -2
  317. data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
  318. data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
  319. data/spec/data/cookbooks/chefignore +8 -8
  320. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
  321. data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
  322. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
  323. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
  324. data/spec/data/cookbooks/java/files/default/java.response +1 -1
  325. data/spec/data/cookbooks/java/metadata.rb +2 -2
  326. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
  327. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
  328. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
  329. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  330. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
  331. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
  332. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
  333. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
  334. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
  335. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
  336. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
  337. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
  338. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
  339. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
  340. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
  341. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
  342. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
  343. data/spec/data/cookbooks/openldap/metadata.rb +8 -8
  344. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
  345. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
  346. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
  347. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
  348. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
  349. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
  350. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
  351. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
  352. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
  353. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
  354. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
  355. data/spec/data/cookbooks/preseed/metadata.rb +2 -2
  356. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
  357. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
  358. data/spec/data/definitions/test.rb +4 -4
  359. data/spec/data/environment-config.rb +4 -4
  360. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
  361. data/spec/data/fileedit/hosts +4 -4
  362. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
  363. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
  364. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
  365. data/spec/data/kitchen/chefignore +6 -6
  366. data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
  367. data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
  368. data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
  369. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
  370. data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
  371. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
  372. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
  373. data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
  374. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
  375. data/spec/data/knife_subcommand/test_yourself.rb +21 -21
  376. data/spec/data/lwrp/providers/inline_compiler.rb +26 -26
  377. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
  378. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
  379. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
  380. data/spec/data/lwrp/resources/foo.rb +4 -4
  381. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
  382. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
  383. data/spec/data/mac_users/10.7-8.plist.xml +559 -559
  384. data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
  385. data/spec/data/mac_users/10.7.plist.xml +559 -559
  386. data/spec/data/mac_users/10.7.shadow.xml +11 -11
  387. data/spec/data/mac_users/10.8.plist.xml +559 -559
  388. data/spec/data/mac_users/10.8.shadow.xml +21 -21
  389. data/spec/data/mac_users/10.9.plist.xml +560 -560
  390. data/spec/data/mac_users/10.9.shadow.xml +21 -21
  391. data/spec/data/metadata/quick_start/metadata.rb +19 -19
  392. data/spec/data/nodes/default.rb +15 -15
  393. data/spec/data/nodes/test.example.com.rb +17 -17
  394. data/spec/data/nodes/test.rb +15 -15
  395. data/spec/data/null_config.rb +1 -1
  396. data/spec/data/object_loader/environments/test.json +7 -7
  397. data/spec/data/object_loader/environments/test.rb +2 -2
  398. data/spec/data/object_loader/environments/test_json_class.json +8 -8
  399. data/spec/data/object_loader/nodes/test.json +7 -7
  400. data/spec/data/object_loader/nodes/test.rb +2 -2
  401. data/spec/data/object_loader/nodes/test_json_class.json +8 -8
  402. data/spec/data/object_loader/roles/test.json +7 -7
  403. data/spec/data/object_loader/roles/test.rb +2 -2
  404. data/spec/data/object_loader/roles/test_json_class.json +8 -8
  405. data/spec/data/partial_one.erb +1 -1
  406. data/spec/data/recipes/test.rb +7 -7
  407. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -4
  408. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
  409. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
  410. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
  411. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
  412. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
  413. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -3
  414. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
  415. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
  416. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
  417. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
  418. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
  419. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  420. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  421. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -3
  422. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
  423. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
  424. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
  425. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
  426. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -3
  427. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
  428. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
  429. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
  430. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
  431. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -3
  432. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
  433. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
  434. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
  435. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -3
  436. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
  437. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
  438. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
  439. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
  440. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
  441. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -3
  442. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
  443. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
  444. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
  445. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
  446. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
  447. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  448. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
  449. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
  450. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
  451. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
  452. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
  453. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
  454. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
  455. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
  456. data/spec/data/run_context/nodes/run_context.rb +5 -5
  457. data/spec/data/search_queries_to_transform.txt +98 -98
  458. data/spec/data/shef-config.rb +10 -10
  459. data/spec/data/ssl/5e707473.0 +18 -18
  460. data/spec/data/ssl/chef-rspec.cert +27 -27
  461. data/spec/data/ssl/chef-rspec.key +27 -27
  462. data/spec/data/ssl/key.pem +15 -15
  463. data/spec/data/ssl/private_key.pem +27 -27
  464. data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
  465. data/spec/data/standalone_cookbook/chefignore +9 -9
  466. data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
  467. data/spec/data/trusted_certs/example.crt +22 -22
  468. data/spec/data/trusted_certs/intermediate.pem +27 -27
  469. data/spec/data/trusted_certs/root.pem +22 -22
  470. data/spec/functional/assets/chefinittest +34 -34
  471. data/spec/functional/assets/testchefsubsys +10 -10
  472. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +0 -0
  473. data/spec/functional/resource/aix_service_spec.rb +0 -0
  474. data/spec/functional/resource/aixinit_service_spec.rb +0 -0
  475. data/spec/functional/resource/chocolatey_package_spec.rb +0 -5
  476. data/spec/functional/resource/env_spec.rb +0 -0
  477. data/spec/functional/win32/registry_spec.rb +1 -0
  478. data/spec/integration/client/exit_code_spec.rb +245 -0
  479. data/spec/integration/knife/deps_spec.rb +7 -7
  480. data/spec/integration/knife/download_spec.rb +19 -0
  481. data/spec/integration/knife/list_spec.rb +0 -8
  482. data/spec/integration/knife/upload_spec.rb +21 -2
  483. data/spec/integration/solo/solo_spec.rb +1 -1
  484. data/spec/rcov.opts +2 -2
  485. data/spec/unit/application/apply_spec.rb +6 -4
  486. data/spec/unit/application/exit_code_spec.rb +231 -0
  487. data/spec/unit/application/solo_spec.rb +143 -88
  488. data/spec/unit/chef_fs/config_spec.rb +129 -0
  489. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +8 -10
  490. data/spec/unit/client_spec.rb +1 -1
  491. data/spec/unit/config_fetcher_spec.rb +2 -2
  492. data/spec/unit/cookbook/synchronizer_spec.rb +1 -1
  493. data/spec/unit/data_bag_item_spec.rb +2 -2
  494. data/spec/unit/data_bag_spec.rb +2 -2
  495. data/spec/unit/data_collector/messages/helpers_spec.rb +190 -0
  496. data/spec/unit/data_collector/messages_spec.rb +207 -0
  497. data/spec/unit/data_collector_spec.rb +525 -0
  498. data/spec/unit/decorator/lazy_array_spec.rb +58 -0
  499. data/spec/unit/decorator/lazy_spec.rb +39 -0
  500. data/spec/unit/decorator_spec.rb +142 -0
  501. data/spec/unit/environment_spec.rb +4 -4
  502. data/spec/unit/handler_spec.rb +87 -0
  503. data/spec/unit/knife/cookbook_show_spec.rb +89 -90
  504. data/spec/unit/knife/ssl_check_spec.rb +16 -0
  505. data/spec/unit/policy_builder/dynamic_spec.rb +1 -1
  506. data/spec/unit/policy_builder/policyfile_spec.rb +1 -1
  507. data/spec/unit/provider/git_spec.rb +77 -18
  508. data/spec/unit/provider/package/apt_spec.rb +97 -34
  509. data/spec/unit/provider/package/chocolatey_spec.rb +3 -15
  510. data/spec/unit/provider/package/portage_spec.rb +6 -0
  511. data/spec/unit/provider/package/rubygems_spec.rb +38 -4
  512. data/spec/unit/provider/package/yum/yum_cache_spec.rb +27 -0
  513. data/spec/unit/provider/package_spec.rb +20 -7
  514. data/spec/unit/provider/systemd_unit_spec.rb +885 -0
  515. data/spec/unit/resource/systemd_unit_spec.rb +133 -0
  516. data/spec/unit/resource_builder_spec.rb +1 -1
  517. data/tasks/bin/bundle-platform +6 -2
  518. data/tasks/bin/bundle-platform.bat +0 -0
  519. data/tasks/bin/create-override-gemfile +0 -0
  520. data/tasks/bin/run_external_test +0 -0
  521. data/tasks/bundle_util.rb +18 -2
  522. data/tasks/changelog.rb +1 -0
  523. data/tasks/dependencies.rb +47 -57
  524. metadata +847 -7
  525. data/tasks/bin/run_chef_tests +0 -17
@@ -0,0 +1,231 @@
1
+ #
2
+ # Author:: Steven Murawski (<smurawski@chef.io>)
3
+ # Copyright:: Copyright 2016, 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 "chef"
20
+ require "spec_helper"
21
+
22
+ require "chef/application/exit_code"
23
+
24
+ describe Chef::Application::ExitCode do
25
+
26
+ let(:exit_codes) { Chef::Application::ExitCode }
27
+
28
+ let(:valid_rfc_exit_codes) { Chef::Application::ExitCode::VALID_RFC_062_EXIT_CODES.values }
29
+
30
+ context "Validates the return codes from RFC 062" do
31
+
32
+ before do
33
+ allow(Chef::Config).to receive(:[]).with(:exit_status).and_return(:enabled)
34
+ end
35
+
36
+ it "validates a SUCCESS return code of 0" do
37
+ expect(valid_rfc_exit_codes.include?(0)).to eq(true)
38
+ end
39
+
40
+ it "validates a GENERIC_FAILURE return code of 1" do
41
+ expect(valid_rfc_exit_codes.include?(1)).to eq(true)
42
+ end
43
+
44
+ it "validates a SIGINT_RECEIVED return code of 2" do
45
+ expect(valid_rfc_exit_codes.include?(2)).to eq(true)
46
+ end
47
+
48
+ it "validates a SIGTERM_RECEIVED return code of 3" do
49
+ expect(valid_rfc_exit_codes.include?(3)).to eq(true)
50
+ end
51
+
52
+ it "validates a AUDIT_MODE_FAILURE return code of 42" do
53
+ expect(valid_rfc_exit_codes.include?(42)).to eq(true)
54
+ end
55
+
56
+ it "validates a REBOOT_SCHEDULED return code of 35" do
57
+ expect(valid_rfc_exit_codes.include?(35)).to eq(true)
58
+ end
59
+
60
+ it "validates a REBOOT_NEEDED return code of 37" do
61
+ expect(valid_rfc_exit_codes.include?(37)).to eq(true)
62
+ end
63
+
64
+ it "validates a REBOOT_FAILED return code of 41" do
65
+ expect(valid_rfc_exit_codes.include?(41)).to eq(true)
66
+ end
67
+ end
68
+
69
+ context "when Chef::Config :exit_status is not configured" do
70
+ before do
71
+ allow(Chef::Config).to receive(:[]).with(:exit_status).and_return(nil)
72
+ allow(Chef::Config).to receive(:[]).with(:treat_deprecation_warnings_as_errors).and_return(false)
73
+ end
74
+
75
+ it "writes a deprecation warning" do
76
+ warn = "Chef RFC 062 (https://github.com/chef/chef-rfc/master/rfc062-exit-status.md) defines the" \
77
+ " exit codes that should be used with Chef. Chef::Application::ExitCode defines valid exit codes" \
78
+ " In a future release, non-standard exit codes will be redefined as" \
79
+ " GENERIC_FAILURE unless `exit_status` is set to `:disabled` in your client.rb."
80
+ expect(Chef).to receive(:log_deprecation).with(warn)
81
+ expect(exit_codes.normalize_exit_code(151)).to eq(151)
82
+ end
83
+
84
+ it "does not modify non-RFC exit codes" do
85
+ expect(exit_codes.normalize_exit_code(151)).to eq(151)
86
+ end
87
+
88
+ it "returns DEPRECATED_FAILURE when no exit code is specified" do
89
+ expect(exit_codes.normalize_exit_code()).to eq(-1)
90
+ end
91
+
92
+ it "returns SIGINT_RECEIVED when a SIGINT is received" do
93
+ expect(exit_codes.normalize_exit_code(Chef::Exceptions::SigInt.new("BOOM"))).to eq(2)
94
+ end
95
+
96
+ it "returns SIGTERM_RECEIVED when a SIGTERM is received" do
97
+ expect(exit_codes.normalize_exit_code(Chef::Exceptions::SigTerm.new("BOOM"))).to eq(3)
98
+ end
99
+
100
+ it "returns SIGINT_RECEIVED when a deprecated exit code error is received" do
101
+ expect(exit_codes.normalize_exit_code(Chef::Exceptions::DeprecatedExitCode.new("BOOM"))).to eq(2)
102
+ end
103
+
104
+ it "returns GENERIC_FAILURE when an exception is specified" do
105
+ expect(exit_codes.normalize_exit_code(Exception.new("BOOM"))).to eq(1)
106
+ end
107
+
108
+ end
109
+
110
+ context "when Chef::Config :exit_status is configured to not validate exit codes" do
111
+ before do
112
+ allow(Chef::Config).to receive(:[]).with(:exit_status).and_return(:disabled)
113
+ allow(Chef::Config).to receive(:[]).with(:treat_deprecation_warnings_as_errors).and_return(false)
114
+ end
115
+
116
+ it "does not write a deprecation warning" do
117
+ warn = "Chef RFC 062 (https://github.com/chef/chef-rfc/master/rfc062-exit-status.md) defines the" \
118
+ " exit codes that should be used with Chef. Chef::Application::ExitCode defines valid exit codes" \
119
+ " In a future release, non-standard exit codes will be redefined as" \
120
+ " GENERIC_FAILURE unless `exit_status` is set to `:disabled` in your client.rb."
121
+ expect(Chef).not_to receive(:log_deprecation).with(warn)
122
+ expect(exit_codes.normalize_exit_code(151)).to eq(151)
123
+ end
124
+
125
+ it "does not modify non-RFC exit codes" do
126
+ expect(exit_codes.normalize_exit_code(151)).to eq(151)
127
+ end
128
+
129
+ it "returns DEPRECATED_FAILURE when no exit code is specified" do
130
+ expect(exit_codes.normalize_exit_code()).to eq(-1)
131
+ end
132
+
133
+ it "returns GENERIC_FAILURE when an exception is specified" do
134
+ expect(exit_codes.normalize_exit_code(Exception.new("BOOM"))).to eq(1)
135
+ end
136
+
137
+ it "returns SUCCESS when a reboot is pending" do
138
+ allow(Chef::DSL::RebootPending).to receive(:reboot_pending?).and_return(true)
139
+ expect(exit_codes.normalize_exit_code(0)).to eq(0)
140
+ end
141
+
142
+ it "returns SIGINT_RECEIVED when a SIGINT is received" do
143
+ expect(exit_codes.normalize_exit_code(Chef::Exceptions::SigInt.new("BOOM"))).to eq(2)
144
+ end
145
+
146
+ it "returns SIGTERM_RECEIVED when a SIGTERM is received" do
147
+ expect(exit_codes.normalize_exit_code(Chef::Exceptions::SigTerm.new("BOOM"))).to eq(3)
148
+ end
149
+
150
+ it "returns SIGINT_RECEIVED when a deprecated exit code error is received" do
151
+ expect(exit_codes.normalize_exit_code(Chef::Exceptions::DeprecatedExitCode.new("BOOM"))).to eq(2)
152
+ end
153
+ end
154
+
155
+ context "when Chef::Config :exit_status is configured to validate exit codes" do
156
+ before do
157
+ allow(Chef::Config).to receive(:[]).with(:exit_status).and_return(:enabled)
158
+ allow(Chef::Config).to receive(:[]).with(:treat_deprecation_warnings_as_errors).and_return(false)
159
+ end
160
+
161
+ it "does write a deprecation warning" do
162
+ warn = "Chef RFC 062 (https://github.com/chef/chef-rfc/master/rfc062-exit-status.md) defines the" \
163
+ " exit codes that should be used with Chef. Chef::Application::ExitCode defines valid exit codes" \
164
+ " In a future release, non-standard exit codes will be redefined as" \
165
+ " GENERIC_FAILURE unless `exit_status` is set to `:disabled` in your client.rb."
166
+ expect(Chef).to receive(:log_deprecation).with(warn)
167
+ expect(exit_codes.normalize_exit_code(151)).to eq(1)
168
+ end
169
+
170
+ it "returns a GENERIC_FAILURE for non-RFC exit codes" do
171
+ expect(exit_codes.normalize_exit_code(151)).to eq(1)
172
+ end
173
+
174
+ it "returns GENERIC_FAILURE when no exit code is specified" do
175
+ expect(exit_codes.normalize_exit_code()).to eq(1)
176
+ end
177
+
178
+ it "returns SIGINT_RECEIVED when a SIGINT is received" do
179
+ expect(exit_codes.normalize_exit_code(Chef::Exceptions::SigInt.new("BOOM"))).to eq(2)
180
+ end
181
+
182
+ it "returns SIGTERM_RECEIVED when a SIGTERM is received" do
183
+ expect(exit_codes.normalize_exit_code(Chef::Exceptions::SigTerm.new("BOOM"))).to eq(3)
184
+ end
185
+
186
+ it "returns GENERIC_FAILURE when a deprecated exit code error is received" do
187
+ expect(exit_codes.normalize_exit_code(Chef::Exceptions::DeprecatedExitCode.new("BOOM"))).to eq(1)
188
+ end
189
+
190
+ it "returns GENERIC_FAILURE when an exception is specified" do
191
+ expect(exit_codes.normalize_exit_code(Exception.new("BOOM"))).to eq(1)
192
+ end
193
+
194
+ it "returns AUDIT_MODE_FAILURE when there is an audit error" do
195
+ audit_error = Chef::Exceptions::AuditError.new("BOOM")
196
+ runtime_error = Chef::Exceptions::RunFailedWrappingError.new(audit_error)
197
+ expect(exit_codes.normalize_exit_code(runtime_error)).to eq(42)
198
+ end
199
+
200
+ it "returns REBOOT_SCHEDULED when there is an reboot requested" do
201
+ reboot_error = Chef::Exceptions::Reboot.new("BOOM")
202
+ runtime_error = Chef::Exceptions::RunFailedWrappingError.new(reboot_error)
203
+ expect(exit_codes.normalize_exit_code(runtime_error)).to eq(35)
204
+ end
205
+
206
+ it "returns REBOOT_FAILED when the reboot command fails" do
207
+ reboot_error = Chef::Exceptions::RebootFailed.new("BOOM")
208
+ runtime_error = Chef::Exceptions::RunFailedWrappingError.new(reboot_error)
209
+ expect(exit_codes.normalize_exit_code(runtime_error)).to eq(41)
210
+ end
211
+
212
+ it "returns REBOOT_NEEDED when a reboot is pending" do
213
+ reboot_error = Chef::Exceptions::RebootPending.new("BOOM")
214
+ runtime_error = Chef::Exceptions::RunFailedWrappingError.new(reboot_error)
215
+ expect(exit_codes.normalize_exit_code(runtime_error)).to eq(37)
216
+ end
217
+
218
+ it "returns SIGINT_RECEIVED when a SIGINT is received." do
219
+ sigint_error = Chef::Exceptions::SigInt.new("BOOM")
220
+ runtime_error = Chef::Exceptions::RunFailedWrappingError.new(sigint_error)
221
+ expect(exit_codes.normalize_exit_code(runtime_error)).to eq(2)
222
+ end
223
+
224
+ it "returns SIGTERM_RECEIVED when a SIGTERM is received." do
225
+ sigterm_error = Chef::Exceptions::SigTerm.new("BOOM")
226
+ runtime_error = Chef::Exceptions::RunFailedWrappingError.new(sigterm_error)
227
+ expect(exit_codes.normalize_exit_code(runtime_error)).to eq(3)
228
+ end
229
+ end
230
+
231
+ end
@@ -30,141 +30,196 @@ describe Chef::Application::Solo do
30
30
 
31
31
  Chef::Config[:json_attribs] = false
32
32
  Chef::Config[:solo] = true
33
+ Chef::Config[:solo_legacy_mode] = true
33
34
 
34
35
  # protect the unit tests against accidental --delete-entire-chef-repo from firing
35
36
  # for real during tests. DO NOT delete this line.
36
37
  expect(FileUtils).not_to receive(:rm_rf)
37
38
  end
38
39
 
39
- describe "configuring the application" do
40
- it "should call set_specific_recipes" do
41
- expect(app).to receive(:set_specific_recipes)
42
- app.reconfigure
43
- end
44
-
45
- it "should set solo mode to true" do
46
- app.reconfigure
47
- expect(Chef::Config[:solo]).to be_truthy
48
- end
40
+ context "in legacy mode" do
41
+ describe "configuring the application" do
42
+ it "should call set_specific_recipes" do
43
+ expect(app).to receive(:set_specific_recipes)
44
+ app.reconfigure
45
+ end
49
46
 
50
- it "should set audit-mode to :disabled" do
51
- app.reconfigure
52
- expect(Chef::Config[:audit_mode]).to be :disabled
53
- end
47
+ it "should set solo mode to true" do
48
+ app.reconfigure
49
+ expect(Chef::Config[:solo]).to be_truthy
50
+ end
54
51
 
55
- describe "when configured to not fork the client process" do
56
- before do
57
- Chef::Config[:client_fork] = false
58
- Chef::Config[:daemonize] = false
59
- Chef::Config[:interval] = nil
60
- Chef::Config[:splay] = nil
52
+ it "should set audit-mode to :disabled" do
53
+ app.reconfigure
54
+ expect(Chef::Config[:audit_mode]).to be :disabled
61
55
  end
62
56
 
63
- context "when interval is given" do
57
+ describe "when configured to not fork the client process" do
64
58
  before do
65
- Chef::Config[:interval] = 600
59
+ Chef::Config[:client_fork] = false
60
+ Chef::Config[:daemonize] = false
61
+ Chef::Config[:interval] = nil
62
+ Chef::Config[:splay] = nil
66
63
  end
67
64
 
68
- it "should terminate with message" do
69
- expect(Chef::Application).to receive(:fatal!).with(
70
- "Unforked chef-client interval runs are disabled in Chef 12.
65
+ context "when interval is given" do
66
+ before do
67
+ Chef::Config[:interval] = 600
68
+ end
69
+
70
+ it "should terminate with message" do
71
+ expect(Chef::Application).to receive(:fatal!).with(
72
+ "Unforked chef-client interval runs are disabled in Chef 12.
71
73
  Configuration settings:
72
74
  interval = 600 seconds
73
75
  Enable chef-client interval runs by setting `:client_fork = true` in your config file or adding `--fork` to your command line options."
74
- )
76
+ )
77
+ app.reconfigure
78
+ end
79
+ end
80
+ end
81
+
82
+ describe "when in daemonized mode and no interval has been set" do
83
+ before do
84
+ Chef::Config[:daemonize] = true
85
+ end
86
+
87
+ it "should set the interval to 1800" do
88
+ Chef::Config[:interval] = nil
75
89
  app.reconfigure
90
+ expect(Chef::Config[:interval]).to eq(1800)
76
91
  end
77
92
  end
78
- end
79
93
 
80
- describe "when in daemonized mode and no interval has been set" do
81
- before do
82
- Chef::Config[:daemonize] = true
94
+ describe "when the json_attribs configuration option is specified" do
95
+ let(:json_attribs) { { "a" => "b" } }
96
+ let(:config_fetcher) { double(Chef::ConfigFetcher, :fetch_json => json_attribs) }
97
+ let(:json_source) { "https://foo.com/foo.json" }
98
+
99
+ before do
100
+ Chef::Config[:json_attribs] = json_source
101
+ expect(Chef::ConfigFetcher).to receive(:new).with(json_source).
102
+ and_return(config_fetcher)
103
+ end
104
+
105
+ it "reads the JSON attributes from the specified source" do
106
+ app.reconfigure
107
+ expect(app.chef_client_json).to eq(json_attribs)
108
+ end
83
109
  end
84
110
 
85
- it "should set the interval to 1800" do
86
- Chef::Config[:interval] = nil
111
+ it "downloads a tarball when the recipe_url configuration option is specified" do
112
+ Chef::Config[:cookbook_path] = "#{Dir.tmpdir}/chef-solo/cookbooks"
113
+ Chef::Config[:recipe_url] = "http://junglist.gen.nz/recipes.tgz"
114
+
115
+ expect(FileUtils).to receive(:mkdir_p).with("#{Dir.tmpdir}/chef-solo").and_return(true)
116
+
117
+ tarfile = StringIO.new("remote_tarball_content")
118
+ target_file = StringIO.new
119
+
120
+ expect(app).to receive(:open).with("http://junglist.gen.nz/recipes.tgz").and_yield(tarfile)
121
+ expect(File).to receive(:open).with("#{Dir.tmpdir}/chef-solo/recipes.tgz", "wb").and_yield(target_file)
122
+
123
+ shellout = instance_double("Mixlib::ShellOut", run_command: nil, error!: nil, stdout: "")
124
+
125
+ expect(app).to receive(:shell_out!).with("tar zxvf #{Dir.tmpdir}/chef-solo/recipes.tgz -C #{Dir.tmpdir}/chef-solo").and_return(shellout)
87
126
  app.reconfigure
88
- expect(Chef::Config[:interval]).to eq(1800)
127
+ expect(target_file.string).to eq("remote_tarball_content")
89
128
  end
90
- end
91
129
 
92
- describe "when the json_attribs configuration option is specified" do
93
- let(:json_attribs) { { "a" => "b" } }
94
- let(:config_fetcher) { double(Chef::ConfigFetcher, :fetch_json => json_attribs) }
95
- let(:json_source) { "https://foo.com/foo.json" }
130
+ it "fetches the recipe_url first when both json_attribs and recipe_url are specified" do
131
+ json_attribs = { "a" => "b" }
132
+ config_fetcher = instance_double("Chef::ConfigFetcher", :fetch_json => json_attribs)
96
133
 
97
- before do
98
- Chef::Config[:json_attribs] = json_source
99
- expect(Chef::ConfigFetcher).to receive(:new).with(json_source).
100
- and_return(config_fetcher)
101
- end
134
+ Chef::Config[:json_attribs] = "https://foo.com/foo.json"
135
+ Chef::Config[:recipe_url] = "http://icanhas.cheezburger.com/lolcats"
136
+ Chef::Config[:cookbook_path] = "#{Dir.tmpdir}/chef-solo/cookbooks"
137
+ expect(FileUtils).to receive(:mkdir_p).with("#{Dir.tmpdir}/chef-solo").and_return(true)
102
138
 
103
- it "reads the JSON attributes from the specified source" do
139
+ allow(Chef::Mixin::Command).to receive(:run_command).and_return(true)
140
+
141
+ shellout = instance_double("Mixlib::ShellOut", run_command: nil, error!: nil, stdout: "")
142
+
143
+ expect(app).to receive(:shell_out!).with("tar zxvf #{Dir.tmpdir}/chef-solo/recipes.tgz -C #{Dir.tmpdir}/chef-solo").and_return(shellout)
144
+ expect(app).to receive(:fetch_recipe_tarball).ordered
145
+ expect(Chef::ConfigFetcher).to receive(:new).ordered.and_return(config_fetcher)
104
146
  app.reconfigure
105
- expect(app.chef_client_json).to eq(json_attribs)
106
147
  end
107
148
  end
108
149
 
109
- it "downloads a tarball when the recipe_url configuration option is specified" do
110
- Chef::Config[:cookbook_path] = "#{Dir.tmpdir}/chef-solo/cookbooks"
111
- Chef::Config[:recipe_url] = "http://junglist.gen.nz/recipes.tgz"
112
-
113
- expect(FileUtils).to receive(:mkdir_p).with("#{Dir.tmpdir}/chef-solo").and_return(true)
150
+ describe "after the application has been configured" do
151
+ before do
152
+ Chef::Config[:solo] = true
153
+ Chef::Config[:solo_legacy_mode] = true
154
+
155
+ allow(Chef::Daemon).to receive(:change_privilege)
156
+ chef_client = double("Chef::Client")
157
+ allow(Chef::Client).to receive(:new).and_return(chef_client)
158
+ # this is all stuff the reconfigure method needs
159
+ allow(app).to receive(:configure_opt_parser).and_return(true)
160
+ allow(app).to receive(:configure_chef).and_return(true)
161
+ allow(app).to receive(:configure_logging).and_return(true)
162
+ end
114
163
 
115
- tarfile = StringIO.new("remote_tarball_content")
116
- target_file = StringIO.new
164
+ it "should change privileges" do
165
+ expect(Chef::Daemon).to receive(:change_privilege).and_return(true)
166
+ app.setup_application
167
+ end
168
+ end
117
169
 
118
- expect(app).to receive(:open).with("http://junglist.gen.nz/recipes.tgz").and_yield(tarfile)
119
- expect(File).to receive(:open).with("#{Dir.tmpdir}/chef-solo/recipes.tgz", "wb").and_yield(target_file)
170
+ it_behaves_like "an application that loads a dot d" do
171
+ let(:dot_d_config_name) { :solo_d_dir }
172
+ end
173
+ end
120
174
 
121
- shellout = instance_double("Mixlib::ShellOut", run_command: nil, error!: nil, stdout: "")
175
+ context "in local mode" do
176
+ before do
177
+ Chef::Config[:solo_legacy_mode] = false
178
+ end
122
179
 
123
- expect(app).to receive(:shell_out!).with("tar zxvf #{Dir.tmpdir}/chef-solo/recipes.tgz -C #{Dir.tmpdir}/chef-solo").and_return(shellout)
180
+ it "sets solo mode to true" do
124
181
  app.reconfigure
125
- expect(target_file.string).to eq("remote_tarball_content")
182
+ expect(Chef::Config[:solo]).to be_truthy
126
183
  end
127
184
 
128
- it "fetches the recipe_url first when both json_attribs and recipe_url are specified" do
129
- json_attribs = { "a" => "b" }
130
- config_fetcher = instance_double("Chef::ConfigFetcher", :fetch_json => json_attribs)
185
+ it "sets local mode to true" do
186
+ app.reconfigure
187
+ expect(Chef::Config[:local_mode]).to be_truthy
188
+ end
131
189
 
132
- Chef::Config[:json_attribs] = "https://foo.com/foo.json"
133
- Chef::Config[:recipe_url] = "http://icanhas.cheezburger.com/lolcats"
134
- Chef::Config[:cookbook_path] = "#{Dir.tmpdir}/chef-solo/cookbooks"
135
- expect(FileUtils).to receive(:mkdir_p).with("#{Dir.tmpdir}/chef-solo").and_return(true)
190
+ context "argv gets tidied up" do
191
+ before do
192
+ @original_argv = ARGV.dup
193
+ ARGV.clear
194
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
195
+ end
136
196
 
137
- allow(Chef::Mixin::Command).to receive(:run_command).and_return(true)
197
+ after do
198
+ ARGV.replace(@original_argv)
199
+ end
138
200
 
139
- shellout = instance_double("Mixlib::ShellOut", run_command: nil, error!: nil, stdout: "")
201
+ it "deletes --ez" do
202
+ ARGV << "--ez"
203
+ app.reconfigure
204
+ expect(ARGV.include?("--ez")).to be_falsey
205
+ end
140
206
 
141
- expect(app).to receive(:shell_out!).with("tar zxvf #{Dir.tmpdir}/chef-solo/recipes.tgz -C #{Dir.tmpdir}/chef-solo").and_return(shellout)
142
- expect(app).to receive(:fetch_recipe_tarball).ordered
143
- expect(Chef::ConfigFetcher).to receive(:new).ordered.and_return(config_fetcher)
144
- app.reconfigure
207
+ it "replaces -r with --recipe-url" do
208
+ ARGV.push("-r", "http://junglist.gen.nz/recipes.tgz")
209
+ app.reconfigure
210
+ expect(ARGV.include?("-r")).to be_falsey
211
+ expect(ARGV.include?("--recipe-url")).to be_truthy
212
+ end
145
213
  end
146
- end
147
-
148
- describe "after the application has been configured" do
149
- before do
150
- Chef::Config[:solo] = true
151
214
 
152
- allow(Chef::Daemon).to receive(:change_privilege)
153
- chef_client = double("Chef::Client")
154
- allow(Chef::Client).to receive(:new).and_return(chef_client)
155
- # this is all stuff the reconfigure method needs
156
- allow(app).to receive(:configure_opt_parser).and_return(true)
215
+ it "runs chef-client in local mode" do
216
+ allow(app).to receive(:setup_application).and_return(true)
217
+ allow(app).to receive(:run_application).and_return(true)
157
218
  allow(app).to receive(:configure_chef).and_return(true)
158
219
  allow(app).to receive(:configure_logging).and_return(true)
220
+ expect(Chef::Application::Client).to receive_message_chain(:new, :run)
221
+ app.run
159
222
  end
160
223
 
161
- it "should change privileges" do
162
- expect(Chef::Daemon).to receive(:change_privilege).and_return(true)
163
- app.setup_application
164
- end
165
- end
166
-
167
- it_behaves_like "an application that loads a dot d" do
168
- let(:dot_d_config_name) { :solo_d_dir }
169
224
  end
170
225
  end