chef 16.15.22 → 17.0.242

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 (637) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -13
  3. data/README.md +1 -1
  4. data/Rakefile +2 -2
  5. data/chef-universal-mingw32.gemspec +1 -1
  6. data/chef.gemspec +6 -8
  7. data/lib/chef/application/base.rb +1 -1
  8. data/lib/chef/applications.rb +0 -1
  9. data/lib/chef/chef_fs/command_line.rb +5 -2
  10. data/lib/chef/chef_fs/file_system.rb +9 -10
  11. data/lib/chef/client.rb +2 -2
  12. data/lib/chef/compliance/default_attributes.rb +4 -3
  13. data/lib/chef/compliance/fetcher/automate.rb +0 -7
  14. data/lib/chef/compliance/reporter/automate.rb +17 -7
  15. data/lib/chef/compliance/reporter/chef_server_automate.rb +11 -6
  16. data/lib/chef/compliance/reporter/cli.rb +77 -0
  17. data/lib/chef/compliance/reporter/compliance_enforcer.rb +4 -0
  18. data/lib/chef/compliance/reporter/json_file.rb +8 -1
  19. data/lib/chef/compliance/runner.rb +65 -27
  20. data/lib/chef/cookbook/gem_installer.rb +1 -5
  21. data/lib/chef/cookbook/synchronizer.rb +3 -5
  22. data/lib/chef/cookbook_loader.rb +2 -4
  23. data/lib/chef/cookbook_uploader.rb +0 -1
  24. data/lib/chef/cookbook_version.rb +4 -26
  25. data/lib/chef/data_bag_item.rb +11 -2
  26. data/lib/chef/data_collector/run_end_message.rb +1 -1
  27. data/lib/chef/delayed_evaluator.rb +4 -0
  28. data/lib/chef/deprecated.rb +6 -12
  29. data/lib/chef/dsl/chef_vault.rb +6 -6
  30. data/lib/chef/dsl/reboot_pending.rb +1 -2
  31. data/lib/chef/exceptions.rb +0 -3
  32. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +20 -22
  33. data/lib/chef/formatters/error_mapper.rb +2 -2
  34. data/lib/chef/group.rb +75 -0
  35. data/lib/chef/http.rb +5 -5
  36. data/lib/chef/mixin/get_source_from_package.rb +1 -1
  37. data/lib/chef/node/attribute.rb +6 -4
  38. data/lib/chef/node/immutable_collections.rb +13 -0
  39. data/lib/chef/node/mixin/deep_merge_cache.rb +11 -7
  40. data/lib/chef/node.rb +19 -20
  41. data/lib/chef/org.rb +3 -2
  42. data/lib/chef/policy_builder/policyfile.rb +0 -5
  43. data/lib/chef/property.rb +18 -0
  44. data/lib/chef/provider/cron.rb +1 -1
  45. data/lib/chef/provider/execute.rb +2 -1
  46. data/lib/chef/provider/file.rb +1 -1
  47. data/lib/chef/provider/git.rb +5 -7
  48. data/lib/chef/provider/group/dscl.rb +1 -1
  49. data/lib/chef/provider/group/groupadd.rb +3 -3
  50. data/lib/chef/provider/group/groupmod.rb +3 -3
  51. data/lib/chef/provider/group/pw.rb +3 -3
  52. data/lib/chef/provider/ifconfig.rb +2 -2
  53. data/lib/chef/provider/link.rb +2 -2
  54. data/lib/chef/provider/mount/aix.rb +3 -3
  55. data/lib/chef/provider/mount/mount.rb +5 -5
  56. data/lib/chef/provider/mount/windows.rb +1 -1
  57. data/lib/chef/provider/mount.rb +5 -5
  58. data/lib/chef/provider/package/apt.rb +27 -1
  59. data/lib/chef/provider/package/deb.rb +3 -3
  60. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  61. data/lib/chef/provider/package/portage.rb +2 -2
  62. data/lib/chef/provider/package/powershell.rb +0 -5
  63. data/lib/chef/provider/package/rubygems.rb +9 -15
  64. data/lib/chef/provider/package/windows.rb +2 -4
  65. data/lib/chef/provider/package/yum/yum_helper.py +1 -1
  66. data/lib/chef/provider/package.rb +17 -21
  67. data/lib/chef/provider/route.rb +2 -2
  68. data/lib/chef/provider/service/aixinit.rb +1 -1
  69. data/lib/chef/provider/service/debian.rb +1 -1
  70. data/lib/chef/provider/service/freebsd.rb +15 -21
  71. data/lib/chef/provider/service/macosx.rb +4 -4
  72. data/lib/chef/provider/service/systemd.rb +43 -14
  73. data/lib/chef/provider/service/upstart.rb +2 -13
  74. data/lib/chef/provider/service/windows.rb +12 -12
  75. data/lib/chef/provider/service.rb +6 -6
  76. data/lib/chef/provider/subversion.rb +10 -12
  77. data/lib/chef/provider/systemd_unit.rb +36 -10
  78. data/lib/chef/provider/template/content.rb +3 -7
  79. data/lib/chef/provider/user/dscl.rb +1 -1
  80. data/lib/chef/provider/user/mac.rb +17 -20
  81. data/lib/chef/provider/user/pw.rb +1 -1
  82. data/lib/chef/provider/user/windows.rb +1 -1
  83. data/lib/chef/provider/user.rb +2 -2
  84. data/lib/chef/provider/zypper_repository.rb +2 -2
  85. data/lib/chef/provider.rb +1 -1
  86. data/lib/chef/providers.rb +0 -1
  87. data/lib/chef/resource/alternatives.rb +6 -6
  88. data/lib/chef/resource/apt_package.rb +1 -1
  89. data/lib/chef/resource/apt_preference.rb +2 -2
  90. data/lib/chef/resource/apt_repository.rb +6 -6
  91. data/lib/chef/resource/apt_update.rb +3 -2
  92. data/lib/chef/resource/archive_file.rb +2 -3
  93. data/lib/chef/resource/breakpoint.rb +1 -1
  94. data/lib/chef/resource/build_essential.rb +2 -6
  95. data/lib/chef/resource/chef_client_config.rb +2 -2
  96. data/lib/chef/resource/chef_client_cron.rb +4 -4
  97. data/lib/chef/resource/chef_client_launchd.rb +3 -3
  98. data/lib/chef/resource/chef_client_scheduled_task.rb +1 -1
  99. data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
  100. data/lib/chef/resource/chef_handler.rb +3 -7
  101. data/lib/chef/resource/chef_sleep.rb +1 -1
  102. data/lib/chef/resource/chef_vault_secret.rb +3 -8
  103. data/lib/chef/resource/chocolatey_config.rb +2 -6
  104. data/lib/chef/resource/chocolatey_feature.rb +2 -6
  105. data/lib/chef/resource/chocolatey_source.rb +4 -10
  106. data/lib/chef/resource/cron/_cron_shared.rb +2 -2
  107. data/lib/chef/resource/cron_access.rb +2 -4
  108. data/lib/chef/resource/dmg_package.rb +6 -10
  109. data/lib/chef/resource/dpkg_package.rb +1 -1
  110. data/lib/chef/resource/execute.rb +6 -1
  111. data/lib/chef/resource/file.rb +1 -1
  112. data/lib/chef/resource/group.rb +2 -2
  113. data/lib/chef/resource/homebrew_cask.rb +5 -15
  114. data/lib/chef/resource/homebrew_tap.rb +2 -6
  115. data/lib/chef/resource/hostname.rb +21 -17
  116. data/lib/chef/resource/http_request.rb +1 -1
  117. data/lib/chef/resource/kernel_module.rb +6 -17
  118. data/lib/chef/resource/locale.rb +2 -3
  119. data/lib/chef/resource/lwrp_base.rb +4 -0
  120. data/lib/chef/resource/macos_userdefaults.rb +10 -14
  121. data/lib/chef/resource/mdadm.rb +53 -7
  122. data/lib/chef/resource/mount.rb +3 -2
  123. data/lib/chef/resource/openssl_ec_private_key.rb +2 -2
  124. data/lib/chef/resource/openssl_rsa_private_key.rb +1 -1
  125. data/lib/chef/resource/openssl_x509_certificate.rb +2 -2
  126. data/lib/chef/resource/plist.rb +7 -7
  127. data/lib/chef/resource/powershell_script.rb +1 -1
  128. data/lib/chef/resource/remote_file.rb +1 -1
  129. data/lib/chef/resource/rhsm_errata.rb +16 -1
  130. data/lib/chef/resource/rhsm_errata_level.rb +10 -1
  131. data/lib/chef/resource/rhsm_register.rb +12 -6
  132. data/lib/chef/resource/rhsm_repo.rb +2 -6
  133. data/lib/chef/resource/rhsm_subscription.rb +7 -11
  134. data/lib/chef/resource/scm/git.rb +1 -1
  135. data/lib/chef/resource/sudo.rb +6 -6
  136. data/lib/chef/resource/support/client.erb +0 -6
  137. data/lib/chef/resource/sysctl.rb +2 -6
  138. data/lib/chef/resource/systemd_unit.rb +3 -3
  139. data/lib/chef/resource/template.rb +1 -1
  140. data/lib/chef/resource/timezone.rb +1 -3
  141. data/lib/chef/resource/user/mac_user.rb +1 -1
  142. data/lib/chef/resource/user_ulimit.rb +2 -3
  143. data/lib/chef/resource/windows_ad_join.rb +2 -6
  144. data/lib/chef/resource/windows_audit_policy.rb +1 -1
  145. data/lib/chef/resource/windows_auto_run.rb +2 -5
  146. data/lib/chef/resource/windows_certificate.rb +207 -73
  147. data/lib/chef/resource/windows_dfs_folder.rb +2 -6
  148. data/lib/chef/resource/windows_dfs_namespace.rb +2 -6
  149. data/lib/chef/resource/windows_dfs_server.rb +1 -3
  150. data/lib/chef/resource/windows_dns_record.rb +2 -6
  151. data/lib/chef/resource/windows_dns_zone.rb +2 -6
  152. data/lib/chef/resource/windows_env.rb +5 -4
  153. data/lib/chef/resource/windows_feature.rb +3 -9
  154. data/lib/chef/resource/windows_feature_dism.rb +2 -6
  155. data/lib/chef/resource/windows_feature_powershell.rb +3 -3
  156. data/lib/chef/resource/windows_firewall_profile.rb +4 -4
  157. data/lib/chef/resource/windows_firewall_rule.rb +2 -5
  158. data/lib/chef/resource/windows_font.rb +2 -4
  159. data/lib/chef/resource/windows_pagefile.rb +2 -6
  160. data/lib/chef/resource/windows_path.rb +2 -2
  161. data/lib/chef/resource/windows_printer.rb +4 -4
  162. data/lib/chef/resource/windows_printer_port.rb +6 -6
  163. data/lib/chef/resource/windows_security_policy.rb +9 -12
  164. data/lib/chef/resource/windows_share.rb +14 -21
  165. data/lib/chef/resource/windows_shortcut.rb +4 -6
  166. data/lib/chef/resource/windows_task.rb +17 -5
  167. data/lib/chef/resource/windows_uac.rb +2 -4
  168. data/lib/chef/resource/windows_user_privilege.rb +5 -5
  169. data/lib/chef/resource/windows_workgroup.rb +1 -2
  170. data/lib/chef/resources.rb +0 -1
  171. data/lib/chef/user.rb +0 -1
  172. data/lib/chef/user_v1.rb +3 -4
  173. data/lib/chef/util/dsc/configuration_generator.rb +1 -0
  174. data/lib/chef/util/dsc/local_configuration_manager.rb +1 -1
  175. data/lib/chef/version.rb +1 -1
  176. data/lib/chef/win32/api.rb +2 -9
  177. data/lib/chef/win32/registry.rb +4 -2
  178. data/spec/data/cookbooks/openldap/libraries/openldap.rb +1 -1
  179. data/spec/data/lwrp/resources/bar.rb +2 -0
  180. data/spec/data/lwrp/resources/buck_passer.rb +1 -0
  181. data/spec/data/lwrp/resources/buck_passer_2.rb +1 -0
  182. data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +1 -0
  183. data/spec/data/lwrp/resources/foo.rb +2 -0
  184. data/spec/data/lwrp/resources/inline_compiler.rb +1 -0
  185. data/spec/data/lwrp/resources/monkey_name_printer.rb +1 -0
  186. data/spec/data/lwrp/resources/paint_drying_watcher.rb +1 -0
  187. data/spec/data/lwrp/resources/thumb_twiddler.rb +1 -0
  188. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +2 -0
  189. data/spec/data/lwrp_const_scoping/resources/conflict.rb +1 -0
  190. data/spec/data/lwrp_override/resources/foo.rb +1 -0
  191. data/spec/data/rubygems.org/nonexistent_gem-info +1 -0
  192. data/spec/data/rubygems.org/sexp_processor-info +49 -0
  193. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  194. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  195. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  196. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  197. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  198. data/spec/data/run_context/cookbooks/test/resources/resource.rb +2 -0
  199. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +2 -0
  200. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  201. data/spec/functional/dsl/registry_helper_spec.rb +1 -1
  202. data/spec/functional/resource/aixinit_service_spec.rb +7 -7
  203. data/spec/functional/resource/apt_package_spec.rb +1 -1
  204. data/spec/functional/resource/chocolatey_package_spec.rb +13 -0
  205. data/spec/functional/resource/dnf_package_spec.rb +4 -1
  206. data/spec/functional/resource/group_spec.rb +1 -5
  207. data/spec/functional/resource/link_spec.rb +0 -8
  208. data/spec/functional/resource/registry_spec.rb +8 -8
  209. data/spec/functional/resource/user/mac_user_spec.rb +2 -2
  210. data/spec/functional/resource/windows_certificate_spec.rb +92 -35
  211. data/spec/functional/version_spec.rb +1 -1
  212. data/spec/functional/win32/registry_spec.rb +1 -1
  213. data/spec/integration/client/client_spec.rb +5 -2
  214. data/spec/integration/client/exit_code_spec.rb +1 -1
  215. data/spec/integration/client/ipv6_spec.rb +1 -1
  216. data/spec/integration/compliance/compliance_spec.rb +1 -1
  217. data/spec/integration/ohai/ohai_spec.rb +7 -6
  218. data/spec/integration/recipes/accumulator_spec.rb +13 -1
  219. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -1
  220. data/spec/integration/recipes/lwrp_spec.rb +3 -1
  221. data/spec/integration/recipes/notifies_spec.rb +15 -1
  222. data/spec/integration/recipes/notifying_block_spec.rb +2 -1
  223. data/spec/integration/recipes/recipe_dsl_spec.rb +9 -9
  224. data/spec/integration/recipes/unified_mode_spec.rb +1 -1
  225. data/spec/integration/recipes/use_partial_spec.rb +4 -1
  226. data/spec/spec_helper.rb +10 -13
  227. data/spec/support/chef_helpers.rb +0 -16
  228. data/spec/support/lib/chef/resource/with_state.rb +0 -1
  229. data/spec/support/lib/chef/resource/zen_follower.rb +0 -1
  230. data/spec/support/lib/chef/resource/zen_master.rb +0 -1
  231. data/spec/support/matchers/leak.rb +7 -9
  232. data/spec/support/platform_helpers.rb +1 -8
  233. data/spec/support/shared/integration/integration_helper.rb +0 -1
  234. data/spec/support/shared/unit/script_resource.rb +2 -2
  235. data/spec/unit/application/solo_spec.rb +2 -2
  236. data/spec/unit/chef_fs/diff_spec.rb +1 -1
  237. data/spec/unit/chef_fs/file_system_spec.rb +1 -1
  238. data/spec/unit/compliance/fetcher/automate_spec.rb +0 -16
  239. data/spec/unit/compliance/reporter/automate_spec.rb +26 -2
  240. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +20 -0
  241. data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +1 -0
  242. data/spec/unit/compliance/runner_spec.rb +30 -4
  243. data/spec/unit/cookbook_version_spec.rb +0 -52
  244. data/spec/unit/data_bag_item_spec.rb +1 -6
  245. data/spec/unit/data_collector_spec.rb +1 -47
  246. data/spec/unit/dsl/reboot_pending_spec.rb +2 -2
  247. data/spec/unit/dsl/registry_helper_spec.rb +1 -1
  248. data/spec/unit/lwrp_spec.rb +1 -1
  249. data/spec/unit/mixin/params_validate_spec.rb +4 -3
  250. data/spec/unit/node/attribute_spec.rb +1 -1
  251. data/spec/unit/node_spec.rb +78 -0
  252. data/spec/unit/org_group_spec.rb +45 -0
  253. data/spec/unit/policy_builder/policyfile_spec.rb +1 -11
  254. data/spec/unit/property_spec.rb +23 -22
  255. data/spec/unit/provider/cron_spec.rb +1 -1
  256. data/spec/unit/provider/group/gpasswd_spec.rb +2 -2
  257. data/spec/unit/provider/group/groupmod_spec.rb +2 -2
  258. data/spec/unit/provider/group/pw_spec.rb +2 -2
  259. data/spec/unit/provider/group_spec.rb +1 -1
  260. data/spec/unit/provider/package/apt_spec.rb +84 -18
  261. data/spec/unit/provider/package/deb_spec.rb +3 -3
  262. data/spec/unit/provider/package/powershell_spec.rb +12 -74
  263. data/spec/unit/provider/package/rubygems_spec.rb +18 -30
  264. data/spec/unit/provider/service/arch_service_spec.rb +1 -0
  265. data/spec/unit/provider/service/debian_service_spec.rb +1 -0
  266. data/spec/unit/provider/service/macosx_spec.rb +2 -2
  267. data/spec/unit/provider/service/systemd_service_spec.rb +138 -23
  268. data/spec/unit/provider/service/upstart_service_spec.rb +0 -29
  269. data/spec/unit/provider/service/windows_spec.rb +2 -2
  270. data/spec/unit/provider/subversion_spec.rb +2 -2
  271. data/spec/unit/provider/systemd_unit_spec.rb +79 -60
  272. data/spec/unit/provider/zypper_repository_spec.rb +2 -2
  273. data/spec/unit/provider_spec.rb +0 -8
  274. data/spec/unit/resource/homebrew_cask_spec.rb +11 -29
  275. data/spec/unit/resource/mount_spec.rb +0 -10
  276. data/spec/unit/resource/powershell_script_spec.rb +2 -2
  277. data/spec/unit/resource/rhsm_subscription_spec.rb +3 -50
  278. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  279. data/spec/unit/resource/user_ulimit_spec.rb +1 -14
  280. data/spec/unit/resource/windows_task_spec.rb +1 -1
  281. data/spec/unit/user_spec.rb +1 -1
  282. data/spec/unit/user_v1_spec.rb +6 -4
  283. data/tasks/rspec.rb +15 -7
  284. metadata +17 -380
  285. data/bin/knife +0 -24
  286. data/lib/chef/application/knife.rb +0 -234
  287. data/lib/chef/application/windows_service.rb +0 -338
  288. data/lib/chef/application/windows_service_manager.rb +0 -205
  289. data/lib/chef/chef_fs/knife.rb +0 -160
  290. data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +0 -35
  291. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +0 -278
  292. data/lib/chef/chef_fs/parallelizer.rb +0 -102
  293. data/lib/chef/cookbook_site_streaming_uploader.rb +0 -244
  294. data/lib/chef/knife/acl_add.rb +0 -57
  295. data/lib/chef/knife/acl_base.rb +0 -183
  296. data/lib/chef/knife/acl_bulk_add.rb +0 -78
  297. data/lib/chef/knife/acl_bulk_remove.rb +0 -83
  298. data/lib/chef/knife/acl_remove.rb +0 -62
  299. data/lib/chef/knife/acl_show.rb +0 -56
  300. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +0 -162
  301. data/lib/chef/knife/bootstrap/client_builder.rb +0 -212
  302. data/lib/chef/knife/bootstrap/templates/README.md +0 -11
  303. data/lib/chef/knife/bootstrap/templates/chef-full.erb +0 -242
  304. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +0 -278
  305. data/lib/chef/knife/bootstrap/train_connector.rb +0 -336
  306. data/lib/chef/knife/bootstrap.rb +0 -1192
  307. data/lib/chef/knife/client_bulk_delete.rb +0 -104
  308. data/lib/chef/knife/client_create.rb +0 -101
  309. data/lib/chef/knife/client_delete.rb +0 -62
  310. data/lib/chef/knife/client_edit.rb +0 -52
  311. data/lib/chef/knife/client_key_create.rb +0 -73
  312. data/lib/chef/knife/client_key_delete.rb +0 -80
  313. data/lib/chef/knife/client_key_edit.rb +0 -83
  314. data/lib/chef/knife/client_key_list.rb +0 -73
  315. data/lib/chef/knife/client_key_show.rb +0 -80
  316. data/lib/chef/knife/client_list.rb +0 -41
  317. data/lib/chef/knife/client_reregister.rb +0 -58
  318. data/lib/chef/knife/client_show.rb +0 -48
  319. data/lib/chef/knife/config_get.rb +0 -39
  320. data/lib/chef/knife/config_get_profile.rb +0 -37
  321. data/lib/chef/knife/config_list.rb +0 -139
  322. data/lib/chef/knife/config_list_profiles.rb +0 -37
  323. data/lib/chef/knife/config_show.rb +0 -127
  324. data/lib/chef/knife/config_use.rb +0 -61
  325. data/lib/chef/knife/config_use_profile.rb +0 -47
  326. data/lib/chef/knife/configure.rb +0 -150
  327. data/lib/chef/knife/configure_client.rb +0 -48
  328. data/lib/chef/knife/cookbook_bulk_delete.rb +0 -71
  329. data/lib/chef/knife/cookbook_delete.rb +0 -151
  330. data/lib/chef/knife/cookbook_download.rb +0 -142
  331. data/lib/chef/knife/cookbook_list.rb +0 -47
  332. data/lib/chef/knife/cookbook_metadata.rb +0 -106
  333. data/lib/chef/knife/cookbook_metadata_from_file.rb +0 -49
  334. data/lib/chef/knife/cookbook_show.rb +0 -98
  335. data/lib/chef/knife/cookbook_upload.rb +0 -292
  336. data/lib/chef/knife/core/bootstrap_context.rb +0 -264
  337. data/lib/chef/knife/core/cookbook_scm_repo.rb +0 -159
  338. data/lib/chef/knife/core/formatting_options.rb +0 -49
  339. data/lib/chef/knife/core/gem_glob_loader.rb +0 -138
  340. data/lib/chef/knife/core/generic_presenter.rb +0 -232
  341. data/lib/chef/knife/core/hashed_command_loader.rb +0 -100
  342. data/lib/chef/knife/core/node_editor.rb +0 -130
  343. data/lib/chef/knife/core/node_presenter.rb +0 -133
  344. data/lib/chef/knife/core/object_loader.rb +0 -115
  345. data/lib/chef/knife/core/status_presenter.rb +0 -147
  346. data/lib/chef/knife/core/subcommand_loader.rb +0 -203
  347. data/lib/chef/knife/core/text_formatter.rb +0 -85
  348. data/lib/chef/knife/core/ui.rb +0 -338
  349. data/lib/chef/knife/core/windows_bootstrap_context.rb +0 -405
  350. data/lib/chef/knife/data_bag_create.rb +0 -81
  351. data/lib/chef/knife/data_bag_delete.rb +0 -49
  352. data/lib/chef/knife/data_bag_edit.rb +0 -74
  353. data/lib/chef/knife/data_bag_from_file.rb +0 -113
  354. data/lib/chef/knife/data_bag_list.rb +0 -42
  355. data/lib/chef/knife/data_bag_secret_options.rb +0 -122
  356. data/lib/chef/knife/data_bag_show.rb +0 -69
  357. data/lib/chef/knife/delete.rb +0 -125
  358. data/lib/chef/knife/deps.rb +0 -156
  359. data/lib/chef/knife/diff.rb +0 -83
  360. data/lib/chef/knife/download.rb +0 -84
  361. data/lib/chef/knife/edit.rb +0 -88
  362. data/lib/chef/knife/environment_compare.rb +0 -128
  363. data/lib/chef/knife/environment_create.rb +0 -52
  364. data/lib/chef/knife/environment_delete.rb +0 -44
  365. data/lib/chef/knife/environment_edit.rb +0 -44
  366. data/lib/chef/knife/environment_from_file.rb +0 -84
  367. data/lib/chef/knife/environment_list.rb +0 -41
  368. data/lib/chef/knife/environment_show.rb +0 -47
  369. data/lib/chef/knife/exec.rb +0 -99
  370. data/lib/chef/knife/group_add.rb +0 -55
  371. data/lib/chef/knife/group_create.rb +0 -49
  372. data/lib/chef/knife/group_destroy.rb +0 -53
  373. data/lib/chef/knife/group_list.rb +0 -43
  374. data/lib/chef/knife/group_remove.rb +0 -56
  375. data/lib/chef/knife/group_show.rb +0 -49
  376. data/lib/chef/knife/key_create.rb +0 -112
  377. data/lib/chef/knife/key_create_base.rb +0 -50
  378. data/lib/chef/knife/key_delete.rb +0 -55
  379. data/lib/chef/knife/key_edit.rb +0 -118
  380. data/lib/chef/knife/key_edit_base.rb +0 -55
  381. data/lib/chef/knife/key_list.rb +0 -90
  382. data/lib/chef/knife/key_list_base.rb +0 -45
  383. data/lib/chef/knife/key_show.rb +0 -53
  384. data/lib/chef/knife/list.rb +0 -177
  385. data/lib/chef/knife/node_bulk_delete.rb +0 -75
  386. data/lib/chef/knife/node_create.rb +0 -47
  387. data/lib/chef/knife/node_delete.rb +0 -46
  388. data/lib/chef/knife/node_edit.rb +0 -70
  389. data/lib/chef/knife/node_environment_set.rb +0 -53
  390. data/lib/chef/knife/node_from_file.rb +0 -51
  391. data/lib/chef/knife/node_list.rb +0 -44
  392. data/lib/chef/knife/node_policy_set.rb +0 -79
  393. data/lib/chef/knife/node_run_list_add.rb +0 -104
  394. data/lib/chef/knife/node_run_list_remove.rb +0 -67
  395. data/lib/chef/knife/node_run_list_set.rb +0 -66
  396. data/lib/chef/knife/node_show.rb +0 -63
  397. data/lib/chef/knife/null.rb +0 -12
  398. data/lib/chef/knife/raw.rb +0 -123
  399. data/lib/chef/knife/recipe_list.rb +0 -32
  400. data/lib/chef/knife/rehash.rb +0 -50
  401. data/lib/chef/knife/role_bulk_delete.rb +0 -66
  402. data/lib/chef/knife/role_create.rb +0 -53
  403. data/lib/chef/knife/role_delete.rb +0 -46
  404. data/lib/chef/knife/role_edit.rb +0 -45
  405. data/lib/chef/knife/role_env_run_list_add.rb +0 -87
  406. data/lib/chef/knife/role_env_run_list_clear.rb +0 -55
  407. data/lib/chef/knife/role_env_run_list_remove.rb +0 -57
  408. data/lib/chef/knife/role_env_run_list_replace.rb +0 -60
  409. data/lib/chef/knife/role_env_run_list_set.rb +0 -70
  410. data/lib/chef/knife/role_from_file.rb +0 -51
  411. data/lib/chef/knife/role_list.rb +0 -42
  412. data/lib/chef/knife/role_run_list_add.rb +0 -87
  413. data/lib/chef/knife/role_run_list_clear.rb +0 -55
  414. data/lib/chef/knife/role_run_list_remove.rb +0 -56
  415. data/lib/chef/knife/role_run_list_replace.rb +0 -60
  416. data/lib/chef/knife/role_run_list_set.rb +0 -69
  417. data/lib/chef/knife/role_show.rb +0 -48
  418. data/lib/chef/knife/search.rb +0 -194
  419. data/lib/chef/knife/serve.rb +0 -65
  420. data/lib/chef/knife/show.rb +0 -72
  421. data/lib/chef/knife/ssh.rb +0 -645
  422. data/lib/chef/knife/ssl_check.rb +0 -284
  423. data/lib/chef/knife/ssl_fetch.rb +0 -161
  424. data/lib/chef/knife/status.rb +0 -95
  425. data/lib/chef/knife/supermarket_download.rb +0 -121
  426. data/lib/chef/knife/supermarket_install.rb +0 -192
  427. data/lib/chef/knife/supermarket_list.rb +0 -76
  428. data/lib/chef/knife/supermarket_search.rb +0 -53
  429. data/lib/chef/knife/supermarket_share.rb +0 -166
  430. data/lib/chef/knife/supermarket_show.rb +0 -66
  431. data/lib/chef/knife/supermarket_unshare.rb +0 -61
  432. data/lib/chef/knife/tag_create.rb +0 -52
  433. data/lib/chef/knife/tag_delete.rb +0 -60
  434. data/lib/chef/knife/tag_list.rb +0 -47
  435. data/lib/chef/knife/upload.rb +0 -86
  436. data/lib/chef/knife/user_create.rb +0 -107
  437. data/lib/chef/knife/user_delete.rb +0 -44
  438. data/lib/chef/knife/user_dissociate.rb +0 -42
  439. data/lib/chef/knife/user_edit.rb +0 -52
  440. data/lib/chef/knife/user_invite_add.rb +0 -43
  441. data/lib/chef/knife/user_invite_list.rb +0 -34
  442. data/lib/chef/knife/user_invite_rescind.rb +0 -63
  443. data/lib/chef/knife/user_key_create.rb +0 -73
  444. data/lib/chef/knife/user_key_delete.rb +0 -80
  445. data/lib/chef/knife/user_key_edit.rb +0 -83
  446. data/lib/chef/knife/user_key_list.rb +0 -73
  447. data/lib/chef/knife/user_key_show.rb +0 -80
  448. data/lib/chef/knife/user_list.rb +0 -42
  449. data/lib/chef/knife/user_reregister.rb +0 -59
  450. data/lib/chef/knife/user_show.rb +0 -48
  451. data/lib/chef/knife/xargs.rb +0 -282
  452. data/lib/chef/knife/yaml_convert.rb +0 -91
  453. data/lib/chef/knife.rb +0 -665
  454. data/lib/chef/resource/user/dscl_user.rb +0 -35
  455. data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
  456. data/spec/data/knife-site-subcommands/plugins/knife/example_subcommand.rb +0 -0
  457. data/spec/data/knife_subcommand/test_explicit_category.rb +0 -7
  458. data/spec/data/knife_subcommand/test_name_mapping.rb +0 -4
  459. data/spec/data/knife_subcommand/test_yourself.rb +0 -21
  460. data/spec/functional/knife/configure_spec.rb +0 -33
  461. data/spec/functional/knife/cookbook_delete_spec.rb +0 -156
  462. data/spec/functional/knife/exec_spec.rb +0 -55
  463. data/spec/functional/knife/rehash_spec.rb +0 -39
  464. data/spec/functional/knife/smoke_test.rb +0 -42
  465. data/spec/functional/knife/ssh_spec.rb +0 -352
  466. data/spec/functional/resource/user/dscl_spec.rb +0 -188
  467. data/spec/functional/resource/windows_service_spec.rb +0 -105
  468. data/spec/functional/win32/service_manager_spec.rb +0 -220
  469. data/spec/integration/knife/chef_fs_data_store_spec.rb +0 -557
  470. data/spec/integration/knife/chef_repo_path_spec.rb +0 -962
  471. data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -200
  472. data/spec/integration/knife/chefignore_spec.rb +0 -301
  473. data/spec/integration/knife/client_bulk_delete_spec.rb +0 -131
  474. data/spec/integration/knife/client_create_spec.rb +0 -70
  475. data/spec/integration/knife/client_delete_spec.rb +0 -64
  476. data/spec/integration/knife/client_key_create_spec.rb +0 -66
  477. data/spec/integration/knife/client_key_delete_spec.rb +0 -43
  478. data/spec/integration/knife/client_key_list_spec.rb +0 -61
  479. data/spec/integration/knife/client_key_show_spec.rb +0 -45
  480. data/spec/integration/knife/client_list_spec.rb +0 -49
  481. data/spec/integration/knife/client_show_spec.rb +0 -37
  482. data/spec/integration/knife/common_options_spec.rb +0 -174
  483. data/spec/integration/knife/config_list_spec.rb +0 -220
  484. data/spec/integration/knife/config_show_spec.rb +0 -192
  485. data/spec/integration/knife/config_use_spec.rb +0 -198
  486. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +0 -113
  487. data/spec/integration/knife/cookbook_bulk_delete_spec.rb +0 -65
  488. data/spec/integration/knife/cookbook_download_spec.rb +0 -72
  489. data/spec/integration/knife/cookbook_list_spec.rb +0 -55
  490. data/spec/integration/knife/cookbook_show_spec.rb +0 -149
  491. data/spec/integration/knife/cookbook_upload_spec.rb +0 -128
  492. data/spec/integration/knife/data_bag_create_spec.rb +0 -125
  493. data/spec/integration/knife/data_bag_delete_spec.rb +0 -59
  494. data/spec/integration/knife/data_bag_edit_spec.rb +0 -105
  495. data/spec/integration/knife/data_bag_from_file_spec.rb +0 -116
  496. data/spec/integration/knife/data_bag_list_spec.rb +0 -44
  497. data/spec/integration/knife/data_bag_show_spec.rb +0 -95
  498. data/spec/integration/knife/delete_spec.rb +0 -1018
  499. data/spec/integration/knife/deps_spec.rb +0 -703
  500. data/spec/integration/knife/diff_spec.rb +0 -605
  501. data/spec/integration/knife/download_spec.rb +0 -1336
  502. data/spec/integration/knife/environment_compare_spec.rb +0 -75
  503. data/spec/integration/knife/environment_create_spec.rb +0 -41
  504. data/spec/integration/knife/environment_delete_spec.rb +0 -37
  505. data/spec/integration/knife/environment_from_file_spec.rb +0 -116
  506. data/spec/integration/knife/environment_list_spec.rb +0 -42
  507. data/spec/integration/knife/environment_show_spec.rb +0 -77
  508. data/spec/integration/knife/list_spec.rb +0 -1060
  509. data/spec/integration/knife/node_bulk_delete_spec.rb +0 -52
  510. data/spec/integration/knife/node_create_spec.rb +0 -47
  511. data/spec/integration/knife/node_delete_spec.rb +0 -48
  512. data/spec/integration/knife/node_environment_set_spec.rb +0 -46
  513. data/spec/integration/knife/node_from_file_spec.rb +0 -59
  514. data/spec/integration/knife/node_list_spec.rb +0 -45
  515. data/spec/integration/knife/node_run_list_add_spec.rb +0 -54
  516. data/spec/integration/knife/node_run_list_remove_spec.rb +0 -36
  517. data/spec/integration/knife/node_run_list_set_spec.rb +0 -41
  518. data/spec/integration/knife/node_show_spec.rb +0 -36
  519. data/spec/integration/knife/raw_spec.rb +0 -297
  520. data/spec/integration/knife/redirection_spec.rb +0 -64
  521. data/spec/integration/knife/role_bulk_delete_spec.rb +0 -52
  522. data/spec/integration/knife/role_create_spec.rb +0 -41
  523. data/spec/integration/knife/role_delete_spec.rb +0 -48
  524. data/spec/integration/knife/role_from_file_spec.rb +0 -96
  525. data/spec/integration/knife/role_list_spec.rb +0 -45
  526. data/spec/integration/knife/role_show_spec.rb +0 -51
  527. data/spec/integration/knife/search_node_spec.rb +0 -40
  528. data/spec/integration/knife/serve_spec.rb +0 -92
  529. data/spec/integration/knife/show_spec.rb +0 -197
  530. data/spec/integration/knife/upload_spec.rb +0 -1617
  531. data/spec/support/shared/functional/knife.rb +0 -37
  532. data/spec/support/shared/functional/win32_service.rb +0 -57
  533. data/spec/support/shared/integration/knife_support.rb +0 -192
  534. data/spec/support/shared/unit/knife_shared.rb +0 -39
  535. data/spec/unit/application/knife_spec.rb +0 -241
  536. data/spec/unit/chef_fs/parallelizer_spec.rb +0 -479
  537. data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -198
  538. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +0 -152
  539. data/spec/unit/knife/bootstrap/client_builder_spec.rb +0 -207
  540. data/spec/unit/knife/bootstrap/train_connector_spec.rb +0 -244
  541. data/spec/unit/knife/bootstrap_spec.rb +0 -2220
  542. data/spec/unit/knife/client_bulk_delete_spec.rb +0 -166
  543. data/spec/unit/knife/client_create_spec.rb +0 -169
  544. data/spec/unit/knife/client_delete_spec.rb +0 -99
  545. data/spec/unit/knife/client_edit_spec.rb +0 -53
  546. data/spec/unit/knife/client_list_spec.rb +0 -34
  547. data/spec/unit/knife/client_reregister_spec.rb +0 -62
  548. data/spec/unit/knife/client_show_spec.rb +0 -52
  549. data/spec/unit/knife/configure_client_spec.rb +0 -81
  550. data/spec/unit/knife/configure_spec.rb +0 -190
  551. data/spec/unit/knife/cookbook_bulk_delete_spec.rb +0 -87
  552. data/spec/unit/knife/cookbook_delete_spec.rb +0 -239
  553. data/spec/unit/knife/cookbook_download_spec.rb +0 -255
  554. data/spec/unit/knife/cookbook_list_spec.rb +0 -88
  555. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +0 -72
  556. data/spec/unit/knife/cookbook_metadata_spec.rb +0 -182
  557. data/spec/unit/knife/cookbook_show_spec.rb +0 -253
  558. data/spec/unit/knife/cookbook_upload_spec.rb +0 -364
  559. data/spec/unit/knife/core/bootstrap_context_spec.rb +0 -287
  560. data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +0 -187
  561. data/spec/unit/knife/core/gem_glob_loader_spec.rb +0 -209
  562. data/spec/unit/knife/core/hashed_command_loader_spec.rb +0 -112
  563. data/spec/unit/knife/core/node_editor_spec.rb +0 -211
  564. data/spec/unit/knife/core/object_loader_spec.rb +0 -81
  565. data/spec/unit/knife/core/status_presenter_spec.rb +0 -54
  566. data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -64
  567. data/spec/unit/knife/core/ui_spec.rb +0 -656
  568. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +0 -238
  569. data/spec/unit/knife/data_bag_create_spec.rb +0 -175
  570. data/spec/unit/knife/data_bag_edit_spec.rb +0 -126
  571. data/spec/unit/knife/data_bag_from_file_spec.rb +0 -174
  572. data/spec/unit/knife/data_bag_secret_options_spec.rb +0 -173
  573. data/spec/unit/knife/data_bag_show_spec.rb +0 -139
  574. data/spec/unit/knife/environment_compare_spec.rb +0 -112
  575. data/spec/unit/knife/environment_create_spec.rb +0 -91
  576. data/spec/unit/knife/environment_delete_spec.rb +0 -71
  577. data/spec/unit/knife/environment_edit_spec.rb +0 -79
  578. data/spec/unit/knife/environment_from_file_spec.rb +0 -90
  579. data/spec/unit/knife/environment_list_spec.rb +0 -54
  580. data/spec/unit/knife/environment_show_spec.rb +0 -52
  581. data/spec/unit/knife/key_create_spec.rb +0 -223
  582. data/spec/unit/knife/key_delete_spec.rb +0 -133
  583. data/spec/unit/knife/key_edit_spec.rb +0 -264
  584. data/spec/unit/knife/key_helper.rb +0 -74
  585. data/spec/unit/knife/key_list_spec.rb +0 -216
  586. data/spec/unit/knife/key_show_spec.rb +0 -126
  587. data/spec/unit/knife/node_bulk_delete_spec.rb +0 -94
  588. data/spec/unit/knife/node_delete_spec.rb +0 -77
  589. data/spec/unit/knife/node_edit_spec.rb +0 -116
  590. data/spec/unit/knife/node_environment_set_spec.rb +0 -61
  591. data/spec/unit/knife/node_from_file_spec.rb +0 -59
  592. data/spec/unit/knife/node_list_spec.rb +0 -62
  593. data/spec/unit/knife/node_policy_set_spec.rb +0 -122
  594. data/spec/unit/knife/node_run_list_add_spec.rb +0 -145
  595. data/spec/unit/knife/node_run_list_remove_spec.rb +0 -106
  596. data/spec/unit/knife/node_run_list_set_spec.rb +0 -115
  597. data/spec/unit/knife/node_show_spec.rb +0 -65
  598. data/spec/unit/knife/raw_spec.rb +0 -43
  599. data/spec/unit/knife/role_bulk_delete_spec.rb +0 -80
  600. data/spec/unit/knife/role_create_spec.rb +0 -80
  601. data/spec/unit/knife/role_delete_spec.rb +0 -67
  602. data/spec/unit/knife/role_edit_spec.rb +0 -77
  603. data/spec/unit/knife/role_env_run_list_add_spec.rb +0 -217
  604. data/spec/unit/knife/role_env_run_list_clear_spec.rb +0 -94
  605. data/spec/unit/knife/role_env_run_list_remove_spec.rb +0 -102
  606. data/spec/unit/knife/role_env_run_list_replace_spec.rb +0 -105
  607. data/spec/unit/knife/role_env_run_list_set_spec.rb +0 -99
  608. data/spec/unit/knife/role_from_file_spec.rb +0 -69
  609. data/spec/unit/knife/role_list_spec.rb +0 -54
  610. data/spec/unit/knife/role_run_list_add_spec.rb +0 -179
  611. data/spec/unit/knife/role_run_list_clear_spec.rb +0 -84
  612. data/spec/unit/knife/role_run_list_remove_spec.rb +0 -92
  613. data/spec/unit/knife/role_run_list_replace_spec.rb +0 -98
  614. data/spec/unit/knife/role_run_list_set_spec.rb +0 -89
  615. data/spec/unit/knife/role_show_spec.rb +0 -59
  616. data/spec/unit/knife/ssh_spec.rb +0 -403
  617. data/spec/unit/knife/ssl_check_spec.rb +0 -256
  618. data/spec/unit/knife/ssl_fetch_spec.rb +0 -222
  619. data/spec/unit/knife/status_spec.rb +0 -112
  620. data/spec/unit/knife/supermarket_download_spec.rb +0 -152
  621. data/spec/unit/knife/supermarket_install_spec.rb +0 -202
  622. data/spec/unit/knife/supermarket_list_spec.rb +0 -70
  623. data/spec/unit/knife/supermarket_search_spec.rb +0 -85
  624. data/spec/unit/knife/supermarket_share_spec.rb +0 -208
  625. data/spec/unit/knife/supermarket_unshare_spec.rb +0 -78
  626. data/spec/unit/knife/tag_create_spec.rb +0 -23
  627. data/spec/unit/knife/tag_delete_spec.rb +0 -25
  628. data/spec/unit/knife/tag_list_spec.rb +0 -23
  629. data/spec/unit/knife/user_create_spec.rb +0 -184
  630. data/spec/unit/knife/user_delete_spec.rb +0 -46
  631. data/spec/unit/knife/user_edit_spec.rb +0 -48
  632. data/spec/unit/knife/user_list_spec.rb +0 -36
  633. data/spec/unit/knife/user_reregister_spec.rb +0 -56
  634. data/spec/unit/knife/user_show_spec.rb +0 -46
  635. data/spec/unit/knife_spec.rb +0 -634
  636. data/spec/unit/provider/user/dscl_spec.rb +0 -699
  637. data/spec/unit/windows_service_spec.rb +0 -118
@@ -1,336 +0,0 @@
1
- # Copyright:: Copyright (c) Chef Software Inc.
2
- #
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 "train"
19
- require "tempfile" unless defined?(Tempfile)
20
- require "uri" unless defined?(URI)
21
- require "securerandom" unless defined?(SecureRandom)
22
-
23
- class Chef
24
- class Knife
25
- class Bootstrap < Knife
26
- class TrainConnector
27
- SSH_CONFIG_OVERRIDE_KEYS ||= %i{user port proxy}.freeze
28
-
29
- MKTEMP_WIN_COMMAND ||= <<~EOM.freeze
30
- $parent = [System.IO.Path]::GetTempPath();
31
- [string] $name = [System.Guid]::NewGuid();
32
- $tmp = New-Item -ItemType Directory -Path (Join-Path $parent $name);
33
- $tmp.FullName
34
- EOM
35
-
36
- DEFAULT_REMOTE_TEMP ||= "/tmp".freeze
37
-
38
- def initialize(host_url, default_protocol, opts)
39
- @host_url = host_url
40
- @default_protocol = default_protocol
41
- @opts_in = opts
42
- end
43
-
44
- def config
45
- @config ||= begin
46
- uri_opts = opts_from_uri(@host_url, @default_protocol)
47
- transport_config(@host_url, @opts_in.merge(uri_opts))
48
- end
49
- end
50
-
51
- def connection
52
- @connection ||= begin
53
- Train.validate_backend(config)
54
- train = Train.create(config[:backend], config)
55
- # Note that the train connection is not currently connected
56
- # to the remote host, but it's ready to go.
57
- train.connection
58
- end
59
- end
60
-
61
- #
62
- # Establish a connection to the configured host.
63
- #
64
- # @raise [TrainError]
65
- # @raise [TrainUserError]
66
- #
67
- # @return [TrueClass] true if the connection could be established.
68
- def connect!
69
- # Force connection to establish
70
- connection.wait_until_ready
71
- true
72
- end
73
-
74
- #
75
- # @return [String] the configured hostname
76
- def hostname
77
- config[:host]
78
- end
79
-
80
- # Answers the question, "is this connection configured for password auth?"
81
- # @return [Boolean] true if the connection is configured with password auth
82
- def password_auth?
83
- config.key? :password
84
- end
85
-
86
- # Answers the question, "Am I connected to a linux host?"
87
- #
88
- # @return [Boolean] true if the connected host is linux.
89
- def linux?
90
- connection.platform.linux?
91
- end
92
-
93
- # Answers the question, "Am I connected to a unix host?"
94
- #
95
- # @note this will always return true for a linux host
96
- # because train classifies linux as a unix
97
- #
98
- # @return [Boolean] true if the connected host is unix or linux
99
- def unix?
100
- connection.platform.unix?
101
- end
102
-
103
- #
104
- # Answers the question, "Am I connected to a Windows host?"
105
- #
106
- # @return [Boolean] true if the connected host is Windows
107
- def windows?
108
- connection.platform.windows?
109
- end
110
-
111
- #
112
- # Creates a temporary directory on the remote host if it
113
- # hasn't already. Caches directory location. For *nix,
114
- # it will ensure that the directory is owned by the logged-in user
115
- #
116
- # @return [String] the temporary path created on the remote host.
117
- def temp_dir
118
- @tmpdir ||= begin
119
- if windows?
120
- run_command!(MKTEMP_WIN_COMMAND).stdout.split.last
121
- else
122
- # Get a 6 chars string using secure random
123
- # eg. /tmp/chef_XXXXXX.
124
- # Use mkdir to create TEMP dir to get rid of mktemp
125
- dir = "#{DEFAULT_REMOTE_TEMP}/chef_#{SecureRandom.alphanumeric(6)}"
126
- run_command!("mkdir -p '#{dir}'")
127
- # Ensure that dir has the correct owner. We are possibly
128
- # running with sudo right now - so this directory would be owned by root.
129
- # File upload is performed over SCP as the current logged-in user,
130
- # so we'll set ownership to ensure that works.
131
- run_command!("chown #{config[:user]} '#{dir}'") if config[:sudo]
132
-
133
- dir
134
- end
135
- end
136
- end
137
-
138
- #
139
- # Uploads a file from "local_path" to "remote_path"
140
- #
141
- # @param local_path [String] The path to a file on the local file system
142
- # @param remote_path [String] The destination path on the remote file system.
143
- # @return NilClass
144
- def upload_file!(local_path, remote_path)
145
- connection.upload(local_path, remote_path)
146
- nil
147
- end
148
-
149
- #
150
- # Uploads the provided content into the file "remote_path" on the remote host.
151
- #
152
- # @param content [String] The content to upload into remote_path
153
- # @param remote_path [String] The destination path on the remote file system.
154
- # @return NilClass
155
- def upload_file_content!(content, remote_path)
156
- t = Tempfile.new("chef-content")
157
- t.binmode
158
- t << content
159
- t.close
160
- upload_file!(t.path, remote_path)
161
- nil
162
- ensure
163
- t.close
164
- t.unlink
165
- end
166
-
167
- #
168
- # Force-deletes the file at "path" from the remote host.
169
- #
170
- # @param path [String] The path of the file on the remote host
171
- def del_file!(path)
172
- if windows?
173
- run_command!("If (Test-Path \"#{path}\") { Remove-Item -Force -Path \"#{path}\" }")
174
- else
175
- run_command!("rm -f \"#{path}\"")
176
- end
177
- nil
178
- end
179
-
180
- #
181
- # normalizes path across OS's - always use forward slashes, which
182
- # Windows and *nix understand.
183
- #
184
- # @param path [String] The path to normalize
185
- #
186
- # @return [String] the normalized path
187
- def normalize_path(path)
188
- path.tr("\\", "/")
189
- end
190
-
191
- #
192
- # Runs a command on the remote host.
193
- #
194
- # @param command [String] The command to run.
195
- # @param data_handler [Proc] An optional block. When provided, inbound data will be
196
- # published via `data_handler.call(data)`. This can allow
197
- # callers to receive and render updates from remote command execution.
198
- #
199
- # @return [Train::Extras::CommandResult] an object containing stdout, stderr, and exit_status
200
- def run_command(command, &data_handler)
201
- connection.run_command(command, &data_handler)
202
- end
203
-
204
- #
205
- # Runs a command the remote host
206
- #
207
- # @param command [String] The command to run.
208
- # @param data_handler [Proc] An optional block. When provided, inbound data will be
209
- # published via `data_handler.call(data)`. This can allow
210
- # callers to receive and render updates from remote command execution.
211
- #
212
- # @raise Chef::Knife::Bootstrap::RemoteExecutionFailed if an error occurs (non-zero exit status)
213
- # @return [Train::Extras::CommandResult] an object containing stdout, stderr, and exit_status
214
- def run_command!(command, &data_handler)
215
- result = run_command(command, &data_handler)
216
- if result.exit_status != 0
217
- raise RemoteExecutionFailed.new(hostname, command, result)
218
- end
219
-
220
- result
221
- end
222
-
223
- private
224
-
225
- # For a given url and set of options, create a config
226
- # hash suitable for passing into train.
227
- def transport_config(host_url, opts_in)
228
- # These baseline opts are not protocol-specific
229
- opts = { target: host_url,
230
- www_form_encoded_password: true,
231
- transport_retries: 2,
232
- transport_retry_sleep: 1,
233
- backend: opts_in[:backend],
234
- logger: opts_in[:logger] }
235
-
236
- # Accepts options provided by caller if they're not already configured,
237
- # but note that they will be constrained to valid options for the backend protocol
238
- opts.merge!(opts_from_caller(opts, opts_in))
239
-
240
- # WinRM has some additional computed options
241
- opts.merge!(opts_inferred_from_winrm(opts, opts_in))
242
-
243
- # Now that everything is populated, fill in anything missing
244
- # that may be found in user ssh config
245
- opts.merge!(missing_opts_from_ssh_config(opts, opts_in))
246
-
247
- Train.target_config(opts)
248
- end
249
-
250
- # Some winrm options are inferred based on other options.
251
- # Return a hash of winrm options based on configuration already built.
252
- def opts_inferred_from_winrm(config, opts_in)
253
- return {} unless config[:backend] == "winrm"
254
-
255
- opts_out = {}
256
-
257
- if opts_in[:ssl]
258
- opts_out[:ssl] = true
259
- opts_out[:self_signed] = opts_in[:self_signed] || false
260
- end
261
-
262
- # See note here: https://github.com/mwrock/WinRM#example
263
- if %w{ssl plaintext}.include?(opts_in[:winrm_auth_method])
264
- opts_out[:winrm_disable_sspi] = true
265
- end
266
- opts_out
267
- end
268
-
269
- # Returns a hash containing valid options for the current
270
- # transport protocol that are not already present in config
271
- def opts_from_caller(config, opts_in)
272
- # Train.options gives us the supported config options for the
273
- # backend provider (ssh, winrm). We'll use that
274
- # to filter out options that don't belong
275
- # to the transport type we're using.
276
- valid_opts = Train.options(config[:backend])
277
- opts_in.select do |key, _v|
278
- valid_opts.key?(key) && !config.key?(key)
279
- end
280
- end
281
-
282
- # Extract any of username/password/host/port/transport
283
- # that are in the URI and return them as a config has
284
- def opts_from_uri(uri, default_protocol)
285
- # Train.unpack_target_from_uri only works for complete URIs in
286
- # form of proto://[user[:pass]@]host[:port]/
287
- # So we'll add the protocol prefix if it's not supplied.
288
- uri_to_check = if URI::DEFAULT_PARSER.make_regexp.match(uri)
289
- uri
290
- else
291
- "#{default_protocol}://#{uri}"
292
- end
293
-
294
- Train.unpack_target_from_uri(uri_to_check)
295
- end
296
-
297
- # This returns a hash that consists of settings
298
- # populated from SSH configuration that are not already present
299
- # in the configuration passed in.
300
- # This is necessary because train will default these values
301
- # itself - causing SSH config data to be ignored
302
- def missing_opts_from_ssh_config(config, opts_in)
303
- return {} unless config[:backend] == "ssh"
304
-
305
- host_cfg = ssh_config_for_host(config[:host])
306
- opts_out = {}
307
- opts_in.each do |key, _value|
308
- if SSH_CONFIG_OVERRIDE_KEYS.include?(key) && !config.key?(key)
309
- opts_out[key] = host_cfg[key]
310
- end
311
- end
312
- opts_out
313
- end
314
-
315
- # Having this as a method makes it easier to mock
316
- # SSH Config for testing.
317
- def ssh_config_for_host(host)
318
- require "net/ssh" unless defined?(Net::SSH)
319
- Net::SSH::Config.for(host)
320
- end
321
- end
322
-
323
- class RemoteExecutionFailed < StandardError
324
- attr_reader :exit_status, :command, :hostname, :stdout, :stderr
325
-
326
- def initialize(hostname, command, result)
327
- @hostname = hostname
328
- @exit_status = result.exit_status
329
- @stderr = result.stderr
330
- @stdout = result.stdout
331
- end
332
- end
333
-
334
- end
335
- end
336
- end