vagrant-unbundled 2.2.7.0 → 2.2.16.0

Sign up to get free protection for your applications and to get access to all the features.
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