chef 12.10.24 → 12.11.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (523) 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-shell +0 -0
  45. data/bin/chef-solo +0 -0
  46. data/bin/knife +0 -0
  47. data/chef.gemspec +1 -0
  48. data/distro/common/html/_sources/ctl_chef_client.txt +35 -35
  49. data/distro/common/html/_sources/ctl_chef_server.txt +341 -341
  50. data/distro/common/html/_sources/ctl_chef_shell.txt +15 -15
  51. data/distro/common/html/_sources/ctl_chef_solo.txt +25 -25
  52. data/distro/common/html/_sources/index.txt +135 -135
  53. data/distro/common/html/_sources/knife.txt +74 -74
  54. data/distro/common/html/_sources/knife_bootstrap.txt +56 -56
  55. data/distro/common/html/_sources/knife_client.txt +150 -150
  56. data/distro/common/html/_sources/knife_common_options.txt +6 -6
  57. data/distro/common/html/_sources/knife_configure.txt +29 -29
  58. data/distro/common/html/_sources/knife_cookbook.txt +236 -236
  59. data/distro/common/html/_sources/knife_cookbook_site.txt +157 -157
  60. data/distro/common/html/_sources/knife_data_bag.txt +159 -159
  61. data/distro/common/html/_sources/knife_delete.txt +26 -26
  62. data/distro/common/html/_sources/knife_deps.txt +61 -61
  63. data/distro/common/html/_sources/knife_diff.txt +34 -34
  64. data/distro/common/html/_sources/knife_download.txt +44 -44
  65. data/distro/common/html/_sources/knife_edit.txt +26 -26
  66. data/distro/common/html/_sources/knife_environment.txt +158 -158
  67. data/distro/common/html/_sources/knife_exec.txt +47 -47
  68. data/distro/common/html/_sources/knife_index_rebuild.txt +20 -20
  69. data/distro/common/html/_sources/knife_list.txt +33 -33
  70. data/distro/common/html/_sources/knife_node.txt +250 -250
  71. data/distro/common/html/_sources/knife_raw.txt +35 -35
  72. data/distro/common/html/_sources/knife_recipe_list.txt +23 -23
  73. data/distro/common/html/_sources/knife_role.txt +157 -157
  74. data/distro/common/html/_sources/knife_search.txt +53 -53
  75. data/distro/common/html/_sources/knife_serve.txt +18 -18
  76. data/distro/common/html/_sources/knife_show.txt +26 -26
  77. data/distro/common/html/_sources/knife_ssh.txt +43 -43
  78. data/distro/common/html/_sources/knife_ssl_check.txt +41 -41
  79. data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -41
  80. data/distro/common/html/_sources/knife_status.txt +37 -37
  81. data/distro/common/html/_sources/knife_tag.txt +69 -69
  82. data/distro/common/html/_sources/knife_upload.txt +49 -49
  83. data/distro/common/html/_sources/knife_user.txt +127 -127
  84. data/distro/common/html/_sources/knife_using.txt +43 -43
  85. data/distro/common/html/_sources/knife_xargs.txt +30 -30
  86. data/distro/common/html/_static/guide.css +504 -504
  87. data/distro/common/html/_static/pygments.css +61 -61
  88. data/distro/common/html/_static/underscore.js +31 -31
  89. data/distro/common/html/ctl_chef_client.html +269 -269
  90. data/distro/common/html/ctl_chef_server.html +727 -727
  91. data/distro/common/html/ctl_chef_shell.html +162 -162
  92. data/distro/common/html/ctl_chef_solo.html +193 -193
  93. data/distro/common/html/index.html +201 -201
  94. data/distro/common/html/knife.html +169 -169
  95. data/distro/common/html/knife_bootstrap.html +284 -284
  96. data/distro/common/html/knife_client.html +284 -284
  97. data/distro/common/html/knife_common_options.html +95 -95
  98. data/distro/common/html/knife_configure.html +104 -104
  99. data/distro/common/html/knife_cookbook.html +486 -486
  100. data/distro/common/html/knife_data_bag.html +373 -373
  101. data/distro/common/html/knife_delete.html +92 -92
  102. data/distro/common/html/knife_deps.html +142 -142
  103. data/distro/common/html/knife_diff.html +122 -122
  104. data/distro/common/html/knife_download.html +144 -144
  105. data/distro/common/html/knife_edit.html +88 -88
  106. data/distro/common/html/knife_environment.html +325 -325
  107. data/distro/common/html/knife_exec.html +219 -219
  108. data/distro/common/html/knife_index_rebuild.html +82 -82
  109. data/distro/common/html/knife_list.html +113 -113
  110. data/distro/common/html/knife_node.html +457 -457
  111. data/distro/common/html/knife_raw.html +109 -109
  112. data/distro/common/html/knife_recipe_list.html +90 -90
  113. data/distro/common/html/knife_role.html +294 -294
  114. data/distro/common/html/knife_search.html +202 -202
  115. data/distro/common/html/knife_serve.html +78 -78
  116. data/distro/common/html/knife_show.html +103 -103
  117. data/distro/common/html/knife_ssh.html +176 -176
  118. data/distro/common/html/knife_ssl_check.html +150 -150
  119. data/distro/common/html/knife_ssl_fetch.html +150 -150
  120. data/distro/common/html/knife_status.html +143 -143
  121. data/distro/common/html/knife_tag.html +137 -137
  122. data/distro/common/html/knife_upload.html +152 -152
  123. data/distro/common/html/knife_user.html +241 -241
  124. data/distro/common/html/knife_using.html +209 -209
  125. data/distro/common/html/knife_xargs.html +121 -121
  126. data/distro/common/html/search.html +81 -81
  127. data/distro/common/man/man1/README.md +58 -58
  128. data/distro/common/man/man1/chef-shell.1 +194 -194
  129. data/distro/common/man/man1/knife-bootstrap.1 +215 -215
  130. data/distro/common/man/man1/knife-client.1 +443 -443
  131. data/distro/common/man/man1/knife-configure.1 +161 -161
  132. data/distro/common/man/man1/knife-cookbook.1 +770 -770
  133. data/distro/common/man/man1/knife-data-bag.1 +617 -617
  134. data/distro/common/man/man1/knife-delete.1 +127 -127
  135. data/distro/common/man/man1/knife-deps.1 +246 -246
  136. data/distro/common/man/man1/knife-diff.1 +226 -226
  137. data/distro/common/man/man1/knife-download.1 +258 -258
  138. data/distro/common/man/man1/knife-edit.1 +121 -121
  139. data/distro/common/man/man1/knife-environment.1 +508 -508
  140. data/distro/common/man/man1/knife-exec.1 +362 -362
  141. data/distro/common/man/man1/knife-index-rebuild.1 +63 -63
  142. data/distro/common/man/man1/knife-list.1 +174 -174
  143. data/distro/common/man/man1/knife-node.1 +716 -716
  144. data/distro/common/man/man1/knife-raw.1 +172 -172
  145. data/distro/common/man/man1/knife-recipe-list.1 +85 -85
  146. data/distro/common/man/man1/knife-role.1 +426 -426
  147. data/distro/common/man/man1/knife-search.1 +359 -359
  148. data/distro/common/man/man1/knife-serve.1 +109 -109
  149. data/distro/common/man/man1/knife-show.1 +160 -160
  150. data/distro/common/man/man1/knife-ssh.1 +284 -284
  151. data/distro/common/man/man1/knife-ssl-check.1 +207 -207
  152. data/distro/common/man/man1/knife-ssl-fetch.1 +207 -207
  153. data/distro/common/man/man1/knife-status.1 +234 -234
  154. data/distro/common/man/man1/knife-tag.1 +189 -189
  155. data/distro/common/man/man1/knife-upload.1 +280 -280
  156. data/distro/common/man/man1/knife-user.1 +356 -356
  157. data/distro/common/man/man1/knife-xargs.1 +189 -189
  158. data/distro/common/man/man1/knife.1 +332 -332
  159. data/distro/common/man/man8/chef-apply.8 +86 -86
  160. data/distro/common/man/man8/chef-client.8 +398 -398
  161. data/distro/common/man/man8/chef-solo.8 +260 -260
  162. data/distro/common/markdown/README +3 -3
  163. data/lib/chef/application.rb +14 -9
  164. data/lib/chef/application/apply.rb +5 -5
  165. data/lib/chef/application/client.rb +3 -3
  166. data/lib/chef/application/exit_code.rb +226 -0
  167. data/lib/chef/application/solo.rb +37 -7
  168. data/lib/chef/application/windows_service.rb +3 -3
  169. data/lib/chef/chef_fs/command_line.rb +7 -0
  170. data/lib/chef/chef_fs/config.rb +1 -1
  171. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +11 -10
  172. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  173. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  174. data/lib/chef/chef_fs/file_system.rb +15 -13
  175. data/lib/chef/chef_fs/file_system/base_fs_object.rb +4 -0
  176. data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +1 -1
  177. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +9 -0
  178. data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +6 -0
  179. data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -0
  180. data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +1 -1
  181. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +1 -1
  182. data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +4 -0
  183. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +4 -0
  184. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +4 -0
  185. data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +4 -0
  186. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +3 -3
  187. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +15 -4
  188. data/lib/chef/chef_fs/file_system/exceptions.rb +7 -0
  189. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +2 -2
  190. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +0 -4
  191. data/lib/chef/chef_fs/file_system/repository/acl.rb +7 -0
  192. data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +0 -4
  193. data/lib/chef/chef_fs/file_system/repository/base_file.rb +36 -4
  194. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +4 -0
  195. data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +0 -4
  196. data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +0 -3
  197. data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +0 -4
  198. data/lib/chef/chef_fs/file_system/repository/directory.rb +4 -0
  199. data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +0 -4
  200. data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +0 -4
  201. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +0 -4
  202. data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +0 -4
  203. data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +0 -4
  204. data/lib/chef/chef_fs/file_system/repository/users_dir.rb +0 -4
  205. data/lib/chef/client.rb +11 -3
  206. data/lib/chef/config_fetcher.rb +4 -4
  207. data/lib/chef/cookbook/gem_installer.rb +1 -0
  208. data/lib/chef/cookbook/synchronizer.rb +1 -1
  209. data/lib/chef/data_bag.rb +2 -2
  210. data/lib/chef/data_bag_item.rb +1 -1
  211. data/lib/chef/data_collector.rb +345 -0
  212. data/lib/chef/data_collector/messages.rb +125 -0
  213. data/lib/chef/data_collector/messages/helpers.rb +161 -0
  214. data/lib/chef/data_collector/resource_report.rb +84 -0
  215. data/lib/chef/decorator.rb +81 -0
  216. data/lib/chef/decorator/lazy.rb +60 -0
  217. data/lib/chef/decorator/lazy_array.rb +59 -0
  218. data/lib/chef/deprecation/provider/remote_file.rb +1 -1
  219. data/lib/chef/dsl/core.rb +19 -11
  220. data/lib/chef/dsl/platform_introspection.rb +16 -0
  221. data/lib/chef/dsl/recipe.rb +15 -9
  222. data/lib/chef/dsl/universal.rb +50 -0
  223. data/lib/chef/environment.rb +2 -2
  224. data/lib/chef/exceptions.rb +19 -4
  225. data/lib/chef/handler.rb +33 -0
  226. data/lib/chef/knife/cookbook_show.rb +6 -10
  227. data/lib/chef/knife/cookbook_site_install.rb +7 -2
  228. data/lib/chef/knife/help_topics.rb +4 -4
  229. data/lib/chef/knife/list.rb +1 -2
  230. data/lib/chef/knife/ssl_check.rb +2 -1
  231. data/lib/chef/monkey_patches/win32/registry.rb +11 -0
  232. data/lib/chef/nil_argument.rb +3 -3
  233. data/lib/chef/node.rb +2 -2
  234. data/lib/chef/platform/rebooter.rb +13 -2
  235. data/lib/chef/policy_builder/dynamic.rb +1 -1
  236. data/lib/chef/policy_builder/expand_node_object.rb +3 -3
  237. data/lib/chef/policy_builder/policyfile.rb +1 -1
  238. data/lib/chef/provider/git.rb +43 -41
  239. data/lib/chef/provider/lwrp_base.rb +0 -1
  240. data/lib/chef/provider/osx_profile.rb +2 -3
  241. data/lib/chef/provider/package.rb +51 -13
  242. data/lib/chef/provider/package/apt.rb +97 -103
  243. data/lib/chef/provider/package/chocolatey.rb +9 -10
  244. data/lib/chef/provider/package/dpkg.rb +2 -2
  245. data/lib/chef/provider/package/portage.rb +1 -1
  246. data/lib/chef/provider/package/rubygems.rb +8 -12
  247. data/lib/chef/provider/package/yum.rb +4 -959
  248. data/lib/chef/provider/package/yum/rpm_utils.rb +642 -0
  249. data/lib/chef/provider/package/{yum-dump.py → yum/yum-dump.py} +0 -0
  250. data/lib/chef/provider/package/yum/yum_cache.rb +376 -0
  251. data/lib/chef/provider/resource_update.rb +52 -52
  252. data/lib/chef/provider/systemd_unit.rb +238 -0
  253. data/lib/chef/providers.rb +1 -0
  254. data/lib/chef/reserved_names.rb +9 -9
  255. data/lib/chef/resource.rb +2 -7
  256. data/lib/chef/resource/file.rb +6 -1
  257. data/lib/chef/resource/systemd_unit.rb +63 -0
  258. data/lib/chef/resources.rb +1 -0
  259. data/lib/chef/sandbox.rb +20 -20
  260. data/lib/chef/shell/shell_session.rb +3 -3
  261. data/lib/chef/version.rb +1 -1
  262. data/lib/chef/win32/system.rb +0 -0
  263. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
  264. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
  265. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
  266. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
  267. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
  268. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
  269. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
  270. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
  271. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
  272. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
  273. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
  274. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
  275. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +0 -0
  276. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
  277. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
  278. data/spec/data/apt/var/www/apt/conf/distributions +7 -7
  279. data/spec/data/apt/var/www/apt/conf/incoming +4 -4
  280. data/spec/data/apt/var/www/apt/conf/pulls +3 -3
  281. data/spec/data/apt/var/www/apt/db/version +4 -4
  282. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
  283. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
  284. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
  285. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
  286. data/spec/data/bootstrap/no_proxy.erb +2 -2
  287. data/spec/data/bootstrap/secret.erb +9 -9
  288. data/spec/data/bootstrap/test-hints.erb +12 -12
  289. data/spec/data/bootstrap/test.erb +1 -1
  290. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
  291. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
  292. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
  293. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
  294. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
  295. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
  296. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
  297. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
  298. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
  299. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
  300. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
  301. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
  302. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
  303. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
  304. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
  305. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
  306. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
  307. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
  308. data/spec/data/config.rb +6 -6
  309. data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
  310. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
  311. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
  312. data/spec/data/cookbooks/apache2/metadata.rb +2 -2
  313. data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
  314. data/spec/data/cookbooks/borken/metadata.rb +2 -2
  315. data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
  316. data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
  317. data/spec/data/cookbooks/chefignore +8 -8
  318. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
  319. data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
  320. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
  321. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
  322. data/spec/data/cookbooks/java/files/default/java.response +1 -1
  323. data/spec/data/cookbooks/java/metadata.rb +2 -2
  324. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
  325. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
  326. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
  327. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  328. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
  329. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
  330. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
  331. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
  332. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
  333. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
  334. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
  335. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
  336. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
  337. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
  338. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
  339. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
  340. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
  341. data/spec/data/cookbooks/openldap/metadata.rb +8 -8
  342. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
  343. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
  344. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
  345. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
  346. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
  347. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
  348. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
  349. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
  350. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
  351. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
  352. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
  353. data/spec/data/cookbooks/preseed/metadata.rb +2 -2
  354. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
  355. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
  356. data/spec/data/definitions/test.rb +4 -4
  357. data/spec/data/environment-config.rb +4 -4
  358. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
  359. data/spec/data/fileedit/hosts +4 -4
  360. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
  361. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
  362. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
  363. data/spec/data/kitchen/chefignore +6 -6
  364. data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
  365. data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
  366. data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
  367. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
  368. data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
  369. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
  370. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
  371. data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
  372. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
  373. data/spec/data/knife_subcommand/test_yourself.rb +21 -21
  374. data/spec/data/lwrp/providers/inline_compiler.rb +26 -26
  375. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
  376. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
  377. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
  378. data/spec/data/lwrp/resources/foo.rb +4 -4
  379. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
  380. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
  381. data/spec/data/mac_users/10.7-8.plist.xml +559 -559
  382. data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
  383. data/spec/data/mac_users/10.7.plist.xml +559 -559
  384. data/spec/data/mac_users/10.7.shadow.xml +11 -11
  385. data/spec/data/mac_users/10.8.plist.xml +559 -559
  386. data/spec/data/mac_users/10.8.shadow.xml +21 -21
  387. data/spec/data/mac_users/10.9.plist.xml +560 -560
  388. data/spec/data/mac_users/10.9.shadow.xml +21 -21
  389. data/spec/data/metadata/quick_start/metadata.rb +19 -19
  390. data/spec/data/nodes/default.rb +15 -15
  391. data/spec/data/nodes/test.example.com.rb +17 -17
  392. data/spec/data/nodes/test.rb +15 -15
  393. data/spec/data/null_config.rb +1 -1
  394. data/spec/data/object_loader/environments/test.json +7 -7
  395. data/spec/data/object_loader/environments/test.rb +2 -2
  396. data/spec/data/object_loader/environments/test_json_class.json +8 -8
  397. data/spec/data/object_loader/nodes/test.json +7 -7
  398. data/spec/data/object_loader/nodes/test.rb +2 -2
  399. data/spec/data/object_loader/nodes/test_json_class.json +8 -8
  400. data/spec/data/object_loader/roles/test.json +7 -7
  401. data/spec/data/object_loader/roles/test.rb +2 -2
  402. data/spec/data/object_loader/roles/test_json_class.json +8 -8
  403. data/spec/data/partial_one.erb +1 -1
  404. data/spec/data/recipes/test.rb +7 -7
  405. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -4
  406. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
  407. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
  408. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
  409. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
  410. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
  411. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -3
  412. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
  413. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
  414. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
  415. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
  416. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
  417. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  418. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  419. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -3
  420. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
  421. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
  422. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
  423. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
  424. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -3
  425. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
  426. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
  427. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
  428. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
  429. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -3
  430. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
  431. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
  432. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
  433. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -3
  434. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
  435. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
  436. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
  437. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
  438. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
  439. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -3
  440. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
  441. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
  442. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
  443. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
  444. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
  445. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  446. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
  447. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
  448. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
  449. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
  450. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
  451. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
  452. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
  453. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
  454. data/spec/data/run_context/nodes/run_context.rb +5 -5
  455. data/spec/data/search_queries_to_transform.txt +98 -98
  456. data/spec/data/shef-config.rb +10 -10
  457. data/spec/data/ssl/5e707473.0 +18 -18
  458. data/spec/data/ssl/chef-rspec.cert +27 -27
  459. data/spec/data/ssl/chef-rspec.key +27 -27
  460. data/spec/data/ssl/key.pem +15 -15
  461. data/spec/data/ssl/private_key.pem +27 -27
  462. data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
  463. data/spec/data/standalone_cookbook/chefignore +9 -9
  464. data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
  465. data/spec/data/trusted_certs/example.crt +22 -22
  466. data/spec/data/trusted_certs/intermediate.pem +27 -27
  467. data/spec/data/trusted_certs/root.pem +22 -22
  468. data/spec/functional/assets/chefinittest +34 -34
  469. data/spec/functional/assets/testchefsubsys +10 -10
  470. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +0 -0
  471. data/spec/functional/resource/aix_service_spec.rb +0 -0
  472. data/spec/functional/resource/aixinit_service_spec.rb +0 -0
  473. data/spec/functional/resource/chocolatey_package_spec.rb +0 -5
  474. data/spec/functional/resource/env_spec.rb +0 -0
  475. data/spec/functional/win32/registry_spec.rb +1 -0
  476. data/spec/integration/client/exit_code_spec.rb +245 -0
  477. data/spec/integration/knife/deps_spec.rb +7 -7
  478. data/spec/integration/knife/download_spec.rb +19 -0
  479. data/spec/integration/knife/list_spec.rb +0 -8
  480. data/spec/integration/knife/upload_spec.rb +21 -2
  481. data/spec/integration/solo/solo_spec.rb +1 -1
  482. data/spec/rcov.opts +2 -2
  483. data/spec/unit/application/apply_spec.rb +6 -4
  484. data/spec/unit/application/exit_code_spec.rb +231 -0
  485. data/spec/unit/application/solo_spec.rb +143 -88
  486. data/spec/unit/chef_fs/config_spec.rb +129 -0
  487. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +8 -10
  488. data/spec/unit/client_spec.rb +1 -1
  489. data/spec/unit/config_fetcher_spec.rb +2 -2
  490. data/spec/unit/cookbook/synchronizer_spec.rb +1 -1
  491. data/spec/unit/data_bag_item_spec.rb +2 -2
  492. data/spec/unit/data_bag_spec.rb +2 -2
  493. data/spec/unit/data_collector/messages/helpers_spec.rb +190 -0
  494. data/spec/unit/data_collector/messages_spec.rb +207 -0
  495. data/spec/unit/data_collector_spec.rb +525 -0
  496. data/spec/unit/decorator/lazy_array_spec.rb +58 -0
  497. data/spec/unit/decorator/lazy_spec.rb +39 -0
  498. data/spec/unit/decorator_spec.rb +142 -0
  499. data/spec/unit/environment_spec.rb +4 -4
  500. data/spec/unit/handler_spec.rb +87 -0
  501. data/spec/unit/knife/cookbook_show_spec.rb +89 -90
  502. data/spec/unit/knife/ssl_check_spec.rb +16 -0
  503. data/spec/unit/policy_builder/dynamic_spec.rb +1 -1
  504. data/spec/unit/policy_builder/policyfile_spec.rb +1 -1
  505. data/spec/unit/provider/git_spec.rb +77 -18
  506. data/spec/unit/provider/package/apt_spec.rb +97 -34
  507. data/spec/unit/provider/package/chocolatey_spec.rb +3 -15
  508. data/spec/unit/provider/package/portage_spec.rb +6 -0
  509. data/spec/unit/provider/package/rubygems_spec.rb +38 -4
  510. data/spec/unit/provider/package/yum/yum_cache_spec.rb +27 -0
  511. data/spec/unit/provider/package_spec.rb +20 -7
  512. data/spec/unit/provider/systemd_unit_spec.rb +885 -0
  513. data/spec/unit/resource/systemd_unit_spec.rb +133 -0
  514. data/spec/unit/resource_builder_spec.rb +1 -1
  515. data/tasks/bin/bundle-platform +6 -2
  516. data/tasks/bin/bundle-platform.bat +0 -0
  517. data/tasks/bin/create-override-gemfile +0 -0
  518. data/tasks/bin/run_external_test +0 -0
  519. data/tasks/bundle_util.rb +18 -2
  520. data/tasks/changelog.rb +1 -0
  521. data/tasks/dependencies.rb +47 -57
  522. metadata +847 -7
  523. 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