chef 12.7.2 → 12.8.1

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