chef 14.15.6 → 15.0.293

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 (2119) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +26 -5
  3. data/LICENSE +0 -0
  4. data/README.md +11 -198
  5. data/Rakefile +13 -8
  6. data/chef-universal-mingw32.gemspec +2 -4
  7. data/chef.gemspec +12 -14
  8. data/lib/chef.rb +15 -14
  9. data/lib/chef/action_collection.rb +252 -0
  10. data/lib/chef/api_client.rb +7 -7
  11. data/lib/chef/api_client/registration.rb +3 -3
  12. data/lib/chef/api_client_v1.rb +10 -10
  13. data/lib/chef/application.rb +22 -11
  14. data/lib/chef/application/apply.rb +24 -27
  15. data/lib/chef/application/client.rb +76 -89
  16. data/lib/chef/application/exit_code.rb +7 -14
  17. data/lib/chef/application/knife.rb +27 -26
  18. data/lib/chef/application/solo.rb +47 -53
  19. data/lib/chef/application/windows_service.rb +27 -26
  20. data/lib/chef/application/windows_service_manager.rb +9 -8
  21. data/lib/chef/applications.rb +4 -4
  22. data/lib/chef/blacklist.rb +1 -1
  23. data/lib/chef/chef_class.rb +7 -7
  24. data/lib/chef/chef_fs.rb +1 -1
  25. data/lib/chef/chef_fs/chef_fs_data_store.rb +5 -5
  26. data/lib/chef/chef_fs/command_line.rb +3 -3
  27. data/lib/chef/chef_fs/config.rb +4 -4
  28. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +1 -1
  29. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +2 -2
  30. data/lib/chef/chef_fs/data_handler/client_key_data_handler.rb +2 -2
  31. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  32. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +2 -2
  33. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +3 -3
  34. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +0 -0
  35. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +2 -2
  36. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +2 -2
  37. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +2 -2
  38. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
  39. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +1 -1
  40. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +1 -1
  41. data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +1 -1
  42. data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +1 -1
  43. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +2 -2
  44. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
  45. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  46. data/lib/chef/chef_fs/file_system.rb +3 -3
  47. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +2 -2
  48. data/lib/chef/chef_fs/file_system/base_fs_object.rb +3 -3
  49. data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +3 -3
  50. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +2 -2
  51. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +6 -6
  52. data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +24 -24
  53. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifact_dir.rb +1 -1
  54. data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +2 -2
  55. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +7 -7
  56. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +2 -2
  57. data/lib/chef/chef_fs/file_system/chef_server/cookbook_subdir.rb +1 -1
  58. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_acl_dir.rb +1 -1
  59. data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +5 -5
  60. data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +4 -4
  61. data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +2 -2
  62. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +2 -2
  63. data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +3 -3
  64. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +4 -4
  65. data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +2 -2
  66. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +3 -3
  67. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +3 -3
  68. data/lib/chef/chef_fs/file_system/chef_server/policies_acl_dir.rb +1 -1
  69. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +2 -2
  70. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +8 -7
  71. data/lib/chef/chef_fs/file_system/chef_server/policy_groups_dir.rb +4 -4
  72. data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +2 -2
  73. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +3 -3
  74. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +5 -5
  75. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +2 -2
  76. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +2 -2
  77. data/lib/chef/chef_fs/file_system/exceptions.rb +0 -0
  78. data/lib/chef/chef_fs/file_system/memory/memory_dir.rb +2 -2
  79. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
  80. data/lib/chef/chef_fs/file_system/memory/memory_root.rb +1 -1
  81. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +2 -2
  82. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +2 -2
  83. data/lib/chef/chef_fs/file_system/repository/acl.rb +2 -2
  84. data/lib/chef/chef_fs/file_system/repository/acls_dir.rb +5 -5
  85. data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +3 -3
  86. data/lib/chef/chef_fs/file_system/repository/base_file.rb +1 -1
  87. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_artifact_dir.rb +1 -1
  88. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +5 -5
  89. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +3 -3
  90. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +29 -29
  91. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_versioned_cookbook_dir.rb +1 -1
  92. data/lib/chef/chef_fs/file_system/repository/client.rb +2 -2
  93. data/lib/chef/chef_fs/file_system/repository/client_key.rb +2 -2
  94. data/lib/chef/chef_fs/file_system/repository/client_keys_dir.rb +3 -3
  95. data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +3 -3
  96. data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +3 -3
  97. data/lib/chef/chef_fs/file_system/repository/container.rb +2 -2
  98. data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +3 -3
  99. data/lib/chef/chef_fs/file_system/repository/cookbook_artifacts_dir.rb +2 -2
  100. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +3 -3
  101. data/lib/chef/chef_fs/file_system/repository/data_bag.rb +2 -2
  102. data/lib/chef/chef_fs/file_system/repository/data_bag_item.rb +2 -2
  103. data/lib/chef/chef_fs/file_system/repository/data_bags_dir.rb +2 -2
  104. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  105. data/lib/chef/chef_fs/file_system/repository/environment.rb +2 -2
  106. data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +3 -3
  107. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +4 -4
  108. data/lib/chef/chef_fs/file_system/repository/group.rb +2 -2
  109. data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +3 -3
  110. data/lib/chef/chef_fs/file_system/repository/node.rb +2 -2
  111. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +4 -4
  112. data/lib/chef/chef_fs/file_system/repository/policies_dir.rb +3 -3
  113. data/lib/chef/chef_fs/file_system/repository/policy.rb +2 -2
  114. data/lib/chef/chef_fs/file_system/repository/policy_group.rb +2 -2
  115. data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +3 -3
  116. data/lib/chef/chef_fs/file_system/repository/role.rb +2 -2
  117. data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +3 -3
  118. data/lib/chef/chef_fs/file_system/repository/user.rb +2 -2
  119. data/lib/chef/chef_fs/file_system/repository/users_dir.rb +3 -3
  120. data/lib/chef/chef_fs/file_system/repository/versioned_cookbooks_dir.rb +2 -2
  121. data/lib/chef/chef_fs/file_system_cache.rb +1 -1
  122. data/lib/chef/chef_fs/knife.rb +6 -6
  123. data/lib/chef/chef_fs/parallelizer.rb +1 -1
  124. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +0 -0
  125. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  126. data/lib/chef/chef_fs/path_utils.rb +1 -1
  127. data/lib/chef/client.rb +139 -242
  128. data/lib/chef/config.rb +2 -2
  129. data/lib/chef/config_fetcher.rb +4 -4
  130. data/lib/chef/constants.rb +0 -0
  131. data/lib/chef/cookbook/chefignore.rb +1 -2
  132. data/lib/chef/cookbook/cookbook_collection.rb +2 -3
  133. data/lib/chef/cookbook/cookbook_version_loader.rb +73 -62
  134. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -2
  135. data/lib/chef/cookbook/file_vendor.rb +0 -1
  136. data/lib/chef/cookbook/gem_installer.rb +3 -10
  137. data/lib/chef/cookbook/manifest_v0.rb +2 -2
  138. data/lib/chef/cookbook/manifest_v2.rb +2 -2
  139. data/lib/chef/cookbook/metadata.rb +30 -82
  140. data/lib/chef/cookbook/remote_file_vendor.rb +1 -2
  141. data/lib/chef/cookbook/synchronizer.rb +20 -4
  142. data/lib/chef/cookbook/syntax_check.rb +3 -4
  143. data/lib/chef/cookbook_loader.rb +88 -111
  144. data/lib/chef/cookbook_manifest.rb +5 -5
  145. data/lib/chef/cookbook_site_streaming_uploader.rb +0 -0
  146. data/lib/chef/cookbook_uploader.rb +10 -10
  147. data/lib/chef/cookbook_version.rb +7 -7
  148. data/lib/chef/daemon.rb +2 -2
  149. data/lib/chef/data_bag.rb +12 -12
  150. data/lib/chef/data_bag_item.rb +12 -12
  151. data/lib/chef/data_collector.rb +213 -454
  152. data/lib/chef/data_collector/config_validation.rb +88 -0
  153. data/lib/chef/data_collector/error_handlers.rb +116 -0
  154. data/lib/chef/data_collector/message_helpers.rb +50 -0
  155. data/lib/chef/data_collector/run_end_message.rb +172 -0
  156. data/lib/chef/data_collector/run_start_message.rb +60 -0
  157. data/lib/chef/decorator.rb +0 -0
  158. data/lib/chef/decorator/lazy.rb +1 -1
  159. data/lib/chef/decorator/lazy_array.rb +1 -1
  160. data/lib/chef/decorator/unchain.rb +0 -0
  161. data/lib/chef/delayed_evaluator.rb +0 -0
  162. data/lib/chef/deprecated.rb +6 -13
  163. data/lib/chef/deprecation/warnings.rb +1 -1
  164. data/lib/chef/digester.rb +0 -0
  165. data/lib/chef/dist.rb +19 -0
  166. data/lib/chef/dsl.rb +6 -6
  167. data/lib/chef/dsl/cheffish.rb +0 -0
  168. data/lib/chef/dsl/core.rb +4 -4
  169. data/lib/chef/dsl/data_query.rb +5 -5
  170. data/lib/chef/dsl/declare_resource.rb +2 -2
  171. data/lib/chef/dsl/definitions.rb +0 -0
  172. data/lib/chef/dsl/include_attribute.rb +1 -1
  173. data/lib/chef/dsl/include_recipe.rb +1 -7
  174. data/lib/chef/dsl/platform_introspection.rb +0 -0
  175. data/lib/chef/dsl/powershell.rb +1 -1
  176. data/lib/chef/dsl/reboot_pending.rb +2 -2
  177. data/lib/chef/dsl/recipe.rb +8 -10
  178. data/lib/chef/dsl/registry_helper.rb +0 -0
  179. data/lib/chef/dsl/resources.rb +5 -7
  180. data/lib/chef/dsl/universal.rb +10 -8
  181. data/lib/chef/encrypted_data_bag_item.rb +4 -4
  182. data/lib/chef/encrypted_data_bag_item/assertions.rb +2 -2
  183. data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +1 -1
  184. data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +0 -0
  185. data/lib/chef/encrypted_data_bag_item/decryptor.rb +46 -41
  186. data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +0 -0
  187. data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +0 -0
  188. data/lib/chef/encrypted_data_bag_item/encryptor.rb +4 -4
  189. data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +0 -0
  190. data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +0 -0
  191. data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +0 -0
  192. data/lib/chef/environment.rb +7 -7
  193. data/lib/chef/event_dispatch/base.rb +18 -32
  194. data/lib/chef/event_dispatch/dispatcher.rb +41 -15
  195. data/lib/chef/event_dispatch/dsl.rb +3 -3
  196. data/lib/chef/event_dispatch/events_output_stream.rb +0 -0
  197. data/lib/chef/event_loggers/base.rb +1 -1
  198. data/lib/chef/event_loggers/windows_eventlog.rb +5 -5
  199. data/lib/chef/exceptions.rb +6 -35
  200. data/lib/chef/file_access_control.rb +3 -3
  201. data/lib/chef/file_access_control/unix.rb +1 -1
  202. data/lib/chef/file_access_control/windows.rb +2 -2
  203. data/lib/chef/file_cache.rb +5 -5
  204. data/lib/chef/file_content_management/content_base.rb +0 -0
  205. data/lib/chef/file_content_management/deploy.rb +3 -3
  206. data/lib/chef/file_content_management/deploy/cp.rb +0 -0
  207. data/lib/chef/file_content_management/deploy/mv_unix.rb +0 -0
  208. data/lib/chef/file_content_management/deploy/mv_windows.rb +2 -2
  209. data/lib/chef/file_content_management/tempfile.rb +0 -0
  210. data/lib/chef/formatters/base.rb +5 -5
  211. data/lib/chef/formatters/doc.rb +15 -57
  212. data/lib/chef/formatters/error_description.rb +1 -1
  213. data/lib/chef/formatters/error_inspectors.rb +7 -7
  214. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +15 -14
  215. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +0 -0
  216. data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +3 -3
  217. data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +1 -1
  218. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +9 -8
  219. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +18 -17
  220. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +3 -2
  221. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +10 -9
  222. data/lib/chef/formatters/error_mapper.rb +0 -0
  223. data/lib/chef/formatters/indentable_output_stream.rb +0 -0
  224. data/lib/chef/formatters/minimal.rb +7 -5
  225. data/lib/chef/guard_interpreter.rb +2 -2
  226. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +4 -7
  227. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +1 -1
  228. data/lib/chef/handler.rb +1 -1
  229. data/lib/chef/handler/error_report.rb +2 -2
  230. data/lib/chef/handler/json_file.rb +2 -2
  231. data/lib/chef/http.rb +6 -6
  232. data/lib/chef/http/api_versions.rb +2 -2
  233. data/lib/chef/http/auth_credentials.rb +1 -1
  234. data/lib/chef/http/authenticator.rb +2 -2
  235. data/lib/chef/http/basic_client.rb +2 -2
  236. data/lib/chef/http/cookie_jar.rb +0 -0
  237. data/lib/chef/http/cookie_manager.rb +1 -1
  238. data/lib/chef/http/decompressor.rb +1 -1
  239. data/lib/chef/http/http_request.rb +3 -2
  240. data/lib/chef/http/json_input.rb +1 -1
  241. data/lib/chef/http/json_output.rb +2 -2
  242. data/lib/chef/http/json_to_model_output.rb +1 -1
  243. data/lib/chef/http/remote_request_id.rb +1 -1
  244. data/lib/chef/http/simple.rb +5 -5
  245. data/lib/chef/http/simple_json.rb +5 -5
  246. data/lib/chef/http/socketless_chef_zero_client.rb +8 -8
  247. data/lib/chef/http/ssl_policies.rb +1 -1
  248. data/lib/chef/http/validate_content_length.rb +1 -1
  249. data/lib/chef/json_compat.rb +1 -1
  250. data/lib/chef/key.rb +4 -4
  251. data/lib/chef/knife.rb +55 -37
  252. data/lib/chef/knife/bootstrap.rb +728 -196
  253. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +0 -1
  254. data/lib/chef/knife/bootstrap/client_builder.rb +4 -5
  255. data/lib/chef/knife/bootstrap/templates/README.md +0 -0
  256. data/lib/chef/knife/bootstrap/templates/chef-full.erb +5 -5
  257. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +276 -0
  258. data/lib/chef/knife/bootstrap/train_connector.rb +325 -0
  259. data/lib/chef/knife/client_bulk_delete.rb +3 -3
  260. data/lib/chef/knife/client_create.rb +5 -14
  261. data/lib/chef/knife/client_delete.rb +3 -3
  262. data/lib/chef/knife/client_edit.rb +2 -2
  263. data/lib/chef/knife/client_key_create.rb +3 -3
  264. data/lib/chef/knife/client_key_delete.rb +2 -2
  265. data/lib/chef/knife/client_key_edit.rb +3 -3
  266. data/lib/chef/knife/client_key_list.rb +3 -3
  267. data/lib/chef/knife/client_key_show.rb +2 -2
  268. data/lib/chef/knife/client_list.rb +3 -3
  269. data/lib/chef/knife/client_reregister.rb +3 -3
  270. data/lib/chef/knife/client_show.rb +2 -2
  271. data/lib/chef/knife/config_get.rb +2 -3
  272. data/lib/chef/knife/config_get_profile.rb +1 -1
  273. data/lib/chef/knife/config_list_profiles.rb +2 -2
  274. data/lib/chef/knife/config_use_profile.rb +1 -1
  275. data/lib/chef/knife/configure.rb +3 -3
  276. data/lib/chef/knife/configure_client.rb +1 -1
  277. data/lib/chef/knife/cookbook_bulk_delete.rb +3 -3
  278. data/lib/chef/knife/cookbook_delete.rb +2 -2
  279. data/lib/chef/knife/cookbook_download.rb +5 -5
  280. data/lib/chef/knife/cookbook_list.rb +2 -2
  281. data/lib/chef/knife/cookbook_metadata.rb +5 -5
  282. data/lib/chef/knife/cookbook_metadata_from_file.rb +3 -3
  283. data/lib/chef/knife/cookbook_show.rb +7 -7
  284. data/lib/chef/knife/cookbook_site_download.rb +3 -3
  285. data/lib/chef/knife/cookbook_site_install.rb +3 -3
  286. data/lib/chef/knife/cookbook_site_list.rb +3 -3
  287. data/lib/chef/knife/cookbook_site_search.rb +3 -3
  288. data/lib/chef/knife/cookbook_site_share.rb +3 -3
  289. data/lib/chef/knife/cookbook_site_show.rb +3 -3
  290. data/lib/chef/knife/cookbook_site_unshare.rb +3 -3
  291. data/lib/chef/knife/cookbook_upload.rb +11 -46
  292. data/lib/chef/knife/core/bootstrap_context.rb +18 -32
  293. data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
  294. data/lib/chef/knife/core/gem_glob_loader.rb +4 -4
  295. data/lib/chef/knife/core/generic_presenter.rb +1 -1
  296. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  297. data/lib/chef/knife/core/node_editor.rb +2 -2
  298. data/lib/chef/knife/core/node_presenter.rb +10 -10
  299. data/lib/chef/knife/core/object_loader.rb +2 -2
  300. data/lib/chef/knife/core/status_presenter.rb +2 -2
  301. data/lib/chef/knife/core/subcommand_loader.rb +4 -4
  302. data/lib/chef/knife/core/text_formatter.rb +0 -0
  303. data/lib/chef/knife/core/ui.rb +26 -3
  304. data/lib/chef/knife/core/windows_bootstrap_context.rb +379 -0
  305. data/lib/chef/knife/data_bag_create.rb +4 -4
  306. data/lib/chef/knife/data_bag_delete.rb +2 -2
  307. data/lib/chef/knife/data_bag_edit.rb +4 -4
  308. data/lib/chef/knife/data_bag_from_file.rb +7 -7
  309. data/lib/chef/knife/data_bag_list.rb +2 -2
  310. data/lib/chef/knife/data_bag_secret_options.rb +3 -3
  311. data/lib/chef/knife/data_bag_show.rb +4 -4
  312. data/lib/chef/knife/delete.rb +2 -2
  313. data/lib/chef/knife/deps.rb +6 -4
  314. data/lib/chef/knife/diff.rb +4 -5
  315. data/lib/chef/knife/download.rb +2 -2
  316. data/lib/chef/knife/edit.rb +3 -3
  317. data/lib/chef/knife/environment_compare.rb +2 -2
  318. data/lib/chef/knife/environment_create.rb +2 -2
  319. data/lib/chef/knife/environment_delete.rb +2 -2
  320. data/lib/chef/knife/environment_edit.rb +2 -2
  321. data/lib/chef/knife/environment_from_file.rb +3 -3
  322. data/lib/chef/knife/environment_list.rb +2 -2
  323. data/lib/chef/knife/environment_show.rb +2 -2
  324. data/lib/chef/knife/exec.rb +5 -5
  325. data/lib/chef/knife/key_create.rb +4 -4
  326. data/lib/chef/knife/key_create_base.rb +0 -0
  327. data/lib/chef/knife/key_delete.rb +1 -1
  328. data/lib/chef/knife/key_edit.rb +4 -4
  329. data/lib/chef/knife/key_edit_base.rb +0 -0
  330. data/lib/chef/knife/key_list.rb +4 -4
  331. data/lib/chef/knife/key_list_base.rb +0 -0
  332. data/lib/chef/knife/key_show.rb +3 -3
  333. data/lib/chef/knife/list.rb +15 -10
  334. data/lib/chef/knife/node_bulk_delete.rb +3 -3
  335. data/lib/chef/knife/node_create.rb +3 -3
  336. data/lib/chef/knife/node_delete.rb +3 -3
  337. data/lib/chef/knife/node_edit.rb +5 -5
  338. data/lib/chef/knife/node_environment_set.rb +2 -2
  339. data/lib/chef/knife/node_from_file.rb +4 -4
  340. data/lib/chef/knife/node_list.rb +4 -4
  341. data/lib/chef/knife/node_policy_set.rb +3 -3
  342. data/lib/chef/knife/node_run_list_add.rb +7 -7
  343. data/lib/chef/knife/node_run_list_remove.rb +3 -3
  344. data/lib/chef/knife/node_run_list_set.rb +3 -3
  345. data/lib/chef/knife/node_show.rb +4 -4
  346. data/lib/chef/knife/null.rb +3 -0
  347. data/lib/chef/knife/raw.rb +9 -9
  348. data/lib/chef/knife/recipe_list.rb +1 -1
  349. data/lib/chef/knife/rehash.rb +2 -2
  350. data/lib/chef/knife/role_bulk_delete.rb +3 -3
  351. data/lib/chef/knife/role_create.rb +3 -3
  352. data/lib/chef/knife/role_delete.rb +3 -3
  353. data/lib/chef/knife/role_edit.rb +3 -3
  354. data/lib/chef/knife/role_env_run_list_add.rb +3 -3
  355. data/lib/chef/knife/role_env_run_list_clear.rb +3 -3
  356. data/lib/chef/knife/role_env_run_list_remove.rb +3 -3
  357. data/lib/chef/knife/role_env_run_list_replace.rb +3 -3
  358. data/lib/chef/knife/role_env_run_list_set.rb +3 -3
  359. data/lib/chef/knife/role_from_file.rb +4 -4
  360. data/lib/chef/knife/role_list.rb +3 -3
  361. data/lib/chef/knife/role_run_list_add.rb +3 -3
  362. data/lib/chef/knife/role_run_list_clear.rb +3 -3
  363. data/lib/chef/knife/role_run_list_remove.rb +2 -2
  364. data/lib/chef/knife/role_run_list_replace.rb +3 -3
  365. data/lib/chef/knife/role_run_list_set.rb +2 -2
  366. data/lib/chef/knife/role_show.rb +2 -2
  367. data/lib/chef/knife/search.rb +6 -6
  368. data/lib/chef/knife/serve.rb +2 -2
  369. data/lib/chef/knife/show.rb +3 -3
  370. data/lib/chef/knife/ssh.rb +6 -12
  371. data/lib/chef/knife/ssl_check.rb +7 -7
  372. data/lib/chef/knife/ssl_fetch.rb +4 -4
  373. data/lib/chef/knife/status.rb +4 -17
  374. data/lib/chef/knife/supermarket_download.rb +1 -1
  375. data/lib/chef/knife/supermarket_install.rb +4 -4
  376. data/lib/chef/knife/supermarket_list.rb +1 -1
  377. data/lib/chef/knife/supermarket_search.rb +1 -1
  378. data/lib/chef/knife/supermarket_share.rb +5 -5
  379. data/lib/chef/knife/supermarket_show.rb +1 -1
  380. data/lib/chef/knife/supermarket_unshare.rb +2 -2
  381. data/lib/chef/knife/tag_create.rb +2 -2
  382. data/lib/chef/knife/tag_delete.rb +2 -2
  383. data/lib/chef/knife/tag_list.rb +2 -2
  384. data/lib/chef/knife/upload.rb +2 -2
  385. data/lib/chef/knife/user_create.rb +36 -80
  386. data/lib/chef/knife/user_delete.rb +3 -55
  387. data/lib/chef/knife/user_edit.rb +10 -40
  388. data/lib/chef/knife/user_key_create.rb +3 -3
  389. data/lib/chef/knife/user_key_delete.rb +2 -2
  390. data/lib/chef/knife/user_key_edit.rb +3 -3
  391. data/lib/chef/knife/user_key_list.rb +3 -3
  392. data/lib/chef/knife/user_key_show.rb +2 -2
  393. data/lib/chef/knife/user_list.rb +2 -4
  394. data/lib/chef/knife/user_reregister.rb +11 -42
  395. data/lib/chef/knife/user_show.rb +3 -34
  396. data/lib/chef/knife/xargs.rb +4 -4
  397. data/lib/chef/local_mode.rb +6 -9
  398. data/lib/chef/log.rb +4 -4
  399. data/lib/chef/log/syslog.rb +3 -2
  400. data/lib/chef/log/winevt.rb +3 -3
  401. data/lib/chef/mash.rb +0 -0
  402. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  403. data/lib/chef/mixin/checksum.rb +1 -1
  404. data/lib/chef/mixin/convert_to_class_name.rb +0 -0
  405. data/lib/chef/mixin/create_path.rb +0 -0
  406. data/lib/chef/mixin/deep_merge.rb +0 -0
  407. data/lib/chef/mixin/deprecation.rb +0 -0
  408. data/lib/chef/mixin/descendants_tracker.rb +0 -0
  409. data/lib/chef/mixin/enforce_ownership_and_permissions.rb +1 -1
  410. data/lib/chef/mixin/file_class.rb +1 -1
  411. data/lib/chef/mixin/from_file.rb +0 -0
  412. data/lib/chef/mixin/get_source_from_package.rb +0 -0
  413. data/lib/chef/mixin/homebrew_user.rb +1 -1
  414. data/lib/chef/mixin/lazy_module_include.rb +0 -0
  415. data/lib/chef/mixin/notifying_block.rb +0 -0
  416. data/lib/chef/mixin/openssl_helper.rb +0 -0
  417. data/lib/chef/mixin/params_validate.rb +4 -4
  418. data/lib/chef/mixin/path_sanity.rb +0 -0
  419. data/lib/chef/mixin/powershell_exec.rb +1 -1
  420. data/lib/chef/mixin/powershell_out.rb +2 -2
  421. data/lib/chef/mixin/powershell_type_coercions.rb +0 -0
  422. data/lib/chef/mixin/properties.rb +39 -7
  423. data/lib/chef/mixin/provides.rb +1 -1
  424. data/lib/chef/mixin/proxified_socket.rb +0 -0
  425. data/lib/chef/mixin/securable.rb +0 -0
  426. data/lib/chef/mixin/shell_out.rb +6 -77
  427. data/lib/chef/mixin/subclass_directive.rb +0 -0
  428. data/lib/chef/mixin/template.rb +9 -14
  429. data/lib/chef/mixin/train_or_shell.rb +83 -0
  430. data/lib/chef/mixin/unformatter.rb +0 -0
  431. data/lib/chef/mixin/uris.rb +0 -0
  432. data/lib/chef/mixin/user_context.rb +1 -1
  433. data/lib/chef/mixin/versioned_api.rb +0 -0
  434. data/lib/chef/mixin/which.rb +1 -1
  435. data/lib/chef/mixin/why_run.rb +0 -0
  436. data/lib/chef/mixin/wide_string.rb +0 -0
  437. data/lib/chef/mixin/windows_architecture_helper.rb +4 -4
  438. data/lib/chef/mixin/windows_env_helper.rb +6 -6
  439. data/lib/chef/mixin/xml_escape.rb +7 -7
  440. data/lib/chef/mixins.rb +12 -12
  441. data/lib/chef/monkey_patches/net_http.rb +0 -0
  442. data/lib/chef/monkey_patches/webrick-utils.rb +0 -0
  443. data/lib/chef/monkey_patches/win32/registry.rb +3 -29
  444. data/lib/chef/monologger.rb +0 -0
  445. data/lib/chef/nil_argument.rb +0 -0
  446. data/lib/chef/node.rb +65 -21
  447. data/lib/chef/node/attribute.rb +22 -20
  448. data/lib/chef/node/attribute_collections.rb +14 -49
  449. data/lib/chef/node/common_api.rb +0 -0
  450. data/lib/chef/node/immutable_collections.rb +4 -4
  451. data/lib/chef/node/mixin/deep_merge_cache.rb +0 -0
  452. data/lib/chef/node/mixin/immutablize_array.rb +0 -1
  453. data/lib/chef/node/mixin/immutablize_hash.rb +0 -0
  454. data/lib/chef/node/mixin/mashy_array.rb +68 -0
  455. data/lib/chef/node/mixin/state_tracking.rb +0 -0
  456. data/lib/chef/node_map.rb +16 -3
  457. data/lib/chef/null_logger.rb +0 -0
  458. data/lib/chef/org.rb +3 -3
  459. data/lib/chef/platform.rb +2 -2
  460. data/lib/chef/platform/priority_map.rb +1 -1
  461. data/lib/chef/platform/provider_handler_map.rb +1 -1
  462. data/lib/chef/platform/provider_mapping.rb +5 -5
  463. data/lib/chef/platform/provider_priority_map.rb +1 -1
  464. data/lib/chef/platform/query_helpers.rb +1 -1
  465. data/lib/chef/platform/rebooter.rb +5 -5
  466. data/lib/chef/platform/resource_handler_map.rb +1 -1
  467. data/lib/chef/platform/resource_priority_map.rb +1 -1
  468. data/lib/chef/platform/service_helpers.rb +1 -1
  469. data/lib/chef/policy_builder.rb +3 -3
  470. data/lib/chef/policy_builder/dynamic.rb +8 -7
  471. data/lib/chef/policy_builder/expand_node_object.rb +42 -33
  472. data/lib/chef/policy_builder/policyfile.rb +18 -16
  473. data/lib/chef/powershell.rb +1 -1
  474. data/lib/chef/property.rb +4 -4
  475. data/lib/chef/provider.rb +34 -25
  476. data/lib/chef/provider/apt_preference.rb +4 -4
  477. data/lib/chef/provider/apt_repository.rb +5 -5
  478. data/lib/chef/provider/apt_update.rb +3 -3
  479. data/lib/chef/provider/batch.rb +1 -1
  480. data/lib/chef/provider/cookbook_file.rb +1 -1
  481. data/lib/chef/provider/cookbook_file/content.rb +2 -2
  482. data/lib/chef/provider/cron.rb +5 -5
  483. data/lib/chef/provider/cron/aix.rb +1 -1
  484. data/lib/chef/provider/cron/solaris.rb +1 -1
  485. data/lib/chef/provider/cron/unix.rb +3 -3
  486. data/lib/chef/provider/directory.rb +5 -5
  487. data/lib/chef/provider/dsc_resource.rb +4 -4
  488. data/lib/chef/provider/dsc_script.rb +4 -4
  489. data/lib/chef/provider/execute.rb +7 -4
  490. data/lib/chef/provider/file.rb +14 -13
  491. data/lib/chef/provider/file/content.rb +2 -2
  492. data/lib/chef/provider/git.rb +22 -20
  493. data/lib/chef/provider/group.rb +2 -2
  494. data/lib/chef/provider/group/aix.rb +1 -1
  495. data/lib/chef/provider/group/dscl.rb +0 -0
  496. data/lib/chef/provider/group/gpasswd.rb +1 -1
  497. data/lib/chef/provider/group/groupadd.rb +1 -1
  498. data/lib/chef/provider/group/groupmod.rb +0 -0
  499. data/lib/chef/provider/group/pw.rb +0 -0
  500. data/lib/chef/provider/group/solaris.rb +62 -0
  501. data/lib/chef/provider/group/suse.rb +2 -3
  502. data/lib/chef/provider/group/usermod.rb +4 -7
  503. data/lib/chef/provider/group/windows.rb +2 -2
  504. data/lib/chef/provider/http_request.rb +1 -1
  505. data/lib/chef/provider/ifconfig.rb +13 -24
  506. data/lib/chef/provider/ifconfig/aix.rb +1 -1
  507. data/lib/chef/provider/ifconfig/debian.rb +2 -2
  508. data/lib/chef/provider/ifconfig/redhat.rb +1 -1
  509. data/lib/chef/provider/launchd.rb +4 -4
  510. data/lib/chef/provider/link.rb +7 -7
  511. data/lib/chef/provider/log.rb +0 -0
  512. data/lib/chef/provider/lwrp_base.rb +3 -3
  513. data/lib/chef/provider/mdadm.rb +2 -2
  514. data/lib/chef/provider/mount.rb +3 -3
  515. data/lib/chef/provider/mount/aix.rb +1 -1
  516. data/lib/chef/provider/mount/mount.rb +2 -2
  517. data/lib/chef/provider/mount/solaris.rb +2 -2
  518. data/lib/chef/provider/mount/windows.rb +3 -3
  519. data/lib/chef/provider/noop.rb +0 -0
  520. data/lib/chef/provider/ohai.rb +0 -0
  521. data/lib/chef/provider/osx_profile.rb +4 -4
  522. data/lib/chef/provider/package.rb +12 -99
  523. data/lib/chef/provider/package/apt.rb +7 -22
  524. data/lib/chef/provider/package/bff.rb +3 -3
  525. data/lib/chef/provider/package/cab.rb +5 -5
  526. data/lib/chef/provider/package/chocolatey.rb +4 -4
  527. data/lib/chef/provider/package/deb.rb +131 -0
  528. data/lib/chef/provider/package/dnf.rb +7 -7
  529. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -15
  530. data/lib/chef/provider/package/dnf/python_helper.rb +4 -6
  531. data/lib/chef/provider/package/dnf/version.rb +0 -0
  532. data/lib/chef/provider/package/dpkg.rb +7 -21
  533. data/lib/chef/provider/package/freebsd/base.rb +3 -3
  534. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  535. data/lib/chef/provider/package/freebsd/port.rb +2 -6
  536. data/lib/chef/provider/package/homebrew.rb +1 -1
  537. data/lib/chef/provider/package/ips.rb +2 -2
  538. data/lib/chef/provider/package/macports.rb +0 -0
  539. data/lib/chef/provider/package/msu.rb +7 -7
  540. data/lib/chef/provider/package/openbsd.rb +4 -4
  541. data/lib/chef/provider/package/pacman.rb +2 -2
  542. data/lib/chef/provider/package/paludis.rb +2 -2
  543. data/lib/chef/provider/package/portage.rb +4 -4
  544. data/lib/chef/provider/package/powershell.rb +3 -3
  545. data/lib/chef/provider/package/rpm.rb +4 -4
  546. data/lib/chef/provider/package/rubygems.rb +5 -5
  547. data/lib/chef/provider/package/smartos.rb +3 -3
  548. data/lib/chef/provider/package/snap.rb +358 -0
  549. data/lib/chef/provider/package/solaris.rb +3 -3
  550. data/lib/chef/provider/package/windows.rb +7 -7
  551. data/lib/chef/provider/package/windows/exe.rb +1 -1
  552. data/lib/chef/provider/package/windows/msi.rb +2 -2
  553. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +0 -0
  554. data/lib/chef/provider/package/yum.rb +9 -9
  555. data/lib/chef/provider/package/yum/python_helper.rb +4 -4
  556. data/lib/chef/provider/package/yum/rpm_utils.rb +6 -16
  557. data/lib/chef/provider/package/yum/simplejson/LICENSE.txt +0 -0
  558. data/lib/chef/provider/package/yum/simplejson/__init__.py +0 -0
  559. data/lib/chef/provider/package/yum/simplejson/__init__.pyc +0 -0
  560. data/lib/chef/provider/package/yum/simplejson/decoder.py +0 -0
  561. data/lib/chef/provider/package/yum/simplejson/decoder.pyc +0 -0
  562. data/lib/chef/provider/package/yum/simplejson/encoder.py +0 -0
  563. data/lib/chef/provider/package/yum/simplejson/encoder.pyc +0 -0
  564. data/lib/chef/provider/package/yum/simplejson/scanner.py +0 -0
  565. data/lib/chef/provider/package/yum/simplejson/scanner.pyc +0 -0
  566. data/lib/chef/provider/package/yum/simplejson/tool.py +0 -0
  567. data/lib/chef/provider/package/yum/version.rb +4 -0
  568. data/lib/chef/provider/package/yum/yum_cache.rb +2 -2
  569. data/lib/chef/provider/package/yum/yum_helper.py +0 -0
  570. data/lib/chef/provider/package/zypper.rb +3 -3
  571. data/lib/chef/provider/powershell_script.rb +6 -36
  572. data/lib/chef/provider/reboot.rb +2 -2
  573. data/lib/chef/provider/registry_key.rb +7 -7
  574. data/lib/chef/provider/remote_directory.rb +7 -7
  575. data/lib/chef/provider/remote_file.rb +1 -1
  576. data/lib/chef/provider/remote_file/cache_control_data.rb +4 -4
  577. data/lib/chef/provider/remote_file/content.rb +2 -2
  578. data/lib/chef/provider/remote_file/fetcher.rb +0 -0
  579. data/lib/chef/provider/remote_file/ftp.rb +2 -2
  580. data/lib/chef/provider/remote_file/http.rb +4 -4
  581. data/lib/chef/provider/remote_file/local_file.rb +1 -1
  582. data/lib/chef/provider/remote_file/network_file.rb +2 -2
  583. data/lib/chef/provider/remote_file/sftp.rb +2 -2
  584. data/lib/chef/provider/resource_update.rb +0 -0
  585. data/lib/chef/provider/route.rb +36 -36
  586. data/lib/chef/provider/ruby_block.rb +0 -0
  587. data/lib/chef/provider/script.rb +2 -6
  588. data/lib/chef/provider/service.rb +10 -10
  589. data/lib/chef/provider/service/aix.rb +1 -1
  590. data/lib/chef/provider/service/aixinit.rb +2 -2
  591. data/lib/chef/provider/service/arch.rb +1 -1
  592. data/lib/chef/provider/service/debian.rb +3 -3
  593. data/lib/chef/provider/service/freebsd.rb +2 -2
  594. data/lib/chef/provider/service/gentoo.rb +2 -2
  595. data/lib/chef/provider/service/init.rb +2 -2
  596. data/lib/chef/provider/service/insserv.rb +3 -5
  597. data/lib/chef/provider/service/invokercd.rb +1 -1
  598. data/lib/chef/provider/service/macosx.rb +4 -4
  599. data/lib/chef/provider/service/openbsd.rb +3 -3
  600. data/lib/chef/provider/service/redhat.rb +3 -3
  601. data/lib/chef/provider/service/simple.rb +2 -2
  602. data/lib/chef/provider/service/solaris.rb +2 -2
  603. data/lib/chef/provider/service/systemd.rb +3 -19
  604. data/lib/chef/provider/service/upstart.rb +4 -4
  605. data/lib/chef/provider/service/windows.rb +18 -21
  606. data/lib/chef/provider/subversion.rb +3 -3
  607. data/lib/chef/provider/support/yum_repo.erb +0 -0
  608. data/lib/chef/provider/support/zypper_repo.erb +0 -0
  609. data/lib/chef/provider/systemd_unit.rb +7 -31
  610. data/lib/chef/provider/template.rb +2 -2
  611. data/lib/chef/provider/template/content.rb +2 -2
  612. data/lib/chef/provider/template_finder.rb +0 -0
  613. data/lib/chef/provider/user.rb +2 -2
  614. data/lib/chef/provider/user/aix.rb +1 -1
  615. data/lib/chef/provider/user/dscl.rb +41 -121
  616. data/lib/chef/provider/user/linux.rb +1 -1
  617. data/lib/chef/provider/user/pw.rb +1 -1
  618. data/lib/chef/provider/user/solaris.rb +1 -1
  619. data/lib/chef/provider/user/windows.rb +4 -6
  620. data/lib/chef/provider/whyrun_safe_ruby_block.rb +0 -0
  621. data/lib/chef/provider/windows_env.rb +3 -3
  622. data/lib/chef/provider/windows_path.rb +3 -3
  623. data/lib/chef/provider/windows_script.rb +2 -2
  624. data/lib/chef/provider/windows_task.rb +23 -24
  625. data/lib/chef/provider/yum_repository.rb +4 -4
  626. data/lib/chef/provider/zypper_repository.rb +4 -4
  627. data/lib/chef/provider_resolver.rb +2 -2
  628. data/lib/chef/providers.rb +120 -119
  629. data/lib/chef/recipe.rb +3 -18
  630. data/lib/chef/request_id.rb +0 -0
  631. data/lib/chef/reserved_names.rb +0 -0
  632. data/lib/chef/resource.rb +54 -55
  633. data/lib/chef/resource/action_class.rb +3 -3
  634. data/lib/chef/resource/apt_package.rb +9 -1
  635. data/lib/chef/resource/apt_preference.rb +1 -1
  636. data/lib/chef/resource/apt_repository.rb +1 -1
  637. data/lib/chef/resource/apt_update.rb +1 -1
  638. data/lib/chef/resource/archive_file.rb +172 -0
  639. data/lib/chef/resource/bash.rb +2 -2
  640. data/lib/chef/resource/batch.rb +1 -1
  641. data/lib/chef/resource/bff_package.rb +1 -1
  642. data/lib/chef/resource/breakpoint.rb +3 -2
  643. data/lib/chef/resource/build_essential.rb +4 -3
  644. data/lib/chef/resource/cab_package.rb +2 -2
  645. data/lib/chef/resource/chef_gem.rb +7 -4
  646. data/lib/chef/resource/chef_handler.rb +4 -1
  647. data/lib/chef/resource/chocolatey_config.rb +0 -1
  648. data/lib/chef/resource/chocolatey_package.rb +1 -1
  649. data/lib/chef/resource/chocolatey_source.rb +0 -1
  650. data/lib/chef/resource/conditional.rb +2 -2
  651. data/lib/chef/resource/conditional_action_not_nothing.rb +0 -0
  652. data/lib/chef/resource/cookbook_file.rb +5 -4
  653. data/lib/chef/resource/cron.rb +2 -2
  654. data/lib/chef/resource/cron_access.rb +1 -2
  655. data/lib/chef/resource/cron_d.rb +1 -2
  656. data/lib/chef/resource/csh.rb +2 -2
  657. data/lib/chef/resource/directory.rb +2 -2
  658. data/lib/chef/resource/dmg_package.rb +2 -2
  659. data/lib/chef/resource/dnf_package.rb +7 -6
  660. data/lib/chef/resource/dpkg_package.rb +9 -1
  661. data/lib/chef/resource/dsc_resource.rb +1 -1
  662. data/lib/chef/resource/dsc_script.rb +3 -3
  663. data/lib/chef/resource/execute.rb +14 -15
  664. data/lib/chef/resource/file.rb +7 -6
  665. data/lib/chef/resource/file/verification.rb +3 -3
  666. data/lib/chef/resource/file/verification/systemd_unit.rb +1 -1
  667. data/lib/chef/resource/freebsd_package.rb +5 -23
  668. data/lib/chef/resource/gem_package.rb +3 -2
  669. data/lib/chef/resource/git.rb +1 -1
  670. data/lib/chef/resource/group.rb +0 -0
  671. data/lib/chef/resource/homebrew_cask.rb +6 -3
  672. data/lib/chef/resource/homebrew_package.rb +4 -3
  673. data/lib/chef/resource/homebrew_tap.rb +5 -2
  674. data/lib/chef/resource/hostname.rb +3 -1
  675. data/lib/chef/resource/http_request.rb +1 -1
  676. data/lib/chef/resource/ifconfig.rb +1 -1
  677. data/lib/chef/resource/ips_package.rb +2 -2
  678. data/lib/chef/resource/kernel_module.rb +1 -63
  679. data/lib/chef/resource/ksh.rb +1 -1
  680. data/lib/chef/resource/launchd.rb +1 -1
  681. data/lib/chef/resource/link.rb +6 -7
  682. data/lib/chef/resource/locale.rb +101 -46
  683. data/lib/chef/resource/log.rb +1 -1
  684. data/lib/chef/resource/lwrp_base.rb +8 -8
  685. data/lib/chef/resource/macos_userdefaults.rb +1 -1
  686. data/lib/chef/resource/macosx_service.rb +1 -5
  687. data/lib/chef/resource/macports_package.rb +1 -1
  688. data/lib/chef/resource/mdadm.rb +1 -1
  689. data/lib/chef/resource/mount.rb +1 -1
  690. data/lib/chef/resource/msu_package.rb +2 -2
  691. data/lib/chef/resource/ohai.rb +4 -7
  692. data/lib/chef/resource/ohai_hint.rb +3 -1
  693. data/lib/chef/resource/openbsd_package.rb +3 -3
  694. data/lib/chef/resource/openssl_dhparam.rb +4 -4
  695. data/lib/chef/resource/openssl_ec_private_key.rb +4 -5
  696. data/lib/chef/resource/openssl_ec_public_key.rb +4 -5
  697. data/lib/chef/resource/openssl_rsa_private_key.rb +4 -4
  698. data/lib/chef/resource/openssl_rsa_public_key.rb +4 -4
  699. data/lib/chef/resource/openssl_x509_certificate.rb +4 -5
  700. data/lib/chef/resource/openssl_x509_crl.rb +4 -5
  701. data/lib/chef/resource/openssl_x509_request.rb +4 -5
  702. data/lib/chef/resource/osx_profile.rb +1 -1
  703. data/lib/chef/resource/package.rb +2 -10
  704. data/lib/chef/resource/pacman_package.rb +1 -1
  705. data/lib/chef/resource/paludis_package.rb +2 -2
  706. data/lib/chef/resource/perl.rb +2 -2
  707. data/lib/chef/resource/portage_package.rb +1 -1
  708. data/lib/chef/resource/powershell_package.rb +3 -3
  709. data/lib/chef/resource/powershell_package_source.rb +2 -3
  710. data/lib/chef/resource/powershell_script.rb +37 -1
  711. data/lib/chef/resource/python.rb +2 -2
  712. data/lib/chef/resource/reboot.rb +1 -1
  713. data/lib/chef/resource/registry_key.rb +2 -2
  714. data/lib/chef/resource/remote_directory.rb +41 -44
  715. data/lib/chef/resource/remote_file.rb +4 -4
  716. data/lib/chef/resource/resource_notification.rb +14 -18
  717. data/lib/chef/resource/rhsm_errata.rb +1 -1
  718. data/lib/chef/resource/rhsm_errata_level.rb +1 -1
  719. data/lib/chef/resource/rhsm_register.rb +1 -1
  720. data/lib/chef/resource/rhsm_repo.rb +1 -1
  721. data/lib/chef/resource/rhsm_subscription.rb +1 -1
  722. data/lib/chef/resource/route.rb +25 -15
  723. data/lib/chef/resource/rpm_package.rb +2 -2
  724. data/lib/chef/resource/ruby.rb +2 -2
  725. data/lib/chef/resource/ruby_block.rb +4 -3
  726. data/lib/chef/resource/scm.rb +1 -1
  727. data/lib/chef/resource/script.rb +2 -2
  728. data/lib/chef/resource/service.rb +54 -159
  729. data/lib/chef/resource/smartos_package.rb +1 -1
  730. data/{bin/chef-solo → lib/chef/resource/snap_package.rb} +19 -7
  731. data/lib/chef/resource/solaris_package.rb +1 -1
  732. data/lib/chef/resource/ssh_known_hosts_entry.rb +3 -4
  733. data/lib/chef/resource/subversion.rb +3 -2
  734. data/lib/chef/resource/sudo.rb +1 -1
  735. data/lib/chef/resource/support/cron.d.erb +0 -0
  736. data/lib/chef/resource/support/cron_access.erb +0 -0
  737. data/lib/chef/resource/support/ssh_known_hosts.erb +0 -0
  738. data/lib/chef/resource/support/sudoer.erb +0 -0
  739. data/lib/chef/resource/swap_file.rb +1 -1
  740. data/lib/chef/resource/sysctl.rb +1 -1
  741. data/lib/chef/resource/systemd_unit.rb +1 -2
  742. data/lib/chef/resource/template.rb +4 -3
  743. data/lib/chef/resource/timezone.rb +2 -3
  744. data/lib/chef/resource/user.rb +45 -127
  745. data/lib/chef/resource/user/aix_user.rb +1 -1
  746. data/lib/chef/resource/user/dscl_user.rb +5 -1
  747. data/lib/chef/resource/user/linux_user.rb +1 -1
  748. data/lib/chef/resource/user/pw_user.rb +1 -1
  749. data/lib/chef/resource/user/solaris_user.rb +1 -1
  750. data/lib/chef/resource/user/windows_user.rb +1 -1
  751. data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -0
  752. data/lib/chef/resource/windows_ad_join.rb +2 -2
  753. data/lib/chef/resource/windows_auto_run.rb +1 -1
  754. data/lib/chef/resource/windows_certificate.rb +7 -7
  755. data/lib/chef/resource/windows_dfs_folder.rb +75 -0
  756. data/lib/chef/resource/windows_dfs_namespace.rb +114 -0
  757. data/lib/chef/resource/windows_dfs_server.rb +76 -0
  758. data/lib/chef/resource/windows_dns_record.rb +76 -0
  759. data/lib/chef/resource/windows_dns_zone.rb +80 -0
  760. data/lib/chef/resource/windows_env.rb +1 -1
  761. data/lib/chef/resource/windows_feature.rb +1 -1
  762. data/lib/chef/resource/windows_feature_dism.rb +2 -2
  763. data/lib/chef/resource/windows_feature_powershell.rb +4 -4
  764. data/lib/chef/resource/windows_firewall_rule.rb +1 -2
  765. data/lib/chef/resource/windows_font.rb +2 -2
  766. data/lib/chef/resource/windows_package.rb +4 -4
  767. data/lib/chef/resource/windows_pagefile.rb +1 -1
  768. data/lib/chef/resource/windows_path.rb +1 -1
  769. data/lib/chef/resource/windows_printer.rb +1 -1
  770. data/lib/chef/resource/windows_printer_port.rb +1 -1
  771. data/lib/chef/resource/windows_script.rb +3 -3
  772. data/lib/chef/resource/windows_service.rb +6 -12
  773. data/lib/chef/resource/windows_share.rb +3 -4
  774. data/lib/chef/resource/windows_shortcut.rb +1 -1
  775. data/lib/chef/resource/windows_task.rb +3 -3
  776. data/lib/chef/resource/windows_uac.rb +94 -0
  777. data/lib/chef/resource/windows_workgroup.rb +2 -2
  778. data/lib/chef/resource/yum_package.rb +5 -3
  779. data/lib/chef/resource/yum_repository.rb +1 -1
  780. data/lib/chef/resource/zypper_package.rb +4 -2
  781. data/lib/chef/resource/zypper_repository.rb +1 -1
  782. data/lib/chef/resource_builder.rb +3 -3
  783. data/lib/chef/resource_collection.rb +6 -13
  784. data/lib/chef/resource_collection/resource_collection_serialization.rb +1 -1
  785. data/lib/chef/resource_collection/resource_list.rb +4 -4
  786. data/lib/chef/resource_collection/resource_set.rb +5 -5
  787. data/lib/chef/resource_collection/stepable_iterator.rb +0 -0
  788. data/lib/chef/resource_definition.rb +2 -2
  789. data/lib/chef/resource_definition_list.rb +2 -2
  790. data/lib/chef/resource_inspector.rb +8 -8
  791. data/lib/chef/resource_reporter.rb +47 -138
  792. data/lib/chef/resource_resolver.rb +3 -3
  793. data/lib/chef/resources.rb +138 -130
  794. data/lib/chef/role.rb +8 -8
  795. data/lib/chef/run_context.rb +84 -73
  796. data/lib/chef/run_context/cookbook_compiler.rb +18 -19
  797. data/lib/chef/run_list.rb +4 -4
  798. data/lib/chef/run_list/run_list_expansion.rb +5 -5
  799. data/lib/chef/run_list/run_list_item.rb +4 -4
  800. data/lib/chef/run_list/versioned_recipe_list.rb +2 -2
  801. data/lib/chef/run_lock.rb +6 -5
  802. data/lib/chef/run_status.rb +2 -1
  803. data/lib/chef/runner.rb +16 -52
  804. data/lib/chef/sandbox.rb +0 -0
  805. data/lib/chef/scan_access_control.rb +0 -0
  806. data/lib/chef/search/query.rb +3 -3
  807. data/lib/chef/server_api.rb +10 -10
  808. data/lib/chef/server_api_versions.rb +0 -0
  809. data/lib/chef/shell.rb +17 -16
  810. data/lib/chef/shell/ext.rb +7 -7
  811. data/lib/chef/shell/model_wrapper.rb +2 -2
  812. data/lib/chef/shell/shell_session.rb +10 -10
  813. data/lib/chef/train_transport.rb +129 -0
  814. data/lib/chef/user.rb +7 -7
  815. data/lib/chef/user_v1.rb +9 -9
  816. data/lib/chef/util/backup.rb +1 -1
  817. data/lib/chef/util/diff.rb +0 -0
  818. data/lib/chef/util/dsc/configuration_generator.rb +1 -1
  819. data/lib/chef/util/dsc/lcm_output_parser.rb +3 -3
  820. data/lib/chef/util/dsc/local_configuration_manager.rb +2 -2
  821. data/lib/chef/util/dsc/resource_info.rb +0 -0
  822. data/lib/chef/util/dsc/resource_store.rb +3 -3
  823. data/lib/chef/util/editor.rb +0 -0
  824. data/lib/chef/util/file_edit.rb +1 -1
  825. data/lib/chef/util/path_helper.rb +0 -0
  826. data/lib/chef/util/powershell/cmdlet.rb +2 -2
  827. data/lib/chef/util/powershell/cmdlet_result.rb +1 -1
  828. data/lib/chef/util/powershell/ps_credential.rb +1 -1
  829. data/lib/chef/util/selinux.rb +2 -2
  830. data/lib/chef/util/threaded_job_queue.rb +0 -0
  831. data/lib/chef/util/windows.rb +0 -0
  832. data/lib/chef/util/windows/logon_session.rb +2 -2
  833. data/lib/chef/util/windows/net_group.rb +2 -2
  834. data/lib/chef/util/windows/net_use.rb +2 -2
  835. data/lib/chef/util/windows/net_user.rb +4 -4
  836. data/lib/chef/util/windows/volume.rb +2 -2
  837. data/lib/chef/version.rb +3 -3
  838. data/lib/chef/version/platform.rb +1 -1
  839. data/lib/chef/version_class.rb +0 -0
  840. data/lib/chef/version_constraint.rb +2 -2
  841. data/lib/chef/version_constraint/platform.rb +2 -2
  842. data/lib/chef/version_string.rb +0 -0
  843. data/lib/chef/whitelist.rb +1 -1
  844. data/lib/chef/win32/api.rb +2 -2
  845. data/lib/chef/win32/api/crypto.rb +1 -1
  846. data/lib/chef/win32/api/error.rb +1 -1
  847. data/lib/chef/win32/api/file.rb +4 -4
  848. data/lib/chef/win32/api/installer.rb +3 -3
  849. data/lib/chef/win32/api/memory.rb +1 -1
  850. data/lib/chef/win32/api/net.rb +2 -2
  851. data/lib/chef/win32/api/process.rb +1 -1
  852. data/lib/chef/win32/api/psapi.rb +1 -1
  853. data/lib/chef/win32/api/registry.rb +1 -1
  854. data/lib/chef/win32/api/security.rb +1 -1
  855. data/lib/chef/win32/api/synchronization.rb +1 -1
  856. data/lib/chef/win32/api/system.rb +1 -1
  857. data/lib/chef/win32/api/unicode.rb +1 -1
  858. data/lib/chef/win32/crypto.rb +4 -4
  859. data/lib/chef/win32/error.rb +4 -4
  860. data/lib/chef/win32/eventlog.rb +0 -0
  861. data/lib/chef/win32/file.rb +8 -8
  862. data/lib/chef/win32/file/info.rb +1 -1
  863. data/lib/chef/win32/file/version_info.rb +1 -1
  864. data/lib/chef/win32/handle.rb +4 -4
  865. data/lib/chef/win32/memory.rb +2 -2
  866. data/lib/chef/win32/mutex.rb +2 -2
  867. data/lib/chef/win32/net.rb +3 -3
  868. data/lib/chef/win32/process.rb +4 -4
  869. data/lib/chef/win32/registry.rb +5 -5
  870. data/lib/chef/win32/security.rb +12 -12
  871. data/lib/chef/win32/security/ace.rb +3 -3
  872. data/lib/chef/win32/security/acl.rb +2 -2
  873. data/lib/chef/win32/security/securable_object.rb +3 -3
  874. data/lib/chef/win32/security/security_descriptor.rb +3 -3
  875. data/lib/chef/win32/security/sid.rb +3 -3
  876. data/lib/chef/win32/security/token.rb +3 -3
  877. data/lib/chef/win32/system.rb +2 -2
  878. data/lib/chef/win32/unicode.rb +2 -2
  879. data/lib/chef/win32/version.rb +2 -2
  880. data/lib/chef/win32_service_constants.rb +0 -0
  881. data/lib/chef/workstation_config_loader.rb +0 -0
  882. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +0 -0
  883. data/spec/data/apt/chef-integration-test-1.0/debian/compat +0 -0
  884. data/spec/data/apt/chef-integration-test-1.0/debian/control +0 -0
  885. data/spec/data/apt/chef-integration-test-1.0/debian/copyright +0 -0
  886. data/spec/data/apt/chef-integration-test-1.0/debian/files +0 -0
  887. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +0 -0
  888. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +0 -0
  889. data/spec/data/apt/chef-integration-test-1.1/debian/compat +0 -0
  890. data/spec/data/apt/chef-integration-test-1.1/debian/control +0 -0
  891. data/spec/data/apt/chef-integration-test-1.1/debian/copyright +0 -0
  892. data/spec/data/apt/chef-integration-test-1.1/debian/files +0 -0
  893. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +0 -0
  894. data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +0 -0
  895. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +0 -0
  896. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +0 -0
  897. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +0 -0
  898. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +0 -0
  899. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +0 -0
  900. data/spec/data/apt/chef-integration-test2-1.0/debian/compat +0 -0
  901. data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +0 -0
  902. data/spec/data/apt/chef-integration-test2-1.0/debian/control +0 -0
  903. data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +0 -0
  904. data/spec/data/apt/chef-integration-test2-1.0/debian/files +0 -0
  905. data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +0 -0
  906. data/spec/data/apt/chef-integration-test2_1.0-1.debian.tar.gz +0 -0
  907. data/spec/data/apt/chef-integration-test2_1.0-1.dsc +0 -0
  908. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +0 -0
  909. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +0 -0
  910. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.deb +0 -0
  911. data/spec/data/apt/chef-integration-test2_1.0.orig.tar.gz +0 -0
  912. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +0 -0
  913. data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
  914. data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
  915. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +0 -0
  916. data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
  917. data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
  918. data/spec/data/apt/var/www/apt/conf/distributions +0 -0
  919. data/spec/data/apt/var/www/apt/conf/incoming +0 -0
  920. data/spec/data/apt/var/www/apt/conf/pulls +0 -0
  921. data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
  922. data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
  923. data/spec/data/apt/var/www/apt/db/packages.db +0 -0
  924. data/spec/data/apt/var/www/apt/db/references.db +0 -0
  925. data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
  926. data/spec/data/apt/var/www/apt/db/version +0 -0
  927. data/spec/data/apt/var/www/apt/dists/sid/Release +0 -0
  928. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +0 -0
  929. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
  930. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +0 -0
  931. data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
  932. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
  933. data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
  934. data/spec/data/bad-config.rb +0 -0
  935. data/spec/data/bootstrap/encrypted_data_bag_secret +0 -0
  936. data/spec/data/bootstrap/no_proxy.erb +0 -0
  937. data/spec/data/bootstrap/secret.erb +0 -0
  938. data/spec/data/bootstrap/test-hints.erb +0 -0
  939. data/spec/data/bootstrap/test.erb +0 -0
  940. data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
  941. data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
  942. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +0 -0
  943. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +0 -0
  944. data/spec/data/cb_version_cookbooks/tatft/definitions/runit_service.rb +0 -0
  945. data/spec/data/cb_version_cookbooks/tatft/files/default/giant_blob.tgz +0 -0
  946. data/spec/data/cb_version_cookbooks/tatft/libraries/ownage.rb +0 -0
  947. data/spec/data/cb_version_cookbooks/tatft/providers/lwp.rb +0 -0
  948. data/spec/data/cb_version_cookbooks/tatft/recipes/default.rb +0 -0
  949. data/spec/data/cb_version_cookbooks/tatft/resources/lwr.rb +0 -0
  950. data/spec/data/cb_version_cookbooks/tatft/templates/default/configuration.erb +0 -0
  951. data/spec/data/checksum/random.txt +0 -0
  952. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +0 -0
  953. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-6m8zdk-0 +0 -0
  954. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +0 -0
  955. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +0 -0
  956. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +0 -0
  957. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +0 -0
  958. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +0 -0
  959. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +0 -0
  960. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +0 -0
  961. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +0 -0
  962. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +0 -0
  963. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +0 -0
  964. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +0 -0
  965. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +0 -0
  966. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +0 -0
  967. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +0 -0
  968. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +0 -0
  969. data/spec/data/client.d_00/00-foo.rb +0 -0
  970. data/spec/data/client.d_00/01-bar.rb +0 -0
  971. data/spec/data/client.d_00/02-strings.rb +0 -0
  972. data/spec/data/client.d_00/bar +0 -0
  973. data/spec/data/client.d_01/foo/bar.rb +0 -0
  974. data/spec/data/client.d_02/foo.rb/foo.txt +0 -0
  975. data/spec/data/config.rb +0 -0
  976. data/spec/data/cookbooks/angrybash/metadata.rb +0 -0
  977. data/spec/data/cookbooks/angrybash/recipes/default.rb +0 -0
  978. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +0 -0
  979. data/spec/data/cookbooks/apache2/metadata.rb +0 -0
  980. data/spec/data/cookbooks/apache2/recipes/default.rb +0 -0
  981. data/spec/data/cookbooks/borken/metadata.rb +0 -0
  982. data/spec/data/cookbooks/borken/recipes/default.rb +0 -0
  983. data/spec/data/cookbooks/borken/templates/default/borken.erb +0 -0
  984. data/spec/data/cookbooks/chefignore +0 -0
  985. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +0 -0
  986. data/spec/data/cookbooks/ignorken/metadata.rb +0 -0
  987. data/spec/data/cookbooks/ignorken/recipes/default.rb +0 -0
  988. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +0 -0
  989. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +0 -0
  990. data/spec/data/cookbooks/irssi/files/default/irssi.response +2 -0
  991. data/spec/data/cookbooks/java/files/default/java.response +0 -0
  992. data/spec/data/cookbooks/java/metadata.rb +0 -0
  993. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +0 -0
  994. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +0 -0
  995. data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +0 -0
  996. data/spec/data/cookbooks/openldap/.root_dotfile +0 -0
  997. data/spec/data/cookbooks/openldap/attributes/default.rb +0 -0
  998. data/spec/data/cookbooks/openldap/attributes/smokey.rb +0 -0
  999. data/spec/data/cookbooks/openldap/definitions/client.rb +0 -0
  1000. data/spec/data/cookbooks/openldap/definitions/server.rb +0 -0
  1001. data/spec/data/cookbooks/openldap/files/default/.dotfile +0 -0
  1002. data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +0 -0
  1003. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +0 -0
  1004. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +0 -0
  1005. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +0 -0
  1006. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +0 -0
  1007. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +0 -0
  1008. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +0 -0
  1009. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +0 -0
  1010. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +0 -0
  1011. data/spec/data/cookbooks/openldap/libraries/openldap.rb +0 -0
  1012. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +0 -0
  1013. data/spec/data/cookbooks/openldap/metadata.rb +0 -0
  1014. data/spec/data/cookbooks/openldap/recipes/default.rb +0 -0
  1015. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +0 -0
  1016. data/spec/data/cookbooks/openldap/recipes/one.rb +0 -0
  1017. data/spec/data/cookbooks/openldap/recipes/return.rb +0 -0
  1018. data/spec/data/cookbooks/openldap/spec/spec_helper.rb +0 -0
  1019. data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +0 -0
  1020. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +0 -0
  1021. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +0 -0
  1022. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +0 -0
  1023. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +0 -0
  1024. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +0 -0
  1025. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +0 -0
  1026. data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +0 -0
  1027. data/spec/data/cookbooks/openldap/templates/default/openldap_stuff.conf.erb +0 -0
  1028. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +0 -0
  1029. data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +0 -0
  1030. data/spec/data/cookbooks/openldap/templates/default/test.erb +0 -0
  1031. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +0 -0
  1032. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +0 -0
  1033. data/spec/data/cookbooks/preseed/metadata.rb +0 -0
  1034. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +0 -0
  1035. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +0 -0
  1036. data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +0 -0
  1037. data/spec/data/cookbooks/wget/files/default/wget.response +2 -0
  1038. data/spec/data/definitions/test.rb +0 -0
  1039. data/spec/data/dsc_lcm.pfx +0 -0
  1040. data/spec/data/environment-config.rb +0 -0
  1041. data/spec/data/file-providers-method-snapshot-chef-11-4.json +0 -0
  1042. data/spec/data/fileedit/blank +0 -0
  1043. data/spec/data/fileedit/hosts +0 -0
  1044. data/spec/data/gems/chef-integration-test-0.1.0.gem +0 -0
  1045. data/spec/data/git_bundles/example-repo.gitbundle +0 -0
  1046. data/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle +0 -0
  1047. data/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle +0 -0
  1048. data/spec/data/git_bundles/sinatra-test-app.gitbundle +0 -0
  1049. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +0 -0
  1050. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +0 -0
  1051. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +0 -0
  1052. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +0 -0
  1053. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +0 -0
  1054. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +0 -0
  1055. data/spec/data/kitchen/chefignore +0 -0
  1056. data/spec/data/kitchen/openldap/attributes/default.rb +0 -0
  1057. data/spec/data/kitchen/openldap/attributes/robinson.rb +0 -0
  1058. data/spec/data/kitchen/openldap/definitions/client.rb +0 -0
  1059. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +0 -0
  1060. data/spec/data/kitchen/openldap/recipes/gigantor.rb +0 -0
  1061. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +0 -0
  1062. data/spec/data/kitchen/openldap/recipes/woot.rb +0 -0
  1063. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  1064. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  1065. data/spec/data/knife_subcommand/test_explicit_category.rb +0 -0
  1066. data/spec/data/knife_subcommand/test_name_mapping.rb +0 -0
  1067. data/spec/data/knife_subcommand/test_yourself.rb +0 -0
  1068. data/spec/data/lwrp/providers/buck_passer.rb +0 -0
  1069. data/spec/data/lwrp/providers/buck_passer_2.rb +0 -0
  1070. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +0 -0
  1071. data/spec/data/lwrp/providers/inline_compiler.rb +0 -0
  1072. data/spec/data/lwrp/providers/monkey_name_printer.rb +0 -0
  1073. data/spec/data/lwrp/providers/paint_drying_watcher.rb +0 -0
  1074. data/spec/data/lwrp/providers/thumb_twiddler.rb +0 -0
  1075. data/spec/data/lwrp/resources/bar.rb +0 -0
  1076. data/spec/data/lwrp/resources/buck_passer.rb +0 -0
  1077. data/spec/data/lwrp/resources/buck_passer_2.rb +0 -0
  1078. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +0 -0
  1079. data/spec/data/lwrp/resources/foo.rb +0 -0
  1080. data/spec/data/lwrp/resources/inline_compiler.rb +0 -0
  1081. data/spec/data/lwrp/resources/monkey_name_printer.rb +0 -0
  1082. data/spec/data/lwrp/resources/paint_drying_watcher.rb +0 -0
  1083. data/spec/data/lwrp/resources/thumb_twiddler.rb +0 -0
  1084. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +0 -0
  1085. data/spec/data/lwrp_const_scoping/resources/conflict.rb +0 -0
  1086. data/spec/data/lwrp_override/providers/buck_passer.rb +0 -0
  1087. data/spec/data/lwrp_override/resources/foo.rb +0 -0
  1088. data/spec/data/mac_users/10.9.plist.xml +0 -0
  1089. data/spec/data/mac_users/10.9.shadow.xml +0 -0
  1090. data/spec/data/metadata/quick_start/metadata.rb +0 -0
  1091. data/spec/data/mixin/invalid_data.rb +0 -0
  1092. data/spec/data/mixin/real_data.rb +0 -0
  1093. data/spec/data/nested.json +0 -0
  1094. data/spec/data/nodes/default.rb +0 -0
  1095. data/spec/data/nodes/test.example.com.rb +0 -0
  1096. data/spec/data/nodes/test.rb +0 -0
  1097. data/spec/data/null_config.rb +0 -0
  1098. data/spec/data/object_loader/environments/test.json +0 -0
  1099. data/spec/data/object_loader/environments/test.rb +0 -0
  1100. data/spec/data/object_loader/environments/test_json_class.json +0 -0
  1101. data/spec/data/object_loader/nodes/test.json +0 -0
  1102. data/spec/data/object_loader/nodes/test.rb +0 -0
  1103. data/spec/data/object_loader/nodes/test_json_class.json +0 -0
  1104. data/spec/data/object_loader/roles/test.json +0 -0
  1105. data/spec/data/object_loader/roles/test.rb +0 -0
  1106. data/spec/data/object_loader/roles/test_json_class.json +0 -0
  1107. data/spec/data/old_home_dir/my-dot-emacs +0 -0
  1108. data/spec/data/old_home_dir/my-dot-vim +0 -0
  1109. data/spec/data/partial_one.erb +0 -0
  1110. data/spec/data/prefer_metadata_json/metadata.json +0 -0
  1111. data/spec/data/prefer_metadata_json/metadata.rb +0 -0
  1112. data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
  1113. data/spec/data/recipes.tgz +0 -0
  1114. data/spec/data/recipes/test.rb +0 -0
  1115. data/spec/data/remote_directory_data/remote_dir_file.txt +0 -0
  1116. data/spec/data/remote_directory_data/remote_subdirectory/remote_subdir_file.txt +0 -0
  1117. data/spec/data/remote_file/nyan_cat.png +0 -0
  1118. data/spec/data/remote_file/nyan_cat.png.gz +0 -0
  1119. data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +0 -0
  1120. data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +0 -0
  1121. data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +0 -0
  1122. data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +0 -0
  1123. data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +0 -0
  1124. data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +0 -0
  1125. data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +0 -0
  1126. data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +0 -0
  1127. data/spec/data/root_alias_cookbooks/simple/attributes.rb +0 -0
  1128. data/spec/data/root_alias_cookbooks/simple/metadata.rb +0 -0
  1129. data/spec/data/root_alias_cookbooks/simple/recipe.rb +0 -0
  1130. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +0 -0
  1131. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +0 -0
  1132. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +0 -0
  1133. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +0 -0
  1134. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +0 -0
  1135. data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
  1136. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +0 -0
  1137. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +0 -0
  1138. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +0 -0
  1139. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +0 -0
  1140. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +0 -0
  1141. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +0 -0
  1142. data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
  1143. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +0 -0
  1144. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +0 -0
  1145. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +0 -0
  1146. data/spec/data/run_context/cookbooks/dependency1/attributes/unparsed_file +1 -0
  1147. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +0 -0
  1148. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +0 -0
  1149. data/spec/data/run_context/cookbooks/dependency1/definitions/unparsed_file +1 -0
  1150. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +0 -0
  1151. data/spec/data/run_context/cookbooks/dependency1/libraries/unparsed_file +1 -0
  1152. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +0 -0
  1153. data/spec/data/run_context/cookbooks/dependency1/providers/unparsed_file +1 -0
  1154. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  1155. data/spec/data/run_context/cookbooks/dependency1/recipes/unparsed_file +1 -0
  1156. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +0 -0
  1157. data/spec/data/run_context/cookbooks/dependency1/resources/unparsed_file +1 -0
  1158. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +0 -0
  1159. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +0 -0
  1160. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +0 -0
  1161. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +0 -0
  1162. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  1163. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +0 -0
  1164. data/spec/data/run_context/cookbooks/include/recipes/default.rb +0 -0
  1165. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +0 -0
  1166. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +0 -0
  1167. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +0 -0
  1168. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +0 -0
  1169. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  1170. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +0 -0
  1171. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +0 -0
  1172. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +0 -0
  1173. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +0 -0
  1174. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +0 -0
  1175. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +0 -0
  1176. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  1177. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +0 -0
  1178. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +0 -0
  1179. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +0 -0
  1180. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +0 -0
  1181. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +0 -0
  1182. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +0 -0
  1183. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  1184. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  1185. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +0 -0
  1186. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  1187. data/spec/data/run_context/cookbooks/test/attributes/george.rb +0 -0
  1188. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +0 -0
  1189. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +0 -0
  1190. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +0 -0
  1191. data/spec/data/run_context/cookbooks/test/providers/provider.rb +0 -0
  1192. data/spec/data/run_context/cookbooks/test/recipes/default.rb +0 -0
  1193. data/spec/data/run_context/cookbooks/test/recipes/one.rb +0 -0
  1194. data/spec/data/run_context/cookbooks/test/recipes/two.rb +0 -0
  1195. data/spec/data/run_context/cookbooks/test/resources/resource.rb +0 -0
  1196. data/spec/data/run_context/nodes/run_context.rb +0 -0
  1197. data/spec/data/sample_msu1.xml +0 -0
  1198. data/spec/data/sample_msu2.xml +0 -0
  1199. data/spec/data/sample_msu3.xml +0 -0
  1200. data/spec/data/search_queries_to_transform.txt +0 -0
  1201. data/spec/data/shef-config.rb +0 -0
  1202. data/spec/data/snap_package/async_result_success.json +6 -0
  1203. data/spec/data/snap_package/change_id_result.json +175 -0
  1204. data/spec/data/snap_package/find_result_failure.json +10 -0
  1205. data/spec/data/snap_package/find_result_success.json +70 -0
  1206. data/spec/data/snap_package/get_by_name_result_failure.json +10 -0
  1207. data/spec/data/snap_package/get_by_name_result_success.json +38 -0
  1208. data/spec/data/snap_package/get_conf_success.json +10 -0
  1209. data/spec/data/snap_package/result_failure.json +9 -0
  1210. data/spec/data/ssl/5e707473.0 +0 -0
  1211. data/spec/data/ssl/chef-rspec.cert +0 -0
  1212. data/spec/data/ssl/chef-rspec.key +0 -0
  1213. data/spec/data/ssl/key.pem +0 -0
  1214. data/spec/data/ssl/private_key.pem +0 -0
  1215. data/spec/data/ssl/private_key_with_whitespace.pem +0 -0
  1216. data/spec/data/standalone_cookbook/Gemfile +0 -0
  1217. data/spec/data/standalone_cookbook/chefignore +0 -0
  1218. data/spec/data/standalone_cookbook/recipes/default.rb +0 -0
  1219. data/spec/data/standalone_cookbook/vendor/bundle/ruby/2.0.0/gems/multi_json-1.9.0/lib/multi_json.rb +0 -0
  1220. data/spec/data/templates/chef-seattle20160930-4388-1crv7ef.txt +0 -0
  1221. data/spec/data/templates/chef-seattle20160930-4388-jjfoae.txt +0 -0
  1222. data/spec/data/templates/chef-seattle20160930-4388-umeq2c.txt +0 -0
  1223. data/spec/data/templates/seattle.txt +0 -0
  1224. data/spec/data/trusted_certs/example.crt +0 -0
  1225. data/spec/data/trusted_certs/example_no_cn.crt +0 -0
  1226. data/spec/data/trusted_certs/intermediate.pem +0 -0
  1227. data/spec/data/trusted_certs/opscode.pem +0 -0
  1228. data/spec/data/trusted_certs/root.pem +0 -0
  1229. data/spec/data/trusted_certs_empty/.gitkeep +0 -0
  1230. data/spec/data/trusted_certs_empty/README.md +1 -0
  1231. data/spec/data/windows_certificates/base64_test.cer +0 -0
  1232. data/spec/data/windows_certificates/othertest.cer +0 -0
  1233. data/spec/data/windows_certificates/test.cer +0 -0
  1234. data/spec/data/windows_certificates/test.p7b +0 -0
  1235. data/spec/data/windows_certificates/test.pem +0 -0
  1236. data/spec/data/windows_certificates/test.pfx +0 -0
  1237. data/spec/functional/application_spec.rb +0 -0
  1238. data/spec/functional/assets/PkgA.1.0.0.0.bff +0 -0
  1239. data/spec/functional/assets/PkgA.2.0.0.0.bff +0 -0
  1240. data/spec/functional/assets/chocolatey_feed/test-A.1.0.nupkg +0 -0
  1241. data/spec/functional/assets/chocolatey_feed/test-A.1.5.nupkg +0 -0
  1242. data/spec/functional/assets/chocolatey_feed/test-A.2.0.nupkg +0 -0
  1243. data/spec/functional/assets/chocolatey_feed/test-B.1.0.nupkg +0 -0
  1244. data/spec/functional/assets/dummy-1-0.aix6.1.noarch.rpm +0 -0
  1245. data/spec/functional/assets/dummy-2-0.aix6.1.noarch.rpm +0 -0
  1246. data/spec/functional/assets/mytest-1.0-1.noarch.rpm +0 -0
  1247. data/spec/functional/assets/mytest-2.0-1.noarch.rpm +0 -0
  1248. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.aarch64.rpm +0 -0
  1249. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.i686.rpm +0 -0
  1250. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.ppc64.rpm +0 -0
  1251. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.ppc64le.rpm +0 -0
  1252. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.s390x.rpm +0 -0
  1253. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.src.rpm +0 -0
  1254. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.x86_64.rpm +0 -0
  1255. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.aarch64.rpm +0 -0
  1256. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.i686.rpm +0 -0
  1257. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.ppc64.rpm +0 -0
  1258. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.ppc64le.rpm +0 -0
  1259. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.s390x.rpm +0 -0
  1260. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.src.rpm +0 -0
  1261. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.x86_64.rpm +0 -0
  1262. data/spec/functional/assets/yumrepo/repodata/4632d67cb92636e7575d911c24f0e04d3505a944e97c483abe0c3e73a7c62d33-filelists.sqlite.bz2 +0 -0
  1263. data/spec/functional/assets/yumrepo/repodata/74599b793e54d877323837d2d81a1c3c594c44e4335f9528234bb490f7b9b439-other.xml.gz +0 -0
  1264. data/spec/functional/assets/yumrepo/repodata/a845d418f919d2115ab95a56b2c76f6825ad0d0bede49181a55c04f58995d057-primary.sqlite.bz2 +0 -0
  1265. data/spec/functional/assets/yumrepo/repodata/af9b7cf9ef23bd7b43068d74a460f3b5d06753d638e58e4a0c9edc35bfb9cdc4-other.sqlite.bz2 +0 -0
  1266. data/spec/functional/assets/yumrepo/repodata/bdb4f5f1492a3b9532f22c43110a81500dd744f23da0aec5c33b2a41317c737d-filelists.xml.gz +0 -0
  1267. data/spec/functional/assets/yumrepo/repodata/c10d1d34ce99e02f12ec96ef68360543ab1bb7c3cb81a4a2bf78df7d8597e9df-primary.xml.gz +0 -0
  1268. data/spec/functional/assets/yumrepo/repodata/filelists.xml.gz +0 -0
  1269. data/spec/functional/assets/yumrepo/repodata/other.xml.gz +0 -0
  1270. data/spec/functional/assets/yumrepo/repodata/primary.xml.gz +0 -0
  1271. data/spec/functional/assets/yumrepo/repodata/repomd.xml +0 -0
  1272. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.aarch64.rpm +0 -0
  1273. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.i686.rpm +0 -0
  1274. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.ppc64.rpm +0 -0
  1275. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.ppc64le.rpm +0 -0
  1276. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.s390x.rpm +0 -0
  1277. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.src.rpm +0 -0
  1278. data/spec/functional/assets/zypprepo/chef_rpm-1.10-1.x86_64.rpm +0 -0
  1279. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.aarch64.rpm +0 -0
  1280. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.i686.rpm +0 -0
  1281. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.ppc64.rpm +0 -0
  1282. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.ppc64le.rpm +0 -0
  1283. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.s390x.rpm +0 -0
  1284. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.src.rpm +0 -0
  1285. data/spec/functional/assets/zypprepo/chef_rpm-1.2-1.x86_64.rpm +0 -0
  1286. data/spec/functional/dsl/reboot_pending_spec.rb +6 -7
  1287. data/spec/functional/dsl/registry_helper_spec.rb +0 -0
  1288. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -8
  1289. data/spec/functional/file_content_management/deploy_strategies_spec.rb +21 -21
  1290. data/spec/functional/http/simple_spec.rb +0 -0
  1291. data/spec/functional/knife/configure_spec.rb +0 -0
  1292. data/spec/functional/knife/cookbook_delete_spec.rb +0 -0
  1293. data/spec/functional/knife/exec_spec.rb +1 -1
  1294. data/spec/functional/knife/rehash_spec.rb +0 -0
  1295. data/spec/functional/knife/smoke_test.rb +0 -0
  1296. data/spec/functional/knife/ssh_spec.rb +3 -3
  1297. data/spec/functional/mixin/from_file_spec.rb +0 -0
  1298. data/spec/functional/mixin/powershell_out_spec.rb +0 -0
  1299. data/spec/functional/mixin/shell_out_spec.rb +0 -30
  1300. data/spec/functional/mixin/user_context_spec.rb +1 -3
  1301. data/spec/functional/notifications_spec.rb +0 -0
  1302. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +0 -0
  1303. data/spec/functional/rebooter_spec.rb +1 -1
  1304. data/spec/functional/resource/aix_service_spec.rb +1 -1
  1305. data/spec/functional/resource/aixinit_service_spec.rb +1 -1
  1306. data/spec/functional/resource/apt_package_spec.rb +0 -0
  1307. data/spec/functional/resource/base.rb +0 -0
  1308. data/spec/functional/resource/bash_spec.rb +0 -0
  1309. data/spec/functional/resource/batch_spec.rb +0 -0
  1310. data/spec/functional/resource/bff_spec.rb +0 -0
  1311. data/spec/functional/resource/chocolatey_package_spec.rb +2 -2
  1312. data/spec/functional/resource/cookbook_file_spec.rb +3 -1
  1313. data/spec/functional/resource/cron_spec.rb +0 -1
  1314. data/spec/functional/resource/directory_spec.rb +0 -0
  1315. data/spec/functional/resource/dnf_package_spec.rb +5 -5
  1316. data/spec/functional/resource/dpkg_package_spec.rb +4 -4
  1317. data/spec/functional/resource/dsc_resource_spec.rb +1 -2
  1318. data/spec/functional/resource/dsc_script_spec.rb +11 -7
  1319. data/spec/functional/resource/execute_spec.rb +0 -0
  1320. data/spec/functional/resource/file_spec.rb +0 -0
  1321. data/spec/functional/resource/git_spec.rb +5 -5
  1322. data/spec/functional/resource/group_spec.rb +8 -43
  1323. data/spec/functional/resource/ifconfig_spec.rb +5 -3
  1324. data/spec/functional/resource/link_spec.rb +2 -2
  1325. data/spec/functional/resource/locale_spec.rb +97 -0
  1326. data/spec/functional/resource/mount_spec.rb +7 -3
  1327. data/spec/functional/resource/msu_package_spec.rb +0 -0
  1328. data/spec/functional/resource/ohai_spec.rb +0 -0
  1329. data/spec/functional/resource/powershell_script_spec.rb +21 -16
  1330. data/spec/functional/resource/reboot_spec.rb +1 -1
  1331. data/spec/functional/resource/registry_spec.rb +0 -0
  1332. data/spec/functional/resource/remote_directory_spec.rb +0 -0
  1333. data/spec/functional/resource/remote_file_spec.rb +2 -2
  1334. data/spec/functional/resource/rpm_spec.rb +0 -0
  1335. data/spec/functional/resource/template_spec.rb +1 -1
  1336. data/spec/functional/resource/timezone_spec.rb +0 -0
  1337. data/spec/functional/resource/user/dscl_spec.rb +3 -10
  1338. data/spec/functional/resource/user/windows_spec.rb +2 -2
  1339. data/spec/functional/resource/windows_certificate_spec.rb +3 -3
  1340. data/spec/functional/resource/windows_env_spec.rb +0 -0
  1341. data/spec/functional/resource/windows_package_spec.rb +0 -0
  1342. data/spec/functional/resource/windows_path_spec.rb +0 -0
  1343. data/spec/functional/resource/windows_service_spec.rb +3 -3
  1344. data/spec/functional/resource/windows_task_spec.rb +13 -12
  1345. data/spec/functional/resource/yum_package_spec.rb +20 -1
  1346. data/spec/functional/resource/zypper_package_spec.rb +0 -0
  1347. data/spec/functional/root_alias_spec.rb +0 -0
  1348. data/spec/functional/run_lock_spec.rb +3 -10
  1349. data/spec/functional/shell_spec.rb +1 -2
  1350. data/spec/functional/tiny_server_spec.rb +0 -0
  1351. data/spec/functional/util/path_helper_spec.rb +0 -0
  1352. data/spec/functional/util/powershell/cmdlet_spec.rb +3 -3
  1353. data/spec/functional/version_spec.rb +1 -1
  1354. data/spec/functional/win32/crypto_spec.rb +0 -0
  1355. data/spec/functional/win32/registry_spec.rb +0 -0
  1356. data/spec/functional/win32/security_spec.rb +7 -12
  1357. data/spec/functional/win32/service_manager_spec.rb +1 -1
  1358. data/spec/functional/win32/sid_spec.rb +0 -0
  1359. data/spec/functional/win32/version_info_spec.rb +4 -4
  1360. data/spec/functional/win32/versions_spec.rb +0 -0
  1361. data/spec/integration/client/client_spec.rb +142 -135
  1362. data/spec/integration/client/exit_code_spec.rb +3 -31
  1363. data/spec/integration/client/ipv6_spec.rb +2 -2
  1364. data/spec/integration/knife/chef_fs_data_store_spec.rb +25 -25
  1365. data/spec/integration/knife/chef_repo_path_spec.rb +6 -8
  1366. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -0
  1367. data/spec/integration/knife/chefignore_spec.rb +0 -0
  1368. data/spec/integration/knife/client_bulk_delete_spec.rb +0 -0
  1369. data/spec/integration/knife/client_create_spec.rb +0 -0
  1370. data/spec/integration/knife/client_delete_spec.rb +0 -0
  1371. data/spec/integration/knife/client_key_create_spec.rb +0 -0
  1372. data/spec/integration/knife/client_key_delete_spec.rb +0 -0
  1373. data/spec/integration/knife/client_key_list_spec.rb +0 -0
  1374. data/spec/integration/knife/client_key_show_spec.rb +0 -0
  1375. data/spec/integration/knife/client_list_spec.rb +0 -0
  1376. data/spec/integration/knife/client_show_spec.rb +0 -0
  1377. data/spec/integration/knife/common_options_spec.rb +0 -0
  1378. data/spec/integration/knife/config_get_profile_spec.rb +0 -0
  1379. data/spec/integration/knife/config_get_spec.rb +1 -8
  1380. data/spec/integration/knife/config_list_profiles_spec.rb +1 -2
  1381. data/spec/integration/knife/config_use_profile_spec.rb +0 -0
  1382. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  1383. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +0 -0
  1384. data/spec/integration/knife/cookbook_download_spec.rb +1 -1
  1385. data/spec/integration/knife/cookbook_list_spec.rb +0 -0
  1386. data/spec/integration/knife/cookbook_show_spec.rb +0 -2
  1387. data/spec/integration/knife/cookbook_upload_spec.rb +0 -0
  1388. data/spec/integration/knife/data_bag_create_spec.rb +0 -0
  1389. data/spec/integration/knife/data_bag_delete_spec.rb +0 -0
  1390. data/spec/integration/knife/data_bag_edit_spec.rb +0 -0
  1391. data/spec/integration/knife/data_bag_from_file_spec.rb +0 -0
  1392. data/spec/integration/knife/data_bag_list_spec.rb +0 -0
  1393. data/spec/integration/knife/data_bag_show_spec.rb +0 -0
  1394. data/spec/integration/knife/delete_spec.rb +0 -0
  1395. data/spec/integration/knife/deps_spec.rb +0 -0
  1396. data/spec/integration/knife/diff_spec.rb +9 -9
  1397. data/spec/integration/knife/download_spec.rb +1 -1
  1398. data/spec/integration/knife/environment_compare_spec.rb +0 -0
  1399. data/spec/integration/knife/environment_create_spec.rb +0 -0
  1400. data/spec/integration/knife/environment_delete_spec.rb +0 -0
  1401. data/spec/integration/knife/environment_from_file_spec.rb +0 -0
  1402. data/spec/integration/knife/environment_list_spec.rb +0 -0
  1403. data/spec/integration/knife/environment_show_spec.rb +0 -0
  1404. data/spec/integration/knife/list_spec.rb +0 -0
  1405. data/spec/integration/knife/node_bulk_delete_spec.rb +0 -0
  1406. data/spec/integration/knife/node_create_spec.rb +0 -0
  1407. data/spec/integration/knife/node_delete_spec.rb +0 -0
  1408. data/spec/integration/knife/node_environment_set_spec.rb +0 -0
  1409. data/spec/integration/knife/node_from_file_spec.rb +0 -0
  1410. data/spec/integration/knife/node_list_spec.rb +0 -0
  1411. data/spec/integration/knife/node_run_list_add_spec.rb +0 -0
  1412. data/spec/integration/knife/node_run_list_remove_spec.rb +0 -0
  1413. data/spec/integration/knife/node_run_list_set_spec.rb +0 -0
  1414. data/spec/integration/knife/node_show_spec.rb +0 -0
  1415. data/spec/integration/knife/raw_spec.rb +6 -6
  1416. data/spec/integration/knife/redirection_spec.rb +1 -1
  1417. data/spec/integration/knife/role_bulk_delete_spec.rb +0 -0
  1418. data/spec/integration/knife/role_create_spec.rb +0 -0
  1419. data/spec/integration/knife/role_delete_spec.rb +0 -0
  1420. data/spec/integration/knife/role_from_file_spec.rb +0 -0
  1421. data/spec/integration/knife/role_list_spec.rb +0 -0
  1422. data/spec/integration/knife/role_show_spec.rb +0 -0
  1423. data/spec/integration/knife/search_node_spec.rb +0 -0
  1424. data/spec/integration/knife/serve_spec.rb +0 -0
  1425. data/spec/integration/knife/show_spec.rb +4 -4
  1426. data/spec/integration/knife/upload_spec.rb +4 -4
  1427. data/spec/integration/recipes/accumulator_spec.rb +5 -5
  1428. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +6 -6
  1429. data/spec/integration/recipes/lwrp_spec.rb +3 -3
  1430. data/spec/integration/recipes/noop_resource_spec.rb +0 -0
  1431. data/spec/integration/recipes/notifies_spec.rb +21 -21
  1432. data/spec/integration/recipes/notifying_block_spec.rb +6 -6
  1433. data/spec/integration/recipes/provider_choice.rb +2 -1
  1434. data/spec/integration/recipes/recipe_dsl_spec.rb +9 -9
  1435. data/spec/integration/recipes/remote_directory.rb +3 -3
  1436. data/spec/integration/recipes/resource_action_spec.rb +0 -0
  1437. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +0 -0
  1438. data/spec/integration/recipes/resource_load_spec.rb +0 -0
  1439. data/spec/integration/solo/solo_spec.rb +24 -24
  1440. data/spec/rcov.opts +0 -0
  1441. data/spec/scripts/ssl-serve.rb +0 -0
  1442. data/spec/spec_helper.rb +13 -16
  1443. data/spec/stress/win32/file_spec.rb +0 -0
  1444. data/spec/stress/win32/memory_spec.rb +0 -0
  1445. data/spec/stress/win32/security_spec.rb +1 -1
  1446. data/spec/support/chef_helpers.rb +3 -4
  1447. data/spec/support/key_helpers.rb +0 -0
  1448. data/spec/support/lib/chef/provider/easy.rb +0 -0
  1449. data/spec/support/lib/chef/provider/openldap_includer.rb +0 -0
  1450. data/spec/support/lib/chef/provider/snakeoil.rb +0 -0
  1451. data/spec/support/lib/chef/resource/cat.rb +0 -0
  1452. data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -0
  1453. data/spec/support/lib/chef/resource/openldap_includer.rb +0 -0
  1454. data/spec/support/lib/chef/resource/with_state.rb +0 -0
  1455. data/spec/support/lib/chef/resource/zen_follower.rb +1 -1
  1456. data/spec/support/lib/chef/resource/zen_master.rb +1 -1
  1457. data/spec/support/lib/library_load_order.rb +0 -0
  1458. data/spec/support/matchers/leak.rb +0 -0
  1459. data/spec/support/mock/constant.rb +0 -0
  1460. data/spec/support/mock/platform.rb +2 -2
  1461. data/spec/support/platform_helpers.rb +0 -34
  1462. data/spec/support/platforms/prof/gc.rb +1 -1
  1463. data/spec/support/platforms/prof/win32.rb +0 -0
  1464. data/spec/support/platforms/win32/spec_service.rb +10 -6
  1465. data/spec/support/shared/context/config.rb +0 -0
  1466. data/spec/support/shared/context/win32.rb +0 -0
  1467. data/spec/support/shared/functional/diff_disabled.rb +0 -0
  1468. data/spec/support/shared/functional/directory_resource.rb +0 -0
  1469. data/spec/support/shared/functional/execute_resource.rb +4 -4
  1470. data/spec/support/shared/functional/file_resource.rb +3 -1
  1471. data/spec/support/shared/functional/http.rb +39 -15
  1472. data/spec/support/shared/functional/knife.rb +0 -0
  1473. data/spec/support/shared/functional/securable_resource.rb +8 -4
  1474. data/spec/support/shared/functional/securable_resource_with_reporting.rb +0 -0
  1475. data/spec/support/shared/functional/win32_service.rb +1 -1
  1476. data/spec/support/shared/functional/windows_script.rb +1 -2
  1477. data/spec/support/shared/integration/app_server_support.rb +4 -3
  1478. data/spec/support/shared/integration/integration_helper.rb +0 -1
  1479. data/spec/support/shared/integration/knife_support.rb +5 -5
  1480. data/spec/support/shared/matchers/exit_with_code.rb +0 -0
  1481. data/spec/support/shared/matchers/match_environment_variable.rb +0 -0
  1482. data/spec/support/shared/shared_examples.rb +0 -0
  1483. data/spec/support/shared/unit/api_error_inspector.rb +0 -0
  1484. data/spec/support/shared/unit/api_versioning.rb +0 -0
  1485. data/spec/support/shared/unit/application_dot_d.rb +4 -10
  1486. data/spec/support/shared/unit/execute_resource.rb +0 -0
  1487. data/spec/support/shared/unit/file_system_support.rb +2 -3
  1488. data/spec/support/shared/unit/knife_shared.rb +0 -0
  1489. data/spec/support/shared/unit/mock_shellout.rb +0 -0
  1490. data/spec/support/shared/unit/platform_introspector.rb +12 -12
  1491. data/spec/support/shared/unit/provider/file.rb +1 -1
  1492. data/spec/support/shared/unit/provider/package/package_shared.rb +95 -0
  1493. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +0 -0
  1494. data/spec/support/shared/unit/resource/static_provider_resolution.rb +0 -0
  1495. data/spec/support/shared/unit/script_resource.rb +2 -2
  1496. data/spec/support/shared/unit/user_and_client_shared.rb +0 -0
  1497. data/spec/support/shared/unit/windows_script_resource.rb +1 -1
  1498. data/spec/tiny_server.rb +1 -1
  1499. data/{bin/chef-apply → spec/unit/action_collection_spec.rb} +4 -9
  1500. data/spec/unit/api_client/registration_spec.rb +1 -1
  1501. data/spec/unit/api_client_spec.rb +5 -5
  1502. data/spec/unit/api_client_v1_spec.rb +6 -6
  1503. data/spec/unit/application/agent_spec.rb +0 -0
  1504. data/spec/unit/application/apply_spec.rb +0 -0
  1505. data/spec/unit/application/client_spec.rb +117 -81
  1506. data/spec/unit/application/exit_code_spec.rb +2 -13
  1507. data/spec/unit/application/knife_spec.rb +3 -6
  1508. data/spec/unit/application/server_spec.rb +0 -0
  1509. data/spec/unit/application/solo_spec.rb +2 -7
  1510. data/spec/unit/application_spec.rb +9 -2
  1511. data/spec/unit/chef_class_spec.rb +0 -0
  1512. data/spec/unit/chef_fs/config_spec.rb +3 -3
  1513. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +0 -0
  1514. data/spec/unit/chef_fs/data_handler/data_handler_base_spec.rb +0 -0
  1515. data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +0 -0
  1516. data/spec/unit/chef_fs/diff_spec.rb +0 -0
  1517. data/spec/unit/chef_fs/file_pattern_spec.rb +0 -0
  1518. data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +0 -0
  1519. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +0 -0
  1520. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +0 -0
  1521. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +1 -1
  1522. data/spec/unit/chef_fs/file_system_spec.rb +0 -0
  1523. data/spec/unit/chef_fs/parallelizer.rb +2 -4
  1524. data/spec/unit/chef_fs/path_util_spec.rb +0 -0
  1525. data/spec/unit/chef_spec.rb +0 -0
  1526. data/spec/unit/client_spec.rb +260 -70
  1527. data/spec/unit/config_fetcher_spec.rb +1 -1
  1528. data/spec/unit/config_spec.rb +0 -0
  1529. data/spec/unit/cookbook/chefignore_spec.rb +0 -0
  1530. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +2 -2
  1531. data/spec/unit/cookbook/file_vendor_spec.rb +0 -0
  1532. data/spec/unit/cookbook/gem_installer_spec.rb +2 -23
  1533. data/spec/unit/cookbook/manifest_v0_spec.rb +0 -0
  1534. data/spec/unit/cookbook/manifest_v2_spec.rb +0 -0
  1535. data/spec/unit/cookbook/metadata_spec.rb +4 -296
  1536. data/spec/unit/cookbook/synchronizer_spec.rb +4 -4
  1537. data/spec/unit/cookbook/syntax_check_spec.rb +0 -0
  1538. data/spec/unit/cookbook_loader_spec.rb +26 -63
  1539. data/spec/unit/cookbook_manifest_spec.rb +0 -0
  1540. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +2 -1
  1541. data/spec/unit/cookbook_spec.rb +0 -0
  1542. data/spec/unit/cookbook_uploader_spec.rb +0 -0
  1543. data/spec/unit/cookbook_version_file_specificity_spec.rb +9 -9
  1544. data/spec/unit/cookbook_version_spec.rb +1 -1
  1545. data/spec/unit/daemon_spec.rb +0 -0
  1546. data/spec/unit/data_bag_item_spec.rb +7 -7
  1547. data/spec/unit/data_bag_spec.rb +1 -1
  1548. data/spec/unit/data_collector_spec.rb +667 -661
  1549. data/spec/unit/decorator/lazy_array_spec.rb +0 -0
  1550. data/spec/unit/decorator/lazy_spec.rb +0 -0
  1551. data/spec/unit/decorator_spec.rb +2 -2
  1552. data/spec/unit/deprecated_spec.rb +2 -2
  1553. data/spec/unit/deprecation_spec.rb +0 -0
  1554. data/spec/unit/digester_spec.rb +0 -0
  1555. data/spec/unit/dsl/data_query_spec.rb +2 -3
  1556. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  1557. data/spec/unit/dsl/platform_introspection_spec.rb +2 -2
  1558. data/spec/unit/dsl/reboot_pending_spec.rb +0 -0
  1559. data/spec/unit/dsl/recipe_spec.rb +0 -0
  1560. data/spec/unit/dsl/registry_helper_spec.rb +0 -0
  1561. data/spec/unit/dsl/resources_spec.rb +0 -0
  1562. data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +1 -2
  1563. data/spec/unit/encrypted_data_bag_item_spec.rb +1 -2
  1564. data/spec/unit/environment_spec.rb +9 -9
  1565. data/spec/unit/event_dispatch/dispatcher_spec.rb +51 -4
  1566. data/spec/unit/event_dispatch/dsl_spec.rb +1 -1
  1567. data/spec/unit/exceptions_spec.rb +0 -0
  1568. data/spec/unit/file_access_control_spec.rb +0 -0
  1569. data/spec/unit/file_cache_spec.rb +0 -0
  1570. data/spec/unit/file_content_management/deploy/cp_spec.rb +0 -0
  1571. data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +3 -3
  1572. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +2 -2
  1573. data/spec/unit/file_content_management/tempfile_spec.rb +0 -0
  1574. data/spec/unit/formatters/base_spec.rb +0 -0
  1575. data/spec/unit/formatters/doc_spec.rb +0 -18
  1576. data/spec/unit/formatters/error_description_spec.rb +0 -0
  1577. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +0 -0
  1578. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +0 -0
  1579. data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +0 -0
  1580. data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +0 -0
  1581. data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +0 -0
  1582. data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +0 -0
  1583. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -3
  1584. data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +0 -0
  1585. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +1 -1
  1586. data/spec/unit/guard_interpreter_spec.rb +0 -0
  1587. data/spec/unit/handler/json_file_spec.rb +0 -0
  1588. data/spec/unit/handler_spec.rb +0 -0
  1589. data/spec/unit/http/api_versions_spec.rb +0 -0
  1590. data/spec/unit/http/authenticator_spec.rb +2 -3
  1591. data/spec/unit/http/basic_client_spec.rb +0 -0
  1592. data/spec/unit/http/http_request_spec.rb +0 -0
  1593. data/spec/unit/http/json_input_spec.rb +1 -1
  1594. data/spec/unit/http/simple_spec.rb +0 -0
  1595. data/spec/unit/http/socketless_chef_zero_client_spec.rb +0 -0
  1596. data/spec/unit/http/ssl_policies_spec.rb +0 -0
  1597. data/spec/unit/http/validate_content_length_spec.rb +0 -0
  1598. data/spec/unit/http_spec.rb +0 -0
  1599. data/spec/unit/json_compat_spec.rb +0 -0
  1600. data/spec/unit/key_spec.rb +7 -7
  1601. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +0 -0
  1602. data/spec/unit/knife/bootstrap/client_builder_spec.rb +0 -0
  1603. data/spec/unit/knife/bootstrap/train_connector_spec.rb +216 -0
  1604. data/spec/unit/knife/bootstrap_spec.rb +1438 -255
  1605. data/spec/unit/knife/client_bulk_delete_spec.rb +4 -4
  1606. data/spec/unit/knife/client_create_spec.rb +1 -18
  1607. data/spec/unit/knife/client_delete_spec.rb +0 -0
  1608. data/spec/unit/knife/client_edit_spec.rb +0 -0
  1609. data/spec/unit/knife/client_list_spec.rb +0 -0
  1610. data/spec/unit/knife/client_reregister_spec.rb +0 -0
  1611. data/spec/unit/knife/client_show_spec.rb +0 -0
  1612. data/spec/unit/knife/configure_client_spec.rb +1 -1
  1613. data/spec/unit/knife/configure_spec.rb +1 -1
  1614. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +1 -1
  1615. data/spec/unit/knife/cookbook_delete_spec.rb +2 -2
  1616. data/spec/unit/knife/cookbook_download_spec.rb +2 -2
  1617. data/spec/unit/knife/cookbook_list_spec.rb +0 -0
  1618. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +0 -0
  1619. data/spec/unit/knife/cookbook_metadata_spec.rb +4 -4
  1620. data/spec/unit/knife/cookbook_show_spec.rb +0 -1
  1621. data/spec/unit/knife/cookbook_upload_spec.rb +4 -33
  1622. data/spec/unit/knife/core/bootstrap_context_spec.rb +38 -55
  1623. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +0 -0
  1624. data/spec/unit/knife/core/gem_glob_loader_spec.rb +4 -4
  1625. data/spec/unit/knife/core/hashed_command_loader_spec.rb +2 -4
  1626. data/spec/unit/knife/core/node_editor_spec.rb +8 -8
  1627. data/spec/unit/knife/core/object_loader_spec.rb +0 -0
  1628. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -0
  1629. data/spec/unit/knife/core/ui_spec.rb +0 -0
  1630. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +278 -0
  1631. data/spec/unit/knife/data_bag_create_spec.rb +0 -0
  1632. data/spec/unit/knife/data_bag_edit_spec.rb +0 -0
  1633. data/spec/unit/knife/data_bag_from_file_spec.rb +1 -2
  1634. data/spec/unit/knife/data_bag_secret_options_spec.rb +0 -0
  1635. data/spec/unit/knife/data_bag_show_spec.rb +1 -2
  1636. data/spec/unit/knife/environment_compare_spec.rb +0 -0
  1637. data/spec/unit/knife/environment_create_spec.rb +0 -0
  1638. data/spec/unit/knife/environment_delete_spec.rb +0 -0
  1639. data/spec/unit/knife/environment_edit_spec.rb +0 -0
  1640. data/spec/unit/knife/environment_from_file_spec.rb +0 -0
  1641. data/spec/unit/knife/environment_list_spec.rb +0 -0
  1642. data/spec/unit/knife/environment_show_spec.rb +0 -0
  1643. data/spec/unit/knife/key_create_spec.rb +1 -1
  1644. data/spec/unit/knife/key_delete_spec.rb +3 -3
  1645. data/spec/unit/knife/key_edit_spec.rb +4 -4
  1646. data/spec/unit/knife/key_helper.rb +0 -0
  1647. data/spec/unit/knife/key_list_spec.rb +1 -1
  1648. data/spec/unit/knife/key_show_spec.rb +3 -3
  1649. data/spec/unit/knife/node_bulk_delete_spec.rb +3 -3
  1650. data/spec/unit/knife/node_delete_spec.rb +2 -2
  1651. data/spec/unit/knife/node_edit_spec.rb +1 -1
  1652. data/spec/unit/knife/node_environment_set_spec.rb +1 -1
  1653. data/spec/unit/knife/node_from_file_spec.rb +1 -1
  1654. data/spec/unit/knife/node_list_spec.rb +0 -0
  1655. data/spec/unit/knife/node_policy_set_spec.rb +1 -1
  1656. data/spec/unit/knife/node_run_list_add_spec.rb +1 -1
  1657. data/spec/unit/knife/node_run_list_remove_spec.rb +1 -1
  1658. data/spec/unit/knife/node_run_list_set_spec.rb +1 -1
  1659. data/spec/unit/knife/node_show_spec.rb +1 -1
  1660. data/spec/unit/knife/raw_spec.rb +2 -2
  1661. data/spec/unit/knife/role_bulk_delete_spec.rb +2 -2
  1662. data/spec/unit/knife/role_create_spec.rb +1 -1
  1663. data/spec/unit/knife/role_delete_spec.rb +1 -1
  1664. data/spec/unit/knife/role_edit_spec.rb +1 -1
  1665. data/spec/unit/knife/role_env_run_list_add_spec.rb +1 -1
  1666. data/spec/unit/knife/role_env_run_list_clear_spec.rb +1 -1
  1667. data/spec/unit/knife/role_env_run_list_remove_spec.rb +1 -1
  1668. data/spec/unit/knife/role_env_run_list_replace_spec.rb +1 -1
  1669. data/spec/unit/knife/role_env_run_list_set_spec.rb +1 -1
  1670. data/spec/unit/knife/role_from_file_spec.rb +1 -1
  1671. data/spec/unit/knife/role_list_spec.rb +0 -0
  1672. data/spec/unit/knife/role_run_list_add_spec.rb +1 -1
  1673. data/spec/unit/knife/role_run_list_clear_spec.rb +1 -1
  1674. data/spec/unit/knife/role_run_list_remove_spec.rb +1 -1
  1675. data/spec/unit/knife/role_run_list_replace_spec.rb +1 -1
  1676. data/spec/unit/knife/role_run_list_set_spec.rb +1 -1
  1677. data/spec/unit/knife/role_show_spec.rb +0 -0
  1678. data/spec/unit/knife/ssh_spec.rb +17 -27
  1679. data/spec/unit/knife/ssl_check_spec.rb +0 -0
  1680. data/spec/unit/knife/ssl_fetch_spec.rb +0 -0
  1681. data/spec/unit/knife/status_spec.rb +2 -3
  1682. data/spec/unit/knife/supermarket_download_spec.rb +0 -0
  1683. data/spec/unit/knife/supermarket_install_spec.rb +4 -5
  1684. data/spec/unit/knife/supermarket_share_spec.rb +1 -1
  1685. data/spec/unit/knife/supermarket_unshare_spec.rb +0 -0
  1686. data/spec/unit/knife/tag_create_spec.rb +0 -0
  1687. data/spec/unit/knife/tag_delete_spec.rb +0 -0
  1688. data/spec/unit/knife/tag_list_spec.rb +0 -0
  1689. data/spec/unit/knife/user_create_spec.rb +0 -30
  1690. data/spec/unit/knife/user_delete_spec.rb +1 -20
  1691. data/spec/unit/knife/user_edit_spec.rb +0 -18
  1692. data/spec/unit/knife/user_list_spec.rb +0 -0
  1693. data/spec/unit/knife/user_reregister_spec.rb +0 -18
  1694. data/spec/unit/knife/user_show_spec.rb +0 -19
  1695. data/spec/unit/knife_spec.rb +77 -53
  1696. data/spec/unit/log/syslog_spec.rb +0 -0
  1697. data/spec/unit/log/winevt_spec.rb +0 -0
  1698. data/spec/unit/log_spec.rb +0 -0
  1699. data/spec/unit/lwrp_spec.rb +19 -19
  1700. data/spec/unit/mash_spec.rb +0 -0
  1701. data/spec/unit/mixin/api_version_request_handling_spec.rb +0 -0
  1702. data/spec/unit/mixin/checksum_spec.rb +0 -0
  1703. data/spec/unit/mixin/convert_to_class_name_spec.rb +0 -0
  1704. data/spec/unit/mixin/deep_merge_spec.rb +0 -0
  1705. data/spec/unit/mixin/deprecation_spec.rb +0 -0
  1706. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +0 -0
  1707. data/spec/unit/mixin/homebrew_user_spec.rb +1 -1
  1708. data/spec/unit/mixin/lazy_module_include.rb +0 -0
  1709. data/spec/unit/mixin/openssl_helper_spec.rb +0 -0
  1710. data/spec/unit/mixin/params_validate_spec.rb +10 -10
  1711. data/spec/unit/mixin/path_sanity_spec.rb +0 -0
  1712. data/spec/unit/mixin/powershell_exec_spec.rb +0 -0
  1713. data/spec/unit/mixin/powershell_out_spec.rb +0 -0
  1714. data/spec/unit/mixin/powershell_type_coercions_spec.rb +0 -0
  1715. data/spec/unit/mixin/properties_spec.rb +4 -4
  1716. data/spec/unit/mixin/proxified_socket_spec.rb +0 -0
  1717. data/spec/unit/mixin/securable_spec.rb +0 -0
  1718. data/spec/unit/mixin/shell_out_spec.rb +3 -135
  1719. data/spec/unit/mixin/subclass_directive_spec.rb +0 -0
  1720. data/spec/unit/mixin/template_spec.rb +8 -49
  1721. data/spec/unit/mixin/unformatter_spec.rb +2 -1
  1722. data/spec/unit/mixin/uris_spec.rb +0 -0
  1723. data/spec/unit/mixin/user_context_spec.rb +2 -1
  1724. data/spec/unit/mixin/versioned_api_spec.rb +0 -0
  1725. data/spec/unit/mixin/which.rb +0 -2
  1726. data/spec/unit/mixin/windows_architecture_helper_spec.rb +3 -3
  1727. data/spec/unit/mixin/xml_escape_spec.rb +0 -0
  1728. data/spec/unit/monkey_patches/uri_spec.rb +0 -0
  1729. data/spec/unit/monologger_spec.rb +0 -0
  1730. data/spec/unit/node/attribute_spec.rb +45 -21
  1731. data/spec/unit/node/immutable_collections_spec.rb +49 -50
  1732. data/spec/unit/node/vivid_mash_spec.rb +106 -1
  1733. data/spec/unit/node_map_spec.rb +37 -3
  1734. data/spec/unit/node_spec.rb +12 -20
  1735. data/spec/unit/org_spec.rb +3 -3
  1736. data/spec/unit/platform/query_helpers_spec.rb +0 -0
  1737. data/spec/unit/policy_builder/dynamic_spec.rb +0 -12
  1738. data/spec/unit/policy_builder/expand_node_object_spec.rb +3 -3
  1739. data/spec/unit/policy_builder/policyfile_spec.rb +2 -2
  1740. data/spec/unit/policy_builder_spec.rb +0 -0
  1741. data/spec/unit/property/state_spec.rb +25 -26
  1742. data/spec/unit/property/validation_spec.rb +13 -14
  1743. data/spec/unit/property_spec.rb +102 -10
  1744. data/spec/unit/provider/apt_preference_spec.rb +0 -0
  1745. data/spec/unit/provider/apt_repository_spec.rb +0 -0
  1746. data/spec/unit/provider/apt_update_spec.rb +6 -6
  1747. data/spec/unit/provider/cookbook_file/content_spec.rb +0 -0
  1748. data/spec/unit/provider/cookbook_file_spec.rb +0 -0
  1749. data/spec/unit/provider/cron/unix_spec.rb +0 -0
  1750. data/spec/unit/provider/cron_spec.rb +1 -1
  1751. data/spec/unit/provider/directory_spec.rb +0 -0
  1752. data/spec/unit/provider/dsc_resource_spec.rb +3 -6
  1753. data/spec/unit/provider/dsc_script_spec.rb +1 -1
  1754. data/spec/unit/provider/execute_spec.rb +0 -0
  1755. data/spec/unit/provider/file/content_spec.rb +0 -0
  1756. data/spec/unit/provider/file_spec.rb +0 -0
  1757. data/spec/unit/provider/git_spec.rb +38 -38
  1758. data/spec/unit/provider/group/dscl_spec.rb +1 -1
  1759. data/spec/unit/provider/group/gpasswd_spec.rb +0 -0
  1760. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  1761. data/spec/unit/provider/group/groupmod_spec.rb +0 -0
  1762. data/spec/unit/provider/group/pw_spec.rb +0 -0
  1763. data/spec/unit/provider/group/solaris_spec.rb +106 -0
  1764. data/spec/unit/provider/group/suse_spec.rb +0 -0
  1765. data/spec/unit/provider/group/usermod_spec.rb +0 -3
  1766. data/spec/unit/provider/group/windows_spec.rb +0 -0
  1767. data/spec/unit/provider/group_spec.rb +3 -2
  1768. data/spec/unit/provider/http_request_spec.rb +0 -0
  1769. data/spec/unit/provider/ifconfig/aix_spec.rb +0 -0
  1770. data/spec/unit/provider/ifconfig/debian_spec.rb +0 -0
  1771. data/spec/unit/provider/ifconfig/redhat_spec.rb +0 -0
  1772. data/spec/unit/provider/ifconfig_spec.rb +13 -53
  1773. data/spec/unit/provider/launchd_spec.rb +8 -16
  1774. data/spec/unit/provider/link_spec.rb +11 -22
  1775. data/spec/unit/provider/log_spec.rb +0 -0
  1776. data/spec/unit/provider/mdadm_spec.rb +0 -0
  1777. data/spec/unit/provider/mount/aix_spec.rb +0 -0
  1778. data/spec/unit/provider/mount/mount_spec.rb +31 -31
  1779. data/spec/unit/provider/mount/solaris_spec.rb +11 -11
  1780. data/spec/unit/provider/mount/windows_spec.rb +0 -0
  1781. data/spec/unit/provider/mount_spec.rb +0 -0
  1782. data/spec/unit/provider/ohai_spec.rb +1 -1
  1783. data/spec/unit/provider/osx_profile_spec.rb +7 -5
  1784. data/spec/unit/provider/package/apt_spec.rb +31 -9
  1785. data/spec/unit/provider/package/bff_spec.rb +1 -1
  1786. data/spec/unit/provider/package/cab_spec.rb +1 -1
  1787. data/spec/unit/provider/package/chocolatey_spec.rb +8 -8
  1788. data/spec/unit/provider/package/deb_spec.rb +135 -0
  1789. data/spec/unit/provider/package/dnf/python_helper_spec.rb +0 -0
  1790. data/spec/unit/provider/package/dpkg_spec.rb +28 -1
  1791. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +0 -1
  1792. data/spec/unit/provider/package/freebsd/port_spec.rb +2 -14
  1793. data/spec/unit/provider/package/homebrew_spec.rb +0 -0
  1794. data/spec/unit/provider/package/ips_spec.rb +0 -0
  1795. data/spec/unit/provider/package/macports_spec.rb +0 -0
  1796. data/spec/unit/provider/package/msu_spec.rb +1 -1
  1797. data/spec/unit/provider/package/openbsd_spec.rb +11 -15
  1798. data/spec/unit/provider/package/pacman_spec.rb +0 -0
  1799. data/spec/unit/provider/package/paludis_spec.rb +0 -0
  1800. data/spec/unit/provider/package/portage_spec.rb +0 -0
  1801. data/spec/unit/provider/package/powershell_spec.rb +1 -1
  1802. data/spec/unit/provider/package/rpm_spec.rb +18 -7
  1803. data/spec/unit/provider/package/rubygems_spec.rb +0 -0
  1804. data/spec/unit/provider/package/smartos_spec.rb +3 -3
  1805. data/spec/unit/provider/package/snap_spec.rb +208 -0
  1806. data/spec/unit/provider/package/solaris_spec.rb +0 -0
  1807. data/spec/unit/provider/package/windows/exe_spec.rb +9 -9
  1808. data/spec/unit/provider/package/windows/msi_spec.rb +7 -7
  1809. data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +0 -0
  1810. data/spec/unit/provider/package/windows_spec.rb +1 -2
  1811. data/spec/unit/provider/package/yum/python_helper_spec.rb +0 -0
  1812. data/spec/unit/provider/package/yum/yum_cache_spec.rb +1 -1
  1813. data/spec/unit/provider/package/zypper_spec.rb +22 -31
  1814. data/spec/unit/provider/package_spec.rb +1 -223
  1815. data/spec/unit/provider/powershell_script_spec.rb +25 -16
  1816. data/spec/unit/provider/registry_key_spec.rb +1 -1
  1817. data/spec/unit/provider/remote_directory_spec.rb +6 -6
  1818. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +0 -0
  1819. data/spec/unit/provider/remote_file/content_spec.rb +0 -0
  1820. data/spec/unit/provider/remote_file/fetcher_spec.rb +0 -0
  1821. data/spec/unit/provider/remote_file/ftp_spec.rb +0 -0
  1822. data/spec/unit/provider/remote_file/http_spec.rb +0 -0
  1823. data/spec/unit/provider/remote_file/local_file_spec.rb +0 -0
  1824. data/spec/unit/provider/remote_file/network_file_spec.rb +0 -0
  1825. data/spec/unit/provider/remote_file/sftp_spec.rb +0 -0
  1826. data/spec/unit/provider/remote_file_spec.rb +0 -0
  1827. data/spec/unit/provider/route_spec.rb +11 -11
  1828. data/spec/unit/provider/ruby_block_spec.rb +0 -0
  1829. data/spec/unit/provider/script_spec.rb +0 -0
  1830. data/spec/unit/provider/service/aix_service_spec.rb +0 -0
  1831. data/spec/unit/provider/service/aixinit_service_spec.rb +0 -0
  1832. data/spec/unit/provider/service/arch_service_spec.rb +11 -11
  1833. data/spec/unit/provider/service/debian_service_spec.rb +1 -2
  1834. data/spec/unit/provider/service/freebsd_service_spec.rb +19 -23
  1835. data/spec/unit/provider/service/gentoo_service_spec.rb +2 -2
  1836. data/spec/unit/provider/service/init_service_spec.rb +9 -9
  1837. data/spec/unit/provider/service/insserv_service_spec.rb +2 -2
  1838. data/spec/unit/provider/service/invokercd_service_spec.rb +9 -9
  1839. data/spec/unit/provider/service/macosx_spec.rb +1 -1
  1840. data/spec/unit/provider/service/openbsd_service_spec.rb +11 -15
  1841. data/spec/unit/provider/service/redhat_spec.rb +0 -0
  1842. data/spec/unit/provider/service/simple_service_spec.rb +5 -5
  1843. data/spec/unit/provider/service/solaris_smf_service_spec.rb +0 -0
  1844. data/spec/unit/provider/service/systemd_service_spec.rb +2 -26
  1845. data/spec/unit/provider/service/upstart_service_spec.rb +14 -14
  1846. data/spec/unit/provider/service/windows_spec.rb +168 -144
  1847. data/spec/unit/provider/service_spec.rb +0 -0
  1848. data/spec/unit/provider/subversion_spec.rb +4 -8
  1849. data/spec/unit/provider/systemd_unit_spec.rb +148 -197
  1850. data/spec/unit/provider/template/content_spec.rb +28 -28
  1851. data/spec/unit/provider/template_spec.rb +0 -0
  1852. data/spec/unit/provider/user/aix_spec.rb +0 -0
  1853. data/spec/unit/provider/user/dscl_spec.rb +99 -321
  1854. data/spec/unit/provider/user/linux_spec.rb +0 -1
  1855. data/spec/unit/provider/user/pw_spec.rb +0 -0
  1856. data/spec/unit/provider/user/solaris_spec.rb +0 -0
  1857. data/spec/unit/provider/user/windows_spec.rb +0 -0
  1858. data/spec/unit/provider/user_spec.rb +46 -62
  1859. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -0
  1860. data/spec/unit/provider/windows_env_spec.rb +0 -0
  1861. data/spec/unit/provider/windows_path_spec.rb +0 -0
  1862. data/spec/unit/provider/windows_task_spec.rb +2 -7
  1863. data/spec/unit/provider/yum_repository_spec.rb +0 -0
  1864. data/spec/unit/provider/zypper_repository_spec.rb +0 -0
  1865. data/spec/unit/provider_resolver_spec.rb +8 -31
  1866. data/spec/unit/provider_spec.rb +4 -2
  1867. data/spec/unit/pure_application_spec.rb +0 -0
  1868. data/spec/unit/recipe_spec.rb +3 -8
  1869. data/spec/unit/resource/apt_package_spec.rb +10 -0
  1870. data/spec/unit/resource/apt_preference_spec.rb +0 -0
  1871. data/spec/unit/resource/apt_repository_spec.rb +0 -0
  1872. data/spec/unit/resource/apt_update_spec.rb +0 -0
  1873. data/spec/unit/resource/archive_file_spec.rb +47 -0
  1874. data/spec/unit/resource/bash_spec.rb +0 -0
  1875. data/spec/unit/resource/batch_spec.rb +1 -1
  1876. data/spec/unit/resource/bff_package_spec.rb +0 -0
  1877. data/spec/unit/resource/breakpoint_spec.rb +0 -0
  1878. data/spec/unit/resource/build_essential_spec.rb +0 -0
  1879. data/spec/unit/resource/cab_package_spec.rb +0 -0
  1880. data/spec/unit/resource/chef_gem_spec.rb +1 -4
  1881. data/spec/unit/resource/chef_handler_spec.rb +0 -0
  1882. data/spec/unit/resource/chocolatey_config_spec.rb +0 -5
  1883. data/spec/unit/resource/chocolatey_package_spec.rb +0 -0
  1884. data/spec/unit/resource/chocolatey_source_spec.rb +0 -5
  1885. data/spec/unit/resource/conditional_action_not_nothing_spec.rb +0 -0
  1886. data/spec/unit/resource/conditional_spec.rb +0 -0
  1887. data/spec/unit/resource/cookbook_file_spec.rb +0 -0
  1888. data/spec/unit/resource/cron_access_spec.rb +0 -0
  1889. data/spec/unit/resource/cron_d_spec.rb +0 -0
  1890. data/spec/unit/resource/cron_spec.rb +0 -0
  1891. data/spec/unit/resource/csh_spec.rb +0 -0
  1892. data/spec/unit/resource/directory_spec.rb +1 -1
  1893. data/spec/unit/resource/dmg_package_spec.rb +0 -0
  1894. data/spec/unit/resource/dnf_package_spec.rb +1 -1
  1895. data/spec/unit/resource/dpkg_package_spec.rb +10 -0
  1896. data/spec/unit/resource/dsc_resource_spec.rb +1 -1
  1897. data/spec/unit/resource/dsc_script_spec.rb +0 -0
  1898. data/spec/unit/resource/execute_spec.rb +0 -0
  1899. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +0 -0
  1900. data/spec/unit/resource/file/verification_spec.rb +2 -1
  1901. data/spec/unit/resource/file_spec.rb +1 -1
  1902. data/spec/unit/resource/freebsd_package_spec.rb +1 -27
  1903. data/spec/unit/resource/gem_package_spec.rb +0 -0
  1904. data/spec/unit/resource/git_spec.rb +0 -0
  1905. data/spec/unit/resource/group_spec.rb +1 -1
  1906. data/spec/unit/resource/homebrew_cask_spec.rb +0 -0
  1907. data/spec/unit/resource/homebrew_package_spec.rb +0 -0
  1908. data/spec/unit/resource/homebrew_tap_spec.rb +0 -0
  1909. data/spec/unit/resource/hostname_spec.rb +0 -0
  1910. data/spec/unit/resource/http_request_spec.rb +0 -0
  1911. data/spec/unit/resource/ifconfig_spec.rb +0 -0
  1912. data/spec/unit/resource/ips_package_spec.rb +0 -0
  1913. data/spec/unit/resource/kernel_module_spec.rb +0 -5
  1914. data/spec/unit/resource/ksh_spec.rb +0 -0
  1915. data/spec/unit/resource/launchd_spec.rb +0 -0
  1916. data/spec/unit/resource/link_spec.rb +1 -1
  1917. data/spec/unit/resource/locale_spec.rb +185 -22
  1918. data/spec/unit/resource/log_spec.rb +0 -0
  1919. data/spec/unit/resource/macos_user_defaults_spec.rb +0 -0
  1920. data/spec/unit/{knife/osc_user_list_spec.rb → resource/macosx_service.rb} +14 -14
  1921. data/spec/unit/resource/macports_package_spec.rb +0 -0
  1922. data/spec/unit/resource/mdadm_spec.rb +0 -0
  1923. data/spec/unit/resource/mount_spec.rb +0 -0
  1924. data/spec/unit/resource/msu_package_spec.rb +0 -0
  1925. data/spec/unit/resource/ohai_hint_spec.rb +0 -0
  1926. data/spec/unit/resource/ohai_spec.rb +0 -4
  1927. data/spec/unit/resource/openbsd_package_spec.rb +0 -0
  1928. data/spec/unit/resource/{openssl_dhparam.rb → openssl_dhparam_spec.rb} +0 -0
  1929. data/spec/unit/resource/openssl_ec_private_key_spec.rb +0 -0
  1930. data/spec/unit/resource/openssl_ec_public_key_spec.rb +0 -0
  1931. data/spec/unit/resource/openssl_rsa_private_key_spec.rb +0 -0
  1932. data/spec/unit/resource/openssl_rsa_public_key_spec.rb +0 -0
  1933. data/spec/unit/resource/openssl_x509_certificate_spec.rb +0 -0
  1934. data/spec/unit/resource/openssl_x509_crl_spec.rb +0 -0
  1935. data/spec/unit/resource/openssl_x509_request.rb +0 -0
  1936. data/spec/unit/resource/osx_profile_spec.rb +1 -2
  1937. data/spec/unit/resource/package_spec.rb +0 -10
  1938. data/spec/unit/resource/pacman_package_spec.rb +0 -0
  1939. data/spec/unit/resource/paludis_package_spec.rb +0 -0
  1940. data/spec/unit/resource/perl_spec.rb +0 -0
  1941. data/spec/unit/resource/portage_package_spec.rb +0 -0
  1942. data/spec/unit/resource/powershell_package_source_spec.rb +0 -0
  1943. data/spec/unit/resource/powershell_package_spec.rb +0 -0
  1944. data/spec/unit/resource/powershell_script_spec.rb +30 -13
  1945. data/spec/unit/resource/python_spec.rb +0 -0
  1946. data/spec/unit/resource/reboot_spec.rb +0 -0
  1947. data/spec/unit/resource/registry_key_spec.rb +3 -3
  1948. data/spec/unit/resource/remote_directory_spec.rb +22 -9
  1949. data/spec/unit/resource/remote_file_spec.rb +0 -0
  1950. data/spec/unit/resource/resource_notification_spec.rb +0 -0
  1951. data/spec/unit/resource/rhsm_errata_level_spec.rb +0 -0
  1952. data/spec/unit/resource/rhsm_errata_spec.rb +0 -0
  1953. data/spec/unit/resource/rhsm_register_spec.rb +0 -0
  1954. data/spec/unit/resource/rhsm_repo_spec.rb +0 -0
  1955. data/spec/unit/resource/rhsm_subscription_spec.rb +0 -0
  1956. data/spec/unit/resource/route_spec.rb +7 -2
  1957. data/spec/unit/resource/rpm_package_spec.rb +0 -0
  1958. data/spec/unit/resource/ruby_block_spec.rb +0 -0
  1959. data/spec/unit/resource/ruby_spec.rb +0 -0
  1960. data/spec/unit/resource/scm_spec.rb +0 -0
  1961. data/spec/unit/resource/script_spec.rb +0 -0
  1962. data/spec/unit/resource/service_spec.rb +76 -83
  1963. data/spec/unit/resource/smartos_package_spec.rb +0 -0
  1964. data/spec/unit/resource/snap_package_spec.rb +60 -0
  1965. data/spec/unit/resource/solaris_package_spec.rb +0 -0
  1966. data/spec/unit/resource/ssh_known_hosts_entry_spec.rb +0 -5
  1967. data/spec/unit/resource/subversion_spec.rb +0 -0
  1968. data/spec/unit/resource/sudo_spec.rb +0 -0
  1969. data/spec/unit/resource/swap_file_spec.rb +0 -0
  1970. data/spec/unit/resource/sysctl_spec.rb +0 -0
  1971. data/spec/unit/resource/systemd_unit_spec.rb +0 -0
  1972. data/spec/unit/resource/template_spec.rb +2 -2
  1973. data/spec/unit/resource/{timezone.rb → timezone_spec.rb} +0 -0
  1974. data/spec/unit/resource/user_spec.rb +21 -22
  1975. data/spec/unit/resource/windows_ad_join_spec.rb +0 -0
  1976. data/spec/unit/resource/windows_auto_run_spec.rb +0 -0
  1977. data/spec/unit/resource/{windows_certificate.rb → windows_certificate_spec.rb} +0 -0
  1978. data/spec/unit/resource/windows_dfs_folder_spec.rb +39 -0
  1979. data/spec/unit/resource/windows_dfs_namespace_spec.rb +39 -0
  1980. data/spec/unit/{audit/rspec_formatter_spec.rb → resource/windows_dfs_server_spec.rb} +14 -9
  1981. data/spec/unit/resource/windows_dns_record_spec.rb +55 -0
  1982. data/spec/unit/resource/windows_dns_zone_spec.rb +51 -0
  1983. data/spec/unit/resource/windows_env_spec.rb +1 -1
  1984. data/spec/unit/resource/{windows_feature_dism.rb → windows_feature_dism_spec.rb} +0 -0
  1985. data/spec/unit/resource/{windows_feature_powershell.rb → windows_feature_powershell_spec.rb} +0 -0
  1986. data/spec/unit/resource/{windows_feature.rb → windows_feature_spec.rb} +0 -0
  1987. data/spec/unit/resource/windows_firewall_rule_spec.rb +0 -0
  1988. data/spec/unit/resource/windows_font_spec.rb +0 -0
  1989. data/spec/unit/resource/windows_package_spec.rb +0 -0
  1990. data/spec/unit/resource/windows_pagefile_spec.rb +0 -0
  1991. data/spec/unit/resource/windows_path_spec.rb +0 -0
  1992. data/spec/unit/resource/windows_printer_port_spec.rb +0 -0
  1993. data/spec/unit/resource/windows_printer_spec.rb +0 -0
  1994. data/spec/unit/resource/windows_service_spec.rb +33 -18
  1995. data/spec/unit/resource/{windows_share.rb → windows_share_spec.rb} +0 -0
  1996. data/spec/unit/resource/windows_shortcut_spec.rb +0 -0
  1997. data/spec/unit/resource/windows_task_spec.rb +2 -2
  1998. data/spec/unit/resource/windows_uac_spec.rb +50 -0
  1999. data/spec/unit/resource/windows_workgroup_spec.rb +0 -0
  2000. data/spec/unit/resource/yum_package_spec.rb +1 -1
  2001. data/spec/unit/resource/yum_repository_spec.rb +0 -0
  2002. data/spec/unit/resource/zypper_package_spec.rb +0 -0
  2003. data/spec/unit/resource/zypper_repository_spec.rb +0 -0
  2004. data/spec/unit/resource_builder_spec.rb +0 -0
  2005. data/spec/unit/resource_collection/resource_list_spec.rb +1 -1
  2006. data/spec/unit/resource_collection/resource_set_spec.rb +7 -7
  2007. data/spec/unit/resource_collection/stepable_iterator_spec.rb +2 -2
  2008. data/spec/unit/resource_collection_spec.rb +4 -12
  2009. data/spec/unit/resource_definition_spec.rb +2 -2
  2010. data/spec/unit/resource_inspector_spec.rb +1 -1
  2011. data/spec/unit/resource_reporter_spec.rb +224 -198
  2012. data/spec/unit/resource_resolver_spec.rb +0 -0
  2013. data/spec/unit/resource_spec.rb +44 -21
  2014. data/spec/unit/role_spec.rb +2 -2
  2015. data/spec/unit/run_context/child_run_context_spec.rb +0 -7
  2016. data/spec/unit/run_context/cookbook_compiler_spec.rb +36 -24
  2017. data/spec/unit/run_context_spec.rb +1 -1
  2018. data/spec/unit/run_list/run_list_expansion_spec.rb +6 -9
  2019. data/spec/unit/run_list/run_list_item_spec.rb +0 -0
  2020. data/spec/unit/run_list/versioned_recipe_list_spec.rb +0 -0
  2021. data/spec/unit/run_list_spec.rb +1 -1
  2022. data/spec/unit/run_lock_spec.rb +0 -0
  2023. data/spec/unit/run_status_spec.rb +0 -0
  2024. data/spec/unit/runner_spec.rb +3 -3
  2025. data/spec/unit/scan_access_control_spec.rb +0 -0
  2026. data/spec/unit/search/query_spec.rb +2 -3
  2027. data/spec/unit/server_api_spec.rb +0 -0
  2028. data/spec/unit/server_api_versions_spec.rb +0 -0
  2029. data/spec/unit/shell/model_wrapper_spec.rb +1 -1
  2030. data/spec/unit/shell/shell_ext_spec.rb +0 -0
  2031. data/spec/unit/shell/shell_session_spec.rb +11 -8
  2032. data/spec/unit/shell_spec.rb +2 -1
  2033. data/spec/unit/train_transport_spec.rb +79 -0
  2034. data/spec/unit/user_spec.rb +4 -4
  2035. data/spec/unit/user_v1_spec.rb +3 -3
  2036. data/spec/unit/util/backup_spec.rb +1 -1
  2037. data/spec/unit/util/diff_spec.rb +0 -0
  2038. data/spec/unit/util/dsc/configuration_generator_spec.rb +0 -0
  2039. data/spec/unit/util/dsc/lcm_output_parser_spec.rb +0 -0
  2040. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +0 -0
  2041. data/spec/unit/util/dsc/resource_store.rb +0 -0
  2042. data/spec/unit/util/editor_spec.rb +1 -1
  2043. data/spec/unit/util/file_edit_spec.rb +0 -0
  2044. data/spec/unit/util/powershell/cmdlet_spec.rb +0 -0
  2045. data/spec/unit/util/powershell/ps_credential_spec.rb +2 -3
  2046. data/spec/unit/util/selinux_spec.rb +0 -0
  2047. data/spec/unit/util/threaded_job_queue_spec.rb +2 -2
  2048. data/spec/unit/util/windows/logon_session_spec.rb +0 -0
  2049. data/spec/unit/version/platform_spec.rb +0 -0
  2050. data/spec/unit/version_class_spec.rb +4 -4
  2051. data/spec/unit/version_constraint/platform_spec.rb +0 -0
  2052. data/spec/unit/version_constraint_spec.rb +0 -0
  2053. data/spec/unit/version_string_spec.rb +0 -0
  2054. data/spec/unit/win32/error_spec.rb +0 -0
  2055. data/spec/unit/win32/link_spec.rb +0 -0
  2056. data/spec/unit/win32/registry_spec.rb +5 -5
  2057. data/spec/unit/win32/security_spec.rb +1 -2
  2058. data/spec/unit/windows_service_spec.rb +0 -0
  2059. data/tasks/announce.rb +0 -0
  2060. data/tasks/bin/run_external_test +5 -1
  2061. data/tasks/dependencies.rb +0 -0
  2062. data/tasks/rspec.rb +0 -0
  2063. data/tasks/templates/release.md.erb +0 -0
  2064. metadata +169 -162
  2065. data/bin/chef-client +0 -25
  2066. data/bin/chef-resource-inspector +0 -26
  2067. data/bin/chef-shell +0 -31
  2068. data/lib/chef/audit/audit_event_proxy.rb +0 -93
  2069. data/lib/chef/audit/audit_reporter.rb +0 -176
  2070. data/lib/chef/audit/control_group_data.rb +0 -145
  2071. data/lib/chef/audit/logger.rb +0 -36
  2072. data/lib/chef/audit/rspec_formatter.rb +0 -37
  2073. data/lib/chef/audit/runner.rb +0 -196
  2074. data/lib/chef/data_collector/messages.rb +0 -100
  2075. data/lib/chef/data_collector/messages/helpers.rb +0 -159
  2076. data/lib/chef/data_collector/resource_report.rb +0 -123
  2077. data/lib/chef/dsl/audit.rb +0 -51
  2078. data/lib/chef/dsl/chef_provisioning.rb +0 -57
  2079. data/lib/chef/knife/cookbook_create.rb +0 -29
  2080. data/lib/chef/knife/cookbook_test.rb +0 -95
  2081. data/lib/chef/knife/osc_user_create.rb +0 -97
  2082. data/lib/chef/knife/osc_user_delete.rb +0 -51
  2083. data/lib/chef/knife/osc_user_edit.rb +0 -58
  2084. data/lib/chef/knife/osc_user_list.rb +0 -47
  2085. data/lib/chef/knife/osc_user_reregister.rb +0 -64
  2086. data/lib/chef/knife/osc_user_show.rb +0 -53
  2087. data/lib/chef/provider/package/freebsd/pkg.rb +0 -114
  2088. data/lib/chef/provider/user/useradd.rb +0 -161
  2089. data/spec/data/mac_users/10.7-8.plist.xml +0 -559
  2090. data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
  2091. data/spec/data/mac_users/10.7.plist.xml +0 -559
  2092. data/spec/data/mac_users/10.7.shadow.xml +0 -11
  2093. data/spec/data/mac_users/10.8.plist.xml +0 -559
  2094. data/spec/data/mac_users/10.8.shadow.xml +0 -21
  2095. data/spec/data/templates/failed.erb +0 -5
  2096. data/spec/functional/assets/inittest +0 -36
  2097. data/spec/functional/audit/rspec_formatter_spec.rb +0 -54
  2098. data/spec/functional/audit/runner_spec.rb +0 -121
  2099. data/spec/functional/resource/insserv_spec.rb +0 -206
  2100. data/spec/integration/recipes/unified_mode_spec.rb +0 -876
  2101. data/spec/support/shared/context/client.rb +0 -306
  2102. data/spec/support/shared/examples/client.rb +0 -104
  2103. data/spec/unit/audit/audit_event_proxy_spec.rb +0 -325
  2104. data/spec/unit/audit/audit_reporter_spec.rb +0 -444
  2105. data/spec/unit/audit/control_group_data_spec.rb +0 -487
  2106. data/spec/unit/audit/logger_spec.rb +0 -42
  2107. data/spec/unit/audit/runner_spec.rb +0 -144
  2108. data/spec/unit/data_collector/messages/helpers_spec.rb +0 -202
  2109. data/spec/unit/data_collector/messages_spec.rb +0 -329
  2110. data/spec/unit/data_collector/resource_report_spec.rb +0 -145
  2111. data/spec/unit/dsl/audit_spec.rb +0 -43
  2112. data/spec/unit/knife/cookbook_create_spec.rb +0 -42
  2113. data/spec/unit/knife/cookbook_test_spec.rb +0 -84
  2114. data/spec/unit/knife/osc_user_create_spec.rb +0 -93
  2115. data/spec/unit/knife/osc_user_delete_spec.rb +0 -44
  2116. data/spec/unit/knife/osc_user_edit_spec.rb +0 -52
  2117. data/spec/unit/knife/osc_user_reregister_spec.rb +0 -58
  2118. data/spec/unit/knife/osc_user_show_spec.rb +0 -46
  2119. data/spec/unit/provider/package/freebsd/pkg_spec.rb +0 -274
@@ -0,0 +1,216 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2019 Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require "spec_helper"
19
+ require "ostruct"
20
+ require "chef/knife/bootstrap/train_connector"
21
+
22
+ describe Chef::Knife::Bootstrap::TrainConnector do
23
+ let(:protocol) { "mock" }
24
+ let(:family) { "unknown" }
25
+ let(:release) { "unknown" } # version
26
+ let(:name) { "unknown" }
27
+ let(:arch) { "x86_64" }
28
+ let(:connection_opts) { {} } # connection opts
29
+ let(:host_url) { "mock://user1@example.com" }
30
+ let(:mock_connection) { true }
31
+
32
+ subject do
33
+ # Example groups can still override by setting explicitly it in 'connection_opts'
34
+ tc = Chef::Knife::Bootstrap::TrainConnector.new(host_url, protocol, connection_opts)
35
+ tc
36
+ end
37
+
38
+ before(:each) do
39
+ if mock_connection
40
+ subject.connect!
41
+ subject.connection.mock_os(
42
+ family: family,
43
+ name: name,
44
+ release: release,
45
+ arch: arch
46
+ )
47
+ end
48
+ end
49
+
50
+ describe "platform helpers" do
51
+ context "on linux" do
52
+ let(:family) { "debian" }
53
+ let(:name) { "ubuntu" }
54
+ it "reports that it is linux and unix, because that is how train classifies it" do
55
+ expect(subject.unix?).to eq true
56
+ expect(subject.linux?).to eq true
57
+ expect(subject.windows?).to eq false
58
+ end
59
+ end
60
+ context "on unix" do
61
+ let(:family) { "os" }
62
+ let(:name) { "mac_os_x" }
63
+ it "reports only a unix OS" do
64
+ expect(subject.unix?).to eq true
65
+ expect(subject.linux?).to eq false
66
+ expect(subject.windows?).to eq false
67
+ end
68
+ end
69
+ context "on windows" do
70
+ let(:family) { "windows" }
71
+ let(:name) { "windows" }
72
+ it "reports only a windows OS" do
73
+ expect(subject.unix?).to eq false
74
+ expect(subject.linux?).to eq false
75
+ expect(subject.windows?).to eq true
76
+ end
77
+ end
78
+ end
79
+
80
+ describe "#connect!" do
81
+ it "establishes the connection to the remote host by waiting for it" do
82
+ expect(subject.connection).to receive(:wait_until_ready)
83
+ subject.connect!
84
+ end
85
+ end
86
+
87
+ describe "#initialize" do
88
+ let(:mock_connection) { false }
89
+
90
+ context "when provided target is a proper URL" do
91
+ let(:protocol) { "ssh" }
92
+ let(:host_url) { "mock://user1@localhost:2200" }
93
+ it "correctly configures the instance from the URL" do
94
+ expect(subject.config[:backend]).to eq "mock"
95
+ expect(subject.config[:port]).to eq 2200
96
+ expect(subject.config[:host]).to eq "localhost"
97
+ expect(subject.config[:user]).to eq "user1"
98
+ end
99
+
100
+ context "and conflicting options are given" do
101
+ let(:connection_opts) { { user: "user2", host: "example.com", port: 15 } }
102
+ it "resolves them from the URI" do
103
+ expect(subject.config[:backend]).to eq "mock"
104
+ expect(subject.config[:port]).to eq 2200
105
+ expect(subject.config[:host]).to eq "localhost"
106
+ expect(subject.config[:user]).to eq "user1"
107
+ end
108
+ end
109
+ end
110
+
111
+ context "when provided target is just a hostname" do
112
+ let(:host_url) { "localhost" }
113
+ let(:protocol) { "mock" }
114
+ it "correctly sets backend protocol from the default" do
115
+ expect(subject.config[:backend]).to eq "mock"
116
+ end
117
+
118
+ context "and options have been provided that are supported by the transport" do
119
+ let(:protocol) { "ssh" }
120
+ let(:connection_opts) { { port: 15, user: "user2" } }
121
+
122
+ it "sets hostname and transport from arguments and provided fields from options" do
123
+ expect(subject.config[:backend]).to eq "ssh"
124
+ expect(subject.config[:host]).to eq "localhost"
125
+ expect(subject.config[:user]).to eq "user2"
126
+ expect(subject.config[:port]).to eq 15
127
+ end
128
+
129
+ end
130
+
131
+ end
132
+
133
+ context "when provided target is just a an IP address" do
134
+ let(:host_url) { "127.0.0.1" }
135
+ let(:protocol) { "mock" }
136
+ it "correctly sets backend protocol from the default" do
137
+ expect(subject.config[:backend]).to eq "mock"
138
+ end
139
+ end
140
+ end
141
+
142
+ describe "#temp_dir" do
143
+ context "under windows" do
144
+ let(:family) { "windows" }
145
+ let(:name) { "windows" }
146
+
147
+ it "uses the windows command to create the temp dir" do
148
+ expected_command = Chef::Knife::Bootstrap::TrainConnector::MKTEMP_WIN_COMMAND
149
+ expect(subject).to receive(:run_command!).with(expected_command)
150
+ .and_return double("result", stdout: "C:/a/path")
151
+ expect(subject.temp_dir).to eq "C:/a/path"
152
+ end
153
+
154
+ end
155
+ context "under linux and unix-like" do
156
+ let(:family) { "debian" }
157
+ let(:name) { "ubuntu" }
158
+ it "uses the *nix command to create the temp dir and sets ownership to logged-in user" do
159
+ expected_command = Chef::Knife::Bootstrap::TrainConnector::MKTEMP_NIX_COMMAND
160
+ expect(subject).to receive(:run_command!).with(expected_command)
161
+ .and_return double("result", stdout: "/a/path")
162
+ expect(subject).to receive(:run_command!).with("chown user1 '/a/path'")
163
+ expect(subject.temp_dir).to eq "/a/path"
164
+ end
165
+
166
+ end
167
+ end
168
+ context "#upload_file_content!" do
169
+ it "creates a local file with expected content and uploads it" do
170
+ expect(subject).to receive(:upload_file!) do |local_path, remote_path|
171
+ expect(File.read(local_path)).to eq "test data"
172
+ expect(remote_path).to eq "/target/path"
173
+ end
174
+ subject.upload_file_content!("test data", "/target/path")
175
+ end
176
+ end
177
+
178
+ context "del_file" do
179
+ context "on windows" do
180
+ let(:family) { "windows" }
181
+ let(:name) { "windows" }
182
+ it "deletes the file with a windows command" do
183
+ expect(subject).to receive(:run_command!) do |cmd, &_handler|
184
+ expect(cmd).to match(/Test-Path "deleteme\.txt".*/)
185
+ end
186
+ subject.del_file!("deleteme.txt")
187
+ end
188
+ end
189
+ context "on unix-like" do
190
+ let(:family) { "debian" }
191
+ let(:name) { "ubuntu" }
192
+ it "deletes the file with a windows command" do
193
+ expect(subject).to receive(:run_command!) do |cmd, &_handler|
194
+ expect(cmd).to match(/rm -f "deleteme\.txt".*/)
195
+ end
196
+ subject.del_file!("deleteme.txt")
197
+ end
198
+ end
199
+ end
200
+
201
+ context "#run_command!" do
202
+ it "raises a RemoteExecutionFailed when the remote execution failed" do
203
+ command_result = double("results", stdout: "", stderr: "failed", exit_status: 1)
204
+ expect(subject).to receive(:run_command).and_return command_result
205
+
206
+ expect { subject.run_command!("test") }.to raise_error do |e|
207
+ expect(e.hostname).to eq subject.hostname
208
+ expect(e.class).to eq Chef::Knife::Bootstrap::RemoteExecutionFailed
209
+ expect(e.stderr).to eq "failed"
210
+ expect(e.stdout).to eq ""
211
+ expect(e.exit_status).to eq 1
212
+ end
213
+ end
214
+ end
215
+
216
+ end
@@ -22,33 +22,68 @@ Chef::Knife::Bootstrap.load_deps
22
22
  require "net/ssh"
23
23
 
24
24
  describe Chef::Knife::Bootstrap do
25
- before do
26
- allow(ChefConfig).to receive(:windows?) { false }
27
- end
25
+ let(:bootstrap_template) { nil }
26
+ let(:stderr) { StringIO.new }
27
+ let(:bootstrap_cli_options) { [ ] }
28
+ let(:linux_test) { true }
29
+ let(:windows_test) { false }
30
+ let(:linux_test) { false }
31
+ let(:unix_test) { false }
32
+ let(:ssh_test) { false }
33
+
34
+ let(:connection) do
35
+ double("TrainConnector",
36
+ windows?: windows_test,
37
+ linux?: linux_test,
38
+ unix?: unix_test) end
39
+
28
40
  let(:knife) do
29
41
  Chef::Log.logger = Logger.new(StringIO.new)
30
42
  Chef::Config[:knife][:bootstrap_template] = bootstrap_template unless bootstrap_template.nil?
31
43
 
32
44
  k = Chef::Knife::Bootstrap.new(bootstrap_cli_options)
33
- k.merge_configs
34
-
35
45
  allow(k.ui).to receive(:stderr).and_return(stderr)
36
46
  allow(k).to receive(:encryption_secret_provided_ignore_encrypt_flag?).and_return(false)
47
+ allow(k).to receive(:connection).and_return connection
48
+ k.merge_configs
37
49
  k
38
50
  end
39
51
 
40
- let(:stderr) { StringIO.new }
52
+ context "#check_license" do
53
+ let(:acceptor) { instance_double(LicenseAcceptance::Acceptor) }
41
54
 
42
- let(:bootstrap_template) { nil }
55
+ before do
56
+ expect(LicenseAcceptance::Acceptor).to receive(:new).and_return(acceptor)
57
+ end
43
58
 
44
- let(:bootstrap_cli_options) { [ ] }
59
+ describe "when a license is not required" do
60
+ it "does not set the chef_license" do
61
+ expect(acceptor).to receive(:license_required?).and_return(false)
62
+ knife.check_license
63
+ expect(Chef::Config[:chef_license]).to eq(nil)
64
+ end
65
+ end
45
66
 
46
- it "should use chef-full as default template" do
47
- expect(knife.bootstrap_template).to be_a_kind_of(String)
48
- expect(File.basename(knife.bootstrap_template)).to eq("chef-full")
67
+ describe "when a license is required" do
68
+ it "sets the chef_license" do
69
+ expect(acceptor).to receive(:license_required?).and_return(true)
70
+ expect(acceptor).to receive(:id_from_mixlib).and_return("id")
71
+ expect(acceptor).to receive(:check_and_persist)
72
+ expect(acceptor).to receive(:acceptance_value).and_return("accept-no-persist")
73
+ knife.check_license
74
+ expect(Chef::Config[:chef_license]).to eq("accept-no-persist")
75
+ end
76
+ end
77
+ end
78
+
79
+ context "#bootstrap_template" do
80
+ it "should default to chef-full" do
81
+ expect(knife.bootstrap_template).to be_a_kind_of(String)
82
+ expect(File.basename(knife.bootstrap_template)).to eq("chef-full")
83
+ end
49
84
  end
50
85
 
51
- context "when using the chef-full default template" do
86
+ context "#render_template - when using the chef-full default template" do
52
87
  let(:rendered_template) do
53
88
  knife.merge_configs
54
89
  knife.render_template
@@ -72,7 +107,7 @@ describe Chef::Knife::Bootstrap do
72
107
  expect(knife).to receive(:read_secret).and_return("secrets")
73
108
  expect(rendered_template).to match("cat > /etc/chef/encrypted_data_bag_secret <<'EOP'")
74
109
  expect(rendered_template).to match('{"run_list":\[\]}')
75
- expect(rendered_template).to match(/secrets/)
110
+ expect(rendered_template).to match(%r{secrets})
76
111
  end
77
112
  end
78
113
  end
@@ -92,7 +127,7 @@ describe Chef::Knife::Bootstrap do
92
127
  knife.render_template
93
128
  end
94
129
  it "configures the preinstall command in the bootstrap template correctly" do
95
- expect(rendered_template).to match(/command/)
130
+ expect(rendered_template).to match(%r{command})
96
131
  end
97
132
  end
98
133
 
@@ -103,7 +138,7 @@ describe Chef::Knife::Bootstrap do
103
138
  knife.render_template
104
139
  end
105
140
  it "configures the https_proxy environment variable in the bootstrap template correctly" do
106
- expect(rendered_template).to match(/https_proxy="1.1.1.1" export https_proxy/)
141
+ expect(rendered_template).to match(%r{https_proxy="1.1.1.1" export https_proxy})
107
142
  end
108
143
  end
109
144
 
@@ -114,7 +149,7 @@ describe Chef::Knife::Bootstrap do
114
149
  knife.render_template
115
150
  end
116
151
  it "configures the https_proxy environment variable in the bootstrap template correctly" do
117
- expect(rendered_template).to match(/no_proxy="localserver" export no_proxy/)
152
+ expect(rendered_template).to match(%r{no_proxy="localserver" export no_proxy})
118
153
  end
119
154
  end
120
155
 
@@ -306,14 +341,15 @@ describe Chef::Knife::Bootstrap do
306
341
  jsonfile.close
307
342
  end
308
343
 
309
- context "when --json-attributes and --json-attribute-file were both passed" do
310
- it "raises a Chef::Exceptions::BootstrapCommandInputError with the proper error message" do
311
- knife.parse_options(["-j", '{"foo":{"bar":"baz"}}'])
312
- knife.parse_options(["--json-attribute-file", jsonfile.path])
313
- knife.merge_configs
314
- expect { knife.run }.to raise_error(Chef::Exceptions::BootstrapCommandInputError)
315
- jsonfile.close
316
- end
344
+ it "raises a Chef::Exceptions::BootstrapCommandInputError with the proper error message" do
345
+ knife.parse_options(["-j", '{"foo":{"bar":"baz"}}'])
346
+ knife.parse_options(["--json-attribute-file", jsonfile.path])
347
+ knife.merge_configs
348
+ allow(knife).to receive(:validate_name_args!)
349
+ expect(knife).to receive(:check_license)
350
+
351
+ expect { knife.run }.to raise_error(Chef::Exceptions::BootstrapCommandInputError)
352
+ jsonfile.close
317
353
  end
318
354
  end
319
355
  end
@@ -324,7 +360,7 @@ describe Chef::Knife::Bootstrap do
324
360
  it "should create a hint file when told to" do
325
361
  knife.parse_options(["--hint", "openstack"])
326
362
  knife.merge_configs
327
- expect(knife.render_template).to match(%r{/etc/chef/ohai/hints/openstack.json})
363
+ expect(knife.render_template).to match(/\/etc\/chef\/ohai\/hints\/openstack.json/)
328
364
  end
329
365
 
330
366
  it "should populate a hint file with JSON when given a file to read" do
@@ -339,13 +375,16 @@ describe Chef::Knife::Bootstrap do
339
375
  subject(:knife) do
340
376
  k = described_class.new
341
377
  Chef::Config[:knife][:bootstrap_template] = template_file
378
+ allow(k).to receive(:connection).and_return connection
342
379
  k.parse_options(options)
343
380
  k.merge_configs
344
381
  k
345
382
  end
346
383
 
347
384
  let(:options) { ["--bootstrap-no-proxy", setting, "-s", "foo"] }
385
+
348
386
  let(:template_file) { File.expand_path(File.join(CHEF_SPEC_DATA, "bootstrap", "no_proxy.erb")) }
387
+
349
388
  let(:rendered_template) do
350
389
  knife.render_template
351
390
  end
@@ -354,7 +393,7 @@ describe Chef::Knife::Bootstrap do
354
393
  let(:setting) { "api.opscode.com" }
355
394
 
356
395
  it "renders the client.rb with a single FQDN no_proxy entry" do
357
- expect(rendered_template).to match(/.*no_proxy\s*"api.opscode.com".*/)
396
+ expect(rendered_template).to match(%r{.*no_proxy\s*"api.opscode.com".*})
358
397
  end
359
398
  end
360
399
 
@@ -362,7 +401,7 @@ describe Chef::Knife::Bootstrap do
362
401
  let(:setting) { "api.opscode.com,172.16.10.*" }
363
402
 
364
403
  it "renders the client.rb with comma-separated FQDN and wildcard IP address no_proxy entries" do
365
- expect(rendered_template).to match(/.*no_proxy\s*"api.opscode.com,172.16.10.\*".*/)
404
+ expect(rendered_template).to match(%r{.*no_proxy\s*"api.opscode.com,172.16.10.\*".*})
366
405
  end
367
406
  end
368
407
 
@@ -420,7 +459,7 @@ describe Chef::Knife::Bootstrap do
420
459
  it "creates a secret file" do
421
460
  expect(knife).to receive(:encryption_secret_provided_ignore_encrypt_flag?).and_return(true)
422
461
  expect(knife).to receive(:read_secret).and_return(secret)
423
- expect(rendered_template).to match(/#{secret}/)
462
+ expect(rendered_template).to match(%r{#{secret}})
424
463
  end
425
464
 
426
465
  it "renders the client.rb with an encrypted_data_bag_secret entry" do
@@ -463,11 +502,13 @@ describe Chef::Knife::Bootstrap do
463
502
  end
464
503
  end
465
504
 
466
- it "doesn't create /etc/chef/trusted_certs if :trusted_certs_dir is empty" do
467
- allow(Dir).to receive(:glob).and_call_original
468
- expect(Dir).to receive(:glob).with(File.join(trusted_certs_dir, "*.{crt,pem}")).and_return([])
469
- expect(rendered_template).not_to match(%r{mkdir -p /etc/chef/trusted_certs})
505
+ context "when :trusted_cets_dir is empty" do
506
+ let(:trusted_certs_dir) { Chef::Util::PathHelper.cleanpath(File.join(File.dirname(__FILE__), "../../data/trusted_certs_empty")) }
507
+ it "doesn't create /etc/chef/trusted_certs if :trusted_certs_dir is empty" do
508
+ expect(rendered_template).not_to match(%r{mkdir -p /etc/chef/trusted_certs})
509
+ end
470
510
  end
511
+
471
512
  end
472
513
 
473
514
  context "when doing fips things" do
@@ -528,9 +569,7 @@ describe Chef::Knife::Bootstrap do
528
569
  context "when client_d_dir is set" do
529
570
  let(:client_d_dir) do
530
571
  Chef::Util::PathHelper.cleanpath(
531
- File.join(File.dirname(__FILE__), "../../data/client.d_00")
532
- )
533
- end
572
+ File.join(File.dirname(__FILE__), "../../data/client.d_00")) end
534
573
 
535
574
  it "creates /etc/chef/client.d" do
536
575
  expect(rendered_template).to match("mkdir -p /etc/chef/client\.d")
@@ -555,9 +594,7 @@ describe Chef::Knife::Bootstrap do
555
594
  context "a nested directory structure" do
556
595
  let(:client_d_dir) do
557
596
  Chef::Util::PathHelper.cleanpath(
558
- File.join(File.dirname(__FILE__), "../../data/client.d_01")
559
- )
560
- end
597
+ File.join(File.dirname(__FILE__), "../../data/client.d_01")) end
561
598
  it "creates a file foo/bar.rb" do
562
599
  expect(rendered_template).to match("cat > /etc/chef/client.d/foo/bar.rb <<'EOP'")
563
600
  expect(rendered_template).to match("1 / 0")
@@ -566,14 +603,116 @@ describe Chef::Knife::Bootstrap do
566
603
  end
567
604
  end
568
605
 
569
- describe "handling policyfile options" do
606
+ describe "#connection_protocol" do
607
+ let(:host_descriptor) { "example.com" }
608
+ let(:config) { {} }
609
+ let(:knife_connection_protocol) { nil }
610
+ before do
611
+ allow(knife).to receive(:config).and_return config
612
+ allow(knife).to receive(:host_descriptor).and_return host_descriptor
613
+ if knife_connection_protocol
614
+ Chef::Config[:knife][:connection_protocol] = knife_connection_protocol
615
+ end
616
+ end
617
+
618
+ context "when protocol is part of the host argument" do
619
+ let(:host_descriptor) { "winrm://myhost" }
620
+
621
+ it "returns the value provided by the host argument" do
622
+ expect(knife.connection_protocol).to eq "winrm"
623
+ end
624
+ end
625
+
626
+ context "when protocol is provided via the CLI flag" do
627
+ let(:config) { { connection_protocol: "winrm" } }
628
+ it "returns that value" do
629
+ expect(knife.connection_protocol).to eq "winrm"
630
+ end
631
+
632
+ end
633
+ context "when protocol is provided via the host argument and the CLI flag" do
634
+ let(:host_descriptor) { "ssh://example.com" }
635
+ let(:config) { { connection_protocol: "winrm" } }
636
+
637
+ it "returns the value provided by the host argument" do
638
+ expect(knife.connection_protocol).to eq "ssh"
639
+ end
640
+ end
641
+
642
+ context "when no explicit protocol is provided" do
643
+ let(:config) { {} }
644
+ let(:host_descriptor) { "example.com" }
645
+ let(:knife_connection_protocol) { "winrm" }
646
+ it "falls back to knife config" do
647
+ expect(knife.connection_protocol).to eq "winrm"
648
+ end
649
+ context "and there is no knife bootstrap_protocol" do
650
+ let(:knife_connection_protocol) { nil }
651
+ it "falls back to 'ssh'" do
652
+ expect(knife.connection_protocol).to eq "ssh"
653
+ end
654
+ end
655
+ end
656
+
657
+ end
658
+
659
+ describe "#validate_protocol!" do
660
+ let(:host_descriptor) { "example.com" }
661
+ let(:config) { {} }
662
+ let(:connection_protocol) { "ssh" }
663
+ before do
664
+ allow(knife).to receive(:config).and_return config
665
+ allow(knife).to receive(:connection_protocol).and_return connection_protocol
666
+ allow(knife).to receive(:host_descriptor).and_return host_descriptor
667
+ end
668
+
669
+ context "when protocol is provided both in the URL and via --protocol" do
670
+
671
+ context "and they do not match" do
672
+ let(:connection_protocol) { "ssh" }
673
+ let(:config) { { connection_protocol: "winrm" } }
674
+ it "outputs an error and exits" do
675
+ expect(knife.ui).to receive(:error)
676
+ expect { knife.validate_protocol! }.to raise_error SystemExit
677
+ end
678
+ end
679
+
680
+ context "and they do match" do
681
+ let(:connection_protocol) { "winrm" }
682
+ let(:config) { { connection_protocol: "winrm" } }
683
+ it "returns true" do
684
+ expect(knife.validate_protocol!).to eq true
685
+ end
686
+ end
687
+ end
688
+
689
+ context "and the protocol is supported" do
690
+
691
+ Chef::Knife::Bootstrap::SUPPORTED_CONNECTION_PROTOCOLS.each do |proto|
692
+ let(:connection_protocol) { proto }
693
+ it "returns true for #{proto}" do
694
+ expect(knife.validate_protocol!).to eq true
695
+ end
696
+ end
697
+ end
698
+
699
+ context "and the protocol is not supported" do
700
+ let(:connection_protocol) { "invalid" }
701
+ it "outputs an error and exits" do
702
+ expect(knife.ui).to receive(:error).with(/Unsupported protocol '#{connection_protocol}'/)
703
+ expect { knife.validate_protocol! }.to raise_error SystemExit
704
+ end
705
+ end
706
+ end
707
+
708
+ describe "#validate_policy_options!" do
570
709
 
571
710
  context "when only policy_name is given" do
572
711
 
573
712
  let(:bootstrap_cli_options) { %w{ --policy-name my-app-server } }
574
713
 
575
714
  it "returns an error stating that policy_name and policy_group must be given together" do
576
- expect { knife.validate_options! }.to raise_error(SystemExit)
715
+ expect { knife.validate_policy_options! }.to raise_error(SystemExit)
577
716
  expect(stderr.string).to include("ERROR: --policy-name and --policy-group must be specified together")
578
717
  end
579
718
 
@@ -584,7 +723,7 @@ describe Chef::Knife::Bootstrap do
584
723
  let(:bootstrap_cli_options) { %w{ --policy-group staging } }
585
724
 
586
725
  it "returns an error stating that policy_name and policy_group must be given together" do
587
- expect { knife.validate_options! }.to raise_error(SystemExit)
726
+ expect { knife.validate_policy_options! }.to raise_error(SystemExit)
588
727
  expect(stderr.string).to include("ERROR: --policy-name and --policy-group must be specified together")
589
728
  end
590
729
 
@@ -595,7 +734,7 @@ describe Chef::Knife::Bootstrap do
595
734
  let(:bootstrap_cli_options) { %w{ --policy-name my-app --policy-group staging --run-list cookbook } }
596
735
 
597
736
  it "returns an error stating that policyfile and run_list are exclusive" do
598
- expect { knife.validate_options! }.to raise_error(SystemExit)
737
+ expect { knife.validate_policy_options! }.to raise_error(SystemExit)
599
738
  expect(stderr.string).to include("ERROR: Policyfile options and --run-list are exclusive")
600
739
  end
601
740
 
@@ -606,7 +745,7 @@ describe Chef::Knife::Bootstrap do
606
745
  let(:bootstrap_cli_options) { %w{ --policy-name my-app --policy-group staging } }
607
746
 
608
747
  it "passes options validation" do
609
- expect { knife.validate_options! }.to_not raise_error
748
+ expect { knife.validate_policy_options! }.to_not raise_error
610
749
  end
611
750
 
612
751
  it "passes them into the bootstrap context" do
@@ -624,353 +763,1397 @@ describe Chef::Knife::Bootstrap do
624
763
  # Arguably a bug in the plugin: it shouldn't be setting this to nil, but it
625
764
  # worked before, so make it work now.
626
765
  context "when a plugin sets the run list option to nil" do
627
-
628
766
  before do
629
767
  knife.config[:run_list] = nil
630
768
  end
631
769
 
632
770
  it "passes options validation" do
633
- expect { knife.validate_options! }.to_not raise_error
771
+ expect { knife.validate_policy_options! }.to_not raise_error
634
772
  end
635
-
636
773
  end
774
+ end
637
775
 
776
+ # TODO - this is the only cli option we validate the _option_ itself -
777
+ # so we'll know if someone accidentally deletes or renames use_sudo_password
778
+ # Is this worht keeping? If so, then it seems we should expand it
779
+ # to cover all options.
780
+ context "validating use_sudo_password option" do
781
+ it "use_sudo_password contains description and long params for help" do
782
+ expect(knife.options).to(have_key(:use_sudo_password)) \
783
+ && expect(knife.options[:use_sudo_password][:description].to_s).not_to(eq(""))\
784
+ && expect(knife.options[:use_sudo_password][:long].to_s).not_to(eq(""))
785
+ end
638
786
  end
639
787
 
640
- describe "#validate_bootstrap_version_options!" do
641
- describe "chef-14 or lower" do
642
- before do
643
- stub_const("Chef::VERSION", "14.0")
788
+ context "#connection_opts" do
789
+ let(:connection_protocol) { "ssh" }
790
+ before do
791
+ allow(knife).to receive(:connection_protocol).and_return connection_protocol
792
+ end
793
+ context "behavioral test: " do
794
+ let(:expected_connection_opts) do
795
+ { base_opts: true,
796
+ ssh_identity_opts: true,
797
+ ssh_opts: true,
798
+ gateway_opts: true,
799
+ host_verify_opts: true,
800
+ sudo_opts: true,
801
+ winrm_opts: true }
802
+ end
803
+
804
+ it "queries and merges only expected configurations" do
805
+ expect(knife).to receive(:base_opts).and_return({ base_opts: true })
806
+ expect(knife).to receive(:host_verify_opts).and_return({ host_verify_opts: true })
807
+ expect(knife).to receive(:gateway_opts).and_return({ gateway_opts: true })
808
+ expect(knife).to receive(:sudo_opts).and_return({ sudo_opts: true })
809
+ expect(knife).to receive(:winrm_opts).and_return({ winrm_opts: true })
810
+ expect(knife).to receive(:ssh_opts).and_return({ ssh_opts: true })
811
+ expect(knife).to receive(:ssh_identity_opts).and_return({ ssh_identity_opts: true })
812
+ expect(knife.connection_opts).to match expected_connection_opts
813
+ end
814
+ end
815
+
816
+ context "functional test: " do
817
+ context "when protocol is winrm" do
818
+ let(:connection_protocol) { "winrm" }
819
+ # context "and neither CLI nor Chef::Config config entries have been provided"
820
+ # end
821
+ context "and all supported values are provided as Chef::Config entries" do
822
+ before do
823
+ # Set everything to easily identifiable and obviously fake values
824
+ # to verify that Chef::Config is being sourced instead of knife.config
825
+ Chef::Config[:knife][:max_wait] = 9999
826
+ Chef::Config[:knife][:winrm_user] = "winbob"
827
+ Chef::Config[:knife][:winrm_port] = 9999
828
+ Chef::Config[:knife][:ca_trust_file] = "trust.me"
829
+ Chef::Config[:knife][:kerberos_realm] = "realm"
830
+ Chef::Config[:knife][:kerberos_service] = "service"
831
+ Chef::Config[:knife][:winrm_auth_method] = "kerberos" # default is negotiate
832
+ Chef::Config[:knife][:winrm_basic_auth_only] = true
833
+ Chef::Config[:knife][:winrm_no_verify_cert] = true
834
+ Chef::Config[:knife][:session_timeout] = 9999
835
+ Chef::Config[:knife][:winrm_ssl] = true
836
+ Chef::Config[:knife][:winrm_ssl_peer_fingerprint] = "ABCDEF"
837
+ end
838
+
839
+ context "and unsupported Chef::Config options are given in Chef::Config, not in CLI" do
840
+ before do
841
+ Chef::Config[:knife][:connection_password] = "blah"
842
+ Chef::Config[:knife][:winrm_password] = "blah"
843
+ end
844
+ it "does not include the corresponding option in the connection options" do
845
+ expect(knife.connection_opts.key?(:password)).to eq false
846
+ end
847
+ end
848
+
849
+ context "and no CLI options have been given" do
850
+ before do
851
+ knife.config = {}
852
+ end
853
+ let(:expected_result) do
854
+ {
855
+ logger: Chef::Log, # not configurable
856
+ ca_trust_file: "trust.me",
857
+ max_wait_until_ready: 9999,
858
+ operation_timeout: 9999,
859
+ ssl_peer_fingerprint: "ABCDEF",
860
+ winrm_transport: "kerberos",
861
+ winrm_basic_auth_only: true,
862
+ user: "winbob",
863
+ port: 9999,
864
+ self_signed: true,
865
+ ssl: true,
866
+ kerberos_realm: "realm",
867
+ kerberos_service: "service",
868
+ }
869
+ end
870
+
871
+ it "generates a config hash using the Chef::Config values" do
872
+ expect(knife.connection_opts).to match expected_result
873
+ end
874
+
875
+ end
876
+
877
+ context "and some CLI options have been given" do
878
+ let(:expected_result) do
879
+ {
880
+ logger: Chef::Log, # not configurable
881
+ ca_trust_file: "no trust",
882
+ max_wait_until_ready: 9999,
883
+ operation_timeout: 60,
884
+ ssl_peer_fingerprint: "ABCDEF",
885
+ winrm_transport: "kerberos",
886
+ winrm_basic_auth_only: true,
887
+ user: "microsoftbob",
888
+ port: 12,
889
+ self_signed: true,
890
+ ssl: true,
891
+ kerberos_realm: "realm",
892
+ kerberos_service: "service",
893
+ password: "lobster",
894
+ }
895
+ end
896
+
897
+ before do
898
+ knife.config[:ca_trust_file] = "no trust"
899
+ knife.config[:connection_user] = "microsoftbob"
900
+ knife.config[:connection_port] = 12
901
+ knife.config[:winrm_port] = "13" # indirectly verify we're not looking for the wrong CLI flag
902
+ knife.config[:connection_password] = "lobster"
903
+ end
904
+
905
+ it "generates a config hash using the CLI options when available and falling back to Chef::Config values" do
906
+ expect(knife.connection_opts).to match expected_result
907
+ end
908
+ end
909
+
910
+ context "and all CLI options have been given" do
911
+ before do
912
+ # We'll force kerberos vi knife.config because it
913
+ # causes additional options to populate - make sure
914
+ # Chef::Config is different so we can be sure that we didn't
915
+ # pull in the Chef::Config value
916
+ Chef::Config[:knife][:winrm_auth_method] = "negotiate"
917
+ knife.config[:connection_password] = "blue"
918
+ knife.config[:max_wait] = 1000
919
+ knife.config[:connection_user] = "clippy"
920
+ knife.config[:connection_port] = 1000
921
+ knife.config[:winrm_port] = 1001 # We should not see this value get used
922
+
923
+ knife.config[:ca_trust_file] = "trust.the.internet"
924
+ knife.config[:kerberos_realm] = "otherrealm"
925
+ knife.config[:kerberos_service] = "otherservice"
926
+ knife.config[:winrm_auth_method] = "kerberos" # default is negotiate
927
+ knife.config[:winrm_basic_auth_only] = false
928
+ knife.config[:winrm_no_verify_cert] = false
929
+ knife.config[:session_timeout] = 1000
930
+ knife.config[:winrm_ssl] = false
931
+ knife.config[:winrm_ssl_peer_fingerprint] = "FEDCBA"
932
+ end
933
+ let(:expected_result) do
934
+ {
935
+ logger: Chef::Log, # not configurable
936
+ ca_trust_file: "trust.the.internet",
937
+ max_wait_until_ready: 1000,
938
+ operation_timeout: 1000,
939
+ ssl_peer_fingerprint: "FEDCBA",
940
+ winrm_transport: "kerberos",
941
+ winrm_basic_auth_only: false,
942
+ user: "clippy",
943
+ port: 1000,
944
+ self_signed: false,
945
+ ssl: false,
946
+ kerberos_realm: "otherrealm",
947
+ kerberos_service: "otherservice",
948
+ password: "blue",
949
+ }
950
+ end
951
+ it "generates a config hash using the CLI options and pulling nothing from Chef::Config" do
952
+ expect(knife.connection_opts).to match expected_result
953
+ end
954
+ end
955
+ end # with underlying Chef::Config values
956
+
957
+ context "and no values are provided from Chef::Config or CLI" do
958
+ before do
959
+ # We will use knife's actual config since these tests
960
+ # have assumptions based on CLI default values
961
+ knife.merge_configs
962
+ end
963
+ let(:expected_result) do
964
+ {
965
+ logger: Chef::Log,
966
+ operation_timeout: 60,
967
+ self_signed: false,
968
+ ssl: false,
969
+ ssl_peer_fingerprint: nil,
970
+ winrm_basic_auth_only: false,
971
+ winrm_transport: "negotiate",
972
+ }
973
+ end
974
+ it "populates appropriate defaults" do
975
+ expect(knife.connection_opts).to match expected_result
976
+ end
977
+ end
978
+ end # winrm
979
+
980
+ context "when protocol is ssh" do
981
+ let(:connection_protocol) { "ssh" }
982
+ # context "and neither CLI nor Chef::Config config entries have been provided"
983
+ # end
984
+ context "and all supported values are provided as Chef::Config entries" do
985
+ before do
986
+ # Set everything to easily identifiable and obviously fake values
987
+ # to verify that Chef::Config is being sourced instead of knife.config
988
+ Chef::Config[:knife][:max_wait] = 9999
989
+ Chef::Config[:knife][:session_timeout] = 9999
990
+ Chef::Config[:knife][:ssh_user] = "sshbob"
991
+ Chef::Config[:knife][:ssh_port] = 9999
992
+ Chef::Config[:knife][:host_key_verify] = false
993
+ Chef::Config[:knife][:ssh_gateway_identity] = "/gateway.pem"
994
+ Chef::Config[:knife][:ssh_gateway] = "admin@mygateway.local:1234"
995
+ Chef::Config[:knife][:ssh_identity_file] = "/identity.pem"
996
+ Chef::Config[:knife][:use_sudo_password] = false # We have no password.
997
+ end
998
+
999
+ context "and no CLI options have been given" do
1000
+ before do
1001
+ knife.config = {}
1002
+ end
1003
+ let(:expected_result) do
1004
+ {
1005
+ logger: Chef::Log, # not configurable
1006
+ max_wait_until_ready: 9999,
1007
+ connection_timeout: 9999,
1008
+ user: "sshbob",
1009
+ bastion_host: "mygateway.local",
1010
+ bastion_port: 1234,
1011
+ bastion_user: "admin",
1012
+ forward_agent: false,
1013
+ keys_only: true,
1014
+ key_files: ["/identity.pem", "/gateway.pem"],
1015
+ sudo: false,
1016
+ verify_host_key: false,
1017
+ port: 9999,
1018
+ non_interactive: true,
1019
+ }
1020
+ end
1021
+
1022
+ it "generates a correct config hash using the Chef::Config values" do
1023
+ expect(knife.connection_opts).to match expected_result
1024
+ end
1025
+ end
1026
+
1027
+ context "and unsupported Chef::Config options are given in Chef::Config, not in CLI" do
1028
+ before do
1029
+ Chef::Config[:knife][:password] = "blah"
1030
+ Chef::Config[:knife][:ssh_password] = "blah"
1031
+ Chef::Config[:knife][:preserve_home] = true
1032
+ Chef::Config[:knife][:use_sudo] = true
1033
+ Chef::Config[:knife][:ssh_forward_agent] = "blah"
1034
+ end
1035
+ it "does not include the corresponding option in the connection options" do
1036
+ expect(knife.connection_opts.key?(:password)).to eq false
1037
+ expect(knife.connection_opts.key?(:ssh_forward_agent)).to eq false
1038
+ expect(knife.connection_opts.key?(:use_sudo)).to eq false
1039
+ expect(knife.connection_opts.key?(:preserve_home)).to eq false
1040
+ end
1041
+ end
1042
+
1043
+ context "and some CLI options have been given" do
1044
+ before do
1045
+ knife.config[:connection_user] = "sshalice"
1046
+ knife.config[:connection_port] = 12
1047
+ knife.config[:ssh_port] = "13" # canary to indirectly verify we're not looking for the wrong CLI flag
1048
+ knife.config[:connection_password] = "feta cheese"
1049
+ knife.config[:max_wait] = 150
1050
+ knife.config[:session_timeout] = 120
1051
+ knife.config[:use_sudo] = true
1052
+ knife.config[:use_sudo_pasword] = true
1053
+ knife.config[:ssh_forward_agent] = true
1054
+ end
1055
+
1056
+ let(:expected_result) do
1057
+ {
1058
+ logger: Chef::Log, # not configurable
1059
+ max_wait_until_ready: 150, # cli
1060
+ connection_timeout: 120, # cli
1061
+ user: "sshalice", # cli
1062
+ password: "feta cheese", # cli
1063
+ bastion_host: "mygateway.local", # Config
1064
+ bastion_port: 1234, # Config
1065
+ bastion_user: "admin", # Config
1066
+ forward_agent: true, # cli
1067
+ keys_only: false, # implied false from config password present
1068
+ key_files: ["/identity.pem", "/gateway.pem"], # Config
1069
+ sudo: true, # ccli
1070
+ verify_host_key: false, # Config
1071
+ port: 12, # cli
1072
+ non_interactive: true,
1073
+ }
1074
+ end
1075
+
1076
+ it "generates a config hash using the CLI options when available and falling back to Chef::Config values" do
1077
+ expect(knife.connection_opts).to match expected_result
1078
+ end
1079
+ end
1080
+
1081
+ context "and all CLI options have been given" do
1082
+ before do
1083
+ knife.config[:max_wait] = 150
1084
+ knife.config[:session_timeout] = 120
1085
+ knife.config[:connection_user] = "sshroot"
1086
+ knife.config[:connection_port] = 1000
1087
+ knife.config[:connection_password] = "blah"
1088
+ knife.config[:forward_agent] = true
1089
+ knife.config[:use_sudo] = true
1090
+ knife.config[:use_sudo_password] = true
1091
+ knife.config[:preserve_home] = true
1092
+ knife.config[:use_sudo_pasword] = true
1093
+ knife.config[:ssh_forward_agent] = true
1094
+ knife.config[:ssh_verify_host_key] = true
1095
+ knife.config[:ssh_gateway_identity] = "/gateway-identity.pem"
1096
+ knife.config[:ssh_gateway] = "me@example.com:10"
1097
+ knife.config[:ssh_identity_file] = "/my-identity.pem"
1098
+
1099
+ # We'll set these as canaries - if one of these values shows up
1100
+ # in a failed test, then the behavior of not pulling from these keys
1101
+ # out of knife.config is broken:
1102
+ knife.config[:ssh_user] = "do not use"
1103
+ knife.config[:ssh_port] = 1001
1104
+ end
1105
+ let(:expected_result) do
1106
+ {
1107
+ logger: Chef::Log, # not configurable
1108
+ max_wait_until_ready: 150,
1109
+ connection_timeout: 120,
1110
+ user: "sshroot",
1111
+ password: "blah",
1112
+ port: 1000,
1113
+ bastion_host: "example.com",
1114
+ bastion_port: 10,
1115
+ bastion_user: "me",
1116
+ forward_agent: true,
1117
+ keys_only: false,
1118
+ key_files: ["/my-identity.pem", "/gateway-identity.pem"],
1119
+ sudo: true,
1120
+ sudo_options: "-H",
1121
+ sudo_password: "blah",
1122
+ verify_host_key: true,
1123
+ non_interactive: true,
1124
+ }
1125
+ end
1126
+ it "generates a config hash using the CLI options and pulling nothing from Chef::Config" do
1127
+ expect(knife.connection_opts).to match expected_result
1128
+ end
1129
+ end
1130
+ end
1131
+ context "and no values are provided from Chef::Config or CLI" do
1132
+ before do
1133
+ # We will use knife's actual config since these tests
1134
+ # have assumptions based on CLI default values
1135
+ knife.merge_configs
1136
+ end
1137
+
1138
+ let(:expected_result) do
1139
+ {
1140
+ forward_agent: false,
1141
+ key_files: [],
1142
+ logger: Chef::Log,
1143
+ keys_only: false,
1144
+ sudo: false,
1145
+ verify_host_key: "always",
1146
+ non_interactive: true,
1147
+ connection_timeout: 60,
1148
+ }
1149
+ end
1150
+ it "populates appropriate defaults" do
1151
+ expect(knife.connection_opts).to match expected_result
1152
+ end
1153
+ end
1154
+
1155
+ end # ssh
1156
+ end # functional tests
1157
+
1158
+ end # connection_opts
1159
+
1160
+ context "#base_opts" do
1161
+ let(:connection_protocol) { nil }
1162
+
1163
+ before do
1164
+ allow(knife).to receive(:connection_protocol).and_return connection_protocol
1165
+ end
1166
+
1167
+ context "when determining knife config keys for user and port" do
1168
+ let(:connection_protocol) { "fake" }
1169
+ it "uses the protocol name to resolve the knife config keys" do
1170
+ allow(knife).to receive(:config_value).with(:max_wait)
1171
+
1172
+ expect(knife).to receive(:config_value).with(:connection_port, :fake_port)
1173
+ expect(knife).to receive(:config_value).with(:connection_user, :fake_user)
1174
+ knife.base_opts
644
1175
  end
1176
+ end
645
1177
 
646
- context "when bootstrap version not given" do
647
- it "passes the validation" do
648
- knife.config[:bootstrap_version] = nil
649
- expect { knife.validate_bootstrap_version_options! }.to_not raise_error
1178
+ context "for all protocols" do
1179
+ context "when password is provided" do
1180
+ before do
1181
+ knife.config[:connection_port] = 250
1182
+ knife.config[:connection_user] = "test"
1183
+ knife.config[:connection_password] = "opscode"
1184
+ end
1185
+
1186
+ let(:expected_opts) do
1187
+ {
1188
+ port: 250,
1189
+ user: "test",
1190
+ logger: Chef::Log,
1191
+ password: "opscode",
1192
+ }
650
1193
  end
1194
+ it "generates the correct options" do
1195
+ expect(knife.base_opts).to eq expected_opts
1196
+ end
1197
+
651
1198
  end
652
1199
 
653
- context "when bootstrap version is given" do
654
- it "passes the validation for chef 14.12.0 bootstrap version" do
655
- knife.config[:bootstrap_version] = "14.12.0"
656
- expect { knife.validate_bootstrap_version_options! }.to_not raise_error
1200
+ context "when password is not provided" do
1201
+ before do
1202
+ knife.config[:connection_port] = 250
1203
+ knife.config[:connection_user] = "test"
657
1204
  end
658
1205
 
659
- it "passes the validation for chef 13.12.0 bootstrap version" do
660
- knife.config[:bootstrap_version] = "13.12.0"
661
- expect { knife.validate_bootstrap_version_options! }.to_not raise_error
1206
+ let(:expected_opts) do
1207
+ {
1208
+ port: 250,
1209
+ user: "test",
1210
+ logger: Chef::Log,
1211
+ }
662
1212
  end
1213
+ it "generates the correct options" do
1214
+ expect(knife.base_opts).to eq expected_opts
1215
+ end
1216
+ end
1217
+ end
1218
+ end
1219
+
1220
+ context "#host_verify_opts" do
1221
+ let(:connection_protocol) { nil }
1222
+ before do
1223
+ allow(knife).to receive(:connection_protocol).and_return connection_protocol
1224
+ end
663
1225
 
664
- it "raise an error for latest bootstrap version" do
665
- knife.config[:bootstrap_version] = "latest"
666
- expect { knife.validate_bootstrap_version_options! }.to raise_error(SystemExit)
1226
+ context "for winrm" do
1227
+ let(:connection_protocol) { "winrm" }
1228
+ it "returns the expected configuration" do
1229
+ knife.config[:winrm_no_verify_cert] = true
1230
+ expect(knife.host_verify_opts).to eq( { self_signed: true } )
1231
+ end
1232
+ it "provides a correct default when no option given" do
1233
+ expect(knife.host_verify_opts).to eq( { self_signed: false } )
1234
+ end
1235
+ end
1236
+
1237
+ context "for ssh" do
1238
+ let(:connection_protocol) { "ssh" }
1239
+ it "returns the expected configuration" do
1240
+ knife.config[:ssh_verify_host_key] = false
1241
+ expect(knife.host_verify_opts).to eq( { verify_host_key: false } )
1242
+ end
1243
+ it "provides a correct default when no option given" do
1244
+ expect(knife.host_verify_opts).to eq( { verify_host_key: "always" } )
1245
+ end
1246
+ end
1247
+ end
1248
+
1249
+ # TODO - test keys_only, password, config source behavior
1250
+ context "#ssh_identity_opts" do
1251
+ let(:connection_protocol) { nil }
1252
+ before do
1253
+ allow(knife).to receive(:connection_protocol).and_return connection_protocol
1254
+ end
1255
+
1256
+ context "for winrm" do
1257
+ let(:connection_protocol) { "winrm" }
1258
+ it "returns an empty hash" do
1259
+ expect(knife.ssh_identity_opts).to eq({})
1260
+ end
1261
+ end
1262
+
1263
+ context "for ssh" do
1264
+ let(:connection_protocol) { "ssh" }
1265
+ context "when an identity file is specified" do
1266
+ before do
1267
+ knife.config[:ssh_identity_file] = "/identity.pem"
1268
+ end
1269
+ it "generates the expected configuration" do
1270
+ expect(knife.ssh_identity_opts).to eq({
1271
+ key_files: [ "/identity.pem" ],
1272
+ keys_only: true,
1273
+ })
1274
+ end
1275
+ context "and a password is also specified" do
1276
+ before do
1277
+ knife.config[:connection_password] = "blah"
1278
+ end
1279
+ it "generates the expected configuration (key, keys_only false)" do
1280
+ expect(knife.ssh_identity_opts).to eq({
1281
+ key_files: [ "/identity.pem" ],
1282
+ keys_only: false,
1283
+ })
1284
+ end
667
1285
  end
668
1286
 
669
- it "raise an error for chef 15.0+ bootstrap version" do
670
- knife.config[:bootstrap_version] = "15.0.1"
671
- expect { knife.validate_bootstrap_version_options! }.to raise_error(SystemExit)
1287
+ context "and a gateway is not specified" do
1288
+ context "but a gateway identity file is specified" do
1289
+ it "does not include the gateway identity file in keys" do
1290
+ expect(knife.ssh_identity_opts).to eq({
1291
+ key_files: ["/identity.pem"],
1292
+ keys_only: true,
1293
+ })
1294
+ end
1295
+
1296
+ end
1297
+
672
1298
  end
673
1299
 
674
- it "raise an error for chef 15.1+ bootstrap version" do
675
- knife.config[:bootstrap_version] = "15.1"
676
- expect { knife.validate_bootstrap_version_options! }.to raise_error(SystemExit)
1300
+ context "and a gatway is specified" do
1301
+ before do
1302
+ knife.config[:ssh_gateway] = "example.com"
1303
+ end
1304
+ context "and a gateway identity file is not specified" do
1305
+ it "config includes only identity file and not gateway identity" do
1306
+ expect(knife.ssh_identity_opts).to eq({
1307
+ key_files: [ "/identity.pem" ],
1308
+ keys_only: true,
1309
+ })
1310
+ end
1311
+ end
1312
+
1313
+ context "and a gateway identity file is also specified" do
1314
+ before do
1315
+ knife.config[:ssh_gateway_identity] = "/gateway.pem"
1316
+ end
1317
+
1318
+ it "generates the expected configuration (both keys, keys_only true)" do
1319
+ expect(knife.ssh_identity_opts).to eq({
1320
+ key_files: [ "/identity.pem", "/gateway.pem" ],
1321
+ keys_only: true,
1322
+ })
1323
+ end
1324
+ end
677
1325
  end
678
1326
  end
679
1327
 
680
- context "when prerelease option is given" do
681
- it "raise an error" do
682
- knife.config[:prerelease] = true
683
- expect { knife.validate_bootstrap_version_options! }.to raise_error(SystemExit)
1328
+ context "when no identity file is specified" do
1329
+ it "generates the expected configuration (no keys, keys_only false)" do
1330
+ expect(knife.ssh_identity_opts).to eq( {
1331
+ key_files: [ ],
1332
+ keys_only: false,
1333
+ })
1334
+ end
1335
+ context "and a gateway with gateway identity file is specified" do
1336
+ before do
1337
+ knife.config[:ssh_gateway] = "host"
1338
+ knife.config[:ssh_gateway_identity] = "/gateway.pem"
1339
+ end
1340
+
1341
+ it "generates the expected configuration (gateway key, keys_only false)" do
1342
+ expect(knife.ssh_identity_opts).to eq({
1343
+ key_files: [ "/gateway.pem" ],
1344
+ keys_only: false,
1345
+ })
1346
+ end
684
1347
  end
685
1348
  end
686
1349
  end
1350
+ end
687
1351
 
688
- describe "chef-15+" do
689
- before do
690
- stub_const("Chef::VERSION", "15.0")
1352
+ context "#gateway_opts" do
1353
+ let(:connection_protocol) { nil }
1354
+ before do
1355
+ allow(knife).to receive(:connection_protocol).and_return connection_protocol
1356
+ end
1357
+
1358
+ context "for winrm" do
1359
+ let(:connection_protocol) { "winrm" }
1360
+ it "returns an empty hash" do
1361
+ expect(knife.gateway_opts).to eq({})
691
1362
  end
1363
+ end
692
1364
 
693
- context "when bootstrap version not given" do
694
- it "passes the validation" do
695
- knife.config[:bootstrap_version] = nil
696
- expect { knife.validate_bootstrap_version_options! }.to_not raise_error
1365
+ context "for ssh" do
1366
+ let(:connection_protocol) { "ssh" }
1367
+ context "and ssh_gateway with hostname, user and port provided" do
1368
+ before do
1369
+ knife.config[:ssh_gateway] = "testuser@gateway:9021"
1370
+ end
1371
+ it "returns a proper bastion host config subset" do
1372
+ expect(knife.gateway_opts).to eq({
1373
+ bastion_user: "testuser",
1374
+ bastion_host: "gateway",
1375
+ bastion_port: 9021,
1376
+ })
1377
+ end
1378
+ end
1379
+ context "and ssh_gateway with only hostname is given" do
1380
+ before do
1381
+ knife.config[:ssh_gateway] = "gateway"
1382
+ end
1383
+ it "returns a proper bastion host config subset" do
1384
+ expect(knife.gateway_opts).to eq({
1385
+ bastion_user: nil,
1386
+ bastion_host: "gateway",
1387
+ bastion_port: nil,
1388
+ })
697
1389
  end
698
1390
  end
1391
+ context "and ssh_gateway with hostname and user is is given" do
1392
+ before do
1393
+ knife.config[:ssh_gateway] = "testuser@gateway"
1394
+ end
1395
+ it "returns a proper bastion host config subset" do
1396
+ expect(knife.gateway_opts).to eq({
1397
+ bastion_user: "testuser",
1398
+ bastion_host: "gateway",
1399
+ bastion_port: nil,
1400
+ })
1401
+ end
1402
+ end
1403
+
1404
+ context "and ssh_gateway with hostname and port is is given" do
1405
+ before do
1406
+ knife.config[:ssh_gateway] = "gateway:11234"
1407
+ end
1408
+ it "returns a proper bastion host config subset" do
1409
+ expect(knife.gateway_opts).to eq({
1410
+ bastion_user: nil,
1411
+ bastion_host: "gateway",
1412
+ bastion_port: 11234,
1413
+ })
1414
+ end
1415
+ end
1416
+
1417
+ context "and ssh_gateway is not provided" do
1418
+ it "returns an empty hash" do
1419
+ expect(knife.gateway_opts).to eq({})
1420
+ end
1421
+ end
1422
+ end
1423
+ end
1424
+
1425
+ context "#sudo_opts" do
1426
+ let(:connection_protocol) { nil }
1427
+ before do
1428
+ allow(knife).to receive(:connection_protocol).and_return connection_protocol
1429
+ end
1430
+
1431
+ context "for winrm" do
1432
+ let(:connection_protocol) { "winrm" }
1433
+ it "returns an empty hash" do
1434
+ expect(knife.sudo_opts).to eq({})
1435
+ end
1436
+ end
1437
+
1438
+ context "for ssh" do
1439
+ let(:connection_protocol) { "ssh" }
1440
+ context "when use_sudo is set" do
1441
+ before do
1442
+ knife.config[:use_sudo] = true
1443
+ end
1444
+
1445
+ it "returns a config that enables sudo" do
1446
+ expect(knife.sudo_opts).to eq( { sudo: true } )
1447
+ end
1448
+
1449
+ context "when use_sudo_password is also set" do
1450
+ before do
1451
+ knife.config[:use_sudo_password] = true
1452
+ knife.config[:connection_password] = "opscode"
1453
+ end
1454
+ it "includes :connection_password value in a sudo-enabled configuration" do
1455
+ expect(knife.sudo_opts).to eq({
1456
+ sudo: true,
1457
+ sudo_password: "opscode",
1458
+ })
1459
+ end
1460
+ end
699
1461
 
700
- context "when bootstrap version is given" do
701
- it "passes the validation for chef 14.12.0 bootstrap version" do
702
- knife.config[:bootstrap_version] = "14.12.0"
703
- expect { knife.validate_bootstrap_version_options! }.to_not raise_error
1462
+ context "when preserve_home is set" do
1463
+ before do
1464
+ knife.config[:preserve_home] = true
1465
+ end
1466
+ it "enables sudo with sudo_option to preserve home" do
1467
+ expect(knife.sudo_opts).to eq({
1468
+ sudo_options: "-H",
1469
+ sudo: true,
1470
+ })
1471
+ end
704
1472
  end
1473
+ end
705
1474
 
706
- it "passes the validation for chef 15.2 bootstrap version" do
707
- knife.config[:bootstrap_version] = "15.2"
708
- expect { knife.validate_bootstrap_version_options! }.to_not raise_error
1475
+ context "when use_sudo is not set" do
1476
+ before do
1477
+ knife.config[:use_sudo_password] = true
1478
+ knife.config[:preserve_home] = true
709
1479
  end
1480
+ it "returns configuration for sudo off, ignoring other related options" do
1481
+ expect(knife.sudo_opts).to eq( { sudo: false } )
1482
+ end
1483
+ end
1484
+ end
1485
+ end
1486
+
1487
+ context "#ssh_opts" do
1488
+ let(:connection_protocol) { nil }
1489
+ before do
1490
+ allow(knife).to receive(:connection_protocol).and_return connection_protocol
1491
+ end
710
1492
 
711
- it "passes the validation for chef 16.2 bootstrap version" do
712
- knife.config[:bootstrap_version] = "16.2"
713
- expect { knife.validate_bootstrap_version_options! }.to_not raise_error
1493
+ context "for ssh" do
1494
+ let(:connection_protocol) { "ssh" }
1495
+ context "when ssh_forward_agent has a value" do
1496
+ before do
1497
+ knife.config[:ssh_forward_agent] = true
1498
+ end
1499
+ it "returns a configuration hash with forward_agent set to true. non-interactive is always true" do
1500
+ expect(knife.ssh_opts).to eq({ forward_agent: true, non_interactive: true, connection_timeout: 60 })
1501
+ end
1502
+ end
1503
+ context "when ssh_forward_agent is not set" do
1504
+ it "returns a configuration hash with forward_agent set to false. non-interactive is always true" do
1505
+ expect(knife.ssh_opts).to eq({ forward_agent: false, non_interactive: true, connection_timeout: 60 })
1506
+ end
1507
+ end
1508
+ context "when session_timeout has a value" do
1509
+ before do
1510
+ knife.config[:session_timeout] = 120
1511
+ end
1512
+ it "returns a configuration hash with connection_timeout value." do
1513
+ expect(knife.ssh_opts).to eq({ forward_agent: false, non_interactive: true, connection_timeout: 120 })
714
1514
  end
715
1515
  end
716
1516
 
717
- context "when prerelease option is given" do
718
- it "passes the validation" do
719
- knife.config[:prerelease] = true
720
- expect { knife.validate_bootstrap_version_options! }.to_not raise_error
1517
+ context "when session_timeout is not set" do
1518
+ it "returns a configuration hash with connection_timeout default value." do
1519
+ expect(knife.ssh_opts).to eq({ forward_agent: false, non_interactive: true, connection_timeout: 60 })
721
1520
  end
722
1521
  end
723
1522
  end
1523
+
1524
+ context "for winrm" do
1525
+ let(:connection_protocol) { "winrm" }
1526
+ it "returns an empty has because ssh is not winrm" do
1527
+ expect(knife.ssh_opts).to eq({})
1528
+ end
1529
+ end
1530
+
724
1531
  end
725
1532
 
726
- describe "when configuring the underlying knife ssh command" do
727
- context "from the command line" do
728
- let(:knife_ssh) do
729
- knife.name_args = ["foo.example.com"]
730
- knife.config[:ssh_user] = "rooty"
731
- knife.config[:ssh_port] = "4001"
732
- knife.config[:ssh_password] = "open_sesame"
733
- Chef::Config[:knife][:ssh_user] = nil
734
- Chef::Config[:knife][:ssh_port] = nil
735
- knife.config[:forward_agent] = true
736
- knife.config[:ssh_identity_file] = "~/.ssh/me.rsa"
737
- allow(knife).to receive(:render_template).and_return("")
738
- knife.knife_ssh
1533
+ context "#winrm_opts" do
1534
+ let(:connection_protocol) { nil }
1535
+ before do
1536
+ allow(knife).to receive(:connection_protocol).and_return connection_protocol
1537
+ end
1538
+
1539
+ context "for winrm" do
1540
+ let(:connection_protocol) { "winrm" }
1541
+ let(:expected) do
1542
+ {
1543
+ winrm_transport: "negotiate",
1544
+ winrm_basic_auth_only: false,
1545
+ ssl: false,
1546
+ ssl_peer_fingerprint: nil,
1547
+ operation_timeout: 60,
1548
+ } end
1549
+
1550
+ it "generates a correct configuration hash with expected defaults" do
1551
+ expect(knife.winrm_opts).to eq expected
739
1552
  end
740
1553
 
741
- it "configures the hostname" do
742
- expect(knife_ssh.name_args.first).to eq("foo.example.com")
1554
+ context "with ssl_peer_fingerprint" do
1555
+ let(:ssl_peer_fingerprint_expected) do
1556
+ expected.merge({ ssl_peer_fingerprint: "ABCD" })
1557
+ end
1558
+
1559
+ before do
1560
+ knife.config[:winrm_ssl_peer_fingerprint] = "ABCD"
1561
+ end
1562
+
1563
+ it "generates a correct options hash with ssl_peer_fingerprint from the config provided" do
1564
+ expect(knife.winrm_opts).to eq ssl_peer_fingerprint_expected
1565
+ end
743
1566
  end
744
1567
 
745
- it "configures the ssh user" do
746
- expect(knife_ssh.config[:ssh_user]).to eq("rooty")
1568
+ context "with winrm_ssl" do
1569
+ let(:ssl_expected) do
1570
+ expected.merge({ ssl: true })
1571
+ end
1572
+ before do
1573
+ knife.config[:winrm_ssl] = true
1574
+ end
1575
+
1576
+ it "generates a correct options hash with ssl from the config provided" do
1577
+ expect(knife.winrm_opts).to eq ssl_expected
1578
+ end
747
1579
  end
748
1580
 
749
- it "configures the ssh password" do
750
- expect(knife_ssh.config[:ssh_password]).to eq("open_sesame")
1581
+ context "with winrm_auth_method" do
1582
+ let(:winrm_auth_method_expected) do
1583
+ expected.merge({ winrm_transport: "freeaccess" })
1584
+ end
1585
+
1586
+ before do
1587
+ knife.config[:winrm_auth_method] = "freeaccess"
1588
+ end
1589
+
1590
+ it "generates a correct options hash with winrm_transport from the config provided" do
1591
+ expect(knife.winrm_opts).to eq winrm_auth_method_expected
1592
+ end
751
1593
  end
752
1594
 
753
- it "configures the ssh port" do
754
- expect(knife_ssh.config[:ssh_port]).to eq("4001")
1595
+ context "with ca_trust_file" do
1596
+ let(:ca_trust_expected) do
1597
+ expected.merge({ ca_trust_file: "/trust.me" })
1598
+ end
1599
+ before do
1600
+ knife.config[:ca_trust_file] = "/trust.me"
1601
+ end
1602
+
1603
+ it "generates a correct options hash with ca_trust_file from the config provided" do
1604
+ expect(knife.winrm_opts).to eq ca_trust_expected
1605
+ end
755
1606
  end
756
1607
 
757
- it "configures the ssh agent forwarding" do
758
- expect(knife_ssh.config[:forward_agent]).to eq(true)
1608
+ context "with kerberos auth" do
1609
+ let(:kerberos_expected) do
1610
+ expected.merge({
1611
+ kerberos_service: "testsvc",
1612
+ kerberos_realm: "TESTREALM",
1613
+ winrm_transport: "kerberos",
1614
+ })
1615
+ end
1616
+
1617
+ before do
1618
+ knife.config[:winrm_auth_method] = "kerberos"
1619
+ knife.config[:kerberos_service] = "testsvc"
1620
+ knife.config[:kerberos_realm] = "TESTREALM"
1621
+ end
1622
+
1623
+ it "generates a correct options hash containing kerberos auth configuration from the config provided" do
1624
+ expect(knife.winrm_opts).to eq kerberos_expected
1625
+ end
759
1626
  end
760
1627
 
761
- it "configures the ssh identity file" do
762
- expect(knife_ssh.config[:ssh_identity_file]).to eq("~/.ssh/me.rsa")
1628
+ context "with winrm_basic_auth_only" do
1629
+ before do
1630
+ knife.config[:winrm_basic_auth_only] = true
1631
+ end
1632
+ let(:basic_auth_expected) do
1633
+ expected.merge( { winrm_basic_auth_only: true } )
1634
+ end
1635
+ it "generates a correct options hash containing winrm_basic_auth_only from the config provided" do
1636
+ expect(knife.winrm_opts).to eq basic_auth_expected
1637
+ end
763
1638
  end
764
1639
  end
765
1640
 
766
- context "validating use_sudo_password" do
767
- before do
768
- knife.config[:ssh_password] = "password"
769
- allow(knife).to receive(:render_template).and_return("")
1641
+ context "for ssh" do
1642
+ let(:connection_protocol) { "ssh" }
1643
+ it "returns an empty hash because ssh is not winrm" do
1644
+ expect(knife.winrm_opts).to eq({})
770
1645
  end
1646
+ end
1647
+ end
1648
+ describe "#run" do
1649
+ before do
1650
+ allow(knife.client_builder).to receive(:client_path).and_return("/key.pem")
1651
+ end
771
1652
 
772
- it "use_sudo_password contains description and long params for help" do
773
- expect(knife.options).to(have_key(:use_sudo_password)) \
774
- && expect(knife.options[:use_sudo_password][:description].to_s).not_to(eq(""))\
775
- && expect(knife.options[:use_sudo_password][:long].to_s).not_to(eq(""))
1653
+ it "performs the steps we expect to run a bootstrap" do
1654
+ expect(knife).to receive(:check_license)
1655
+ expect(knife).to receive(:verify_deprecated_flags!).ordered
1656
+ expect(knife).to receive(:validate_name_args!).ordered
1657
+ expect(knife).to receive(:validate_protocol!).ordered
1658
+ expect(knife).to receive(:validate_first_boot_attributes!).ordered
1659
+ expect(knife).to receive(:validate_winrm_transport_opts!).ordered
1660
+ expect(knife).to receive(:validate_policy_options!).ordered
1661
+ expect(knife).to receive(:winrm_warn_no_ssl_verification).ordered
1662
+ expect(knife).to receive(:warn_on_short_session_timeout).ordered
1663
+ expect(knife).to receive(:register_client).ordered
1664
+ expect(knife).to receive(:connect!).ordered
1665
+ expect(knife).to receive(:render_template).and_return "content"
1666
+ expect(knife).to receive(:upload_bootstrap).with("content").and_return "/remote/path.sh"
1667
+ expect(knife).to receive(:perform_bootstrap).with("/remote/path.sh")
1668
+ expect(connection).to receive(:del_file!) # Make sure cleanup happens
1669
+
1670
+ knife.run
1671
+
1672
+ # Post-run verify expected state changes (not many directly in #run)
1673
+ expect(knife.bootstrap_context.client_pem).to eq "/key.pem"
1674
+ expect($stdout.sync).to eq true
1675
+ end
1676
+ end
1677
+
1678
+ describe "#verify_deprecated_flags!" do
1679
+ before do
1680
+ Chef::Config[:silence_deprecation_warnings] = false
1681
+ end
1682
+
1683
+ context "when a deprecated CLI flag is given on the CLI" do
1684
+ let(:bootstrap_cli_options) { %w{--ssh-user sshuser} }
1685
+ it "maps the key value to the new key and points the human to the new flag" do
1686
+ expect(knife.ui).to receive(:warn).with(/You provided --ssh-user. This flag is deprecated. Please use '--connection-user USERNAME' instead./)
1687
+ knife.verify_deprecated_flags!
1688
+ expect(knife.config[:connection_user]).to eq "sshuser"
776
1689
  end
1690
+ end
777
1691
 
778
- it "uses the password from --ssh-password for sudo when --use-sudo-password is set" do
779
- knife.config[:use_sudo] = true
780
- knife.config[:use_sudo_password] = true
781
- expect(knife.ssh_command).to include("echo \'#{knife.config[:ssh_password]}\' | sudo -S")
1692
+ context "when a deprecated CLI flag is given on the CLI, along with its replacement" do
1693
+ let(:bootstrap_cli_options) { %w{--connection-user a --ssh-user b} }
1694
+
1695
+ it "informs the human that both are provided and exits" do
1696
+ expect(knife.ui).to receive(:error).with(/You provided both --connection-user and --ssh-user.*Please use.*/m)
1697
+ expect { knife.verify_deprecated_flags! }.to raise_error SystemExit
782
1698
  end
1699
+ end
783
1700
 
784
- it "should not honor --use-sudo-password when --use-sudo is not set" do
785
- knife.config[:use_sudo] = false
786
- knife.config[:use_sudo_password] = true
787
- expect(knife.ssh_command).not_to include("echo #{knife.config[:ssh_password]} | sudo -S")
1701
+ context "when a deprecated boolean CLI flag is given on the CLI, and its non-boolean replacement is used" do
1702
+ let(:bootstrap_cli_options) { %w{--prerelease} }
1703
+ it "correctly maps the old boolean value to the new value" do
1704
+ expect(knife.ui).to receive(:warn)
1705
+ knife.verify_deprecated_flags!
1706
+ expect(knife.config[:channel]).to eq "current"
788
1707
  end
789
1708
  end
1709
+ end
790
1710
 
791
- context "from the knife config file" do
792
- let(:knife_ssh) do
793
- knife.name_args = ["config.example.com"]
794
- Chef::Config[:knife][:ssh_user] = "curiosity"
795
- Chef::Config[:knife][:ssh_port] = "2430"
796
- Chef::Config[:knife][:forward_agent] = true
797
- Chef::Config[:knife][:ssh_identity_file] = "~/.ssh/you.rsa"
798
- Chef::Config[:knife][:ssh_gateway] = "towel.blinkenlights.nl"
799
- Chef::Config[:knife][:ssh_gateway_identity] = "~/.ssh/gateway.rsa"
800
- Chef::Config[:knife][:host_key_verify] = true
801
- allow(knife).to receive(:render_template).and_return("")
802
- knife.config = {}
803
- knife.merge_configs
804
- knife.knife_ssh
1711
+ describe "#register_client" do
1712
+ let(:vault_handler_mock) { double("ChefVaultHandler") }
1713
+ let(:client_builder_mock) { double("ClientBuilder") }
1714
+ let(:node_name) { nil }
1715
+ before do
1716
+ allow(knife).to receive(:chef_vault_handler).and_return vault_handler_mock
1717
+ allow(knife).to receive(:client_builder).and_return client_builder_mock
1718
+ knife.config[:chef_node_name] = node_name
1719
+ end
1720
+
1721
+ shared_examples_for "creating the client locally" do
1722
+ context "when a valid node name is present" do
1723
+ let(:node_name) { "test" }
1724
+ before do
1725
+ allow(client_builder_mock).to receive(:client).and_return "client"
1726
+ end
1727
+
1728
+ it "runs client_builder and vault_handler" do
1729
+ expect(client_builder_mock).to receive(:run)
1730
+ expect(vault_handler_mock).to receive(:run).with("client")
1731
+ knife.register_client
1732
+ end
805
1733
  end
806
1734
 
807
- it "configures the ssh user" do
808
- expect(knife_ssh.config[:ssh_user]).to eq("curiosity")
1735
+ context "when no valid node name is present" do
1736
+ let(:node_name) { nil }
1737
+ it "shows an error and exits" do
1738
+ expect(knife.ui).to receive(:error)
1739
+ expect { knife.register_client }.to raise_error(SystemExit)
1740
+ end
1741
+ end
1742
+ end
1743
+ context "when chef_vault_handler says we're using vault" do
1744
+ let(:vault_handler_mock) { double("ChefVaultHandler") }
1745
+ before do
1746
+ allow(vault_handler_mock).to receive(:doing_chef_vault?).and_return true
809
1747
  end
1748
+ it_behaves_like "creating the client locally"
1749
+ end
810
1750
 
811
- it "configures the ssh port" do
812
- expect(knife_ssh.config[:ssh_port]).to eq("2430")
1751
+ context "when an non-existant validation key is specified in chef config" do
1752
+ before do
1753
+ Chef::Config[:validation_key] = "/blah"
1754
+ allow(vault_handler_mock).to receive(:doing_chef_vault?).and_return false
1755
+ allow(File).to receive(:exist?).with(/\/blah/).and_return false
813
1756
  end
1757
+ it_behaves_like "creating the client locally"
1758
+ end
814
1759
 
815
- it "configures the ssh agent forwarding" do
816
- expect(knife_ssh.config[:forward_agent]).to eq(true)
1760
+ context "when a valid validation key is given and we're doing old-style client creation" do
1761
+ before do
1762
+ Chef::Config[:validation_key] = "/blah"
1763
+ allow(File).to receive(:exist?).with(/\/blah/).and_return true
1764
+ allow(vault_handler_mock).to receive(:doing_chef_vault?).and_return false
817
1765
  end
818
1766
 
819
- it "configures the ssh identity file" do
820
- expect(knife_ssh.config[:ssh_identity_file]).to eq("~/.ssh/you.rsa")
1767
+ it "shows a message" do
1768
+ expect(knife.ui).to receive(:info)
1769
+ knife.register_client
821
1770
  end
1771
+ end
1772
+ end
1773
+
1774
+ describe "#perform_bootstrap" do
1775
+ let(:exit_status) { 0 }
1776
+ let(:result_mock) { double("result", exit_status: exit_status, stderr: "A message") }
822
1777
 
823
- it "configures the ssh gateway" do
824
- expect(knife_ssh.config[:ssh_gateway]).to eq("towel.blinkenlights.nl")
1778
+ before do
1779
+ allow(connection).to receive(:hostname).and_return "testhost"
1780
+ end
1781
+ it "runs the remote script and logs the output" do
1782
+ expect(knife.ui).to receive(:info).with(/Bootstrapping.*/)
1783
+ expect(knife).to receive(:bootstrap_command)
1784
+ .with("/path.sh")
1785
+ .and_return("sh /path.sh")
1786
+ expect(connection)
1787
+ .to receive(:run_command)
1788
+ .with("sh /path.sh")
1789
+ .and_yield("output here")
1790
+ .and_return result_mock
1791
+
1792
+ expect(knife.ui).to receive(:msg).with(/testhost/)
1793
+ knife.perform_bootstrap("/path.sh")
1794
+ end
1795
+ context "when the remote command fails" do
1796
+ let(:exit_status) { 1 }
1797
+ it "shows an error and exits" do
1798
+ expect(knife.ui).to receive(:info).with(/Bootstrapping.*/)
1799
+ expect(knife).to receive(:bootstrap_command)
1800
+ .with("/path.sh")
1801
+ .and_return("sh /path.sh")
1802
+ expect(connection).to receive(:run_command).with("sh /path.sh").and_return result_mock
1803
+ expect { knife.perform_bootstrap("/path.sh") }.to raise_error(SystemExit)
825
1804
  end
1805
+ end
1806
+ end
826
1807
 
827
- it "configures the ssh gateway identity" do
828
- expect(knife_ssh.config[:ssh_gateway_identity]).to eq("~/.ssh/gateway.rsa")
1808
+ describe "#connect!" do
1809
+ context "in the normal case" do
1810
+ it "connects using the connection_opts and notifies the operator of progress" do
1811
+ expect(knife.ui).to receive(:info).with(/Connecting to.*/)
1812
+ expect(knife).to receive(:connection_opts).and_return( { opts: "here" })
1813
+ expect(knife).to receive(:do_connect).with( { opts: "here" } )
1814
+ knife.connect!
829
1815
  end
1816
+ end
830
1817
 
831
- it "configures the host key verify mode" do
832
- expect(knife_ssh.config[:host_key_verify]).to eq(true)
1818
+ context "when a non-auth-failure occurs" do
1819
+ let(:expected_error) { RuntimeError.new }
1820
+ before do
1821
+ allow(knife).to receive(:do_connect).and_raise(expected_error)
1822
+ end
1823
+ it "re-raises the exception" do
1824
+ expect { knife.connect! }.to raise_error(expected_error)
833
1825
  end
834
1826
  end
835
1827
 
836
- describe "when falling back to password auth when host key auth fails" do
837
- let(:knife_ssh_with_password_auth) do
838
- knife.name_args = ["foo.example.com"]
839
- knife.config[:ssh_user] = "rooty"
840
- knife.config[:ssh_identity_file] = "~/.ssh/me.rsa"
841
- allow(knife).to receive(:render_template).and_return("")
842
- k = knife.knife_ssh
843
- allow(k).to receive(:get_password).and_return("typed_in_password")
844
- allow(knife).to receive(:knife_ssh).and_return(k)
845
- knife.knife_ssh_with_password_auth
1828
+ context "when an auth failure occurs" do
1829
+ let(:expected_error) do
1830
+ e = Train::Error.new
1831
+ actual = Net::SSH::AuthenticationFailed.new
1832
+ # Simulate train's nested error - they wrap
1833
+ # ssh/network errors in a TrainError.
1834
+ allow(e).to receive(:cause).and_return(actual)
1835
+ e
846
1836
  end
847
1837
 
848
- it "prompts the user for a password " do
849
- expect(knife_ssh_with_password_auth.config[:ssh_password]).to eq("typed_in_password")
1838
+ before do
1839
+ require "net/ssh"
850
1840
  end
851
1841
 
852
- it "configures knife not to use the identity file that didn't work previously" do
853
- expect(knife_ssh_with_password_auth.config[:ssh_identity_file]).to be_nil
1842
+ context "and password auth was used" do
1843
+ before do
1844
+ allow(connection).to receive(:password_auth?).and_return true
1845
+ end
1846
+
1847
+ it "re-raises the error so as not to resubmit the same failing password" do
1848
+ expect(knife).to receive(:do_connect).and_raise(expected_error)
1849
+ expect { knife.connect! }.to raise_error(expected_error)
1850
+ end
1851
+ end
1852
+
1853
+ context "and password auth was not used" do
1854
+ before do
1855
+ allow(connection).to receive(:password_auth?).and_return false
1856
+ allow(connection).to receive(:user).and_return "testuser"
1857
+ end
1858
+
1859
+ it "warns, prompts for password, then reconnects with a password-enabled configuration using the new password" do
1860
+ question_mock = double("question")
1861
+ expect(knife).to receive(:do_connect).and_raise(expected_error)
1862
+ expect(knife.ui).to receive(:warn).with(/Failed to auth.*/)
1863
+ expect(knife.ui).to receive(:ask).and_yield(question_mock).and_return("newpassword")
1864
+ # Ensure that we set echo off to prevent showing password on the screen
1865
+ expect(question_mock).to receive(:echo=).with false
1866
+ expect(knife).to receive(:do_connect) do |opts|
1867
+ expect(opts[:password]).to eq "newpassword"
1868
+ end
1869
+ knife.connect!
1870
+ end
854
1871
  end
855
1872
  end
856
1873
  end
857
1874
 
858
1875
  it "verifies that a server to bootstrap was given as a command line arg" do
859
1876
  knife.name_args = nil
1877
+ expect(knife).to receive(:check_license)
860
1878
  expect { knife.run }.to raise_error(SystemExit)
861
1879
  expect(stderr.string).to match(/ERROR:.+FQDN or ip/)
862
1880
  end
863
1881
 
864
- describe "when running the bootstrap" do
865
- let(:knife_ssh) do
866
- knife.name_args = ["foo.example.com"]
867
- knife.config[:chef_node_name] = "foo.example.com"
868
- knife.config[:ssh_user] = "rooty"
869
- knife.config[:ssh_identity_file] = "~/.ssh/me.rsa"
870
- allow(knife).to receive(:render_template).and_return("")
871
- knife_ssh = knife.knife_ssh
872
- allow(knife).to receive(:knife_ssh).and_return(knife_ssh)
873
- knife_ssh
1882
+ describe "#bootstrap_context" do
1883
+ context "under Windows" do
1884
+ let(:windows_test) { true }
1885
+ it "creates a WindowsBootstrapContext" do
1886
+ require "chef/knife/core/windows_bootstrap_context"
1887
+ expect(knife.bootstrap_context.class).to eq Chef::Knife::Core::WindowsBootstrapContext
1888
+ end
874
1889
  end
875
- let(:client) { Chef::ApiClient.new }
876
1890
 
877
- context "when running with a configured and present validation key" do
878
- before do
879
- # this tests runs the old code path where we have a validation key, so we need to pass that check
880
- allow(File).to receive(:exist?).with(File.expand_path(Chef::Config[:validation_key])).and_return(true)
1891
+ context "under linux" do
1892
+ let(:linux_test) { true }
1893
+ it "creates a BootstrapContext" do
1894
+ require "chef/knife/core/bootstrap_context"
1895
+ expect(knife.bootstrap_context.class).to eq Chef::Knife::Core::BootstrapContext
881
1896
  end
1897
+ end
1898
+ end
882
1899
 
883
- it "configures the underlying ssh command and then runs it" do
884
- expect(knife_ssh).to receive(:run)
885
- knife.run
886
- end
1900
+ describe "#config_value" do
1901
+ before do
1902
+ knife.config[:test_key_a] = "a from cli"
1903
+ knife.config[:test_key_b] = "b from cli"
1904
+ Chef::Config[:knife][:test_key_a] = "a from Chef::Config"
1905
+ Chef::Config[:knife][:test_key_c] = "c from Chef::Config"
1906
+ Chef::Config[:knife][:alt_test_key_c] = "alt c from Chef::Config"
1907
+ end
887
1908
 
888
- it "falls back to password based auth when auth fails the first time" do
889
- allow(knife).to receive(:puts)
1909
+ it "returns CLI value when key is only provided by the CLI" do
1910
+ expect(knife.config_value(:test_key_b)).to eq "b from cli"
1911
+ end
890
1912
 
891
- fallback_knife_ssh = knife_ssh.dup
892
- expect(knife_ssh).to receive(:run).and_raise(Net::SSH::AuthenticationFailed.new("no ssh for you"))
893
- allow(knife).to receive(:knife_ssh_with_password_auth).and_return(fallback_knife_ssh)
894
- expect(fallback_knife_ssh).to receive(:run)
895
- knife.run
896
- end
1913
+ it "returns CLI value when key is provided by CLI and Chef::Config" do
1914
+ expect(knife.config_value(:test_key_a)).to eq "a from cli"
1915
+ end
1916
+
1917
+ it "returns Chef::Config value whent he key is only provided by Chef::Config" do
1918
+ expect(knife.config_value(:test_key_c)).to eq "c from Chef::Config"
1919
+ end
897
1920
 
898
- it "raises the exception if config[:ssh_password] is set and an authentication exception is raised" do
899
- knife.config[:ssh_password] = "password"
900
- expect(knife_ssh).to receive(:run).and_raise(Net::SSH::AuthenticationFailed)
901
- expect { knife.run }.to raise_error(Net::SSH::AuthenticationFailed)
1921
+ it "returns the Chef::Config value from the alternative key when the CLI key is not set" do
1922
+ expect(knife.config_value(:test_key_c, :alt_test_key_c)).to eq "alt c from Chef::Config"
1923
+ end
1924
+
1925
+ it "returns the default value when the key is not provided by CLI or Chef::Config" do
1926
+ expect(knife.config_value(:missing_key, :missing_key, "found")).to eq "found"
1927
+ end
1928
+ end
1929
+
1930
+ describe "#upload_bootstrap" do
1931
+ before do
1932
+ allow(connection).to receive(:temp_dir).and_return(temp_dir)
1933
+ allow(connection).to receive(:normalize_path) { |a| a }
1934
+ end
1935
+
1936
+ let(:content) { "bootstrap script content" }
1937
+ context "under Windows" do
1938
+ let(:windows_test) { true }
1939
+ let(:temp_dir) { "C:/Temp/bootstrap" }
1940
+ it "creates a bat file in the temp dir provided by connection, using given content" do
1941
+ expect(connection).to receive(:upload_file_content!).with(content, "C:/Temp/bootstrap/bootstrap.bat")
1942
+ expect(knife.upload_bootstrap(content)).to eq "C:/Temp/bootstrap/bootstrap.bat"
902
1943
  end
1944
+ end
903
1945
 
904
- it "creates the client and adds chef-vault items if vault_list is set" do
905
- knife.config[:bootstrap_vault_file] = "/not/our/responsibility/to/check/if/this/exists"
906
- expect(knife_ssh).to receive(:run)
907
- expect(knife.client_builder).to receive(:run)
908
- expect(knife.client_builder).to receive(:client).and_return(client)
909
- expect(knife.chef_vault_handler).to receive(:run).with(client)
910
- knife.run
1946
+ context "under Linux" do
1947
+ let(:linux_test) { true }
1948
+ let(:temp_dir) { "/tmp/bootstrap" }
1949
+ it "creates a 'sh file in the temp dir provided by connection, using given content" do
1950
+ expect(connection).to receive(:upload_file_content!).with(content, "/tmp/bootstrap/bootstrap.sh")
1951
+ expect(knife.upload_bootstrap(content)).to eq "/tmp/bootstrap/bootstrap.sh"
911
1952
  end
1953
+ end
1954
+ end
912
1955
 
913
- it "creates the client and adds chef-vault items if vault_items is set" do
914
- knife.config[:bootstrap_vault_json] = '{ "vault" => "item" }'
915
- expect(knife_ssh).to receive(:run)
916
- expect(knife.client_builder).to receive(:run)
917
- expect(knife.client_builder).to receive(:client).and_return(client)
918
- expect(knife.chef_vault_handler).to receive(:run).with(client)
919
- knife.run
1956
+ describe "#bootstrap_command" do
1957
+ context "under Windows" do
1958
+ let(:windows_test) { true }
1959
+ it "prefixes the command to run under cmd.exe" do
1960
+ expect(knife.bootstrap_command("autoexec.bat")).to eq "cmd.exe /C autoexec.bat"
920
1961
  end
921
1962
 
922
- it "does old-style validation without creating a client key if vault_list+vault_items is not set" do
923
- expect(File).to receive(:exist?).with(File.expand_path(Chef::Config[:validation_key])).and_return(true)
924
- expect(knife_ssh).to receive(:run)
925
- expect(knife.client_builder).not_to receive(:run)
926
- expect(knife.chef_vault_handler).not_to receive(:run)
927
- knife.run
1963
+ end
1964
+ context "under Linux" do
1965
+ let(:linux_test) { true }
1966
+ it "prefixes the command to run under sh" do
1967
+ expect(knife.bootstrap_command("bootstrap")).to eq "sh bootstrap"
928
1968
  end
1969
+ end
1970
+ end
929
1971
 
930
- it "raises an exception if the config[:chef_node_name] is not present" do
931
- knife.config[:chef_node_name] = nil
1972
+ describe "#default_bootstrap_template" do
1973
+ context "under Windows" do
1974
+ let(:windows_test) { true }
1975
+ it "is windows-chef-client-msi" do
1976
+ expect(knife.default_bootstrap_template).to eq "windows-chef-client-msi"
1977
+ end
932
1978
 
933
- expect { knife.run }.to raise_error(SystemExit)
1979
+ end
1980
+ context "under Linux" do
1981
+ let(:linux_test) { true }
1982
+ it "is chef-full" do
1983
+ expect(knife.default_bootstrap_template).to eq "chef-full"
934
1984
  end
935
1985
  end
1986
+ end
936
1987
 
937
- context "when the validation key is not present" do
938
- before do
939
- # this tests runs the old code path where we have a validation key, so we need to pass that check
940
- allow(File).to receive(:exist?).with(File.expand_path(Chef::Config[:validation_key])).and_return(false)
1988
+ describe "#do_connect" do
1989
+ let(:host_descriptor) { "example.com" }
1990
+ let(:connection) { double("TrainConnector") }
1991
+ let(:connector_mock) { double("TargetResolver", targets: [ connection ]) }
1992
+ before do
1993
+ allow(knife).to receive(:host_descriptor).and_return host_descriptor
1994
+ end
1995
+
1996
+ it "creates a TrainConnector and connects it" do
1997
+ expect(Chef::Knife::Bootstrap::TrainConnector).to receive(:new).and_return connection
1998
+ expect(connection).to receive(:connect!)
1999
+ knife.do_connect({})
2000
+ end
2001
+ end
2002
+
2003
+ describe "validate_winrm_transport_opts!" do
2004
+ before do
2005
+ allow(knife).to receive(:connection_protocol).and_return connection_protocol
2006
+ end
2007
+
2008
+ context "when using ssh" do
2009
+ let(:connection_protocol) { "ssh" }
2010
+ it "returns true" do
2011
+ expect(knife.validate_winrm_transport_opts!).to eq true
941
2012
  end
2013
+ end
2014
+ context "when using winrm" do
2015
+ let(:connection_protocol) { "winrm" }
2016
+ context "with plaintext auth" do
2017
+ before do
2018
+ knife.config[:winrm_auth_method] = "plaintext"
2019
+ end
2020
+ context "with ssl" do
2021
+ before do
2022
+ knife.config[:winrm_ssl] = true
2023
+ end
2024
+ it "will not error because we won't send anything in plaintext regardless" do
2025
+ expect(knife.validate_winrm_transport_opts!).to eq true
2026
+ end
2027
+ end
2028
+ context "without ssl" do
2029
+ before do
2030
+ knife.config[:winrm_ssl] = false
2031
+ end
2032
+ context "and no validation key exists" do
2033
+ before do
2034
+ Chef::Config[:validation_key] = "validation_key.pem"
2035
+ allow(File).to receive(:exist?).with(/.*validation_key.pem/).and_return false
2036
+ end
2037
+
2038
+ it "will error because we will generate and send a client key over the wire in plaintext" do
2039
+ expect { knife.validate_winrm_transport_opts! }.to raise_error(SystemExit)
2040
+ end
942
2041
 
943
- it "creates the client (and possibly adds chef-vault items)" do
944
- expect(knife_ssh).to receive(:run)
945
- expect(knife.client_builder).to receive(:run)
946
- expect(knife.client_builder).to receive(:client).and_return(client)
947
- expect(knife.chef_vault_handler).to receive(:run).with(client)
948
- knife.run
2042
+ end
2043
+ context "and a validation key exists" do
2044
+ before do
2045
+ Chef::Config[:validation_key] = "validation_key.pem"
2046
+ allow(File).to receive(:exist?).with(/.*validation_key.pem/).and_return true
2047
+ end
2048
+ # TODO - don't we still send validation key?
2049
+ it "will not error because we don not send client key over the wire" do
2050
+ expect(knife.validate_winrm_transport_opts!).to eq true
2051
+ end
2052
+ end
2053
+ end
949
2054
  end
950
2055
 
951
- it "raises an exception if the config[:chef_node_name] is not present" do
952
- knife.config[:chef_node_name] = nil
2056
+ context "with other auth" do
2057
+ before do
2058
+ knife.config[:winrm_auth_method] = "kerberos"
2059
+ end
2060
+
2061
+ context "and no validation key exists" do
2062
+ before do
2063
+
2064
+ Chef::Config[:validation_key] = "validation_key.pem"
2065
+ allow(File).to receive(:exist?).with(/.*validation_key.pem/).and_return false
2066
+ end
2067
+
2068
+ it "will not error because we're not using plaintext auth" do
2069
+ expect(knife.validate_winrm_transport_opts!).to eq true
2070
+ end
2071
+ end
2072
+ context "and a validation key exists" do
2073
+ before do
2074
+ Chef::Config[:validation_key] = "validation_key.pem"
2075
+ allow(File).to receive(:exist?).with(/.*validation_key.pem/).and_return true
2076
+ end
2077
+
2078
+ it "will not error because a client key won't be sent over the wire in plaintext when a validation key is present" do
2079
+ expect(knife.validate_winrm_transport_opts!).to eq true
2080
+ end
2081
+ end
953
2082
 
954
- expect { knife.run }.to raise_error(SystemExit)
955
2083
  end
2084
+
956
2085
  end
957
2086
 
958
- context "when the validation_key is nil" do
959
- before do
960
- # this tests runs the old code path where we have a validation key, so we need to pass that check for some plugins
961
- Chef::Config[:validation_key] = nil
2087
+ end
2088
+
2089
+ describe "#winrm_warn_no_ssl_verification" do
2090
+ before do
2091
+ allow(knife).to receive(:connection_protocol).and_return connection_protocol
2092
+ end
2093
+
2094
+ context "when using ssh" do
2095
+ let(:connection_protocol) { "ssh" }
2096
+ it "does not issue a warning" do
2097
+ expect(knife.ui).to_not receive(:warn)
2098
+ knife.winrm_warn_no_ssl_verification
962
2099
  end
2100
+ end
2101
+ context "when using winrm" do
2102
+ let(:connection_protocol) { "winrm" }
2103
+ context "winrm_no_verify_cert is set" do
2104
+ before do
2105
+ knife.config[:winrm_no_verify_cert] = true
2106
+ end
2107
+
2108
+ context "and ca_trust_file is present" do
2109
+ before do
2110
+ knife.config[:ca_trust_file] = "file"
2111
+ end
963
2112
 
964
- it "creates the client and does not run client_builder or the chef_vault_handler" do
965
- expect(knife_ssh).to receive(:run)
966
- expect(knife.client_builder).not_to receive(:run)
967
- expect(knife.chef_vault_handler).not_to receive(:run)
968
- knife.run
2113
+ it "does not issue a warning" do
2114
+ expect(knife.ui).to_not receive(:warn)
2115
+ knife.winrm_warn_no_ssl_verification
2116
+ end
2117
+ end
2118
+
2119
+ context "and winrm_ssl_peer_fingerprint is present" do
2120
+ before do
2121
+ knife.config[:winrm_ssl_peer_fingerprint] = "ABCD"
2122
+ end
2123
+ it "does not issue a warning" do
2124
+ expect(knife.ui).to_not receive(:warn)
2125
+ knife.winrm_warn_no_ssl_verification
2126
+ end
2127
+ end
2128
+ context "and neither ca_trust_file nor winrm_ssl_peer_fingerprint is present" do
2129
+ it "issues a warning" do
2130
+ expect(knife.ui).to receive(:warn)
2131
+ knife.winrm_warn_no_ssl_verification
2132
+ end
2133
+ end
969
2134
  end
970
2135
  end
971
2136
  end
972
2137
 
973
- describe "specifying ssl verification" do
2138
+ describe "#warn_on_short_session_timeout" do
2139
+ let(:session_timeout) { 0 }
2140
+ before do
2141
+ allow(knife).to receive(:config).and_return(session_timeout: session_timeout)
2142
+ end
974
2143
 
2144
+ context "timeout is more than 15" do
2145
+ let(:session_timeout) { 16 }
2146
+ it "does not issue a warning" do
2147
+ expect(knife.ui).to_not receive(:warn)
2148
+ knife.warn_on_short_session_timeout
2149
+ end
2150
+ end
2151
+ context "timeout is 15 or less" do
2152
+ let(:session_timeout) { 15 }
2153
+ it "issues a warning" do
2154
+ expect(knife.ui).to receive(:warn)
2155
+ knife.warn_on_short_session_timeout
2156
+ end
2157
+ end
975
2158
  end
976
2159
  end