chef 13.7.16-universal-mingw32 → 13.8.0-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 (2060) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTING.md +151 -151
  3. data/Gemfile +71 -71
  4. data/LICENSE +201 -201
  5. data/README.md +248 -248
  6. data/Rakefile +76 -76
  7. data/VERSION +1 -1
  8. data/acceptance/.gitignore +3 -3
  9. data/acceptance/.shared/kitchen_acceptance/.kitchen.digitalocean.yml +33 -33
  10. data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +283 -283
  11. data/acceptance/.shared/kitchen_acceptance/.kitchen.vagrant.yml +59 -59
  12. data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +68 -68
  13. data/acceptance/.shared/kitchen_acceptance/metadata.rb +1 -1
  14. data/acceptance/Gemfile +19 -19
  15. data/acceptance/Gemfile.lock +266 -266
  16. data/acceptance/README.md +137 -137
  17. data/acceptance/basics/.acceptance/acceptance-cookbook/.gitignore +2 -2
  18. data/acceptance/basics/.acceptance/acceptance-cookbook/metadata.rb +3 -3
  19. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  20. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  21. data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  22. data/acceptance/basics/.kitchen.yml +4 -4
  23. data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +19 -19
  24. data/acceptance/basics/test/integration/chef-current-install/serverspec/spec_helper.rb +6 -6
  25. data/acceptance/basics/test/integration/helpers/serverspec/Gemfile +8 -8
  26. data/acceptance/data-collector/.acceptance/acceptance-cookbook/.gitignore +2 -2
  27. data/acceptance/data-collector/.acceptance/acceptance-cookbook/metadata.rb +3 -3
  28. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/destroy.rb +2 -2
  29. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/provision.rb +2 -2
  30. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/verify.rb +2 -2
  31. data/acceptance/data-collector/.acceptance/data-collector-test/.gitignore +16 -16
  32. data/acceptance/data-collector/.acceptance/data-collector-test/Berksfile +3 -3
  33. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb +101 -101
  34. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/apigemfile +3 -3
  35. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-both-mode.rb +4 -4
  36. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-client-mode.rb +4 -4
  37. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-no-endpoint.rb +2 -2
  38. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-solo-mode.rb +4 -4
  39. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/config.ru +2 -2
  40. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +7 -7
  41. data/acceptance/data-collector/.acceptance/data-collector-test/recipes/default.rb +44 -44
  42. data/acceptance/data-collector/.kitchen.yml +9 -9
  43. data/acceptance/data-collector/Berksfile +3 -3
  44. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +208 -208
  45. data/acceptance/data-collector/test/integration/helpers/serverspec/Gemfile +8 -8
  46. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/.gitignore +2 -2
  47. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/metadata.rb +1 -1
  48. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  49. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  50. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/verify.rb +61 -61
  51. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/.gitignore +2 -2
  52. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/cookbook_kitchen.rb +43 -43
  53. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +41 -41
  54. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/metadata.rb +3 -3
  55. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  56. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  57. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  58. data/acceptance/top-cookbooks/.gitignore +1 -1
  59. data/acceptance/top-cookbooks/.kitchen.chocolatey.yml +6 -6
  60. data/acceptance/top-cookbooks/.kitchen.iis.yml +4 -4
  61. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-rhel.yml +7 -7
  62. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-ubuntu.yml +7 -7
  63. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-windows.yml +7 -7
  64. data/acceptance/top-cookbooks/.kitchen.powershell.yml +4 -4
  65. data/acceptance/top-cookbooks/.kitchen.sql_server.yml +5 -5
  66. data/acceptance/top-cookbooks/.kitchen.winbox.yml +8 -8
  67. data/acceptance/top-cookbooks/.kitchen.windows.yml +38 -38
  68. data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -2
  69. data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  70. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  71. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  72. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  73. data/acceptance/trivial/.kitchen.yml +7 -7
  74. data/acceptance/trivial/test/integration/chef-current-install/inspec/chef_client_spec.rb +5 -5
  75. data/acceptance/windows-service/.acceptance/acceptance-cookbook/.gitignore +2 -2
  76. data/acceptance/windows-service/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  77. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  78. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  79. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  80. data/acceptance/windows-service/.kitchen.yml +7 -7
  81. data/acceptance/windows-service/test/integration/chef-windows-service/inspec/chef_windows_service_spec.rb +58 -58
  82. data/bin/chef-apply +25 -25
  83. data/bin/chef-client +26 -26
  84. data/bin/chef-service-manager +38 -38
  85. data/bin/chef-shell +36 -36
  86. data/bin/chef-solo +25 -25
  87. data/bin/chef-windows-service +35 -35
  88. data/bin/knife +25 -25
  89. data/chef-universal-mingw32.gemspec +23 -23
  90. data/chef.gemspec +62 -62
  91. data/distro/common/html/_sources/ctl_chef_client.txt +35 -35
  92. data/distro/common/html/_sources/ctl_chef_server.txt +341 -341
  93. data/distro/common/html/_sources/ctl_chef_shell.txt +15 -15
  94. data/distro/common/html/_sources/ctl_chef_solo.txt +25 -25
  95. data/distro/common/html/_sources/index.txt +135 -135
  96. data/distro/common/html/_sources/knife.txt +74 -74
  97. data/distro/common/html/_sources/knife_bootstrap.txt +56 -56
  98. data/distro/common/html/_sources/knife_client.txt +150 -150
  99. data/distro/common/html/_sources/knife_common_options.txt +6 -6
  100. data/distro/common/html/_sources/knife_configure.txt +29 -29
  101. data/distro/common/html/_sources/knife_cookbook.txt +236 -236
  102. data/distro/common/html/_sources/knife_cookbook_site.txt +157 -157
  103. data/distro/common/html/_sources/knife_data_bag.txt +159 -159
  104. data/distro/common/html/_sources/knife_delete.txt +26 -26
  105. data/distro/common/html/_sources/knife_deps.txt +61 -61
  106. data/distro/common/html/_sources/knife_diff.txt +34 -34
  107. data/distro/common/html/_sources/knife_download.txt +44 -44
  108. data/distro/common/html/_sources/knife_edit.txt +26 -26
  109. data/distro/common/html/_sources/knife_environment.txt +158 -158
  110. data/distro/common/html/_sources/knife_exec.txt +47 -47
  111. data/distro/common/html/_sources/knife_index_rebuild.txt +20 -20
  112. data/distro/common/html/_sources/knife_list.txt +33 -33
  113. data/distro/common/html/_sources/knife_node.txt +250 -250
  114. data/distro/common/html/_sources/knife_raw.txt +35 -35
  115. data/distro/common/html/_sources/knife_recipe_list.txt +23 -23
  116. data/distro/common/html/_sources/knife_role.txt +157 -157
  117. data/distro/common/html/_sources/knife_search.txt +53 -53
  118. data/distro/common/html/_sources/knife_serve.txt +18 -18
  119. data/distro/common/html/_sources/knife_show.txt +26 -26
  120. data/distro/common/html/_sources/knife_ssh.txt +43 -43
  121. data/distro/common/html/_sources/knife_ssl_check.txt +41 -41
  122. data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -41
  123. data/distro/common/html/_sources/knife_status.txt +37 -37
  124. data/distro/common/html/_sources/knife_tag.txt +69 -69
  125. data/distro/common/html/_sources/knife_upload.txt +49 -49
  126. data/distro/common/html/_sources/knife_user.txt +127 -127
  127. data/distro/common/html/_sources/knife_using.txt +43 -43
  128. data/distro/common/html/_sources/knife_xargs.txt +30 -30
  129. data/distro/common/html/_static/basic.css +536 -536
  130. data/distro/common/html/_static/doctools.js +238 -238
  131. data/distro/common/html/_static/guide.css +504 -504
  132. data/distro/common/html/_static/pygments.css +61 -61
  133. data/distro/common/html/_static/searchtools.js +621 -621
  134. data/distro/common/html/_static/underscore.js +31 -31
  135. data/distro/common/html/_static/websupport.js +808 -808
  136. data/distro/common/html/ctl_chef_client.html +269 -269
  137. data/distro/common/html/ctl_chef_server.html +727 -727
  138. data/distro/common/html/ctl_chef_shell.html +162 -162
  139. data/distro/common/html/ctl_chef_solo.html +193 -193
  140. data/distro/common/html/index.html +201 -201
  141. data/distro/common/html/knife.html +169 -169
  142. data/distro/common/html/knife_bootstrap.html +284 -284
  143. data/distro/common/html/knife_client.html +284 -284
  144. data/distro/common/html/knife_common_options.html +95 -95
  145. data/distro/common/html/knife_configure.html +104 -104
  146. data/distro/common/html/knife_cookbook.html +486 -486
  147. data/distro/common/html/knife_cookbook_site.html +375 -375
  148. data/distro/common/html/knife_data_bag.html +373 -373
  149. data/distro/common/html/knife_delete.html +92 -92
  150. data/distro/common/html/knife_deps.html +142 -142
  151. data/distro/common/html/knife_diff.html +122 -122
  152. data/distro/common/html/knife_download.html +144 -144
  153. data/distro/common/html/knife_edit.html +88 -88
  154. data/distro/common/html/knife_environment.html +322 -322
  155. data/distro/common/html/knife_exec.html +219 -219
  156. data/distro/common/html/knife_index_rebuild.html +82 -82
  157. data/distro/common/html/knife_list.html +113 -113
  158. data/distro/common/html/knife_node.html +457 -457
  159. data/distro/common/html/knife_raw.html +109 -109
  160. data/distro/common/html/knife_recipe_list.html +90 -90
  161. data/distro/common/html/knife_role.html +294 -294
  162. data/distro/common/html/knife_search.html +202 -202
  163. data/distro/common/html/knife_serve.html +78 -78
  164. data/distro/common/html/knife_show.html +103 -103
  165. data/distro/common/html/knife_ssh.html +176 -176
  166. data/distro/common/html/knife_ssl_check.html +150 -150
  167. data/distro/common/html/knife_ssl_fetch.html +150 -150
  168. data/distro/common/html/knife_status.html +143 -143
  169. data/distro/common/html/knife_tag.html +137 -137
  170. data/distro/common/html/knife_upload.html +152 -152
  171. data/distro/common/html/knife_user.html +241 -241
  172. data/distro/common/html/knife_using.html +209 -209
  173. data/distro/common/html/knife_xargs.html +121 -121
  174. data/distro/common/html/search.html +81 -81
  175. data/distro/common/man/man1/README.md +58 -58
  176. data/distro/common/man/man1/chef-shell.1 +194 -194
  177. data/distro/common/man/man1/knife-bootstrap.1 +215 -215
  178. data/distro/common/man/man1/knife-client.1 +443 -443
  179. data/distro/common/man/man1/knife-configure.1 +161 -161
  180. data/distro/common/man/man1/knife-cookbook-site.1 +552 -552
  181. data/distro/common/man/man1/knife-cookbook.1 +770 -770
  182. data/distro/common/man/man1/knife-data-bag.1 +617 -617
  183. data/distro/common/man/man1/knife-delete.1 +127 -127
  184. data/distro/common/man/man1/knife-deps.1 +246 -246
  185. data/distro/common/man/man1/knife-diff.1 +226 -226
  186. data/distro/common/man/man1/knife-download.1 +258 -258
  187. data/distro/common/man/man1/knife-edit.1 +121 -121
  188. data/distro/common/man/man1/knife-environment.1 +496 -496
  189. data/distro/common/man/man1/knife-exec.1 +362 -362
  190. data/distro/common/man/man1/knife-index-rebuild.1 +63 -63
  191. data/distro/common/man/man1/knife-list.1 +174 -174
  192. data/distro/common/man/man1/knife-node.1 +716 -716
  193. data/distro/common/man/man1/knife-raw.1 +172 -172
  194. data/distro/common/man/man1/knife-recipe-list.1 +85 -85
  195. data/distro/common/man/man1/knife-role.1 +426 -426
  196. data/distro/common/man/man1/knife-search.1 +359 -359
  197. data/distro/common/man/man1/knife-serve.1 +109 -109
  198. data/distro/common/man/man1/knife-show.1 +160 -160
  199. data/distro/common/man/man1/knife-ssh.1 +284 -284
  200. data/distro/common/man/man1/knife-ssl-check.1 +207 -207
  201. data/distro/common/man/man1/knife-ssl-fetch.1 +207 -207
  202. data/distro/common/man/man1/knife-status.1 +234 -234
  203. data/distro/common/man/man1/knife-tag.1 +189 -189
  204. data/distro/common/man/man1/knife-upload.1 +280 -280
  205. data/distro/common/man/man1/knife-user.1 +356 -356
  206. data/distro/common/man/man1/knife-xargs.1 +189 -189
  207. data/distro/common/man/man1/knife.1 +332 -332
  208. data/distro/common/man/man8/chef-apply.8 +86 -86
  209. data/distro/common/man/man8/chef-client.8 +398 -398
  210. data/distro/common/man/man8/chef-solo.8 +260 -260
  211. data/distro/common/markdown/README +3 -3
  212. data/distro/common/markdown/man1/chef-shell.mkd +195 -195
  213. data/distro/common/markdown/man1/knife-bootstrap.mkd +141 -141
  214. data/distro/common/markdown/man1/knife-client.mkd +103 -103
  215. data/distro/common/markdown/man1/knife-configure.mkd +71 -71
  216. data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -123
  217. data/distro/common/markdown/man1/knife-cookbook.mkd +263 -263
  218. data/distro/common/markdown/man1/knife-data-bag.mkd +121 -121
  219. data/distro/common/markdown/man1/knife-environment.mkd +151 -151
  220. data/distro/common/markdown/man1/knife-exec.mkd +42 -42
  221. data/distro/common/markdown/man1/knife-index.mkd +30 -30
  222. data/distro/common/markdown/man1/knife-node.mkd +130 -130
  223. data/distro/common/markdown/man1/knife-role.mkd +85 -85
  224. data/distro/common/markdown/man1/knife-search.mkd +180 -180
  225. data/distro/common/markdown/man1/knife-ssh.mkd +69 -69
  226. data/distro/common/markdown/man1/knife-status.mkd +36 -36
  227. data/distro/common/markdown/man1/knife-tag.mkd +39 -39
  228. data/distro/common/markdown/man1/knife.mkd +213 -213
  229. data/distro/common/markdown/man8/chef-client.mkd +75 -75
  230. data/distro/common/markdown/man8/chef-expander.mkd +81 -81
  231. data/distro/common/markdown/man8/chef-expanderctl.mkd +57 -57
  232. data/distro/common/markdown/man8/chef-server-webui.mkd +121 -121
  233. data/distro/common/markdown/man8/chef-server.mkd +120 -120
  234. data/distro/common/markdown/man8/chef-solo.mkd +107 -107
  235. data/distro/common/markdown/man8/chef-solr.mkd +89 -89
  236. data/distro/powershell/chef/chef.psm1 +459 -459
  237. data/ext/win32-eventlog/Rakefile +53 -53
  238. data/ext/win32-eventlog/chef-log.man +56 -56
  239. data/lib/chef.rb +34 -34
  240. data/lib/chef/api_client.rb +226 -226
  241. data/lib/chef/api_client/registration.rb +192 -192
  242. data/lib/chef/api_client_v1.rb +323 -323
  243. data/lib/chef/application.rb +369 -369
  244. data/lib/chef/application/apply.rb +219 -219
  245. data/lib/chef/application/client.rb +537 -537
  246. data/lib/chef/application/exit_code.rb +164 -164
  247. data/lib/chef/application/knife.rb +220 -220
  248. data/lib/chef/application/solo.rb +379 -379
  249. data/lib/chef/application/windows_service.rb +337 -337
  250. data/lib/chef/application/windows_service_manager.rb +204 -204
  251. data/lib/chef/applications.rb +4 -4
  252. data/lib/chef/audit/audit_event_proxy.rb +93 -93
  253. data/lib/chef/audit/audit_reporter.rb +176 -176
  254. data/lib/chef/audit/control_group_data.rb +139 -139
  255. data/lib/chef/audit/logger.rb +36 -36
  256. data/lib/chef/audit/rspec_formatter.rb +37 -37
  257. data/lib/chef/audit/runner.rb +196 -196
  258. data/lib/chef/blacklist.rb +81 -81
  259. data/lib/chef/chef_class.rb +240 -240
  260. data/lib/chef/chef_fs.rb +59 -59
  261. data/lib/chef/chef_fs/chef_fs_data_store.rb +870 -870
  262. data/lib/chef/chef_fs/command_line.rb +292 -292
  263. data/lib/chef/chef_fs/config.rb +284 -284
  264. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -26
  265. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +39 -39
  266. data/lib/chef/chef_fs/data_handler/client_key_data_handler.rb +11 -11
  267. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +35 -35
  268. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -38
  269. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +67 -67
  270. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +203 -203
  271. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -40
  272. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +55 -55
  273. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -36
  274. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +36 -36
  275. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -17
  276. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -17
  277. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +48 -48
  278. data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +33 -33
  279. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -40
  280. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +29 -29
  281. data/lib/chef/chef_fs/file_pattern.rb +301 -301
  282. data/lib/chef/chef_fs/file_system.rb +431 -431
  283. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -47
  284. data/lib/chef/chef_fs/file_system/base_fs_object.rb +187 -187
  285. data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +65 -65
  286. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +67 -67
  287. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +75 -75
  288. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +196 -196
  289. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifact_dir.rb +38 -38
  290. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +106 -106
  291. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +208 -208
  292. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +78 -78
  293. data/lib/chef/chef_fs/file_system/chef_server/cookbook_subdir.rb +61 -61
  294. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_acl_dir.rb +42 -42
  295. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +105 -105
  296. data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +76 -76
  297. data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -19
  298. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +67 -67
  299. data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +56 -56
  300. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +51 -51
  301. data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +35 -35
  302. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +65 -65
  303. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +64 -64
  304. data/lib/chef/chef_fs/file_system/chef_server/policies_acl_dir.rb +41 -41
  305. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +158 -158
  306. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +135 -135
  307. data/lib/chef/chef_fs/file_system/chef_server/policy_groups_dir.rb +43 -43
  308. data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +38 -38
  309. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +176 -176
  310. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +207 -207
  311. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +45 -45
  312. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +111 -111
  313. data/lib/chef/chef_fs/file_system/exceptions.rb +105 -105
  314. data/lib/chef/chef_fs/file_system/memory/memory_dir.rb +53 -53
  315. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +20 -20
  316. data/lib/chef/chef_fs/file_system/memory/memory_root.rb +23 -23
  317. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +62 -62
  318. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +32 -32
  319. data/lib/chef/chef_fs/file_system/repository/acl.rb +45 -45
  320. data/lib/chef/chef_fs/file_system/repository/acls_dir.rb +50 -50
  321. data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +38 -38
  322. data/lib/chef/chef_fs/file_system/repository/base_file.rb +155 -155
  323. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_artifact_dir.rb +41 -41
  324. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +143 -143
  325. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +177 -177
  326. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +231 -231
  327. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_versioned_cookbook_dir.rb +42 -42
  328. data/lib/chef/chef_fs/file_system/repository/client.rb +38 -38
  329. data/lib/chef/chef_fs/file_system/repository/client_key.rb +38 -38
  330. data/lib/chef/chef_fs/file_system/repository/client_keys_dir.rb +42 -42
  331. data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +38 -38
  332. data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +37 -37
  333. data/lib/chef/chef_fs/file_system/repository/container.rb +38 -38
  334. data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +37 -37
  335. data/lib/chef/chef_fs/file_system/repository/cookbook_artifacts_dir.rb +36 -36
  336. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +51 -51
  337. data/lib/chef/chef_fs/file_system/repository/data_bag.rb +39 -39
  338. data/lib/chef/chef_fs/file_system/repository/data_bag_item.rb +38 -38
  339. data/lib/chef/chef_fs/file_system/repository/data_bags_dir.rb +39 -39
  340. data/lib/chef/chef_fs/file_system/repository/directory.rb +167 -167
  341. data/lib/chef/chef_fs/file_system/repository/environment.rb +38 -38
  342. data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +37 -37
  343. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +151 -151
  344. data/lib/chef/chef_fs/file_system/repository/group.rb +38 -38
  345. data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +37 -37
  346. data/lib/chef/chef_fs/file_system/repository/node.rb +38 -38
  347. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +59 -59
  348. data/lib/chef/chef_fs/file_system/repository/policies_dir.rb +42 -42
  349. data/lib/chef/chef_fs/file_system/repository/policy.rb +38 -38
  350. data/lib/chef/chef_fs/file_system/repository/policy_group.rb +38 -38
  351. data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +37 -37
  352. data/lib/chef/chef_fs/file_system/repository/role.rb +38 -38
  353. data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +37 -37
  354. data/lib/chef/chef_fs/file_system/repository/user.rb +38 -38
  355. data/lib/chef/chef_fs/file_system/repository/users_dir.rb +37 -37
  356. data/lib/chef/chef_fs/file_system/repository/versioned_cookbooks_dir.rb +34 -34
  357. data/lib/chef/chef_fs/file_system_cache.rb +80 -80
  358. data/lib/chef/chef_fs/knife.rb +161 -161
  359. data/lib/chef/chef_fs/parallelizer.rb +103 -103
  360. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -35
  361. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +277 -277
  362. data/lib/chef/chef_fs/path_utils.rb +127 -127
  363. data/lib/chef/client.rb +1014 -1014
  364. data/lib/chef/config.rb +85 -85
  365. data/lib/chef/config_fetcher.rb +72 -72
  366. data/lib/chef/constants.rb +28 -28
  367. data/lib/chef/cookbook/chefignore.rb +78 -78
  368. data/lib/chef/cookbook/cookbook_collection.rb +63 -63
  369. data/lib/chef/cookbook/cookbook_version_loader.rb +268 -268
  370. data/lib/chef/cookbook/file_system_file_vendor.rb +58 -58
  371. data/lib/chef/cookbook/file_vendor.rb +71 -71
  372. data/lib/chef/cookbook/gem_installer.rb +88 -88
  373. data/lib/chef/cookbook/manifest_v0.rb +68 -68
  374. data/lib/chef/cookbook/manifest_v2.rb +41 -41
  375. data/lib/chef/cookbook/metadata.rb +803 -803
  376. data/lib/chef/cookbook/remote_file_vendor.rb +87 -87
  377. data/lib/chef/cookbook/synchronizer.rb +312 -312
  378. data/lib/chef/cookbook/syntax_check.rb +260 -260
  379. data/lib/chef/cookbook_loader.rb +200 -200
  380. data/lib/chef/cookbook_manifest.rb +324 -324
  381. data/lib/chef/cookbook_site_streaming_uploader.rb +241 -241
  382. data/lib/chef/cookbook_uploader.rb +157 -157
  383. data/lib/chef/cookbook_version.rb +549 -549
  384. data/lib/chef/daemon.rb +131 -131
  385. data/lib/chef/data_bag.rb +174 -174
  386. data/lib/chef/data_bag_item.rb +213 -213
  387. data/lib/chef/data_collector.rb +489 -489
  388. data/lib/chef/data_collector/messages.rb +100 -100
  389. data/lib/chef/data_collector/messages/helpers.rb +161 -161
  390. data/lib/chef/data_collector/resource_report.rb +123 -123
  391. data/lib/chef/decorator.rb +81 -81
  392. data/lib/chef/decorator/lazy.rb +60 -60
  393. data/lib/chef/decorator/lazy_array.rb +59 -59
  394. data/lib/chef/decorator/unchain.rb +43 -43
  395. data/lib/chef/delayed_evaluator.rb +21 -21
  396. data/lib/chef/deprecated.rb +294 -294
  397. data/lib/chef/deprecation/warnings.rb +38 -38
  398. data/lib/chef/digester.rb +74 -74
  399. data/lib/chef/dsl.rb +6 -6
  400. data/lib/chef/dsl/audit.rb +51 -51
  401. data/lib/chef/dsl/chef_provisioning.rb +57 -57
  402. data/lib/chef/dsl/cheffish.rb +65 -65
  403. data/lib/chef/dsl/core.rb +52 -52
  404. data/lib/chef/dsl/data_query.rb +89 -89
  405. data/lib/chef/dsl/declare_resource.rb +297 -297
  406. data/lib/chef/dsl/definitions.rb +43 -43
  407. data/lib/chef/dsl/include_attribute.rb +61 -61
  408. data/lib/chef/dsl/include_recipe.rb +44 -44
  409. data/lib/chef/dsl/platform_introspection.rb +268 -268
  410. data/lib/chef/dsl/powershell.rb +29 -29
  411. data/lib/chef/dsl/reboot_pending.rb +64 -64
  412. data/lib/chef/dsl/recipe.rb +92 -92
  413. data/lib/chef/dsl/registry_helper.rb +63 -63
  414. data/lib/chef/dsl/resources.rb +49 -49
  415. data/lib/chef/dsl/universal.rb +50 -50
  416. data/lib/chef/encrypted_data_bag_item.rb +155 -155
  417. data/lib/chef/encrypted_data_bag_item/assertions.rb +54 -54
  418. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -56
  419. data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +22 -22
  420. data/lib/chef/encrypted_data_bag_item/decryptor.rb +227 -227
  421. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -37
  422. data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -22
  423. data/lib/chef/encrypted_data_bag_item/encryptor.rb +225 -225
  424. data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +22 -22
  425. data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +22 -22
  426. data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +22 -22
  427. data/lib/chef/environment.rb +319 -319
  428. data/lib/chef/event_dispatch/base.rb +445 -445
  429. data/lib/chef/event_dispatch/dispatcher.rb +62 -62
  430. data/lib/chef/event_dispatch/dsl.rb +65 -65
  431. data/lib/chef/event_dispatch/events_output_stream.rb +37 -37
  432. data/lib/chef/event_loggers/base.rb +62 -62
  433. data/lib/chef/event_loggers/windows_eventlog.rb +101 -101
  434. data/lib/chef/exceptions.rb +525 -525
  435. data/lib/chef/file_access_control.rb +75 -75
  436. data/lib/chef/file_access_control/unix.rb +290 -290
  437. data/lib/chef/file_access_control/windows.rb +335 -335
  438. data/lib/chef/file_cache.rb +221 -221
  439. data/lib/chef/file_content_management/content_base.rb +56 -56
  440. data/lib/chef/file_content_management/deploy.rb +37 -37
  441. data/lib/chef/file_content_management/deploy/cp.rb +48 -48
  442. data/lib/chef/file_content_management/deploy/mv_unix.rb +76 -76
  443. data/lib/chef/file_content_management/deploy/mv_windows.rb +103 -103
  444. data/lib/chef/file_content_management/tempfile.rb +107 -107
  445. data/lib/chef/formatters/base.rb +247 -247
  446. data/lib/chef/formatters/doc.rb +447 -447
  447. data/lib/chef/formatters/error_description.rb +86 -86
  448. data/lib/chef/formatters/error_inspectors.rb +19 -19
  449. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +183 -183
  450. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +154 -154
  451. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +168 -168
  452. data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +82 -82
  453. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +128 -128
  454. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +147 -147
  455. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +124 -124
  456. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +121 -121
  457. data/lib/chef/formatters/error_mapper.rb +85 -85
  458. data/lib/chef/formatters/indentable_output_stream.rb +170 -170
  459. data/lib/chef/formatters/minimal.rb +233 -233
  460. data/lib/chef/guard_interpreter.rb +32 -32
  461. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +45 -45
  462. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +138 -138
  463. data/lib/chef/handler.rb +268 -268
  464. data/lib/chef/handler/error_report.rb +33 -33
  465. data/lib/chef/handler/json_file.rb +63 -63
  466. data/lib/chef/http.rb +527 -527
  467. data/lib/chef/http/api_versions.rb +56 -56
  468. data/lib/chef/http/auth_credentials.rb +57 -57
  469. data/lib/chef/http/authenticator.rb +115 -115
  470. data/lib/chef/http/basic_client.rb +158 -158
  471. data/lib/chef/http/cookie_jar.rb +31 -31
  472. data/lib/chef/http/cookie_manager.rb +59 -59
  473. data/lib/chef/http/decompressor.rb +142 -142
  474. data/lib/chef/http/http_request.rb +189 -189
  475. data/lib/chef/http/json_input.rb +73 -73
  476. data/lib/chef/http/json_output.rb +81 -81
  477. data/lib/chef/http/json_to_model_output.rb +34 -34
  478. data/lib/chef/http/remote_request_id.rb +46 -46
  479. data/lib/chef/http/simple.rb +40 -40
  480. data/lib/chef/http/simple_json.rb +43 -43
  481. data/lib/chef/http/socketless_chef_zero_client.rb +209 -209
  482. data/lib/chef/http/ssl_policies.rb +130 -130
  483. data/lib/chef/http/validate_content_length.rb +114 -114
  484. data/lib/chef/json_compat.rb +68 -68
  485. data/lib/chef/key.rb +267 -267
  486. data/lib/chef/knife.rb +617 -617
  487. data/lib/chef/knife/bootstrap.rb +495 -495
  488. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +159 -159
  489. data/lib/chef/knife/bootstrap/client_builder.rb +208 -208
  490. data/lib/chef/knife/bootstrap/templates/README.md +11 -11
  491. data/lib/chef/knife/bootstrap/templates/chef-full.erb +236 -236
  492. data/lib/chef/knife/client_bulk_delete.rb +104 -104
  493. data/lib/chef/knife/client_create.rb +111 -111
  494. data/lib/chef/knife/client_delete.rb +63 -63
  495. data/lib/chef/knife/client_edit.rb +53 -53
  496. data/lib/chef/knife/client_key_create.rb +70 -70
  497. data/lib/chef/knife/client_key_delete.rb +77 -77
  498. data/lib/chef/knife/client_key_edit.rb +80 -80
  499. data/lib/chef/knife/client_key_list.rb +70 -70
  500. data/lib/chef/knife/client_key_show.rb +77 -77
  501. data/lib/chef/knife/client_list.rb +42 -42
  502. data/lib/chef/knife/client_reregister.rb +59 -59
  503. data/lib/chef/knife/client_show.rb +49 -49
  504. data/lib/chef/knife/configure.rb +145 -145
  505. data/lib/chef/knife/configure_client.rb +48 -48
  506. data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
  507. data/lib/chef/knife/cookbook_create.rb +29 -29
  508. data/lib/chef/knife/cookbook_delete.rb +151 -151
  509. data/lib/chef/knife/cookbook_download.rb +142 -142
  510. data/lib/chef/knife/cookbook_list.rb +47 -47
  511. data/lib/chef/knife/cookbook_metadata.rb +107 -107
  512. data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -44
  513. data/lib/chef/knife/cookbook_show.rb +98 -98
  514. data/lib/chef/knife/cookbook_site_download.rb +116 -116
  515. data/lib/chef/knife/cookbook_site_install.rb +196 -196
  516. data/lib/chef/knife/cookbook_site_list.rb +65 -65
  517. data/lib/chef/knife/cookbook_site_search.rb +53 -53
  518. data/lib/chef/knife/cookbook_site_share.rb +170 -170
  519. data/lib/chef/knife/cookbook_site_show.rb +66 -66
  520. data/lib/chef/knife/cookbook_site_unshare.rb +63 -63
  521. data/lib/chef/knife/cookbook_test.rb +95 -95
  522. data/lib/chef/knife/cookbook_upload.rb +308 -308
  523. data/lib/chef/knife/core/bootstrap_context.rb +269 -269
  524. data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
  525. data/lib/chef/knife/core/gem_glob_loader.rb +138 -138
  526. data/lib/chef/knife/core/generic_presenter.rb +232 -232
  527. data/lib/chef/knife/core/hashed_command_loader.rb +99 -99
  528. data/lib/chef/knife/core/node_editor.rb +130 -130
  529. data/lib/chef/knife/core/node_presenter.rb +159 -159
  530. data/lib/chef/knife/core/object_loader.rb +115 -115
  531. data/lib/chef/knife/core/status_presenter.rb +161 -161
  532. data/lib/chef/knife/core/subcommand_loader.rb +182 -182
  533. data/lib/chef/knife/core/text_formatter.rb +85 -85
  534. data/lib/chef/knife/core/ui.rb +277 -277
  535. data/lib/chef/knife/data_bag_create.rb +80 -80
  536. data/lib/chef/knife/data_bag_delete.rb +49 -49
  537. data/lib/chef/knife/data_bag_edit.rb +74 -74
  538. data/lib/chef/knife/data_bag_from_file.rb +114 -114
  539. data/lib/chef/knife/data_bag_list.rb +42 -42
  540. data/lib/chef/knife/data_bag_secret_options.rb +142 -142
  541. data/lib/chef/knife/data_bag_show.rb +69 -69
  542. data/lib/chef/knife/delete.rb +107 -107
  543. data/lib/chef/knife/deps.rb +138 -138
  544. data/lib/chef/knife/diff.rb +68 -68
  545. data/lib/chef/knife/download.rb +68 -68
  546. data/lib/chef/knife/edit.rb +72 -72
  547. data/lib/chef/knife/environment_compare.rb +127 -127
  548. data/lib/chef/knife/environment_create.rb +53 -53
  549. data/lib/chef/knife/environment_delete.rb +45 -45
  550. data/lib/chef/knife/environment_edit.rb +45 -45
  551. data/lib/chef/knife/environment_from_file.rb +82 -82
  552. data/lib/chef/knife/environment_list.rb +42 -42
  553. data/lib/chef/knife/environment_show.rb +48 -48
  554. data/lib/chef/knife/exec.rb +87 -87
  555. data/lib/chef/knife/help.rb +101 -101
  556. data/lib/chef/knife/help_topics.rb +4 -4
  557. data/lib/chef/knife/index_rebuild.rb +133 -133
  558. data/lib/chef/knife/key_create.rb +112 -112
  559. data/lib/chef/knife/key_create_base.rb +50 -50
  560. data/lib/chef/knife/key_delete.rb +55 -55
  561. data/lib/chef/knife/key_edit.rb +118 -118
  562. data/lib/chef/knife/key_edit_base.rb +55 -55
  563. data/lib/chef/knife/key_list.rb +88 -88
  564. data/lib/chef/knife/key_list_base.rb +45 -45
  565. data/lib/chef/knife/key_show.rb +53 -53
  566. data/lib/chef/knife/list.rb +156 -156
  567. data/lib/chef/knife/node_bulk_delete.rb +74 -74
  568. data/lib/chef/knife/node_create.rb +47 -47
  569. data/lib/chef/knife/node_delete.rb +46 -46
  570. data/lib/chef/knife/node_edit.rb +70 -70
  571. data/lib/chef/knife/node_environment_set.rb +54 -54
  572. data/lib/chef/knife/node_from_file.rb +51 -51
  573. data/lib/chef/knife/node_list.rb +44 -44
  574. data/lib/chef/knife/node_run_list_add.rb +104 -104
  575. data/lib/chef/knife/node_run_list_remove.rb +67 -67
  576. data/lib/chef/knife/node_run_list_set.rb +66 -66
  577. data/lib/chef/knife/node_show.rb +61 -61
  578. data/lib/chef/knife/null.rb +10 -10
  579. data/lib/chef/knife/osc_user_create.rb +97 -97
  580. data/lib/chef/knife/osc_user_delete.rb +51 -51
  581. data/lib/chef/knife/osc_user_edit.rb +58 -58
  582. data/lib/chef/knife/osc_user_list.rb +47 -47
  583. data/lib/chef/knife/osc_user_reregister.rb +64 -64
  584. data/lib/chef/knife/osc_user_show.rb +53 -53
  585. data/lib/chef/knife/raw.rb +103 -103
  586. data/lib/chef/knife/recipe_list.rb +32 -32
  587. data/lib/chef/knife/rehash.rb +65 -65
  588. data/lib/chef/knife/role_bulk_delete.rb +65 -65
  589. data/lib/chef/knife/role_create.rb +53 -53
  590. data/lib/chef/knife/role_delete.rb +46 -46
  591. data/lib/chef/knife/role_edit.rb +45 -45
  592. data/lib/chef/knife/role_env_run_list_add.rb +86 -86
  593. data/lib/chef/knife/role_env_run_list_clear.rb +55 -55
  594. data/lib/chef/knife/role_env_run_list_remove.rb +57 -57
  595. data/lib/chef/knife/role_env_run_list_replace.rb +59 -59
  596. data/lib/chef/knife/role_env_run_list_set.rb +70 -70
  597. data/lib/chef/knife/role_from_file.rb +51 -51
  598. data/lib/chef/knife/role_list.rb +42 -42
  599. data/lib/chef/knife/role_run_list_add.rb +86 -86
  600. data/lib/chef/knife/role_run_list_clear.rb +55 -55
  601. data/lib/chef/knife/role_run_list_remove.rb +57 -57
  602. data/lib/chef/knife/role_run_list_replace.rb +59 -59
  603. data/lib/chef/knife/role_run_list_set.rb +70 -70
  604. data/lib/chef/knife/role_show.rb +49 -49
  605. data/lib/chef/knife/search.rb +194 -192
  606. data/lib/chef/knife/serve.rb +48 -48
  607. data/lib/chef/knife/show.rb +56 -56
  608. data/lib/chef/knife/ssh.rb +621 -623
  609. data/lib/chef/knife/ssl_check.rb +283 -283
  610. data/lib/chef/knife/ssl_fetch.rb +161 -161
  611. data/lib/chef/knife/status.rb +110 -110
  612. data/lib/chef/knife/supermarket_download.rb +33 -33
  613. data/lib/chef/knife/supermarket_install.rb +33 -33
  614. data/lib/chef/knife/supermarket_list.rb +33 -33
  615. data/lib/chef/knife/supermarket_search.rb +33 -33
  616. data/lib/chef/knife/supermarket_share.rb +33 -33
  617. data/lib/chef/knife/supermarket_show.rb +33 -33
  618. data/lib/chef/knife/supermarket_unshare.rb +33 -33
  619. data/lib/chef/knife/tag_create.rb +52 -52
  620. data/lib/chef/knife/tag_delete.rb +60 -60
  621. data/lib/chef/knife/tag_list.rb +47 -47
  622. data/lib/chef/knife/upload.rb +70 -70
  623. data/lib/chef/knife/user_create.rb +152 -152
  624. data/lib/chef/knife/user_delete.rb +97 -97
  625. data/lib/chef/knife/user_edit.rb +83 -83
  626. data/lib/chef/knife/user_key_create.rb +70 -70
  627. data/lib/chef/knife/user_key_delete.rb +77 -77
  628. data/lib/chef/knife/user_key_edit.rb +80 -80
  629. data/lib/chef/knife/user_key_list.rb +70 -70
  630. data/lib/chef/knife/user_key_show.rb +77 -77
  631. data/lib/chef/knife/user_list.rb +45 -45
  632. data/lib/chef/knife/user_reregister.rb +91 -91
  633. data/lib/chef/knife/user_show.rb +80 -80
  634. data/lib/chef/knife/xargs.rb +266 -266
  635. data/lib/chef/local_mode.rb +129 -129
  636. data/lib/chef/log.rb +68 -68
  637. data/lib/chef/log/syslog.rb +45 -45
  638. data/lib/chef/log/winevt.rb +99 -99
  639. data/lib/chef/mash.rb +232 -232
  640. data/lib/chef/mixin/api_version_request_handling.rb +66 -66
  641. data/lib/chef/mixin/checksum.rb +37 -37
  642. data/lib/chef/mixin/convert_to_class_name.rb +126 -126
  643. data/lib/chef/mixin/create_path.rb +71 -71
  644. data/lib/chef/mixin/deep_merge.rb +140 -140
  645. data/lib/chef/mixin/deprecation.rb +117 -117
  646. data/lib/chef/mixin/descendants_tracker.rb +81 -81
  647. data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -39
  648. data/lib/chef/mixin/file_class.rb +35 -35
  649. data/lib/chef/mixin/from_file.rb +50 -50
  650. data/lib/chef/mixin/get_source_from_package.rb +47 -47
  651. data/lib/chef/mixin/homebrew_user.rb +68 -68
  652. data/lib/chef/mixin/language.rb +48 -48
  653. data/lib/chef/mixin/language_include_attribute.rb +34 -34
  654. data/lib/chef/mixin/language_include_recipe.rb +31 -31
  655. data/lib/chef/mixin/lazy_module_include.rb +77 -77
  656. data/lib/chef/mixin/notifying_block.rb +51 -51
  657. data/lib/chef/mixin/params_validate.rb +490 -490
  658. data/lib/chef/mixin/path_sanity.rb +66 -66
  659. data/lib/chef/mixin/powershell_out.rb +98 -98
  660. data/lib/chef/mixin/powershell_type_coercions.rb +84 -84
  661. data/lib/chef/mixin/properties.rb +306 -306
  662. data/lib/chef/mixin/provides.rb +28 -28
  663. data/lib/chef/mixin/proxified_socket.rb +42 -42
  664. data/lib/chef/mixin/recipe_definition_dsl_core.rb +35 -35
  665. data/lib/chef/mixin/securable.rb +196 -196
  666. data/lib/chef/mixin/shell_out.rb +195 -195
  667. data/lib/chef/mixin/subclass_directive.rb +37 -37
  668. data/lib/chef/mixin/template.rb +262 -262
  669. data/lib/chef/mixin/unformatter.rb +32 -32
  670. data/lib/chef/mixin/uris.rb +42 -42
  671. data/lib/chef/mixin/user_context.rb +52 -52
  672. data/lib/chef/mixin/versioned_api.rb +84 -84
  673. data/lib/chef/mixin/which.rb +50 -50
  674. data/lib/chef/mixin/why_run.rb +331 -331
  675. data/lib/chef/mixin/wide_string.rb +72 -72
  676. data/lib/chef/mixin/windows_architecture_helper.rb +113 -113
  677. data/lib/chef/mixin/windows_env_helper.rb +67 -67
  678. data/lib/chef/mixin/xml_escape.rb +138 -138
  679. data/lib/chef/mixins.rb +12 -12
  680. data/lib/chef/monkey_patches/net_http.rb +60 -60
  681. data/lib/chef/monkey_patches/webrick-utils.rb +51 -51
  682. data/lib/chef/monkey_patches/win32/registry.rb +86 -86
  683. data/lib/chef/monologger.rb +88 -88
  684. data/lib/chef/nil_argument.rb +3 -3
  685. data/lib/chef/node.rb +678 -678
  686. data/lib/chef/node/attribute.rb +650 -626
  687. data/lib/chef/node/attribute_collections.rb +213 -213
  688. data/lib/chef/node/common_api.rb +121 -121
  689. data/lib/chef/node/immutable_collections.rb +182 -339
  690. data/lib/chef/node/mixin/deep_merge_cache.rb +61 -61
  691. data/lib/chef/node/mixin/immutablize_array.rb +67 -67
  692. data/lib/chef/node/mixin/immutablize_hash.rb +54 -54
  693. data/lib/chef/node/mixin/state_tracking.rb +96 -96
  694. data/lib/chef/node_map.rb +279 -253
  695. data/lib/chef/null_logger.rb +72 -72
  696. data/lib/chef/org.rb +142 -142
  697. data/lib/chef/platform.rb +30 -30
  698. data/lib/chef/platform/priority_map.rb +41 -41
  699. data/lib/chef/platform/provider_handler_map.rb +29 -29
  700. data/lib/chef/platform/provider_mapping.rb +55 -55
  701. data/lib/chef/platform/provider_priority_map.rb +11 -11
  702. data/lib/chef/platform/query_helpers.rb +112 -112
  703. data/lib/chef/platform/rebooter.rb +70 -70
  704. data/lib/chef/platform/resource_handler_map.rb +29 -29
  705. data/lib/chef/platform/resource_priority_map.rb +11 -11
  706. data/lib/chef/platform/service_helpers.rb +122 -122
  707. data/lib/chef/policy_builder.rb +42 -42
  708. data/lib/chef/policy_builder/dynamic.rb +185 -185
  709. data/lib/chef/policy_builder/expand_node_object.rb +252 -252
  710. data/lib/chef/policy_builder/policyfile.rb +551 -551
  711. data/lib/chef/property.rb +682 -682
  712. data/lib/chef/provider.rb +412 -412
  713. data/lib/chef/provider/apt_preference.rb +94 -94
  714. data/lib/chef/provider/apt_repository.rb +250 -250
  715. data/lib/chef/provider/apt_update.rb +77 -77
  716. data/lib/chef/provider/batch.rb +45 -45
  717. data/lib/chef/provider/cookbook_file.rb +47 -47
  718. data/lib/chef/provider/cookbook_file/content.rb +49 -49
  719. data/lib/chef/provider/cron.rb +244 -244
  720. data/lib/chef/provider/cron/aix.rb +50 -50
  721. data/lib/chef/provider/cron/solaris.rb +22 -22
  722. data/lib/chef/provider/cron/unix.rb +83 -83
  723. data/lib/chef/provider/deploy.rb +470 -470
  724. data/lib/chef/provider/deploy/revision.rb +107 -107
  725. data/lib/chef/provider/deploy/timestamped.rb +34 -34
  726. data/lib/chef/provider/directory.rb +164 -164
  727. data/lib/chef/provider/dsc_resource.rb +209 -209
  728. data/lib/chef/provider/dsc_script.rb +185 -185
  729. data/lib/chef/provider/env.rb +171 -171
  730. data/lib/chef/provider/env/windows.rb +76 -76
  731. data/lib/chef/provider/erl_call.rb +76 -76
  732. data/lib/chef/provider/execute.rb +125 -125
  733. data/lib/chef/provider/file.rb +478 -478
  734. data/lib/chef/provider/file/content.rb +39 -39
  735. data/lib/chef/provider/git.rb +347 -347
  736. data/lib/chef/provider/group.rb +179 -179
  737. data/lib/chef/provider/group/aix.rb +79 -79
  738. data/lib/chef/provider/group/dscl.rb +177 -177
  739. data/lib/chef/provider/group/gpasswd.rb +58 -58
  740. data/lib/chef/provider/group/groupadd.rb +133 -133
  741. data/lib/chef/provider/group/groupmod.rb +123 -123
  742. data/lib/chef/provider/group/pw.rb +137 -137
  743. data/lib/chef/provider/group/suse.rb +83 -83
  744. data/lib/chef/provider/group/usermod.rb +90 -90
  745. data/lib/chef/provider/group/windows.rb +109 -109
  746. data/lib/chef/provider/http_request.rb +132 -132
  747. data/lib/chef/provider/ifconfig.rb +271 -271
  748. data/lib/chef/provider/ifconfig/aix.rb +94 -94
  749. data/lib/chef/provider/ifconfig/debian.rb +85 -85
  750. data/lib/chef/provider/ifconfig/redhat.rb +52 -52
  751. data/lib/chef/provider/launchd.rb +231 -231
  752. data/lib/chef/provider/link.rb +168 -168
  753. data/lib/chef/provider/log.rb +43 -43
  754. data/lib/chef/provider/lwrp_base.rb +89 -89
  755. data/lib/chef/provider/mdadm.rb +85 -85
  756. data/lib/chef/provider/mount.rb +167 -167
  757. data/lib/chef/provider/mount/aix.rb +221 -221
  758. data/lib/chef/provider/mount/mount.rb +270 -270
  759. data/lib/chef/provider/mount/solaris.rb +271 -271
  760. data/lib/chef/provider/mount/windows.rb +92 -92
  761. data/lib/chef/provider/noop.rb +37 -37
  762. data/lib/chef/provider/ohai.rb +45 -45
  763. data/lib/chef/provider/osx_profile.rb +252 -252
  764. data/lib/chef/provider/package.rb +681 -681
  765. data/lib/chef/provider/package/aix.rb +142 -142
  766. data/lib/chef/provider/package/apt.rb +217 -217
  767. data/lib/chef/provider/package/cab.rb +183 -183
  768. data/lib/chef/provider/package/chocolatey.rb +291 -291
  769. data/lib/chef/provider/package/dnf.rb +196 -196
  770. data/lib/chef/provider/package/dnf/dnf_helper.py +100 -100
  771. data/lib/chef/provider/package/dnf/python_helper.rb +172 -172
  772. data/lib/chef/provider/package/dnf/version.rb +56 -56
  773. data/lib/chef/provider/package/dpkg.rb +241 -241
  774. data/lib/chef/provider/package/freebsd/base.rb +89 -89
  775. data/lib/chef/provider/package/freebsd/pkg.rb +114 -114
  776. data/lib/chef/provider/package/freebsd/pkgng.rb +76 -76
  777. data/lib/chef/provider/package/freebsd/port.rb +60 -60
  778. data/lib/chef/provider/package/homebrew.rb +138 -138
  779. data/lib/chef/provider/package/ips.rb +85 -85
  780. data/lib/chef/provider/package/macports.rb +101 -101
  781. data/lib/chef/provider/package/msu.rb +161 -161
  782. data/lib/chef/provider/package/openbsd.rb +139 -139
  783. data/lib/chef/provider/package/pacman.rb +103 -103
  784. data/lib/chef/provider/package/paludis.rb +85 -85
  785. data/lib/chef/provider/package/portage.rb +139 -139
  786. data/lib/chef/provider/package/powershell.rb +114 -114
  787. data/lib/chef/provider/package/rpm.rb +127 -127
  788. data/lib/chef/provider/package/rubygems.rb +591 -591
  789. data/lib/chef/provider/package/smartos.rb +92 -92
  790. data/lib/chef/provider/package/solaris.rb +137 -137
  791. data/lib/chef/provider/package/windows.rb +286 -286
  792. data/lib/chef/provider/package/windows/exe.rb +115 -115
  793. data/lib/chef/provider/package/windows/msi.rb +94 -94
  794. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +93 -93
  795. data/lib/chef/provider/package/yum.rb +520 -520
  796. data/lib/chef/provider/package/yum/rpm_utils.rb +642 -642
  797. data/lib/chef/provider/package/yum/yum-dump.py +307 -307
  798. data/lib/chef/provider/package/yum/yum_cache.rb +376 -376
  799. data/lib/chef/provider/package/zypper.rb +157 -157
  800. data/lib/chef/provider/powershell_script.rb +223 -223
  801. data/lib/chef/provider/reboot.rb +78 -78
  802. data/lib/chef/provider/registry_key.rb +178 -178
  803. data/lib/chef/provider/remote_directory.rb +271 -271
  804. data/lib/chef/provider/remote_file.rb +66 -66
  805. data/lib/chef/provider/remote_file/cache_control_data.rb +195 -195
  806. data/lib/chef/provider/remote_file/content.rb +81 -81
  807. data/lib/chef/provider/remote_file/fetcher.rb +60 -60
  808. data/lib/chef/provider/remote_file/ftp.rb +172 -172
  809. data/lib/chef/provider/remote_file/http.rb +141 -136
  810. data/lib/chef/provider/remote_file/local_file.rb +60 -60
  811. data/lib/chef/provider/remote_file/network_file.rb +61 -61
  812. data/lib/chef/provider/remote_file/sftp.rb +105 -105
  813. data/lib/chef/provider/resource_update.rb +52 -52
  814. data/lib/chef/provider/route.rb +244 -244
  815. data/lib/chef/provider/ruby_block.rb +40 -40
  816. data/lib/chef/provider/script.rb +121 -121
  817. data/lib/chef/provider/service.rb +252 -252
  818. data/lib/chef/provider/service/aix.rb +125 -125
  819. data/lib/chef/provider/service/aixinit.rb +117 -117
  820. data/lib/chef/provider/service/arch.rb +118 -118
  821. data/lib/chef/provider/service/debian.rb +176 -176
  822. data/lib/chef/provider/service/freebsd.rb +194 -194
  823. data/lib/chef/provider/service/gentoo.rb +70 -70
  824. data/lib/chef/provider/service/init.rb +93 -93
  825. data/lib/chef/provider/service/insserv.rb +59 -59
  826. data/lib/chef/provider/service/invokercd.rb +41 -41
  827. data/lib/chef/provider/service/macosx.rb +251 -251
  828. data/lib/chef/provider/service/openbsd.rb +216 -216
  829. data/lib/chef/provider/service/redhat.rb +126 -126
  830. data/lib/chef/provider/service/simple.rb +171 -171
  831. data/lib/chef/provider/service/solaris.rb +127 -127
  832. data/lib/chef/provider/service/systemd.rb +189 -189
  833. data/lib/chef/provider/service/upstart.rb +259 -259
  834. data/lib/chef/provider/service/windows.rb +309 -309
  835. data/lib/chef/provider/subversion.rb +227 -227
  836. data/lib/chef/provider/support/yum_repo.erb +138 -138
  837. data/lib/chef/provider/support/zypper_repo.erb +17 -17
  838. data/lib/chef/provider/systemd_unit.rb +242 -242
  839. data/lib/chef/provider/template.rb +59 -59
  840. data/lib/chef/provider/template/content.rb +93 -93
  841. data/lib/chef/provider/template_finder.rb +62 -62
  842. data/lib/chef/provider/user.rb +204 -204
  843. data/lib/chef/provider/user/aix.rb +99 -99
  844. data/lib/chef/provider/user/dscl.rb +719 -719
  845. data/lib/chef/provider/user/linux.rb +126 -126
  846. data/lib/chef/provider/user/pw.rb +105 -105
  847. data/lib/chef/provider/user/solaris.rb +129 -129
  848. data/lib/chef/provider/user/useradd.rb +158 -158
  849. data/lib/chef/provider/user/windows.rb +125 -125
  850. data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -32
  851. data/lib/chef/provider/windows_path.rb +61 -61
  852. data/lib/chef/provider/windows_script.rb +75 -75
  853. data/lib/chef/provider/windows_task.rb +568 -568
  854. data/lib/chef/provider/yum_repository.rb +130 -130
  855. data/lib/chef/provider/zypper_repository.rb +169 -169
  856. data/lib/chef/provider_resolver.rb +146 -146
  857. data/lib/chef/providers.rb +154 -154
  858. data/lib/chef/recipe.rb +116 -116
  859. data/lib/chef/request_id.rb +37 -37
  860. data/lib/chef/reserved_names.rb +9 -9
  861. data/lib/chef/resource.rb +1507 -1507
  862. data/lib/chef/resource/action_class.rb +90 -90
  863. data/lib/chef/resource/apt_package.rb +33 -33
  864. data/lib/chef/resource/apt_preference.rb +40 -40
  865. data/lib/chef/resource/apt_repository.rb +50 -50
  866. data/lib/chef/resource/apt_update.rb +38 -38
  867. data/lib/chef/resource/bash.rb +37 -37
  868. data/lib/chef/resource/batch.rb +38 -38
  869. data/lib/chef/resource/bff_package.rb +31 -31
  870. data/lib/chef/resource/breakpoint.rb +50 -50
  871. data/lib/chef/resource/cab_package.rb +44 -44
  872. data/lib/chef/resource/chef_gem.rb +56 -56
  873. data/lib/chef/resource/chocolatey_package.rb +41 -41
  874. data/lib/chef/resource/conditional.rb +135 -135
  875. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -48
  876. data/lib/chef/resource/cookbook_file.rb +47 -47
  877. data/lib/chef/resource/cron.rb +218 -218
  878. data/lib/chef/resource/csh.rb +37 -37
  879. data/lib/chef/resource/deploy.rb +449 -449
  880. data/lib/chef/resource/deploy_revision.rb +31 -31
  881. data/lib/chef/resource/directory.rb +44 -44
  882. data/lib/chef/resource/dnf_package.rb +79 -79
  883. data/lib/chef/resource/dpkg_package.rb +32 -32
  884. data/lib/chef/resource/dsc_resource.rb +134 -134
  885. data/lib/chef/resource/dsc_script.rb +146 -146
  886. data/lib/chef/resource/env.rb +36 -36
  887. data/lib/chef/resource/erl_call.rb +90 -90
  888. data/lib/chef/resource/execute.rb +233 -233
  889. data/lib/chef/resource/file.rb +89 -89
  890. data/lib/chef/resource/file/verification.rb +135 -135
  891. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -67
  892. data/lib/chef/resource/freebsd_package.rb +70 -70
  893. data/lib/chef/resource/gem_package.rb +57 -57
  894. data/lib/chef/resource/git.rb +46 -46
  895. data/lib/chef/resource/group.rb +103 -103
  896. data/lib/chef/resource/homebrew_package.rb +37 -37
  897. data/lib/chef/resource/http_request.rb +68 -68
  898. data/lib/chef/resource/ifconfig.rb +56 -56
  899. data/lib/chef/resource/ips_package.rb +35 -35
  900. data/lib/chef/resource/ksh.rb +38 -38
  901. data/lib/chef/resource/launchd.rb +145 -145
  902. data/lib/chef/resource/link.rb +117 -117
  903. data/lib/chef/resource/log.rb +49 -49
  904. data/lib/chef/resource/lwrp_base.rb +122 -122
  905. data/lib/chef/resource/macosx_service.rb +58 -58
  906. data/lib/chef/resource/macports_package.rb +28 -28
  907. data/lib/chef/resource/mdadm.rb +116 -116
  908. data/lib/chef/resource/mount.rb +175 -175
  909. data/lib/chef/resource/msu_package.rb +46 -46
  910. data/lib/chef/resource/ohai.rb +35 -35
  911. data/lib/chef/resource/openbsd_package.rb +38 -38
  912. data/lib/chef/resource/osx_profile.rb +44 -44
  913. data/lib/chef/resource/package.rb +53 -53
  914. data/lib/chef/resource/pacman_package.rb +29 -29
  915. data/lib/chef/resource/paludis_package.rb +36 -36
  916. data/lib/chef/resource/perl.rb +36 -36
  917. data/lib/chef/resource/portage_package.rb +33 -33
  918. data/lib/chef/resource/powershell_package.rb +46 -46
  919. data/lib/chef/resource/powershell_script.rb +58 -58
  920. data/lib/chef/resource/python.rb +35 -35
  921. data/lib/chef/resource/reboot.rb +42 -42
  922. data/lib/chef/resource/registry_key.rb +145 -145
  923. data/lib/chef/resource/remote_directory.rb +125 -125
  924. data/lib/chef/resource/remote_file.rb +220 -220
  925. data/lib/chef/resource/resource_notification.rb +139 -139
  926. data/lib/chef/resource/route.rb +44 -44
  927. data/lib/chef/resource/rpm_package.rb +33 -33
  928. data/lib/chef/resource/ruby.rb +35 -35
  929. data/lib/chef/resource/ruby_block.rb +56 -56
  930. data/lib/chef/resource/scm.rb +179 -179
  931. data/lib/chef/resource/script.rb +52 -52
  932. data/lib/chef/resource/service.rb +220 -220
  933. data/lib/chef/resource/smartos_package.rb +30 -30
  934. data/lib/chef/resource/solaris_package.rb +32 -32
  935. data/lib/chef/resource/subversion.rb +45 -45
  936. data/lib/chef/resource/systemd_unit.rb +74 -74
  937. data/lib/chef/resource/template.rb +224 -224
  938. data/lib/chef/resource/timestamped_deploy.rb +26 -26
  939. data/lib/chef/resource/user.rb +159 -159
  940. data/lib/chef/resource/user/aix_user.rb +31 -31
  941. data/lib/chef/resource/user/dscl_user.rb +31 -31
  942. data/lib/chef/resource/user/linux_user.rb +32 -32
  943. data/lib/chef/resource/user/pw_user.rb +31 -31
  944. data/lib/chef/resource/user/solaris_user.rb +31 -31
  945. data/lib/chef/resource/user/windows_user.rb +31 -31
  946. data/lib/chef/resource/whyrun_safe_ruby_block.rb +24 -24
  947. data/lib/chef/resource/windows_package.rb +60 -60
  948. data/lib/chef/resource/windows_path.rb +36 -36
  949. data/lib/chef/resource/windows_script.rb +65 -65
  950. data/lib/chef/resource/windows_service.rb +74 -74
  951. data/lib/chef/resource/windows_task.rb +221 -221
  952. data/lib/chef/resource/yum_package.rb +61 -61
  953. data/lib/chef/resource/yum_repository.rb +85 -85
  954. data/lib/chef/resource/zypper_package.rb +33 -33
  955. data/lib/chef/resource/zypper_repository.rb +58 -58
  956. data/lib/chef/resource_builder.rb +92 -92
  957. data/lib/chef/resource_collection.rb +146 -146
  958. data/lib/chef/resource_collection/resource_collection_serialization.rb +66 -66
  959. data/lib/chef/resource_collection/resource_list.rb +106 -106
  960. data/lib/chef/resource_collection/resource_set.rb +200 -200
  961. data/lib/chef/resource_collection/stepable_iterator.rb +122 -122
  962. data/lib/chef/resource_definition.rb +68 -68
  963. data/lib/chef/resource_definition_list.rb +38 -38
  964. data/lib/chef/resource_reporter.rb +338 -338
  965. data/lib/chef/resource_resolver.rb +160 -160
  966. data/lib/chef/resources.rb +104 -104
  967. data/lib/chef/role.rb +274 -274
  968. data/lib/chef/run_context.rb +673 -673
  969. data/lib/chef/run_context/cookbook_compiler.rb +335 -335
  970. data/lib/chef/run_list.rb +168 -168
  971. data/lib/chef/run_list/run_list_expansion.rb +234 -234
  972. data/lib/chef/run_list/run_list_item.rb +98 -98
  973. data/lib/chef/run_list/versioned_recipe_list.rb +104 -104
  974. data/lib/chef/run_lock.rb +197 -197
  975. data/lib/chef/run_status.rb +125 -125
  976. data/lib/chef/runner.rb +144 -144
  977. data/lib/chef/sandbox.rb +20 -20
  978. data/lib/chef/scan_access_control.rb +138 -138
  979. data/lib/chef/search/query.rb +183 -183
  980. data/lib/chef/server_api.rb +81 -81
  981. data/lib/chef/server_api_versions.rb +59 -59
  982. data/lib/chef/shell.rb +353 -353
  983. data/lib/chef/shell/ext.rb +593 -593
  984. data/lib/chef/shell/model_wrapper.rb +120 -120
  985. data/lib/chef/shell/shell_session.rb +309 -309
  986. data/lib/chef/user.rb +192 -192
  987. data/lib/chef/user_v1.rb +323 -323
  988. data/lib/chef/util/backup.rb +94 -94
  989. data/lib/chef/util/diff.rb +184 -184
  990. data/lib/chef/util/dsc/configuration_generator.rb +139 -139
  991. data/lib/chef/util/dsc/lcm_output_parser.rb +192 -192
  992. data/lib/chef/util/dsc/local_configuration_manager.rb +151 -151
  993. data/lib/chef/util/dsc/resource_info.rb +26 -26
  994. data/lib/chef/util/dsc/resource_store.rb +109 -109
  995. data/lib/chef/util/editor.rb +91 -91
  996. data/lib/chef/util/file_edit.rb +100 -100
  997. data/lib/chef/util/path_helper.rb +25 -25
  998. data/lib/chef/util/powershell/cmdlet.rb +173 -173
  999. data/lib/chef/util/powershell/cmdlet_result.rb +61 -61
  1000. data/lib/chef/util/powershell/ps_credential.rb +41 -41
  1001. data/lib/chef/util/selinux.rb +93 -93
  1002. data/lib/chef/util/threaded_job_queue.rb +61 -61
  1003. data/lib/chef/util/windows.rb +24 -24
  1004. data/lib/chef/util/windows/logon_session.rb +126 -126
  1005. data/lib/chef/util/windows/net_group.rb +72 -72
  1006. data/lib/chef/util/windows/net_use.rb +81 -81
  1007. data/lib/chef/util/windows/net_user.rb +164 -164
  1008. data/lib/chef/util/windows/volume.rb +53 -53
  1009. data/lib/chef/version.rb +36 -36
  1010. data/lib/chef/version/platform.rb +62 -62
  1011. data/lib/chef/version_class.rb +75 -75
  1012. data/lib/chef/version_constraint.rb +118 -118
  1013. data/lib/chef/version_constraint/platform.rb +28 -28
  1014. data/lib/chef/version_string.rb +143 -143
  1015. data/lib/chef/whitelist.rb +86 -86
  1016. data/lib/chef/win32/api.rb +372 -372
  1017. data/lib/chef/win32/api/crypto.rb +63 -63
  1018. data/lib/chef/win32/api/error.rb +953 -953
  1019. data/lib/chef/win32/api/file.rb +620 -620
  1020. data/lib/chef/win32/api/installer.rb +165 -165
  1021. data/lib/chef/win32/api/memory.rb +105 -105
  1022. data/lib/chef/win32/api/net.rb +312 -312
  1023. data/lib/chef/win32/api/process.rb +42 -42
  1024. data/lib/chef/win32/api/psapi.rb +51 -51
  1025. data/lib/chef/win32/api/registry.rb +51 -51
  1026. data/lib/chef/win32/api/security.rb +462 -462
  1027. data/lib/chef/win32/api/synchronization.rb +89 -89
  1028. data/lib/chef/win32/api/system.rb +238 -238
  1029. data/lib/chef/win32/api/unicode.rb +135 -135
  1030. data/lib/chef/win32/crypto.rb +50 -50
  1031. data/lib/chef/win32/error.rb +86 -86
  1032. data/lib/chef/win32/eventlog.rb +31 -31
  1033. data/lib/chef/win32/file.rb +218 -218
  1034. data/lib/chef/win32/file/info.rb +99 -99
  1035. data/lib/chef/win32/file/version_info.rb +93 -93
  1036. data/lib/chef/win32/handle.rb +55 -55
  1037. data/lib/chef/win32/memory.rb +101 -101
  1038. data/lib/chef/win32/mutex.rb +116 -116
  1039. data/lib/chef/win32/net.rb +311 -311
  1040. data/lib/chef/win32/process.rb +97 -97
  1041. data/lib/chef/win32/registry.rb +374 -374
  1042. data/lib/chef/win32/security.rb +665 -665
  1043. data/lib/chef/win32/security/ace.rb +123 -123
  1044. data/lib/chef/win32/security/acl.rb +103 -103
  1045. data/lib/chef/win32/security/securable_object.rb +109 -109
  1046. data/lib/chef/win32/security/security_descriptor.rb +93 -93
  1047. data/lib/chef/win32/security/sid.rb +309 -309
  1048. data/lib/chef/win32/security/token.rb +72 -72
  1049. data/lib/chef/win32/system.rb +62 -62
  1050. data/lib/chef/win32/unicode.rb +60 -60
  1051. data/lib/chef/win32/version.rb +164 -164
  1052. data/lib/chef/workstation_config_loader.rb +23 -23
  1053. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
  1054. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
  1055. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
  1056. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -34
  1057. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
  1058. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
  1059. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
  1060. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
  1061. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
  1062. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
  1063. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -34
  1064. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
  1065. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
  1066. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
  1067. data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -5
  1068. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -45
  1069. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -1
  1070. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -1
  1071. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -10
  1072. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -1
  1073. data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -1
  1074. data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -1
  1075. data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -13
  1076. data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -34
  1077. data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -1
  1078. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -13
  1079. data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -1
  1080. data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -18
  1081. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -91
  1082. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -31
  1083. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
  1084. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
  1085. data/spec/data/apt/var/www/apt/conf/distributions +7 -7
  1086. data/spec/data/apt/var/www/apt/conf/incoming +4 -4
  1087. data/spec/data/apt/var/www/apt/conf/pulls +3 -3
  1088. data/spec/data/apt/var/www/apt/db/version +4 -4
  1089. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
  1090. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
  1091. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
  1092. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
  1093. data/spec/data/bootstrap/no_proxy.erb +2 -2
  1094. data/spec/data/bootstrap/secret.erb +9 -9
  1095. data/spec/data/bootstrap/test-hints.erb +12 -12
  1096. data/spec/data/bootstrap/test.erb +1 -1
  1097. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
  1098. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
  1099. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
  1100. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
  1101. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
  1102. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
  1103. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
  1104. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
  1105. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
  1106. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
  1107. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
  1108. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
  1109. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
  1110. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
  1111. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
  1112. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
  1113. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
  1114. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
  1115. data/spec/data/client.d_00/00-foo.rb +2 -2
  1116. data/spec/data/client.d_00/01-bar.rb +1 -1
  1117. data/spec/data/client.d_00/02-strings.rb +2 -2
  1118. data/spec/data/client.d_00/bar +1 -1
  1119. data/spec/data/client.d_01/foo/bar.rb +1 -1
  1120. data/spec/data/client.d_02/foo.rb/foo.txt +1 -1
  1121. data/spec/data/config.rb +6 -6
  1122. data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
  1123. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
  1124. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
  1125. data/spec/data/cookbooks/apache2/metadata.rb +2 -2
  1126. data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
  1127. data/spec/data/cookbooks/borken/metadata.rb +2 -2
  1128. data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
  1129. data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
  1130. data/spec/data/cookbooks/chefignore +8 -8
  1131. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
  1132. data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
  1133. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
  1134. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
  1135. data/spec/data/cookbooks/java/files/default/java.response +1 -1
  1136. data/spec/data/cookbooks/java/metadata.rb +2 -2
  1137. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
  1138. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
  1139. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -8
  1140. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
  1141. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  1142. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
  1143. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
  1144. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
  1145. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
  1146. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
  1147. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
  1148. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
  1149. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
  1150. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
  1151. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
  1152. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
  1153. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
  1154. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
  1155. data/spec/data/cookbooks/openldap/metadata.rb +8 -8
  1156. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
  1157. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
  1158. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
  1159. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
  1160. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
  1161. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -14
  1162. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
  1163. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -1
  1164. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -1
  1165. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
  1166. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -1
  1167. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
  1168. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
  1169. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
  1170. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
  1171. data/spec/data/cookbooks/preseed/metadata.rb +2 -2
  1172. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
  1173. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
  1174. data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +5 -5
  1175. data/spec/data/definitions/test.rb +4 -4
  1176. data/spec/data/environment-config.rb +4 -4
  1177. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
  1178. data/spec/data/fileedit/hosts +4 -4
  1179. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
  1180. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
  1181. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -8
  1182. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
  1183. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +9 -9
  1184. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -8
  1185. data/spec/data/kitchen/chefignore +6 -6
  1186. data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
  1187. data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
  1188. data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
  1189. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
  1190. data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
  1191. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
  1192. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
  1193. data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
  1194. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
  1195. data/spec/data/knife_subcommand/test_yourself.rb +21 -21
  1196. data/spec/data/lwrp/providers/buck_passer.rb +28 -28
  1197. data/spec/data/lwrp/providers/buck_passer_2.rb +26 -26
  1198. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -28
  1199. data/spec/data/lwrp/providers/inline_compiler.rb +24 -24
  1200. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
  1201. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
  1202. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
  1203. data/spec/data/lwrp/resources/bar.rb +2 -2
  1204. data/spec/data/lwrp/resources/buck_passer.rb +5 -5
  1205. data/spec/data/lwrp/resources/buck_passer_2.rb +3 -3
  1206. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -3
  1207. data/spec/data/lwrp/resources/foo.rb +4 -4
  1208. data/spec/data/lwrp/resources/inline_compiler.rb +3 -3
  1209. data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -5
  1210. data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -3
  1211. data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -3
  1212. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
  1213. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
  1214. data/spec/data/lwrp_override/resources/foo.rb +10 -10
  1215. data/spec/data/mac_users/10.7-8.plist.xml +559 -559
  1216. data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
  1217. data/spec/data/mac_users/10.7.plist.xml +559 -559
  1218. data/spec/data/mac_users/10.7.shadow.xml +11 -11
  1219. data/spec/data/mac_users/10.8.plist.xml +559 -559
  1220. data/spec/data/mac_users/10.8.shadow.xml +21 -21
  1221. data/spec/data/mac_users/10.9.plist.xml +560 -560
  1222. data/spec/data/mac_users/10.9.shadow.xml +21 -21
  1223. data/spec/data/metadata/quick_start/metadata.rb +19 -19
  1224. data/spec/data/nested.json +2 -2
  1225. data/spec/data/nodes/default.rb +15 -15
  1226. data/spec/data/nodes/test.example.com.rb +17 -17
  1227. data/spec/data/nodes/test.rb +15 -15
  1228. data/spec/data/null_config.rb +1 -1
  1229. data/spec/data/object_loader/environments/test.json +7 -7
  1230. data/spec/data/object_loader/environments/test.rb +2 -2
  1231. data/spec/data/object_loader/environments/test_json_class.json +8 -8
  1232. data/spec/data/object_loader/nodes/test.json +7 -7
  1233. data/spec/data/object_loader/nodes/test.rb +2 -2
  1234. data/spec/data/object_loader/nodes/test_json_class.json +8 -8
  1235. data/spec/data/object_loader/roles/test.json +7 -7
  1236. data/spec/data/object_loader/roles/test.rb +2 -2
  1237. data/spec/data/object_loader/roles/test_json_class.json +8 -8
  1238. data/spec/data/partial_one.erb +1 -1
  1239. data/spec/data/prefer_metadata_json/metadata.json +51 -51
  1240. data/spec/data/prefer_metadata_json/metadata.rb +6 -6
  1241. data/spec/data/recipes/test.rb +7 -7
  1242. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -1
  1243. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -1
  1244. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -2
  1245. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -3
  1246. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -1
  1247. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -2
  1248. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -3
  1249. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -3
  1250. data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -1
  1251. data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -2
  1252. data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -3
  1253. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -2
  1254. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
  1255. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
  1256. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
  1257. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
  1258. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
  1259. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -2
  1260. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
  1261. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
  1262. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
  1263. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
  1264. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
  1265. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  1266. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  1267. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -2
  1268. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
  1269. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
  1270. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
  1271. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
  1272. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -2
  1273. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
  1274. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
  1275. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
  1276. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
  1277. data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -24
  1278. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -3
  1279. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -2
  1280. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
  1281. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
  1282. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
  1283. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -2
  1284. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
  1285. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
  1286. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
  1287. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
  1288. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
  1289. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -2
  1290. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
  1291. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
  1292. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
  1293. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
  1294. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
  1295. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  1296. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
  1297. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
  1298. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
  1299. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
  1300. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
  1301. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
  1302. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
  1303. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
  1304. data/spec/data/run_context/nodes/run_context.rb +5 -5
  1305. data/spec/data/sample_msu1.xml +10 -10
  1306. data/spec/data/sample_msu2.xml +14 -14
  1307. data/spec/data/sample_msu3.xml +16 -16
  1308. data/spec/data/search_queries_to_transform.txt +98 -98
  1309. data/spec/data/shef-config.rb +11 -11
  1310. data/spec/data/ssl/5e707473.0 +18 -18
  1311. data/spec/data/ssl/chef-rspec.cert +27 -27
  1312. data/spec/data/ssl/chef-rspec.key +27 -27
  1313. data/spec/data/ssl/key.pem +15 -15
  1314. data/spec/data/ssl/private_key.pem +27 -27
  1315. data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
  1316. data/spec/data/standalone_cookbook/chefignore +9 -9
  1317. data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
  1318. data/spec/data/trusted_certs/example.crt +22 -22
  1319. data/spec/data/trusted_certs/example_no_cn.crt +36 -36
  1320. data/spec/data/trusted_certs/intermediate.pem +27 -27
  1321. data/spec/data/trusted_certs/opscode.pem +57 -57
  1322. data/spec/data/trusted_certs/root.pem +22 -22
  1323. data/spec/functional/application_spec.rb +58 -58
  1324. data/spec/functional/assets/chefinittest +36 -36
  1325. data/spec/functional/assets/testchefsubsys +10 -10
  1326. data/spec/functional/assets/yumrepo/repodata/repomd.xml +55 -55
  1327. data/spec/functional/audit/rspec_formatter_spec.rb +54 -54
  1328. data/spec/functional/audit/runner_spec.rb +121 -121
  1329. data/spec/functional/dsl/reboot_pending_spec.rb +106 -106
  1330. data/spec/functional/dsl/registry_helper_spec.rb +61 -61
  1331. data/spec/functional/event_loggers/windows_eventlog_spec.rb +104 -104
  1332. data/spec/functional/file_content_management/deploy_strategies_spec.rb +229 -229
  1333. data/spec/functional/http/simple_spec.rb +140 -140
  1334. data/spec/functional/knife/configure_spec.rb +33 -33
  1335. data/spec/functional/knife/cookbook_delete_spec.rb +156 -156
  1336. data/spec/functional/knife/exec_spec.rb +55 -55
  1337. data/spec/functional/knife/rehash_spec.rb +39 -39
  1338. data/spec/functional/knife/smoke_test.rb +42 -42
  1339. data/spec/functional/knife/ssh_spec.rb +359 -359
  1340. data/spec/functional/mixin/powershell_out_spec.rb +43 -59
  1341. data/spec/functional/mixin/shell_out_spec.rb +48 -48
  1342. data/spec/functional/mixin/user_context_spec.rb +117 -117
  1343. data/spec/functional/notifications_spec.rb +238 -238
  1344. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +100 -100
  1345. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -51
  1346. data/spec/functional/rebooter_spec.rb +117 -117
  1347. data/spec/functional/resource/aix_service_spec.rb +138 -138
  1348. data/spec/functional/resource/aixinit_service_spec.rb +211 -211
  1349. data/spec/functional/resource/base.rb +28 -28
  1350. data/spec/functional/resource/bash_spec.rb +54 -54
  1351. data/spec/functional/resource/batch_spec.rb +34 -34
  1352. data/spec/functional/resource/bff_spec.rb +120 -120
  1353. data/spec/functional/resource/chocolatey_package_spec.rb +118 -118
  1354. data/spec/functional/resource/cookbook_file_spec.rb +81 -81
  1355. data/spec/functional/resource/cron_spec.rb +179 -179
  1356. data/spec/functional/resource/deploy_revision_spec.rb +881 -881
  1357. data/spec/functional/resource/directory_spec.rb +43 -43
  1358. data/spec/functional/resource/dnf_package_spec.rb +686 -686
  1359. data/spec/functional/resource/dpkg_package_spec.rb +339 -339
  1360. data/spec/functional/resource/dsc_resource_spec.rb +90 -90
  1361. data/spec/functional/resource/dsc_script_spec.rb +484 -484
  1362. data/spec/functional/resource/env_spec.rb +192 -192
  1363. data/spec/functional/resource/execute_spec.rb +171 -171
  1364. data/spec/functional/resource/file_spec.rb +167 -167
  1365. data/spec/functional/resource/git_spec.rb +257 -257
  1366. data/spec/functional/resource/group_spec.rb +488 -488
  1367. data/spec/functional/resource/ifconfig_spec.rb +171 -171
  1368. data/spec/functional/resource/link_spec.rb +703 -703
  1369. data/spec/functional/resource/mount_spec.rb +207 -207
  1370. data/spec/functional/resource/msu_package_spec.rb +84 -84
  1371. data/spec/functional/resource/ohai_spec.rb +62 -62
  1372. data/spec/functional/resource/package_spec.rb +386 -386
  1373. data/spec/functional/resource/powershell_script_spec.rb +601 -601
  1374. data/spec/functional/resource/reboot_spec.rb +103 -103
  1375. data/spec/functional/resource/registry_spec.rb +676 -676
  1376. data/spec/functional/resource/remote_directory_spec.rb +220 -220
  1377. data/spec/functional/resource/remote_file_spec.rb +420 -420
  1378. data/spec/functional/resource/rpm_spec.rb +120 -120
  1379. data/spec/functional/resource/template_spec.rb +245 -245
  1380. data/spec/functional/resource/user/dscl_spec.rb +196 -196
  1381. data/spec/functional/resource/user/useradd_spec.rb +709 -709
  1382. data/spec/functional/resource/user/windows_spec.rb +133 -133
  1383. data/spec/functional/resource/windows_package_spec.rb +168 -168
  1384. data/spec/functional/resource/windows_path_spec.rb +64 -64
  1385. data/spec/functional/resource/windows_service_spec.rb +102 -102
  1386. data/spec/functional/resource/windows_task_spec.rb +482 -482
  1387. data/spec/functional/root_alias_spec.rb +78 -78
  1388. data/spec/functional/run_lock_spec.rb +473 -473
  1389. data/spec/functional/shell_spec.rb +146 -146
  1390. data/spec/functional/tiny_server_spec.rb +79 -79
  1391. data/spec/functional/util/path_helper_spec.rb +37 -37
  1392. data/spec/functional/util/powershell/cmdlet_spec.rb +111 -111
  1393. data/spec/functional/version_spec.rb +35 -35
  1394. data/spec/functional/win32/crypto_spec.rb +54 -54
  1395. data/spec/functional/win32/registry_spec.rb +624 -624
  1396. data/spec/functional/win32/security_spec.rb +100 -100
  1397. data/spec/functional/win32/service_manager_spec.rb +220 -220
  1398. data/spec/functional/win32/sid_spec.rb +55 -55
  1399. data/spec/functional/win32/version_info_spec.rb +50 -50
  1400. data/spec/functional/win32/versions_spec.rb +117 -117
  1401. data/spec/integration/client/client_spec.rb +627 -627
  1402. data/spec/integration/client/exit_code_spec.rb +141 -141
  1403. data/spec/integration/client/ipv6_spec.rb +134 -134
  1404. data/spec/integration/knife/chef_fs_data_store_spec.rb +556 -556
  1405. data/spec/integration/knife/chef_repo_path_spec.rb +959 -959
  1406. data/spec/integration/knife/chef_repository_file_system_spec.rb +199 -199
  1407. data/spec/integration/knife/chefignore_spec.rb +300 -300
  1408. data/spec/integration/knife/client_bulk_delete_spec.rb +130 -130
  1409. data/spec/integration/knife/client_create_spec.rb +69 -69
  1410. data/spec/integration/knife/client_delete_spec.rb +63 -63
  1411. data/spec/integration/knife/client_key_create_spec.rb +65 -65
  1412. data/spec/integration/knife/client_key_delete_spec.rb +42 -42
  1413. data/spec/integration/knife/client_key_list_spec.rb +60 -60
  1414. data/spec/integration/knife/client_key_show_spec.rb +44 -44
  1415. data/spec/integration/knife/client_list_spec.rb +48 -48
  1416. data/spec/integration/knife/client_show_spec.rb +36 -36
  1417. data/spec/integration/knife/common_options_spec.rb +173 -173
  1418. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -112
  1419. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +64 -64
  1420. data/spec/integration/knife/cookbook_download_spec.rb +71 -71
  1421. data/spec/integration/knife/cookbook_list_spec.rb +54 -54
  1422. data/spec/integration/knife/cookbook_show_spec.rb +148 -148
  1423. data/spec/integration/knife/cookbook_upload_spec.rb +90 -90
  1424. data/spec/integration/knife/data_bag_create_spec.rb +55 -55
  1425. data/spec/integration/knife/data_bag_delete_spec.rb +58 -58
  1426. data/spec/integration/knife/data_bag_from_file_spec.rb +115 -115
  1427. data/spec/integration/knife/data_bag_list_spec.rb +43 -43
  1428. data/spec/integration/knife/data_bag_show_spec.rb +53 -53
  1429. data/spec/integration/knife/delete_spec.rb +1017 -1017
  1430. data/spec/integration/knife/deps_spec.rb +702 -702
  1431. data/spec/integration/knife/diff_spec.rb +602 -602
  1432. data/spec/integration/knife/download_spec.rb +1333 -1333
  1433. data/spec/integration/knife/environment_compare_spec.rb +74 -74
  1434. data/spec/integration/knife/environment_create_spec.rb +40 -40
  1435. data/spec/integration/knife/environment_delete_spec.rb +36 -36
  1436. data/spec/integration/knife/environment_from_file_spec.rb +115 -115
  1437. data/spec/integration/knife/environment_list_spec.rb +41 -41
  1438. data/spec/integration/knife/environment_show_spec.rb +76 -76
  1439. data/spec/integration/knife/list_spec.rb +1059 -1059
  1440. data/spec/integration/knife/node_bulk_delete_spec.rb +51 -51
  1441. data/spec/integration/knife/node_create_spec.rb +46 -46
  1442. data/spec/integration/knife/node_delete_spec.rb +47 -47
  1443. data/spec/integration/knife/node_environment_set_spec.rb +45 -45
  1444. data/spec/integration/knife/node_from_file_spec.rb +58 -58
  1445. data/spec/integration/knife/node_list_spec.rb +44 -44
  1446. data/spec/integration/knife/node_run_list_add_spec.rb +53 -53
  1447. data/spec/integration/knife/node_run_list_remove_spec.rb +35 -35
  1448. data/spec/integration/knife/node_run_list_set_spec.rb +40 -40
  1449. data/spec/integration/knife/node_show_spec.rb +35 -35
  1450. data/spec/integration/knife/raw_spec.rb +244 -244
  1451. data/spec/integration/knife/redirection_spec.rb +52 -52
  1452. data/spec/integration/knife/role_bulk_delete_spec.rb +51 -51
  1453. data/spec/integration/knife/role_create_spec.rb +40 -40
  1454. data/spec/integration/knife/role_delete_spec.rb +47 -47
  1455. data/spec/integration/knife/role_from_file_spec.rb +95 -95
  1456. data/spec/integration/knife/role_list_spec.rb +44 -44
  1457. data/spec/integration/knife/role_show_spec.rb +50 -50
  1458. data/spec/integration/knife/search_node_spec.rb +39 -39
  1459. data/spec/integration/knife/serve_spec.rb +93 -93
  1460. data/spec/integration/knife/show_spec.rb +167 -167
  1461. data/spec/integration/knife/upload_spec.rb +1540 -1540
  1462. data/spec/integration/recipes/accumulator_spec.rb +232 -232
  1463. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +171 -171
  1464. data/spec/integration/recipes/lwrp_spec.rb +53 -53
  1465. data/spec/integration/recipes/noop_resource_spec.rb +24 -24
  1466. data/spec/integration/recipes/notifies_spec.rb +394 -394
  1467. data/spec/integration/recipes/notifying_block_spec.rb +111 -111
  1468. data/spec/integration/recipes/provider_choice.rb +37 -37
  1469. data/spec/integration/recipes/recipe_dsl_spec.rb +1373 -1373
  1470. data/spec/integration/recipes/remote_directory.rb +74 -74
  1471. data/spec/integration/recipes/resource_action_spec.rb +599 -599
  1472. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +552 -552
  1473. data/spec/integration/recipes/resource_load_spec.rb +192 -192
  1474. data/spec/integration/solo/solo_spec.rb +217 -217
  1475. data/spec/rcov.opts +2 -2
  1476. data/spec/scripts/ssl-serve.rb +47 -47
  1477. data/spec/spec_helper.rb +319 -301
  1478. data/spec/stress/win32/file_spec.rb +37 -37
  1479. data/spec/stress/win32/memory_spec.rb +22 -22
  1480. data/spec/stress/win32/security_spec.rb +69 -69
  1481. data/spec/support/chef_helpers.rb +115 -115
  1482. data/spec/support/key_helpers.rb +104 -104
  1483. data/spec/support/lib/chef/provider/easy.rb +35 -35
  1484. data/spec/support/lib/chef/provider/openldap_includer.rb +29 -29
  1485. data/spec/support/lib/chef/provider/snakeoil.rb +42 -42
  1486. data/spec/support/lib/chef/resource/cat.rb +39 -39
  1487. data/spec/support/lib/chef/resource/one_two_three_four.rb +38 -38
  1488. data/spec/support/lib/chef/resource/openldap_includer.rb +28 -28
  1489. data/spec/support/lib/chef/resource/with_state.rb +30 -30
  1490. data/spec/support/lib/chef/resource/zen_follower.rb +35 -35
  1491. data/spec/support/lib/chef/resource/zen_master.rb +42 -42
  1492. data/spec/support/lib/library_load_order.rb +20 -20
  1493. data/spec/support/matchers/leak.rb +98 -98
  1494. data/spec/support/mock/constant.rb +52 -52
  1495. data/spec/support/mock/platform.rb +25 -25
  1496. data/spec/support/platform_helpers.rb +245 -245
  1497. data/spec/support/platforms/prof/gc.rb +51 -51
  1498. data/spec/support/platforms/prof/win32.rb +45 -45
  1499. data/spec/support/platforms/win32/spec_service.rb +59 -59
  1500. data/spec/support/shared/context/client.rb +302 -302
  1501. data/spec/support/shared/context/config.rb +21 -21
  1502. data/spec/support/shared/context/win32.rb +34 -34
  1503. data/spec/support/shared/examples/client.rb +53 -53
  1504. data/spec/support/shared/functional/diff_disabled.rb +10 -10
  1505. data/spec/support/shared/functional/directory_resource.rb +176 -176
  1506. data/spec/support/shared/functional/execute_resource.rb +150 -150
  1507. data/spec/support/shared/functional/file_resource.rb +1050 -1050
  1508. data/spec/support/shared/functional/http.rb +248 -248
  1509. data/spec/support/shared/functional/knife.rb +37 -37
  1510. data/spec/support/shared/functional/securable_resource.rb +547 -547
  1511. data/spec/support/shared/functional/securable_resource_with_reporting.rb +394 -394
  1512. data/spec/support/shared/functional/win32_service.rb +57 -57
  1513. data/spec/support/shared/functional/windows_script.rb +272 -272
  1514. data/spec/support/shared/integration/app_server_support.rb +40 -40
  1515. data/spec/support/shared/integration/integration_helper.rb +154 -154
  1516. data/spec/support/shared/integration/knife_support.rb +185 -185
  1517. data/spec/support/shared/matchers/exit_with_code.rb +32 -32
  1518. data/spec/support/shared/matchers/match_environment_variable.rb +17 -17
  1519. data/spec/support/shared/shared_examples.rb +14 -14
  1520. data/spec/support/shared/unit/api_error_inspector.rb +190 -190
  1521. data/spec/support/shared/unit/api_versioning.rb +77 -77
  1522. data/spec/support/shared/unit/application_dot_d.rb +75 -75
  1523. data/spec/support/shared/unit/execute_resource.rb +168 -168
  1524. data/spec/support/shared/unit/file_system_support.rb +69 -69
  1525. data/spec/support/shared/unit/knife_shared.rb +39 -39
  1526. data/spec/support/shared/unit/mock_shellout.rb +49 -49
  1527. data/spec/support/shared/unit/platform_introspector.rb +189 -189
  1528. data/spec/support/shared/unit/provider/file.rb +853 -853
  1529. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +402 -402
  1530. data/spec/support/shared/unit/resource/static_provider_resolution.rb +63 -63
  1531. data/spec/support/shared/unit/script_resource.rb +90 -90
  1532. data/spec/support/shared/unit/user_and_client_shared.rb +114 -114
  1533. data/spec/support/shared/unit/windows_script_resource.rb +80 -80
  1534. data/spec/tiny_server.rb +192 -192
  1535. data/spec/unit/api_client/registration_spec.rb +278 -278
  1536. data/spec/unit/api_client_spec.rb +341 -341
  1537. data/spec/unit/api_client_v1_spec.rb +455 -455
  1538. data/spec/unit/application/apply_spec.rb +113 -113
  1539. data/spec/unit/application/client_spec.rb +532 -532
  1540. data/spec/unit/application/exit_code_spec.rb +144 -144
  1541. data/spec/unit/application/knife_spec.rb +229 -229
  1542. data/spec/unit/application/solo_spec.rb +232 -232
  1543. data/spec/unit/application_spec.rb +421 -421
  1544. data/spec/unit/audit/audit_event_proxy_spec.rb +318 -318
  1545. data/spec/unit/audit/audit_reporter_spec.rb +439 -439
  1546. data/spec/unit/audit/control_group_data_spec.rb +482 -482
  1547. data/spec/unit/audit/logger_spec.rb +42 -42
  1548. data/spec/unit/audit/rspec_formatter_spec.rb +29 -29
  1549. data/spec/unit/audit/runner_spec.rb +144 -144
  1550. data/spec/unit/chef_class_spec.rb +110 -110
  1551. data/spec/unit/chef_fs/config_spec.rb +235 -235
  1552. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +82 -82
  1553. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +63 -63
  1554. data/spec/unit/chef_fs/diff_spec.rb +328 -328
  1555. data/spec/unit/chef_fs/file_pattern_spec.rb +512 -512
  1556. data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +34 -34
  1557. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +47 -47
  1558. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +126 -126
  1559. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +175 -175
  1560. data/spec/unit/chef_fs/file_system_spec.rb +148 -148
  1561. data/spec/unit/chef_fs/parallelizer.rb +477 -477
  1562. data/spec/unit/chef_fs/path_util_spec.rb +108 -108
  1563. data/spec/unit/chef_spec.rb +25 -25
  1564. data/spec/unit/client_spec.rb +596 -596
  1565. data/spec/unit/config_fetcher_spec.rb +125 -125
  1566. data/spec/unit/config_spec.rb +31 -31
  1567. data/spec/unit/cookbook/chefignore_spec.rb +49 -49
  1568. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +210 -210
  1569. data/spec/unit/cookbook/file_vendor_spec.rb +123 -123
  1570. data/spec/unit/cookbook/gem_installer_spec.rb +85 -85
  1571. data/spec/unit/cookbook/manifest_v0_spec.rb +133 -133
  1572. data/spec/unit/cookbook/manifest_v2_spec.rb +70 -70
  1573. data/spec/unit/cookbook/metadata_spec.rb +892 -892
  1574. data/spec/unit/cookbook/synchronizer_spec.rb +557 -557
  1575. data/spec/unit/cookbook/syntax_check_spec.rb +226 -226
  1576. data/spec/unit/cookbook_loader_spec.rb +297 -297
  1577. data/spec/unit/cookbook_manifest_spec.rb +226 -226
  1578. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +199 -199
  1579. data/spec/unit/cookbook_spec.rb +62 -62
  1580. data/spec/unit/cookbook_uploader_spec.rb +199 -199
  1581. data/spec/unit/cookbook_version_file_specificity_spec.rb +603 -603
  1582. data/spec/unit/cookbook_version_spec.rb +250 -250
  1583. data/spec/unit/daemon_spec.rb +183 -174
  1584. data/spec/unit/data_bag_item_spec.rb +392 -392
  1585. data/spec/unit/data_bag_spec.rb +260 -260
  1586. data/spec/unit/data_collector/messages/helpers_spec.rb +193 -193
  1587. data/spec/unit/data_collector/messages_spec.rb +329 -329
  1588. data/spec/unit/data_collector/resource_report_spec.rb +145 -145
  1589. data/spec/unit/data_collector_spec.rb +741 -741
  1590. data/spec/unit/decorator/lazy_array_spec.rb +58 -58
  1591. data/spec/unit/decorator/lazy_spec.rb +39 -39
  1592. data/spec/unit/decorator_spec.rb +142 -142
  1593. data/spec/unit/deprecated_spec.rb +59 -59
  1594. data/spec/unit/deprecation_spec.rb +129 -129
  1595. data/spec/unit/digester_spec.rb +49 -49
  1596. data/spec/unit/dsl/audit_spec.rb +43 -43
  1597. data/spec/unit/dsl/data_query_spec.rb +107 -107
  1598. data/spec/unit/dsl/declare_resource_spec.rb +365 -365
  1599. data/spec/unit/dsl/platform_introspection_spec.rb +129 -129
  1600. data/spec/unit/dsl/reboot_pending_spec.rb +100 -100
  1601. data/spec/unit/dsl/recipe_spec.rb +93 -93
  1602. data/spec/unit/dsl/registry_helper_spec.rb +52 -52
  1603. data/spec/unit/dsl/resources_spec.rb +85 -85
  1604. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +96 -96
  1605. data/spec/unit/encrypted_data_bag_item_spec.rb +438 -438
  1606. data/spec/unit/environment_spec.rb +470 -470
  1607. data/spec/unit/event_dispatch/dispatcher_spec.rb +122 -122
  1608. data/spec/unit/event_dispatch/dsl_spec.rb +83 -83
  1609. data/spec/unit/exceptions_spec.rb +132 -132
  1610. data/spec/unit/file_access_control_spec.rb +308 -308
  1611. data/spec/unit/file_cache_spec.rb +114 -114
  1612. data/spec/unit/file_content_management/deploy/cp_spec.rb +44 -44
  1613. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +101 -101
  1614. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +232 -232
  1615. data/spec/unit/file_content_management/tempfile_spec.rb +115 -115
  1616. data/spec/unit/formatters/base_spec.rb +71 -71
  1617. data/spec/unit/formatters/doc_spec.rb +92 -92
  1618. data/spec/unit/formatters/error_description_spec.rb +141 -141
  1619. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +76 -76
  1620. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +265 -265
  1621. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +126 -126
  1622. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -43
  1623. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +26 -26
  1624. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +26 -26
  1625. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +191 -191
  1626. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +91 -91
  1627. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +155 -155
  1628. data/spec/unit/guard_interpreter_spec.rb +41 -41
  1629. data/spec/unit/handler/json_file_spec.rb +63 -63
  1630. data/spec/unit/handler_spec.rb +302 -302
  1631. data/spec/unit/http/api_versions_spec.rb +82 -82
  1632. data/spec/unit/http/authenticator_spec.rb +100 -100
  1633. data/spec/unit/http/basic_client_spec.rb +72 -72
  1634. data/spec/unit/http/http_request_spec.rb +91 -91
  1635. data/spec/unit/http/json_input_spec.rb +128 -128
  1636. data/spec/unit/http/simple_spec.rb +32 -32
  1637. data/spec/unit/http/socketless_chef_zero_client_spec.rb +174 -174
  1638. data/spec/unit/http/ssl_policies_spec.rb +169 -169
  1639. data/spec/unit/http/validate_content_length_spec.rb +207 -207
  1640. data/spec/unit/http_spec.rb +229 -229
  1641. data/spec/unit/json_compat_spec.rb +73 -73
  1642. data/spec/unit/key_spec.rb +631 -631
  1643. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +152 -152
  1644. data/spec/unit/knife/bootstrap/client_builder_spec.rb +207 -207
  1645. data/spec/unit/knife/bootstrap_spec.rb +867 -867
  1646. data/spec/unit/knife/client_bulk_delete_spec.rb +166 -166
  1647. data/spec/unit/knife/client_create_spec.rb +186 -186
  1648. data/spec/unit/knife/client_delete_spec.rb +99 -99
  1649. data/spec/unit/knife/client_edit_spec.rb +53 -53
  1650. data/spec/unit/knife/client_list_spec.rb +34 -34
  1651. data/spec/unit/knife/client_reregister_spec.rb +62 -62
  1652. data/spec/unit/knife/client_show_spec.rb +52 -52
  1653. data/spec/unit/knife/configure_client_spec.rb +81 -81
  1654. data/spec/unit/knife/configure_spec.rb +191 -191
  1655. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
  1656. data/spec/unit/knife/cookbook_create_spec.rb +42 -42
  1657. data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
  1658. data/spec/unit/knife/cookbook_download_spec.rb +255 -255
  1659. data/spec/unit/knife/cookbook_list_spec.rb +88 -88
  1660. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -65
  1661. data/spec/unit/knife/cookbook_metadata_spec.rb +182 -182
  1662. data/spec/unit/knife/cookbook_show_spec.rb +254 -254
  1663. data/spec/unit/knife/cookbook_site_download_spec.rb +150 -150
  1664. data/spec/unit/knife/cookbook_site_install_spec.rb +200 -200
  1665. data/spec/unit/knife/cookbook_site_share_spec.rb +209 -209
  1666. data/spec/unit/knife/cookbook_site_unshare_spec.rb +77 -77
  1667. data/spec/unit/knife/cookbook_test_spec.rb +84 -84
  1668. data/spec/unit/knife/cookbook_upload_spec.rb +331 -331
  1669. data/spec/unit/knife/core/bootstrap_context_spec.rb +324 -324
  1670. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
  1671. data/spec/unit/knife/core/gem_glob_loader_spec.rb +209 -209
  1672. data/spec/unit/knife/core/hashed_command_loader_spec.rb +110 -110
  1673. data/spec/unit/knife/core/node_editor_spec.rb +211 -211
  1674. data/spec/unit/knife/core/object_loader_spec.rb +81 -81
  1675. data/spec/unit/knife/core/subcommand_loader_spec.rb +64 -64
  1676. data/spec/unit/knife/core/ui_spec.rb +639 -639
  1677. data/spec/unit/knife/data_bag_create_spec.rb +175 -175
  1678. data/spec/unit/knife/data_bag_edit_spec.rb +127 -127
  1679. data/spec/unit/knife/data_bag_from_file_spec.rb +173 -173
  1680. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -165
  1681. data/spec/unit/knife/data_bag_show_spec.rb +138 -138
  1682. data/spec/unit/knife/environment_compare_spec.rb +112 -112
  1683. data/spec/unit/knife/environment_create_spec.rb +91 -91
  1684. data/spec/unit/knife/environment_delete_spec.rb +71 -71
  1685. data/spec/unit/knife/environment_edit_spec.rb +79 -79
  1686. data/spec/unit/knife/environment_from_file_spec.rb +90 -90
  1687. data/spec/unit/knife/environment_list_spec.rb +54 -54
  1688. data/spec/unit/knife/environment_show_spec.rb +52 -52
  1689. data/spec/unit/knife/index_rebuild_spec.rb +125 -125
  1690. data/spec/unit/knife/key_create_spec.rb +223 -223
  1691. data/spec/unit/knife/key_delete_spec.rb +133 -133
  1692. data/spec/unit/knife/key_edit_spec.rb +264 -264
  1693. data/spec/unit/knife/key_helper.rb +74 -74
  1694. data/spec/unit/knife/key_list_spec.rb +216 -216
  1695. data/spec/unit/knife/key_show_spec.rb +126 -126
  1696. data/spec/unit/knife/knife_help.rb +92 -92
  1697. data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
  1698. data/spec/unit/knife/node_delete_spec.rb +77 -77
  1699. data/spec/unit/knife/node_edit_spec.rb +114 -114
  1700. data/spec/unit/knife/node_environment_set_spec.rb +56 -56
  1701. data/spec/unit/knife/node_from_file_spec.rb +59 -59
  1702. data/spec/unit/knife/node_list_spec.rb +62 -62
  1703. data/spec/unit/knife/node_run_list_add_spec.rb +145 -145
  1704. data/spec/unit/knife/node_run_list_remove_spec.rb +106 -106
  1705. data/spec/unit/knife/node_run_list_set_spec.rb +115 -115
  1706. data/spec/unit/knife/node_show_spec.rb +65 -65
  1707. data/spec/unit/knife/osc_user_create_spec.rb +93 -93
  1708. data/spec/unit/knife/osc_user_delete_spec.rb +44 -44
  1709. data/spec/unit/knife/osc_user_edit_spec.rb +52 -52
  1710. data/spec/unit/knife/osc_user_list_spec.rb +37 -37
  1711. data/spec/unit/knife/osc_user_reregister_spec.rb +58 -58
  1712. data/spec/unit/knife/osc_user_show_spec.rb +46 -46
  1713. data/spec/unit/knife/raw_spec.rb +43 -43
  1714. data/spec/unit/knife/role_bulk_delete_spec.rb +80 -80
  1715. data/spec/unit/knife/role_create_spec.rb +80 -80
  1716. data/spec/unit/knife/role_delete_spec.rb +67 -67
  1717. data/spec/unit/knife/role_edit_spec.rb +77 -77
  1718. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -217
  1719. data/spec/unit/knife/role_env_run_list_clear_spec.rb +94 -94
  1720. data/spec/unit/knife/role_env_run_list_remove_spec.rb +102 -102
  1721. data/spec/unit/knife/role_env_run_list_replace_spec.rb +105 -105
  1722. data/spec/unit/knife/role_env_run_list_set_spec.rb +99 -99
  1723. data/spec/unit/knife/role_from_file_spec.rb +69 -69
  1724. data/spec/unit/knife/role_list_spec.rb +54 -54
  1725. data/spec/unit/knife/role_run_list_add_spec.rb +179 -179
  1726. data/spec/unit/knife/role_run_list_clear_spec.rb +84 -84
  1727. data/spec/unit/knife/role_run_list_remove_spec.rb +92 -92
  1728. data/spec/unit/knife/role_run_list_replace_spec.rb +98 -98
  1729. data/spec/unit/knife/role_run_list_set_spec.rb +89 -89
  1730. data/spec/unit/knife/role_show_spec.rb +59 -59
  1731. data/spec/unit/knife/ssh_spec.rb +478 -478
  1732. data/spec/unit/knife/ssl_check_spec.rb +256 -256
  1733. data/spec/unit/knife/ssl_fetch_spec.rb +222 -222
  1734. data/spec/unit/knife/status_spec.rb +111 -111
  1735. data/spec/unit/knife/tag_create_spec.rb +23 -23
  1736. data/spec/unit/knife/tag_delete_spec.rb +25 -25
  1737. data/spec/unit/knife/tag_list_spec.rb +23 -23
  1738. data/spec/unit/knife/user_create_spec.rb +214 -214
  1739. data/spec/unit/knife/user_delete_spec.rb +65 -65
  1740. data/spec/unit/knife/user_edit_spec.rb +66 -66
  1741. data/spec/unit/knife/user_list_spec.rb +36 -36
  1742. data/spec/unit/knife/user_reregister_spec.rb +74 -74
  1743. data/spec/unit/knife/user_show_spec.rb +65 -65
  1744. data/spec/unit/knife_spec.rb +585 -585
  1745. data/spec/unit/log/syslog_spec.rb +53 -53
  1746. data/spec/unit/log/winevt_spec.rb +55 -55
  1747. data/spec/unit/log_spec.rb +24 -24
  1748. data/spec/unit/lwrp_spec.rb +690 -690
  1749. data/spec/unit/mash_spec.rb +51 -51
  1750. data/spec/unit/mixin/api_version_request_handling_spec.rb +126 -126
  1751. data/spec/unit/mixin/checksum_spec.rb +54 -54
  1752. data/spec/unit/mixin/convert_to_class_name_spec.rb +54 -54
  1753. data/spec/unit/mixin/deep_merge_spec.rb +342 -342
  1754. data/spec/unit/mixin/deprecation_spec.rb +57 -57
  1755. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +96 -96
  1756. data/spec/unit/mixin/homebrew_user_spec.rb +100 -100
  1757. data/spec/unit/mixin/lazy_module_include.rb +71 -71
  1758. data/spec/unit/mixin/params_validate_spec.rb +410 -410
  1759. data/spec/unit/mixin/path_sanity_spec.rb +92 -92
  1760. data/spec/unit/mixin/powershell_out_spec.rb +94 -94
  1761. data/spec/unit/mixin/powershell_type_coercions_spec.rb +83 -84
  1762. data/spec/unit/mixin/properties_spec.rb +97 -97
  1763. data/spec/unit/mixin/proxified_socket_spec.rb +97 -97
  1764. data/spec/unit/mixin/securable_spec.rb +314 -314
  1765. data/spec/unit/mixin/shell_out_spec.rb +236 -236
  1766. data/spec/unit/mixin/subclass_directive_spec.rb +45 -45
  1767. data/spec/unit/mixin/template_spec.rb +276 -276
  1768. data/spec/unit/mixin/unformatter_spec.rb +61 -61
  1769. data/spec/unit/mixin/uris_spec.rb +57 -57
  1770. data/spec/unit/mixin/user_context_spec.rb +108 -108
  1771. data/spec/unit/mixin/versioned_api_spec.rb +128 -128
  1772. data/spec/unit/mixin/which.rb +160 -160
  1773. data/spec/unit/mixin/windows_architecture_helper_spec.rb +85 -85
  1774. data/spec/unit/mixin/xml_escape_spec.rb +54 -54
  1775. data/spec/unit/monkey_patches/uri_spec.rb +34 -34
  1776. data/spec/unit/monologger_spec.rb +45 -45
  1777. data/spec/unit/node/attribute_spec.rb +1276 -1307
  1778. data/spec/unit/node/immutable_collections_spec.rb +317 -331
  1779. data/spec/unit/node/vivid_mash_spec.rb +353 -370
  1780. data/spec/unit/node_map_spec.rb +207 -182
  1781. data/spec/unit/node_spec.rb +1826 -1826
  1782. data/spec/unit/org_spec.rb +196 -196
  1783. data/spec/unit/platform/query_helpers_spec.rb +220 -220
  1784. data/spec/unit/policy_builder/dynamic_spec.rb +273 -273
  1785. data/spec/unit/policy_builder/expand_node_object_spec.rb +311 -311
  1786. data/spec/unit/policy_builder/policyfile_spec.rb +795 -795
  1787. data/spec/unit/policy_builder_spec.rb +26 -26
  1788. data/spec/unit/property/state_spec.rb +508 -508
  1789. data/spec/unit/property/validation_spec.rb +702 -702
  1790. data/spec/unit/property_spec.rb +1207 -1207
  1791. data/spec/unit/provider/apt_preference_spec.rb +87 -87
  1792. data/spec/unit/provider/apt_repository_spec.rb +189 -189
  1793. data/spec/unit/provider/apt_update_spec.rb +114 -114
  1794. data/spec/unit/provider/cookbook_file/content_spec.rb +39 -39
  1795. data/spec/unit/provider/cookbook_file_spec.rb +58 -58
  1796. data/spec/unit/provider/cron/unix_spec.rb +139 -139
  1797. data/spec/unit/provider/cron_spec.rb +986 -986
  1798. data/spec/unit/provider/deploy/revision_spec.rb +110 -110
  1799. data/spec/unit/provider/deploy/timestamped_spec.rb +40 -40
  1800. data/spec/unit/provider/deploy_spec.rb +641 -641
  1801. data/spec/unit/provider/directory_spec.rb +300 -300
  1802. data/spec/unit/provider/dsc_resource_spec.rb +343 -343
  1803. data/spec/unit/provider/dsc_script_spec.rb +173 -173
  1804. data/spec/unit/provider/env/windows_spec.rb +103 -103
  1805. data/spec/unit/provider/env_spec.rb +310 -310
  1806. data/spec/unit/provider/erl_call_spec.rb +77 -77
  1807. data/spec/unit/provider/execute_spec.rb +250 -250
  1808. data/spec/unit/provider/file/content_spec.rb +114 -114
  1809. data/spec/unit/provider/file_spec.rb +56 -56
  1810. data/spec/unit/provider/git_spec.rb +782 -782
  1811. data/spec/unit/provider/group/dscl_spec.rb +340 -340
  1812. data/spec/unit/provider/group/gpasswd_spec.rb +116 -116
  1813. data/spec/unit/provider/group/groupadd_spec.rb +194 -194
  1814. data/spec/unit/provider/group/groupmod_spec.rb +133 -133
  1815. data/spec/unit/provider/group/pw_spec.rb +138 -138
  1816. data/spec/unit/provider/group/suse_spec.rb +90 -90
  1817. data/spec/unit/provider/group/usermod_spec.rb +115 -115
  1818. data/spec/unit/provider/group/windows_spec.rb +109 -109
  1819. data/spec/unit/provider/group_spec.rb +286 -286
  1820. data/spec/unit/provider/http_request_spec.rb +159 -159
  1821. data/spec/unit/provider/ifconfig/aix_spec.rb +180 -180
  1822. data/spec/unit/provider/ifconfig/debian_spec.rb +332 -332
  1823. data/spec/unit/provider/ifconfig/redhat_spec.rb +81 -81
  1824. data/spec/unit/provider/ifconfig_spec.rb +206 -206
  1825. data/spec/unit/provider/launchd_spec.rb +268 -268
  1826. data/spec/unit/provider/link_spec.rb +407 -407
  1827. data/spec/unit/provider/log_spec.rb +89 -89
  1828. data/spec/unit/provider/mdadm_spec.rb +140 -140
  1829. data/spec/unit/provider/mount/aix_spec.rb +269 -269
  1830. data/spec/unit/provider/mount/mount_spec.rb +474 -474
  1831. data/spec/unit/provider/mount/solaris_spec.rb +822 -822
  1832. data/spec/unit/provider/mount/windows_spec.rb +149 -149
  1833. data/spec/unit/provider/mount_spec.rb +191 -191
  1834. data/spec/unit/provider/ohai_spec.rb +84 -84
  1835. data/spec/unit/provider/osx_profile_spec.rb +255 -255
  1836. data/spec/unit/provider/package/aix_spec.rb +185 -185
  1837. data/spec/unit/provider/package/apt_spec.rb +515 -515
  1838. data/spec/unit/provider/package/cab_spec.rb +272 -272
  1839. data/spec/unit/provider/package/chocolatey_spec.rb +491 -491
  1840. data/spec/unit/provider/package/dnf/python_helper_spec.rb +29 -29
  1841. data/spec/unit/provider/package/dpkg_spec.rb +287 -287
  1842. data/spec/unit/provider/package/freebsd/pkg_spec.rb +274 -274
  1843. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +148 -148
  1844. data/spec/unit/provider/package/freebsd/port_spec.rb +163 -163
  1845. data/spec/unit/provider/package/homebrew_spec.rb +292 -292
  1846. data/spec/unit/provider/package/ips_spec.rb +233 -233
  1847. data/spec/unit/provider/package/macports_spec.rb +203 -203
  1848. data/spec/unit/provider/package/msu_spec.rb +283 -283
  1849. data/spec/unit/provider/package/openbsd_spec.rb +132 -132
  1850. data/spec/unit/provider/package/pacman_spec.rb +194 -194
  1851. data/spec/unit/provider/package/paludis_spec.rb +134 -134
  1852. data/spec/unit/provider/package/portage_spec.rb +315 -315
  1853. data/spec/unit/provider/package/powershell_spec.rb +337 -337
  1854. data/spec/unit/provider/package/rpm_spec.rb +429 -429
  1855. data/spec/unit/provider/package/rubygems_spec.rb +921 -921
  1856. data/spec/unit/provider/package/smartos_spec.rb +110 -110
  1857. data/spec/unit/provider/package/solaris_spec.rb +167 -167
  1858. data/spec/unit/provider/package/windows/exe_spec.rb +201 -201
  1859. data/spec/unit/provider/package/windows/msi_spec.rb +168 -168
  1860. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +78 -78
  1861. data/spec/unit/provider/package/windows_spec.rb +443 -443
  1862. data/spec/unit/provider/package/yum/yum_cache_spec.rb +27 -27
  1863. data/spec/unit/provider/package/yum_spec.rb +2294 -2294
  1864. data/spec/unit/provider/package/zypper_spec.rb +356 -356
  1865. data/spec/unit/provider/package_spec.rb +949 -949
  1866. data/spec/unit/provider/powershell_script_spec.rb +116 -116
  1867. data/spec/unit/provider/registry_key_spec.rb +407 -407
  1868. data/spec/unit/provider/remote_directory_spec.rb +236 -236
  1869. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +245 -245
  1870. data/spec/unit/provider/remote_file/content_spec.rb +253 -253
  1871. data/spec/unit/provider/remote_file/fetcher_spec.rb +95 -95
  1872. data/spec/unit/provider/remote_file/ftp_spec.rb +217 -217
  1873. data/spec/unit/provider/remote_file/http_spec.rb +324 -326
  1874. data/spec/unit/provider/remote_file/local_file_spec.rb +105 -105
  1875. data/spec/unit/provider/remote_file/network_file_spec.rb +50 -50
  1876. data/spec/unit/provider/remote_file/sftp_spec.rb +150 -150
  1877. data/spec/unit/provider/remote_file_spec.rb +61 -61
  1878. data/spec/unit/provider/route_spec.rb +270 -270
  1879. data/spec/unit/provider/ruby_block_spec.rb +45 -45
  1880. data/spec/unit/provider/script_spec.rb +157 -157
  1881. data/spec/unit/provider/service/aix_service_spec.rb +195 -195
  1882. data/spec/unit/provider/service/aixinit_service_spec.rb +272 -272
  1883. data/spec/unit/provider/service/arch_service_spec.rb +324 -324
  1884. data/spec/unit/provider/service/debian_service_spec.rb +369 -369
  1885. data/spec/unit/provider/service/freebsd_service_spec.rb +617 -617
  1886. data/spec/unit/provider/service/gentoo_service_spec.rb +144 -144
  1887. data/spec/unit/provider/service/init_service_spec.rb +235 -235
  1888. data/spec/unit/provider/service/insserv_service_spec.rb +75 -75
  1889. data/spec/unit/provider/service/invokercd_service_spec.rb +211 -211
  1890. data/spec/unit/provider/service/macosx_spec.rb +338 -338
  1891. data/spec/unit/provider/service/openbsd_service_spec.rb +549 -549
  1892. data/spec/unit/provider/service/redhat_spec.rb +250 -250
  1893. data/spec/unit/provider/service/simple_service_spec.rb +169 -169
  1894. data/spec/unit/provider/service/solaris_smf_service_spec.rb +292 -292
  1895. data/spec/unit/provider/service/systemd_service_spec.rb +372 -372
  1896. data/spec/unit/provider/service/upstart_service_spec.rb +351 -351
  1897. data/spec/unit/provider/service/windows_spec.rb +463 -463
  1898. data/spec/unit/provider/service_spec.rb +168 -168
  1899. data/spec/unit/provider/subversion_spec.rb +361 -361
  1900. data/spec/unit/provider/systemd_unit_spec.rb +886 -886
  1901. data/spec/unit/provider/template/content_spec.rb +169 -169
  1902. data/spec/unit/provider/template_spec.rb +89 -89
  1903. data/spec/unit/provider/user/aix_spec.rb +97 -97
  1904. data/spec/unit/provider/user/dscl_spec.rb +928 -928
  1905. data/spec/unit/provider/user/linux_spec.rb +74 -74
  1906. data/spec/unit/provider/user/pw_spec.rb +235 -235
  1907. data/spec/unit/provider/user/solaris_spec.rb +178 -178
  1908. data/spec/unit/provider/user/windows_spec.rb +185 -185
  1909. data/spec/unit/provider/user_spec.rb +478 -478
  1910. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +46 -46
  1911. data/spec/unit/provider/windows_path_spec.rb +65 -65
  1912. data/spec/unit/provider/windows_task_spec.rb +717 -717
  1913. data/spec/unit/provider/yum_repository_spec.rb +35 -35
  1914. data/spec/unit/provider/zypper_repository_spec.rb +124 -124
  1915. data/spec/unit/provider_resolver_spec.rb +938 -938
  1916. data/spec/unit/provider_spec.rb +205 -205
  1917. data/spec/unit/pure_application_spec.rb +32 -32
  1918. data/spec/unit/recipe_spec.rb +589 -589
  1919. data/spec/unit/resource/apt_package_spec.rb +38 -38
  1920. data/spec/unit/resource/apt_preference_spec.rb +49 -49
  1921. data/spec/unit/resource/apt_repository_spec.rb +58 -58
  1922. data/spec/unit/resource/apt_update_spec.rb +58 -58
  1923. data/spec/unit/resource/bash_spec.rb +38 -38
  1924. data/spec/unit/resource/batch_spec.rb +49 -49
  1925. data/spec/unit/resource/breakpoint_spec.rb +64 -64
  1926. data/spec/unit/resource/cab_package_spec.rb +56 -56
  1927. data/spec/unit/resource/chef_gem_spec.rb +111 -111
  1928. data/spec/unit/resource/chocolatey_package_spec.rb +79 -79
  1929. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -45
  1930. data/spec/unit/resource/conditional_spec.rb +254 -254
  1931. data/spec/unit/resource/cookbook_file_spec.rb +82 -82
  1932. data/spec/unit/resource/cron_spec.rb +183 -183
  1933. data/spec/unit/resource/csh_spec.rb +38 -38
  1934. data/spec/unit/resource/deploy_revision_spec.rb +42 -42
  1935. data/spec/unit/resource/deploy_spec.rb +283 -283
  1936. data/spec/unit/resource/directory_spec.rb +79 -79
  1937. data/spec/unit/resource/dnf_package_spec.rb +99 -99
  1938. data/spec/unit/resource/dpkg_package_spec.rb +32 -32
  1939. data/spec/unit/resource/dsc_resource_spec.rb +102 -102
  1940. data/spec/unit/resource/dsc_script_spec.rb +134 -134
  1941. data/spec/unit/resource/env_spec.rb +85 -85
  1942. data/spec/unit/resource/erl_call_spec.rb +81 -81
  1943. data/spec/unit/resource/execute_spec.rb +269 -269
  1944. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -103
  1945. data/spec/unit/resource/file/verification_spec.rb +147 -147
  1946. data/spec/unit/resource/file_spec.rb +127 -127
  1947. data/spec/unit/resource/freebsd_package_spec.rb +87 -87
  1948. data/spec/unit/resource/gem_package_spec.rb +42 -42
  1949. data/spec/unit/resource/git_spec.rb +48 -48
  1950. data/spec/unit/resource/group_spec.rb +152 -152
  1951. data/spec/unit/resource/homebrew_package_spec.rb +50 -50
  1952. data/spec/unit/resource/http_request_spec.rb +56 -56
  1953. data/spec/unit/resource/ifconfig_spec.rb +109 -109
  1954. data/spec/unit/resource/ips_package_spec.rb +38 -38
  1955. data/spec/unit/resource/ksh_spec.rb +38 -38
  1956. data/spec/unit/resource/launchd_spec.rb +39 -39
  1957. data/spec/unit/resource/link_spec.rb +134 -134
  1958. data/spec/unit/resource/log_spec.rb +69 -69
  1959. data/spec/unit/resource/macports_package_spec.rb +32 -32
  1960. data/spec/unit/resource/mdadm_spec.rb +105 -105
  1961. data/spec/unit/resource/mount_spec.rb +213 -213
  1962. data/spec/unit/resource/msu_package_spec.rb +55 -55
  1963. data/spec/unit/resource/ohai_spec.rb +59 -59
  1964. data/spec/unit/resource/openbsd_package_spec.rb +48 -48
  1965. data/spec/unit/resource/osx_profile_spec.rb +62 -62
  1966. data/spec/unit/resource/package_spec.rb +99 -99
  1967. data/spec/unit/resource/pacman_package_spec.rb +32 -32
  1968. data/spec/unit/resource/perl_spec.rb +37 -37
  1969. data/spec/unit/resource/portage_package_spec.rb +36 -36
  1970. data/spec/unit/resource/powershell_package_spec.rb +68 -68
  1971. data/spec/unit/resource/powershell_script_spec.rb +136 -136
  1972. data/spec/unit/resource/python_spec.rb +37 -37
  1973. data/spec/unit/resource/reboot_spec.rb +50 -50
  1974. data/spec/unit/resource/registry_key_spec.rb +201 -201
  1975. data/spec/unit/resource/remote_directory_spec.rb +95 -95
  1976. data/spec/unit/resource/remote_file_spec.rb +205 -205
  1977. data/spec/unit/resource/resource_notification_spec.rb +169 -169
  1978. data/spec/unit/resource/route_spec.rb +105 -105
  1979. data/spec/unit/resource/rpm_package_spec.rb +44 -44
  1980. data/spec/unit/resource/ruby_block_spec.rb +59 -59
  1981. data/spec/unit/resource/ruby_spec.rb +36 -36
  1982. data/spec/unit/resource/scm_spec.rb +190 -190
  1983. data/spec/unit/resource/script_spec.rb +44 -44
  1984. data/spec/unit/resource/service_spec.rb +196 -196
  1985. data/spec/unit/resource/smartos_package_spec.rb +38 -38
  1986. data/spec/unit/resource/solaris_package_spec.rb +40 -40
  1987. data/spec/unit/resource/subversion_spec.rb +73 -73
  1988. data/spec/unit/resource/systemd_unit_spec.rb +129 -129
  1989. data/spec/unit/resource/template_spec.rb +205 -205
  1990. data/spec/unit/resource/timestamped_deploy_spec.rb +32 -32
  1991. data/spec/unit/resource/user_spec.rb +127 -127
  1992. data/spec/unit/resource/windows_package_spec.rb +95 -95
  1993. data/spec/unit/resource/windows_path_spec.rb +41 -41
  1994. data/spec/unit/resource/windows_service_spec.rb +49 -49
  1995. data/spec/unit/resource/windows_task_spec.rb +323 -315
  1996. data/spec/unit/resource/yum_package_spec.rb +150 -150
  1997. data/spec/unit/resource/yum_repository_spec.rb +102 -102
  1998. data/spec/unit/resource/zypper_repository_spec.rb +66 -66
  1999. data/spec/unit/resource_builder_spec.rb +1 -1
  2000. data/spec/unit/resource_collection/resource_list_spec.rb +137 -137
  2001. data/spec/unit/resource_collection/resource_set_spec.rb +244 -244
  2002. data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -144
  2003. data/spec/unit/resource_collection_spec.rb +400 -400
  2004. data/spec/unit/resource_definition_spec.rb +117 -117
  2005. data/spec/unit/resource_reporter_spec.rb +782 -782
  2006. data/spec/unit/resource_resolver_spec.rb +52 -52
  2007. data/spec/unit/resource_spec.rb +1115 -1115
  2008. data/spec/unit/role_spec.rb +358 -358
  2009. data/spec/unit/run_context/child_run_context_spec.rb +133 -133
  2010. data/spec/unit/run_context/cookbook_compiler_spec.rb +224 -224
  2011. data/spec/unit/run_context_spec.rb +241 -241
  2012. data/spec/unit/run_list/run_list_expansion_spec.rb +144 -144
  2013. data/spec/unit/run_list/run_list_item_spec.rb +117 -117
  2014. data/spec/unit/run_list/versioned_recipe_list_spec.rb +197 -197
  2015. data/spec/unit/run_list_spec.rb +312 -312
  2016. data/spec/unit/run_lock_spec.rb +140 -140
  2017. data/spec/unit/run_status_spec.rb +144 -144
  2018. data/spec/unit/runner_spec.rb +398 -398
  2019. data/spec/unit/scan_access_control_spec.rb +183 -183
  2020. data/spec/unit/search/query_spec.rb +283 -283
  2021. data/spec/unit/server_api_spec.rb +124 -124
  2022. data/spec/unit/server_api_versions_spec.rb +66 -66
  2023. data/spec/unit/shell/model_wrapper_spec.rb +96 -96
  2024. data/spec/unit/shell/shell_ext_spec.rb +153 -153
  2025. data/spec/unit/shell/shell_session_spec.rb +250 -250
  2026. data/spec/unit/shell_spec.rb +162 -162
  2027. data/spec/unit/user_spec.rb +275 -275
  2028. data/spec/unit/user_v1_spec.rb +583 -583
  2029. data/spec/unit/util/backup_spec.rb +141 -141
  2030. data/spec/unit/util/diff_spec.rb +576 -576
  2031. data/spec/unit/util/dsc/configuration_generator_spec.rb +193 -193
  2032. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +248 -248
  2033. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +200 -200
  2034. data/spec/unit/util/dsc/resource_store.rb +78 -78
  2035. data/spec/unit/util/editor_spec.rb +152 -152
  2036. data/spec/unit/util/file_edit_spec.rb +224 -224
  2037. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -106
  2038. data/spec/unit/util/powershell/ps_credential_spec.rb +44 -44
  2039. data/spec/unit/util/selinux_spec.rb +157 -157
  2040. data/spec/unit/util/threaded_job_queue_spec.rb +51 -51
  2041. data/spec/unit/util/windows/logon_session_spec.rb +284 -284
  2042. data/spec/unit/version/platform_spec.rb +60 -60
  2043. data/spec/unit/version_class_spec.rb +171 -171
  2044. data/spec/unit/version_constraint/platform_spec.rb +45 -45
  2045. data/spec/unit/version_constraint_spec.rb +179 -179
  2046. data/spec/unit/version_string_spec.rb +79 -79
  2047. data/spec/unit/win32/error_spec.rb +67 -67
  2048. data/spec/unit/win32/link_spec.rb +73 -73
  2049. data/spec/unit/win32/registry_spec.rb +394 -394
  2050. data/spec/unit/win32/security_spec.rb +66 -66
  2051. data/spec/unit/windows_service_spec.rb +116 -116
  2052. data/tasks/announce.rb +58 -58
  2053. data/tasks/bin/run_external_test +25 -25
  2054. data/tasks/cbgb.rb +84 -84
  2055. data/tasks/dependencies.rb +92 -92
  2056. data/tasks/maintainers.rb +211 -211
  2057. data/tasks/rspec.rb +90 -90
  2058. data/tasks/templates/prerelease.md.erb +26 -26
  2059. data/tasks/templates/release.md.erb +26 -26
  2060. metadata +5 -5
@@ -1,127 +1,127 @@
1
- #
2
- # Author:: John Keiser (<jkeiser@chef.io>)
3
- # Copyright:: Copyright 2012-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/chef_fs"
20
- require "pathname"
21
-
22
- class Chef
23
- module ChefFS
24
- class PathUtils
25
-
26
- # A Chef-FS path is a path in a chef-repository that can be used to address
27
- # both files on a local file-system as well as objects on a chef server.
28
- # These paths are stricter than file-system paths allowed on various OSes.
29
- # Absolute Chef-FS paths begin with "/" (on windows, "\" is acceptable as well).
30
- # "/" is used as the path element separator (on windows, "\" is acceptable as well).
31
- # No directory/path element may contain a literal "\" character. Any such characters
32
- # encountered are either dealt with as separators (on windows) or as escape
33
- # characters (on POSIX systems). Relative Chef-FS paths may use ".." or "." but
34
- # may never use these to back-out of the root of a Chef-FS path. Any such extraneous
35
- # ".."s are ignored.
36
- # Chef-FS paths are case sensitive (since the paths on the server are).
37
- # On OSes with case insensitive paths, you may be unable to locally deal with two
38
- # objects whose server paths only differ by case. OTOH, the case of path segments
39
- # that are outside the Chef-FS root (such as when looking at a file-system absolute
40
- # path to discover the Chef-FS root path) are handled in accordance to the rules
41
- # of the local file-system and OS.
42
-
43
- def self.join(*parts)
44
- return "" if parts.length == 0
45
- # Determine if it started with a slash
46
- absolute = parts[0].length == 0 || parts[0].length > 0 && parts[0] =~ /^#{regexp_path_separator}/
47
- # Remove leading and trailing slashes from each part so that the join will work (and the slash at the end will go away)
48
- parts = parts.map { |part| part.gsub(/^#{regexp_path_separator}+|#{regexp_path_separator}+$/, "") }
49
- # Don't join empty bits
50
- result = parts.select { |part| part != "" }.join("/")
51
- # Put the / back on
52
- absolute ? "/#{result}" : result
53
- end
54
-
55
- def self.split(path)
56
- path.split(Regexp.new(regexp_path_separator))
57
- end
58
-
59
- def self.regexp_path_separator
60
- Chef::ChefFS.windows? ? '[\/\\\\]' : "/"
61
- end
62
-
63
- # Given a server path, determines if it is absolute.
64
- def self.is_absolute?(path)
65
- !!(path =~ /^#{regexp_path_separator}/)
66
- end
67
-
68
- # Given a path which may only be partly real (i.e. /x/y/z when only /x exists,
69
- # or /x/y/*/blah when /x/y/z/blah exists), call File.realpath on the biggest
70
- # part that actually exists. The paths operated on here are not Chef-FS paths.
71
- # These are OS paths that may contain symlinks but may not also fully exist.
72
- #
73
- # If /x is a symlink to /blarghle, and has no subdirectories, then:
74
- # PathUtils.realest_path('/x/y/z') == '/blarghle/y/z'
75
- # PathUtils.realest_path('/x/*/z') == '/blarghle/*/z'
76
- # PathUtils.realest_path('/*/y/z') == '/*/y/z'
77
- #
78
- # TODO: Move this to wherever util/path_helper is these days.
79
- def self.realest_path(path, cwd = Dir.pwd)
80
- path = File.expand_path(path, cwd)
81
- parent_path = File.dirname(path)
82
- suffix = []
83
-
84
- # File.dirname happens to return the path as its own dirname if you're
85
- # at the root (such as at \\foo\bar, C:\ or /)
86
- until parent_path == path
87
- # This can occur if a path such as "C:" is given. Ruby gives the parent as "C:."
88
- # for reasons only it knows.
89
- raise ArgumentError "Invalid path segment #{path}" if parent_path.length > path.length
90
- begin
91
- path = File.realpath(path)
92
- break
93
- rescue Errno::ENOENT
94
- suffix << File.basename(path)
95
- path = parent_path
96
- parent_path = File.dirname(path)
97
- end
98
- end
99
- File.join(path, *suffix.reverse)
100
- end
101
-
102
- # Compares two path fragments according to the case-sentitivity of the host platform.
103
- def self.os_path_eq?(left, right)
104
- Chef::ChefFS.windows? ? left.casecmp(right) == 0 : left == right
105
- end
106
-
107
- # Given two general OS-dependent file paths, determines the relative path of the
108
- # child with respect to the ancestor. Both child and ancestor must exist and be
109
- # fully resolved - this is strictly a lexical comparison. No trailing slashes
110
- # and other shenanigans are allowed.
111
- #
112
- # TODO: Move this to util/path_helper.
113
- def self.descendant_path(path, ancestor)
114
- candidate_fragment = path[0, ancestor.length]
115
- return nil unless PathUtils.os_path_eq?(candidate_fragment, ancestor)
116
- if ancestor.length == path.length
117
- ""
118
- elsif path[ancestor.length, 1] =~ /#{PathUtils.regexp_path_separator}/
119
- path[ancestor.length + 1..-1]
120
- else
121
- nil
122
- end
123
- end
124
-
125
- end
126
- end
127
- end
1
+ #
2
+ # Author:: John Keiser (<jkeiser@chef.io>)
3
+ # Copyright:: Copyright 2012-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/chef_fs"
20
+ require "pathname"
21
+
22
+ class Chef
23
+ module ChefFS
24
+ class PathUtils
25
+
26
+ # A Chef-FS path is a path in a chef-repository that can be used to address
27
+ # both files on a local file-system as well as objects on a chef server.
28
+ # These paths are stricter than file-system paths allowed on various OSes.
29
+ # Absolute Chef-FS paths begin with "/" (on windows, "\" is acceptable as well).
30
+ # "/" is used as the path element separator (on windows, "\" is acceptable as well).
31
+ # No directory/path element may contain a literal "\" character. Any such characters
32
+ # encountered are either dealt with as separators (on windows) or as escape
33
+ # characters (on POSIX systems). Relative Chef-FS paths may use ".." or "." but
34
+ # may never use these to back-out of the root of a Chef-FS path. Any such extraneous
35
+ # ".."s are ignored.
36
+ # Chef-FS paths are case sensitive (since the paths on the server are).
37
+ # On OSes with case insensitive paths, you may be unable to locally deal with two
38
+ # objects whose server paths only differ by case. OTOH, the case of path segments
39
+ # that are outside the Chef-FS root (such as when looking at a file-system absolute
40
+ # path to discover the Chef-FS root path) are handled in accordance to the rules
41
+ # of the local file-system and OS.
42
+
43
+ def self.join(*parts)
44
+ return "" if parts.length == 0
45
+ # Determine if it started with a slash
46
+ absolute = parts[0].length == 0 || parts[0].length > 0 && parts[0] =~ /^#{regexp_path_separator}/
47
+ # Remove leading and trailing slashes from each part so that the join will work (and the slash at the end will go away)
48
+ parts = parts.map { |part| part.gsub(/^#{regexp_path_separator}+|#{regexp_path_separator}+$/, "") }
49
+ # Don't join empty bits
50
+ result = parts.select { |part| part != "" }.join("/")
51
+ # Put the / back on
52
+ absolute ? "/#{result}" : result
53
+ end
54
+
55
+ def self.split(path)
56
+ path.split(Regexp.new(regexp_path_separator))
57
+ end
58
+
59
+ def self.regexp_path_separator
60
+ Chef::ChefFS.windows? ? '[\/\\\\]' : "/"
61
+ end
62
+
63
+ # Given a server path, determines if it is absolute.
64
+ def self.is_absolute?(path)
65
+ !!(path =~ /^#{regexp_path_separator}/)
66
+ end
67
+
68
+ # Given a path which may only be partly real (i.e. /x/y/z when only /x exists,
69
+ # or /x/y/*/blah when /x/y/z/blah exists), call File.realpath on the biggest
70
+ # part that actually exists. The paths operated on here are not Chef-FS paths.
71
+ # These are OS paths that may contain symlinks but may not also fully exist.
72
+ #
73
+ # If /x is a symlink to /blarghle, and has no subdirectories, then:
74
+ # PathUtils.realest_path('/x/y/z') == '/blarghle/y/z'
75
+ # PathUtils.realest_path('/x/*/z') == '/blarghle/*/z'
76
+ # PathUtils.realest_path('/*/y/z') == '/*/y/z'
77
+ #
78
+ # TODO: Move this to wherever util/path_helper is these days.
79
+ def self.realest_path(path, cwd = Dir.pwd)
80
+ path = File.expand_path(path, cwd)
81
+ parent_path = File.dirname(path)
82
+ suffix = []
83
+
84
+ # File.dirname happens to return the path as its own dirname if you're
85
+ # at the root (such as at \\foo\bar, C:\ or /)
86
+ until parent_path == path
87
+ # This can occur if a path such as "C:" is given. Ruby gives the parent as "C:."
88
+ # for reasons only it knows.
89
+ raise ArgumentError "Invalid path segment #{path}" if parent_path.length > path.length
90
+ begin
91
+ path = File.realpath(path)
92
+ break
93
+ rescue Errno::ENOENT
94
+ suffix << File.basename(path)
95
+ path = parent_path
96
+ parent_path = File.dirname(path)
97
+ end
98
+ end
99
+ File.join(path, *suffix.reverse)
100
+ end
101
+
102
+ # Compares two path fragments according to the case-sentitivity of the host platform.
103
+ def self.os_path_eq?(left, right)
104
+ Chef::ChefFS.windows? ? left.casecmp(right) == 0 : left == right
105
+ end
106
+
107
+ # Given two general OS-dependent file paths, determines the relative path of the
108
+ # child with respect to the ancestor. Both child and ancestor must exist and be
109
+ # fully resolved - this is strictly a lexical comparison. No trailing slashes
110
+ # and other shenanigans are allowed.
111
+ #
112
+ # TODO: Move this to util/path_helper.
113
+ def self.descendant_path(path, ancestor)
114
+ candidate_fragment = path[0, ancestor.length]
115
+ return nil unless PathUtils.os_path_eq?(candidate_fragment, ancestor)
116
+ if ancestor.length == path.length
117
+ ""
118
+ elsif path[ancestor.length, 1] =~ /#{PathUtils.regexp_path_separator}/
119
+ path[ancestor.length + 1..-1]
120
+ else
121
+ nil
122
+ end
123
+ end
124
+
125
+ end
126
+ end
127
+ end
@@ -1,1014 +1,1014 @@
1
- #
2
- # Author:: Adam Jacob (<adam@chef.io>)
3
- # Author:: Christopher Walters (<cw@chef.io>)
4
- # Author:: Christopher Brown (<cb@chef.io>)
5
- # Author:: Tim Hinderliter (<tim@chef.io>)
6
- # Copyright:: Copyright 2008-2017, Chef Software Inc.
7
- # License:: Apache License, Version 2.0
8
- #
9
- # Licensed under the Apache License, Version 2.0 (the "License");
10
- # you may not use this file except in compliance with the License.
11
- # You may obtain a copy of the License at
12
- #
13
- # http://www.apache.org/licenses/LICENSE-2.0
14
- #
15
- # Unless required by applicable law or agreed to in writing, software
16
- # distributed under the License is distributed on an "AS IS" BASIS,
17
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
- # See the License for the specific language governing permissions and
19
- # limitations under the License.
20
-
21
- require "chef/config"
22
- require "chef/mixin/params_validate"
23
- require "chef/mixin/path_sanity"
24
- require "chef/log"
25
- require "chef/deprecated"
26
- require "chef/server_api"
27
- require "chef/api_client"
28
- require "chef/api_client/registration"
29
- require "chef/audit/runner"
30
- require "chef/node"
31
- require "chef/role"
32
- require "chef/file_cache"
33
- require "chef/run_context"
34
- require "chef/runner"
35
- require "chef/run_status"
36
- require "chef/cookbook/cookbook_collection"
37
- require "chef/cookbook/file_vendor"
38
- require "chef/cookbook/file_system_file_vendor"
39
- require "chef/cookbook/remote_file_vendor"
40
- require "chef/event_dispatch/dispatcher"
41
- require "chef/event_loggers/base"
42
- require "chef/event_loggers/windows_eventlog"
43
- require "chef/exceptions"
44
- require "chef/formatters/base"
45
- require "chef/formatters/doc"
46
- require "chef/formatters/minimal"
47
- require "chef/version"
48
- require "chef/resource_reporter"
49
- require "chef/data_collector"
50
- require "chef/audit/audit_reporter"
51
- require "chef/run_lock"
52
- require "chef/policy_builder"
53
- require "chef/request_id"
54
- require "chef/platform/rebooter"
55
- require "chef/mixin/deprecation"
56
- require "ohai"
57
- require "rbconfig"
58
-
59
- class Chef
60
- # == Chef::Client
61
- # The main object in a Chef run. Preps a Chef::Node and Chef::RunContext,
62
- # syncs cookbooks if necessary, and triggers convergence.
63
- class Client
64
- include Chef::Mixin::PathSanity
65
-
66
- extend Chef::Mixin::Deprecation
67
-
68
- #
69
- # The status of the Chef run.
70
- #
71
- # @return [Chef::RunStatus]
72
- #
73
- attr_reader :run_status
74
-
75
- #
76
- # The node represented by this client.
77
- #
78
- # @return [Chef::Node]
79
- #
80
- def node
81
- run_status.node
82
- end
83
-
84
- def node=(value)
85
- run_status.node = value
86
- end
87
-
88
- #
89
- # The ohai system used by this client.
90
- #
91
- # @return [Ohai::System]
92
- #
93
- attr_reader :ohai
94
-
95
- #
96
- # The rest object used to communicate with the Chef server.
97
- #
98
- # @return [Chef::ServerAPI]
99
- #
100
- attr_reader :rest
101
-
102
- #
103
- # A rest object with validate_utf8 set to false. This will not throw exceptions
104
- # on non-UTF8 strings in JSON but will sanitize them so that e.g. POSTs will
105
- # never fail. Cannot be configured on a request-by-request basis, so we carry
106
- # around another rest object for it.
107
- #
108
- attr_reader :rest_clean
109
-
110
- #
111
- # The runner used to converge.
112
- #
113
- # @return [Chef::Runner]
114
- #
115
- attr_accessor :runner
116
-
117
- #
118
- # Extra node attributes that were applied to the node.
119
- #
120
- # @return [Hash]
121
- #
122
- attr_reader :json_attribs
123
-
124
- #
125
- # The event dispatcher for the Chef run, including any configured output
126
- # formatters and event loggers.
127
- #
128
- # @return [EventDispatch::Dispatcher]
129
- #
130
- # @see Chef::Formatters
131
- # @see Chef::Config#formatters
132
- # @see Chef::Config#stdout
133
- # @see Chef::Config#stderr
134
- # @see Chef::Config#force_logger
135
- # @see Chef::Config#force_formatter
136
- # TODO add stdout, stderr, and default formatters to Chef::Config so the
137
- # defaults aren't calculated here. Remove force_logger and force_formatter
138
- # from this code.
139
- # @see Chef::EventLoggers
140
- # @see Chef::Config#disable_event_logger
141
- # @see Chef::Config#event_loggers
142
- # @see Chef::Config#event_handlers
143
- #
144
- attr_reader :events
145
-
146
- #
147
- # Creates a new Chef::Client.
148
- #
149
- # @param json_attribs [Hash] Node attributes to layer into the node when it is
150
- # fetched.
151
- # @param args [Hash] Options:
152
- # @option args [Array<RunList::RunListItem>] :override_runlist A runlist to
153
- # use instead of the node's embedded run list.
154
- # @option args [Array<String>] :specific_recipes A list of recipe file paths
155
- # to load after the run list has been loaded.
156
- #
157
- def initialize(json_attribs = nil, args = {})
158
- @json_attribs = json_attribs || {}
159
- @ohai = Ohai::System.new
160
-
161
- event_handlers = configure_formatters + configure_event_loggers
162
- event_handlers += Array(Chef::Config[:event_handlers])
163
-
164
- @events = EventDispatch::Dispatcher.new(*event_handlers)
165
- # TODO it seems like a bad idea to be deletin' other peoples' hashes.
166
- @override_runlist = args.delete(:override_runlist)
167
- @specific_recipes = args.delete(:specific_recipes)
168
- @run_status = Chef::RunStatus.new(nil, events)
169
-
170
- if new_runlist = args.delete(:runlist)
171
- @json_attribs["run_list"] = new_runlist
172
- end
173
- end
174
-
175
- #
176
- # Do a full run for this Chef::Client.
177
- #
178
- # Locks the run while doing its job.
179
- #
180
- # Fires run_start before doing anything and fires run_completed or
181
- # run_failed when finished. Also notifies client listeners of run_started
182
- # at the beginning of Compile, and run_completed_successfully or run_failed
183
- # when all is complete.
184
- #
185
- # Phase 1: Setup
186
- # --------------
187
- # Gets information about the system and the run we are doing.
188
- #
189
- # 1. Run ohai to collect system information.
190
- # 2. Register / connect to the Chef server (unless in solo mode).
191
- # 3. Retrieve the node (or create a new one).
192
- # 4. Merge in json_attribs, Chef::Config.environment, and override_run_list.
193
- #
194
- # @see #run_ohai
195
- # @see #load_node
196
- # @see #build_node
197
- # @see Chef::Config#lockfile
198
- # @see Chef::RunLock#acquire
199
- #
200
- # Phase 2: Compile
201
- # ----------------
202
- # Decides *what* we plan to converge by compiling recipes.
203
- #
204
- # 1. Sync required cookbooks to the local cache.
205
- # 2. Load libraries from all cookbooks.
206
- # 3. Load attributes from all cookbooks.
207
- # 4. Load LWRPs from all cookbooks.
208
- # 5. Load resource definitions from all cookbooks.
209
- # 6. Load recipes in the run list.
210
- # 7. Load recipes from the command line.
211
- #
212
- # @see #setup_run_context Syncs and compiles cookbooks.
213
- # @see Chef::CookbookCompiler#compile
214
- #
215
- # Phase 3: Converge
216
- # -----------------
217
- # Brings the system up to date.
218
- #
219
- # 1. Converge the resources built from recipes in Phase 2.
220
- # 2. Save the node.
221
- # 3. Reboot if we were asked to.
222
- #
223
- # @see #converge_and_save
224
- # @see Chef::Runner
225
- #
226
- # Phase 4: Audit
227
- # --------------
228
- # Runs 'control_group' audits in recipes. This entire section can be enabled or disabled with config.
229
- #
230
- # 1. 'control_group' DSL collects audits during Phase 2
231
- # 2. Audits are run using RSpec
232
- # 3. Errors are collected and reported using the formatters
233
- #
234
- # @see #run_audits
235
- # @see Chef::Audit::Runner#run
236
- #
237
- # @raise [Chef::Exceptions::RunFailedWrappingError] If converge or audit failed.
238
- #
239
- # @see Chef::Config#enforce_path_sanity
240
- # @see Chef::Config#solo
241
- # @see Chef::Config#audit_mode
242
- #
243
- # @return Always returns true.
244
- #
245
- def run
246
- start_profiling
247
-
248
- run_error = nil
249
-
250
- runlock = RunLock.new(Chef::Config.lockfile)
251
- # TODO feels like acquire should have its own block arg for this
252
- runlock.acquire
253
- # don't add code that may fail before entering this section to be sure to release lock
254
- begin
255
- runlock.save_pid
256
-
257
- request_id = Chef::RequestID.instance.request_id
258
- run_context = nil
259
- events.run_start(Chef::VERSION)
260
- Chef::Log.info("*** Chef #{Chef::VERSION} ***")
261
- Chef::Log.info("Platform: #{RUBY_PLATFORM}")
262
- Chef::Log.info "Chef-client pid: #{Process.pid}"
263
- Chef::Log.debug("Chef-client request_id: #{request_id}")
264
- enforce_path_sanity
265
- run_ohai
266
-
267
- register unless Chef::Config[:solo_legacy_mode]
268
- register_data_collector_reporter
269
-
270
- load_node
271
-
272
- build_node
273
-
274
- run_status.run_id = request_id
275
- run_status.start_clock
276
- Chef::Log.info("Starting Chef Run for #{node.name}")
277
- run_started
278
-
279
- do_windows_admin_check
280
-
281
- run_context = setup_run_context
282
-
283
- load_required_recipe(@rest, run_context) unless Chef::Config[:solo_legacy_mode]
284
-
285
- if Chef::Config[:audit_mode] != :audit_only
286
- converge_error = converge_and_save(run_context)
287
- end
288
-
289
- if Chef::Config[:why_run] == true
290
- # why_run should probably be renamed to why_converge
291
- Chef::Log.debug("Not running controls in 'why-run' mode - this mode is used to see potential converge changes")
292
- elsif Chef::Config[:audit_mode] != :disabled
293
- audit_error = run_audits(run_context)
294
- end
295
-
296
- # Raise converge_error so run_failed reporters/events are processed.
297
- raise converge_error if converge_error
298
-
299
- run_status.stop_clock
300
- Chef::Log.info("Chef Run complete in #{run_status.elapsed_time} seconds")
301
- run_completed_successfully
302
- events.run_completed(node, run_status)
303
-
304
- # keep this inside the main loop to get exception backtraces
305
- end_profiling
306
-
307
- # rebooting has to be the last thing we do, no exceptions.
308
- Chef::Platform::Rebooter.reboot_if_needed!(node)
309
- rescue Exception => run_error
310
- # CHEF-3336: Send the error first in case something goes wrong below and we don't know why
311
- Chef::Log.debug("Re-raising exception: #{run_error.class} - #{run_error.message}\n#{run_error.backtrace.join("\n ")}")
312
- # If we failed really early, we may not have a run_status yet. Too early for these to be of much use.
313
- if run_status
314
- run_status.stop_clock
315
- run_status.exception = run_error
316
- run_failed
317
- end
318
- events.run_failed(run_error, run_status)
319
- ensure
320
- Chef::RequestID.instance.reset_request_id
321
- @run_status = nil
322
- runlock.release
323
- end
324
-
325
- # Raise audit, converge, and other errors here so that we exit
326
- # with the proper exit status code and everything gets raised
327
- # as a RunFailedWrappingError
328
- if run_error || converge_error || audit_error
329
- error = if Chef::Config[:audit_mode] == :disabled
330
- run_error || converge_error
331
- else
332
- e = if run_error == converge_error
333
- Chef::Exceptions::RunFailedWrappingError.new(converge_error, audit_error)
334
- else
335
- Chef::Exceptions::RunFailedWrappingError.new(run_error, converge_error, audit_error)
336
- end
337
- e.fill_backtrace
338
- e
339
- end
340
-
341
- Chef::Application.debug_stacktrace(error)
342
- raise error
343
- end
344
-
345
- true
346
- end
347
-
348
- #
349
- # Private API
350
- # TODO make this stuff protected or private
351
- #
352
-
353
- # @api private
354
- def configure_formatters
355
- formatters_for_run.map do |formatter_name, output_path|
356
- if output_path.nil?
357
- Chef::Formatters.new(formatter_name, STDOUT_FD, STDERR_FD)
358
- else
359
- io = File.open(output_path, "a+")
360
- io.sync = true
361
- Chef::Formatters.new(formatter_name, io, io)
362
- end
363
- end
364
- end
365
-
366
- # @api private
367
- def formatters_for_run
368
- if Chef::Config.formatters.empty?
369
- [default_formatter]
370
- else
371
- Chef::Config.formatters
372
- end
373
- end
374
-
375
- # @api private
376
- def default_formatter
377
- if !Chef::Config[:force_logger] || Chef::Config[:force_formatter]
378
- [:doc]
379
- else
380
- [:null]
381
- end
382
- end
383
-
384
- # @api private
385
- def configure_event_loggers
386
- if Chef::Config.disable_event_logger
387
- []
388
- else
389
- Chef::Config.event_loggers.map do |evt_logger|
390
- case evt_logger
391
- when Symbol
392
- Chef::EventLoggers.new(evt_logger)
393
- when Class
394
- evt_logger.new
395
- else
396
- end
397
- end
398
- end
399
- end
400
-
401
- # Rest client for use by API reporters. This rest client will not fail with an exception if
402
- # it is fed non-UTF8 data.
403
- #
404
- # @api private
405
- def rest_clean(client_name = node_name, config = Chef::Config)
406
- @rest_clean ||=
407
- Chef::ServerAPI.new(config[:chef_server_url], client_name: client_name,
408
- signing_key_filename: config[:client_key], validate_utf8: false)
409
- end
410
-
411
- # Resource reporters send event information back to the chef server for
412
- # processing. Can only be called after we have a @rest object
413
- # @api private
414
- def register_reporters
415
- [
416
- Chef::ResourceReporter.new(rest_clean),
417
- Chef::Audit::AuditReporter.new(rest_clean),
418
- ].each do |r|
419
- events.register(r)
420
- end
421
- end
422
-
423
- #
424
- # Callback to fire notifications that the Chef run is starting
425
- #
426
- # @api private
427
- #
428
- def run_started
429
- self.class.run_start_notifications.each do |notification|
430
- notification.call(run_status)
431
- end
432
- events.run_started(run_status)
433
- end
434
-
435
- #
436
- # Callback to fire notifications that the run completed successfully
437
- #
438
- # @api private
439
- #
440
- def run_completed_successfully
441
- success_handlers = self.class.run_completed_successfully_notifications
442
- success_handlers.each do |notification|
443
- notification.call(run_status)
444
- end
445
- end
446
-
447
- #
448
- # Callback to fire notifications that the Chef run failed
449
- #
450
- # @api private
451
- #
452
- def run_failed
453
- failure_handlers = self.class.run_failed_notifications
454
- failure_handlers.each do |notification|
455
- notification.call(run_status)
456
- end
457
- end
458
-
459
- #
460
- # Instantiates a Chef::Node object, possibly loading the node's prior state
461
- # when using chef-client. Sets Chef.node to the new node.
462
- #
463
- # @return [Chef::Node] The node object for this Chef run
464
- #
465
- # @see Chef::PolicyBuilder#load_node
466
- #
467
- # @api private
468
- #
469
- def load_node
470
- policy_builder.load_node
471
- run_status.node = policy_builder.node
472
- Chef.set_node(policy_builder.node)
473
- node
474
- end
475
-
476
- #
477
- # Mutates the `node` object to prepare it for the chef run.
478
- #
479
- # @return [Chef::Node] The updated node object
480
- #
481
- # @see Chef::PolicyBuilder#build_node
482
- #
483
- # @api private
484
- #
485
- def build_node
486
- policy_builder.build_node
487
- run_status.node = node
488
- node
489
- end
490
-
491
- #
492
- # Sync cookbooks to local cache.
493
- #
494
- # TODO this appears to be unused.
495
- #
496
- # @see Chef::PolicyBuilder#sync_cookbooks
497
- #
498
- # @api private
499
- #
500
- def sync_cookbooks
501
- policy_builder.sync_cookbooks
502
- end
503
-
504
- #
505
- # Sets up the run context.
506
- #
507
- # @see Chef::PolicyBuilder#setup_run_context
508
- #
509
- # @return The newly set up run context
510
- #
511
- # @api private
512
- def setup_run_context
513
- run_context = policy_builder.setup_run_context(specific_recipes)
514
- assert_cookbook_path_not_empty(run_context)
515
- run_status.run_context = run_context
516
- run_context
517
- end
518
-
519
- #
520
- # Adds a required recipe as specified by the Chef Server
521
- #
522
- # @return The modified run context
523
- #
524
- # @api private
525
- #
526
- # TODO: @rest doesn't appear to be used anywhere outside
527
- # of client.register except for here. If it's common practice
528
- # to create your own rest client, perhaps we should do that
529
- # here but it seems more appropriate to reuse one that we
530
- # know is already created. for ease of testing, we'll pass
531
- # the existing rest client in as a parameter
532
- #
533
- def load_required_recipe(rest, run_context)
534
- required_recipe_contents = rest.get("required_recipe")
535
- Chef::Log.info("Required Recipe found, loading it")
536
- Chef::FileCache.store("required_recipe", required_recipe_contents)
537
- required_recipe_file = Chef::FileCache.load("required_recipe", false)
538
-
539
- # TODO: add integration tests with resource reporting turned on
540
- # (presumably requires changes to chef-zero)
541
- #
542
- # Chef::Recipe.new takes a cookbook name and a recipe name along
543
- # with the run context. These names are eventually used in the
544
- # resource reporter, and if the cookbook name cannot be found in the
545
- # cookbook collection then we will fail with an exception. Cases where
546
- # we currently also fail:
547
- # - specific recipes
548
- # - chef-apply would fail if resource reporting was enabled
549
- #
550
- recipe = Chef::Recipe.new(nil, nil, run_context)
551
- recipe.from_file(required_recipe_file)
552
- run_context
553
- rescue Net::HTTPServerException => e
554
- case e.response
555
- when Net::HTTPNotFound
556
- Chef::Log.debug("Required Recipe not configured on the server, skipping it")
557
- else
558
- raise
559
- end
560
- end
561
-
562
- #
563
- # The PolicyBuilder strategy for figuring out run list and cookbooks.
564
- #
565
- # @return [Chef::PolicyBuilder::Policyfile, Chef::PolicyBuilder::ExpandNodeObject]
566
- #
567
- # @api private
568
- #
569
- def policy_builder
570
- @policy_builder ||= Chef::PolicyBuilder::Dynamic.new(node_name, ohai.data, json_attribs, override_runlist, events)
571
- end
572
-
573
- #
574
- # Save the updated node to Chef.
575
- #
576
- # Does not save if we are in solo mode or using override_runlist.
577
- #
578
- # @see Chef::Node#save
579
- # @see Chef::Config#solo
580
- #
581
- # @api private
582
- #
583
- def save_updated_node
584
- if Chef::Config[:solo_legacy_mode]
585
- # nothing to do
586
- elsif policy_builder.temporary_policy?
587
- Chef::Log.warn("Skipping final node save because override_runlist was given")
588
- else
589
- Chef::Log.debug("Saving the current state of node #{node_name}")
590
- node.save
591
- end
592
- end
593
-
594
- #
595
- # Run ohai plugins. Runs all ohai plugins unless minimal_ohai is specified.
596
- #
597
- # Sends the ohai_completed event when finished.
598
- #
599
- # @see Chef::EventDispatcher#
600
- # @see Chef::Config#minimal_ohai
601
- #
602
- # @api private
603
- #
604
- def run_ohai
605
- filter = Chef::Config[:minimal_ohai] ? %w{fqdn machinename hostname platform platform_version ohai_time os os_version} : nil
606
- ohai.all_plugins(filter)
607
- events.ohai_completed(node)
608
- rescue Ohai::Exceptions::CriticalPluginFailure => e
609
- Chef::Log.error("Critical Ohai plugins failed: #{e.message}")
610
- exit(false)
611
- end
612
-
613
- #
614
- # Figure out the node name we are working with.
615
- #
616
- # It tries these, in order:
617
- # - Chef::Config.node_name
618
- # - ohai[:fqdn]
619
- # - ohai[:machinename]
620
- # - ohai[:hostname]
621
- #
622
- # @raise [Chef::Exceptions::CannotDetermineNodeName] If the node name is not
623
- # set and cannot be determined via ohai.
624
- #
625
- # @see Chef::Config#node_name
626
- #
627
- # @api private
628
- #
629
- def node_name
630
- name = Chef::Config[:node_name] || ohai[:fqdn] || ohai[:machinename] || ohai[:hostname]
631
- Chef::Config[:node_name] = name
632
-
633
- raise Chef::Exceptions::CannotDetermineNodeName unless name
634
-
635
- name
636
- end
637
-
638
- #
639
- # Determine our private key and set up the connection to the Chef server.
640
- #
641
- # Skips registration and fires the `skipping_registration` event if
642
- # Chef::Config.client_key is unspecified or already exists.
643
- #
644
- # If Chef::Config.client_key does not exist, we register the client with the
645
- # Chef server and fire the registration_start and registration_completed events.
646
- #
647
- # @return [Chef::ServerAPI] The server connection object.
648
- #
649
- # @see Chef::Config#chef_server_url
650
- # @see Chef::Config#client_key
651
- # @see Chef::ApiClient::Registration#run
652
- # @see Chef::EventDispatcher#skipping_registration
653
- # @see Chef::EventDispatcher#registration_start
654
- # @see Chef::EventDispatcher#registration_completed
655
- # @see Chef::EventDispatcher#registration_failed
656
- #
657
- # @api private
658
- #
659
- def register(client_name = node_name, config = Chef::Config)
660
- if !config[:client_key]
661
- events.skipping_registration(client_name, config)
662
- Chef::Log.debug("Client key is unspecified - skipping registration")
663
- elsif File.exists?(config[:client_key])
664
- events.skipping_registration(client_name, config)
665
- Chef::Log.debug("Client key #{config[:client_key]} is present - skipping registration")
666
- else
667
- events.registration_start(node_name, config)
668
- Chef::Log.info("Client key #{config[:client_key]} is not present - registering")
669
- Chef::ApiClient::Registration.new(node_name, config[:client_key]).run
670
- events.registration_completed
671
- end
672
- # We now have the client key, and should use it from now on.
673
- @rest = Chef::ServerAPI.new(config[:chef_server_url], client_name: client_name,
674
- signing_key_filename: config[:client_key])
675
- # force initialization of the rest_clean API object
676
- rest_clean(client_name, config)
677
- register_reporters
678
- rescue Exception => e
679
- # TODO this should probably only ever fire if we *started* registration.
680
- # Move it to the block above.
681
- # TODO: munge exception so a semantic failure message can be given to the
682
- # user
683
- events.registration_failed(client_name, e, config)
684
- raise
685
- end
686
-
687
- #
688
- # Converges all compiled resources.
689
- #
690
- # Fires the converge_start, converge_complete and converge_failed events.
691
- #
692
- # If the exception `:end_client_run_early` is thrown during convergence, it
693
- # does not mark the run complete *or* failed, and returns `nil`
694
- #
695
- # @param run_context The run context.
696
- #
697
- # @return The thrown exception, if we are in audit mode. `nil` means the
698
- # converge was successful or ended early.
699
- #
700
- # @raise Any converge exception, unless we are in audit mode, in which case
701
- # we *return* the exception.
702
- #
703
- # @see Chef::Runner#converge
704
- # @see Chef::Config#audit_mode
705
- # @see Chef::EventDispatch#converge_start
706
- # @see Chef::EventDispatch#converge_complete
707
- # @see Chef::EventDispatch#converge_failed
708
- #
709
- # @api private
710
- #
711
- def converge(run_context)
712
- converge_exception = nil
713
- catch(:end_client_run_early) do
714
- begin
715
- events.converge_start(run_context)
716
- Chef::Log.debug("Converging node #{node_name}")
717
- @runner = Chef::Runner.new(run_context)
718
- @runner.converge
719
- events.converge_complete
720
- rescue Exception => e
721
- events.converge_failed(e)
722
- raise e if Chef::Config[:audit_mode] == :disabled
723
- converge_exception = e
724
- end
725
- end
726
- converge_exception
727
- end
728
-
729
- #
730
- # Converge the node via and then save it if successful.
731
- #
732
- # @param run_context The run context.
733
- #
734
- # @return The thrown exception, if we are in audit mode. `nil` means the
735
- # converge was successful or ended early.
736
- #
737
- # @raise Any converge or node save exception, unless we are in audit mode,
738
- # in which case we *return* the exception.
739
- #
740
- # @see #converge
741
- # @see #save_updated_mode
742
- # @see Chef::Config#audit_mode
743
- #
744
- # @api private
745
- #
746
- # We don't want to change the old API on the `converge` method to have it perform
747
- # saving. So we wrap it in this method.
748
- # TODO given this seems to be pretty internal stuff, how badly do we need to
749
- # split this stuff up?
750
- #
751
- def converge_and_save(run_context)
752
- converge_exception = converge(run_context)
753
- unless converge_exception
754
- begin
755
- save_updated_node
756
- rescue Exception => e
757
- raise e if Chef::Config[:audit_mode] == :disabled
758
- converge_exception = e
759
- end
760
- end
761
- converge_exception
762
- end
763
-
764
- #
765
- # Run the audit phase.
766
- #
767
- # Triggers the audit_phase_start, audit_phase_complete and
768
- # audit_phase_failed events.
769
- #
770
- # @param run_context The run context.
771
- #
772
- # @return Any thrown exceptions. `nil` if successful.
773
- #
774
- # @see Chef::Audit::Runner#run
775
- # @see Chef::EventDispatch#audit_phase_start
776
- # @see Chef::EventDispatch#audit_phase_complete
777
- # @see Chef::EventDispatch#audit_phase_failed
778
- #
779
- # @api private
780
- #
781
- def run_audits(run_context)
782
- begin
783
- events.audit_phase_start(run_status)
784
- Chef::Log.info("Starting audit phase")
785
- auditor = Chef::Audit::Runner.new(run_context)
786
- auditor.run
787
- if auditor.failed?
788
- audit_exception = Chef::Exceptions::AuditsFailed.new(auditor.num_failed, auditor.num_total)
789
- @events.audit_phase_failed(audit_exception, Chef::Audit::Logger.read_buffer)
790
- else
791
- @events.audit_phase_complete(Chef::Audit::Logger.read_buffer)
792
- end
793
- rescue Exception => e
794
- Chef::Log.error("Audit phase failed with error message: #{e.message}")
795
- @events.audit_phase_failed(e, Chef::Audit::Logger.read_buffer)
796
- audit_exception = e
797
- end
798
- audit_exception
799
- end
800
-
801
- #
802
- # Expands the run list.
803
- #
804
- # @return [Chef::RunListExpansion] The expanded run list.
805
- #
806
- # @see Chef::PolicyBuilder#expand_run_list
807
- #
808
- def expanded_run_list
809
- policy_builder.expand_run_list
810
- end
811
-
812
- #
813
- # Check if the user has Administrator privileges on windows.
814
- #
815
- # Throws an error if the user is not an admin, and
816
- # `Chef::Config.fatal_windows_admin_check` is true.
817
- #
818
- # @raise [Chef::Exceptions::WindowsNotAdmin] If the user is not an admin.
819
- #
820
- # @see Chef::platform#windows?
821
- # @see Chef::Config#fatal_windows_admin_check
822
- #
823
- # @api private
824
- #
825
- def do_windows_admin_check
826
- if Chef::Platform.windows?
827
- Chef::Log.debug("Checking for administrator privileges....")
828
-
829
- if !has_admin_privileges?
830
- message = "chef-client doesn't have administrator privileges on node #{node_name}."
831
- if Chef::Config[:fatal_windows_admin_check]
832
- Chef::Log.fatal(message)
833
- Chef::Log.fatal("fatal_windows_admin_check is set to TRUE.")
834
- raise Chef::Exceptions::WindowsNotAdmin, message
835
- else
836
- Chef::Log.warn("#{message} This might cause unexpected resource failures.")
837
- end
838
- else
839
- Chef::Log.debug("chef-client has administrator privileges on node #{node_name}.")
840
- end
841
- end
842
- end
843
-
844
- # Notification registration
845
- class<<self
846
- #
847
- # Add a listener for the 'client run started' event.
848
- #
849
- # @param notification_block The callback (takes |run_status| parameter).
850
- # @yieldparam [Chef::RunStatus] run_status The run status.
851
- #
852
- def when_run_starts(&notification_block)
853
- run_start_notifications << notification_block
854
- end
855
-
856
- #
857
- # Add a listener for the 'client run success' event.
858
- #
859
- # @param notification_block The callback (takes |run_status| parameter).
860
- # @yieldparam [Chef::RunStatus] run_status The run status.
861
- #
862
- def when_run_completes_successfully(&notification_block)
863
- run_completed_successfully_notifications << notification_block
864
- end
865
-
866
- #
867
- # Add a listener for the 'client run failed' event.
868
- #
869
- # @param notification_block The callback (takes |run_status| parameter).
870
- # @yieldparam [Chef::RunStatus] run_status The run status.
871
- #
872
- def when_run_fails(&notification_block)
873
- run_failed_notifications << notification_block
874
- end
875
-
876
- #
877
- # Clears all listeners for client run status events.
878
- #
879
- # Primarily for testing purposes.
880
- #
881
- # @api private
882
- #
883
- def clear_notifications
884
- @run_start_notifications = nil
885
- @run_completed_successfully_notifications = nil
886
- @run_failed_notifications = nil
887
- end
888
-
889
- #
890
- # TODO These seem protected to me.
891
- #
892
-
893
- #
894
- # Listeners to be run when the client run starts.
895
- #
896
- # @return [Array<Proc>]
897
- #
898
- # @api private
899
- #
900
- def run_start_notifications
901
- @run_start_notifications ||= []
902
- end
903
-
904
- #
905
- # Listeners to be run when the client run completes successfully.
906
- #
907
- # @return [Array<Proc>]
908
- #
909
- # @api private
910
- #
911
- def run_completed_successfully_notifications
912
- @run_completed_successfully_notifications ||= []
913
- end
914
-
915
- #
916
- # Listeners to be run when the client run fails.
917
- #
918
- # @return [Array<Proc>]
919
- #
920
- # @api private
921
- #
922
- def run_failed_notifications
923
- @run_failed_notifications ||= []
924
- end
925
- end
926
-
927
- #
928
- # IO stream that will be used as 'STDOUT' for formatters. Formatters are
929
- # configured during `initialize`, so this provides a convenience for
930
- # setting alternative IO stream during tests.
931
- #
932
- # @api private
933
- #
934
- STDOUT_FD = STDOUT
935
-
936
- #
937
- # IO stream that will be used as 'STDERR' for formatters. Formatters are
938
- # configured during `initialize`, so this provides a convenience for
939
- # setting alternative IO stream during tests.
940
- #
941
- # @api private
942
- #
943
- STDERR_FD = STDERR
944
-
945
- private
946
-
947
- attr_reader :override_runlist
948
- attr_reader :specific_recipes
949
-
950
- def profiling_prereqs!
951
- require "ruby-prof"
952
- rescue LoadError
953
- raise "You must have the ruby-prof gem installed in order to use --profile-ruby"
954
- end
955
-
956
- def start_profiling
957
- return unless Chef::Config[:profile_ruby]
958
- profiling_prereqs!
959
- RubyProf.start
960
- end
961
-
962
- def end_profiling
963
- return unless Chef::Config[:profile_ruby]
964
- profiling_prereqs!
965
- path = Chef::FileCache.create_cache_path("graph_profile.out", false)
966
- File.open(path, "w+") do |file|
967
- RubyProf::GraphPrinter.new(RubyProf.stop).print(file, {})
968
- end
969
- Chef::Log.warn("Ruby execution profile dumped to #{path}")
970
- end
971
-
972
- def empty_directory?(path)
973
- !File.exists?(path) || (Dir.entries(path).size <= 2)
974
- end
975
-
976
- def is_last_element?(index, object)
977
- object.kind_of?(Array) ? index == object.size - 1 : true
978
- end
979
-
980
- def assert_cookbook_path_not_empty(run_context)
981
- if Chef::Config[:solo_legacy_mode]
982
- # Check for cookbooks in the path given
983
- # Chef::Config[:cookbook_path] can be a string or an array
984
- # if it's an array, go through it and check each one, raise error at the last one if no files are found
985
- cookbook_paths = Array(Chef::Config[:cookbook_path])
986
- Chef::Log.debug "Loading from cookbook_path: #{cookbook_paths.map { |path| File.expand_path(path) }.join(', ')}"
987
- if cookbook_paths.all? { |path| empty_directory?(path) }
988
- msg = "None of the cookbook paths set in Chef::Config[:cookbook_path], #{cookbook_paths.inspect}, contain any cookbooks"
989
- Chef::Log.fatal(msg)
990
- raise Chef::Exceptions::CookbookNotFound, msg
991
- end
992
- else
993
- Chef::Log.warn("Node #{node_name} has an empty run list.") if run_context.node.run_list.empty?
994
- end
995
- end
996
-
997
- def has_admin_privileges?
998
- require "chef/win32/security"
999
-
1000
- Chef::ReservedNames::Win32::Security.has_admin_privileges?
1001
- end
1002
-
1003
- # Register the data collector reporter to send event information to the
1004
- # data collector server
1005
- def register_data_collector_reporter
1006
- events.register(Chef::DataCollector::Reporter.new) if Chef::DataCollector.register_reporter?
1007
- end
1008
- end
1009
- end
1010
-
1011
- # HACK cannot load this first, but it must be loaded.
1012
- require "chef/cookbook_loader"
1013
- require "chef/cookbook_version"
1014
- require "chef/cookbook/synchronizer"
1
+ #
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Author:: Christopher Walters (<cw@chef.io>)
4
+ # Author:: Christopher Brown (<cb@chef.io>)
5
+ # Author:: Tim Hinderliter (<tim@chef.io>)
6
+ # Copyright:: Copyright 2008-2017, Chef Software Inc.
7
+ # License:: Apache License, Version 2.0
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+
21
+ require "chef/config"
22
+ require "chef/mixin/params_validate"
23
+ require "chef/mixin/path_sanity"
24
+ require "chef/log"
25
+ require "chef/deprecated"
26
+ require "chef/server_api"
27
+ require "chef/api_client"
28
+ require "chef/api_client/registration"
29
+ require "chef/audit/runner"
30
+ require "chef/node"
31
+ require "chef/role"
32
+ require "chef/file_cache"
33
+ require "chef/run_context"
34
+ require "chef/runner"
35
+ require "chef/run_status"
36
+ require "chef/cookbook/cookbook_collection"
37
+ require "chef/cookbook/file_vendor"
38
+ require "chef/cookbook/file_system_file_vendor"
39
+ require "chef/cookbook/remote_file_vendor"
40
+ require "chef/event_dispatch/dispatcher"
41
+ require "chef/event_loggers/base"
42
+ require "chef/event_loggers/windows_eventlog"
43
+ require "chef/exceptions"
44
+ require "chef/formatters/base"
45
+ require "chef/formatters/doc"
46
+ require "chef/formatters/minimal"
47
+ require "chef/version"
48
+ require "chef/resource_reporter"
49
+ require "chef/data_collector"
50
+ require "chef/audit/audit_reporter"
51
+ require "chef/run_lock"
52
+ require "chef/policy_builder"
53
+ require "chef/request_id"
54
+ require "chef/platform/rebooter"
55
+ require "chef/mixin/deprecation"
56
+ require "ohai"
57
+ require "rbconfig"
58
+
59
+ class Chef
60
+ # == Chef::Client
61
+ # The main object in a Chef run. Preps a Chef::Node and Chef::RunContext,
62
+ # syncs cookbooks if necessary, and triggers convergence.
63
+ class Client
64
+ include Chef::Mixin::PathSanity
65
+
66
+ extend Chef::Mixin::Deprecation
67
+
68
+ #
69
+ # The status of the Chef run.
70
+ #
71
+ # @return [Chef::RunStatus]
72
+ #
73
+ attr_reader :run_status
74
+
75
+ #
76
+ # The node represented by this client.
77
+ #
78
+ # @return [Chef::Node]
79
+ #
80
+ def node
81
+ run_status.node
82
+ end
83
+
84
+ def node=(value)
85
+ run_status.node = value
86
+ end
87
+
88
+ #
89
+ # The ohai system used by this client.
90
+ #
91
+ # @return [Ohai::System]
92
+ #
93
+ attr_reader :ohai
94
+
95
+ #
96
+ # The rest object used to communicate with the Chef server.
97
+ #
98
+ # @return [Chef::ServerAPI]
99
+ #
100
+ attr_reader :rest
101
+
102
+ #
103
+ # A rest object with validate_utf8 set to false. This will not throw exceptions
104
+ # on non-UTF8 strings in JSON but will sanitize them so that e.g. POSTs will
105
+ # never fail. Cannot be configured on a request-by-request basis, so we carry
106
+ # around another rest object for it.
107
+ #
108
+ attr_reader :rest_clean
109
+
110
+ #
111
+ # The runner used to converge.
112
+ #
113
+ # @return [Chef::Runner]
114
+ #
115
+ attr_accessor :runner
116
+
117
+ #
118
+ # Extra node attributes that were applied to the node.
119
+ #
120
+ # @return [Hash]
121
+ #
122
+ attr_reader :json_attribs
123
+
124
+ #
125
+ # The event dispatcher for the Chef run, including any configured output
126
+ # formatters and event loggers.
127
+ #
128
+ # @return [EventDispatch::Dispatcher]
129
+ #
130
+ # @see Chef::Formatters
131
+ # @see Chef::Config#formatters
132
+ # @see Chef::Config#stdout
133
+ # @see Chef::Config#stderr
134
+ # @see Chef::Config#force_logger
135
+ # @see Chef::Config#force_formatter
136
+ # TODO add stdout, stderr, and default formatters to Chef::Config so the
137
+ # defaults aren't calculated here. Remove force_logger and force_formatter
138
+ # from this code.
139
+ # @see Chef::EventLoggers
140
+ # @see Chef::Config#disable_event_logger
141
+ # @see Chef::Config#event_loggers
142
+ # @see Chef::Config#event_handlers
143
+ #
144
+ attr_reader :events
145
+
146
+ #
147
+ # Creates a new Chef::Client.
148
+ #
149
+ # @param json_attribs [Hash] Node attributes to layer into the node when it is
150
+ # fetched.
151
+ # @param args [Hash] Options:
152
+ # @option args [Array<RunList::RunListItem>] :override_runlist A runlist to
153
+ # use instead of the node's embedded run list.
154
+ # @option args [Array<String>] :specific_recipes A list of recipe file paths
155
+ # to load after the run list has been loaded.
156
+ #
157
+ def initialize(json_attribs = nil, args = {})
158
+ @json_attribs = json_attribs || {}
159
+ @ohai = Ohai::System.new
160
+
161
+ event_handlers = configure_formatters + configure_event_loggers
162
+ event_handlers += Array(Chef::Config[:event_handlers])
163
+
164
+ @events = EventDispatch::Dispatcher.new(*event_handlers)
165
+ # TODO it seems like a bad idea to be deletin' other peoples' hashes.
166
+ @override_runlist = args.delete(:override_runlist)
167
+ @specific_recipes = args.delete(:specific_recipes)
168
+ @run_status = Chef::RunStatus.new(nil, events)
169
+
170
+ if new_runlist = args.delete(:runlist)
171
+ @json_attribs["run_list"] = new_runlist
172
+ end
173
+ end
174
+
175
+ #
176
+ # Do a full run for this Chef::Client.
177
+ #
178
+ # Locks the run while doing its job.
179
+ #
180
+ # Fires run_start before doing anything and fires run_completed or
181
+ # run_failed when finished. Also notifies client listeners of run_started
182
+ # at the beginning of Compile, and run_completed_successfully or run_failed
183
+ # when all is complete.
184
+ #
185
+ # Phase 1: Setup
186
+ # --------------
187
+ # Gets information about the system and the run we are doing.
188
+ #
189
+ # 1. Run ohai to collect system information.
190
+ # 2. Register / connect to the Chef server (unless in solo mode).
191
+ # 3. Retrieve the node (or create a new one).
192
+ # 4. Merge in json_attribs, Chef::Config.environment, and override_run_list.
193
+ #
194
+ # @see #run_ohai
195
+ # @see #load_node
196
+ # @see #build_node
197
+ # @see Chef::Config#lockfile
198
+ # @see Chef::RunLock#acquire
199
+ #
200
+ # Phase 2: Compile
201
+ # ----------------
202
+ # Decides *what* we plan to converge by compiling recipes.
203
+ #
204
+ # 1. Sync required cookbooks to the local cache.
205
+ # 2. Load libraries from all cookbooks.
206
+ # 3. Load attributes from all cookbooks.
207
+ # 4. Load LWRPs from all cookbooks.
208
+ # 5. Load resource definitions from all cookbooks.
209
+ # 6. Load recipes in the run list.
210
+ # 7. Load recipes from the command line.
211
+ #
212
+ # @see #setup_run_context Syncs and compiles cookbooks.
213
+ # @see Chef::CookbookCompiler#compile
214
+ #
215
+ # Phase 3: Converge
216
+ # -----------------
217
+ # Brings the system up to date.
218
+ #
219
+ # 1. Converge the resources built from recipes in Phase 2.
220
+ # 2. Save the node.
221
+ # 3. Reboot if we were asked to.
222
+ #
223
+ # @see #converge_and_save
224
+ # @see Chef::Runner
225
+ #
226
+ # Phase 4: Audit
227
+ # --------------
228
+ # Runs 'control_group' audits in recipes. This entire section can be enabled or disabled with config.
229
+ #
230
+ # 1. 'control_group' DSL collects audits during Phase 2
231
+ # 2. Audits are run using RSpec
232
+ # 3. Errors are collected and reported using the formatters
233
+ #
234
+ # @see #run_audits
235
+ # @see Chef::Audit::Runner#run
236
+ #
237
+ # @raise [Chef::Exceptions::RunFailedWrappingError] If converge or audit failed.
238
+ #
239
+ # @see Chef::Config#enforce_path_sanity
240
+ # @see Chef::Config#solo
241
+ # @see Chef::Config#audit_mode
242
+ #
243
+ # @return Always returns true.
244
+ #
245
+ def run
246
+ start_profiling
247
+
248
+ run_error = nil
249
+
250
+ runlock = RunLock.new(Chef::Config.lockfile)
251
+ # TODO feels like acquire should have its own block arg for this
252
+ runlock.acquire
253
+ # don't add code that may fail before entering this section to be sure to release lock
254
+ begin
255
+ runlock.save_pid
256
+
257
+ request_id = Chef::RequestID.instance.request_id
258
+ run_context = nil
259
+ events.run_start(Chef::VERSION)
260
+ Chef::Log.info("*** Chef #{Chef::VERSION} ***")
261
+ Chef::Log.info("Platform: #{RUBY_PLATFORM}")
262
+ Chef::Log.info "Chef-client pid: #{Process.pid}"
263
+ Chef::Log.debug("Chef-client request_id: #{request_id}")
264
+ enforce_path_sanity
265
+ run_ohai
266
+
267
+ register unless Chef::Config[:solo_legacy_mode]
268
+ register_data_collector_reporter
269
+
270
+ load_node
271
+
272
+ build_node
273
+
274
+ run_status.run_id = request_id
275
+ run_status.start_clock
276
+ Chef::Log.info("Starting Chef Run for #{node.name}")
277
+ run_started
278
+
279
+ do_windows_admin_check
280
+
281
+ run_context = setup_run_context
282
+
283
+ load_required_recipe(@rest, run_context) unless Chef::Config[:solo_legacy_mode]
284
+
285
+ if Chef::Config[:audit_mode] != :audit_only
286
+ converge_error = converge_and_save(run_context)
287
+ end
288
+
289
+ if Chef::Config[:why_run] == true
290
+ # why_run should probably be renamed to why_converge
291
+ Chef::Log.debug("Not running controls in 'why-run' mode - this mode is used to see potential converge changes")
292
+ elsif Chef::Config[:audit_mode] != :disabled
293
+ audit_error = run_audits(run_context)
294
+ end
295
+
296
+ # Raise converge_error so run_failed reporters/events are processed.
297
+ raise converge_error if converge_error
298
+
299
+ run_status.stop_clock
300
+ Chef::Log.info("Chef Run complete in #{run_status.elapsed_time} seconds")
301
+ run_completed_successfully
302
+ events.run_completed(node, run_status)
303
+
304
+ # keep this inside the main loop to get exception backtraces
305
+ end_profiling
306
+
307
+ # rebooting has to be the last thing we do, no exceptions.
308
+ Chef::Platform::Rebooter.reboot_if_needed!(node)
309
+ rescue Exception => run_error
310
+ # CHEF-3336: Send the error first in case something goes wrong below and we don't know why
311
+ Chef::Log.debug("Re-raising exception: #{run_error.class} - #{run_error.message}\n#{run_error.backtrace.join("\n ")}")
312
+ # If we failed really early, we may not have a run_status yet. Too early for these to be of much use.
313
+ if run_status
314
+ run_status.stop_clock
315
+ run_status.exception = run_error
316
+ run_failed
317
+ end
318
+ events.run_failed(run_error, run_status)
319
+ ensure
320
+ Chef::RequestID.instance.reset_request_id
321
+ @run_status = nil
322
+ runlock.release
323
+ end
324
+
325
+ # Raise audit, converge, and other errors here so that we exit
326
+ # with the proper exit status code and everything gets raised
327
+ # as a RunFailedWrappingError
328
+ if run_error || converge_error || audit_error
329
+ error = if Chef::Config[:audit_mode] == :disabled
330
+ run_error || converge_error
331
+ else
332
+ e = if run_error == converge_error
333
+ Chef::Exceptions::RunFailedWrappingError.new(converge_error, audit_error)
334
+ else
335
+ Chef::Exceptions::RunFailedWrappingError.new(run_error, converge_error, audit_error)
336
+ end
337
+ e.fill_backtrace
338
+ e
339
+ end
340
+
341
+ Chef::Application.debug_stacktrace(error)
342
+ raise error
343
+ end
344
+
345
+ true
346
+ end
347
+
348
+ #
349
+ # Private API
350
+ # TODO make this stuff protected or private
351
+ #
352
+
353
+ # @api private
354
+ def configure_formatters
355
+ formatters_for_run.map do |formatter_name, output_path|
356
+ if output_path.nil?
357
+ Chef::Formatters.new(formatter_name, STDOUT_FD, STDERR_FD)
358
+ else
359
+ io = File.open(output_path, "a+")
360
+ io.sync = true
361
+ Chef::Formatters.new(formatter_name, io, io)
362
+ end
363
+ end
364
+ end
365
+
366
+ # @api private
367
+ def formatters_for_run
368
+ if Chef::Config.formatters.empty?
369
+ [default_formatter]
370
+ else
371
+ Chef::Config.formatters
372
+ end
373
+ end
374
+
375
+ # @api private
376
+ def default_formatter
377
+ if !Chef::Config[:force_logger] || Chef::Config[:force_formatter]
378
+ [:doc]
379
+ else
380
+ [:null]
381
+ end
382
+ end
383
+
384
+ # @api private
385
+ def configure_event_loggers
386
+ if Chef::Config.disable_event_logger
387
+ []
388
+ else
389
+ Chef::Config.event_loggers.map do |evt_logger|
390
+ case evt_logger
391
+ when Symbol
392
+ Chef::EventLoggers.new(evt_logger)
393
+ when Class
394
+ evt_logger.new
395
+ else
396
+ end
397
+ end
398
+ end
399
+ end
400
+
401
+ # Rest client for use by API reporters. This rest client will not fail with an exception if
402
+ # it is fed non-UTF8 data.
403
+ #
404
+ # @api private
405
+ def rest_clean(client_name = node_name, config = Chef::Config)
406
+ @rest_clean ||=
407
+ Chef::ServerAPI.new(config[:chef_server_url], client_name: client_name,
408
+ signing_key_filename: config[:client_key], validate_utf8: false)
409
+ end
410
+
411
+ # Resource reporters send event information back to the chef server for
412
+ # processing. Can only be called after we have a @rest object
413
+ # @api private
414
+ def register_reporters
415
+ [
416
+ Chef::ResourceReporter.new(rest_clean),
417
+ Chef::Audit::AuditReporter.new(rest_clean),
418
+ ].each do |r|
419
+ events.register(r)
420
+ end
421
+ end
422
+
423
+ #
424
+ # Callback to fire notifications that the Chef run is starting
425
+ #
426
+ # @api private
427
+ #
428
+ def run_started
429
+ self.class.run_start_notifications.each do |notification|
430
+ notification.call(run_status)
431
+ end
432
+ events.run_started(run_status)
433
+ end
434
+
435
+ #
436
+ # Callback to fire notifications that the run completed successfully
437
+ #
438
+ # @api private
439
+ #
440
+ def run_completed_successfully
441
+ success_handlers = self.class.run_completed_successfully_notifications
442
+ success_handlers.each do |notification|
443
+ notification.call(run_status)
444
+ end
445
+ end
446
+
447
+ #
448
+ # Callback to fire notifications that the Chef run failed
449
+ #
450
+ # @api private
451
+ #
452
+ def run_failed
453
+ failure_handlers = self.class.run_failed_notifications
454
+ failure_handlers.each do |notification|
455
+ notification.call(run_status)
456
+ end
457
+ end
458
+
459
+ #
460
+ # Instantiates a Chef::Node object, possibly loading the node's prior state
461
+ # when using chef-client. Sets Chef.node to the new node.
462
+ #
463
+ # @return [Chef::Node] The node object for this Chef run
464
+ #
465
+ # @see Chef::PolicyBuilder#load_node
466
+ #
467
+ # @api private
468
+ #
469
+ def load_node
470
+ policy_builder.load_node
471
+ run_status.node = policy_builder.node
472
+ Chef.set_node(policy_builder.node)
473
+ node
474
+ end
475
+
476
+ #
477
+ # Mutates the `node` object to prepare it for the chef run.
478
+ #
479
+ # @return [Chef::Node] The updated node object
480
+ #
481
+ # @see Chef::PolicyBuilder#build_node
482
+ #
483
+ # @api private
484
+ #
485
+ def build_node
486
+ policy_builder.build_node
487
+ run_status.node = node
488
+ node
489
+ end
490
+
491
+ #
492
+ # Sync cookbooks to local cache.
493
+ #
494
+ # TODO this appears to be unused.
495
+ #
496
+ # @see Chef::PolicyBuilder#sync_cookbooks
497
+ #
498
+ # @api private
499
+ #
500
+ def sync_cookbooks
501
+ policy_builder.sync_cookbooks
502
+ end
503
+
504
+ #
505
+ # Sets up the run context.
506
+ #
507
+ # @see Chef::PolicyBuilder#setup_run_context
508
+ #
509
+ # @return The newly set up run context
510
+ #
511
+ # @api private
512
+ def setup_run_context
513
+ run_context = policy_builder.setup_run_context(specific_recipes)
514
+ assert_cookbook_path_not_empty(run_context)
515
+ run_status.run_context = run_context
516
+ run_context
517
+ end
518
+
519
+ #
520
+ # Adds a required recipe as specified by the Chef Server
521
+ #
522
+ # @return The modified run context
523
+ #
524
+ # @api private
525
+ #
526
+ # TODO: @rest doesn't appear to be used anywhere outside
527
+ # of client.register except for here. If it's common practice
528
+ # to create your own rest client, perhaps we should do that
529
+ # here but it seems more appropriate to reuse one that we
530
+ # know is already created. for ease of testing, we'll pass
531
+ # the existing rest client in as a parameter
532
+ #
533
+ def load_required_recipe(rest, run_context)
534
+ required_recipe_contents = rest.get("required_recipe")
535
+ Chef::Log.info("Required Recipe found, loading it")
536
+ Chef::FileCache.store("required_recipe", required_recipe_contents)
537
+ required_recipe_file = Chef::FileCache.load("required_recipe", false)
538
+
539
+ # TODO: add integration tests with resource reporting turned on
540
+ # (presumably requires changes to chef-zero)
541
+ #
542
+ # Chef::Recipe.new takes a cookbook name and a recipe name along
543
+ # with the run context. These names are eventually used in the
544
+ # resource reporter, and if the cookbook name cannot be found in the
545
+ # cookbook collection then we will fail with an exception. Cases where
546
+ # we currently also fail:
547
+ # - specific recipes
548
+ # - chef-apply would fail if resource reporting was enabled
549
+ #
550
+ recipe = Chef::Recipe.new(nil, nil, run_context)
551
+ recipe.from_file(required_recipe_file)
552
+ run_context
553
+ rescue Net::HTTPServerException => e
554
+ case e.response
555
+ when Net::HTTPNotFound
556
+ Chef::Log.debug("Required Recipe not configured on the server, skipping it")
557
+ else
558
+ raise
559
+ end
560
+ end
561
+
562
+ #
563
+ # The PolicyBuilder strategy for figuring out run list and cookbooks.
564
+ #
565
+ # @return [Chef::PolicyBuilder::Policyfile, Chef::PolicyBuilder::ExpandNodeObject]
566
+ #
567
+ # @api private
568
+ #
569
+ def policy_builder
570
+ @policy_builder ||= Chef::PolicyBuilder::Dynamic.new(node_name, ohai.data, json_attribs, override_runlist, events)
571
+ end
572
+
573
+ #
574
+ # Save the updated node to Chef.
575
+ #
576
+ # Does not save if we are in solo mode or using override_runlist.
577
+ #
578
+ # @see Chef::Node#save
579
+ # @see Chef::Config#solo
580
+ #
581
+ # @api private
582
+ #
583
+ def save_updated_node
584
+ if Chef::Config[:solo_legacy_mode]
585
+ # nothing to do
586
+ elsif policy_builder.temporary_policy?
587
+ Chef::Log.warn("Skipping final node save because override_runlist was given")
588
+ else
589
+ Chef::Log.debug("Saving the current state of node #{node_name}")
590
+ node.save
591
+ end
592
+ end
593
+
594
+ #
595
+ # Run ohai plugins. Runs all ohai plugins unless minimal_ohai is specified.
596
+ #
597
+ # Sends the ohai_completed event when finished.
598
+ #
599
+ # @see Chef::EventDispatcher#
600
+ # @see Chef::Config#minimal_ohai
601
+ #
602
+ # @api private
603
+ #
604
+ def run_ohai
605
+ filter = Chef::Config[:minimal_ohai] ? %w{fqdn machinename hostname platform platform_version ohai_time os os_version} : nil
606
+ ohai.all_plugins(filter)
607
+ events.ohai_completed(node)
608
+ rescue Ohai::Exceptions::CriticalPluginFailure => e
609
+ Chef::Log.error("Critical Ohai plugins failed: #{e.message}")
610
+ exit(false)
611
+ end
612
+
613
+ #
614
+ # Figure out the node name we are working with.
615
+ #
616
+ # It tries these, in order:
617
+ # - Chef::Config.node_name
618
+ # - ohai[:fqdn]
619
+ # - ohai[:machinename]
620
+ # - ohai[:hostname]
621
+ #
622
+ # @raise [Chef::Exceptions::CannotDetermineNodeName] If the node name is not
623
+ # set and cannot be determined via ohai.
624
+ #
625
+ # @see Chef::Config#node_name
626
+ #
627
+ # @api private
628
+ #
629
+ def node_name
630
+ name = Chef::Config[:node_name] || ohai[:fqdn] || ohai[:machinename] || ohai[:hostname]
631
+ Chef::Config[:node_name] = name
632
+
633
+ raise Chef::Exceptions::CannotDetermineNodeName unless name
634
+
635
+ name
636
+ end
637
+
638
+ #
639
+ # Determine our private key and set up the connection to the Chef server.
640
+ #
641
+ # Skips registration and fires the `skipping_registration` event if
642
+ # Chef::Config.client_key is unspecified or already exists.
643
+ #
644
+ # If Chef::Config.client_key does not exist, we register the client with the
645
+ # Chef server and fire the registration_start and registration_completed events.
646
+ #
647
+ # @return [Chef::ServerAPI] The server connection object.
648
+ #
649
+ # @see Chef::Config#chef_server_url
650
+ # @see Chef::Config#client_key
651
+ # @see Chef::ApiClient::Registration#run
652
+ # @see Chef::EventDispatcher#skipping_registration
653
+ # @see Chef::EventDispatcher#registration_start
654
+ # @see Chef::EventDispatcher#registration_completed
655
+ # @see Chef::EventDispatcher#registration_failed
656
+ #
657
+ # @api private
658
+ #
659
+ def register(client_name = node_name, config = Chef::Config)
660
+ if !config[:client_key]
661
+ events.skipping_registration(client_name, config)
662
+ Chef::Log.debug("Client key is unspecified - skipping registration")
663
+ elsif File.exists?(config[:client_key])
664
+ events.skipping_registration(client_name, config)
665
+ Chef::Log.debug("Client key #{config[:client_key]} is present - skipping registration")
666
+ else
667
+ events.registration_start(node_name, config)
668
+ Chef::Log.info("Client key #{config[:client_key]} is not present - registering")
669
+ Chef::ApiClient::Registration.new(node_name, config[:client_key]).run
670
+ events.registration_completed
671
+ end
672
+ # We now have the client key, and should use it from now on.
673
+ @rest = Chef::ServerAPI.new(config[:chef_server_url], client_name: client_name,
674
+ signing_key_filename: config[:client_key])
675
+ # force initialization of the rest_clean API object
676
+ rest_clean(client_name, config)
677
+ register_reporters
678
+ rescue Exception => e
679
+ # TODO this should probably only ever fire if we *started* registration.
680
+ # Move it to the block above.
681
+ # TODO: munge exception so a semantic failure message can be given to the
682
+ # user
683
+ events.registration_failed(client_name, e, config)
684
+ raise
685
+ end
686
+
687
+ #
688
+ # Converges all compiled resources.
689
+ #
690
+ # Fires the converge_start, converge_complete and converge_failed events.
691
+ #
692
+ # If the exception `:end_client_run_early` is thrown during convergence, it
693
+ # does not mark the run complete *or* failed, and returns `nil`
694
+ #
695
+ # @param run_context The run context.
696
+ #
697
+ # @return The thrown exception, if we are in audit mode. `nil` means the
698
+ # converge was successful or ended early.
699
+ #
700
+ # @raise Any converge exception, unless we are in audit mode, in which case
701
+ # we *return* the exception.
702
+ #
703
+ # @see Chef::Runner#converge
704
+ # @see Chef::Config#audit_mode
705
+ # @see Chef::EventDispatch#converge_start
706
+ # @see Chef::EventDispatch#converge_complete
707
+ # @see Chef::EventDispatch#converge_failed
708
+ #
709
+ # @api private
710
+ #
711
+ def converge(run_context)
712
+ converge_exception = nil
713
+ catch(:end_client_run_early) do
714
+ begin
715
+ events.converge_start(run_context)
716
+ Chef::Log.debug("Converging node #{node_name}")
717
+ @runner = Chef::Runner.new(run_context)
718
+ @runner.converge
719
+ events.converge_complete
720
+ rescue Exception => e
721
+ events.converge_failed(e)
722
+ raise e if Chef::Config[:audit_mode] == :disabled
723
+ converge_exception = e
724
+ end
725
+ end
726
+ converge_exception
727
+ end
728
+
729
+ #
730
+ # Converge the node via and then save it if successful.
731
+ #
732
+ # @param run_context The run context.
733
+ #
734
+ # @return The thrown exception, if we are in audit mode. `nil` means the
735
+ # converge was successful or ended early.
736
+ #
737
+ # @raise Any converge or node save exception, unless we are in audit mode,
738
+ # in which case we *return* the exception.
739
+ #
740
+ # @see #converge
741
+ # @see #save_updated_mode
742
+ # @see Chef::Config#audit_mode
743
+ #
744
+ # @api private
745
+ #
746
+ # We don't want to change the old API on the `converge` method to have it perform
747
+ # saving. So we wrap it in this method.
748
+ # TODO given this seems to be pretty internal stuff, how badly do we need to
749
+ # split this stuff up?
750
+ #
751
+ def converge_and_save(run_context)
752
+ converge_exception = converge(run_context)
753
+ unless converge_exception
754
+ begin
755
+ save_updated_node
756
+ rescue Exception => e
757
+ raise e if Chef::Config[:audit_mode] == :disabled
758
+ converge_exception = e
759
+ end
760
+ end
761
+ converge_exception
762
+ end
763
+
764
+ #
765
+ # Run the audit phase.
766
+ #
767
+ # Triggers the audit_phase_start, audit_phase_complete and
768
+ # audit_phase_failed events.
769
+ #
770
+ # @param run_context The run context.
771
+ #
772
+ # @return Any thrown exceptions. `nil` if successful.
773
+ #
774
+ # @see Chef::Audit::Runner#run
775
+ # @see Chef::EventDispatch#audit_phase_start
776
+ # @see Chef::EventDispatch#audit_phase_complete
777
+ # @see Chef::EventDispatch#audit_phase_failed
778
+ #
779
+ # @api private
780
+ #
781
+ def run_audits(run_context)
782
+ begin
783
+ events.audit_phase_start(run_status)
784
+ Chef::Log.info("Starting audit phase")
785
+ auditor = Chef::Audit::Runner.new(run_context)
786
+ auditor.run
787
+ if auditor.failed?
788
+ audit_exception = Chef::Exceptions::AuditsFailed.new(auditor.num_failed, auditor.num_total)
789
+ @events.audit_phase_failed(audit_exception, Chef::Audit::Logger.read_buffer)
790
+ else
791
+ @events.audit_phase_complete(Chef::Audit::Logger.read_buffer)
792
+ end
793
+ rescue Exception => e
794
+ Chef::Log.error("Audit phase failed with error message: #{e.message}")
795
+ @events.audit_phase_failed(e, Chef::Audit::Logger.read_buffer)
796
+ audit_exception = e
797
+ end
798
+ audit_exception
799
+ end
800
+
801
+ #
802
+ # Expands the run list.
803
+ #
804
+ # @return [Chef::RunListExpansion] The expanded run list.
805
+ #
806
+ # @see Chef::PolicyBuilder#expand_run_list
807
+ #
808
+ def expanded_run_list
809
+ policy_builder.expand_run_list
810
+ end
811
+
812
+ #
813
+ # Check if the user has Administrator privileges on windows.
814
+ #
815
+ # Throws an error if the user is not an admin, and
816
+ # `Chef::Config.fatal_windows_admin_check` is true.
817
+ #
818
+ # @raise [Chef::Exceptions::WindowsNotAdmin] If the user is not an admin.
819
+ #
820
+ # @see Chef::platform#windows?
821
+ # @see Chef::Config#fatal_windows_admin_check
822
+ #
823
+ # @api private
824
+ #
825
+ def do_windows_admin_check
826
+ if Chef::Platform.windows?
827
+ Chef::Log.debug("Checking for administrator privileges....")
828
+
829
+ if !has_admin_privileges?
830
+ message = "chef-client doesn't have administrator privileges on node #{node_name}."
831
+ if Chef::Config[:fatal_windows_admin_check]
832
+ Chef::Log.fatal(message)
833
+ Chef::Log.fatal("fatal_windows_admin_check is set to TRUE.")
834
+ raise Chef::Exceptions::WindowsNotAdmin, message
835
+ else
836
+ Chef::Log.warn("#{message} This might cause unexpected resource failures.")
837
+ end
838
+ else
839
+ Chef::Log.debug("chef-client has administrator privileges on node #{node_name}.")
840
+ end
841
+ end
842
+ end
843
+
844
+ # Notification registration
845
+ class<<self
846
+ #
847
+ # Add a listener for the 'client run started' event.
848
+ #
849
+ # @param notification_block The callback (takes |run_status| parameter).
850
+ # @yieldparam [Chef::RunStatus] run_status The run status.
851
+ #
852
+ def when_run_starts(&notification_block)
853
+ run_start_notifications << notification_block
854
+ end
855
+
856
+ #
857
+ # Add a listener for the 'client run success' event.
858
+ #
859
+ # @param notification_block The callback (takes |run_status| parameter).
860
+ # @yieldparam [Chef::RunStatus] run_status The run status.
861
+ #
862
+ def when_run_completes_successfully(&notification_block)
863
+ run_completed_successfully_notifications << notification_block
864
+ end
865
+
866
+ #
867
+ # Add a listener for the 'client run failed' event.
868
+ #
869
+ # @param notification_block The callback (takes |run_status| parameter).
870
+ # @yieldparam [Chef::RunStatus] run_status The run status.
871
+ #
872
+ def when_run_fails(&notification_block)
873
+ run_failed_notifications << notification_block
874
+ end
875
+
876
+ #
877
+ # Clears all listeners for client run status events.
878
+ #
879
+ # Primarily for testing purposes.
880
+ #
881
+ # @api private
882
+ #
883
+ def clear_notifications
884
+ @run_start_notifications = nil
885
+ @run_completed_successfully_notifications = nil
886
+ @run_failed_notifications = nil
887
+ end
888
+
889
+ #
890
+ # TODO These seem protected to me.
891
+ #
892
+
893
+ #
894
+ # Listeners to be run when the client run starts.
895
+ #
896
+ # @return [Array<Proc>]
897
+ #
898
+ # @api private
899
+ #
900
+ def run_start_notifications
901
+ @run_start_notifications ||= []
902
+ end
903
+
904
+ #
905
+ # Listeners to be run when the client run completes successfully.
906
+ #
907
+ # @return [Array<Proc>]
908
+ #
909
+ # @api private
910
+ #
911
+ def run_completed_successfully_notifications
912
+ @run_completed_successfully_notifications ||= []
913
+ end
914
+
915
+ #
916
+ # Listeners to be run when the client run fails.
917
+ #
918
+ # @return [Array<Proc>]
919
+ #
920
+ # @api private
921
+ #
922
+ def run_failed_notifications
923
+ @run_failed_notifications ||= []
924
+ end
925
+ end
926
+
927
+ #
928
+ # IO stream that will be used as 'STDOUT' for formatters. Formatters are
929
+ # configured during `initialize`, so this provides a convenience for
930
+ # setting alternative IO stream during tests.
931
+ #
932
+ # @api private
933
+ #
934
+ STDOUT_FD = STDOUT
935
+
936
+ #
937
+ # IO stream that will be used as 'STDERR' for formatters. Formatters are
938
+ # configured during `initialize`, so this provides a convenience for
939
+ # setting alternative IO stream during tests.
940
+ #
941
+ # @api private
942
+ #
943
+ STDERR_FD = STDERR
944
+
945
+ private
946
+
947
+ attr_reader :override_runlist
948
+ attr_reader :specific_recipes
949
+
950
+ def profiling_prereqs!
951
+ require "ruby-prof"
952
+ rescue LoadError
953
+ raise "You must have the ruby-prof gem installed in order to use --profile-ruby"
954
+ end
955
+
956
+ def start_profiling
957
+ return unless Chef::Config[:profile_ruby]
958
+ profiling_prereqs!
959
+ RubyProf.start
960
+ end
961
+
962
+ def end_profiling
963
+ return unless Chef::Config[:profile_ruby]
964
+ profiling_prereqs!
965
+ path = Chef::FileCache.create_cache_path("graph_profile.out", false)
966
+ File.open(path, "w+") do |file|
967
+ RubyProf::GraphPrinter.new(RubyProf.stop).print(file, {})
968
+ end
969
+ Chef::Log.warn("Ruby execution profile dumped to #{path}")
970
+ end
971
+
972
+ def empty_directory?(path)
973
+ !File.exists?(path) || (Dir.entries(path).size <= 2)
974
+ end
975
+
976
+ def is_last_element?(index, object)
977
+ object.kind_of?(Array) ? index == object.size - 1 : true
978
+ end
979
+
980
+ def assert_cookbook_path_not_empty(run_context)
981
+ if Chef::Config[:solo_legacy_mode]
982
+ # Check for cookbooks in the path given
983
+ # Chef::Config[:cookbook_path] can be a string or an array
984
+ # if it's an array, go through it and check each one, raise error at the last one if no files are found
985
+ cookbook_paths = Array(Chef::Config[:cookbook_path])
986
+ Chef::Log.debug "Loading from cookbook_path: #{cookbook_paths.map { |path| File.expand_path(path) }.join(', ')}"
987
+ if cookbook_paths.all? { |path| empty_directory?(path) }
988
+ msg = "None of the cookbook paths set in Chef::Config[:cookbook_path], #{cookbook_paths.inspect}, contain any cookbooks"
989
+ Chef::Log.fatal(msg)
990
+ raise Chef::Exceptions::CookbookNotFound, msg
991
+ end
992
+ else
993
+ Chef::Log.warn("Node #{node_name} has an empty run list.") if run_context.node.run_list.empty?
994
+ end
995
+ end
996
+
997
+ def has_admin_privileges?
998
+ require "chef/win32/security"
999
+
1000
+ Chef::ReservedNames::Win32::Security.has_admin_privileges?
1001
+ end
1002
+
1003
+ # Register the data collector reporter to send event information to the
1004
+ # data collector server
1005
+ def register_data_collector_reporter
1006
+ events.register(Chef::DataCollector::Reporter.new) if Chef::DataCollector.register_reporter?
1007
+ end
1008
+ end
1009
+ end
1010
+
1011
+ # HACK cannot load this first, but it must be loaded.
1012
+ require "chef/cookbook_loader"
1013
+ require "chef/cookbook_version"
1014
+ require "chef/cookbook/synchronizer"