chef 12.22.1 → 12.22.3

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 (2061) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +151 -151
  3. data/Gemfile +95 -95
  4. data/LICENSE +201 -201
  5. data/README.md +309 -309
  6. data/Rakefile +104 -104
  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 +16 -16
  15. data/acceptance/Gemfile.lock +258 -258
  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 +85 -85
  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 +38 -38
  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 +204 -204
  45. data/acceptance/data-collector/test/integration/helpers/serverspec/Gemfile +8 -8
  46. data/acceptance/fips/.acceptance/acceptance-cookbook/.gitignore +2 -2
  47. data/acceptance/fips/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  48. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  49. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  50. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  51. data/acceptance/fips/.kitchen.yml +8 -8
  52. data/acceptance/fips/test/integration/fips-integration/serverspec/Gemfile +9 -9
  53. data/acceptance/fips/test/integration/fips-integration/serverspec/fips-integration_spec.rb +52 -52
  54. data/acceptance/fips/test/integration/fips-unit-functional/serverspec/Gemfile +7 -7
  55. data/acceptance/fips/test/integration/fips-unit-functional/serverspec/fips-unit-functional_spec.rb +56 -56
  56. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/.gitignore +2 -2
  57. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/metadata.rb +1 -1
  58. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  59. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  60. data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/verify.rb +61 -61
  61. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/.gitignore +2 -2
  62. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/cookbook_kitchen.rb +43 -43
  63. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +39 -39
  64. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/metadata.rb +3 -3
  65. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  66. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  67. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  68. data/acceptance/top-cookbooks/.gitignore +1 -1
  69. data/acceptance/top-cookbooks/.kitchen.chocolatey.yml +6 -6
  70. data/acceptance/top-cookbooks/.kitchen.iis.yml +4 -4
  71. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-rhel.yml +7 -7
  72. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-ubuntu.yml +7 -7
  73. data/acceptance/top-cookbooks/.kitchen.learn-the-basics-windows.yml +7 -7
  74. data/acceptance/top-cookbooks/.kitchen.powershell.yml +4 -4
  75. data/acceptance/top-cookbooks/.kitchen.sql_server.yml +5 -5
  76. data/acceptance/top-cookbooks/.kitchen.winbox.yml +8 -8
  77. data/acceptance/top-cookbooks/.kitchen.windows.yml +38 -38
  78. data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -2
  79. data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  80. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  81. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  82. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  83. data/acceptance/trivial/.kitchen.yml +7 -7
  84. data/acceptance/trivial/test/integration/chef-current-install/inspec/chef_client_spec.rb +5 -5
  85. data/acceptance/windows-service/.acceptance/acceptance-cookbook/.gitignore +2 -2
  86. data/acceptance/windows-service/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  87. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  88. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  89. data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  90. data/acceptance/windows-service/.kitchen.yml +7 -7
  91. data/acceptance/windows-service/test/integration/chef-windows-service/inspec/chef_windows_service_spec.rb +58 -58
  92. data/bin/chef-apply +25 -25
  93. data/bin/chef-client +26 -26
  94. data/bin/chef-shell +34 -34
  95. data/bin/chef-solo +25 -25
  96. data/bin/knife +25 -25
  97. data/chef-universal-mingw32.gemspec +23 -23
  98. data/chef.gemspec +61 -61
  99. data/distro/common/html/_sources/ctl_chef_client.txt +35 -35
  100. data/distro/common/html/_sources/ctl_chef_server.txt +341 -341
  101. data/distro/common/html/_sources/ctl_chef_shell.txt +15 -15
  102. data/distro/common/html/_sources/ctl_chef_solo.txt +25 -25
  103. data/distro/common/html/_sources/index.txt +135 -135
  104. data/distro/common/html/_sources/knife.txt +74 -74
  105. data/distro/common/html/_sources/knife_bootstrap.txt +56 -56
  106. data/distro/common/html/_sources/knife_client.txt +150 -150
  107. data/distro/common/html/_sources/knife_common_options.txt +6 -6
  108. data/distro/common/html/_sources/knife_configure.txt +29 -29
  109. data/distro/common/html/_sources/knife_cookbook.txt +236 -236
  110. data/distro/common/html/_sources/knife_cookbook_site.txt +157 -157
  111. data/distro/common/html/_sources/knife_data_bag.txt +159 -159
  112. data/distro/common/html/_sources/knife_delete.txt +26 -26
  113. data/distro/common/html/_sources/knife_deps.txt +61 -61
  114. data/distro/common/html/_sources/knife_diff.txt +34 -34
  115. data/distro/common/html/_sources/knife_download.txt +44 -44
  116. data/distro/common/html/_sources/knife_edit.txt +26 -26
  117. data/distro/common/html/_sources/knife_environment.txt +158 -158
  118. data/distro/common/html/_sources/knife_exec.txt +47 -47
  119. data/distro/common/html/_sources/knife_index_rebuild.txt +20 -20
  120. data/distro/common/html/_sources/knife_list.txt +33 -33
  121. data/distro/common/html/_sources/knife_node.txt +250 -250
  122. data/distro/common/html/_sources/knife_raw.txt +35 -35
  123. data/distro/common/html/_sources/knife_recipe_list.txt +23 -23
  124. data/distro/common/html/_sources/knife_role.txt +157 -157
  125. data/distro/common/html/_sources/knife_search.txt +53 -53
  126. data/distro/common/html/_sources/knife_serve.txt +18 -18
  127. data/distro/common/html/_sources/knife_show.txt +26 -26
  128. data/distro/common/html/_sources/knife_ssh.txt +43 -43
  129. data/distro/common/html/_sources/knife_ssl_check.txt +41 -41
  130. data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -41
  131. data/distro/common/html/_sources/knife_status.txt +37 -37
  132. data/distro/common/html/_sources/knife_tag.txt +69 -69
  133. data/distro/common/html/_sources/knife_upload.txt +49 -49
  134. data/distro/common/html/_sources/knife_user.txt +127 -127
  135. data/distro/common/html/_sources/knife_using.txt +43 -43
  136. data/distro/common/html/_sources/knife_xargs.txt +30 -30
  137. data/distro/common/html/_static/basic.css +536 -536
  138. data/distro/common/html/_static/doctools.js +238 -238
  139. data/distro/common/html/_static/guide.css +504 -504
  140. data/distro/common/html/_static/pygments.css +61 -61
  141. data/distro/common/html/_static/searchtools.js +621 -621
  142. data/distro/common/html/_static/underscore.js +31 -31
  143. data/distro/common/html/_static/websupport.js +808 -808
  144. data/distro/common/html/ctl_chef_client.html +269 -269
  145. data/distro/common/html/ctl_chef_server.html +727 -727
  146. data/distro/common/html/ctl_chef_shell.html +162 -162
  147. data/distro/common/html/ctl_chef_solo.html +193 -193
  148. data/distro/common/html/index.html +201 -201
  149. data/distro/common/html/knife.html +169 -169
  150. data/distro/common/html/knife_bootstrap.html +284 -284
  151. data/distro/common/html/knife_client.html +284 -284
  152. data/distro/common/html/knife_common_options.html +95 -95
  153. data/distro/common/html/knife_configure.html +104 -104
  154. data/distro/common/html/knife_cookbook.html +486 -486
  155. data/distro/common/html/knife_cookbook_site.html +375 -375
  156. data/distro/common/html/knife_data_bag.html +373 -373
  157. data/distro/common/html/knife_delete.html +92 -92
  158. data/distro/common/html/knife_deps.html +142 -142
  159. data/distro/common/html/knife_diff.html +122 -122
  160. data/distro/common/html/knife_download.html +144 -144
  161. data/distro/common/html/knife_edit.html +88 -88
  162. data/distro/common/html/knife_environment.html +322 -322
  163. data/distro/common/html/knife_exec.html +219 -219
  164. data/distro/common/html/knife_index_rebuild.html +82 -82
  165. data/distro/common/html/knife_list.html +113 -113
  166. data/distro/common/html/knife_node.html +457 -457
  167. data/distro/common/html/knife_raw.html +109 -109
  168. data/distro/common/html/knife_recipe_list.html +90 -90
  169. data/distro/common/html/knife_role.html +294 -294
  170. data/distro/common/html/knife_search.html +202 -202
  171. data/distro/common/html/knife_serve.html +78 -78
  172. data/distro/common/html/knife_show.html +103 -103
  173. data/distro/common/html/knife_ssh.html +176 -176
  174. data/distro/common/html/knife_ssl_check.html +150 -150
  175. data/distro/common/html/knife_ssl_fetch.html +150 -150
  176. data/distro/common/html/knife_status.html +143 -143
  177. data/distro/common/html/knife_tag.html +137 -137
  178. data/distro/common/html/knife_upload.html +152 -152
  179. data/distro/common/html/knife_user.html +241 -241
  180. data/distro/common/html/knife_using.html +209 -209
  181. data/distro/common/html/knife_xargs.html +121 -121
  182. data/distro/common/html/search.html +81 -81
  183. data/distro/common/man/man1/README.md +58 -58
  184. data/distro/common/man/man1/chef-shell.1 +194 -194
  185. data/distro/common/man/man1/knife-bootstrap.1 +215 -215
  186. data/distro/common/man/man1/knife-client.1 +443 -443
  187. data/distro/common/man/man1/knife-configure.1 +161 -161
  188. data/distro/common/man/man1/knife-cookbook-site.1 +552 -552
  189. data/distro/common/man/man1/knife-cookbook.1 +770 -770
  190. data/distro/common/man/man1/knife-data-bag.1 +617 -617
  191. data/distro/common/man/man1/knife-delete.1 +127 -127
  192. data/distro/common/man/man1/knife-deps.1 +246 -246
  193. data/distro/common/man/man1/knife-diff.1 +226 -226
  194. data/distro/common/man/man1/knife-download.1 +258 -258
  195. data/distro/common/man/man1/knife-edit.1 +121 -121
  196. data/distro/common/man/man1/knife-environment.1 +496 -496
  197. data/distro/common/man/man1/knife-exec.1 +362 -362
  198. data/distro/common/man/man1/knife-index-rebuild.1 +63 -63
  199. data/distro/common/man/man1/knife-list.1 +174 -174
  200. data/distro/common/man/man1/knife-node.1 +716 -716
  201. data/distro/common/man/man1/knife-raw.1 +172 -172
  202. data/distro/common/man/man1/knife-recipe-list.1 +85 -85
  203. data/distro/common/man/man1/knife-role.1 +426 -426
  204. data/distro/common/man/man1/knife-search.1 +359 -359
  205. data/distro/common/man/man1/knife-serve.1 +109 -109
  206. data/distro/common/man/man1/knife-show.1 +160 -160
  207. data/distro/common/man/man1/knife-ssh.1 +284 -284
  208. data/distro/common/man/man1/knife-ssl-check.1 +207 -207
  209. data/distro/common/man/man1/knife-ssl-fetch.1 +207 -207
  210. data/distro/common/man/man1/knife-status.1 +234 -234
  211. data/distro/common/man/man1/knife-tag.1 +189 -189
  212. data/distro/common/man/man1/knife-upload.1 +280 -280
  213. data/distro/common/man/man1/knife-user.1 +356 -356
  214. data/distro/common/man/man1/knife-xargs.1 +189 -189
  215. data/distro/common/man/man1/knife.1 +332 -332
  216. data/distro/common/man/man8/chef-apply.8 +86 -86
  217. data/distro/common/man/man8/chef-client.8 +398 -398
  218. data/distro/common/man/man8/chef-solo.8 +260 -260
  219. data/distro/common/markdown/README +3 -3
  220. data/distro/common/markdown/man1/chef-shell.mkd +195 -195
  221. data/distro/common/markdown/man1/knife-bootstrap.mkd +141 -141
  222. data/distro/common/markdown/man1/knife-client.mkd +103 -103
  223. data/distro/common/markdown/man1/knife-configure.mkd +71 -71
  224. data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -123
  225. data/distro/common/markdown/man1/knife-cookbook.mkd +263 -263
  226. data/distro/common/markdown/man1/knife-data-bag.mkd +121 -121
  227. data/distro/common/markdown/man1/knife-environment.mkd +151 -151
  228. data/distro/common/markdown/man1/knife-exec.mkd +42 -42
  229. data/distro/common/markdown/man1/knife-index.mkd +30 -30
  230. data/distro/common/markdown/man1/knife-node.mkd +130 -130
  231. data/distro/common/markdown/man1/knife-role.mkd +85 -85
  232. data/distro/common/markdown/man1/knife-search.mkd +180 -180
  233. data/distro/common/markdown/man1/knife-ssh.mkd +69 -69
  234. data/distro/common/markdown/man1/knife-status.mkd +36 -36
  235. data/distro/common/markdown/man1/knife-tag.mkd +39 -39
  236. data/distro/common/markdown/man1/knife.mkd +213 -213
  237. data/distro/common/markdown/man8/chef-client.mkd +75 -75
  238. data/distro/common/markdown/man8/chef-expander.mkd +81 -81
  239. data/distro/common/markdown/man8/chef-expanderctl.mkd +57 -57
  240. data/distro/common/markdown/man8/chef-server-webui.mkd +121 -121
  241. data/distro/common/markdown/man8/chef-server.mkd +120 -120
  242. data/distro/common/markdown/man8/chef-solo.mkd +107 -107
  243. data/distro/common/markdown/man8/chef-solr.mkd +89 -89
  244. data/distro/powershell/chef/chef.psm1 +442 -442
  245. data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +5 -5
  246. data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +20 -20
  247. data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +5 -5
  248. data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +5 -5
  249. data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +20 -20
  250. data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +20 -20
  251. data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +20 -20
  252. data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +20 -20
  253. data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +20 -20
  254. data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +20 -20
  255. data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +20 -20
  256. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +5 -5
  257. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +5 -5
  258. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +6 -6
  259. data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +5 -5
  260. data/lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb +34 -34
  261. data/lib/chef.rb +35 -35
  262. data/lib/chef/api_client.rb +231 -231
  263. data/lib/chef/api_client/registration.rb +192 -192
  264. data/lib/chef/api_client_v1.rb +323 -323
  265. data/lib/chef/application.rb +378 -378
  266. data/lib/chef/application/apply.rb +219 -219
  267. data/lib/chef/application/client.rb +528 -528
  268. data/lib/chef/application/exit_code.rb +233 -233
  269. data/lib/chef/application/knife.rb +216 -216
  270. data/lib/chef/application/solo.rb +379 -379
  271. data/lib/chef/application/windows_service.rb +337 -337
  272. data/lib/chef/application/windows_service_manager.rb +204 -204
  273. data/lib/chef/applications.rb +4 -4
  274. data/lib/chef/audit/audit_event_proxy.rb +93 -93
  275. data/lib/chef/audit/audit_reporter.rb +176 -176
  276. data/lib/chef/audit/control_group_data.rb +139 -139
  277. data/lib/chef/audit/logger.rb +36 -36
  278. data/lib/chef/audit/rspec_formatter.rb +37 -37
  279. data/lib/chef/audit/runner.rb +196 -196
  280. data/lib/chef/chef_class.rb +240 -240
  281. data/lib/chef/chef_fs.rb +59 -59
  282. data/lib/chef/chef_fs/chef_fs_data_store.rb +870 -870
  283. data/lib/chef/chef_fs/command_line.rb +292 -292
  284. data/lib/chef/chef_fs/config.rb +284 -284
  285. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -26
  286. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +39 -39
  287. data/lib/chef/chef_fs/data_handler/client_key_data_handler.rb +11 -11
  288. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +35 -35
  289. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -38
  290. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +62 -62
  291. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +205 -205
  292. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -40
  293. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +55 -55
  294. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -36
  295. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +36 -36
  296. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -17
  297. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -17
  298. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +48 -48
  299. data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +33 -33
  300. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -40
  301. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +29 -29
  302. data/lib/chef/chef_fs/file_pattern.rb +301 -301
  303. data/lib/chef/chef_fs/file_system.rb +431 -431
  304. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -47
  305. data/lib/chef/chef_fs/file_system/base_fs_object.rb +187 -187
  306. data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +65 -65
  307. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +67 -67
  308. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +75 -75
  309. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +196 -196
  310. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifact_dir.rb +38 -38
  311. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +102 -102
  312. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +221 -221
  313. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +78 -78
  314. data/lib/chef/chef_fs/file_system/chef_server/cookbook_subdir.rb +61 -61
  315. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_acl_dir.rb +42 -42
  316. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +101 -101
  317. data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +76 -76
  318. data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -19
  319. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +67 -67
  320. data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +56 -56
  321. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +51 -51
  322. data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +35 -35
  323. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +65 -65
  324. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +64 -64
  325. data/lib/chef/chef_fs/file_system/chef_server/policies_acl_dir.rb +41 -41
  326. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +158 -158
  327. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +135 -135
  328. data/lib/chef/chef_fs/file_system/chef_server/policy_groups_dir.rb +43 -43
  329. data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +38 -38
  330. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +176 -176
  331. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +198 -198
  332. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +45 -45
  333. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +107 -107
  334. data/lib/chef/chef_fs/file_system/exceptions.rb +105 -105
  335. data/lib/chef/chef_fs/file_system/memory/memory_dir.rb +53 -53
  336. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +20 -20
  337. data/lib/chef/chef_fs/file_system/memory/memory_root.rb +23 -23
  338. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +62 -62
  339. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +32 -32
  340. data/lib/chef/chef_fs/file_system/repository/acl.rb +45 -45
  341. data/lib/chef/chef_fs/file_system/repository/acls_dir.rb +50 -50
  342. data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +38 -38
  343. data/lib/chef/chef_fs/file_system/repository/base_file.rb +155 -155
  344. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_artifact_dir.rb +41 -41
  345. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +144 -144
  346. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +177 -177
  347. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +231 -231
  348. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_versioned_cookbook_dir.rb +42 -42
  349. data/lib/chef/chef_fs/file_system/repository/client.rb +38 -38
  350. data/lib/chef/chef_fs/file_system/repository/client_key.rb +38 -38
  351. data/lib/chef/chef_fs/file_system/repository/client_keys_dir.rb +42 -42
  352. data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +38 -38
  353. data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +37 -37
  354. data/lib/chef/chef_fs/file_system/repository/container.rb +38 -38
  355. data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +37 -37
  356. data/lib/chef/chef_fs/file_system/repository/cookbook_artifacts_dir.rb +36 -36
  357. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +51 -51
  358. data/lib/chef/chef_fs/file_system/repository/data_bag.rb +39 -39
  359. data/lib/chef/chef_fs/file_system/repository/data_bag_item.rb +38 -38
  360. data/lib/chef/chef_fs/file_system/repository/data_bags_dir.rb +39 -39
  361. data/lib/chef/chef_fs/file_system/repository/directory.rb +167 -167
  362. data/lib/chef/chef_fs/file_system/repository/environment.rb +38 -38
  363. data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +37 -37
  364. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +151 -151
  365. data/lib/chef/chef_fs/file_system/repository/group.rb +38 -38
  366. data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +37 -37
  367. data/lib/chef/chef_fs/file_system/repository/node.rb +38 -38
  368. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +59 -59
  369. data/lib/chef/chef_fs/file_system/repository/policies_dir.rb +42 -42
  370. data/lib/chef/chef_fs/file_system/repository/policy.rb +38 -38
  371. data/lib/chef/chef_fs/file_system/repository/policy_group.rb +38 -38
  372. data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +37 -37
  373. data/lib/chef/chef_fs/file_system/repository/role.rb +38 -38
  374. data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +37 -37
  375. data/lib/chef/chef_fs/file_system/repository/user.rb +38 -38
  376. data/lib/chef/chef_fs/file_system/repository/users_dir.rb +37 -37
  377. data/lib/chef/chef_fs/file_system/repository/versioned_cookbooks_dir.rb +34 -34
  378. data/lib/chef/chef_fs/file_system_cache.rb +80 -80
  379. data/lib/chef/chef_fs/knife.rb +161 -161
  380. data/lib/chef/chef_fs/parallelizer.rb +103 -103
  381. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -35
  382. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +277 -277
  383. data/lib/chef/chef_fs/path_utils.rb +127 -127
  384. data/lib/chef/client.rb +1023 -1023
  385. data/lib/chef/config.rb +85 -85
  386. data/lib/chef/config_fetcher.rb +72 -72
  387. data/lib/chef/constants.rb +28 -28
  388. data/lib/chef/cookbook/chefignore.rb +74 -74
  389. data/lib/chef/cookbook/cookbook_collection.rb +63 -63
  390. data/lib/chef/cookbook/cookbook_version_loader.rb +351 -351
  391. data/lib/chef/cookbook/file_system_file_vendor.rb +58 -58
  392. data/lib/chef/cookbook/file_vendor.rb +71 -71
  393. data/lib/chef/cookbook/gem_installer.rb +84 -84
  394. data/lib/chef/cookbook/metadata.rb +912 -912
  395. data/lib/chef/cookbook/remote_file_vendor.rb +87 -87
  396. data/lib/chef/cookbook/synchronizer.rb +298 -298
  397. data/lib/chef/cookbook/syntax_check.rb +260 -260
  398. data/lib/chef/cookbook_loader.rb +200 -200
  399. data/lib/chef/cookbook_manifest.rb +290 -290
  400. data/lib/chef/cookbook_site_streaming_uploader.rb +243 -243
  401. data/lib/chef/cookbook_uploader.rb +157 -157
  402. data/lib/chef/cookbook_version.rb +637 -637
  403. data/lib/chef/daemon.rb +131 -131
  404. data/lib/chef/data_bag.rb +176 -176
  405. data/lib/chef/data_bag_item.rb +218 -218
  406. data/lib/chef/data_collector.rb +489 -489
  407. data/lib/chef/data_collector/messages.rb +98 -98
  408. data/lib/chef/data_collector/messages/helpers.rb +161 -161
  409. data/lib/chef/data_collector/resource_report.rb +123 -123
  410. data/lib/chef/decorator.rb +81 -81
  411. data/lib/chef/decorator/lazy.rb +60 -60
  412. data/lib/chef/decorator/lazy_array.rb +59 -59
  413. data/lib/chef/decorator/unchain.rb +59 -59
  414. data/lib/chef/delayed_evaluator.rb +21 -21
  415. data/lib/chef/deprecated.rb +250 -250
  416. data/lib/chef/deprecation/mixin/template.rb +48 -48
  417. data/lib/chef/deprecation/provider/cookbook_file.rb +54 -54
  418. data/lib/chef/deprecation/provider/file.rb +198 -198
  419. data/lib/chef/deprecation/provider/remote_directory.rb +52 -52
  420. data/lib/chef/deprecation/provider/remote_file.rb +85 -85
  421. data/lib/chef/deprecation/provider/template.rb +63 -63
  422. data/lib/chef/deprecation/warnings.rb +36 -36
  423. data/lib/chef/digester.rb +74 -74
  424. data/lib/chef/dsl.rb +6 -6
  425. data/lib/chef/dsl/audit.rb +51 -51
  426. data/lib/chef/dsl/chef_provisioning.rb +57 -57
  427. data/lib/chef/dsl/cheffish.rb +65 -65
  428. data/lib/chef/dsl/core.rb +52 -52
  429. data/lib/chef/dsl/data_query.rb +89 -89
  430. data/lib/chef/dsl/declare_resource.rb +295 -295
  431. data/lib/chef/dsl/definitions.rb +43 -43
  432. data/lib/chef/dsl/include_attribute.rb +61 -61
  433. data/lib/chef/dsl/include_recipe.rb +44 -44
  434. data/lib/chef/dsl/method_missing.rb +75 -75
  435. data/lib/chef/dsl/platform_introspection.rb +268 -268
  436. data/lib/chef/dsl/powershell.rb +29 -29
  437. data/lib/chef/dsl/reboot_pending.rb +64 -64
  438. data/lib/chef/dsl/recipe.rb +95 -95
  439. data/lib/chef/dsl/registry_helper.rb +63 -63
  440. data/lib/chef/dsl/resources.rb +56 -56
  441. data/lib/chef/dsl/universal.rb +50 -50
  442. data/lib/chef/encrypted_data_bag_item.rb +155 -155
  443. data/lib/chef/encrypted_data_bag_item/assertions.rb +54 -54
  444. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -56
  445. data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +22 -22
  446. data/lib/chef/encrypted_data_bag_item/decryptor.rb +227 -227
  447. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -37
  448. data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -22
  449. data/lib/chef/encrypted_data_bag_item/encryptor.rb +225 -225
  450. data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +22 -22
  451. data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +22 -22
  452. data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +22 -22
  453. data/lib/chef/environment.rb +324 -324
  454. data/lib/chef/event_dispatch/base.rb +429 -429
  455. data/lib/chef/event_dispatch/dispatcher.rb +62 -62
  456. data/lib/chef/event_dispatch/dsl.rb +65 -65
  457. data/lib/chef/event_dispatch/events_output_stream.rb +37 -37
  458. data/lib/chef/event_loggers/base.rb +62 -62
  459. data/lib/chef/event_loggers/windows_eventlog.rb +101 -101
  460. data/lib/chef/exceptions.rb +532 -532
  461. data/lib/chef/file_access_control.rb +75 -75
  462. data/lib/chef/file_access_control/unix.rb +290 -290
  463. data/lib/chef/file_access_control/windows.rb +335 -335
  464. data/lib/chef/file_cache.rb +221 -221
  465. data/lib/chef/file_content_management/content_base.rb +56 -56
  466. data/lib/chef/file_content_management/deploy.rb +37 -37
  467. data/lib/chef/file_content_management/deploy/cp.rb +48 -48
  468. data/lib/chef/file_content_management/deploy/mv_unix.rb +76 -76
  469. data/lib/chef/file_content_management/deploy/mv_windows.rb +103 -103
  470. data/lib/chef/file_content_management/tempfile.rb +107 -107
  471. data/lib/chef/formatters/base.rb +247 -247
  472. data/lib/chef/formatters/doc.rb +447 -447
  473. data/lib/chef/formatters/error_description.rb +86 -86
  474. data/lib/chef/formatters/error_inspectors.rb +19 -19
  475. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +183 -183
  476. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +154 -154
  477. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +168 -168
  478. data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +82 -82
  479. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +128 -128
  480. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +147 -147
  481. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +124 -124
  482. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +121 -121
  483. data/lib/chef/formatters/error_mapper.rb +85 -85
  484. data/lib/chef/formatters/indentable_output_stream.rb +170 -170
  485. data/lib/chef/formatters/minimal.rb +233 -233
  486. data/lib/chef/guard_interpreter.rb +32 -32
  487. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +43 -43
  488. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +138 -138
  489. data/lib/chef/handler.rb +268 -268
  490. data/lib/chef/handler/error_report.rb +33 -33
  491. data/lib/chef/handler/json_file.rb +63 -63
  492. data/lib/chef/http.rb +489 -489
  493. data/lib/chef/http/api_versions.rb +50 -50
  494. data/lib/chef/http/auth_credentials.rb +57 -57
  495. data/lib/chef/http/authenticator.rb +106 -106
  496. data/lib/chef/http/basic_client.rb +158 -158
  497. data/lib/chef/http/cookie_jar.rb +31 -31
  498. data/lib/chef/http/cookie_manager.rb +59 -59
  499. data/lib/chef/http/decompressor.rb +142 -142
  500. data/lib/chef/http/http_request.rb +186 -186
  501. data/lib/chef/http/json_input.rb +73 -73
  502. data/lib/chef/http/json_output.rb +78 -78
  503. data/lib/chef/http/json_to_model_output.rb +34 -34
  504. data/lib/chef/http/remote_request_id.rb +46 -46
  505. data/lib/chef/http/simple.rb +40 -40
  506. data/lib/chef/http/simple_json.rb +43 -43
  507. data/lib/chef/http/socketless_chef_zero_client.rb +208 -208
  508. data/lib/chef/http/ssl_policies.rb +130 -130
  509. data/lib/chef/http/validate_content_length.rb +114 -114
  510. data/lib/chef/json_compat.rb +160 -160
  511. data/lib/chef/key.rb +272 -272
  512. data/lib/chef/knife.rb +613 -613
  513. data/lib/chef/knife/bootstrap.rb +489 -489
  514. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +159 -159
  515. data/lib/chef/knife/bootstrap/client_builder.rb +208 -208
  516. data/lib/chef/knife/bootstrap/templates/README.md +11 -11
  517. data/lib/chef/knife/bootstrap/templates/chef-full.erb +236 -236
  518. data/lib/chef/knife/client_bulk_delete.rb +104 -104
  519. data/lib/chef/knife/client_create.rb +111 -111
  520. data/lib/chef/knife/client_delete.rb +63 -63
  521. data/lib/chef/knife/client_edit.rb +53 -53
  522. data/lib/chef/knife/client_key_create.rb +67 -67
  523. data/lib/chef/knife/client_key_delete.rb +76 -76
  524. data/lib/chef/knife/client_key_edit.rb +79 -79
  525. data/lib/chef/knife/client_key_list.rb +69 -69
  526. data/lib/chef/knife/client_key_show.rb +76 -76
  527. data/lib/chef/knife/client_list.rb +42 -42
  528. data/lib/chef/knife/client_reregister.rb +59 -59
  529. data/lib/chef/knife/client_show.rb +49 -49
  530. data/lib/chef/knife/configure.rb +171 -171
  531. data/lib/chef/knife/configure_client.rb +50 -50
  532. data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
  533. data/lib/chef/knife/cookbook_create.rb +462 -462
  534. data/lib/chef/knife/cookbook_delete.rb +151 -151
  535. data/lib/chef/knife/cookbook_download.rb +143 -143
  536. data/lib/chef/knife/cookbook_list.rb +47 -47
  537. data/lib/chef/knife/cookbook_metadata.rb +107 -107
  538. data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -44
  539. data/lib/chef/knife/cookbook_show.rb +94 -94
  540. data/lib/chef/knife/cookbook_site_download.rb +116 -116
  541. data/lib/chef/knife/cookbook_site_install.rb +196 -196
  542. data/lib/chef/knife/cookbook_site_list.rb +65 -65
  543. data/lib/chef/knife/cookbook_site_search.rb +53 -53
  544. data/lib/chef/knife/cookbook_site_share.rb +170 -170
  545. data/lib/chef/knife/cookbook_site_show.rb +66 -66
  546. data/lib/chef/knife/cookbook_site_unshare.rb +63 -63
  547. data/lib/chef/knife/cookbook_site_vendor.rb +46 -46
  548. data/lib/chef/knife/cookbook_test.rb +95 -95
  549. data/lib/chef/knife/cookbook_upload.rb +308 -308
  550. data/lib/chef/knife/core/bootstrap_context.rb +267 -267
  551. data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
  552. data/lib/chef/knife/core/custom_manifest_loader.rb +69 -69
  553. data/lib/chef/knife/core/gem_glob_loader.rb +138 -138
  554. data/lib/chef/knife/core/generic_presenter.rb +232 -232
  555. data/lib/chef/knife/core/hashed_command_loader.rb +99 -99
  556. data/lib/chef/knife/core/node_editor.rb +130 -130
  557. data/lib/chef/knife/core/node_presenter.rb +159 -159
  558. data/lib/chef/knife/core/object_loader.rb +115 -115
  559. data/lib/chef/knife/core/status_presenter.rb +157 -157
  560. data/lib/chef/knife/core/subcommand_loader.rb +212 -212
  561. data/lib/chef/knife/core/text_formatter.rb +85 -85
  562. data/lib/chef/knife/core/ui.rb +278 -278
  563. data/lib/chef/knife/data_bag_create.rb +80 -80
  564. data/lib/chef/knife/data_bag_delete.rb +49 -49
  565. data/lib/chef/knife/data_bag_edit.rb +74 -74
  566. data/lib/chef/knife/data_bag_from_file.rb +114 -114
  567. data/lib/chef/knife/data_bag_list.rb +42 -42
  568. data/lib/chef/knife/data_bag_secret_options.rb +142 -142
  569. data/lib/chef/knife/data_bag_show.rb +69 -69
  570. data/lib/chef/knife/delete.rb +107 -107
  571. data/lib/chef/knife/deps.rb +138 -138
  572. data/lib/chef/knife/diff.rb +68 -68
  573. data/lib/chef/knife/download.rb +68 -68
  574. data/lib/chef/knife/edit.rb +72 -72
  575. data/lib/chef/knife/environment_compare.rb +127 -127
  576. data/lib/chef/knife/environment_create.rb +53 -53
  577. data/lib/chef/knife/environment_delete.rb +45 -45
  578. data/lib/chef/knife/environment_edit.rb +45 -45
  579. data/lib/chef/knife/environment_from_file.rb +82 -82
  580. data/lib/chef/knife/environment_list.rb +42 -42
  581. data/lib/chef/knife/environment_show.rb +48 -48
  582. data/lib/chef/knife/exec.rb +87 -87
  583. data/lib/chef/knife/help.rb +101 -101
  584. data/lib/chef/knife/help_topics.rb +4 -4
  585. data/lib/chef/knife/index_rebuild.rb +133 -133
  586. data/lib/chef/knife/key_create.rb +112 -112
  587. data/lib/chef/knife/key_create_base.rb +50 -50
  588. data/lib/chef/knife/key_delete.rb +55 -55
  589. data/lib/chef/knife/key_edit.rb +118 -118
  590. data/lib/chef/knife/key_edit_base.rb +55 -55
  591. data/lib/chef/knife/key_list.rb +88 -88
  592. data/lib/chef/knife/key_list_base.rb +45 -45
  593. data/lib/chef/knife/key_show.rb +53 -53
  594. data/lib/chef/knife/list.rb +156 -156
  595. data/lib/chef/knife/node_bulk_delete.rb +74 -74
  596. data/lib/chef/knife/node_create.rb +47 -47
  597. data/lib/chef/knife/node_delete.rb +46 -46
  598. data/lib/chef/knife/node_edit.rb +70 -70
  599. data/lib/chef/knife/node_environment_set.rb +54 -54
  600. data/lib/chef/knife/node_from_file.rb +51 -51
  601. data/lib/chef/knife/node_list.rb +44 -44
  602. data/lib/chef/knife/node_run_list_add.rb +104 -104
  603. data/lib/chef/knife/node_run_list_remove.rb +67 -67
  604. data/lib/chef/knife/node_run_list_set.rb +66 -66
  605. data/lib/chef/knife/node_show.rb +61 -61
  606. data/lib/chef/knife/null.rb +10 -10
  607. data/lib/chef/knife/osc_user_create.rb +97 -97
  608. data/lib/chef/knife/osc_user_delete.rb +51 -51
  609. data/lib/chef/knife/osc_user_edit.rb +58 -58
  610. data/lib/chef/knife/osc_user_list.rb +47 -47
  611. data/lib/chef/knife/osc_user_reregister.rb +64 -64
  612. data/lib/chef/knife/osc_user_show.rb +53 -53
  613. data/lib/chef/knife/raw.rb +103 -103
  614. data/lib/chef/knife/recipe_list.rb +32 -32
  615. data/lib/chef/knife/rehash.rb +65 -65
  616. data/lib/chef/knife/role_bulk_delete.rb +65 -65
  617. data/lib/chef/knife/role_create.rb +53 -53
  618. data/lib/chef/knife/role_delete.rb +46 -46
  619. data/lib/chef/knife/role_edit.rb +45 -45
  620. data/lib/chef/knife/role_env_run_list_add.rb +86 -86
  621. data/lib/chef/knife/role_env_run_list_clear.rb +55 -55
  622. data/lib/chef/knife/role_env_run_list_remove.rb +57 -57
  623. data/lib/chef/knife/role_env_run_list_replace.rb +59 -59
  624. data/lib/chef/knife/role_env_run_list_set.rb +70 -70
  625. data/lib/chef/knife/role_from_file.rb +51 -51
  626. data/lib/chef/knife/role_list.rb +42 -42
  627. data/lib/chef/knife/role_run_list_add.rb +86 -86
  628. data/lib/chef/knife/role_run_list_clear.rb +55 -55
  629. data/lib/chef/knife/role_run_list_remove.rb +57 -57
  630. data/lib/chef/knife/role_run_list_replace.rb +59 -59
  631. data/lib/chef/knife/role_run_list_set.rb +70 -70
  632. data/lib/chef/knife/role_show.rb +49 -49
  633. data/lib/chef/knife/search.rb +201 -201
  634. data/lib/chef/knife/serve.rb +48 -48
  635. data/lib/chef/knife/show.rb +56 -56
  636. data/lib/chef/knife/ssh.rb +591 -591
  637. data/lib/chef/knife/ssl_check.rb +283 -283
  638. data/lib/chef/knife/ssl_fetch.rb +161 -161
  639. data/lib/chef/knife/status.rb +110 -110
  640. data/lib/chef/knife/supermarket_download.rb +33 -33
  641. data/lib/chef/knife/supermarket_install.rb +33 -33
  642. data/lib/chef/knife/supermarket_list.rb +33 -33
  643. data/lib/chef/knife/supermarket_search.rb +33 -33
  644. data/lib/chef/knife/supermarket_share.rb +33 -33
  645. data/lib/chef/knife/supermarket_show.rb +33 -33
  646. data/lib/chef/knife/supermarket_unshare.rb +33 -33
  647. data/lib/chef/knife/tag_create.rb +52 -52
  648. data/lib/chef/knife/tag_delete.rb +60 -60
  649. data/lib/chef/knife/tag_list.rb +47 -47
  650. data/lib/chef/knife/upload.rb +70 -70
  651. data/lib/chef/knife/user_create.rb +150 -150
  652. data/lib/chef/knife/user_delete.rb +95 -95
  653. data/lib/chef/knife/user_edit.rb +81 -81
  654. data/lib/chef/knife/user_key_create.rb +69 -69
  655. data/lib/chef/knife/user_key_delete.rb +76 -76
  656. data/lib/chef/knife/user_key_edit.rb +79 -79
  657. data/lib/chef/knife/user_key_list.rb +69 -69
  658. data/lib/chef/knife/user_key_show.rb +76 -76
  659. data/lib/chef/knife/user_list.rb +45 -45
  660. data/lib/chef/knife/user_reregister.rb +89 -89
  661. data/lib/chef/knife/user_show.rb +78 -78
  662. data/lib/chef/knife/xargs.rb +266 -266
  663. data/lib/chef/local_mode.rb +128 -128
  664. data/lib/chef/log.rb +68 -68
  665. data/lib/chef/log/syslog.rb +45 -45
  666. data/lib/chef/log/winevt.rb +99 -99
  667. data/lib/chef/mash.rb +232 -232
  668. data/lib/chef/mixin/api_version_request_handling.rb +66 -66
  669. data/lib/chef/mixin/checksum.rb +37 -37
  670. data/lib/chef/mixin/command.rb +194 -194
  671. data/lib/chef/mixin/command/unix.rb +220 -220
  672. data/lib/chef/mixin/command/windows.rb +71 -71
  673. data/lib/chef/mixin/convert_to_class_name.rb +126 -126
  674. data/lib/chef/mixin/create_path.rb +71 -71
  675. data/lib/chef/mixin/deep_merge.rb +140 -140
  676. data/lib/chef/mixin/deprecation.rb +117 -117
  677. data/lib/chef/mixin/descendants_tracker.rb +81 -81
  678. data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -39
  679. data/lib/chef/mixin/file_class.rb +35 -35
  680. data/lib/chef/mixin/from_file.rb +50 -50
  681. data/lib/chef/mixin/get_source_from_package.rb +47 -47
  682. data/lib/chef/mixin/homebrew_user.rb +68 -68
  683. data/lib/chef/mixin/language.rb +48 -48
  684. data/lib/chef/mixin/language_include_attribute.rb +34 -34
  685. data/lib/chef/mixin/language_include_recipe.rb +31 -31
  686. data/lib/chef/mixin/lazy_module_include.rb +77 -77
  687. data/lib/chef/mixin/notifying_block.rb +51 -51
  688. data/lib/chef/mixin/params_validate.rb +489 -489
  689. data/lib/chef/mixin/path_sanity.rb +68 -68
  690. data/lib/chef/mixin/powershell_out.rb +98 -98
  691. data/lib/chef/mixin/powershell_type_coercions.rb +84 -84
  692. data/lib/chef/mixin/properties.rb +306 -306
  693. data/lib/chef/mixin/provides.rb +28 -28
  694. data/lib/chef/mixin/proxified_socket.rb +42 -42
  695. data/lib/chef/mixin/recipe_definition_dsl_core.rb +35 -35
  696. data/lib/chef/mixin/securable.rb +196 -196
  697. data/lib/chef/mixin/shell_out.rb +211 -211
  698. data/lib/chef/mixin/subclass_directive.rb +37 -37
  699. data/lib/chef/mixin/template.rb +262 -262
  700. data/lib/chef/mixin/unformatter.rb +32 -32
  701. data/lib/chef/mixin/uris.rb +42 -42
  702. data/lib/chef/mixin/versioned_api.rb +69 -69
  703. data/lib/chef/mixin/which.rb +50 -50
  704. data/lib/chef/mixin/why_run.rb +331 -331
  705. data/lib/chef/mixin/wide_string.rb +72 -72
  706. data/lib/chef/mixin/windows_architecture_helper.rb +113 -113
  707. data/lib/chef/mixin/windows_env_helper.rb +67 -67
  708. data/lib/chef/mixin/xml_escape.rb +138 -138
  709. data/lib/chef/mixins.rb +13 -13
  710. data/lib/chef/monkey_patches/net_http.rb +60 -60
  711. data/lib/chef/monkey_patches/webrick-utils.rb +51 -51
  712. data/lib/chef/monkey_patches/win32/registry.rb +86 -86
  713. data/lib/chef/monologger.rb +88 -88
  714. data/lib/chef/nil_argument.rb +3 -3
  715. data/lib/chef/node.rb +677 -677
  716. data/lib/chef/node/attribute.rb +673 -673
  717. data/lib/chef/node/attribute_collections.rb +231 -231
  718. data/lib/chef/node/common_api.rb +121 -121
  719. data/lib/chef/node/immutable_collections.rb +180 -180
  720. data/lib/chef/node/mixin/deep_merge_cache.rb +61 -61
  721. data/lib/chef/node/mixin/immutablize_array.rb +67 -67
  722. data/lib/chef/node/mixin/immutablize_hash.rb +54 -54
  723. data/lib/chef/node/mixin/state_tracking.rb +96 -96
  724. data/lib/chef/node_map.rb +238 -238
  725. data/lib/chef/null_logger.rb +72 -72
  726. data/lib/chef/org.rb +147 -147
  727. data/lib/chef/platform.rb +30 -30
  728. data/lib/chef/platform/priority_map.rb +41 -41
  729. data/lib/chef/platform/provider_handler_map.rb +29 -29
  730. data/lib/chef/platform/provider_mapping.rb +222 -222
  731. data/lib/chef/platform/provider_priority_map.rb +11 -11
  732. data/lib/chef/platform/query_helpers.rb +112 -112
  733. data/lib/chef/platform/rebooter.rb +67 -67
  734. data/lib/chef/platform/resource_handler_map.rb +29 -29
  735. data/lib/chef/platform/resource_priority_map.rb +11 -11
  736. data/lib/chef/platform/service_helpers.rb +122 -122
  737. data/lib/chef/policy_builder.rb +42 -42
  738. data/lib/chef/policy_builder/dynamic.rb +185 -185
  739. data/lib/chef/policy_builder/expand_node_object.rb +278 -278
  740. data/lib/chef/policy_builder/policyfile.rb +550 -550
  741. data/lib/chef/property.rb +731 -731
  742. data/lib/chef/provider.rb +458 -458
  743. data/lib/chef/provider/apt_repository.rb +258 -258
  744. data/lib/chef/provider/apt_update.rb +87 -87
  745. data/lib/chef/provider/batch.rb +45 -45
  746. data/lib/chef/provider/breakpoint.rb +38 -38
  747. data/lib/chef/provider/cookbook_file.rb +53 -53
  748. data/lib/chef/provider/cookbook_file/content.rb +49 -49
  749. data/lib/chef/provider/cron.rb +262 -262
  750. data/lib/chef/provider/cron/aix.rb +50 -50
  751. data/lib/chef/provider/cron/solaris.rb +22 -22
  752. data/lib/chef/provider/cron/unix.rb +83 -83
  753. data/lib/chef/provider/deploy.rb +476 -476
  754. data/lib/chef/provider/deploy/revision.rb +107 -107
  755. data/lib/chef/provider/deploy/timestamped.rb +34 -34
  756. data/lib/chef/provider/directory.rb +168 -168
  757. data/lib/chef/provider/dsc_resource.rb +213 -213
  758. data/lib/chef/provider/dsc_script.rb +189 -189
  759. data/lib/chef/provider/env.rb +169 -169
  760. data/lib/chef/provider/env/windows.rb +72 -72
  761. data/lib/chef/provider/erl_call.rb +108 -108
  762. data/lib/chef/provider/execute.rb +128 -128
  763. data/lib/chef/provider/file.rb +488 -488
  764. data/lib/chef/provider/file/content.rb +39 -39
  765. data/lib/chef/provider/git.rb +334 -334
  766. data/lib/chef/provider/group.rb +185 -185
  767. data/lib/chef/provider/group/aix.rb +79 -79
  768. data/lib/chef/provider/group/dscl.rb +173 -173
  769. data/lib/chef/provider/group/gpasswd.rb +58 -58
  770. data/lib/chef/provider/group/groupadd.rb +133 -133
  771. data/lib/chef/provider/group/groupmod.rb +123 -123
  772. data/lib/chef/provider/group/pw.rb +137 -137
  773. data/lib/chef/provider/group/suse.rb +83 -83
  774. data/lib/chef/provider/group/usermod.rb +90 -90
  775. data/lib/chef/provider/group/windows.rb +109 -109
  776. data/lib/chef/provider/http_request.rb +122 -122
  777. data/lib/chef/provider/ifconfig.rb +283 -283
  778. data/lib/chef/provider/ifconfig/aix.rb +94 -94
  779. data/lib/chef/provider/ifconfig/debian.rb +85 -85
  780. data/lib/chef/provider/ifconfig/redhat.rb +48 -48
  781. data/lib/chef/provider/launchd.rb +208 -208
  782. data/lib/chef/provider/link.rb +172 -172
  783. data/lib/chef/provider/log.rb +57 -57
  784. data/lib/chef/provider/lwrp_base.rb +98 -98
  785. data/lib/chef/provider/mdadm.rb +93 -93
  786. data/lib/chef/provider/mount.rb +171 -171
  787. data/lib/chef/provider/mount/aix.rb +180 -180
  788. data/lib/chef/provider/mount/mount.rb +270 -270
  789. data/lib/chef/provider/mount/solaris.rb +271 -271
  790. data/lib/chef/provider/mount/windows.rb +92 -92
  791. data/lib/chef/provider/noop.rb +37 -37
  792. data/lib/chef/provider/ohai.rb +51 -51
  793. data/lib/chef/provider/osx_profile.rb +257 -257
  794. data/lib/chef/provider/package.rb +656 -656
  795. data/lib/chef/provider/package/aix.rb +143 -143
  796. data/lib/chef/provider/package/apt.rb +201 -201
  797. data/lib/chef/provider/package/cab.rb +179 -179
  798. data/lib/chef/provider/package/chocolatey.rb +275 -275
  799. data/lib/chef/provider/package/dnf.rb +192 -192
  800. data/lib/chef/provider/package/dnf/dnf_helper.py +91 -91
  801. data/lib/chef/provider/package/dnf/python_helper.rb +157 -157
  802. data/lib/chef/provider/package/dnf/version.rb +56 -56
  803. data/lib/chef/provider/package/dpkg.rb +225 -225
  804. data/lib/chef/provider/package/easy_install.rb +135 -135
  805. data/lib/chef/provider/package/freebsd/base.rb +89 -89
  806. data/lib/chef/provider/package/freebsd/pkg.rb +114 -114
  807. data/lib/chef/provider/package/freebsd/pkgng.rb +76 -76
  808. data/lib/chef/provider/package/freebsd/port.rb +60 -60
  809. data/lib/chef/provider/package/homebrew.rb +138 -138
  810. data/lib/chef/provider/package/ips.rb +86 -86
  811. data/lib/chef/provider/package/macports.rb +101 -101
  812. data/lib/chef/provider/package/msu.rb +162 -162
  813. data/lib/chef/provider/package/openbsd.rb +139 -139
  814. data/lib/chef/provider/package/pacman.rb +104 -104
  815. data/lib/chef/provider/package/paludis.rb +85 -85
  816. data/lib/chef/provider/package/portage.rb +140 -140
  817. data/lib/chef/provider/package/powershell.rb +114 -114
  818. data/lib/chef/provider/package/rpm.rb +123 -123
  819. data/lib/chef/provider/package/rubygems.rb +591 -591
  820. data/lib/chef/provider/package/smartos.rb +92 -92
  821. data/lib/chef/provider/package/solaris.rb +138 -138
  822. data/lib/chef/provider/package/windows.rb +271 -271
  823. data/lib/chef/provider/package/windows/exe.rb +115 -115
  824. data/lib/chef/provider/package/windows/msi.rb +94 -94
  825. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +87 -87
  826. data/lib/chef/provider/package/yum.rb +536 -536
  827. data/lib/chef/provider/package/yum/rpm_utils.rb +642 -642
  828. data/lib/chef/provider/package/yum/yum-dump.py +307 -307
  829. data/lib/chef/provider/package/yum/yum_cache.rb +376 -376
  830. data/lib/chef/provider/package/zypper.rb +163 -163
  831. data/lib/chef/provider/powershell_script.rb +223 -223
  832. data/lib/chef/provider/reboot.rb +70 -70
  833. data/lib/chef/provider/registry_key.rb +182 -182
  834. data/lib/chef/provider/remote_directory.rb +283 -283
  835. data/lib/chef/provider/remote_file.rb +53 -53
  836. data/lib/chef/provider/remote_file/cache_control_data.rb +195 -195
  837. data/lib/chef/provider/remote_file/content.rb +81 -81
  838. data/lib/chef/provider/remote_file/fetcher.rb +57 -57
  839. data/lib/chef/provider/remote_file/ftp.rb +172 -172
  840. data/lib/chef/provider/remote_file/http.rb +135 -135
  841. data/lib/chef/provider/remote_file/local_file.rb +60 -60
  842. data/lib/chef/provider/remote_file/network_file.rb +48 -48
  843. data/lib/chef/provider/remote_file/sftp.rb +105 -105
  844. data/lib/chef/provider/resource_update.rb +52 -52
  845. data/lib/chef/provider/route.rb +231 -231
  846. data/lib/chef/provider/ruby_block.rb +44 -44
  847. data/lib/chef/provider/script.rb +121 -121
  848. data/lib/chef/provider/service.rb +259 -259
  849. data/lib/chef/provider/service/aix.rb +129 -129
  850. data/lib/chef/provider/service/aixinit.rb +117 -117
  851. data/lib/chef/provider/service/arch.rb +118 -118
  852. data/lib/chef/provider/service/debian.rb +182 -182
  853. data/lib/chef/provider/service/freebsd.rb +195 -195
  854. data/lib/chef/provider/service/gentoo.rb +71 -71
  855. data/lib/chef/provider/service/init.rb +94 -94
  856. data/lib/chef/provider/service/insserv.rb +59 -59
  857. data/lib/chef/provider/service/invokercd.rb +41 -41
  858. data/lib/chef/provider/service/macosx.rb +250 -250
  859. data/lib/chef/provider/service/openbsd.rb +217 -217
  860. data/lib/chef/provider/service/redhat.rb +126 -126
  861. data/lib/chef/provider/service/simple.rb +176 -176
  862. data/lib/chef/provider/service/solaris.rb +122 -122
  863. data/lib/chef/provider/service/systemd.rb +188 -188
  864. data/lib/chef/provider/service/upstart.rb +261 -261
  865. data/lib/chef/provider/service/windows.rb +313 -313
  866. data/lib/chef/provider/subversion.rb +233 -233
  867. data/lib/chef/provider/support/yum_repo.erb +132 -132
  868. data/lib/chef/provider/systemd_unit.rb +240 -240
  869. data/lib/chef/provider/template.rb +65 -65
  870. data/lib/chef/provider/template/content.rb +70 -70
  871. data/lib/chef/provider/template_finder.rb +62 -62
  872. data/lib/chef/provider/user.rb +220 -220
  873. data/lib/chef/provider/user/aix.rb +99 -99
  874. data/lib/chef/provider/user/dscl.rb +719 -719
  875. data/lib/chef/provider/user/linux.rb +125 -125
  876. data/lib/chef/provider/user/pw.rb +111 -111
  877. data/lib/chef/provider/user/solaris.rb +129 -129
  878. data/lib/chef/provider/user/useradd.rb +158 -158
  879. data/lib/chef/provider/user/windows.rb +125 -125
  880. data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -32
  881. data/lib/chef/provider/windows_script.rb +75 -75
  882. data/lib/chef/provider/yum_repository.rb +120 -120
  883. data/lib/chef/provider_resolver.rb +172 -172
  884. data/lib/chef/providers.rb +152 -152
  885. data/lib/chef/recipe.rb +108 -108
  886. data/lib/chef/request_id.rb +37 -37
  887. data/lib/chef/reserved_names.rb +9 -9
  888. data/lib/chef/resource.rb +1626 -1626
  889. data/lib/chef/resource/action_class.rb +94 -94
  890. data/lib/chef/resource/apt_package.rb +32 -32
  891. data/lib/chef/resource/apt_repository.rb +46 -46
  892. data/lib/chef/resource/apt_update.rb +33 -33
  893. data/lib/chef/resource/bash.rb +33 -33
  894. data/lib/chef/resource/batch.rb +33 -33
  895. data/lib/chef/resource/bff_package.rb +27 -27
  896. data/lib/chef/resource/breakpoint.rb +32 -32
  897. data/lib/chef/resource/cab_package.rb +44 -44
  898. data/lib/chef/resource/chef_gem.rb +50 -50
  899. data/lib/chef/resource/chocolatey_package.rb +40 -40
  900. data/lib/chef/resource/conditional.rb +135 -135
  901. data/lib/chef/resource/conditional_action_not_nothing.rb +48 -48
  902. data/lib/chef/resource/cookbook_file.rb +49 -49
  903. data/lib/chef/resource/cron.rb +216 -216
  904. data/lib/chef/resource/csh.rb +33 -33
  905. data/lib/chef/resource/deploy.rb +443 -443
  906. data/lib/chef/resource/deploy_revision.rb +31 -31
  907. data/lib/chef/resource/directory.rb +62 -62
  908. data/lib/chef/resource/dnf_package.rb +74 -74
  909. data/lib/chef/resource/dpkg_package.rb +30 -30
  910. data/lib/chef/resource/dsc_resource.rb +129 -129
  911. data/lib/chef/resource/dsc_script.rb +140 -140
  912. data/lib/chef/resource/easy_install_package.rb +32 -32
  913. data/lib/chef/resource/env.rb +65 -65
  914. data/lib/chef/resource/erl_call.rb +85 -85
  915. data/lib/chef/resource/execute.rb +236 -236
  916. data/lib/chef/resource/file.rb +88 -88
  917. data/lib/chef/resource/file/verification.rb +130 -130
  918. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -67
  919. data/lib/chef/resource/freebsd_package.rb +62 -62
  920. data/lib/chef/resource/gem_package.rb +41 -41
  921. data/lib/chef/resource/git.rb +44 -44
  922. data/lib/chef/resource/group.rb +102 -102
  923. data/lib/chef/resource/homebrew_package.rb +34 -34
  924. data/lib/chef/resource/http_request.rb +66 -66
  925. data/lib/chef/resource/ifconfig.rb +147 -147
  926. data/lib/chef/resource/ips_package.rb +34 -34
  927. data/lib/chef/resource/ksh.rb +32 -32
  928. data/lib/chef/resource/launchd.rb +156 -156
  929. data/lib/chef/resource/link.rb +107 -107
  930. data/lib/chef/resource/log.rb +76 -76
  931. data/lib/chef/resource/lwrp_base.rb +124 -124
  932. data/lib/chef/resource/macosx_service.rb +58 -58
  933. data/lib/chef/resource/macports_package.rb +27 -27
  934. data/lib/chef/resource/mdadm.rb +112 -112
  935. data/lib/chef/resource/mount.rb +187 -187
  936. data/lib/chef/resource/msu_package.rb +47 -47
  937. data/lib/chef/resource/ohai.rb +33 -33
  938. data/lib/chef/resource/openbsd_package.rb +35 -35
  939. data/lib/chef/resource/osx_profile.rb +74 -74
  940. data/lib/chef/resource/package.rb +47 -47
  941. data/lib/chef/resource/pacman_package.rb +28 -28
  942. data/lib/chef/resource/paludis_package.rb +33 -33
  943. data/lib/chef/resource/perl.rb +32 -32
  944. data/lib/chef/resource/portage_package.rb +32 -32
  945. data/lib/chef/resource/powershell_package.rb +41 -41
  946. data/lib/chef/resource/powershell_script.rb +50 -50
  947. data/lib/chef/resource/python.rb +31 -31
  948. data/lib/chef/resource/reboot.rb +48 -48
  949. data/lib/chef/resource/registry_key.rb +144 -144
  950. data/lib/chef/resource/remote_directory.rb +122 -122
  951. data/lib/chef/resource/remote_file.rb +158 -158
  952. data/lib/chef/resource/resource_notification.rb +122 -122
  953. data/lib/chef/resource/route.rb +137 -137
  954. data/lib/chef/resource/rpm_package.rb +32 -32
  955. data/lib/chef/resource/ruby.rb +31 -31
  956. data/lib/chef/resource/ruby_block.rb +53 -53
  957. data/lib/chef/resource/scm.rb +179 -179
  958. data/lib/chef/resource/script.rb +74 -74
  959. data/lib/chef/resource/service.rb +217 -217
  960. data/lib/chef/resource/smartos_package.rb +29 -29
  961. data/lib/chef/resource/solaris_package.rb +31 -31
  962. data/lib/chef/resource/subversion.rb +44 -44
  963. data/lib/chef/resource/systemd_unit.rb +63 -63
  964. data/lib/chef/resource/template.rb +215 -215
  965. data/lib/chef/resource/timestamped_deploy.rb +26 -26
  966. data/lib/chef/resource/user.rb +174 -174
  967. data/lib/chef/resource/user/aix_user.rb +31 -31
  968. data/lib/chef/resource/user/dscl_user.rb +31 -31
  969. data/lib/chef/resource/user/linux_user.rb +41 -41
  970. data/lib/chef/resource/user/pw_user.rb +31 -31
  971. data/lib/chef/resource/user/solaris_user.rb +31 -31
  972. data/lib/chef/resource/user/windows_user.rb +31 -31
  973. data/lib/chef/resource/whyrun_safe_ruby_block.rb +24 -24
  974. data/lib/chef/resource/windows_package.rb +55 -55
  975. data/lib/chef/resource/windows_script.rb +65 -65
  976. data/lib/chef/resource/windows_service.rb +71 -71
  977. data/lib/chef/resource/yum_package.rb +61 -61
  978. data/lib/chef/resource/yum_repository.rb +78 -78
  979. data/lib/chef/resource/zypper_package.rb +28 -28
  980. data/lib/chef/resource_builder.rb +156 -156
  981. data/lib/chef/resource_collection.rb +136 -136
  982. data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -59
  983. data/lib/chef/resource_collection/resource_list.rb +100 -100
  984. data/lib/chef/resource_collection/resource_set.rb +173 -173
  985. data/lib/chef/resource_collection/stepable_iterator.rb +122 -122
  986. data/lib/chef/resource_definition.rb +68 -68
  987. data/lib/chef/resource_definition_list.rb +38 -38
  988. data/lib/chef/resource_reporter.rb +338 -338
  989. data/lib/chef/resource_resolver.rb +184 -184
  990. data/lib/chef/resources.rb +101 -101
  991. data/lib/chef/rest.rb +210 -210
  992. data/lib/chef/role.rb +280 -280
  993. data/lib/chef/run_context.rb +681 -681
  994. data/lib/chef/run_context/cookbook_compiler.rb +291 -291
  995. data/lib/chef/run_list.rb +168 -168
  996. data/lib/chef/run_list/run_list_expansion.rb +234 -234
  997. data/lib/chef/run_list/run_list_item.rb +98 -98
  998. data/lib/chef/run_list/versioned_recipe_list.rb +102 -102
  999. data/lib/chef/run_lock.rb +197 -197
  1000. data/lib/chef/run_status.rb +125 -125
  1001. data/lib/chef/runner.rb +143 -143
  1002. data/lib/chef/sandbox.rb +20 -20
  1003. data/lib/chef/scan_access_control.rb +138 -138
  1004. data/lib/chef/search/query.rb +183 -183
  1005. data/lib/chef/server_api.rb +80 -80
  1006. data/lib/chef/server_api_versions.rb +40 -40
  1007. data/lib/chef/shell.rb +327 -327
  1008. data/lib/chef/shell/ext.rb +593 -593
  1009. data/lib/chef/shell/model_wrapper.rb +120 -120
  1010. data/lib/chef/shell/shell_session.rb +299 -299
  1011. data/lib/chef/shell_out.rb +13 -13
  1012. data/lib/chef/tasks/chef_repo.rake +200 -200
  1013. data/lib/chef/user.rb +197 -197
  1014. data/lib/chef/user_v1.rb +328 -328
  1015. data/lib/chef/util/backup.rb +94 -94
  1016. data/lib/chef/util/diff.rb +184 -184
  1017. data/lib/chef/util/dsc/configuration_generator.rb +139 -139
  1018. data/lib/chef/util/dsc/lcm_output_parser.rb +192 -192
  1019. data/lib/chef/util/dsc/local_configuration_manager.rb +151 -151
  1020. data/lib/chef/util/dsc/resource_info.rb +26 -26
  1021. data/lib/chef/util/dsc/resource_store.rb +109 -109
  1022. data/lib/chef/util/editor.rb +91 -91
  1023. data/lib/chef/util/file_edit.rb +100 -100
  1024. data/lib/chef/util/path_helper.rb +25 -25
  1025. data/lib/chef/util/powershell/cmdlet.rb +173 -173
  1026. data/lib/chef/util/powershell/cmdlet_result.rb +61 -61
  1027. data/lib/chef/util/powershell/ps_credential.rb +41 -41
  1028. data/lib/chef/util/selinux.rb +92 -92
  1029. data/lib/chef/util/threaded_job_queue.rb +61 -61
  1030. data/lib/chef/util/windows.rb +24 -24
  1031. data/lib/chef/util/windows/net_group.rb +72 -72
  1032. data/lib/chef/util/windows/net_use.rb +81 -81
  1033. data/lib/chef/util/windows/net_user.rb +164 -164
  1034. data/lib/chef/util/windows/volume.rb +53 -53
  1035. data/lib/chef/version.rb +34 -34
  1036. data/lib/chef/version/platform.rb +44 -44
  1037. data/lib/chef/version_class.rb +75 -75
  1038. data/lib/chef/version_constraint.rb +118 -118
  1039. data/lib/chef/version_constraint/platform.rb +26 -26
  1040. data/lib/chef/whitelist.rb +86 -86
  1041. data/lib/chef/win32/api.rb +372 -372
  1042. data/lib/chef/win32/api/crypto.rb +63 -63
  1043. data/lib/chef/win32/api/error.rb +953 -953
  1044. data/lib/chef/win32/api/file.rb +619 -619
  1045. data/lib/chef/win32/api/installer.rb +165 -165
  1046. data/lib/chef/win32/api/memory.rb +105 -105
  1047. data/lib/chef/win32/api/net.rb +312 -312
  1048. data/lib/chef/win32/api/process.rb +42 -42
  1049. data/lib/chef/win32/api/psapi.rb +51 -51
  1050. data/lib/chef/win32/api/registry.rb +51 -51
  1051. data/lib/chef/win32/api/security.rb +460 -460
  1052. data/lib/chef/win32/api/synchronization.rb +89 -89
  1053. data/lib/chef/win32/api/system.rb +238 -238
  1054. data/lib/chef/win32/api/unicode.rb +135 -135
  1055. data/lib/chef/win32/crypto.rb +50 -50
  1056. data/lib/chef/win32/error.rb +86 -86
  1057. data/lib/chef/win32/eventlog.rb +31 -31
  1058. data/lib/chef/win32/file.rb +216 -216
  1059. data/lib/chef/win32/file/info.rb +99 -99
  1060. data/lib/chef/win32/file/version_info.rb +93 -93
  1061. data/lib/chef/win32/handle.rb +55 -55
  1062. data/lib/chef/win32/memory.rb +101 -101
  1063. data/lib/chef/win32/mutex.rb +116 -116
  1064. data/lib/chef/win32/net.rb +311 -311
  1065. data/lib/chef/win32/process.rb +97 -97
  1066. data/lib/chef/win32/registry.rb +374 -374
  1067. data/lib/chef/win32/security.rb +663 -665
  1068. data/lib/chef/win32/security/ace.rb +123 -123
  1069. data/lib/chef/win32/security/acl.rb +103 -103
  1070. data/lib/chef/win32/security/securable_object.rb +109 -109
  1071. data/lib/chef/win32/security/security_descriptor.rb +93 -93
  1072. data/lib/chef/win32/security/sid.rb +304 -304
  1073. data/lib/chef/win32/security/token.rb +72 -72
  1074. data/lib/chef/win32/system.rb +62 -62
  1075. data/lib/chef/win32/unicode.rb +60 -60
  1076. data/lib/chef/win32/version.rb +158 -158
  1077. data/lib/chef/workstation_config_loader.rb +23 -23
  1078. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
  1079. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
  1080. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
  1081. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -34
  1082. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
  1083. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
  1084. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
  1085. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
  1086. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
  1087. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
  1088. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -34
  1089. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
  1090. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
  1091. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
  1092. data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -5
  1093. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -45
  1094. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -1
  1095. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -1
  1096. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -10
  1097. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -1
  1098. data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -1
  1099. data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -1
  1100. data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -13
  1101. data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -34
  1102. data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -1
  1103. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -13
  1104. data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -1
  1105. data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -18
  1106. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -91
  1107. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -31
  1108. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
  1109. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
  1110. data/spec/data/apt/var/www/apt/conf/distributions +7 -7
  1111. data/spec/data/apt/var/www/apt/conf/incoming +4 -4
  1112. data/spec/data/apt/var/www/apt/conf/pulls +3 -3
  1113. data/spec/data/apt/var/www/apt/db/version +4 -4
  1114. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
  1115. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
  1116. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
  1117. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
  1118. data/spec/data/bootstrap/no_proxy.erb +2 -2
  1119. data/spec/data/bootstrap/secret.erb +9 -9
  1120. data/spec/data/bootstrap/test-hints.erb +12 -12
  1121. data/spec/data/bootstrap/test.erb +1 -1
  1122. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
  1123. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
  1124. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
  1125. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
  1126. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
  1127. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
  1128. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
  1129. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
  1130. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
  1131. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
  1132. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
  1133. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
  1134. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
  1135. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
  1136. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
  1137. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
  1138. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
  1139. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
  1140. data/spec/data/client.d_00/00-foo.rb +2 -2
  1141. data/spec/data/client.d_00/01-bar.rb +1 -1
  1142. data/spec/data/client.d_00/bar +1 -1
  1143. data/spec/data/client.d_01/foo/bar.rb +1 -1
  1144. data/spec/data/client.d_02/foo.rb/foo.txt +1 -1
  1145. data/spec/data/config.rb +6 -6
  1146. data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
  1147. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
  1148. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
  1149. data/spec/data/cookbooks/apache2/metadata.rb +2 -2
  1150. data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
  1151. data/spec/data/cookbooks/borken/metadata.rb +2 -2
  1152. data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
  1153. data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
  1154. data/spec/data/cookbooks/chefignore +8 -8
  1155. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
  1156. data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
  1157. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
  1158. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
  1159. data/spec/data/cookbooks/java/files/default/java.response +1 -1
  1160. data/spec/data/cookbooks/java/metadata.rb +2 -2
  1161. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
  1162. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
  1163. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -8
  1164. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
  1165. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  1166. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
  1167. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
  1168. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
  1169. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
  1170. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
  1171. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
  1172. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
  1173. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
  1174. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
  1175. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
  1176. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
  1177. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
  1178. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
  1179. data/spec/data/cookbooks/openldap/metadata.rb +8 -8
  1180. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
  1181. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
  1182. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
  1183. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
  1184. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
  1185. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -14
  1186. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
  1187. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -1
  1188. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -1
  1189. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
  1190. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
  1191. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
  1192. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
  1193. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
  1194. data/spec/data/cookbooks/preseed/metadata.rb +2 -2
  1195. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
  1196. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
  1197. data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +5 -5
  1198. data/spec/data/definitions/test.rb +4 -4
  1199. data/spec/data/environment-config.rb +4 -4
  1200. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
  1201. data/spec/data/fileedit/hosts +4 -4
  1202. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
  1203. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
  1204. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -8
  1205. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
  1206. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +9 -9
  1207. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -8
  1208. data/spec/data/kitchen/chefignore +6 -6
  1209. data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
  1210. data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
  1211. data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
  1212. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
  1213. data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
  1214. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
  1215. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
  1216. data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
  1217. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
  1218. data/spec/data/knife_subcommand/test_yourself.rb +21 -21
  1219. data/spec/data/lwrp/providers/buck_passer.rb +28 -28
  1220. data/spec/data/lwrp/providers/buck_passer_2.rb +26 -26
  1221. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -28
  1222. data/spec/data/lwrp/providers/inline_compiler.rb +26 -26
  1223. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
  1224. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
  1225. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
  1226. data/spec/data/lwrp/resources/bar.rb +2 -2
  1227. data/spec/data/lwrp/resources/foo.rb +4 -4
  1228. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
  1229. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
  1230. data/spec/data/lwrp_override/resources/foo.rb +10 -10
  1231. data/spec/data/mac_users/10.7-8.plist.xml +559 -559
  1232. data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
  1233. data/spec/data/mac_users/10.7.plist.xml +559 -559
  1234. data/spec/data/mac_users/10.7.shadow.xml +11 -11
  1235. data/spec/data/mac_users/10.8.plist.xml +559 -559
  1236. data/spec/data/mac_users/10.8.shadow.xml +21 -21
  1237. data/spec/data/mac_users/10.9.plist.xml +560 -560
  1238. data/spec/data/mac_users/10.9.shadow.xml +21 -21
  1239. data/spec/data/metadata/quick_start/metadata.rb +19 -19
  1240. data/spec/data/nested.json +2 -2
  1241. data/spec/data/nodes/default.rb +15 -15
  1242. data/spec/data/nodes/test.example.com.rb +17 -17
  1243. data/spec/data/nodes/test.rb +15 -15
  1244. data/spec/data/null_config.rb +1 -1
  1245. data/spec/data/object_loader/environments/test.json +7 -7
  1246. data/spec/data/object_loader/environments/test.rb +2 -2
  1247. data/spec/data/object_loader/environments/test_json_class.json +8 -8
  1248. data/spec/data/object_loader/nodes/test.json +7 -7
  1249. data/spec/data/object_loader/nodes/test.rb +2 -2
  1250. data/spec/data/object_loader/nodes/test_json_class.json +8 -8
  1251. data/spec/data/object_loader/roles/test.json +7 -7
  1252. data/spec/data/object_loader/roles/test.rb +2 -2
  1253. data/spec/data/object_loader/roles/test_json_class.json +8 -8
  1254. data/spec/data/partial_one.erb +1 -1
  1255. data/spec/data/prefer_metadata_json/metadata.json +51 -51
  1256. data/spec/data/prefer_metadata_json/metadata.rb +6 -6
  1257. data/spec/data/recipes/test.rb +7 -7
  1258. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +2 -2
  1259. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
  1260. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
  1261. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
  1262. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
  1263. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
  1264. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +2 -2
  1265. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
  1266. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
  1267. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
  1268. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
  1269. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
  1270. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  1271. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  1272. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +2 -2
  1273. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
  1274. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
  1275. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
  1276. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
  1277. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +2 -2
  1278. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
  1279. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
  1280. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
  1281. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
  1282. data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -24
  1283. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -3
  1284. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +2 -2
  1285. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
  1286. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
  1287. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
  1288. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +2 -2
  1289. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
  1290. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
  1291. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
  1292. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
  1293. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
  1294. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +2 -2
  1295. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
  1296. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
  1297. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
  1298. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
  1299. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
  1300. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  1301. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
  1302. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
  1303. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
  1304. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
  1305. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
  1306. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
  1307. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
  1308. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
  1309. data/spec/data/run_context/nodes/run_context.rb +5 -5
  1310. data/spec/data/sample_msu1.xml +10 -10
  1311. data/spec/data/sample_msu2.xml +14 -14
  1312. data/spec/data/sample_msu3.xml +16 -16
  1313. data/spec/data/search_queries_to_transform.txt +98 -98
  1314. data/spec/data/shef-config.rb +10 -10
  1315. data/spec/data/ssl/5e707473.0 +18 -18
  1316. data/spec/data/ssl/chef-rspec.cert +27 -27
  1317. data/spec/data/ssl/chef-rspec.key +27 -27
  1318. data/spec/data/ssl/key.pem +15 -15
  1319. data/spec/data/ssl/private_key.pem +27 -27
  1320. data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
  1321. data/spec/data/standalone_cookbook/chefignore +9 -9
  1322. data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
  1323. data/spec/data/trusted_certs/example.crt +22 -22
  1324. data/spec/data/trusted_certs/example_no_cn.crt +36 -36
  1325. data/spec/data/trusted_certs/intermediate.pem +27 -27
  1326. data/spec/data/trusted_certs/opscode.pem +57 -57
  1327. data/spec/data/trusted_certs/root.pem +22 -22
  1328. data/spec/functional/application_spec.rb +58 -58
  1329. data/spec/functional/assets/chefinittest +36 -36
  1330. data/spec/functional/assets/testchefsubsys +10 -10
  1331. data/spec/functional/assets/yumrepo/repodata/repomd.xml +55 -55
  1332. data/spec/functional/audit/rspec_formatter_spec.rb +54 -54
  1333. data/spec/functional/audit/runner_spec.rb +121 -121
  1334. data/spec/functional/dsl/reboot_pending_spec.rb +106 -106
  1335. data/spec/functional/dsl/registry_helper_spec.rb +61 -61
  1336. data/spec/functional/event_loggers/windows_eventlog_spec.rb +104 -104
  1337. data/spec/functional/file_content_management/deploy_strategies_spec.rb +229 -229
  1338. data/spec/functional/http/simple_spec.rb +140 -140
  1339. data/spec/functional/knife/configure_spec.rb +33 -33
  1340. data/spec/functional/knife/cookbook_delete_spec.rb +156 -156
  1341. data/spec/functional/knife/exec_spec.rb +55 -55
  1342. data/spec/functional/knife/rehash_spec.rb +39 -39
  1343. data/spec/functional/knife/smoke_test.rb +42 -42
  1344. data/spec/functional/knife/ssh_spec.rb +284 -284
  1345. data/spec/functional/mixin/powershell_out_spec.rb +43 -43
  1346. data/spec/functional/mixin/shell_out_spec.rb +48 -48
  1347. data/spec/functional/notifications_spec.rb +238 -238
  1348. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +100 -100
  1349. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -51
  1350. data/spec/functional/rebooter_spec.rb +105 -105
  1351. data/spec/functional/resource/aix_service_spec.rb +138 -138
  1352. data/spec/functional/resource/aixinit_service_spec.rb +211 -211
  1353. data/spec/functional/resource/base.rb +28 -28
  1354. data/spec/functional/resource/bash_spec.rb +88 -88
  1355. data/spec/functional/resource/batch_spec.rb +34 -34
  1356. data/spec/functional/resource/bff_spec.rb +120 -120
  1357. data/spec/functional/resource/chocolatey_package_spec.rb +125 -125
  1358. data/spec/functional/resource/cookbook_file_spec.rb +81 -81
  1359. data/spec/functional/resource/cron_spec.rb +179 -179
  1360. data/spec/functional/resource/deploy_revision_spec.rb +881 -881
  1361. data/spec/functional/resource/directory_spec.rb +43 -43
  1362. data/spec/functional/resource/dnf_package_spec.rb +686 -686
  1363. data/spec/functional/resource/dpkg_package_spec.rb +339 -339
  1364. data/spec/functional/resource/dsc_resource_spec.rb +90 -90
  1365. data/spec/functional/resource/dsc_script_spec.rb +484 -484
  1366. data/spec/functional/resource/env_spec.rb +192 -192
  1367. data/spec/functional/resource/execute_spec.rb +171 -171
  1368. data/spec/functional/resource/file_spec.rb +167 -167
  1369. data/spec/functional/resource/git_spec.rb +257 -257
  1370. data/spec/functional/resource/group_spec.rb +488 -488
  1371. data/spec/functional/resource/ifconfig_spec.rb +171 -171
  1372. data/spec/functional/resource/link_spec.rb +703 -703
  1373. data/spec/functional/resource/mount_spec.rb +207 -207
  1374. data/spec/functional/resource/msu_package_spec.rb +84 -84
  1375. data/spec/functional/resource/ohai_spec.rb +62 -62
  1376. data/spec/functional/resource/package_spec.rb +386 -386
  1377. data/spec/functional/resource/powershell_script_spec.rb +601 -601
  1378. data/spec/functional/resource/reboot_spec.rb +103 -103
  1379. data/spec/functional/resource/registry_spec.rb +676 -676
  1380. data/spec/functional/resource/remote_directory_spec.rb +220 -220
  1381. data/spec/functional/resource/remote_file_spec.rb +249 -249
  1382. data/spec/functional/resource/rpm_spec.rb +120 -120
  1383. data/spec/functional/resource/template_spec.rb +212 -212
  1384. data/spec/functional/resource/user/dscl_spec.rb +196 -196
  1385. data/spec/functional/resource/user/useradd_spec.rb +709 -709
  1386. data/spec/functional/resource/user/windows_spec.rb +133 -133
  1387. data/spec/functional/resource/windows_package_spec.rb +168 -168
  1388. data/spec/functional/resource/windows_service_spec.rb +102 -102
  1389. data/spec/functional/rest_spec.rb +95 -95
  1390. data/spec/functional/run_lock_spec.rb +473 -473
  1391. data/spec/functional/shell_spec.rb +148 -148
  1392. data/spec/functional/tiny_server_spec.rb +79 -79
  1393. data/spec/functional/util/path_helper_spec.rb +37 -37
  1394. data/spec/functional/util/powershell/cmdlet_spec.rb +111 -111
  1395. data/spec/functional/version_spec.rb +35 -35
  1396. data/spec/functional/win32/crypto_spec.rb +54 -54
  1397. data/spec/functional/win32/registry_spec.rb +624 -624
  1398. data/spec/functional/win32/security_spec.rb +135 -100
  1399. data/spec/functional/win32/service_manager_spec.rb +220 -220
  1400. data/spec/functional/win32/sid_spec.rb +55 -55
  1401. data/spec/functional/win32/version_info_spec.rb +50 -50
  1402. data/spec/functional/win32/versions_spec.rb +117 -117
  1403. data/spec/integration/client/client_spec.rb +535 -535
  1404. data/spec/integration/client/exit_code_spec.rb +245 -245
  1405. data/spec/integration/client/ipv6_spec.rb +134 -134
  1406. data/spec/integration/knife/chef_fs_data_store_spec.rb +556 -556
  1407. data/spec/integration/knife/chef_repo_path_spec.rb +959 -959
  1408. data/spec/integration/knife/chef_repository_file_system_spec.rb +296 -296
  1409. data/spec/integration/knife/chefignore_spec.rb +300 -300
  1410. data/spec/integration/knife/client_bulk_delete_spec.rb +130 -130
  1411. data/spec/integration/knife/client_create_spec.rb +69 -69
  1412. data/spec/integration/knife/client_delete_spec.rb +63 -63
  1413. data/spec/integration/knife/client_key_create_spec.rb +65 -65
  1414. data/spec/integration/knife/client_key_delete_spec.rb +42 -42
  1415. data/spec/integration/knife/client_key_list_spec.rb +60 -60
  1416. data/spec/integration/knife/client_key_show_spec.rb +44 -44
  1417. data/spec/integration/knife/client_list_spec.rb +48 -48
  1418. data/spec/integration/knife/client_show_spec.rb +36 -36
  1419. data/spec/integration/knife/common_options_spec.rb +155 -155
  1420. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -112
  1421. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +64 -64
  1422. data/spec/integration/knife/cookbook_download_spec.rb +95 -95
  1423. data/spec/integration/knife/cookbook_list_spec.rb +54 -54
  1424. data/spec/integration/knife/cookbook_show_spec.rb +159 -159
  1425. data/spec/integration/knife/cookbook_upload_spec.rb +90 -90
  1426. data/spec/integration/knife/data_bag_create_spec.rb +55 -55
  1427. data/spec/integration/knife/data_bag_delete_spec.rb +58 -58
  1428. data/spec/integration/knife/data_bag_from_file_spec.rb +115 -115
  1429. data/spec/integration/knife/data_bag_list_spec.rb +43 -43
  1430. data/spec/integration/knife/data_bag_show_spec.rb +53 -53
  1431. data/spec/integration/knife/delete_spec.rb +1017 -1017
  1432. data/spec/integration/knife/deps_spec.rb +706 -706
  1433. data/spec/integration/knife/diff_spec.rb +602 -602
  1434. data/spec/integration/knife/download_spec.rb +1333 -1333
  1435. data/spec/integration/knife/environment_compare_spec.rb +74 -74
  1436. data/spec/integration/knife/environment_create_spec.rb +40 -40
  1437. data/spec/integration/knife/environment_delete_spec.rb +36 -36
  1438. data/spec/integration/knife/environment_from_file_spec.rb +115 -115
  1439. data/spec/integration/knife/environment_list_spec.rb +41 -41
  1440. data/spec/integration/knife/environment_show_spec.rb +76 -76
  1441. data/spec/integration/knife/list_spec.rb +1059 -1059
  1442. data/spec/integration/knife/node_bulk_delete_spec.rb +51 -51
  1443. data/spec/integration/knife/node_create_spec.rb +46 -46
  1444. data/spec/integration/knife/node_delete_spec.rb +47 -47
  1445. data/spec/integration/knife/node_environment_set_spec.rb +45 -45
  1446. data/spec/integration/knife/node_from_file_spec.rb +58 -58
  1447. data/spec/integration/knife/node_list_spec.rb +44 -44
  1448. data/spec/integration/knife/node_run_list_add_spec.rb +53 -53
  1449. data/spec/integration/knife/node_run_list_remove_spec.rb +35 -35
  1450. data/spec/integration/knife/node_run_list_set_spec.rb +40 -40
  1451. data/spec/integration/knife/node_show_spec.rb +35 -35
  1452. data/spec/integration/knife/raw_spec.rb +244 -244
  1453. data/spec/integration/knife/redirection_spec.rb +52 -52
  1454. data/spec/integration/knife/role_bulk_delete_spec.rb +51 -51
  1455. data/spec/integration/knife/role_create_spec.rb +40 -40
  1456. data/spec/integration/knife/role_delete_spec.rb +47 -47
  1457. data/spec/integration/knife/role_from_file_spec.rb +95 -95
  1458. data/spec/integration/knife/role_list_spec.rb +44 -44
  1459. data/spec/integration/knife/role_show_spec.rb +50 -50
  1460. data/spec/integration/knife/serve_spec.rb +57 -57
  1461. data/spec/integration/knife/show_spec.rb +167 -167
  1462. data/spec/integration/knife/upload_spec.rb +1548 -1548
  1463. data/spec/integration/recipes/accumulator_spec.rb +232 -232
  1464. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +175 -175
  1465. data/spec/integration/recipes/lwrp_spec.rb +53 -53
  1466. data/spec/integration/recipes/noop_resource_spec.rb +24 -24
  1467. data/spec/integration/recipes/notifies_spec.rb +334 -334
  1468. data/spec/integration/recipes/notifying_block_spec.rb +111 -111
  1469. data/spec/integration/recipes/provider_choice.rb +37 -37
  1470. data/spec/integration/recipes/recipe_dsl_spec.rb +1523 -1523
  1471. data/spec/integration/recipes/remote_directory.rb +74 -74
  1472. data/spec/integration/recipes/resource_action_spec.rb +581 -581
  1473. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +496 -496
  1474. data/spec/integration/recipes/resource_load_spec.rb +208 -208
  1475. data/spec/integration/solo/solo_spec.rb +217 -217
  1476. data/spec/rcov.opts +2 -2
  1477. data/spec/scripts/ssl-serve.rb +47 -47
  1478. data/spec/spec_helper.rb +288 -288
  1479. data/spec/stress/win32/file_spec.rb +37 -37
  1480. data/spec/stress/win32/memory_spec.rb +22 -22
  1481. data/spec/stress/win32/security_spec.rb +69 -69
  1482. data/spec/support/chef_helpers.rb +115 -115
  1483. data/spec/support/key_helpers.rb +104 -104
  1484. data/spec/support/lib/chef/provider/easy.rb +35 -35
  1485. data/spec/support/lib/chef/provider/openldap_includer.rb +29 -29
  1486. data/spec/support/lib/chef/provider/snakeoil.rb +42 -42
  1487. data/spec/support/lib/chef/resource/cat.rb +39 -39
  1488. data/spec/support/lib/chef/resource/one_two_three_four.rb +38 -38
  1489. data/spec/support/lib/chef/resource/openldap_includer.rb +28 -28
  1490. data/spec/support/lib/chef/resource/with_state.rb +30 -30
  1491. data/spec/support/lib/chef/resource/zen_follower.rb +35 -35
  1492. data/spec/support/lib/chef/resource/zen_master.rb +42 -42
  1493. data/spec/support/lib/library_load_order.rb +20 -20
  1494. data/spec/support/matchers/leak.rb +98 -98
  1495. data/spec/support/mock/constant.rb +52 -52
  1496. data/spec/support/mock/platform.rb +25 -25
  1497. data/spec/support/platform_helpers.rb +237 -237
  1498. data/spec/support/platforms/prof/gc.rb +51 -51
  1499. data/spec/support/platforms/prof/win32.rb +45 -45
  1500. data/spec/support/platforms/win32/spec_service.rb +59 -59
  1501. data/spec/support/shared/context/client.rb +302 -302
  1502. data/spec/support/shared/context/config.rb +21 -21
  1503. data/spec/support/shared/context/win32.rb +34 -34
  1504. data/spec/support/shared/examples/client.rb +53 -53
  1505. data/spec/support/shared/functional/diff_disabled.rb +10 -10
  1506. data/spec/support/shared/functional/directory_resource.rb +176 -176
  1507. data/spec/support/shared/functional/execute_resource.rb +150 -150
  1508. data/spec/support/shared/functional/file_resource.rb +1050 -1050
  1509. data/spec/support/shared/functional/http.rb +248 -248
  1510. data/spec/support/shared/functional/knife.rb +37 -37
  1511. data/spec/support/shared/functional/securable_resource.rb +547 -547
  1512. data/spec/support/shared/functional/securable_resource_with_reporting.rb +394 -394
  1513. data/spec/support/shared/functional/win32_service.rb +57 -57
  1514. data/spec/support/shared/functional/windows_script.rb +272 -272
  1515. data/spec/support/shared/integration/app_server_support.rb +40 -40
  1516. data/spec/support/shared/integration/integration_helper.rb +154 -154
  1517. data/spec/support/shared/integration/knife_support.rb +185 -185
  1518. data/spec/support/shared/matchers/exit_with_code.rb +32 -32
  1519. data/spec/support/shared/matchers/match_environment_variable.rb +17 -17
  1520. data/spec/support/shared/shared_examples.rb +14 -14
  1521. data/spec/support/shared/unit/api_error_inspector.rb +190 -190
  1522. data/spec/support/shared/unit/api_versioning.rb +77 -77
  1523. data/spec/support/shared/unit/application_dot_d.rb +73 -73
  1524. data/spec/support/shared/unit/execute_resource.rb +170 -170
  1525. data/spec/support/shared/unit/file_system_support.rb +69 -69
  1526. data/spec/support/shared/unit/knife_shared.rb +39 -39
  1527. data/spec/support/shared/unit/mock_shellout.rb +49 -49
  1528. data/spec/support/shared/unit/platform_introspector.rb +189 -189
  1529. data/spec/support/shared/unit/provider/file.rb +845 -845
  1530. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +402 -402
  1531. data/spec/support/shared/unit/resource/static_provider_resolution.rb +63 -63
  1532. data/spec/support/shared/unit/script_resource.rb +98 -98
  1533. data/spec/support/shared/unit/user_and_client_shared.rb +114 -114
  1534. data/spec/support/shared/unit/windows_script_resource.rb +80 -80
  1535. data/spec/tiny_server.rb +192 -192
  1536. data/spec/unit/api_client/registration_spec.rb +278 -278
  1537. data/spec/unit/api_client_spec.rb +341 -341
  1538. data/spec/unit/api_client_v1_spec.rb +455 -455
  1539. data/spec/unit/application/apply_spec.rb +113 -113
  1540. data/spec/unit/application/client_spec.rb +530 -530
  1541. data/spec/unit/application/exit_code_spec.rb +229 -229
  1542. data/spec/unit/application/knife_spec.rb +229 -229
  1543. data/spec/unit/application/solo_spec.rb +232 -232
  1544. data/spec/unit/application_spec.rb +411 -411
  1545. data/spec/unit/audit/audit_event_proxy_spec.rb +318 -318
  1546. data/spec/unit/audit/audit_reporter_spec.rb +439 -439
  1547. data/spec/unit/audit/control_group_data_spec.rb +482 -482
  1548. data/spec/unit/audit/logger_spec.rb +42 -42
  1549. data/spec/unit/audit/rspec_formatter_spec.rb +29 -29
  1550. data/spec/unit/audit/runner_spec.rb +144 -144
  1551. data/spec/unit/chef_class_spec.rb +110 -110
  1552. data/spec/unit/chef_fs/config_spec.rb +235 -235
  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 +604 -604
  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 +207 -207
  1569. data/spec/unit/cookbook/file_vendor_spec.rb +112 -112
  1570. data/spec/unit/cookbook/metadata_spec.rb +971 -971
  1571. data/spec/unit/cookbook/synchronizer_spec.rb +539 -539
  1572. data/spec/unit/cookbook/syntax_check_spec.rb +225 -225
  1573. data/spec/unit/cookbook_loader_spec.rb +299 -299
  1574. data/spec/unit/cookbook_manifest_spec.rb +243 -243
  1575. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +203 -203
  1576. data/spec/unit/cookbook_spec.rb +66 -66
  1577. data/spec/unit/cookbook_uploader_spec.rb +199 -199
  1578. data/spec/unit/cookbook_version_file_specificity_spec.rb +576 -576
  1579. data/spec/unit/cookbook_version_spec.rb +359 -359
  1580. data/spec/unit/daemon_spec.rb +183 -183
  1581. data/spec/unit/data_bag_item_spec.rb +388 -388
  1582. data/spec/unit/data_bag_spec.rb +260 -260
  1583. data/spec/unit/data_collector/messages/helpers_spec.rb +193 -193
  1584. data/spec/unit/data_collector/messages_spec.rb +192 -192
  1585. data/spec/unit/data_collector/resource_report_spec.rb +145 -145
  1586. data/spec/unit/data_collector_spec.rb +741 -741
  1587. data/spec/unit/decorator/lazy_array_spec.rb +58 -58
  1588. data/spec/unit/decorator/lazy_spec.rb +39 -39
  1589. data/spec/unit/decorator_spec.rb +142 -142
  1590. data/spec/unit/deprecated_spec.rb +59 -59
  1591. data/spec/unit/deprecation_spec.rb +143 -143
  1592. data/spec/unit/digester_spec.rb +49 -49
  1593. data/spec/unit/dsl/audit_spec.rb +43 -43
  1594. data/spec/unit/dsl/data_query_spec.rb +107 -107
  1595. data/spec/unit/dsl/declare_resource_spec.rb +365 -365
  1596. data/spec/unit/dsl/platform_introspection_spec.rb +129 -129
  1597. data/spec/unit/dsl/reboot_pending_spec.rb +100 -100
  1598. data/spec/unit/dsl/recipe_spec.rb +93 -93
  1599. data/spec/unit/dsl/registry_helper_spec.rb +52 -52
  1600. data/spec/unit/dsl/resources_spec.rb +85 -85
  1601. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +96 -96
  1602. data/spec/unit/encrypted_data_bag_item_spec.rb +438 -438
  1603. data/spec/unit/environment_spec.rb +470 -470
  1604. data/spec/unit/event_dispatch/dispatcher_spec.rb +122 -122
  1605. data/spec/unit/event_dispatch/dsl_spec.rb +83 -83
  1606. data/spec/unit/exceptions_spec.rb +132 -132
  1607. data/spec/unit/file_access_control_spec.rb +308 -308
  1608. data/spec/unit/file_cache_spec.rb +114 -114
  1609. data/spec/unit/file_content_management/deploy/cp_spec.rb +44 -44
  1610. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +101 -101
  1611. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +232 -232
  1612. data/spec/unit/file_content_management/tempfile_spec.rb +115 -115
  1613. data/spec/unit/formatters/base_spec.rb +71 -71
  1614. data/spec/unit/formatters/doc_spec.rb +92 -92
  1615. data/spec/unit/formatters/error_description_spec.rb +141 -141
  1616. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +76 -76
  1617. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +265 -265
  1618. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +126 -126
  1619. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -43
  1620. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +26 -26
  1621. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +26 -26
  1622. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +191 -191
  1623. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +91 -91
  1624. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +155 -155
  1625. data/spec/unit/guard_interpreter_spec.rb +41 -41
  1626. data/spec/unit/handler/json_file_spec.rb +63 -63
  1627. data/spec/unit/handler_spec.rb +302 -302
  1628. data/spec/unit/http/api_versions_spec.rb +69 -69
  1629. data/spec/unit/http/authenticator_spec.rb +80 -80
  1630. data/spec/unit/http/basic_client_spec.rb +72 -72
  1631. data/spec/unit/http/http_request_spec.rb +91 -91
  1632. data/spec/unit/http/json_input_spec.rb +128 -128
  1633. data/spec/unit/http/simple_spec.rb +32 -32
  1634. data/spec/unit/http/socketless_chef_zero_client_spec.rb +173 -173
  1635. data/spec/unit/http/ssl_policies_spec.rb +169 -169
  1636. data/spec/unit/http/validate_content_length_spec.rb +207 -207
  1637. data/spec/unit/http_spec.rb +220 -220
  1638. data/spec/unit/json_compat_spec.rb +105 -105
  1639. data/spec/unit/key_spec.rb +631 -631
  1640. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +152 -152
  1641. data/spec/unit/knife/bootstrap/client_builder_spec.rb +207 -207
  1642. data/spec/unit/knife/bootstrap_spec.rb +824 -824
  1643. data/spec/unit/knife/client_bulk_delete_spec.rb +166 -166
  1644. data/spec/unit/knife/client_create_spec.rb +186 -186
  1645. data/spec/unit/knife/client_delete_spec.rb +99 -99
  1646. data/spec/unit/knife/client_edit_spec.rb +53 -53
  1647. data/spec/unit/knife/client_list_spec.rb +34 -34
  1648. data/spec/unit/knife/client_reregister_spec.rb +62 -62
  1649. data/spec/unit/knife/client_show_spec.rb +52 -52
  1650. data/spec/unit/knife/configure_client_spec.rb +83 -83
  1651. data/spec/unit/knife/configure_spec.rb +241 -241
  1652. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
  1653. data/spec/unit/knife/cookbook_create_spec.rb +261 -261
  1654. data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
  1655. data/spec/unit/knife/cookbook_download_spec.rb +237 -237
  1656. data/spec/unit/knife/cookbook_list_spec.rb +88 -88
  1657. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -65
  1658. data/spec/unit/knife/cookbook_metadata_spec.rb +182 -182
  1659. data/spec/unit/knife/cookbook_show_spec.rb +221 -221
  1660. data/spec/unit/knife/cookbook_site_download_spec.rb +150 -150
  1661. data/spec/unit/knife/cookbook_site_install_spec.rb +200 -200
  1662. data/spec/unit/knife/cookbook_site_share_spec.rb +209 -209
  1663. data/spec/unit/knife/cookbook_site_unshare_spec.rb +77 -77
  1664. data/spec/unit/knife/cookbook_test_spec.rb +84 -84
  1665. data/spec/unit/knife/cookbook_upload_spec.rb +331 -331
  1666. data/spec/unit/knife/core/bootstrap_context_spec.rb +307 -307
  1667. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
  1668. data/spec/unit/knife/core/custom_manifest_loader_spec.rb +41 -41
  1669. data/spec/unit/knife/core/gem_glob_loader_spec.rb +209 -209
  1670. data/spec/unit/knife/core/hashed_command_loader_spec.rb +110 -110
  1671. data/spec/unit/knife/core/node_editor_spec.rb +211 -211
  1672. data/spec/unit/knife/core/object_loader_spec.rb +81 -81
  1673. data/spec/unit/knife/core/subcommand_loader_spec.rb +70 -70
  1674. data/spec/unit/knife/core/ui_spec.rb +629 -629
  1675. data/spec/unit/knife/data_bag_create_spec.rb +129 -129
  1676. data/spec/unit/knife/data_bag_edit_spec.rb +127 -127
  1677. data/spec/unit/knife/data_bag_from_file_spec.rb +173 -173
  1678. data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -165
  1679. data/spec/unit/knife/data_bag_show_spec.rb +124 -124
  1680. data/spec/unit/knife/environment_compare_spec.rb +112 -112
  1681. data/spec/unit/knife/environment_create_spec.rb +91 -91
  1682. data/spec/unit/knife/environment_delete_spec.rb +71 -71
  1683. data/spec/unit/knife/environment_edit_spec.rb +79 -79
  1684. data/spec/unit/knife/environment_from_file_spec.rb +90 -90
  1685. data/spec/unit/knife/environment_list_spec.rb +54 -54
  1686. data/spec/unit/knife/environment_show_spec.rb +52 -52
  1687. data/spec/unit/knife/index_rebuild_spec.rb +125 -125
  1688. data/spec/unit/knife/key_create_spec.rb +223 -223
  1689. data/spec/unit/knife/key_delete_spec.rb +133 -133
  1690. data/spec/unit/knife/key_edit_spec.rb +264 -264
  1691. data/spec/unit/knife/key_helper.rb +74 -74
  1692. data/spec/unit/knife/key_list_spec.rb +216 -216
  1693. data/spec/unit/knife/key_show_spec.rb +126 -126
  1694. data/spec/unit/knife/knife_help.rb +92 -92
  1695. data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
  1696. data/spec/unit/knife/node_delete_spec.rb +77 -77
  1697. data/spec/unit/knife/node_edit_spec.rb +114 -114
  1698. data/spec/unit/knife/node_environment_set_spec.rb +56 -56
  1699. data/spec/unit/knife/node_from_file_spec.rb +59 -59
  1700. data/spec/unit/knife/node_list_spec.rb +62 -62
  1701. data/spec/unit/knife/node_run_list_add_spec.rb +145 -145
  1702. data/spec/unit/knife/node_run_list_remove_spec.rb +106 -106
  1703. data/spec/unit/knife/node_run_list_set_spec.rb +115 -115
  1704. data/spec/unit/knife/node_show_spec.rb +65 -65
  1705. data/spec/unit/knife/osc_user_create_spec.rb +93 -93
  1706. data/spec/unit/knife/osc_user_delete_spec.rb +44 -44
  1707. data/spec/unit/knife/osc_user_edit_spec.rb +52 -52
  1708. data/spec/unit/knife/osc_user_list_spec.rb +37 -37
  1709. data/spec/unit/knife/osc_user_reregister_spec.rb +58 -58
  1710. data/spec/unit/knife/osc_user_show_spec.rb +46 -46
  1711. data/spec/unit/knife/raw_spec.rb +43 -43
  1712. data/spec/unit/knife/role_bulk_delete_spec.rb +80 -80
  1713. data/spec/unit/knife/role_create_spec.rb +80 -80
  1714. data/spec/unit/knife/role_delete_spec.rb +67 -67
  1715. data/spec/unit/knife/role_edit_spec.rb +77 -77
  1716. data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -217
  1717. data/spec/unit/knife/role_env_run_list_clear_spec.rb +94 -94
  1718. data/spec/unit/knife/role_env_run_list_remove_spec.rb +102 -102
  1719. data/spec/unit/knife/role_env_run_list_replace_spec.rb +105 -105
  1720. data/spec/unit/knife/role_env_run_list_set_spec.rb +99 -99
  1721. data/spec/unit/knife/role_from_file_spec.rb +69 -69
  1722. data/spec/unit/knife/role_list_spec.rb +54 -54
  1723. data/spec/unit/knife/role_run_list_add_spec.rb +179 -179
  1724. data/spec/unit/knife/role_run_list_clear_spec.rb +84 -84
  1725. data/spec/unit/knife/role_run_list_remove_spec.rb +92 -92
  1726. data/spec/unit/knife/role_run_list_replace_spec.rb +98 -98
  1727. data/spec/unit/knife/role_run_list_set_spec.rb +89 -89
  1728. data/spec/unit/knife/role_show_spec.rb +59 -59
  1729. data/spec/unit/knife/ssh_spec.rb +426 -426
  1730. data/spec/unit/knife/ssl_check_spec.rb +256 -256
  1731. data/spec/unit/knife/ssl_fetch_spec.rb +222 -222
  1732. data/spec/unit/knife/status_spec.rb +109 -109
  1733. data/spec/unit/knife/tag_create_spec.rb +23 -23
  1734. data/spec/unit/knife/tag_delete_spec.rb +25 -25
  1735. data/spec/unit/knife/tag_list_spec.rb +23 -23
  1736. data/spec/unit/knife/user_create_spec.rb +214 -214
  1737. data/spec/unit/knife/user_delete_spec.rb +65 -65
  1738. data/spec/unit/knife/user_edit_spec.rb +66 -66
  1739. data/spec/unit/knife/user_list_spec.rb +36 -36
  1740. data/spec/unit/knife/user_reregister_spec.rb +74 -74
  1741. data/spec/unit/knife/user_show_spec.rb +65 -65
  1742. data/spec/unit/knife_spec.rb +561 -561
  1743. data/spec/unit/lib_backcompat_spec.rb +34 -34
  1744. data/spec/unit/log/syslog_spec.rb +53 -53
  1745. data/spec/unit/log/winevt_spec.rb +55 -55
  1746. data/spec/unit/log_spec.rb +24 -24
  1747. data/spec/unit/lwrp_spec.rb +777 -777
  1748. data/spec/unit/mash_spec.rb +51 -51
  1749. data/spec/unit/mixin/api_version_request_handling_spec.rb +126 -126
  1750. data/spec/unit/mixin/checksum_spec.rb +54 -54
  1751. data/spec/unit/mixin/command_spec.rb +107 -107
  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 -83
  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 +302 -302
  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/versioned_api_spec.rb +107 -107
  1771. data/spec/unit/mixin/which.rb +160 -160
  1772. data/spec/unit/mixin/windows_architecture_helper_spec.rb +85 -85
  1773. data/spec/unit/mixin/xml_escape_spec.rb +54 -54
  1774. data/spec/unit/monkey_patches/uri_spec.rb +34 -34
  1775. data/spec/unit/monologger_spec.rb +45 -45
  1776. data/spec/unit/node/attribute_spec.rb +1244 -1244
  1777. data/spec/unit/node/immutable_collections_spec.rb +214 -214
  1778. data/spec/unit/node/vivid_mash_spec.rb +353 -353
  1779. data/spec/unit/node_map_spec.rb +170 -170
  1780. data/spec/unit/node_spec.rb +1836 -1836
  1781. data/spec/unit/org_spec.rb +196 -196
  1782. data/spec/unit/platform/query_helpers_spec.rb +220 -220
  1783. data/spec/unit/platform_spec.rb +269 -269
  1784. data/spec/unit/policy_builder/dynamic_spec.rb +273 -273
  1785. data/spec/unit/policy_builder/expand_node_object_spec.rb +336 -336
  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 +720 -720
  1790. data/spec/unit/property_spec.rb +1227 -1227
  1791. data/spec/unit/provider/apt_repository_spec.rb +189 -189
  1792. data/spec/unit/provider/apt_update_spec.rb +114 -114
  1793. data/spec/unit/provider/breakpoint_spec.rb +53 -53
  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 +1010 -1010
  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 +85 -85
  1807. data/spec/unit/provider/execute_spec.rb +242 -242
  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 +727 -727
  1811. data/spec/unit/provider/group/dscl_spec.rb +331 -331
  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 +73 -73
  1824. data/spec/unit/provider/ifconfig_spec.rb +194 -194
  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 +237 -237
  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 +481 -481
  1838. data/spec/unit/provider/package/cab_spec.rb +272 -272
  1839. data/spec/unit/provider/package/chocolatey_spec.rb +489 -489
  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/easy_install_spec.rb +114 -114
  1843. data/spec/unit/provider/package/freebsd/pkg_spec.rb +274 -274
  1844. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +148 -148
  1845. data/spec/unit/provider/package/freebsd/port_spec.rb +163 -163
  1846. data/spec/unit/provider/package/homebrew_spec.rb +292 -292
  1847. data/spec/unit/provider/package/ips_spec.rb +233 -233
  1848. data/spec/unit/provider/package/macports_spec.rb +203 -203
  1849. data/spec/unit/provider/package/msu_spec.rb +283 -283
  1850. data/spec/unit/provider/package/openbsd_spec.rb +132 -132
  1851. data/spec/unit/provider/package/pacman_spec.rb +194 -194
  1852. data/spec/unit/provider/package/paludis_spec.rb +134 -134
  1853. data/spec/unit/provider/package/portage_spec.rb +315 -315
  1854. data/spec/unit/provider/package/powershell_spec.rb +337 -337
  1855. data/spec/unit/provider/package/rpm_spec.rb +429 -429
  1856. data/spec/unit/provider/package/rubygems_spec.rb +824 -824
  1857. data/spec/unit/provider/package/smartos_spec.rb +110 -110
  1858. data/spec/unit/provider/package/solaris_spec.rb +167 -167
  1859. data/spec/unit/provider/package/windows/exe_spec.rb +201 -201
  1860. data/spec/unit/provider/package/windows/msi_spec.rb +168 -168
  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 +348 -348
  1865. data/spec/unit/provider/package_spec.rb +949 -949
  1866. data/spec/unit/provider/powershell_script_spec.rb +106 -106
  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 +94 -94
  1872. data/spec/unit/provider/remote_file/ftp_spec.rb +217 -217
  1873. data/spec/unit/provider/remote_file/http_spec.rb +322 -322
  1874. data/spec/unit/provider/remote_file/local_file_spec.rb +105 -105
  1875. data/spec/unit/provider/remote_file/network_file_spec.rb +45 -45
  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 +248 -248
  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 +375 -375
  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 +335 -335
  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 +255 -255
  1895. data/spec/unit/provider/service/systemd_service_spec.rb +370 -370
  1896. data/spec/unit/provider/service/upstart_service_spec.rb +364 -364
  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 +885 -885
  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/dscl_spec.rb +902 -902
  1904. data/spec/unit/provider/user/linux_spec.rb +112 -112
  1905. data/spec/unit/provider/user/pw_spec.rb +255 -255
  1906. data/spec/unit/provider/user/solaris_spec.rb +178 -178
  1907. data/spec/unit/provider/user/windows_spec.rb +185 -185
  1908. data/spec/unit/provider/user_spec.rb +478 -478
  1909. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +46 -46
  1910. data/spec/unit/provider/yum_repository_spec.rb +35 -35
  1911. data/spec/unit/provider_resolver_spec.rb +939 -939
  1912. data/spec/unit/provider_spec.rb +198 -198
  1913. data/spec/unit/pure_application_spec.rb +32 -32
  1914. data/spec/unit/recipe_spec.rb +758 -758
  1915. data/spec/unit/resource/apt_package_spec.rb +38 -38
  1916. data/spec/unit/resource/apt_repository_spec.rb +50 -50
  1917. data/spec/unit/resource/apt_update_spec.rb +50 -50
  1918. data/spec/unit/resource/bash_spec.rb +40 -40
  1919. data/spec/unit/resource/batch_spec.rb +49 -49
  1920. data/spec/unit/resource/breakpoint_spec.rb +47 -47
  1921. data/spec/unit/resource/cab_package_spec.rb +38 -38
  1922. data/spec/unit/resource/chef_gem_spec.rb +157 -157
  1923. data/spec/unit/resource/chocolatey_package_spec.rb +79 -79
  1924. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -45
  1925. data/spec/unit/resource/conditional_spec.rb +254 -254
  1926. data/spec/unit/resource/cookbook_file_spec.rb +88 -88
  1927. data/spec/unit/resource/cron_spec.rb +186 -186
  1928. data/spec/unit/resource/csh_spec.rb +40 -40
  1929. data/spec/unit/resource/deploy_revision_spec.rb +42 -42
  1930. data/spec/unit/resource/deploy_spec.rb +283 -283
  1931. data/spec/unit/resource/directory_spec.rb +82 -82
  1932. data/spec/unit/resource/dnf_package_spec.rb +99 -99
  1933. data/spec/unit/resource/dpkg_package_spec.rb +32 -32
  1934. data/spec/unit/resource/dsc_resource_spec.rb +102 -102
  1935. data/spec/unit/resource/dsc_script_spec.rb +134 -134
  1936. data/spec/unit/resource/easy_install_package_spec.rb +39 -39
  1937. data/spec/unit/resource/env_spec.rb +85 -85
  1938. data/spec/unit/resource/erl_call_spec.rb +81 -81
  1939. data/spec/unit/resource/execute_spec.rb +249 -249
  1940. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -103
  1941. data/spec/unit/resource/file/verification_spec.rb +139 -139
  1942. data/spec/unit/resource/file_spec.rb +130 -130
  1943. data/spec/unit/resource/freebsd_package_spec.rb +87 -87
  1944. data/spec/unit/resource/gem_package_spec.rb +42 -42
  1945. data/spec/unit/resource/git_spec.rb +50 -50
  1946. data/spec/unit/resource/group_spec.rb +162 -162
  1947. data/spec/unit/resource/homebrew_package_spec.rb +50 -50
  1948. data/spec/unit/resource/http_request_spec.rb +59 -59
  1949. data/spec/unit/resource/ifconfig_spec.rb +109 -109
  1950. data/spec/unit/resource/ips_package_spec.rb +40 -40
  1951. data/spec/unit/resource/ksh_spec.rb +40 -40
  1952. data/spec/unit/resource/launchd_spec.rb +32 -32
  1953. data/spec/unit/resource/link_spec.rb +134 -134
  1954. data/spec/unit/resource/log_spec.rb +73 -73
  1955. data/spec/unit/resource/macports_package_spec.rb +32 -32
  1956. data/spec/unit/resource/mdadm_spec.rb +107 -107
  1957. data/spec/unit/resource/mount_spec.rb +215 -215
  1958. data/spec/unit/resource/msu_package_spec.rb +49 -49
  1959. data/spec/unit/resource/ohai_spec.rb +61 -61
  1960. data/spec/unit/resource/openbsd_package_spec.rb +48 -48
  1961. data/spec/unit/resource/osx_profile_spec.rb +62 -62
  1962. data/spec/unit/resource/package_spec.rb +98 -98
  1963. data/spec/unit/resource/pacman_package_spec.rb +32 -32
  1964. data/spec/unit/resource/perl_spec.rb +40 -40
  1965. data/spec/unit/resource/portage_package_spec.rb +38 -38
  1966. data/spec/unit/resource/powershell_package_spec.rb +68 -68
  1967. data/spec/unit/resource/powershell_script_spec.rb +136 -136
  1968. data/spec/unit/resource/python_spec.rb +40 -40
  1969. data/spec/unit/resource/registry_key_spec.rb +215 -215
  1970. data/spec/unit/resource/remote_directory_spec.rb +97 -97
  1971. data/spec/unit/resource/remote_file_spec.rb +207 -207
  1972. data/spec/unit/resource/resource_notification_spec.rb +169 -169
  1973. data/spec/unit/resource/route_spec.rb +107 -107
  1974. data/spec/unit/resource/rpm_package_spec.rb +46 -46
  1975. data/spec/unit/resource/ruby_block_spec.rb +61 -61
  1976. data/spec/unit/resource/ruby_spec.rb +40 -40
  1977. data/spec/unit/resource/scm_spec.rb +193 -193
  1978. data/spec/unit/resource/script_spec.rb +44 -44
  1979. data/spec/unit/resource/service_spec.rb +179 -179
  1980. data/spec/unit/resource/smartos_package_spec.rb +33 -33
  1981. data/spec/unit/resource/solaris_package_spec.rb +42 -42
  1982. data/spec/unit/resource/subversion_spec.rb +71 -71
  1983. data/spec/unit/resource/systemd_unit_spec.rb +133 -133
  1984. data/spec/unit/resource/template_spec.rb +210 -210
  1985. data/spec/unit/resource/timestamped_deploy_spec.rb +32 -32
  1986. data/spec/unit/resource/user_spec.rb +133 -133
  1987. data/spec/unit/resource/windows_package_spec.rb +95 -95
  1988. data/spec/unit/resource/windows_service_spec.rb +49 -49
  1989. data/spec/unit/resource/yum_package_spec.rb +150 -150
  1990. data/spec/unit/resource/yum_repository_spec.rb +49 -49
  1991. data/spec/unit/resource_builder_spec.rb +1 -1
  1992. data/spec/unit/resource_collection/resource_list_spec.rb +137 -137
  1993. data/spec/unit/resource_collection/resource_set_spec.rb +199 -199
  1994. data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -144
  1995. data/spec/unit/resource_collection_spec.rb +399 -399
  1996. data/spec/unit/resource_definition_spec.rb +117 -117
  1997. data/spec/unit/resource_reporter_spec.rb +782 -782
  1998. data/spec/unit/resource_resolver_spec.rb +52 -52
  1999. data/spec/unit/resource_spec.rb +1141 -1141
  2000. data/spec/unit/rest/auth_credentials_spec.rb +292 -292
  2001. data/spec/unit/rest_spec.rb +753 -753
  2002. data/spec/unit/role_spec.rb +358 -358
  2003. data/spec/unit/run_context/child_run_context_spec.rb +133 -133
  2004. data/spec/unit/run_context/cookbook_compiler_spec.rb +226 -226
  2005. data/spec/unit/run_context_spec.rb +241 -241
  2006. data/spec/unit/run_list/run_list_expansion_spec.rb +144 -144
  2007. data/spec/unit/run_list/run_list_item_spec.rb +117 -117
  2008. data/spec/unit/run_list/versioned_recipe_list_spec.rb +194 -194
  2009. data/spec/unit/run_list_spec.rb +312 -312
  2010. data/spec/unit/run_lock_spec.rb +140 -140
  2011. data/spec/unit/run_status_spec.rb +144 -144
  2012. data/spec/unit/runner_spec.rb +412 -412
  2013. data/spec/unit/scan_access_control_spec.rb +183 -183
  2014. data/spec/unit/search/query_spec.rb +290 -290
  2015. data/spec/unit/server_api_spec.rb +50 -50
  2016. data/spec/unit/server_api_versions_spec.rb +44 -44
  2017. data/spec/unit/shell/model_wrapper_spec.rb +96 -96
  2018. data/spec/unit/shell/shell_ext_spec.rb +153 -153
  2019. data/spec/unit/shell/shell_session_spec.rb +195 -195
  2020. data/spec/unit/shell_out_spec.rb +18 -18
  2021. data/spec/unit/shell_spec.rb +162 -162
  2022. data/spec/unit/user_spec.rb +275 -275
  2023. data/spec/unit/user_v1_spec.rb +583 -583
  2024. data/spec/unit/util/backup_spec.rb +141 -141
  2025. data/spec/unit/util/diff_spec.rb +576 -576
  2026. data/spec/unit/util/dsc/configuration_generator_spec.rb +193 -193
  2027. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +248 -248
  2028. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +200 -200
  2029. data/spec/unit/util/dsc/resource_store.rb +78 -78
  2030. data/spec/unit/util/editor_spec.rb +152 -152
  2031. data/spec/unit/util/file_edit_spec.rb +224 -224
  2032. data/spec/unit/util/powershell/cmdlet_spec.rb +106 -106
  2033. data/spec/unit/util/powershell/ps_credential_spec.rb +44 -44
  2034. data/spec/unit/util/selinux_spec.rb +160 -160
  2035. data/spec/unit/util/threaded_job_queue_spec.rb +51 -51
  2036. data/spec/unit/version/platform_spec.rb +60 -60
  2037. data/spec/unit/version_class_spec.rb +171 -171
  2038. data/spec/unit/version_constraint/platform_spec.rb +45 -45
  2039. data/spec/unit/version_constraint_spec.rb +179 -179
  2040. data/spec/unit/win32/error_spec.rb +67 -67
  2041. data/spec/unit/win32/registry_spec.rb +394 -394
  2042. data/spec/unit/win32/security_spec.rb +66 -66
  2043. data/spec/unit/windows_service_spec.rb +116 -116
  2044. data/tasks/announce.rb +58 -58
  2045. data/tasks/bin/bundle-platform +20 -20
  2046. data/tasks/bin/bundle-platform.bat +2 -2
  2047. data/tasks/bin/bundler_patch.rb +27 -27
  2048. data/tasks/bin/create-override-gemfile +110 -110
  2049. data/tasks/bin/gem-version-diff +37 -37
  2050. data/tasks/bin/run_external_test +47 -47
  2051. data/tasks/bundle.rb +97 -97
  2052. data/tasks/bundle_util.rb +110 -110
  2053. data/tasks/cbgb.rb +84 -84
  2054. data/tasks/changelog.rb +31 -31
  2055. data/tasks/dependencies.rb +151 -151
  2056. data/tasks/gemfile_util.rb +390 -390
  2057. data/tasks/maintainers.rb +211 -211
  2058. data/tasks/rspec.rb +90 -90
  2059. data/tasks/templates/prerelease.md.erb +26 -26
  2060. data/tasks/templates/release.md.erb +26 -26
  2061. metadata +4 -4
@@ -1,37 +1,37 @@
1
- # Author:: Prajakta Purohit (<prajakta@chef.io>)
2
- # Copyright:: Copyright 2009-2016, Chef Software Inc.
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
-
18
- require "securerandom"
19
- require "singleton"
20
-
21
- class Chef
22
- class RequestID
23
- include Singleton
24
-
25
- def reset_request_id
26
- @request_id = nil
27
- end
28
-
29
- def request_id
30
- @request_id ||= generate_request_id
31
- end
32
-
33
- def generate_request_id
34
- SecureRandom.uuid
35
- end
36
- end
37
- end
1
+ # Author:: Prajakta Purohit (<prajakta@chef.io>)
2
+ # Copyright:: Copyright 2009-2016, Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require "securerandom"
19
+ require "singleton"
20
+
21
+ class Chef
22
+ class RequestID
23
+ include Singleton
24
+
25
+ def reset_request_id
26
+ @request_id = nil
27
+ end
28
+
29
+ def request_id
30
+ @request_id ||= generate_request_id
31
+ end
32
+
33
+ def generate_request_id
34
+ SecureRandom.uuid
35
+ end
36
+ end
37
+ end
@@ -1,9 +1,9 @@
1
- class Chef
2
-
3
- # This module exists to hide conflicting constant names from the DSL.
4
- # Hopefully we'll have a better/prettier/more sustainable solution in the
5
- # future, but for now this will fix a regression introduced in Chef 0.10.10
6
- # (conflict with the Win32 namespace)
7
- module ReservedNames
8
- end
9
- end
1
+ class Chef
2
+
3
+ # This module exists to hide conflicting constant names from the DSL.
4
+ # Hopefully we'll have a better/prettier/more sustainable solution in the
5
+ # future, but for now this will fix a regression introduced in Chef 0.10.10
6
+ # (conflict with the Win32 namespace)
7
+ module ReservedNames
8
+ end
9
+ end
data/lib/chef/resource.rb CHANGED
@@ -1,1626 +1,1626 @@
1
- #
2
- # Author:: Adam Jacob (<adam@chef.io>)
3
- # Author:: Christopher Walters (<cw@chef.io>)
4
- # Author:: John Keiser (<jkeiser@chef.io)
5
- # Copyright:: Copyright 2008-2016, Chef, Inc.
6
- # License:: Apache License, Version 2.0
7
- #
8
- # Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
- # See the License for the specific language governing permissions and
18
- # limitations under the License.
19
- #
20
-
21
- require "chef/exceptions"
22
- require "chef/dsl/data_query"
23
- require "chef/dsl/registry_helper"
24
- require "chef/dsl/reboot_pending"
25
- require "chef/dsl/resources"
26
- require "chef/mixin/convert_to_class_name"
27
- require "chef/guard_interpreter/resource_guard_interpreter"
28
- require "chef/resource/conditional"
29
- require "chef/resource/conditional_action_not_nothing"
30
- require "chef/resource/action_class"
31
- require "chef/resource_collection"
32
- require "chef/node_map"
33
- require "chef/node"
34
- require "chef/platform"
35
- require "chef/resource/resource_notification"
36
- require "chef/provider_resolver"
37
- require "chef/resource_resolver"
38
- require "chef/provider"
39
- require "set"
40
-
41
- require "chef/mixin/deprecation"
42
- require "chef/mixin/properties"
43
- require "chef/mixin/provides"
44
- require "chef/dsl/universal"
45
-
46
- class Chef
47
- class Resource
48
-
49
- #
50
- # Generic User DSL (not resource-specific)
51
- #
52
-
53
- include Chef::DSL::DataQuery
54
- include Chef::DSL::RegistryHelper
55
- include Chef::DSL::RebootPending
56
- extend Chef::Mixin::Provides
57
-
58
- include Chef::DSL::Universal
59
-
60
- # Bring in `property` and `property_type`
61
- include Chef::Mixin::Properties
62
-
63
- #
64
- # The name of this particular resource.
65
- #
66
- # This special resource attribute is set automatically from the declaration
67
- # of the resource, e.g.
68
- #
69
- # execute 'Vitruvius' do
70
- # command 'ls'
71
- # end
72
- #
73
- # Will set the name to "Vitruvius".
74
- #
75
- # This is also used in to_s to show the resource name, e.g. `execute[Vitruvius]`.
76
- #
77
- # This is also used for resource notifications and subscribes in the same manner.
78
- #
79
- # This will coerce any object into a string via #to_s. Arrays are a special case
80
- # so that `package ["foo", "bar"]` becomes package[foo, bar] instead of the more
81
- # awkward `package[["foo", "bar"]]` that #to_s would produce.
82
- #
83
- # @param name [Object] The name to set, typically a String or Array
84
- # @return [String] The name of this Resource.
85
- #
86
- property :name, String, coerce: proc { |v| v.is_a?(Array) ? v.join(", ") : v.to_s }, desired_state: false
87
-
88
- #
89
- # The node the current Chef run is using.
90
- #
91
- # Corresponds to `run_context.node`.
92
- #
93
- # @return [Chef::Node] The node the current Chef run is using.
94
- #
95
- def node
96
- run_context && run_context.node
97
- end
98
-
99
- #
100
- # Find existing resources by searching the list of existing resources. Possible
101
- # forms are:
102
- #
103
- # find(:file => "foobar")
104
- # find(:file => [ "foobar", "baz" ])
105
- # find("file[foobar]", "file[baz]")
106
- # find("file[foobar,baz]")
107
- #
108
- # Calls `run_context.resource_collection.find(*args)`
109
- #
110
- # @return the matching resource, or an Array of matching resources.
111
- #
112
- # @raise ArgumentError if you feed it bad lookup information
113
- # @raise RuntimeError if it can't find the resources you are looking for.
114
- #
115
- def resources(*args)
116
- run_context.resource_collection.find(*args)
117
- end
118
-
119
- #
120
- # Resource User Interface (for users)
121
- #
122
-
123
- #
124
- # Create a new Resource.
125
- #
126
- # @param name The name of this resource (corresponds to the #name attribute,
127
- # used for notifications to this resource).
128
- # @param run_context The context of the Chef run. Corresponds to #run_context.
129
- #
130
- def initialize(name, run_context = nil)
131
- name(name) unless name.nil?
132
- @run_context = run_context
133
- @noop = nil
134
- @before = nil
135
- @params = Hash.new
136
- @provider = nil
137
- @allowed_actions = self.class.allowed_actions.to_a
138
- @action = self.class.default_action
139
- @updated = false
140
- @updated_by_last_action = false
141
- @supports = {}
142
- @ignore_failure = false
143
- @retries = 0
144
- @retry_delay = 2
145
- @not_if = []
146
- @only_if = []
147
- @source_line = nil
148
- # We would like to raise an error when the user gives us a guard
149
- # interpreter and a ruby_block to the guard. In order to achieve this
150
- # we need to understand when the user overrides the default guard
151
- # interpreter. Therefore we store the default separately in a different
152
- # attribute.
153
- @guard_interpreter = nil
154
- @default_guard_interpreter = :default
155
- @elapsed_time = 0
156
- @sensitive = false
157
- end
158
-
159
- #
160
- # The action or actions that will be taken when this resource is run.
161
- #
162
- # @param arg [Array[Symbol], Symbol] A list of actions (e.g. `:create`)
163
- # @return [Array[Symbol]] the list of actions.
164
- #
165
- def action(arg = nil)
166
- if arg
167
- arg = Array(arg).map(&:to_sym)
168
- arg.each do |action|
169
- validate(
170
- { action: action },
171
- { action: { kind_of: Symbol, equal_to: allowed_actions } }
172
- )
173
- end
174
- @action = arg
175
- else
176
- @action
177
- end
178
- end
179
-
180
- # Alias for normal assigment syntax.
181
- alias_method :action=, :action
182
-
183
- #
184
- # Force a delayed notification into this resource's run_context.
185
- #
186
- # This should most likely be paired with action :nothing
187
- #
188
- # @param arg [Array[Symbol], Symbol] A list of actions (e.g. `:create`)
189
- #
190
- def delayed_action(arg)
191
- arg = Array(arg).map(&:to_sym)
192
- arg.map do |action|
193
- validate(
194
- { action: action },
195
- { action: { kind_of: Symbol, equal_to: allowed_actions } }
196
- )
197
- # the resource effectively sends a delayed notification to itself
198
- run_context.add_delayed_action(Notification.new(self, action, self))
199
- end
200
- end
201
-
202
- #
203
- # Sets up a notification that will run a particular action on another resource
204
- # if and when *this* resource is updated by an action.
205
- #
206
- # If the action does not update this resource, the notification never triggers.
207
- #
208
- # Only one resource may be specified per notification.
209
- #
210
- # `delayed` notifications will only *ever* happen once per resource, so if
211
- # multiple resources all notify a single resource to perform the same action,
212
- # the action will only happen once. However, if they ask for different
213
- # actions, each action will happen once, in the order they were updated.
214
- #
215
- # `immediate` notifications will cause the action to be triggered once per
216
- # notification, regardless of how many other resources have triggered the
217
- # notification as well.
218
- #
219
- # @param action The action to run on the other resource.
220
- # @param resource_spec [String, Hash, Chef::Resource] The resource to run.
221
- # @param timing [String, Symbol] When to notify. Has these values:
222
- # - `delayed`: Will run the action on the other resource after all other
223
- # actions have been run. This is the default.
224
- # - `immediate`, `immediately`: Will run the action on the other resource
225
- # immediately (before any other action is run).
226
- # - `before`: Will run the action on the other resource
227
- # immediately *before* the action is actually run.
228
- #
229
- # @example Resource by string
230
- # file '/foo.txt' do
231
- # content 'hi'
232
- # notifies :create, 'file[/bar.txt]'
233
- # end
234
- # file '/bar.txt' do
235
- # action :nothing
236
- # content 'hi'
237
- # end
238
- # @example Resource by hash
239
- # file '/foo.txt' do
240
- # content 'hi'
241
- # notifies :create, file: '/bar.txt'
242
- # end
243
- # file '/bar.txt' do
244
- # action :nothing
245
- # content 'hi'
246
- # end
247
- # @example Direct Resource
248
- # bar = file '/bar.txt' do
249
- # action :nothing
250
- # content 'hi'
251
- # end
252
- # file '/foo.txt' do
253
- # content 'hi'
254
- # notifies :create, bar
255
- # end
256
- #
257
- def notifies(action, resource_spec, timing = :delayed)
258
- # when using old-style resources(:template => "/foo.txt") style, you
259
- # could end up with multiple resources.
260
- validate_resource_spec!(resource_spec)
261
-
262
- resources = [ resource_spec ].flatten
263
- resources.each do |resource|
264
-
265
- case timing.to_s
266
- when "delayed"
267
- notifies_delayed(action, resource)
268
- when "immediate", "immediately"
269
- notifies_immediately(action, resource)
270
- when "before"
271
- notifies_before(action, resource)
272
- else
273
- raise ArgumentError, "invalid timing: #{timing} for notifies(#{action}, #{resources.inspect}, #{timing}) resource #{self} "\
274
- "Valid timings are: :delayed, :immediate, :immediately, :before"
275
- end
276
- end
277
-
278
- true
279
- end
280
-
281
- #
282
- # Token class to hold an unresolved subscribes call with an associated
283
- # run context.
284
- #
285
- # @api private
286
- # @see Resource#subscribes
287
- class UnresolvedSubscribes < self
288
- # The full key ise given as the name in {Resource#subscribes}
289
- alias_method :to_s, :name
290
- alias_method :declared_key, :name
291
- end
292
-
293
- #
294
- # Subscribes to updates from other resources, causing a particular action to
295
- # run on *this* resource when the other resource is updated.
296
- #
297
- # If multiple resources are specified, this resource action will be run if
298
- # *any* of them change.
299
- #
300
- # This notification will only trigger *once*, no matter how many other
301
- # resources are updated (or how many actions are run by a particular resource).
302
- #
303
- # @param action The action to run on the other resource.
304
- # @param resources [String, Resource, Array[String, Resource]] The resources to subscribe to.
305
- # @param timing [String, Symbol] When to notify. Has these values:
306
- # - `delayed`: An update will cause the action to run after all other
307
- # actions have been run. This is the default.
308
- # - `immediate`, `immediately`: The action will run immediately following
309
- # the other resource being updated.
310
- # - `before`: The action will run immediately before the
311
- # other resource is updated.
312
- #
313
- # @example Resources by string
314
- # file '/foo.txt' do
315
- # content 'hi'
316
- # action :nothing
317
- # subscribes :create, 'file[/bar.txt]'
318
- # end
319
- # file '/bar.txt' do
320
- # content 'hi'
321
- # end
322
- # @example Direct resource
323
- # bar = file '/bar.txt' do
324
- # content 'hi'
325
- # end
326
- # file '/foo.txt' do
327
- # content 'hi'
328
- # action :nothing
329
- # subscribes :create, '/bar.txt'
330
- # end
331
- # @example Multiple resources by string
332
- # file '/foo.txt' do
333
- # content 'hi'
334
- # action :nothing
335
- # subscribes :create, [ 'file[/bar.txt]', 'file[/baz.txt]' ]
336
- # end
337
- # file '/bar.txt' do
338
- # content 'hi'
339
- # end
340
- # file '/baz.txt' do
341
- # content 'hi'
342
- # end
343
- # @example Multiple resources
344
- # bar = file '/bar.txt' do
345
- # content 'hi'
346
- # end
347
- # baz = file '/bar.txt' do
348
- # content 'hi'
349
- # end
350
- # file '/foo.txt' do
351
- # content 'hi'
352
- # action :nothing
353
- # subscribes :create, [ bar, baz ]
354
- # end
355
- #
356
- def subscribes(action, resources, timing = :delayed)
357
- resources = [resources].flatten
358
- resources.each do |resource|
359
- if resource.is_a?(String)
360
- resource = UnresolvedSubscribes.new(resource, run_context)
361
- end
362
- if resource.run_context.nil?
363
- resource.run_context = run_context
364
- end
365
- resource.notifies(action, self, timing)
366
- end
367
- true
368
- end
369
-
370
- #
371
- # A command or block that indicates whether to actually run this resource.
372
- # The command or block is run just before the action actually executes, and
373
- # the action will be skipped if the block returns false.
374
- #
375
- # If a block is specified, it must return `true` in order for the Resource
376
- # to be executed.
377
- #
378
- # If a command is specified, the resource's #guard_interpreter will run the
379
- # command and interpret the results according to `opts`. For example, the
380
- # default `execute` resource will be treated as `false` if the command
381
- # returns a non-zero exit code, and `true` if it returns 0. Thus, in the
382
- # default case:
383
- #
384
- # - `only_if "your command"` will perform the action only if `your command`
385
- # returns 0.
386
- # - `only_if "your command", valid_exit_codes: [ 1, 2, 3 ]` will perform the
387
- # action only if `your command` returns 1, 2, or 3.
388
- #
389
- # @param command [String] A string to execute.
390
- # @param opts [Hash] Options control the execution of the command
391
- # @param block [Proc] A ruby block to run. Ignored if a command is given.
392
- #
393
- def only_if(command = nil, opts = {}, &block)
394
- if command || block_given?
395
- @only_if << Conditional.only_if(self, command, opts, &block)
396
- end
397
- @only_if
398
- end
399
-
400
- #
401
- # A command or block that indicates whether to actually run this resource.
402
- # The command or block is run just before the action actually executes, and
403
- # the action will be skipped if the block returns true.
404
- #
405
- # If a block is specified, it must return `false` in order for the Resource
406
- # to be executed.
407
- #
408
- # If a command is specified, the resource's #guard_interpreter will run the
409
- # command and interpret the results according to `opts`. For example, the
410
- # default `execute` resource will be treated as `false` if the command
411
- # returns a non-zero exit code, and `true` if it returns 0. Thus, in the
412
- # default case:
413
- #
414
- # - `not_if "your command"` will perform the action only if `your command`
415
- # returns a non-zero code.
416
- # - `only_if "your command", valid_exit_codes: [ 1, 2, 3 ]` will perform the
417
- # action only if `your command` returns something other than 1, 2, or 3.
418
- #
419
- # @param command [String] A string to execute.
420
- # @param opts [Hash] Options control the execution of the command
421
- # @param block [Proc] A ruby block to run. Ignored if a command is given.
422
- #
423
- def not_if(command = nil, opts = {}, &block)
424
- if command || block_given?
425
- @not_if << Conditional.not_if(self, command, opts, &block)
426
- end
427
- @not_if
428
- end
429
-
430
- #
431
- # The number of times to retry this resource if it fails by throwing an
432
- # exception while running an action. Default: 0
433
- #
434
- # When the retries have run out, the Resource will throw the last
435
- # exception.
436
- #
437
- # @param arg [Integer] The number of retries.
438
- # @return [Integer] The number of retries.
439
- #
440
- def retries(arg = nil)
441
- set_or_return(:retries, arg, kind_of: Integer)
442
- end
443
- attr_writer :retries
444
-
445
- #
446
- # The number of seconds to wait between retries. Default: 2.
447
- #
448
- # @param arg [Integer] The number of seconds to wait between retries.
449
- # @return [Integer] The number of seconds to wait between retries.
450
- #
451
- def retry_delay(arg = nil)
452
- set_or_return(:retry_delay, arg, kind_of: Integer)
453
- end
454
- attr_writer :retry_delay
455
-
456
- #
457
- # Whether to treat this resource's data as sensitive. If set, no resource
458
- # data will be displayed in log output.
459
- #
460
- # @param arg [Boolean] Whether this resource is sensitive or not.
461
- # @return [Boolean] Whether this resource is sensitive or not.
462
- #
463
- def sensitive(arg = nil)
464
- set_or_return(:sensitive, arg, :kind_of => [ TrueClass, FalseClass ])
465
- end
466
- attr_writer :sensitive
467
-
468
- # ??? TODO unreferenced. Delete?
469
- attr_reader :not_if_args
470
- # ??? TODO unreferenced. Delete?
471
- attr_reader :only_if_args
472
-
473
- #
474
- # The time it took (in seconds) to run the most recently-run action. Not
475
- # cumulative across actions. This is set to 0 as soon as a new action starts
476
- # running, and set to the elapsed time at the end of the action.
477
- #
478
- # @return [Integer] The time (in seconds) it took to process the most recent
479
- # action. Not cumulative.
480
- #
481
- attr_reader :elapsed_time
482
-
483
- #
484
- # The guard interpreter that will be used to process `only_if` and `not_if`
485
- # statements. If left unset, the #default_guard_interpreter will be used.
486
- #
487
- # Must be a resource class like `Chef::Resource::Execute`, or
488
- # a corresponding to the name of a resource. The resource must descend from
489
- # `Chef::Resource::Execute`.
490
- #
491
- # TODO this needs to be coerced on input so that retrieval is consistent.
492
- #
493
- # @param arg [Class, Symbol, String] The Guard interpreter resource class/
494
- # symbol/name.
495
- # @return [Class, Symbol, String] The Guard interpreter resource.
496
- #
497
- def guard_interpreter(arg = nil)
498
- if arg.nil?
499
- @guard_interpreter || @default_guard_interpreter
500
- else
501
- set_or_return(:guard_interpreter, arg, :kind_of => Symbol)
502
- end
503
- end
504
-
505
- #
506
- # Get the value of the state attributes in this resource as a hash.
507
- #
508
- # Does not include properties that are not set (unless they are identity
509
- # properties).
510
- #
511
- # @return [Hash{Symbol => Object}] A Hash of attribute => value for the
512
- # Resource class's `state_attrs`.
513
- #
514
- def state_for_resource_reporter
515
- state = {}
516
- state_properties = self.class.state_properties
517
- state_properties.each do |property|
518
- if property.identity? || property.is_set?(self)
519
- state[property.name] = property.sensitive? ? "*sensitive value suppressed*" : send(property.name)
520
- end
521
- end
522
- state
523
- end
524
-
525
- #
526
- # Since there are collisions with LWRP parameters named 'state' this
527
- # method is not used by the resource_reporter and is most likely unused.
528
- # It certainly cannot be relied upon and cannot be fixed.
529
- #
530
- # @deprecated
531
- #
532
- alias_method :state, :state_for_resource_reporter
533
-
534
- #
535
- # The value of the identity of this resource.
536
- #
537
- # - If there are no identity properties on the resource, `name` is returned.
538
- # - If there is exactly one identity property on the resource, it is returned.
539
- # - If there are more than one, they are returned in a hash.
540
- #
541
- # @return [Object,Hash<Symbol,Object>] The identity of this resource.
542
- #
543
- def identity
544
- result = {}
545
- identity_properties = self.class.identity_properties
546
- identity_properties.each do |property|
547
- result[property.name] = send(property.name)
548
- end
549
- return result.values.first if identity_properties.size == 1
550
- result
551
- end
552
-
553
- #
554
- # Whether to ignore failures. If set to `true`, and this resource when an
555
- # action is run, the resource will be marked as failed but no exception will
556
- # be thrown (and no error will be output). Defaults to `false`.
557
- #
558
- # TODO ignore_failure and retries seem to be mutually exclusive; I doubt
559
- # that was intended.
560
- #
561
- # @param arg [Boolean] Whether to ignore failures.
562
- # @return Whether this resource will ignore failures.
563
- #
564
- def ignore_failure(arg = nil)
565
- set_or_return(:ignore_failure, arg, kind_of: [ TrueClass, FalseClass ])
566
- end
567
- attr_writer :ignore_failure
568
-
569
- #
570
- # Equivalent to #ignore_failure.
571
- #
572
- alias :epic_fail :ignore_failure
573
-
574
- #
575
- # Make this resource into an exact (shallow) copy of the other resource.
576
- #
577
- # @param resource [Chef::Resource] The resource to copy from.
578
- #
579
- def load_from(resource)
580
- resource.instance_variables.each do |iv|
581
- unless iv == :@source_line || iv == :@action || iv == :@not_if || iv == :@only_if
582
- instance_variable_set(iv, resource.instance_variable_get(iv))
583
- end
584
- end
585
- end
586
-
587
- #
588
- # Runs the given action on this resource, immediately.
589
- #
590
- # @param action The action to run (e.g. `:create`)
591
- # @param notification_type The notification type that triggered this (if any)
592
- # @param notifying_resource The resource that triggered this notification (if any)
593
- #
594
- # @raise Any error that occurs during the actual action.
595
- #
596
- def run_action(action, notification_type = nil, notifying_resource = nil)
597
- # reset state in case of multiple actions on the same resource.
598
- @elapsed_time = 0
599
- start_time = Time.now
600
- events.resource_action_start(self, action, notification_type, notifying_resource)
601
- # Try to resolve lazy/forward references in notifications again to handle
602
- # the case where the resource was defined lazily (ie. in a ruby_block)
603
- resolve_notification_references
604
- validate_action(action)
605
-
606
- if Chef::Config[:verbose_logging] || Chef::Log.level == :debug
607
- # This can be noisy
608
- Chef::Log.info("Processing #{self} action #{action} (#{defined_at})")
609
- end
610
-
611
- # ensure that we don't leave @updated_by_last_action set to true
612
- # on accident
613
- updated_by_last_action(false)
614
-
615
- # Don't modify @retries directly and keep it intact, so that the
616
- # recipe_snippet from ResourceFailureInspector can print the value
617
- # that was set in the resource block initially.
618
- remaining_retries = retries
619
-
620
- begin
621
- return if should_skip?(action)
622
- provider_for_action(action).run_action
623
- rescue Exception => e
624
- if ignore_failure
625
- Chef::Log.error("#{custom_exception_message(e)}; ignore_failure is set, continuing")
626
- events.resource_failed(self, action, e)
627
- elsif remaining_retries > 0
628
- events.resource_failed_retriable(self, action, remaining_retries, e)
629
- remaining_retries -= 1
630
- Chef::Log.info("Retrying execution of #{self}, #{remaining_retries} attempt(s) left")
631
- sleep retry_delay
632
- retry
633
- else
634
- events.resource_failed(self, action, e)
635
- raise customize_exception(e)
636
- end
637
- end
638
- ensure
639
- @elapsed_time = Time.now - start_time
640
- # Reporting endpoint doesn't accept a negative resource duration so set it to 0.
641
- # A negative value can occur when a resource changes the system time backwards
642
- @elapsed_time = 0 if @elapsed_time < 0
643
- events.resource_completed(self)
644
- end
645
-
646
- #
647
- # If we are currently initializing the resource, this will be true.
648
- #
649
- # Do NOT use this. It may be removed. It is for internal purposes only.
650
- # @api private
651
- attr_reader :resource_initializing
652
- def resource_initializing=(value)
653
- if value
654
- @resource_initializing = true
655
- else
656
- remove_instance_variable(:@resource_initializing)
657
- end
658
- end
659
-
660
- #
661
- # Generic Ruby and Data Structure Stuff (for user)
662
- #
663
-
664
- def to_s
665
- "#{resource_name}[#{name}]"
666
- end
667
-
668
- def to_text
669
- return "suppressed sensitive resource output" if sensitive
670
- text = "# Declared in #{@source_line}\n\n"
671
- text << "#{resource_name}(\"#{name}\") do\n"
672
-
673
- all_props = {}
674
- self.class.state_properties.map do |p|
675
- all_props[p.name.to_s] = p.sensitive? ? '"*sensitive value suppressed*"' : value_to_text(p.get(self))
676
- end
677
-
678
- ivars = instance_variables.map { |ivar| ivar.to_sym } - HIDDEN_IVARS
679
- ivars.each do |ivar|
680
- iv = ivar.to_s.sub(/^@/, "")
681
- if all_props.keys.include?(iv)
682
- text << " #{iv} #{all_props[iv]}\n"
683
- elsif (value = instance_variable_get(ivar)) && !(value.respond_to?(:empty?) && value.empty?)
684
- text << " #{iv} #{value_to_text(value)}\n"
685
- end
686
- end
687
-
688
- [@not_if, @only_if].flatten.each do |conditional|
689
- text << " #{conditional.to_text}\n"
690
- end
691
- text << "end\n"
692
- end
693
-
694
- def value_to_text(value)
695
- value.respond_to?(:to_text) ? value.to_text : value.inspect
696
- end
697
-
698
- def inspect
699
- ivars = instance_variables.map { |ivar| ivar.to_sym } - FORBIDDEN_IVARS
700
- ivars.inject("<#{self}") do |str, ivar|
701
- str << " #{ivar}: #{instance_variable_get(ivar).inspect}"
702
- end << ">"
703
- end
704
-
705
- # as_json does most of the to_json heavy lifted. It exists here in case activesupport
706
- # is loaded. activesupport will call as_json and skip over to_json. This ensure
707
- # json is encoded as expected
708
- def as_json(*a)
709
- safe_ivars = instance_variables.map { |ivar| ivar.to_sym } - FORBIDDEN_IVARS
710
- instance_vars = Hash.new
711
- safe_ivars.each do |iv|
712
- instance_vars[iv.to_s.sub(/^@/, "")] = instance_variable_get(iv)
713
- end
714
- {
715
- "json_class" => self.class.name,
716
- "instance_vars" => instance_vars,
717
- }
718
- end
719
-
720
- # Serialize this object as a hash
721
- def to_json(*a)
722
- results = as_json
723
- Chef::JSONCompat.to_json(results, *a)
724
- end
725
-
726
- def to_hash
727
- # Grab all current state, then any other ivars (backcompat)
728
- result = {}
729
- self.class.state_properties.each do |p|
730
- result[p.name] = p.get(self)
731
- end
732
- safe_ivars = instance_variables.map { |ivar| ivar.to_sym } - FORBIDDEN_IVARS
733
- safe_ivars.each do |iv|
734
- key = iv.to_s.sub(/^@/, "").to_sym
735
- next if result.has_key?(key)
736
- result[key] = instance_variable_get(iv)
737
- end
738
- result
739
- end
740
-
741
- def self.json_create(o)
742
- resource = new(o["instance_vars"]["@name"])
743
- o["instance_vars"].each do |k, v|
744
- resource.instance_variable_set("@#{k}".to_sym, v)
745
- end
746
- resource
747
- end
748
-
749
- #
750
- # Resource Definition Interface (for resource developers)
751
- #
752
-
753
- include Chef::Mixin::Deprecation
754
-
755
- #
756
- # The provider class for this resource.
757
- #
758
- # If `action :x do ... end` has been declared on this resource or its
759
- # superclasses, this will return the `action_class`.
760
- #
761
- # If this is not set, `provider_for_action` will dynamically determine the
762
- # provider.
763
- #
764
- # @param arg [String, Symbol, Class] Sets the provider class for this resource.
765
- # If passed a String or Symbol, e.g. `:file` or `"file"`, looks up the
766
- # provider based on the name.
767
- #
768
- # @return The provider class for this resource.
769
- #
770
- # @see Chef::Resource.action_class
771
- #
772
- def provider(arg = nil)
773
- klass = if arg.kind_of?(String) || arg.kind_of?(Symbol)
774
- lookup_provider_constant(arg)
775
- else
776
- arg
777
- end
778
- set_or_return(:provider, klass, kind_of: [ Class ]) ||
779
- self.class.action_class
780
- end
781
-
782
- def provider=(arg)
783
- provider(arg)
784
- end
785
-
786
- #
787
- # Set or return the list of "state properties" implemented by the Resource
788
- # subclass.
789
- #
790
- # Equivalent to calling #state_properties and getting `state_properties.keys`.
791
- #
792
- # @deprecated Use state_properties.keys instead. Note that when you declare
793
- # properties with `property`: properties are added to state_properties by
794
- # default, and can be turned off with `desired_state: false`
795
- #
796
- # ```ruby
797
- # property :x # part of desired state
798
- # property :y, desired_state: false # not part of desired state
799
- # ```
800
- #
801
- # @param names [Array<Symbol>] A list of property names to set as desired
802
- # state.
803
- #
804
- # @return [Array<Symbol>] All property names with desired state.
805
- #
806
- def self.state_attrs(*names)
807
- state_properties(*names).map { |property| property.name }
808
- end
809
-
810
- #
811
- # Set the identity of this resource to a particular property.
812
- #
813
- # This drives #identity, which returns data that uniquely refers to a given
814
- # resource on the given node (in such a way that it can be correlated
815
- # across Chef runs).
816
- #
817
- # This method is unnecessary when declaring properties with `property`;
818
- # properties can be added to identity during declaration with
819
- # `identity: true`.
820
- #
821
- # ```ruby
822
- # property :x, identity: true # part of identity
823
- # property :y # not part of identity
824
- # ```
825
- #
826
- # @param name [Symbol] A list of property names to set as the identity.
827
- #
828
- # @return [Symbol] The identity property if there is only one; or `nil` if
829
- # there are more than one.
830
- #
831
- # @raise [ArgumentError] If no arguments are passed and the resource has
832
- # more than one identity property.
833
- #
834
- def self.identity_property(name = nil)
835
- result = identity_properties(*Array(name))
836
- if result.size > 1
837
- raise Chef::Exceptions::MultipleIdentityError, "identity_property cannot be called on an object with more than one identity property (#{result.map { |r| r.name }.join(", ")})."
838
- end
839
- result.first
840
- end
841
-
842
- #
843
- # Set a property as the "identity attribute" for this resource.
844
- #
845
- # Identical to calling #identity_property.first.key.
846
- #
847
- # @param name [Symbol] The name of the property to set.
848
- #
849
- # @return [Symbol]
850
- #
851
- # @deprecated `identity_property` should be used instead.
852
- #
853
- # @raise [ArgumentError] If no arguments are passed and the resource has
854
- # more than one identity property.
855
- #
856
- def self.identity_attr(name = nil)
857
- property = identity_property(name)
858
- return nil if !property
859
- property.name
860
- end
861
-
862
- #
863
- # The guard interpreter that will be used to process `only_if` and `not_if`
864
- # statements by default. If left unset, or set to `:default`, the guard
865
- # interpreter used will be Chef::GuardInterpreter::DefaultGuardInterpreter.
866
- #
867
- # Must be a resource class like `Chef::Resource::Execute`, or
868
- # a corresponding to the name of a resource. The resource must descend from
869
- # `Chef::Resource::Execute`.
870
- #
871
- # TODO this needs to be coerced on input so that retrieval is consistent.
872
- #
873
- # @return [Class, Symbol, String] the default Guard interpreter resource.
874
- #
875
- attr_reader :default_guard_interpreter
876
-
877
- #
878
- # The list of actions this Resource is allowed to have. Setting `action`
879
- # will fail unless it is in this list. Default: [ :nothing ]
880
- #
881
- # @return [Array<Symbol>] The list of actions this Resource is allowed to
882
- # have.
883
- #
884
- attr_accessor :allowed_actions
885
- def allowed_actions(value = NOT_PASSED)
886
- if value != NOT_PASSED
887
- self.allowed_actions = value
888
- end
889
- @allowed_actions
890
- end
891
-
892
- #
893
- # Whether or not this resource was updated during an action. If multiple
894
- # actions are set on the resource, this will be `true` if *any* action
895
- # caused an update to happen.
896
- #
897
- # @return [Boolean] Whether the resource was updated during an action.
898
- #
899
- attr_reader :updated
900
-
901
- #
902
- # Whether or not this resource was updated during an action. If multiple
903
- # actions are set on the resource, this will be `true` if *any* action
904
- # caused an update to happen.
905
- #
906
- # @return [Boolean] Whether the resource was updated during an action.
907
- #
908
- def updated?
909
- updated
910
- end
911
-
912
- #
913
- # Whether or not this resource was updated during the most recent action.
914
- # This is set to `false` at the beginning of each action.
915
- #
916
- # @param true_or_false [Boolean] Whether the resource was updated during the
917
- # current / most recent action.
918
- # @return [Boolean] Whether the resource was updated during the most recent action.
919
- #
920
- def updated_by_last_action(true_or_false)
921
- @updated ||= true_or_false
922
- @updated_by_last_action = true_or_false
923
- end
924
-
925
- #
926
- # Whether or not this resource was updated during the most recent action.
927
- # This is set to `false` at the beginning of each action.
928
- #
929
- # @return [Boolean] Whether the resource was updated during the most recent action.
930
- #
931
- def updated_by_last_action?
932
- @updated_by_last_action
933
- end
934
-
935
- #
936
- # Set whether this class was updated during an action.
937
- #
938
- # @deprecated Multiple actions are supported by resources. Please call {}#updated_by_last_action} instead.
939
- #
940
- def updated=(true_or_false)
941
- Chef.deprecated(:custom_resource, "Chef::Resource#updated=(true|false) is deprecated. Please call #updated_by_last_action(true|false) instead.")
942
- updated_by_last_action(true_or_false)
943
- @updated = true_or_false
944
- end
945
-
946
- #
947
- # The display name of this resource type, for printing purposes.
948
- #
949
- # Will be used to print out the resource in messages, e.g. resource_name[name]
950
- #
951
- # @return [Symbol] The name of this resource type (e.g. `:execute`).
952
- #
953
- def resource_name
954
- @resource_name || self.class.resource_name
955
- end
956
-
957
- #
958
- # Sets a list of capabilities of the real resource. For example, `:remount`
959
- # (for filesystems) and `:restart` (for services).
960
- #
961
- # TODO Calling resource.supports({}) will not set this to empty; it will do
962
- # a get instead. That's wrong.
963
- #
964
- # @param args Hash{Symbol=>Boolean} If non-empty, sets the capabilities of
965
- # this resource. Default: {}
966
- # @return Hash{Symbol=>Boolean} An array of things this resource supports.
967
- #
968
- def supports(args = {})
969
- if args.any?
970
- @supports = args
971
- else
972
- @supports
973
- end
974
- end
975
-
976
- def supports=(args)
977
- supports(args)
978
- end
979
-
980
- #
981
- # A hook called after a resource is created. Meant to be overriden by
982
- # subclasses.
983
- #
984
- def after_created
985
- nil
986
- end
987
-
988
- #
989
- # The DSL name of this resource (e.g. `package` or `yum_package`)
990
- #
991
- # @return [String] The DSL name of this resource.
992
- #
993
- # @deprecated Use resource_name instead.
994
- #
995
- def self.dsl_name
996
- Chef.deprecated(:custom_resource, "Resource.dsl_name is deprecated and will be removed in Chef 13. Use resource_name instead.")
997
- if name
998
- name = self.name.split("::")[-1]
999
- convert_to_snake_case(name)
1000
- end
1001
- end
1002
-
1003
- #
1004
- # The display name of this resource type, for printing purposes.
1005
- #
1006
- # This also automatically calls "provides" to provide DSL with the given
1007
- # name.
1008
- #
1009
- # resource_name defaults to your class name.
1010
- #
1011
- # Call `resource_name nil` to remove the resource name (and any
1012
- # corresponding DSL).
1013
- #
1014
- # @param value [Symbol] The desired name of this resource type (e.g.
1015
- # `execute`), or `nil` if this class is abstract and has no resource_name.
1016
- #
1017
- # @return [Symbol] The name of this resource type (e.g. `:execute`).
1018
- #
1019
- def self.resource_name(name = NOT_PASSED)
1020
- # Setter
1021
- if name != NOT_PASSED
1022
- remove_canonical_dsl
1023
-
1024
- # Set the resource_name and call provides
1025
- if name
1026
- name = name.to_sym
1027
- # If our class is not already providing this name, provide it.
1028
- if !Chef::ResourceResolver.includes_handler?(name, self)
1029
- provides name, canonical: true
1030
- end
1031
- @resource_name = name
1032
- else
1033
- @resource_name = nil
1034
- end
1035
- end
1036
- @resource_name
1037
- end
1038
-
1039
- def self.resource_name=(name)
1040
- resource_name(name)
1041
- end
1042
-
1043
- #
1044
- # Use the class name as the resource name.
1045
- #
1046
- # Munges the last part of the class name from camel case to snake case,
1047
- # and sets the resource_name to that:
1048
- #
1049
- # A::B::BlahDBlah -> blah_d_blah
1050
- #
1051
- def self.use_automatic_resource_name
1052
- automatic_name = convert_to_snake_case(name.split("::")[-1])
1053
- resource_name automatic_name
1054
- end
1055
-
1056
- #
1057
- # The module where Chef should look for providers for this resource.
1058
- # The provider for `MyResource` will be looked up using
1059
- # `provider_base::MyResource`. Defaults to `Chef::Provider`.
1060
- #
1061
- # @param arg [Module] The module containing providers for this resource
1062
- # @return [Module] The module containing providers for this resource
1063
- #
1064
- # @example
1065
- # class MyResource < Chef::Resource
1066
- # provider_base Chef::Provider::Deploy
1067
- # # ...other stuff
1068
- # end
1069
- #
1070
- # @deprecated Use `provides` on the provider, or `provider` on the resource, instead.
1071
- #
1072
- def self.provider_base(arg = nil)
1073
- if arg
1074
- Chef.deprecated(:custom_resource, "Resource.provider_base is deprecated and will be removed in Chef 13. Use provides on the provider, or provider on the resource, instead.")
1075
- end
1076
- @provider_base ||= arg || Chef::Provider
1077
- end
1078
-
1079
- #
1080
- # The list of allowed actions for the resource.
1081
- #
1082
- # @param actions [Array<Symbol>] The list of actions to add to allowed_actions.
1083
- #
1084
- # @return [Array<Symbol>] The list of actions, as symbols.
1085
- #
1086
- def self.allowed_actions(*actions)
1087
- @allowed_actions ||=
1088
- if superclass.respond_to?(:allowed_actions)
1089
- superclass.allowed_actions.dup
1090
- else
1091
- [ :nothing ]
1092
- end
1093
- @allowed_actions |= actions.flatten
1094
- end
1095
-
1096
- def self.allowed_actions=(value)
1097
- @allowed_actions = value.uniq
1098
- end
1099
-
1100
- #
1101
- # The action that will be run if no other action is specified.
1102
- #
1103
- # Setting default_action will automatially add the action to
1104
- # allowed_actions, if it isn't already there.
1105
- #
1106
- # Defaults to [:nothing].
1107
- #
1108
- # @param action_name [Symbol,Array<Symbol>] The default action (or series
1109
- # of actions) to use.
1110
- #
1111
- # @return [Array<Symbol>] The default actions for the resource.
1112
- #
1113
- def self.default_action(action_name = NOT_PASSED)
1114
- unless action_name.equal?(NOT_PASSED)
1115
- @default_action = Array(action_name).map(&:to_sym)
1116
- self.allowed_actions |= @default_action
1117
- end
1118
-
1119
- if @default_action
1120
- @default_action
1121
- elsif superclass.respond_to?(:default_action)
1122
- superclass.default_action
1123
- else
1124
- [:nothing]
1125
- end
1126
- end
1127
-
1128
- def self.default_action=(action_name)
1129
- default_action action_name
1130
- end
1131
-
1132
- #
1133
- # Define an action on this resource.
1134
- #
1135
- # The action is defined as a *recipe* block that will be compiled and then
1136
- # converged when the action is taken (when Resource is converged). The recipe
1137
- # has access to the resource's attributes and methods, as well as the Chef
1138
- # recipe DSL.
1139
- #
1140
- # Resources in the action recipe may notify and subscribe to other resources
1141
- # within the action recipe, but cannot notify or subscribe to resources
1142
- # in the main Chef run.
1143
- #
1144
- # Resource actions are *inheritable*: if resource A defines `action :create`
1145
- # and B is a subclass of A, B gets all of A's actions. Additionally,
1146
- # resource B can define `action :create` and call `super()` to invoke A's
1147
- # action code.
1148
- #
1149
- # The first action defined (besides `:nothing`) will become the default
1150
- # action for the resource.
1151
- #
1152
- # @param name [Symbol] The action name to define.
1153
- # @param recipe_block The recipe to run when the action is taken. This block
1154
- # takes no parameters, and will be evaluated in a new context containing:
1155
- #
1156
- # - The resource's public and protected methods (including attributes)
1157
- # - The Chef Recipe DSL (file, etc.)
1158
- # - super() referring to the parent version of the action (if any)
1159
- #
1160
- # @return The Action class implementing the action
1161
- #
1162
- def self.action(action, &recipe_block)
1163
- action = action.to_sym
1164
- declare_action_class
1165
- action_class.action(action, &recipe_block)
1166
- self.allowed_actions += [ action ]
1167
- default_action action if Array(default_action) == [:nothing]
1168
- end
1169
-
1170
- #
1171
- # Define a method to load up this resource's properties with the current
1172
- # actual values.
1173
- #
1174
- # @param load_block The block to load. Will be run in the context of a newly
1175
- # created resource with its identity values filled in.
1176
- #
1177
- def self.load_current_value(&load_block)
1178
- define_method(:load_current_value!, &load_block)
1179
- end
1180
-
1181
- #
1182
- # Call this in `load_current_value` to indicate that the value does not
1183
- # exist and that `current_resource` should therefore be `nil`.
1184
- #
1185
- # @raise Chef::Exceptions::CurrentValueDoesNotExist
1186
- #
1187
- def current_value_does_not_exist!
1188
- raise Chef::Exceptions::CurrentValueDoesNotExist
1189
- end
1190
-
1191
- #
1192
- # Get the current actual value of this resource.
1193
- #
1194
- # This does not cache--a new value will be returned each time.
1195
- #
1196
- # @return A new copy of the resource, with values filled in from the actual
1197
- # current value.
1198
- #
1199
- def current_value
1200
- provider = provider_for_action(Array(action).first)
1201
- if provider.whyrun_mode? && !provider.whyrun_supported?
1202
- raise "Cannot retrieve #{self.class.current_resource} in why-run mode: #{provider} does not support why-run"
1203
- end
1204
- provider.load_current_resource
1205
- provider.current_resource
1206
- end
1207
-
1208
- #
1209
- # The action class is an automatic `Provider` created to handle
1210
- # actions declared by `action :x do ... end`.
1211
- #
1212
- # This class will be returned by `resource.provider` if `resource.provider`
1213
- # is not set. `provider_for_action` will also use this instead of calling
1214
- # out to `Chef::ProviderResolver`.
1215
- #
1216
- # If the user has not declared actions on this class or its superclasses
1217
- # using `action :x do ... end`, then there is no need for this class and
1218
- # `action_class` will be `nil`.
1219
- #
1220
- # If a block is passed, the action_class is always created and the block is
1221
- # run inside it.
1222
- #
1223
- # @api private
1224
- #
1225
- def self.action_class(&block)
1226
- return @action_class if @action_class && !block
1227
- # If the superclass needed one, then we need one as well.
1228
- if block || (superclass.respond_to?(:action_class) && superclass.action_class)
1229
- @action_class = declare_action_class(&block)
1230
- end
1231
- @action_class
1232
- end
1233
-
1234
- #
1235
- # Ensure the action class actually gets created. This is called
1236
- # when the user does `action :x do ... end`.
1237
- #
1238
- # If a block is passed, it is run inside the action_class.
1239
- #
1240
- # @api private
1241
- def self.declare_action_class(&block)
1242
- @action_class ||= begin
1243
- if superclass.respond_to?(:action_class)
1244
- base_provider = superclass.action_class
1245
- end
1246
- base_provider ||= Chef::Provider
1247
-
1248
- resource_class = self
1249
- Class.new(base_provider) do
1250
- include ActionClass
1251
- self.resource_class = resource_class
1252
- end
1253
- end
1254
- @action_class.class_eval(&block) if block
1255
- @action_class
1256
- end
1257
-
1258
- #
1259
- # Internal Resource Interface (for Chef)
1260
- #
1261
-
1262
- FORBIDDEN_IVARS = [:@run_context, :@not_if, :@only_if, :@enclosing_provider]
1263
- HIDDEN_IVARS = [:@allowed_actions, :@resource_name, :@source_line, :@run_context, :@name, :@not_if, :@only_if, :@elapsed_time, :@enclosing_provider]
1264
-
1265
- include Chef::Mixin::ConvertToClassName
1266
- extend Chef::Mixin::ConvertToClassName
1267
-
1268
- # XXX: this is required for definition params inside of the scope of a
1269
- # subresource to work correctly.
1270
- attr_accessor :params
1271
-
1272
- # @return [Chef::RunContext] The run context for this Resource. This is
1273
- # where the context for the current Chef run is stored, including the node
1274
- # and the resource collection.
1275
- attr_accessor :run_context
1276
-
1277
- # @return [String] The cookbook this resource was declared in.
1278
- attr_accessor :cookbook_name
1279
-
1280
- # @return [String] The recipe this resource was declared in.
1281
- attr_accessor :recipe_name
1282
-
1283
- # @return [Chef::Provider] The provider this resource was declared in (if
1284
- # it was declared in an LWRP). When you call methods that do not exist
1285
- # on this Resource, Chef will try to call the method on the provider
1286
- # as well before giving up.
1287
- attr_accessor :enclosing_provider
1288
-
1289
- # @return [String] The source line where this resource was declared.
1290
- # Expected to come from caller() or a stack trace, it usually follows one
1291
- # of these formats:
1292
- # /some/path/to/file.rb:80:in `wombat_tears'
1293
- # C:/some/path/to/file.rb:80 in 1`wombat_tears'
1294
- attr_accessor :source_line
1295
-
1296
- # @return [String] The actual name that was used to create this resource.
1297
- # Sometimes, when you say something like `package 'blah'`, the system will
1298
- # create a different resource (i.e. `YumPackage`). When this happens, the
1299
- # user will expect to see the thing they wrote, not the type that was
1300
- # returned. May be `nil`, in which case callers should read #resource_name.
1301
- # See #declared_key.
1302
- attr_accessor :declared_type
1303
-
1304
- #
1305
- # Iterates over all immediate and delayed notifications, calling
1306
- # resolve_resource_reference on each in turn, causing them to
1307
- # resolve lazy/forward references.
1308
- def resolve_notification_references
1309
- run_context.before_notifications(self).each do |n|
1310
- n.resolve_resource_reference(run_context.resource_collection)
1311
- end
1312
- run_context.immediate_notifications(self).each do |n|
1313
- n.resolve_resource_reference(run_context.resource_collection)
1314
- end
1315
- run_context.delayed_notifications(self).each do |n|
1316
- n.resolve_resource_reference(run_context.resource_collection)
1317
- end
1318
- end
1319
-
1320
- # Helper for #notifies
1321
- def notifies_before(action, resource_spec)
1322
- run_context.notifies_before(Notification.new(resource_spec, action, self))
1323
- end
1324
-
1325
- # Helper for #notifies
1326
- def notifies_immediately(action, resource_spec)
1327
- run_context.notifies_immediately(Notification.new(resource_spec, action, self))
1328
- end
1329
-
1330
- # Helper for #notifies
1331
- def notifies_delayed(action, resource_spec)
1332
- run_context.notifies_delayed(Notification.new(resource_spec, action, self))
1333
- end
1334
-
1335
- class << self
1336
- # back-compat
1337
- # NOTE: that we do not support unregistering classes as descendants like
1338
- # we used to for LWRP unloading because that was horrible and removed in
1339
- # Chef-12.
1340
- # @deprecated
1341
- # @api private
1342
- alias :resource_classes :descendants
1343
- # @deprecated
1344
- # @api private
1345
- alias :find_subclass_by_name :find_descendants_by_name
1346
- end
1347
-
1348
- # @deprecated
1349
- # @api private
1350
- # We memoize a sorted version of descendants so that resource lookups don't
1351
- # have to sort all the things, all the time.
1352
- # This was causing performance issues in test runs, and probably in real
1353
- # life as well.
1354
- @@sorted_descendants = nil
1355
- def self.sorted_descendants
1356
- @@sorted_descendants ||= descendants.sort_by { |x| x.to_s }
1357
- end
1358
-
1359
- def self.inherited(child)
1360
- super
1361
- @@sorted_descendants = nil
1362
- # set resource_name automatically if it's not set
1363
- if child.name && !child.resource_name
1364
- if child.name =~ /^Chef::Resource::(\w+)$/
1365
- child.resource_name(convert_to_snake_case($1))
1366
- end
1367
- end
1368
- end
1369
-
1370
- # If an unknown method is invoked, determine whether the enclosing Provider's
1371
- # lexical scope can fulfill the request. E.g. This happens when the Resource's
1372
- # block invokes new_resource.
1373
- def method_missing(method_symbol, *args, &block)
1374
- if enclosing_provider && enclosing_provider.respond_to?(method_symbol)
1375
- enclosing_provider.send(method_symbol, *args, &block)
1376
- else
1377
- raise NoMethodError, "undefined method `#{method_symbol}' for #{self.class}"
1378
- end
1379
- end
1380
-
1381
- #
1382
- # Mark this resource as providing particular DSL.
1383
- #
1384
- # Resources have an automatic DSL based on their resource_name, equivalent to
1385
- # `provides :resource_name` (providing the resource on all OS's). If you
1386
- # declare a `provides` with the given resource_name, it *replaces* that
1387
- # provides (so that you can provide your resource DSL only on certain OS's).
1388
- #
1389
- def self.provides(name, **options, &block)
1390
- name = name.to_sym
1391
-
1392
- # `provides :resource_name, os: 'linux'`) needs to remove the old
1393
- # canonical DSL before adding the new one.
1394
- if @resource_name && name == @resource_name
1395
- remove_canonical_dsl
1396
- end
1397
-
1398
- result = Chef.resource_handler_map.set(name, self, options, &block)
1399
- Chef::DSL::Resources.add_resource_dsl(name)
1400
- result
1401
- end
1402
-
1403
- def self.provides?(node, resource_name)
1404
- Chef::ResourceResolver.new(node, resource_name).provided_by?(self)
1405
- end
1406
-
1407
- # Helper for #notifies
1408
- def validate_resource_spec!(resource_spec)
1409
- run_context.resource_collection.validate_lookup_spec!(resource_spec)
1410
- end
1411
-
1412
- # We usually want to store and reference resources by their declared type and not the actual type that
1413
- # was looked up by the Resolver (IE, "package" becomes YumPackage class). If we have not been provided
1414
- # the declared key we want to fall back on the old to_s key.
1415
- def declared_key
1416
- return to_s if declared_type.nil?
1417
- "#{declared_type}[#{@name}]"
1418
- end
1419
-
1420
- def before_notifications
1421
- run_context.before_notifications(self)
1422
- end
1423
-
1424
- def immediate_notifications
1425
- run_context.immediate_notifications(self)
1426
- end
1427
-
1428
- def delayed_notifications
1429
- run_context.delayed_notifications(self)
1430
- end
1431
-
1432
- def source_line_file
1433
- if source_line
1434
- source_line.match(/(.*):(\d+):?.*$/).to_a[1]
1435
- else
1436
- nil
1437
- end
1438
- end
1439
-
1440
- def source_line_number
1441
- if source_line
1442
- source_line.match(/(.*):(\d+):?.*$/).to_a[2]
1443
- else
1444
- nil
1445
- end
1446
- end
1447
-
1448
- def defined_at
1449
- # The following regexp should match these two sourceline formats:
1450
- # /some/path/to/file.rb:80:in `wombat_tears'
1451
- # C:/some/path/to/file.rb:80 in 1`wombat_tears'
1452
- # extracting the path to the source file and the line number.
1453
- if cookbook_name && recipe_name && source_line
1454
- "#{cookbook_name}::#{recipe_name} line #{source_line_number}"
1455
- elsif source_line
1456
- "#{source_line_file} line #{source_line_number}"
1457
- else
1458
- "dynamically defined"
1459
- end
1460
- end
1461
-
1462
- #
1463
- # The cookbook in which this Resource was defined (if any).
1464
- #
1465
- # @return Chef::CookbookVersion The cookbook in which this Resource was defined.
1466
- #
1467
- def cookbook_version
1468
- if cookbook_name
1469
- run_context.cookbook_collection[cookbook_name]
1470
- end
1471
- end
1472
-
1473
- def events
1474
- run_context.events
1475
- end
1476
-
1477
- def validate_action(action)
1478
- raise ArgumentError, "nil is not a valid action for resource #{self}" if action.nil?
1479
- end
1480
-
1481
- def provider_for_action(action)
1482
- provider_class = Chef::ProviderResolver.new(node, self, action).resolve
1483
- provider = provider_class.new(self, run_context)
1484
- provider.action = action
1485
- provider
1486
- end
1487
-
1488
- # ??? TODO Seems unused. Delete?
1489
- def noop(tf = nil)
1490
- if !tf.nil?
1491
- raise ArgumentError, "noop must be true or false!" unless tf == true || tf == false
1492
- @noop = tf
1493
- end
1494
- @noop
1495
- end
1496
-
1497
- # TODO Seems unused. Delete?
1498
- def is(*args)
1499
- if args.size == 1
1500
- args.first
1501
- else
1502
- args
1503
- end
1504
- end
1505
-
1506
- #
1507
- # Preface an exception message with generic Resource information.
1508
- #
1509
- # @param e [StandardError] An exception with `e.message`
1510
- # @return [String] An exception message customized with class name.
1511
- #
1512
- def custom_exception_message(e)
1513
- "#{self} (#{defined_at}) had an error: #{e.class.name}: #{e.message}"
1514
- end
1515
-
1516
- def customize_exception(e)
1517
- new_exception = e.exception(custom_exception_message(e))
1518
- new_exception.set_backtrace(e.backtrace)
1519
- new_exception
1520
- end
1521
-
1522
- # Evaluates not_if and only_if conditionals. Returns a falsey value if any
1523
- # of the conditionals indicate that this resource should be skipped, i.e.,
1524
- # if an only_if evaluates to false or a not_if evaluates to true.
1525
- #
1526
- # If this resource should be skipped, returns the first conditional that
1527
- # "fails" its check. Subsequent conditionals are not evaluated, so in
1528
- # general it's not a good idea to rely on side effects from not_if or
1529
- # only_if commands/blocks being evaluated.
1530
- #
1531
- # Also skips conditional checking when the action is :nothing
1532
- def should_skip?(action)
1533
- conditional_action = ConditionalActionNotNothing.new(action)
1534
-
1535
- conditionals = [ conditional_action ] + only_if + not_if
1536
- conditionals.find do |conditional|
1537
- if conditional.continue?
1538
- false
1539
- else
1540
- events.resource_skipped(self, action, conditional)
1541
- Chef::Log.debug("Skipping #{self} due to #{conditional.description}")
1542
- true
1543
- end
1544
- end
1545
- end
1546
-
1547
- # Returns a resource based on a short_name and node
1548
- #
1549
- # ==== Parameters
1550
- # short_name<Symbol>:: short_name of the resource (ie :directory)
1551
- # node<Chef::Node>:: Node object to look up platform and version in
1552
- #
1553
- # === Returns
1554
- # <Chef::Resource>:: returns the proper Chef::Resource class
1555
- def self.resource_for_node(short_name, node)
1556
- klass = Chef::ResourceResolver.resolve(short_name, node: node)
1557
- raise Chef::Exceptions::NoSuchResourceType.new(short_name, node) if klass.nil?
1558
- klass
1559
- end
1560
-
1561
- #
1562
- # Returns the class with the given resource_name.
1563
- #
1564
- # NOTE: Chef::Resource.resource_matching_short_name(:package) returns
1565
- # Chef::Resource::Package, while on rhel the API call
1566
- # Chef::Resource.resource_for_node(:package, node) will return
1567
- # Chef::Resource::YumPackage -- which is probably what you really
1568
- # want. This API should most likely be removed or changed to call
1569
- # resource_for_node.
1570
- #
1571
- # ==== Parameters
1572
- # short_name<Symbol>:: short_name of the resource (ie :directory)
1573
- #
1574
- # === Returns
1575
- # <Chef::Resource>:: returns the proper Chef::Resource class
1576
- #
1577
- def self.resource_matching_short_name(short_name)
1578
- Chef::ResourceResolver.resolve(short_name, canonical: true)
1579
- end
1580
-
1581
- # @api private
1582
- def lookup_provider_constant(name, action = :nothing)
1583
- self.class.provider_base.const_get(convert_to_class_name(name.to_s))
1584
- rescue NameError => e
1585
- if e.to_s =~ /#{Regexp.escape(self.class.provider_base.to_s)}/
1586
- raise ArgumentError, "No provider found to match '#{name}'"
1587
- else
1588
- raise e
1589
- end
1590
- end
1591
-
1592
- module DeprecatedLWRPClass
1593
-
1594
- # @api private
1595
- def register_deprecated_lwrp_class(resource_class, class_name)
1596
- if Chef::Resource.const_defined?(class_name, false)
1597
- Chef::Log.warn "#{class_name} already exists! Deprecation class overwrites #{resource_class}"
1598
- Chef::Resource.send(:remove_const, class_name)
1599
- end
1600
-
1601
- if !Chef::Config[:treat_deprecation_warnings_as_errors]
1602
- Chef::Resource.const_set(class_name, resource_class)
1603
- Chef::Resource.deprecated_constants[class_name.to_sym] = resource_class
1604
- end
1605
- end
1606
-
1607
- def deprecated_constants
1608
- raise "Deprecated constants should be called only on Chef::Resource" unless self == Chef::Resource
1609
- @deprecated_constants ||= {}
1610
- end
1611
- end
1612
-
1613
- def self.remove_canonical_dsl
1614
- if @resource_name
1615
- remaining = Chef.resource_handler_map.delete_canonical(@resource_name, self)
1616
- if !remaining
1617
- Chef::DSL::Resources.remove_resource_dsl(@resource_name)
1618
- end
1619
- end
1620
- end
1621
- extend DeprecatedLWRPClass
1622
- end
1623
- end
1624
-
1625
- # Requiring things at the bottom breaks cycles
1626
- require "chef/chef_class"
1
+ #
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Author:: Christopher Walters (<cw@chef.io>)
4
+ # Author:: John Keiser (<jkeiser@chef.io)
5
+ # Copyright:: Copyright 2008-2016, Chef, Inc.
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ require "chef/exceptions"
22
+ require "chef/dsl/data_query"
23
+ require "chef/dsl/registry_helper"
24
+ require "chef/dsl/reboot_pending"
25
+ require "chef/dsl/resources"
26
+ require "chef/mixin/convert_to_class_name"
27
+ require "chef/guard_interpreter/resource_guard_interpreter"
28
+ require "chef/resource/conditional"
29
+ require "chef/resource/conditional_action_not_nothing"
30
+ require "chef/resource/action_class"
31
+ require "chef/resource_collection"
32
+ require "chef/node_map"
33
+ require "chef/node"
34
+ require "chef/platform"
35
+ require "chef/resource/resource_notification"
36
+ require "chef/provider_resolver"
37
+ require "chef/resource_resolver"
38
+ require "chef/provider"
39
+ require "set"
40
+
41
+ require "chef/mixin/deprecation"
42
+ require "chef/mixin/properties"
43
+ require "chef/mixin/provides"
44
+ require "chef/dsl/universal"
45
+
46
+ class Chef
47
+ class Resource
48
+
49
+ #
50
+ # Generic User DSL (not resource-specific)
51
+ #
52
+
53
+ include Chef::DSL::DataQuery
54
+ include Chef::DSL::RegistryHelper
55
+ include Chef::DSL::RebootPending
56
+ extend Chef::Mixin::Provides
57
+
58
+ include Chef::DSL::Universal
59
+
60
+ # Bring in `property` and `property_type`
61
+ include Chef::Mixin::Properties
62
+
63
+ #
64
+ # The name of this particular resource.
65
+ #
66
+ # This special resource attribute is set automatically from the declaration
67
+ # of the resource, e.g.
68
+ #
69
+ # execute 'Vitruvius' do
70
+ # command 'ls'
71
+ # end
72
+ #
73
+ # Will set the name to "Vitruvius".
74
+ #
75
+ # This is also used in to_s to show the resource name, e.g. `execute[Vitruvius]`.
76
+ #
77
+ # This is also used for resource notifications and subscribes in the same manner.
78
+ #
79
+ # This will coerce any object into a string via #to_s. Arrays are a special case
80
+ # so that `package ["foo", "bar"]` becomes package[foo, bar] instead of the more
81
+ # awkward `package[["foo", "bar"]]` that #to_s would produce.
82
+ #
83
+ # @param name [Object] The name to set, typically a String or Array
84
+ # @return [String] The name of this Resource.
85
+ #
86
+ property :name, String, coerce: proc { |v| v.is_a?(Array) ? v.join(", ") : v.to_s }, desired_state: false
87
+
88
+ #
89
+ # The node the current Chef run is using.
90
+ #
91
+ # Corresponds to `run_context.node`.
92
+ #
93
+ # @return [Chef::Node] The node the current Chef run is using.
94
+ #
95
+ def node
96
+ run_context && run_context.node
97
+ end
98
+
99
+ #
100
+ # Find existing resources by searching the list of existing resources. Possible
101
+ # forms are:
102
+ #
103
+ # find(:file => "foobar")
104
+ # find(:file => [ "foobar", "baz" ])
105
+ # find("file[foobar]", "file[baz]")
106
+ # find("file[foobar,baz]")
107
+ #
108
+ # Calls `run_context.resource_collection.find(*args)`
109
+ #
110
+ # @return the matching resource, or an Array of matching resources.
111
+ #
112
+ # @raise ArgumentError if you feed it bad lookup information
113
+ # @raise RuntimeError if it can't find the resources you are looking for.
114
+ #
115
+ def resources(*args)
116
+ run_context.resource_collection.find(*args)
117
+ end
118
+
119
+ #
120
+ # Resource User Interface (for users)
121
+ #
122
+
123
+ #
124
+ # Create a new Resource.
125
+ #
126
+ # @param name The name of this resource (corresponds to the #name attribute,
127
+ # used for notifications to this resource).
128
+ # @param run_context The context of the Chef run. Corresponds to #run_context.
129
+ #
130
+ def initialize(name, run_context = nil)
131
+ name(name) unless name.nil?
132
+ @run_context = run_context
133
+ @noop = nil
134
+ @before = nil
135
+ @params = Hash.new
136
+ @provider = nil
137
+ @allowed_actions = self.class.allowed_actions.to_a
138
+ @action = self.class.default_action
139
+ @updated = false
140
+ @updated_by_last_action = false
141
+ @supports = {}
142
+ @ignore_failure = false
143
+ @retries = 0
144
+ @retry_delay = 2
145
+ @not_if = []
146
+ @only_if = []
147
+ @source_line = nil
148
+ # We would like to raise an error when the user gives us a guard
149
+ # interpreter and a ruby_block to the guard. In order to achieve this
150
+ # we need to understand when the user overrides the default guard
151
+ # interpreter. Therefore we store the default separately in a different
152
+ # attribute.
153
+ @guard_interpreter = nil
154
+ @default_guard_interpreter = :default
155
+ @elapsed_time = 0
156
+ @sensitive = false
157
+ end
158
+
159
+ #
160
+ # The action or actions that will be taken when this resource is run.
161
+ #
162
+ # @param arg [Array[Symbol], Symbol] A list of actions (e.g. `:create`)
163
+ # @return [Array[Symbol]] the list of actions.
164
+ #
165
+ def action(arg = nil)
166
+ if arg
167
+ arg = Array(arg).map(&:to_sym)
168
+ arg.each do |action|
169
+ validate(
170
+ { action: action },
171
+ { action: { kind_of: Symbol, equal_to: allowed_actions } }
172
+ )
173
+ end
174
+ @action = arg
175
+ else
176
+ @action
177
+ end
178
+ end
179
+
180
+ # Alias for normal assigment syntax.
181
+ alias_method :action=, :action
182
+
183
+ #
184
+ # Force a delayed notification into this resource's run_context.
185
+ #
186
+ # This should most likely be paired with action :nothing
187
+ #
188
+ # @param arg [Array[Symbol], Symbol] A list of actions (e.g. `:create`)
189
+ #
190
+ def delayed_action(arg)
191
+ arg = Array(arg).map(&:to_sym)
192
+ arg.map do |action|
193
+ validate(
194
+ { action: action },
195
+ { action: { kind_of: Symbol, equal_to: allowed_actions } }
196
+ )
197
+ # the resource effectively sends a delayed notification to itself
198
+ run_context.add_delayed_action(Notification.new(self, action, self))
199
+ end
200
+ end
201
+
202
+ #
203
+ # Sets up a notification that will run a particular action on another resource
204
+ # if and when *this* resource is updated by an action.
205
+ #
206
+ # If the action does not update this resource, the notification never triggers.
207
+ #
208
+ # Only one resource may be specified per notification.
209
+ #
210
+ # `delayed` notifications will only *ever* happen once per resource, so if
211
+ # multiple resources all notify a single resource to perform the same action,
212
+ # the action will only happen once. However, if they ask for different
213
+ # actions, each action will happen once, in the order they were updated.
214
+ #
215
+ # `immediate` notifications will cause the action to be triggered once per
216
+ # notification, regardless of how many other resources have triggered the
217
+ # notification as well.
218
+ #
219
+ # @param action The action to run on the other resource.
220
+ # @param resource_spec [String, Hash, Chef::Resource] The resource to run.
221
+ # @param timing [String, Symbol] When to notify. Has these values:
222
+ # - `delayed`: Will run the action on the other resource after all other
223
+ # actions have been run. This is the default.
224
+ # - `immediate`, `immediately`: Will run the action on the other resource
225
+ # immediately (before any other action is run).
226
+ # - `before`: Will run the action on the other resource
227
+ # immediately *before* the action is actually run.
228
+ #
229
+ # @example Resource by string
230
+ # file '/foo.txt' do
231
+ # content 'hi'
232
+ # notifies :create, 'file[/bar.txt]'
233
+ # end
234
+ # file '/bar.txt' do
235
+ # action :nothing
236
+ # content 'hi'
237
+ # end
238
+ # @example Resource by hash
239
+ # file '/foo.txt' do
240
+ # content 'hi'
241
+ # notifies :create, file: '/bar.txt'
242
+ # end
243
+ # file '/bar.txt' do
244
+ # action :nothing
245
+ # content 'hi'
246
+ # end
247
+ # @example Direct Resource
248
+ # bar = file '/bar.txt' do
249
+ # action :nothing
250
+ # content 'hi'
251
+ # end
252
+ # file '/foo.txt' do
253
+ # content 'hi'
254
+ # notifies :create, bar
255
+ # end
256
+ #
257
+ def notifies(action, resource_spec, timing = :delayed)
258
+ # when using old-style resources(:template => "/foo.txt") style, you
259
+ # could end up with multiple resources.
260
+ validate_resource_spec!(resource_spec)
261
+
262
+ resources = [ resource_spec ].flatten
263
+ resources.each do |resource|
264
+
265
+ case timing.to_s
266
+ when "delayed"
267
+ notifies_delayed(action, resource)
268
+ when "immediate", "immediately"
269
+ notifies_immediately(action, resource)
270
+ when "before"
271
+ notifies_before(action, resource)
272
+ else
273
+ raise ArgumentError, "invalid timing: #{timing} for notifies(#{action}, #{resources.inspect}, #{timing}) resource #{self} "\
274
+ "Valid timings are: :delayed, :immediate, :immediately, :before"
275
+ end
276
+ end
277
+
278
+ true
279
+ end
280
+
281
+ #
282
+ # Token class to hold an unresolved subscribes call with an associated
283
+ # run context.
284
+ #
285
+ # @api private
286
+ # @see Resource#subscribes
287
+ class UnresolvedSubscribes < self
288
+ # The full key ise given as the name in {Resource#subscribes}
289
+ alias_method :to_s, :name
290
+ alias_method :declared_key, :name
291
+ end
292
+
293
+ #
294
+ # Subscribes to updates from other resources, causing a particular action to
295
+ # run on *this* resource when the other resource is updated.
296
+ #
297
+ # If multiple resources are specified, this resource action will be run if
298
+ # *any* of them change.
299
+ #
300
+ # This notification will only trigger *once*, no matter how many other
301
+ # resources are updated (or how many actions are run by a particular resource).
302
+ #
303
+ # @param action The action to run on the other resource.
304
+ # @param resources [String, Resource, Array[String, Resource]] The resources to subscribe to.
305
+ # @param timing [String, Symbol] When to notify. Has these values:
306
+ # - `delayed`: An update will cause the action to run after all other
307
+ # actions have been run. This is the default.
308
+ # - `immediate`, `immediately`: The action will run immediately following
309
+ # the other resource being updated.
310
+ # - `before`: The action will run immediately before the
311
+ # other resource is updated.
312
+ #
313
+ # @example Resources by string
314
+ # file '/foo.txt' do
315
+ # content 'hi'
316
+ # action :nothing
317
+ # subscribes :create, 'file[/bar.txt]'
318
+ # end
319
+ # file '/bar.txt' do
320
+ # content 'hi'
321
+ # end
322
+ # @example Direct resource
323
+ # bar = file '/bar.txt' do
324
+ # content 'hi'
325
+ # end
326
+ # file '/foo.txt' do
327
+ # content 'hi'
328
+ # action :nothing
329
+ # subscribes :create, '/bar.txt'
330
+ # end
331
+ # @example Multiple resources by string
332
+ # file '/foo.txt' do
333
+ # content 'hi'
334
+ # action :nothing
335
+ # subscribes :create, [ 'file[/bar.txt]', 'file[/baz.txt]' ]
336
+ # end
337
+ # file '/bar.txt' do
338
+ # content 'hi'
339
+ # end
340
+ # file '/baz.txt' do
341
+ # content 'hi'
342
+ # end
343
+ # @example Multiple resources
344
+ # bar = file '/bar.txt' do
345
+ # content 'hi'
346
+ # end
347
+ # baz = file '/bar.txt' do
348
+ # content 'hi'
349
+ # end
350
+ # file '/foo.txt' do
351
+ # content 'hi'
352
+ # action :nothing
353
+ # subscribes :create, [ bar, baz ]
354
+ # end
355
+ #
356
+ def subscribes(action, resources, timing = :delayed)
357
+ resources = [resources].flatten
358
+ resources.each do |resource|
359
+ if resource.is_a?(String)
360
+ resource = UnresolvedSubscribes.new(resource, run_context)
361
+ end
362
+ if resource.run_context.nil?
363
+ resource.run_context = run_context
364
+ end
365
+ resource.notifies(action, self, timing)
366
+ end
367
+ true
368
+ end
369
+
370
+ #
371
+ # A command or block that indicates whether to actually run this resource.
372
+ # The command or block is run just before the action actually executes, and
373
+ # the action will be skipped if the block returns false.
374
+ #
375
+ # If a block is specified, it must return `true` in order for the Resource
376
+ # to be executed.
377
+ #
378
+ # If a command is specified, the resource's #guard_interpreter will run the
379
+ # command and interpret the results according to `opts`. For example, the
380
+ # default `execute` resource will be treated as `false` if the command
381
+ # returns a non-zero exit code, and `true` if it returns 0. Thus, in the
382
+ # default case:
383
+ #
384
+ # - `only_if "your command"` will perform the action only if `your command`
385
+ # returns 0.
386
+ # - `only_if "your command", valid_exit_codes: [ 1, 2, 3 ]` will perform the
387
+ # action only if `your command` returns 1, 2, or 3.
388
+ #
389
+ # @param command [String] A string to execute.
390
+ # @param opts [Hash] Options control the execution of the command
391
+ # @param block [Proc] A ruby block to run. Ignored if a command is given.
392
+ #
393
+ def only_if(command = nil, opts = {}, &block)
394
+ if command || block_given?
395
+ @only_if << Conditional.only_if(self, command, opts, &block)
396
+ end
397
+ @only_if
398
+ end
399
+
400
+ #
401
+ # A command or block that indicates whether to actually run this resource.
402
+ # The command or block is run just before the action actually executes, and
403
+ # the action will be skipped if the block returns true.
404
+ #
405
+ # If a block is specified, it must return `false` in order for the Resource
406
+ # to be executed.
407
+ #
408
+ # If a command is specified, the resource's #guard_interpreter will run the
409
+ # command and interpret the results according to `opts`. For example, the
410
+ # default `execute` resource will be treated as `false` if the command
411
+ # returns a non-zero exit code, and `true` if it returns 0. Thus, in the
412
+ # default case:
413
+ #
414
+ # - `not_if "your command"` will perform the action only if `your command`
415
+ # returns a non-zero code.
416
+ # - `only_if "your command", valid_exit_codes: [ 1, 2, 3 ]` will perform the
417
+ # action only if `your command` returns something other than 1, 2, or 3.
418
+ #
419
+ # @param command [String] A string to execute.
420
+ # @param opts [Hash] Options control the execution of the command
421
+ # @param block [Proc] A ruby block to run. Ignored if a command is given.
422
+ #
423
+ def not_if(command = nil, opts = {}, &block)
424
+ if command || block_given?
425
+ @not_if << Conditional.not_if(self, command, opts, &block)
426
+ end
427
+ @not_if
428
+ end
429
+
430
+ #
431
+ # The number of times to retry this resource if it fails by throwing an
432
+ # exception while running an action. Default: 0
433
+ #
434
+ # When the retries have run out, the Resource will throw the last
435
+ # exception.
436
+ #
437
+ # @param arg [Integer] The number of retries.
438
+ # @return [Integer] The number of retries.
439
+ #
440
+ def retries(arg = nil)
441
+ set_or_return(:retries, arg, kind_of: Integer)
442
+ end
443
+ attr_writer :retries
444
+
445
+ #
446
+ # The number of seconds to wait between retries. Default: 2.
447
+ #
448
+ # @param arg [Integer] The number of seconds to wait between retries.
449
+ # @return [Integer] The number of seconds to wait between retries.
450
+ #
451
+ def retry_delay(arg = nil)
452
+ set_or_return(:retry_delay, arg, kind_of: Integer)
453
+ end
454
+ attr_writer :retry_delay
455
+
456
+ #
457
+ # Whether to treat this resource's data as sensitive. If set, no resource
458
+ # data will be displayed in log output.
459
+ #
460
+ # @param arg [Boolean] Whether this resource is sensitive or not.
461
+ # @return [Boolean] Whether this resource is sensitive or not.
462
+ #
463
+ def sensitive(arg = nil)
464
+ set_or_return(:sensitive, arg, :kind_of => [ TrueClass, FalseClass ])
465
+ end
466
+ attr_writer :sensitive
467
+
468
+ # ??? TODO unreferenced. Delete?
469
+ attr_reader :not_if_args
470
+ # ??? TODO unreferenced. Delete?
471
+ attr_reader :only_if_args
472
+
473
+ #
474
+ # The time it took (in seconds) to run the most recently-run action. Not
475
+ # cumulative across actions. This is set to 0 as soon as a new action starts
476
+ # running, and set to the elapsed time at the end of the action.
477
+ #
478
+ # @return [Integer] The time (in seconds) it took to process the most recent
479
+ # action. Not cumulative.
480
+ #
481
+ attr_reader :elapsed_time
482
+
483
+ #
484
+ # The guard interpreter that will be used to process `only_if` and `not_if`
485
+ # statements. If left unset, the #default_guard_interpreter will be used.
486
+ #
487
+ # Must be a resource class like `Chef::Resource::Execute`, or
488
+ # a corresponding to the name of a resource. The resource must descend from
489
+ # `Chef::Resource::Execute`.
490
+ #
491
+ # TODO this needs to be coerced on input so that retrieval is consistent.
492
+ #
493
+ # @param arg [Class, Symbol, String] The Guard interpreter resource class/
494
+ # symbol/name.
495
+ # @return [Class, Symbol, String] The Guard interpreter resource.
496
+ #
497
+ def guard_interpreter(arg = nil)
498
+ if arg.nil?
499
+ @guard_interpreter || @default_guard_interpreter
500
+ else
501
+ set_or_return(:guard_interpreter, arg, :kind_of => Symbol)
502
+ end
503
+ end
504
+
505
+ #
506
+ # Get the value of the state attributes in this resource as a hash.
507
+ #
508
+ # Does not include properties that are not set (unless they are identity
509
+ # properties).
510
+ #
511
+ # @return [Hash{Symbol => Object}] A Hash of attribute => value for the
512
+ # Resource class's `state_attrs`.
513
+ #
514
+ def state_for_resource_reporter
515
+ state = {}
516
+ state_properties = self.class.state_properties
517
+ state_properties.each do |property|
518
+ if property.identity? || property.is_set?(self)
519
+ state[property.name] = property.sensitive? ? "*sensitive value suppressed*" : send(property.name)
520
+ end
521
+ end
522
+ state
523
+ end
524
+
525
+ #
526
+ # Since there are collisions with LWRP parameters named 'state' this
527
+ # method is not used by the resource_reporter and is most likely unused.
528
+ # It certainly cannot be relied upon and cannot be fixed.
529
+ #
530
+ # @deprecated
531
+ #
532
+ alias_method :state, :state_for_resource_reporter
533
+
534
+ #
535
+ # The value of the identity of this resource.
536
+ #
537
+ # - If there are no identity properties on the resource, `name` is returned.
538
+ # - If there is exactly one identity property on the resource, it is returned.
539
+ # - If there are more than one, they are returned in a hash.
540
+ #
541
+ # @return [Object,Hash<Symbol,Object>] The identity of this resource.
542
+ #
543
+ def identity
544
+ result = {}
545
+ identity_properties = self.class.identity_properties
546
+ identity_properties.each do |property|
547
+ result[property.name] = send(property.name)
548
+ end
549
+ return result.values.first if identity_properties.size == 1
550
+ result
551
+ end
552
+
553
+ #
554
+ # Whether to ignore failures. If set to `true`, and this resource when an
555
+ # action is run, the resource will be marked as failed but no exception will
556
+ # be thrown (and no error will be output). Defaults to `false`.
557
+ #
558
+ # TODO ignore_failure and retries seem to be mutually exclusive; I doubt
559
+ # that was intended.
560
+ #
561
+ # @param arg [Boolean] Whether to ignore failures.
562
+ # @return Whether this resource will ignore failures.
563
+ #
564
+ def ignore_failure(arg = nil)
565
+ set_or_return(:ignore_failure, arg, kind_of: [ TrueClass, FalseClass ])
566
+ end
567
+ attr_writer :ignore_failure
568
+
569
+ #
570
+ # Equivalent to #ignore_failure.
571
+ #
572
+ alias :epic_fail :ignore_failure
573
+
574
+ #
575
+ # Make this resource into an exact (shallow) copy of the other resource.
576
+ #
577
+ # @param resource [Chef::Resource] The resource to copy from.
578
+ #
579
+ def load_from(resource)
580
+ resource.instance_variables.each do |iv|
581
+ unless iv == :@source_line || iv == :@action || iv == :@not_if || iv == :@only_if
582
+ instance_variable_set(iv, resource.instance_variable_get(iv))
583
+ end
584
+ end
585
+ end
586
+
587
+ #
588
+ # Runs the given action on this resource, immediately.
589
+ #
590
+ # @param action The action to run (e.g. `:create`)
591
+ # @param notification_type The notification type that triggered this (if any)
592
+ # @param notifying_resource The resource that triggered this notification (if any)
593
+ #
594
+ # @raise Any error that occurs during the actual action.
595
+ #
596
+ def run_action(action, notification_type = nil, notifying_resource = nil)
597
+ # reset state in case of multiple actions on the same resource.
598
+ @elapsed_time = 0
599
+ start_time = Time.now
600
+ events.resource_action_start(self, action, notification_type, notifying_resource)
601
+ # Try to resolve lazy/forward references in notifications again to handle
602
+ # the case where the resource was defined lazily (ie. in a ruby_block)
603
+ resolve_notification_references
604
+ validate_action(action)
605
+
606
+ if Chef::Config[:verbose_logging] || Chef::Log.level == :debug
607
+ # This can be noisy
608
+ Chef::Log.info("Processing #{self} action #{action} (#{defined_at})")
609
+ end
610
+
611
+ # ensure that we don't leave @updated_by_last_action set to true
612
+ # on accident
613
+ updated_by_last_action(false)
614
+
615
+ # Don't modify @retries directly and keep it intact, so that the
616
+ # recipe_snippet from ResourceFailureInspector can print the value
617
+ # that was set in the resource block initially.
618
+ remaining_retries = retries
619
+
620
+ begin
621
+ return if should_skip?(action)
622
+ provider_for_action(action).run_action
623
+ rescue Exception => e
624
+ if ignore_failure
625
+ Chef::Log.error("#{custom_exception_message(e)}; ignore_failure is set, continuing")
626
+ events.resource_failed(self, action, e)
627
+ elsif remaining_retries > 0
628
+ events.resource_failed_retriable(self, action, remaining_retries, e)
629
+ remaining_retries -= 1
630
+ Chef::Log.info("Retrying execution of #{self}, #{remaining_retries} attempt(s) left")
631
+ sleep retry_delay
632
+ retry
633
+ else
634
+ events.resource_failed(self, action, e)
635
+ raise customize_exception(e)
636
+ end
637
+ end
638
+ ensure
639
+ @elapsed_time = Time.now - start_time
640
+ # Reporting endpoint doesn't accept a negative resource duration so set it to 0.
641
+ # A negative value can occur when a resource changes the system time backwards
642
+ @elapsed_time = 0 if @elapsed_time < 0
643
+ events.resource_completed(self)
644
+ end
645
+
646
+ #
647
+ # If we are currently initializing the resource, this will be true.
648
+ #
649
+ # Do NOT use this. It may be removed. It is for internal purposes only.
650
+ # @api private
651
+ attr_reader :resource_initializing
652
+ def resource_initializing=(value)
653
+ if value
654
+ @resource_initializing = true
655
+ else
656
+ remove_instance_variable(:@resource_initializing)
657
+ end
658
+ end
659
+
660
+ #
661
+ # Generic Ruby and Data Structure Stuff (for user)
662
+ #
663
+
664
+ def to_s
665
+ "#{resource_name}[#{name}]"
666
+ end
667
+
668
+ def to_text
669
+ return "suppressed sensitive resource output" if sensitive
670
+ text = "# Declared in #{@source_line}\n\n"
671
+ text << "#{resource_name}(\"#{name}\") do\n"
672
+
673
+ all_props = {}
674
+ self.class.state_properties.map do |p|
675
+ all_props[p.name.to_s] = p.sensitive? ? '"*sensitive value suppressed*"' : value_to_text(p.get(self))
676
+ end
677
+
678
+ ivars = instance_variables.map { |ivar| ivar.to_sym } - HIDDEN_IVARS
679
+ ivars.each do |ivar|
680
+ iv = ivar.to_s.sub(/^@/, "")
681
+ if all_props.keys.include?(iv)
682
+ text << " #{iv} #{all_props[iv]}\n"
683
+ elsif (value = instance_variable_get(ivar)) && !(value.respond_to?(:empty?) && value.empty?)
684
+ text << " #{iv} #{value_to_text(value)}\n"
685
+ end
686
+ end
687
+
688
+ [@not_if, @only_if].flatten.each do |conditional|
689
+ text << " #{conditional.to_text}\n"
690
+ end
691
+ text << "end\n"
692
+ end
693
+
694
+ def value_to_text(value)
695
+ value.respond_to?(:to_text) ? value.to_text : value.inspect
696
+ end
697
+
698
+ def inspect
699
+ ivars = instance_variables.map { |ivar| ivar.to_sym } - FORBIDDEN_IVARS
700
+ ivars.inject("<#{self}") do |str, ivar|
701
+ str << " #{ivar}: #{instance_variable_get(ivar).inspect}"
702
+ end << ">"
703
+ end
704
+
705
+ # as_json does most of the to_json heavy lifted. It exists here in case activesupport
706
+ # is loaded. activesupport will call as_json and skip over to_json. This ensure
707
+ # json is encoded as expected
708
+ def as_json(*a)
709
+ safe_ivars = instance_variables.map { |ivar| ivar.to_sym } - FORBIDDEN_IVARS
710
+ instance_vars = Hash.new
711
+ safe_ivars.each do |iv|
712
+ instance_vars[iv.to_s.sub(/^@/, "")] = instance_variable_get(iv)
713
+ end
714
+ {
715
+ "json_class" => self.class.name,
716
+ "instance_vars" => instance_vars,
717
+ }
718
+ end
719
+
720
+ # Serialize this object as a hash
721
+ def to_json(*a)
722
+ results = as_json
723
+ Chef::JSONCompat.to_json(results, *a)
724
+ end
725
+
726
+ def to_hash
727
+ # Grab all current state, then any other ivars (backcompat)
728
+ result = {}
729
+ self.class.state_properties.each do |p|
730
+ result[p.name] = p.get(self)
731
+ end
732
+ safe_ivars = instance_variables.map { |ivar| ivar.to_sym } - FORBIDDEN_IVARS
733
+ safe_ivars.each do |iv|
734
+ key = iv.to_s.sub(/^@/, "").to_sym
735
+ next if result.has_key?(key)
736
+ result[key] = instance_variable_get(iv)
737
+ end
738
+ result
739
+ end
740
+
741
+ def self.json_create(o)
742
+ resource = new(o["instance_vars"]["@name"])
743
+ o["instance_vars"].each do |k, v|
744
+ resource.instance_variable_set("@#{k}".to_sym, v)
745
+ end
746
+ resource
747
+ end
748
+
749
+ #
750
+ # Resource Definition Interface (for resource developers)
751
+ #
752
+
753
+ include Chef::Mixin::Deprecation
754
+
755
+ #
756
+ # The provider class for this resource.
757
+ #
758
+ # If `action :x do ... end` has been declared on this resource or its
759
+ # superclasses, this will return the `action_class`.
760
+ #
761
+ # If this is not set, `provider_for_action` will dynamically determine the
762
+ # provider.
763
+ #
764
+ # @param arg [String, Symbol, Class] Sets the provider class for this resource.
765
+ # If passed a String or Symbol, e.g. `:file` or `"file"`, looks up the
766
+ # provider based on the name.
767
+ #
768
+ # @return The provider class for this resource.
769
+ #
770
+ # @see Chef::Resource.action_class
771
+ #
772
+ def provider(arg = nil)
773
+ klass = if arg.kind_of?(String) || arg.kind_of?(Symbol)
774
+ lookup_provider_constant(arg)
775
+ else
776
+ arg
777
+ end
778
+ set_or_return(:provider, klass, kind_of: [ Class ]) ||
779
+ self.class.action_class
780
+ end
781
+
782
+ def provider=(arg)
783
+ provider(arg)
784
+ end
785
+
786
+ #
787
+ # Set or return the list of "state properties" implemented by the Resource
788
+ # subclass.
789
+ #
790
+ # Equivalent to calling #state_properties and getting `state_properties.keys`.
791
+ #
792
+ # @deprecated Use state_properties.keys instead. Note that when you declare
793
+ # properties with `property`: properties are added to state_properties by
794
+ # default, and can be turned off with `desired_state: false`
795
+ #
796
+ # ```ruby
797
+ # property :x # part of desired state
798
+ # property :y, desired_state: false # not part of desired state
799
+ # ```
800
+ #
801
+ # @param names [Array<Symbol>] A list of property names to set as desired
802
+ # state.
803
+ #
804
+ # @return [Array<Symbol>] All property names with desired state.
805
+ #
806
+ def self.state_attrs(*names)
807
+ state_properties(*names).map { |property| property.name }
808
+ end
809
+
810
+ #
811
+ # Set the identity of this resource to a particular property.
812
+ #
813
+ # This drives #identity, which returns data that uniquely refers to a given
814
+ # resource on the given node (in such a way that it can be correlated
815
+ # across Chef runs).
816
+ #
817
+ # This method is unnecessary when declaring properties with `property`;
818
+ # properties can be added to identity during declaration with
819
+ # `identity: true`.
820
+ #
821
+ # ```ruby
822
+ # property :x, identity: true # part of identity
823
+ # property :y # not part of identity
824
+ # ```
825
+ #
826
+ # @param name [Symbol] A list of property names to set as the identity.
827
+ #
828
+ # @return [Symbol] The identity property if there is only one; or `nil` if
829
+ # there are more than one.
830
+ #
831
+ # @raise [ArgumentError] If no arguments are passed and the resource has
832
+ # more than one identity property.
833
+ #
834
+ def self.identity_property(name = nil)
835
+ result = identity_properties(*Array(name))
836
+ if result.size > 1
837
+ raise Chef::Exceptions::MultipleIdentityError, "identity_property cannot be called on an object with more than one identity property (#{result.map { |r| r.name }.join(", ")})."
838
+ end
839
+ result.first
840
+ end
841
+
842
+ #
843
+ # Set a property as the "identity attribute" for this resource.
844
+ #
845
+ # Identical to calling #identity_property.first.key.
846
+ #
847
+ # @param name [Symbol] The name of the property to set.
848
+ #
849
+ # @return [Symbol]
850
+ #
851
+ # @deprecated `identity_property` should be used instead.
852
+ #
853
+ # @raise [ArgumentError] If no arguments are passed and the resource has
854
+ # more than one identity property.
855
+ #
856
+ def self.identity_attr(name = nil)
857
+ property = identity_property(name)
858
+ return nil if !property
859
+ property.name
860
+ end
861
+
862
+ #
863
+ # The guard interpreter that will be used to process `only_if` and `not_if`
864
+ # statements by default. If left unset, or set to `:default`, the guard
865
+ # interpreter used will be Chef::GuardInterpreter::DefaultGuardInterpreter.
866
+ #
867
+ # Must be a resource class like `Chef::Resource::Execute`, or
868
+ # a corresponding to the name of a resource. The resource must descend from
869
+ # `Chef::Resource::Execute`.
870
+ #
871
+ # TODO this needs to be coerced on input so that retrieval is consistent.
872
+ #
873
+ # @return [Class, Symbol, String] the default Guard interpreter resource.
874
+ #
875
+ attr_reader :default_guard_interpreter
876
+
877
+ #
878
+ # The list of actions this Resource is allowed to have. Setting `action`
879
+ # will fail unless it is in this list. Default: [ :nothing ]
880
+ #
881
+ # @return [Array<Symbol>] The list of actions this Resource is allowed to
882
+ # have.
883
+ #
884
+ attr_accessor :allowed_actions
885
+ def allowed_actions(value = NOT_PASSED)
886
+ if value != NOT_PASSED
887
+ self.allowed_actions = value
888
+ end
889
+ @allowed_actions
890
+ end
891
+
892
+ #
893
+ # Whether or not this resource was updated during an action. If multiple
894
+ # actions are set on the resource, this will be `true` if *any* action
895
+ # caused an update to happen.
896
+ #
897
+ # @return [Boolean] Whether the resource was updated during an action.
898
+ #
899
+ attr_reader :updated
900
+
901
+ #
902
+ # Whether or not this resource was updated during an action. If multiple
903
+ # actions are set on the resource, this will be `true` if *any* action
904
+ # caused an update to happen.
905
+ #
906
+ # @return [Boolean] Whether the resource was updated during an action.
907
+ #
908
+ def updated?
909
+ updated
910
+ end
911
+
912
+ #
913
+ # Whether or not this resource was updated during the most recent action.
914
+ # This is set to `false` at the beginning of each action.
915
+ #
916
+ # @param true_or_false [Boolean] Whether the resource was updated during the
917
+ # current / most recent action.
918
+ # @return [Boolean] Whether the resource was updated during the most recent action.
919
+ #
920
+ def updated_by_last_action(true_or_false)
921
+ @updated ||= true_or_false
922
+ @updated_by_last_action = true_or_false
923
+ end
924
+
925
+ #
926
+ # Whether or not this resource was updated during the most recent action.
927
+ # This is set to `false` at the beginning of each action.
928
+ #
929
+ # @return [Boolean] Whether the resource was updated during the most recent action.
930
+ #
931
+ def updated_by_last_action?
932
+ @updated_by_last_action
933
+ end
934
+
935
+ #
936
+ # Set whether this class was updated during an action.
937
+ #
938
+ # @deprecated Multiple actions are supported by resources. Please call {}#updated_by_last_action} instead.
939
+ #
940
+ def updated=(true_or_false)
941
+ Chef.deprecated(:custom_resource, "Chef::Resource#updated=(true|false) is deprecated. Please call #updated_by_last_action(true|false) instead.")
942
+ updated_by_last_action(true_or_false)
943
+ @updated = true_or_false
944
+ end
945
+
946
+ #
947
+ # The display name of this resource type, for printing purposes.
948
+ #
949
+ # Will be used to print out the resource in messages, e.g. resource_name[name]
950
+ #
951
+ # @return [Symbol] The name of this resource type (e.g. `:execute`).
952
+ #
953
+ def resource_name
954
+ @resource_name || self.class.resource_name
955
+ end
956
+
957
+ #
958
+ # Sets a list of capabilities of the real resource. For example, `:remount`
959
+ # (for filesystems) and `:restart` (for services).
960
+ #
961
+ # TODO Calling resource.supports({}) will not set this to empty; it will do
962
+ # a get instead. That's wrong.
963
+ #
964
+ # @param args Hash{Symbol=>Boolean} If non-empty, sets the capabilities of
965
+ # this resource. Default: {}
966
+ # @return Hash{Symbol=>Boolean} An array of things this resource supports.
967
+ #
968
+ def supports(args = {})
969
+ if args.any?
970
+ @supports = args
971
+ else
972
+ @supports
973
+ end
974
+ end
975
+
976
+ def supports=(args)
977
+ supports(args)
978
+ end
979
+
980
+ #
981
+ # A hook called after a resource is created. Meant to be overriden by
982
+ # subclasses.
983
+ #
984
+ def after_created
985
+ nil
986
+ end
987
+
988
+ #
989
+ # The DSL name of this resource (e.g. `package` or `yum_package`)
990
+ #
991
+ # @return [String] The DSL name of this resource.
992
+ #
993
+ # @deprecated Use resource_name instead.
994
+ #
995
+ def self.dsl_name
996
+ Chef.deprecated(:custom_resource, "Resource.dsl_name is deprecated and will be removed in Chef 13. Use resource_name instead.")
997
+ if name
998
+ name = self.name.split("::")[-1]
999
+ convert_to_snake_case(name)
1000
+ end
1001
+ end
1002
+
1003
+ #
1004
+ # The display name of this resource type, for printing purposes.
1005
+ #
1006
+ # This also automatically calls "provides" to provide DSL with the given
1007
+ # name.
1008
+ #
1009
+ # resource_name defaults to your class name.
1010
+ #
1011
+ # Call `resource_name nil` to remove the resource name (and any
1012
+ # corresponding DSL).
1013
+ #
1014
+ # @param value [Symbol] The desired name of this resource type (e.g.
1015
+ # `execute`), or `nil` if this class is abstract and has no resource_name.
1016
+ #
1017
+ # @return [Symbol] The name of this resource type (e.g. `:execute`).
1018
+ #
1019
+ def self.resource_name(name = NOT_PASSED)
1020
+ # Setter
1021
+ if name != NOT_PASSED
1022
+ remove_canonical_dsl
1023
+
1024
+ # Set the resource_name and call provides
1025
+ if name
1026
+ name = name.to_sym
1027
+ # If our class is not already providing this name, provide it.
1028
+ if !Chef::ResourceResolver.includes_handler?(name, self)
1029
+ provides name, canonical: true
1030
+ end
1031
+ @resource_name = name
1032
+ else
1033
+ @resource_name = nil
1034
+ end
1035
+ end
1036
+ @resource_name
1037
+ end
1038
+
1039
+ def self.resource_name=(name)
1040
+ resource_name(name)
1041
+ end
1042
+
1043
+ #
1044
+ # Use the class name as the resource name.
1045
+ #
1046
+ # Munges the last part of the class name from camel case to snake case,
1047
+ # and sets the resource_name to that:
1048
+ #
1049
+ # A::B::BlahDBlah -> blah_d_blah
1050
+ #
1051
+ def self.use_automatic_resource_name
1052
+ automatic_name = convert_to_snake_case(name.split("::")[-1])
1053
+ resource_name automatic_name
1054
+ end
1055
+
1056
+ #
1057
+ # The module where Chef should look for providers for this resource.
1058
+ # The provider for `MyResource` will be looked up using
1059
+ # `provider_base::MyResource`. Defaults to `Chef::Provider`.
1060
+ #
1061
+ # @param arg [Module] The module containing providers for this resource
1062
+ # @return [Module] The module containing providers for this resource
1063
+ #
1064
+ # @example
1065
+ # class MyResource < Chef::Resource
1066
+ # provider_base Chef::Provider::Deploy
1067
+ # # ...other stuff
1068
+ # end
1069
+ #
1070
+ # @deprecated Use `provides` on the provider, or `provider` on the resource, instead.
1071
+ #
1072
+ def self.provider_base(arg = nil)
1073
+ if arg
1074
+ Chef.deprecated(:custom_resource, "Resource.provider_base is deprecated and will be removed in Chef 13. Use provides on the provider, or provider on the resource, instead.")
1075
+ end
1076
+ @provider_base ||= arg || Chef::Provider
1077
+ end
1078
+
1079
+ #
1080
+ # The list of allowed actions for the resource.
1081
+ #
1082
+ # @param actions [Array<Symbol>] The list of actions to add to allowed_actions.
1083
+ #
1084
+ # @return [Array<Symbol>] The list of actions, as symbols.
1085
+ #
1086
+ def self.allowed_actions(*actions)
1087
+ @allowed_actions ||=
1088
+ if superclass.respond_to?(:allowed_actions)
1089
+ superclass.allowed_actions.dup
1090
+ else
1091
+ [ :nothing ]
1092
+ end
1093
+ @allowed_actions |= actions.flatten
1094
+ end
1095
+
1096
+ def self.allowed_actions=(value)
1097
+ @allowed_actions = value.uniq
1098
+ end
1099
+
1100
+ #
1101
+ # The action that will be run if no other action is specified.
1102
+ #
1103
+ # Setting default_action will automatially add the action to
1104
+ # allowed_actions, if it isn't already there.
1105
+ #
1106
+ # Defaults to [:nothing].
1107
+ #
1108
+ # @param action_name [Symbol,Array<Symbol>] The default action (or series
1109
+ # of actions) to use.
1110
+ #
1111
+ # @return [Array<Symbol>] The default actions for the resource.
1112
+ #
1113
+ def self.default_action(action_name = NOT_PASSED)
1114
+ unless action_name.equal?(NOT_PASSED)
1115
+ @default_action = Array(action_name).map(&:to_sym)
1116
+ self.allowed_actions |= @default_action
1117
+ end
1118
+
1119
+ if @default_action
1120
+ @default_action
1121
+ elsif superclass.respond_to?(:default_action)
1122
+ superclass.default_action
1123
+ else
1124
+ [:nothing]
1125
+ end
1126
+ end
1127
+
1128
+ def self.default_action=(action_name)
1129
+ default_action action_name
1130
+ end
1131
+
1132
+ #
1133
+ # Define an action on this resource.
1134
+ #
1135
+ # The action is defined as a *recipe* block that will be compiled and then
1136
+ # converged when the action is taken (when Resource is converged). The recipe
1137
+ # has access to the resource's attributes and methods, as well as the Chef
1138
+ # recipe DSL.
1139
+ #
1140
+ # Resources in the action recipe may notify and subscribe to other resources
1141
+ # within the action recipe, but cannot notify or subscribe to resources
1142
+ # in the main Chef run.
1143
+ #
1144
+ # Resource actions are *inheritable*: if resource A defines `action :create`
1145
+ # and B is a subclass of A, B gets all of A's actions. Additionally,
1146
+ # resource B can define `action :create` and call `super()` to invoke A's
1147
+ # action code.
1148
+ #
1149
+ # The first action defined (besides `:nothing`) will become the default
1150
+ # action for the resource.
1151
+ #
1152
+ # @param name [Symbol] The action name to define.
1153
+ # @param recipe_block The recipe to run when the action is taken. This block
1154
+ # takes no parameters, and will be evaluated in a new context containing:
1155
+ #
1156
+ # - The resource's public and protected methods (including attributes)
1157
+ # - The Chef Recipe DSL (file, etc.)
1158
+ # - super() referring to the parent version of the action (if any)
1159
+ #
1160
+ # @return The Action class implementing the action
1161
+ #
1162
+ def self.action(action, &recipe_block)
1163
+ action = action.to_sym
1164
+ declare_action_class
1165
+ action_class.action(action, &recipe_block)
1166
+ self.allowed_actions += [ action ]
1167
+ default_action action if Array(default_action) == [:nothing]
1168
+ end
1169
+
1170
+ #
1171
+ # Define a method to load up this resource's properties with the current
1172
+ # actual values.
1173
+ #
1174
+ # @param load_block The block to load. Will be run in the context of a newly
1175
+ # created resource with its identity values filled in.
1176
+ #
1177
+ def self.load_current_value(&load_block)
1178
+ define_method(:load_current_value!, &load_block)
1179
+ end
1180
+
1181
+ #
1182
+ # Call this in `load_current_value` to indicate that the value does not
1183
+ # exist and that `current_resource` should therefore be `nil`.
1184
+ #
1185
+ # @raise Chef::Exceptions::CurrentValueDoesNotExist
1186
+ #
1187
+ def current_value_does_not_exist!
1188
+ raise Chef::Exceptions::CurrentValueDoesNotExist
1189
+ end
1190
+
1191
+ #
1192
+ # Get the current actual value of this resource.
1193
+ #
1194
+ # This does not cache--a new value will be returned each time.
1195
+ #
1196
+ # @return A new copy of the resource, with values filled in from the actual
1197
+ # current value.
1198
+ #
1199
+ def current_value
1200
+ provider = provider_for_action(Array(action).first)
1201
+ if provider.whyrun_mode? && !provider.whyrun_supported?
1202
+ raise "Cannot retrieve #{self.class.current_resource} in why-run mode: #{provider} does not support why-run"
1203
+ end
1204
+ provider.load_current_resource
1205
+ provider.current_resource
1206
+ end
1207
+
1208
+ #
1209
+ # The action class is an automatic `Provider` created to handle
1210
+ # actions declared by `action :x do ... end`.
1211
+ #
1212
+ # This class will be returned by `resource.provider` if `resource.provider`
1213
+ # is not set. `provider_for_action` will also use this instead of calling
1214
+ # out to `Chef::ProviderResolver`.
1215
+ #
1216
+ # If the user has not declared actions on this class or its superclasses
1217
+ # using `action :x do ... end`, then there is no need for this class and
1218
+ # `action_class` will be `nil`.
1219
+ #
1220
+ # If a block is passed, the action_class is always created and the block is
1221
+ # run inside it.
1222
+ #
1223
+ # @api private
1224
+ #
1225
+ def self.action_class(&block)
1226
+ return @action_class if @action_class && !block
1227
+ # If the superclass needed one, then we need one as well.
1228
+ if block || (superclass.respond_to?(:action_class) && superclass.action_class)
1229
+ @action_class = declare_action_class(&block)
1230
+ end
1231
+ @action_class
1232
+ end
1233
+
1234
+ #
1235
+ # Ensure the action class actually gets created. This is called
1236
+ # when the user does `action :x do ... end`.
1237
+ #
1238
+ # If a block is passed, it is run inside the action_class.
1239
+ #
1240
+ # @api private
1241
+ def self.declare_action_class(&block)
1242
+ @action_class ||= begin
1243
+ if superclass.respond_to?(:action_class)
1244
+ base_provider = superclass.action_class
1245
+ end
1246
+ base_provider ||= Chef::Provider
1247
+
1248
+ resource_class = self
1249
+ Class.new(base_provider) do
1250
+ include ActionClass
1251
+ self.resource_class = resource_class
1252
+ end
1253
+ end
1254
+ @action_class.class_eval(&block) if block
1255
+ @action_class
1256
+ end
1257
+
1258
+ #
1259
+ # Internal Resource Interface (for Chef)
1260
+ #
1261
+
1262
+ FORBIDDEN_IVARS = [:@run_context, :@not_if, :@only_if, :@enclosing_provider]
1263
+ HIDDEN_IVARS = [:@allowed_actions, :@resource_name, :@source_line, :@run_context, :@name, :@not_if, :@only_if, :@elapsed_time, :@enclosing_provider]
1264
+
1265
+ include Chef::Mixin::ConvertToClassName
1266
+ extend Chef::Mixin::ConvertToClassName
1267
+
1268
+ # XXX: this is required for definition params inside of the scope of a
1269
+ # subresource to work correctly.
1270
+ attr_accessor :params
1271
+
1272
+ # @return [Chef::RunContext] The run context for this Resource. This is
1273
+ # where the context for the current Chef run is stored, including the node
1274
+ # and the resource collection.
1275
+ attr_accessor :run_context
1276
+
1277
+ # @return [String] The cookbook this resource was declared in.
1278
+ attr_accessor :cookbook_name
1279
+
1280
+ # @return [String] The recipe this resource was declared in.
1281
+ attr_accessor :recipe_name
1282
+
1283
+ # @return [Chef::Provider] The provider this resource was declared in (if
1284
+ # it was declared in an LWRP). When you call methods that do not exist
1285
+ # on this Resource, Chef will try to call the method on the provider
1286
+ # as well before giving up.
1287
+ attr_accessor :enclosing_provider
1288
+
1289
+ # @return [String] The source line where this resource was declared.
1290
+ # Expected to come from caller() or a stack trace, it usually follows one
1291
+ # of these formats:
1292
+ # /some/path/to/file.rb:80:in `wombat_tears'
1293
+ # C:/some/path/to/file.rb:80 in 1`wombat_tears'
1294
+ attr_accessor :source_line
1295
+
1296
+ # @return [String] The actual name that was used to create this resource.
1297
+ # Sometimes, when you say something like `package 'blah'`, the system will
1298
+ # create a different resource (i.e. `YumPackage`). When this happens, the
1299
+ # user will expect to see the thing they wrote, not the type that was
1300
+ # returned. May be `nil`, in which case callers should read #resource_name.
1301
+ # See #declared_key.
1302
+ attr_accessor :declared_type
1303
+
1304
+ #
1305
+ # Iterates over all immediate and delayed notifications, calling
1306
+ # resolve_resource_reference on each in turn, causing them to
1307
+ # resolve lazy/forward references.
1308
+ def resolve_notification_references
1309
+ run_context.before_notifications(self).each do |n|
1310
+ n.resolve_resource_reference(run_context.resource_collection)
1311
+ end
1312
+ run_context.immediate_notifications(self).each do |n|
1313
+ n.resolve_resource_reference(run_context.resource_collection)
1314
+ end
1315
+ run_context.delayed_notifications(self).each do |n|
1316
+ n.resolve_resource_reference(run_context.resource_collection)
1317
+ end
1318
+ end
1319
+
1320
+ # Helper for #notifies
1321
+ def notifies_before(action, resource_spec)
1322
+ run_context.notifies_before(Notification.new(resource_spec, action, self))
1323
+ end
1324
+
1325
+ # Helper for #notifies
1326
+ def notifies_immediately(action, resource_spec)
1327
+ run_context.notifies_immediately(Notification.new(resource_spec, action, self))
1328
+ end
1329
+
1330
+ # Helper for #notifies
1331
+ def notifies_delayed(action, resource_spec)
1332
+ run_context.notifies_delayed(Notification.new(resource_spec, action, self))
1333
+ end
1334
+
1335
+ class << self
1336
+ # back-compat
1337
+ # NOTE: that we do not support unregistering classes as descendants like
1338
+ # we used to for LWRP unloading because that was horrible and removed in
1339
+ # Chef-12.
1340
+ # @deprecated
1341
+ # @api private
1342
+ alias :resource_classes :descendants
1343
+ # @deprecated
1344
+ # @api private
1345
+ alias :find_subclass_by_name :find_descendants_by_name
1346
+ end
1347
+
1348
+ # @deprecated
1349
+ # @api private
1350
+ # We memoize a sorted version of descendants so that resource lookups don't
1351
+ # have to sort all the things, all the time.
1352
+ # This was causing performance issues in test runs, and probably in real
1353
+ # life as well.
1354
+ @@sorted_descendants = nil
1355
+ def self.sorted_descendants
1356
+ @@sorted_descendants ||= descendants.sort_by { |x| x.to_s }
1357
+ end
1358
+
1359
+ def self.inherited(child)
1360
+ super
1361
+ @@sorted_descendants = nil
1362
+ # set resource_name automatically if it's not set
1363
+ if child.name && !child.resource_name
1364
+ if child.name =~ /^Chef::Resource::(\w+)$/
1365
+ child.resource_name(convert_to_snake_case($1))
1366
+ end
1367
+ end
1368
+ end
1369
+
1370
+ # If an unknown method is invoked, determine whether the enclosing Provider's
1371
+ # lexical scope can fulfill the request. E.g. This happens when the Resource's
1372
+ # block invokes new_resource.
1373
+ def method_missing(method_symbol, *args, &block)
1374
+ if enclosing_provider && enclosing_provider.respond_to?(method_symbol)
1375
+ enclosing_provider.send(method_symbol, *args, &block)
1376
+ else
1377
+ raise NoMethodError, "undefined method `#{method_symbol}' for #{self.class}"
1378
+ end
1379
+ end
1380
+
1381
+ #
1382
+ # Mark this resource as providing particular DSL.
1383
+ #
1384
+ # Resources have an automatic DSL based on their resource_name, equivalent to
1385
+ # `provides :resource_name` (providing the resource on all OS's). If you
1386
+ # declare a `provides` with the given resource_name, it *replaces* that
1387
+ # provides (so that you can provide your resource DSL only on certain OS's).
1388
+ #
1389
+ def self.provides(name, **options, &block)
1390
+ name = name.to_sym
1391
+
1392
+ # `provides :resource_name, os: 'linux'`) needs to remove the old
1393
+ # canonical DSL before adding the new one.
1394
+ if @resource_name && name == @resource_name
1395
+ remove_canonical_dsl
1396
+ end
1397
+
1398
+ result = Chef.resource_handler_map.set(name, self, options, &block)
1399
+ Chef::DSL::Resources.add_resource_dsl(name)
1400
+ result
1401
+ end
1402
+
1403
+ def self.provides?(node, resource_name)
1404
+ Chef::ResourceResolver.new(node, resource_name).provided_by?(self)
1405
+ end
1406
+
1407
+ # Helper for #notifies
1408
+ def validate_resource_spec!(resource_spec)
1409
+ run_context.resource_collection.validate_lookup_spec!(resource_spec)
1410
+ end
1411
+
1412
+ # We usually want to store and reference resources by their declared type and not the actual type that
1413
+ # was looked up by the Resolver (IE, "package" becomes YumPackage class). If we have not been provided
1414
+ # the declared key we want to fall back on the old to_s key.
1415
+ def declared_key
1416
+ return to_s if declared_type.nil?
1417
+ "#{declared_type}[#{@name}]"
1418
+ end
1419
+
1420
+ def before_notifications
1421
+ run_context.before_notifications(self)
1422
+ end
1423
+
1424
+ def immediate_notifications
1425
+ run_context.immediate_notifications(self)
1426
+ end
1427
+
1428
+ def delayed_notifications
1429
+ run_context.delayed_notifications(self)
1430
+ end
1431
+
1432
+ def source_line_file
1433
+ if source_line
1434
+ source_line.match(/(.*):(\d+):?.*$/).to_a[1]
1435
+ else
1436
+ nil
1437
+ end
1438
+ end
1439
+
1440
+ def source_line_number
1441
+ if source_line
1442
+ source_line.match(/(.*):(\d+):?.*$/).to_a[2]
1443
+ else
1444
+ nil
1445
+ end
1446
+ end
1447
+
1448
+ def defined_at
1449
+ # The following regexp should match these two sourceline formats:
1450
+ # /some/path/to/file.rb:80:in `wombat_tears'
1451
+ # C:/some/path/to/file.rb:80 in 1`wombat_tears'
1452
+ # extracting the path to the source file and the line number.
1453
+ if cookbook_name && recipe_name && source_line
1454
+ "#{cookbook_name}::#{recipe_name} line #{source_line_number}"
1455
+ elsif source_line
1456
+ "#{source_line_file} line #{source_line_number}"
1457
+ else
1458
+ "dynamically defined"
1459
+ end
1460
+ end
1461
+
1462
+ #
1463
+ # The cookbook in which this Resource was defined (if any).
1464
+ #
1465
+ # @return Chef::CookbookVersion The cookbook in which this Resource was defined.
1466
+ #
1467
+ def cookbook_version
1468
+ if cookbook_name
1469
+ run_context.cookbook_collection[cookbook_name]
1470
+ end
1471
+ end
1472
+
1473
+ def events
1474
+ run_context.events
1475
+ end
1476
+
1477
+ def validate_action(action)
1478
+ raise ArgumentError, "nil is not a valid action for resource #{self}" if action.nil?
1479
+ end
1480
+
1481
+ def provider_for_action(action)
1482
+ provider_class = Chef::ProviderResolver.new(node, self, action).resolve
1483
+ provider = provider_class.new(self, run_context)
1484
+ provider.action = action
1485
+ provider
1486
+ end
1487
+
1488
+ # ??? TODO Seems unused. Delete?
1489
+ def noop(tf = nil)
1490
+ if !tf.nil?
1491
+ raise ArgumentError, "noop must be true or false!" unless tf == true || tf == false
1492
+ @noop = tf
1493
+ end
1494
+ @noop
1495
+ end
1496
+
1497
+ # TODO Seems unused. Delete?
1498
+ def is(*args)
1499
+ if args.size == 1
1500
+ args.first
1501
+ else
1502
+ args
1503
+ end
1504
+ end
1505
+
1506
+ #
1507
+ # Preface an exception message with generic Resource information.
1508
+ #
1509
+ # @param e [StandardError] An exception with `e.message`
1510
+ # @return [String] An exception message customized with class name.
1511
+ #
1512
+ def custom_exception_message(e)
1513
+ "#{self} (#{defined_at}) had an error: #{e.class.name}: #{e.message}"
1514
+ end
1515
+
1516
+ def customize_exception(e)
1517
+ new_exception = e.exception(custom_exception_message(e))
1518
+ new_exception.set_backtrace(e.backtrace)
1519
+ new_exception
1520
+ end
1521
+
1522
+ # Evaluates not_if and only_if conditionals. Returns a falsey value if any
1523
+ # of the conditionals indicate that this resource should be skipped, i.e.,
1524
+ # if an only_if evaluates to false or a not_if evaluates to true.
1525
+ #
1526
+ # If this resource should be skipped, returns the first conditional that
1527
+ # "fails" its check. Subsequent conditionals are not evaluated, so in
1528
+ # general it's not a good idea to rely on side effects from not_if or
1529
+ # only_if commands/blocks being evaluated.
1530
+ #
1531
+ # Also skips conditional checking when the action is :nothing
1532
+ def should_skip?(action)
1533
+ conditional_action = ConditionalActionNotNothing.new(action)
1534
+
1535
+ conditionals = [ conditional_action ] + only_if + not_if
1536
+ conditionals.find do |conditional|
1537
+ if conditional.continue?
1538
+ false
1539
+ else
1540
+ events.resource_skipped(self, action, conditional)
1541
+ Chef::Log.debug("Skipping #{self} due to #{conditional.description}")
1542
+ true
1543
+ end
1544
+ end
1545
+ end
1546
+
1547
+ # Returns a resource based on a short_name and node
1548
+ #
1549
+ # ==== Parameters
1550
+ # short_name<Symbol>:: short_name of the resource (ie :directory)
1551
+ # node<Chef::Node>:: Node object to look up platform and version in
1552
+ #
1553
+ # === Returns
1554
+ # <Chef::Resource>:: returns the proper Chef::Resource class
1555
+ def self.resource_for_node(short_name, node)
1556
+ klass = Chef::ResourceResolver.resolve(short_name, node: node)
1557
+ raise Chef::Exceptions::NoSuchResourceType.new(short_name, node) if klass.nil?
1558
+ klass
1559
+ end
1560
+
1561
+ #
1562
+ # Returns the class with the given resource_name.
1563
+ #
1564
+ # NOTE: Chef::Resource.resource_matching_short_name(:package) returns
1565
+ # Chef::Resource::Package, while on rhel the API call
1566
+ # Chef::Resource.resource_for_node(:package, node) will return
1567
+ # Chef::Resource::YumPackage -- which is probably what you really
1568
+ # want. This API should most likely be removed or changed to call
1569
+ # resource_for_node.
1570
+ #
1571
+ # ==== Parameters
1572
+ # short_name<Symbol>:: short_name of the resource (ie :directory)
1573
+ #
1574
+ # === Returns
1575
+ # <Chef::Resource>:: returns the proper Chef::Resource class
1576
+ #
1577
+ def self.resource_matching_short_name(short_name)
1578
+ Chef::ResourceResolver.resolve(short_name, canonical: true)
1579
+ end
1580
+
1581
+ # @api private
1582
+ def lookup_provider_constant(name, action = :nothing)
1583
+ self.class.provider_base.const_get(convert_to_class_name(name.to_s))
1584
+ rescue NameError => e
1585
+ if e.to_s =~ /#{Regexp.escape(self.class.provider_base.to_s)}/
1586
+ raise ArgumentError, "No provider found to match '#{name}'"
1587
+ else
1588
+ raise e
1589
+ end
1590
+ end
1591
+
1592
+ module DeprecatedLWRPClass
1593
+
1594
+ # @api private
1595
+ def register_deprecated_lwrp_class(resource_class, class_name)
1596
+ if Chef::Resource.const_defined?(class_name, false)
1597
+ Chef::Log.warn "#{class_name} already exists! Deprecation class overwrites #{resource_class}"
1598
+ Chef::Resource.send(:remove_const, class_name)
1599
+ end
1600
+
1601
+ if !Chef::Config[:treat_deprecation_warnings_as_errors]
1602
+ Chef::Resource.const_set(class_name, resource_class)
1603
+ Chef::Resource.deprecated_constants[class_name.to_sym] = resource_class
1604
+ end
1605
+ end
1606
+
1607
+ def deprecated_constants
1608
+ raise "Deprecated constants should be called only on Chef::Resource" unless self == Chef::Resource
1609
+ @deprecated_constants ||= {}
1610
+ end
1611
+ end
1612
+
1613
+ def self.remove_canonical_dsl
1614
+ if @resource_name
1615
+ remaining = Chef.resource_handler_map.delete_canonical(@resource_name, self)
1616
+ if !remaining
1617
+ Chef::DSL::Resources.remove_resource_dsl(@resource_name)
1618
+ end
1619
+ end
1620
+ end
1621
+ extend DeprecatedLWRPClass
1622
+ end
1623
+ end
1624
+
1625
+ # Requiring things at the bottom breaks cycles
1626
+ require "chef/chef_class"