chef 14.5.27-universal-mingw32 → 14.5.33-universal-mingw32

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