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