vagrant-unbundled 2.2.7.0 → 2.2.16.0

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 (282) hide show
  1. checksums.yaml +4 -4
  2. data/.hashibot.hcl +2 -0
  3. data/CHANGELOG.md +228 -0
  4. data/Gemfile +1 -1
  5. data/README.md +9 -51
  6. data/RELEASE.md +1 -1
  7. data/bin/vagrant +50 -1
  8. data/contrib/README.md +1 -0
  9. data/contrib/sudoers/linux-suse +2 -2
  10. data/contrib/zsh/_vagrant +738 -0
  11. data/contrib/zsh/generate_zsh_completion.rb +165 -0
  12. data/lib/vagrant.rb +28 -5
  13. data/lib/vagrant/action.rb +7 -0
  14. data/lib/vagrant/action/builder.rb +184 -38
  15. data/lib/vagrant/action/builtin/box_add.rb +24 -8
  16. data/lib/vagrant/action/builtin/box_check_outdated.rb +2 -1
  17. data/lib/vagrant/action/builtin/cleanup_disks.rb +56 -0
  18. data/lib/vagrant/action/builtin/cloud_init_setup.rb +122 -0
  19. data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
  20. data/lib/vagrant/action/builtin/delayed.rb +26 -0
  21. data/lib/vagrant/action/builtin/disk.rb +14 -1
  22. data/lib/vagrant/action/builtin/handle_box.rb +3 -1
  23. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +28 -9
  24. data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
  25. data/lib/vagrant/action/builtin/mixin_provisioners.rb +1 -0
  26. data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
  27. data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
  28. data/lib/vagrant/action/builtin/synced_folders.rb +16 -0
  29. data/lib/vagrant/action/builtin/trigger.rb +37 -0
  30. data/lib/vagrant/action/hook.rb +76 -23
  31. data/lib/vagrant/action/runner.rb +12 -27
  32. data/lib/vagrant/action/warden.rb +28 -31
  33. data/lib/vagrant/box.rb +11 -4
  34. data/lib/vagrant/box_collection.rb +1 -1
  35. data/lib/vagrant/bundler.rb +310 -61
  36. data/lib/vagrant/cli.rb +4 -2
  37. data/lib/vagrant/environment.rb +1 -0
  38. data/lib/vagrant/errors.rb +69 -1
  39. data/lib/vagrant/machine.rb +64 -11
  40. data/lib/vagrant/machine_index.rb +28 -1
  41. data/lib/vagrant/patches/net-ssh.rb +186 -0
  42. data/lib/vagrant/plugin/manager.rb +45 -16
  43. data/lib/vagrant/plugin/v2/command.rb +7 -2
  44. data/lib/vagrant/plugin/v2/components.rb +6 -0
  45. data/lib/vagrant/plugin/v2/manager.rb +67 -0
  46. data/lib/vagrant/plugin/v2/plugin.rb +13 -0
  47. data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
  48. data/lib/vagrant/plugin/v2/trigger.rb +64 -25
  49. data/lib/vagrant/shared_helpers.rb +36 -0
  50. data/lib/vagrant/ui.rb +43 -2
  51. data/lib/vagrant/util.rb +2 -0
  52. data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
  53. data/lib/vagrant/util/caps.rb +48 -0
  54. data/lib/vagrant/util/credential_scrubber.rb +1 -1
  55. data/lib/vagrant/util/curl_helper.rb +12 -8
  56. data/lib/vagrant/util/directory.rb +19 -0
  57. data/lib/vagrant/util/downloader.rb +10 -5
  58. data/lib/vagrant/util/guest_hosts.rb +68 -0
  59. data/lib/vagrant/util/guest_inspection.rb +9 -1
  60. data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
  61. data/lib/vagrant/util/io.rb +7 -27
  62. data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
  63. data/lib/vagrant/util/is_port_open.rb +8 -19
  64. data/lib/vagrant/util/map_command_options.rb +33 -0
  65. data/lib/vagrant/util/mime.rb +92 -0
  66. data/lib/vagrant/util/network_ip.rb +11 -1
  67. data/lib/vagrant/util/numeric.rb +28 -0
  68. data/lib/vagrant/util/platform.rb +10 -2
  69. data/lib/vagrant/util/powershell.rb +31 -15
  70. data/lib/vagrant/util/subprocess.rb +9 -1
  71. data/lib/vagrant/util/template_renderer.rb +2 -2
  72. data/lib/vagrant/util/uploader.rb +7 -4
  73. data/lib/vagrant/vagrantfile.rb +2 -2
  74. data/plugins/commands/autocomplete/command/install.rb +49 -0
  75. data/plugins/commands/autocomplete/command/root.rb +64 -0
  76. data/plugins/commands/autocomplete/plugin.rb +18 -0
  77. data/plugins/commands/cap/command.rb +5 -1
  78. data/plugins/commands/cloud/auth/login.rb +20 -23
  79. data/plugins/commands/cloud/auth/logout.rb +2 -10
  80. data/plugins/commands/cloud/auth/middleware/add_authentication.rb +60 -31
  81. data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +64 -0
  82. data/plugins/commands/cloud/auth/whoami.rb +18 -20
  83. data/plugins/commands/cloud/box/create.rb +33 -29
  84. data/plugins/commands/cloud/box/delete.rb +30 -24
  85. data/plugins/commands/cloud/box/show.rb +41 -31
  86. data/plugins/commands/cloud/box/update.rb +34 -26
  87. data/plugins/commands/cloud/client/client.rb +55 -79
  88. data/plugins/commands/cloud/list.rb +3 -4
  89. data/plugins/commands/cloud/locales/en.yml +15 -11
  90. data/plugins/commands/cloud/plugin.rb +10 -0
  91. data/plugins/commands/cloud/provider/create.rb +38 -28
  92. data/plugins/commands/cloud/provider/delete.rb +39 -29
  93. data/plugins/commands/cloud/provider/update.rb +37 -28
  94. data/plugins/commands/cloud/provider/upload.rb +53 -33
  95. data/plugins/commands/cloud/publish.rb +193 -106
  96. data/plugins/commands/cloud/search.rb +34 -21
  97. data/plugins/commands/cloud/util.rb +273 -161
  98. data/plugins/commands/cloud/version/create.rb +33 -28
  99. data/plugins/commands/cloud/version/delete.rb +35 -28
  100. data/plugins/commands/cloud/version/release.rb +35 -29
  101. data/plugins/commands/cloud/version/revoke.rb +36 -29
  102. data/plugins/commands/cloud/version/update.rb +29 -25
  103. data/plugins/commands/destroy/command.rb +7 -7
  104. data/plugins/commands/login/plugin.rb +0 -13
  105. data/plugins/commands/ssh_config/command.rb +1 -1
  106. data/plugins/communicators/ssh/communicator.rb +25 -24
  107. data/plugins/communicators/winrm/config.rb +1 -1
  108. data/plugins/communicators/winrm/helper.rb +1 -1
  109. data/plugins/communicators/winrm/shell.rb +1 -1
  110. data/plugins/communicators/winssh/communicator.rb +126 -38
  111. data/plugins/communicators/winssh/config.rb +3 -7
  112. data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
  113. data/plugins/guests/alpine/cap/configure_networks.rb +1 -1
  114. data/plugins/guests/alt/cap/change_host_name.rb +40 -53
  115. data/plugins/guests/arch/cap/change_host_name.rb +5 -14
  116. data/plugins/guests/arch/cap/configure_networks.rb +27 -10
  117. data/plugins/guests/arch/cap/smb.rb +1 -1
  118. data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
  119. data/plugins/guests/centos/cap/flavor.rb +24 -0
  120. data/plugins/guests/centos/guest.rb +9 -0
  121. data/plugins/guests/centos/plugin.rb +20 -0
  122. data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
  123. data/plugins/guests/darwin/cap/darwin_version.rb +40 -0
  124. data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +1 -1
  125. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +33 -10
  126. data/plugins/guests/darwin/plugin.rb +15 -0
  127. data/plugins/guests/debian/cap/change_host_name.rb +12 -11
  128. data/plugins/guests/debian/cap/configure_networks.rb +14 -6
  129. data/plugins/guests/esxi/cap/public_key.rb +3 -1
  130. data/plugins/guests/fedora/guest.rb +4 -4
  131. data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
  132. data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
  133. data/plugins/guests/haiku/cap/rsync.rb +19 -0
  134. data/plugins/guests/haiku/plugin.rb +15 -0
  135. data/plugins/guests/linux/cap/change_host_name.rb +46 -0
  136. data/plugins/guests/linux/cap/halt.rb +9 -1
  137. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +25 -34
  138. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +10 -11
  139. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +74 -0
  140. data/plugins/guests/linux/cap/reboot.rb +36 -7
  141. data/plugins/guests/linux/plugin.rb +10 -0
  142. data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
  143. data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
  144. data/plugins/guests/openwrt/cap/change_host_name.rb +19 -0
  145. data/plugins/guests/openwrt/cap/halt.rb +16 -0
  146. data/plugins/guests/openwrt/cap/insert_public_key.rb +20 -0
  147. data/plugins/guests/openwrt/cap/remove_public_key.rb +22 -0
  148. data/plugins/guests/openwrt/cap/rsync.rb +35 -0
  149. data/plugins/guests/openwrt/guest.rb +23 -0
  150. data/plugins/guests/openwrt/plugin.rb +61 -0
  151. data/plugins/guests/photon/cap/change_host_name.rb +9 -15
  152. data/plugins/guests/pld/cap/change_host_name.rb +11 -17
  153. data/plugins/guests/redhat/cap/change_host_name.rb +14 -5
  154. data/plugins/guests/redhat/cap/flavor.rb +3 -1
  155. data/plugins/guests/redhat/cap/smb.rb +20 -0
  156. data/plugins/guests/redhat/plugin.rb +5 -0
  157. data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
  158. data/plugins/guests/solaris11/plugin.rb +5 -0
  159. data/plugins/guests/suse/cap/change_host_name.rb +31 -9
  160. data/plugins/guests/windows/cap/public_key.rb +3 -3
  161. data/plugins/guests/windows/cap/reboot.rb +10 -5
  162. data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
  163. data/plugins/hosts/darwin/plugin.rb +10 -0
  164. data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
  165. data/plugins/hosts/linux/cap/nfs.rb +1 -0
  166. data/plugins/hosts/linux/cap/rdp.rb +1 -1
  167. data/plugins/hosts/linux/plugin.rb +10 -0
  168. data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
  169. data/plugins/hosts/windows/cap/rdp.rb +1 -1
  170. data/plugins/hosts/windows/plugin.rb +15 -0
  171. data/plugins/kernel_v2/config/cloud_init.rb +133 -0
  172. data/plugins/kernel_v2/config/disk.rb +67 -14
  173. data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
  174. data/plugins/kernel_v2/config/vm.rb +155 -21
  175. data/plugins/kernel_v2/config/vm_provisioner.rb +13 -2
  176. data/plugins/kernel_v2/config/vm_trigger.rb +6 -5
  177. data/plugins/providers/docker/action.rb +8 -17
  178. data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
  179. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
  180. data/plugins/providers/docker/cap/has_communicator.rb +11 -0
  181. data/plugins/providers/docker/communicator.rb +1 -1
  182. data/plugins/providers/docker/driver.rb +58 -7
  183. data/plugins/providers/docker/plugin.rb +5 -0
  184. data/plugins/providers/hyperv/action.rb +3 -1
  185. data/plugins/providers/hyperv/action/configure.rb +8 -0
  186. data/plugins/providers/hyperv/action/export.rb +4 -2
  187. data/plugins/providers/hyperv/cap/cleanup_disks.rb +54 -0
  188. data/plugins/providers/hyperv/cap/configure_disks.rb +200 -0
  189. data/plugins/providers/hyperv/cap/validate_disk_ext.rb +34 -0
  190. data/plugins/providers/hyperv/config.rb +5 -0
  191. data/plugins/providers/hyperv/driver.rb +90 -9
  192. data/plugins/providers/hyperv/plugin.rb +25 -0
  193. data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +28 -0
  194. data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +13 -0
  195. data/plugins/providers/hyperv/scripts/get_vhd.ps1 +16 -0
  196. data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +1 -1
  197. data/plugins/providers/hyperv/scripts/list_hdds.ps1 +17 -0
  198. data/plugins/providers/hyperv/scripts/new_vhd.ps1 +31 -0
  199. data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +25 -0
  200. data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +18 -0
  201. data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +24 -0
  202. data/plugins/providers/hyperv/scripts/set_vm_integration_services.ps1 +3 -3
  203. data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +14 -6
  204. data/plugins/providers/virtualbox/action.rb +13 -1
  205. data/plugins/providers/virtualbox/action/export.rb +4 -2
  206. data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
  207. data/plugins/providers/virtualbox/action/import.rb +8 -4
  208. data/plugins/providers/virtualbox/action/network.rb +12 -5
  209. data/plugins/providers/virtualbox/action/prepare_clone_snapshot.rb +4 -2
  210. data/plugins/providers/virtualbox/action/snapshot_delete.rb +4 -2
  211. data/plugins/providers/virtualbox/action/snapshot_restore.rb +4 -2
  212. data/plugins/providers/virtualbox/cap/cleanup_disks.rb +85 -0
  213. data/plugins/providers/virtualbox/cap/configure_disks.rb +440 -0
  214. data/plugins/providers/virtualbox/cap/mount_options.rb +40 -0
  215. data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +34 -0
  216. data/plugins/providers/virtualbox/driver/base.rb +15 -0
  217. data/plugins/providers/virtualbox/driver/meta.rb +16 -2
  218. data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
  219. data/plugins/providers/virtualbox/driver/version_6_1.rb +23 -0
  220. data/plugins/providers/virtualbox/model/storage_controller.rb +135 -0
  221. data/plugins/providers/virtualbox/model/storage_controller_array.rb +98 -0
  222. data/plugins/providers/virtualbox/plugin.rb +42 -0
  223. data/plugins/providers/virtualbox/provider.rb +2 -1
  224. data/plugins/providers/virtualbox/synced_folder.rb +1 -0
  225. data/plugins/provisioners/ansible/cap/guest/alpine/ansible_install.rb +44 -0
  226. data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +1 -1
  227. data/plugins/provisioners/ansible/plugin.rb +5 -0
  228. data/plugins/provisioners/ansible/provisioner/base.rb +1 -1
  229. data/plugins/provisioners/container/client.rb +203 -0
  230. data/plugins/provisioners/container/config.rb +83 -0
  231. data/plugins/provisioners/container/installer.rb +13 -0
  232. data/plugins/provisioners/container/plugin.rb +23 -0
  233. data/plugins/provisioners/container/provisioner.rb +28 -0
  234. data/plugins/provisioners/docker/cap/{redhat → centos}/docker_install.rb +10 -7
  235. data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +24 -0
  236. data/plugins/provisioners/docker/client.rb +4 -175
  237. data/plugins/provisioners/docker/config.rb +2 -72
  238. data/plugins/provisioners/docker/installer.rb +3 -5
  239. data/plugins/provisioners/docker/plugin.rb +6 -6
  240. data/plugins/provisioners/docker/provisioner.rb +4 -10
  241. data/plugins/provisioners/podman/cap/centos/podman_install.rb +35 -0
  242. data/plugins/provisioners/podman/cap/linux/podman_installed.rb +13 -0
  243. data/plugins/provisioners/podman/cap/redhat/podman_install.rb +26 -0
  244. data/plugins/provisioners/podman/client.rb +12 -0
  245. data/plugins/provisioners/podman/config.rb +28 -0
  246. data/plugins/provisioners/podman/installer.rb +33 -0
  247. data/plugins/provisioners/podman/plugin.rb +38 -0
  248. data/plugins/provisioners/podman/provisioner.rb +52 -0
  249. data/plugins/provisioners/salt/bootstrap-salt.sh +7 -4
  250. data/plugins/provisioners/salt/provisioner.rb +4 -0
  251. data/plugins/provisioners/shell/config.rb +1 -6
  252. data/plugins/provisioners/shell/provisioner.rb +61 -26
  253. data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
  254. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
  255. data/plugins/synced_folders/smb/cap/mount_options.rb +56 -0
  256. data/plugins/synced_folders/smb/plugin.rb +20 -0
  257. data/plugins/synced_folders/smb/synced_folder.rb +2 -2
  258. data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
  259. data/scripts/website_push_www.sh +1 -1
  260. data/templates/commands/init/Vagrantfile.min.erb +3 -0
  261. data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
  262. data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
  263. data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
  264. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  265. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  266. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  267. data/templates/guests/linux/etc_fstab.erb +6 -0
  268. data/templates/guests/nixos/network.erb +5 -6
  269. data/templates/locales/en.yml +221 -5
  270. data/templates/locales/providers_docker.yml +4 -0
  271. data/templates/nfs/exports_darwin.erb +1 -1
  272. data/vagrant.gemspec +14 -20
  273. data/version.txt +1 -1
  274. metadata +5092 -8978
  275. data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
  276. data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
  277. data/plugins/commands/login/client.rb +0 -253
  278. data/plugins/commands/login/command.rb +0 -137
  279. data/plugins/commands/login/errors.rb +0 -24
  280. data/plugins/commands/login/locales/en.yml +0 -49
  281. data/plugins/provisioners/docker/cap/redhat/docker_start_service.rb +0 -16
  282. data/scripts/website_push_docs.sh +0 -40
@@ -5,6 +5,25 @@ module VagrantPlugins
5
5
  module Cap
6
6
  class MountVmwareSharedFolder
7
7
 
8
+ MACOS_BIGSUR_DARWIN_VERSION = 20.freeze
9
+
10
+ # Entry point for hook to called delayed actions
11
+ # which finalizing the synced folders setup on
12
+ # the guest
13
+ def self.write_apfs_firmlinks(env)
14
+ if env && env[:machine] && delayed = apfs_firmlinks_delayed.delete(env[:machine].id)
15
+ delayed.call
16
+ end
17
+ end
18
+
19
+ # @return [Hash] storage location for delayed actions
20
+ def self.apfs_firmlinks_delayed
21
+ if !@_apfs_firmlinks
22
+ @_apfs_firmlinks = {}
23
+ end
24
+ @_apfs_firmlinks
25
+ end
26
+
8
27
  # we seem to be unable to ask 'mount -t vmhgfs' to mount the roots
9
28
  # of specific shares, so instead we symlink from what is already
10
29
  # mounted by the guest tools
@@ -61,17 +80,21 @@ module VagrantPlugins
61
80
 
62
81
  # If we haven't already added our hook to apply firmlinks, do it now
63
82
  if @apply_firmlinks[machine.id][:content].empty?
64
- Plugin.action_hook(:apfs_firmlinks, :after_synced_folders) do |hook|
65
- action = proc { |*_|
66
- content = @apply_firmlinks[machine.id][:content].join("\n")
67
- # Write out the synthetic file
68
- comm.sudo("echo -e #{content.inspect} > /etc/synthetic.conf")
69
- if @apply_firmlinks[:bootstrap]
70
- # Re-bootstrap the root container to pick up firmlink updates
71
- comm.sudo("/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -B")
83
+ apfs_firmlinks_delayed[machine.id] = proc do
84
+ content = @apply_firmlinks[machine.id][:content].join("\n")
85
+ # Write out the synthetic file
86
+ comm.sudo("echo -e #{content.inspect} > /etc/synthetic.conf")
87
+ if @apply_firmlinks[machine.id][:bootstrap]
88
+ if machine.guest.capability("darwin_major_version").to_i < MACOS_BIGSUR_DARWIN_VERSION
89
+ apfs_bootstrap_flag = "-B"
90
+ expected_rc = 0
91
+ else
92
+ apfs_bootstrap_flag = "-t"
93
+ expected_rc = 253
72
94
  end
73
- }
74
- hook.prepend(action)
95
+ # Re-bootstrap the root container to pick up firmlink updates
96
+ comm.sudo("/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util #{apfs_bootstrap_flag}", good_exit: [expected_rc])
97
+ end
75
98
  end
76
99
  end
77
100
  @apply_firmlinks[machine.id][:content] << share_line
@@ -6,6 +6,11 @@ module VagrantPlugins
6
6
  name "Darwin guest"
7
7
  description "Darwin guest support."
8
8
 
9
+ action_hook(:apfs_firmlinks, :synced_folders) do |hook|
10
+ require_relative "cap/mount_vmware_shared_folder"
11
+ hook.prepend(Vagrant::Action::Builtin::Delayed, Cap::MountVmwareSharedFolder.method(:write_apfs_firmlinks))
12
+ end
13
+
9
14
  guest(:darwin, :bsd) do
10
15
  require_relative "guest"
11
16
  Guest
@@ -26,6 +31,16 @@ module VagrantPlugins
26
31
  Cap::ConfigureNetworks
27
32
  end
28
33
 
34
+ guest_capability(:darwin, :darwin_version) do
35
+ require_relative "cap/darwin_version"
36
+ Cap::DarwinVersion
37
+ end
38
+
39
+ guest_capability(:darwin, :darwin_major_version) do
40
+ require_relative "cap/darwin_version"
41
+ Cap::DarwinVersion
42
+ end
43
+
29
44
  guest_capability(:darwin, :halt) do
30
45
  require_relative "cap/halt"
31
46
  Cap::Halt
@@ -1,4 +1,6 @@
1
1
  require "log4r"
2
+ require 'vagrant/util/guest_hosts'
3
+ require 'vagrant/util/guest_inspection'
2
4
  require_relative "../../linux/cap/network_interfaces"
3
5
 
4
6
  module VagrantPlugins
@@ -7,26 +9,25 @@ module VagrantPlugins
7
9
  class ChangeHostName
8
10
 
9
11
  extend Vagrant::Util::GuestInspection::Linux
12
+ extend Vagrant::Util::GuestHosts::Linux
10
13
 
11
14
  def self.change_host_name(machine, name)
12
15
  @logger = Log4r::Logger.new("vagrant::guest::debian::changehostname")
13
16
  comm = machine.communicate
14
17
 
15
18
  if !comm.test("hostname -f | grep '^#{name}$'", sudo: false)
19
+ network_with_hostname = machine.config.vm.networks.map {|_, c| c if c[:hostname] }.compact[0]
20
+ if network_with_hostname
21
+ replace_host(comm, name, network_with_hostname[:ip])
22
+ else
23
+ add_hostname_to_loopback_interface(comm, name)
24
+ end
25
+
16
26
  basename = name.split(".", 2)[0]
17
27
  comm.sudo <<-EOH.gsub(/^ {14}/, '')
18
28
  # Set the hostname
19
29
  echo '#{basename}' > /etc/hostname
20
30
 
21
- # Prepend ourselves to /etc/hosts
22
- grep -w '#{name}' /etc/hosts || {
23
- if grep -w '^127\\.0\\.1\\.1' /etc/hosts ; then
24
- sed -i'' 's/^127\\.0\\.1\\.1\\s.*$/127.0.1.1\\t#{name}\\t#{basename}/' /etc/hosts
25
- else
26
- sed -i'' '1i 127.0.1.1\\t#{name}\\t#{basename}' /etc/hosts
27
- fi
28
- }
29
-
30
31
  # Update mailname
31
32
  echo '#{name}' > /etc/mailname
32
33
 
@@ -83,10 +84,10 @@ module VagrantPlugins
83
84
  interfaces = VagrantPlugins::GuestLinux::Cap::NetworkInterfaces.network_interfaces(machine)
84
85
  nettools = true
85
86
  if systemd?(comm)
86
- @logger.debug("Attempting to restart networking with systemctl")
87
+ logger.debug("Attempting to restart networking with systemctl")
87
88
  nettools = false
88
89
  else
89
- @logger.debug("Attempting to restart networking with ifup/down nettools")
90
+ logger.debug("Attempting to restart networking with ifup/down nettools")
90
91
  end
91
92
 
92
93
  interfaces.each do |iface|
@@ -10,7 +10,6 @@ module VagrantPlugins
10
10
  extend Vagrant::Util::GuestInspection::Linux
11
11
 
12
12
  NETPLAN_DEFAULT_VERSION = 2
13
- NETPLAN_DEFAULT_RENDERER = "networkd".freeze
14
13
  NETPLAN_DIRECTORY = "/etc/netplan".freeze
15
14
  NETWORKD_DIRECTORY = "/etc/systemd/network".freeze
16
15
 
@@ -61,12 +60,21 @@ module VagrantPlugins
61
60
  # By default, netplan expects the renderer to be systemd-networkd,
62
61
  # but if any device is managed by NetworkManager, then we use that renderer
63
62
  # ref: https://netplan.io/reference
64
- renderer = NETPLAN_DEFAULT_RENDERER
65
- ethernets.keys.each do |k|
66
- if nm_controlled?(comm, k)
67
- renderer = "NetworkManager"
68
- break
63
+ if systemd_networkd?(comm)
64
+ renderer = "networkd"
65
+ ethernets.keys.each do |k|
66
+ if nm_controlled?(comm, k)
67
+ render = "NetworkManager"
68
+ if !nmcli?(comm)
69
+ raise Vagrant::Errors::NetworkManagerNotInstalled, device: k
70
+ end
71
+ break
72
+ end
69
73
  end
74
+ elsif nmcli?(comm)
75
+ renderer = "NetworkManager"
76
+ else
77
+ raise Vagrant::Errors::NetplanNoAvailableRenderers
70
78
  end
71
79
 
72
80
  np_config = {"network" => {"version" => NETPLAN_DEFAULT_VERSION,
@@ -24,7 +24,9 @@ module VagrantPlugins
24
24
  set -e
25
25
  SSH_DIR="$(grep -q '^AuthorizedKeysFile\s*\/etc\/ssh\/keys-%u\/authorized_keys$' /etc/ssh/sshd_config && echo -n /etc/ssh/keys-${USER} || echo -n ~/.ssh)"
26
26
  mkdir -p "${SSH_DIR}"
27
- chmod 0700 "${SSH_DIR}"
27
+ # NB in ESXi 7.0 we cannot change the /etc/ssh/keys-root directory
28
+ # permissions, so ignore any errors.
29
+ chmod 0700 "${SSH_DIR}" || true
28
30
  cat '#{remote_path}' >> "${SSH_DIR}/authorized_keys"
29
31
  chmod 0600 "${SSH_DIR}/authorized_keys"
30
32
  rm -f '#{remote_path}'
@@ -1,11 +1,11 @@
1
1
  require "vagrant"
2
+ require_relative '../linux/guest'
2
3
 
3
4
  module VagrantPlugins
4
5
  module GuestFedora
5
- class Guest < Vagrant.plugin("2", :guest)
6
- def detect?(machine)
7
- machine.communicate.test("grep 'Fedora release' /etc/redhat-release")
8
- end
6
+ class Guest < VagrantPlugins::GuestLinux::Guest
7
+ # Name used for guest detection
8
+ GUEST_DETECTION_NAME = "fedora".freeze
9
9
  end
10
10
  end
11
11
  end
@@ -1,7 +1,11 @@
1
+ require 'vagrant/util/guest_hosts'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestFreeBSD
3
5
  module Cap
4
6
  class ChangeHostName
7
+ extend Vagrant::Util::GuestHosts::BSD
8
+
5
9
  def self.change_host_name(machine, name)
6
10
  comm = machine.communicate
7
11
 
@@ -11,15 +15,15 @@ module VagrantPlugins
11
15
  # Set the hostname
12
16
  hostname '#{name}'
13
17
  sed -i '' 's/^hostname=.*$/hostname=\"#{name}\"/' /etc/rc.conf
14
-
15
- # Prepend ourselves to /etc/hosts
16
- grep -w '#{name}' /etc/hosts || {
17
- echo -e '127.0.0.1\\t#{name}\\t#{basename}' | cat - /etc/hosts > /tmp/tmp-hosts
18
- mv /tmp/tmp-hosts /etc/hosts
19
- }
20
18
  EOH
21
19
  comm.sudo(command, shell: "sh")
22
20
  end
21
+ network_with_hostname = machine.config.vm.networks.map {|_, c| c if c[:hostname] }.compact[0]
22
+ if network_with_hostname
23
+ replace_host(comm, name, network_with_hostname[:ip])
24
+ else
25
+ add_hostname_to_loopback_interface(comm, name)
26
+ end
23
27
  end
24
28
  end
25
29
  end
@@ -1,30 +1,22 @@
1
+ require_relative '../../linux/cap/change_host_name'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestGentoo
3
5
  module Cap
4
6
  class ChangeHostName
5
- def self.change_host_name(machine, name)
6
- comm = machine.communicate
7
-
8
- if !comm.test("hostname -f | grep '^#{name}$'", sudo: false)
9
- basename = name.split(".", 2)[0]
10
- comm.sudo <<-EOH.gsub(/^ {14}/, "")
11
- # Set the hostname
12
-
13
- # Use hostnamectl on systemd
14
- if [[ `systemctl` =~ -\.mount ]]; then
15
- systemctl set-hostname '#{name}'
16
- else
17
- hostname '#{basename}'
18
- echo "hostname=#{basename}" > /etc/conf.d/hostname
19
- fi
7
+ extend VagrantPlugins::GuestLinux::Cap::ChangeHostName
20
8
 
21
- # Prepend ourselves to /etc/hosts
22
- grep -w '#{name}' /etc/hosts || {
23
- echo -e '127.0.0.1\\t#{name}\\t#{basename}' | cat - /etc/hosts > /tmp/tmp-hosts &&
24
- mv /tmp/tmp-hosts /etc/hosts
25
- }
26
- EOH
27
- end
9
+ def self.change_name_command(name)
10
+ basename = name.split(".", 2)[0]
11
+ return <<-EOH.gsub(/^ {14}/, '')
12
+ # Use hostnamectl on systemd
13
+ if [[ `systemctl` =~ -\.mount ]]; then
14
+ systemctl set-hostname '#{name}'
15
+ else
16
+ hostname '#{basename}'
17
+ echo "hostname=#{basename}" > /etc/conf.d/hostname
18
+ fi
19
+ EOH
28
20
  end
29
21
  end
30
22
  end
@@ -0,0 +1,19 @@
1
+ module VagrantPlugins
2
+ module GuestHaiku
3
+ module Cap
4
+ class RSync
5
+ def self.rsync_installed(machine)
6
+ machine.communicate.test("test -f /bin/rsync")
7
+ end
8
+
9
+ def self.rsync_install(machine)
10
+ machine.communicate.execute("pkgman install -y rsync")
11
+ end
12
+
13
+ def self.rsync_command(machine)
14
+ "rsync -zz"
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -30,6 +30,21 @@ module VagrantPlugins
30
30
  require_relative "cap/remove_public_key"
31
31
  Cap::RemovePublicKey
32
32
  end
33
+
34
+ guest_capability(:haiku, :rsync_install) do
35
+ require_relative "cap/rsync"
36
+ Cap::RSync
37
+ end
38
+
39
+ guest_capability(:haiku, :rsync_installed) do
40
+ require_relative "cap/rsync"
41
+ Cap::RSync
42
+ end
43
+
44
+ guest_capability(:haiku, :rsync_command) do
45
+ require_relative "cap/rsync"
46
+ Cap::RSync
47
+ end
33
48
  end
34
49
  end
35
50
  end
@@ -0,0 +1,46 @@
1
+ require 'vagrant/util/guest_hosts'
2
+
3
+ module VagrantPlugins
4
+ module GuestLinux
5
+ module Cap
6
+ module ChangeHostName
7
+ module Methods
8
+ def change_name_command(name)
9
+ return <<-EOH.gsub(/^ {14}/, '')
10
+ # Set the hostname
11
+ echo '#{name}' > /etc/hostname
12
+ hostname '#{name}'
13
+ EOH
14
+ end
15
+
16
+ def change_host_name?(comm, name)
17
+ !comm.test("hostname -f | grep '^#{name}$'", sudo: false)
18
+ end
19
+
20
+ def change_host_name(machine, name)
21
+ comm = machine.communicate
22
+
23
+ network_with_hostname = machine.config.vm.networks.map {|_, c| c if c[:hostname] }.compact[0]
24
+ if network_with_hostname
25
+ replace_host(comm, name, network_with_hostname[:ip])
26
+ else
27
+ add_hostname_to_loopback_interface(comm, name)
28
+ end
29
+
30
+ if change_host_name?(comm, name)
31
+ comm.sudo(change_name_command(name))
32
+ end
33
+ end
34
+ end
35
+
36
+ def self.extended(klass)
37
+ klass.extend(Vagrant::Util::GuestHosts::Linux)
38
+ klass.extend(Methods)
39
+ end
40
+
41
+ extend Vagrant::Util::GuestHosts::Linux
42
+ extend Methods
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,10 +1,18 @@
1
+ require 'vagrant/util/guest_inspection'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestLinux
3
5
  module Cap
4
6
  class Halt
7
+ extend Vagrant::Util::GuestInspection::Linux
8
+
5
9
  def self.halt(machine)
6
10
  begin
7
- machine.communicate.sudo("shutdown -h now")
11
+ if systemd?(machine.communicate)
12
+ machine.communicate.sudo("systemctl poweroff")
13
+ else
14
+ machine.communicate.sudo("shutdown -h now")
15
+ end
8
16
  rescue IOError, Vagrant::Errors::SSHDisconnected
9
17
  # Do nothing, because it probably means the machine shut down
10
18
  # and SSH connection was lost.
@@ -1,3 +1,4 @@
1
+ require "fileutils"
1
2
  require "shellwords"
2
3
  require_relative "../../../synced_folders/unix_mount_helpers"
3
4
 
@@ -8,37 +9,32 @@ module VagrantPlugins
8
9
 
9
10
  extend SyncedFolder::UnixMountHelpers
10
11
 
12
+ # Mounts and SMB folder on linux guest
13
+ #
14
+ # @param [Machine] machine
15
+ # @param [String] name of mount
16
+ # @param [String] path of mount on guest
17
+ # @param [Hash] hash of mount options
11
18
  def self.mount_smb_shared_folder(machine, name, guestpath, options)
12
19
  expanded_guest_path = machine.guest.capability(
13
20
  :shell_expand_guest_path, guestpath)
21
+ options[:smb_id] ||= name
14
22
 
15
- mount_device = "//#{options[:smb_host]}/#{name}"
16
-
17
- mount_options = options.fetch(:mount_options, [])
18
- detected_ids = detect_owner_group_ids(machine, guestpath, mount_options, options)
19
- mount_uid = detected_ids[:uid]
20
- mount_gid = detected_ids[:gid]
21
-
23
+ mount_device = options[:plugin].capability(:mount_name, name, options)
24
+ mount_options, _, _ = options[:plugin].capability(
25
+ :mount_options, name, expanded_guest_path, options)
26
+ mount_type = options[:plugin].capability(:mount_type)
22
27
  # If a domain is provided in the username, separate it
23
28
  username, domain = (options[:smb_username] || '').split('@', 2)
24
29
  smb_password = options[:smb_password]
25
30
  # Ensure password is scrubbed
26
31
  Vagrant::Util::CredentialScrubber.sensitive(smb_password)
27
-
28
- mnt_opts = []
29
- if machine.env.host.capability?(:smb_mount_options)
30
- mnt_opts += machine.env.host.capability(:smb_mount_options)
31
- else
32
- mnt_opts << "sec=ntlmssp"
32
+
33
+ if mount_options.include?("mfsymlinks")
34
+ display_mfsymlinks_warning(machine.env)
33
35
  end
34
- mnt_opts << "credentials=/etc/smb_creds_#{name}"
35
- mnt_opts << "uid=#{mount_uid}"
36
- mnt_opts << "gid=#{mount_gid}"
37
-
38
- mnt_opts = merge_mount_options(mnt_opts, options[:mount_options] || [])
39
-
40
- mount_options = "-o #{mnt_opts.join(",")}"
41
- mount_command = "mount -t cifs #{mount_options} #{mount_device} #{expanded_guest_path}"
36
+
37
+ mount_command = "mount -t #{mount_type} -o #{mount_options} #{mount_device} #{expanded_guest_path}"
42
38
 
43
39
  # Create the guest path if it doesn't exist
44
40
  machine.communicate.sudo("mkdir -p #{expanded_guest_path}")
@@ -74,24 +70,19 @@ SCRIPT
74
70
  ensure
75
71
  # Always remove credentials file after mounting attempts
76
72
  # have been completed
77
- machine.communicate.sudo("rm /etc/smb_creds_#{name}")
73
+ if !machine.config.vm.allow_fstab_modification
74
+ machine.communicate.sudo("rm /etc/smb_creds_#{name}")
75
+ end
78
76
  end
79
77
 
80
78
  emit_upstart_notification(machine, expanded_guest_path)
81
79
  end
82
80
 
83
- def self.merge_mount_options(base, overrides)
84
- base = base.join(",").split(",")
85
- overrides = overrides.join(",").split(",")
86
- b_kv = Hash[base.map{|item| item.split("=", 2) }]
87
- o_kv = Hash[overrides.map{|item| item.split("=", 2) }]
88
- merged = {}.tap do |opts|
89
- (b_kv.keys + o_kv.keys).uniq.each do |key|
90
- opts[key] = o_kv.fetch(key, b_kv[key])
91
- end
92
- end
93
- merged.map do |key, value|
94
- [key, value].compact.join("=")
81
+ def self.display_mfsymlinks_warning(env)
82
+ d_file = env.data_dir.join("mfsymlinks_warning")
83
+ if !d_file.exist?
84
+ FileUtils.touch(d_file.to_path)
85
+ env.ui.warn(I18n.t("vagrant.actions.vm.smb.mfsymlink_warning"))
95
86
  end
96
87
  end
97
88
  end