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