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
@@ -6,22 +6,22 @@ module VagrantPlugins
6
6
  class MountVirtualBoxSharedFolder
7
7
  extend SyncedFolder::UnixMountHelpers
8
8
 
9
+ # Mounts and virtualbox folder on linux guest
10
+ #
11
+ # @param [Machine] machine
12
+ # @param [String] name of mount
13
+ # @param [String] path of mount on guest
14
+ # @param [Hash] hash of mount options
9
15
  def self.mount_virtualbox_shared_folder(machine, name, guestpath, options)
10
16
  guest_path = Shellwords.escape(guestpath)
17
+ mount_type = options[:plugin].capability(:mount_type)
11
18
 
12
19
  @@logger.debug("Mounting #{name} (#{options[:hostpath]} to #{guestpath})")
13
20
 
14
- builtin_mount_type = "-cit vboxsf"
15
- addon_mount_type = "-t vboxsf"
21
+ builtin_mount_type = "-cit #{mount_type}"
22
+ addon_mount_type = "-t #{mount_type}"
16
23
 
17
- mount_options = options.fetch(:mount_options, [])
18
- detected_ids = detect_owner_group_ids(machine, guest_path, mount_options, options)
19
- mount_uid = detected_ids[:uid]
20
- mount_gid = detected_ids[:gid]
21
-
22
- mount_options << "uid=#{mount_uid}"
23
- mount_options << "gid=#{mount_gid}"
24
- mount_options = mount_options.join(',')
24
+ mount_options, mount_uid, mount_gid = options[:plugin].capability(:mount_options, name, guest_path, options)
25
25
  mount_command = "mount #{addon_mount_type} -o #{mount_options} #{name} #{guest_path}"
26
26
 
27
27
  # Create the guest path if it doesn't exist
@@ -61,7 +61,6 @@ module VagrantPlugins
61
61
  emit_upstart_notification(machine, guest_path)
62
62
  end
63
63
 
64
-
65
64
  def self.unmount_virtualbox_shared_folder(machine, guestpath, options)
66
65
  guest_path = Shellwords.escape(guestpath)
67
66
 
@@ -0,0 +1,74 @@
1
+ require "vagrant/util"
2
+
3
+ require_relative "../../../synced_folders/unix_mount_helpers"
4
+
5
+ module VagrantPlugins
6
+ module GuestLinux
7
+ module Cap
8
+ class PersistMountSharedFolder
9
+ extend SyncedFolder::UnixMountHelpers
10
+
11
+ @@logger = Log4r::Logger.new("vagrant::guest::linux::persist_mount_shared_folders")
12
+
13
+ # Inserts fstab entry for a set of synced folders. Will fully replace
14
+ # the currently managed group of Vagrant managed entries. Note, passing
15
+ # empty list of folders will just remove entries
16
+ #
17
+ # @param [Machine] machine The machine to run the action on
18
+ # @param [Map<String, Map>] A map of folders to add to fstab
19
+ def self.persist_mount_shared_folder(machine, folders)
20
+ if folders.nil?
21
+ @@logger.info("clearing /etc/fstab")
22
+ self.remove_vagrant_managed_fstab(machine)
23
+ return
24
+ end
25
+
26
+ ssh_info = machine.ssh_info
27
+ export_folders = folders.map { |type, folder|
28
+ folder.map { |name, data|
29
+ if data[:plugin].capability?(:mount_type)
30
+ guest_path = Shellwords.escape(data[:guestpath])
31
+ data[:owner] ||= ssh_info[:username]
32
+ data[:group] ||= ssh_info[:username]
33
+ mount_type = data[:plugin].capability(:mount_type)
34
+ mount_options, _, _ = data[:plugin].capability(
35
+ :mount_options, name, guest_path, data)
36
+ if data[:plugin].capability?(:mount_name)
37
+ name = data[:plugin].capability(:mount_name, name, data)
38
+ end
39
+ else
40
+ next
41
+ end
42
+
43
+ {
44
+ name: name,
45
+ mount_point: guest_path,
46
+ mount_type: mount_type,
47
+ mount_options: mount_options,
48
+ }
49
+ }
50
+ }.flatten.compact
51
+
52
+
53
+ fstab_entry = Vagrant::Util::TemplateRenderer.render('guests/linux/etc_fstab', folders: export_folders)
54
+ self.remove_vagrant_managed_fstab(machine)
55
+ machine.communicate.sudo("echo '#{fstab_entry}' >> /etc/fstab")
56
+ end
57
+
58
+ private
59
+
60
+ def self.fstab_exists?(machine)
61
+ machine.communicate.test("test -f /etc/fstab")
62
+ end
63
+
64
+ def self.remove_vagrant_managed_fstab(machine)
65
+ if fstab_exists?(machine)
66
+ machine.communicate.sudo("sed -i '/\#VAGRANT-BEGIN/,/\#VAGRANT-END/d' /etc/fstab")
67
+ else
68
+ @@logger.info("no fstab file found, carrying on")
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -1,16 +1,27 @@
1
+ require 'vagrant/util/guest_inspection'
1
2
  require "log4r"
2
3
 
3
4
  module VagrantPlugins
4
5
  module GuestLinux
5
6
  module Cap
6
7
  class Reboot
7
- MAX_REBOOT_RETRY_DURATION = 120
8
+ extend Vagrant::Util::GuestInspection::Linux
9
+
10
+ DEFAULT_MAX_REBOOT_RETRY_DURATION = 120
11
+ WAIT_SLEEP_TIME = 5
8
12
 
9
13
  def self.reboot(machine)
10
14
  @logger = Log4r::Logger.new("vagrant::linux::reboot")
11
- reboot_script = "reboot"
15
+ reboot_script = "ps -q 1 -o comm=,start= > /tmp/.vagrant-reboot"
16
+
17
+ if systemd?(machine.communicate)
18
+ reboot_cmd = "systemctl reboot"
19
+ else
20
+ reboot_cmd = "reboot"
21
+ end
12
22
 
13
23
  comm = machine.communicate
24
+ reboot_script += "; #{reboot_cmd}"
14
25
 
15
26
  @logger.debug("Issuing reboot command for guest")
16
27
  comm.sudo(reboot_script)
@@ -19,21 +30,39 @@ module VagrantPlugins
19
30
 
20
31
  @logger.debug("Waiting for machine to finish rebooting")
21
32
 
22
- wait_remaining = MAX_REBOOT_RETRY_DURATION
33
+ wait_remaining = ENV.fetch("VAGRANT_MAX_REBOOT_RETRY_DURATION",
34
+ DEFAULT_MAX_REBOOT_RETRY_DURATION).to_i
35
+ wait_remaining = DEFAULT_MAX_REBOOT_RETRY_DURATION if wait_remaining < 1
36
+
23
37
  begin
24
38
  wait_for_reboot(machine)
25
- rescue Vagrant::Errors::MachineGuestNotReady => e
39
+ rescue Vagrant::Errors::MachineGuestNotReady
26
40
  raise if wait_remaining < 0
27
41
  @logger.warn("Machine not ready, cannot start reboot yet. Trying again")
28
- sleep(5)
29
- wait_remaining -= 5
42
+ sleep(WAIT_SLEEP_TIME)
43
+ wait_remaining -= WAIT_SLEEP_TIME
30
44
  retry
31
45
  end
32
46
  end
33
47
 
34
48
  def self.wait_for_reboot(machine)
35
- while !machine.guest.ready?
49
+ caught = false
50
+ begin
51
+ check_script = 'grep "$(ps -q 1 -o comm=,start=)" /tmp/.vagrant-reboot'
52
+ while machine.guest.ready? && machine.communicate.execute(check_script, error_check: false) == 0
53
+ sleep 10
54
+ end
55
+ rescue
56
+ # The check script execution may result in an exception
57
+ # getting raised depending on the state of the communicator
58
+ # when executing. We'll allow for it to happen once, and then
59
+ # raise if we get an exception again
60
+ if caught
61
+ raise
62
+ end
63
+ caught = true
36
64
  sleep 10
65
+ retry
37
66
  end
38
67
  end
39
68
  end
@@ -11,6 +11,11 @@ module VagrantPlugins
11
11
  Guest
12
12
  end
13
13
 
14
+ guest_capability(:linux, :change_host_name) do
15
+ require_relative "cap/change_host_name"
16
+ Cap::ChangeHostName
17
+ end
18
+
14
19
  guest_capability(:linux, :choose_addressable_ip_addr) do
15
20
  require_relative "cap/choose_addressable_ip_addr"
16
21
  Cap::ChooseAddressableIPAddr
@@ -61,6 +66,11 @@ module VagrantPlugins
61
66
  Cap::MountVirtualBoxSharedFolder
62
67
  end
63
68
 
69
+ guest_capability(:linux, :persist_mount_shared_folder) do
70
+ require_relative "cap/persist_mount_shared_folder"
71
+ Cap::PersistMountSharedFolder
72
+ end
73
+
64
74
  guest_capability(:linux, :network_interfaces) do
65
75
  require_relative "cap/network_interfaces"
66
76
  Cap::NetworkInterfaces
@@ -1,24 +1,18 @@
1
+ require_relative '../../linux/cap/change_host_name'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestOmniOS
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 hostname
12
- echo '#{name}' > /etc/nodename
13
- hostname '#{name}'
7
+ extend VagrantPlugins::GuestLinux::Cap::ChangeHostName
14
8
 
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
- EOH
21
- end
9
+ def self.change_name_command(name)
10
+ basename = name.split(".", 2)[0]
11
+ return <<-EOH.gsub(/^ {14}/, "")
12
+ # Set hostname
13
+ echo '#{name}' > /etc/nodename
14
+ hostname '#{name}'
15
+ EOH
22
16
  end
23
17
  end
24
18
  end
@@ -1,7 +1,11 @@
1
+ require 'vagrant/util/guest_hosts'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestOpenBSD
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
 
@@ -12,15 +16,15 @@ module VagrantPlugins
12
16
  hostname '#{name}'
13
17
  sed -i'' 's/^hostname=.*$/hostname=\"#{name}\"/' /etc/rc.conf
14
18
  echo '#{name}' > /etc/myname
15
-
16
- # Prepend ourselves to /etc/hosts
17
- grep -w '#{name}' /etc/hosts || {
18
- echo -e '127.0.0.1\\t#{name}\\t#{basename}' | cat - /etc/hosts > /tmp/tmp-hosts
19
- mv /tmp/tmp-hosts /etc/hosts
20
- }
21
19
  EOH
22
20
  comm.sudo(command, shell: "sh")
23
21
  end
22
+ network_with_hostname = machine.config.vm.networks.map {|_, c| c if c[:hostname] }.compact[0]
23
+ if network_with_hostname
24
+ replace_host(comm, name, network_with_hostname[:ip])
25
+ else
26
+ add_hostname_to_loopback_interface(comm, name)
27
+ end
24
28
  end
25
29
  end
26
30
  end
@@ -0,0 +1,19 @@
1
+ module VagrantPlugins
2
+ module GuestOpenWrt
3
+ module Cap
4
+ class ChangeHostName
5
+ def self.change_host_name(machine, name)
6
+ comm = machine.communicate
7
+
8
+ if !comm.test("uci get system.@system[0].hostname | grep '^#{name}$'", sudo: false)
9
+ comm.execute <<~EOH
10
+ uci set system.@system[0].hostname='#{name}'
11
+ uci commit system
12
+ /etc/init.d/system reload
13
+ EOH
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module GuestOpenWrt
3
+ module Cap
4
+ class Halt
5
+ def self.halt(machine)
6
+ begin
7
+ machine.communicate.execute("halt")
8
+ rescue IOError, Vagrant::Errors::SSHDisconnected
9
+ # Ignore, this probably means connection closed because it
10
+ # shut down.
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ require "vagrant/util/shell_quote"
2
+
3
+ module VagrantPlugins
4
+ module GuestOpenWrt
5
+ module Cap
6
+ class InsertPublicKey
7
+ def self.insert_public_key(machine, contents)
8
+ contents = contents.chomp
9
+ contents = Vagrant::Util::ShellQuote.escape(contents, "'")
10
+
11
+ machine.communicate.tap do |comm|
12
+ comm.execute <<~EOH
13
+ printf '#{contents}\\n' >> /etc/dropbear/authorized_keys
14
+ EOH
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ require "vagrant/util/shell_quote"
2
+
3
+ module VagrantPlugins
4
+ module GuestOpenWrt
5
+ module Cap
6
+ class RemovePublicKey
7
+ def self.remove_public_key(machine, contents)
8
+ contents = contents.chomp
9
+ contents = Vagrant::Util::ShellQuote.escape(contents, "'")
10
+
11
+ machine.communicate.tap do |comm|
12
+ comm.execute <<~EOH
13
+ if test -f /etc/dropbear/authorized_keys ; then
14
+ sed -i '/^.*#{contents}.*$/d' /etc/dropbear/authorized_keys
15
+ fi
16
+ EOH
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,35 @@
1
+ module VagrantPlugins
2
+ module GuestOpenWrt
3
+ module Cap
4
+ class RSync
5
+ def self.rsync_installed(machine)
6
+ machine.communicate.test("which rsync")
7
+ end
8
+
9
+ def self.rsync_install(machine)
10
+ machine.communicate.tap do |comm|
11
+ comm.execute <<~EOH
12
+ opkg update
13
+ opkg install rsync
14
+ EOH
15
+ end
16
+ end
17
+
18
+ def self.rsync_pre(machine, opts)
19
+ machine.communicate.tap do |comm|
20
+ comm.execute("mkdir -p '#{opts[:guestpath]}'")
21
+ end
22
+ end
23
+
24
+ def self.rsync_command(machine)
25
+ "rsync -zz"
26
+ end
27
+
28
+ def self.rsync_post(machine, opts)
29
+ # Don't do anything because BusyBox's `find` doesn't support the
30
+ # syntax in plugins/synced_folders/rsync/default_unix_cap.rb.
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,23 @@
1
+ module VagrantPlugins
2
+ module GuestOpenWrt
3
+ class Guest
4
+ # Name used for guest detection
5
+ GUEST_DETECTION_NAME = "openwrt".freeze
6
+
7
+ def detect?(machine)
8
+ machine.communicate.test <<~EOH
9
+ if test -e /etc/openwrt_release; then
10
+ exit
11
+ fi
12
+ if test -r /etc/os-release; then
13
+ source /etc/os-release && test 'x#{self.class.const_get(:GUEST_DETECTION_NAME)}' = "x$ID" && exit
14
+ fi
15
+ if test -r /etc/banner; then
16
+ cat /etc/banner | grep -qi '#{self.class.const_get(:GUEST_DETECTION_NAME)}' && exit
17
+ fi
18
+ exit 1
19
+ EOH
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,61 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module GuestOpenWrt
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "OpenWrt guest"
7
+ description "OpenWrt guest support."
8
+
9
+ guest(:openwrt, :linux) do
10
+ require_relative "guest"
11
+ Guest
12
+ end
13
+
14
+ guest_capability(:openwrt, :insert_public_key) do
15
+ require_relative "cap/insert_public_key"
16
+ Cap::InsertPublicKey
17
+ end
18
+
19
+ guest_capability(:openwrt, :remove_public_key) do
20
+ require_relative "cap/remove_public_key"
21
+ Cap::RemovePublicKey
22
+ end
23
+
24
+ guest_capability(:openwrt, :change_host_name) do
25
+ require_relative "cap/change_host_name"
26
+ Cap::ChangeHostName
27
+ end
28
+
29
+ guest_capability(:openwrt, :rsync_installed) do
30
+ require_relative "cap/rsync"
31
+ Cap::RSync
32
+ end
33
+
34
+ guest_capability(:openwrt, :rsync_install) do
35
+ require_relative "cap/rsync"
36
+ Cap::RSync
37
+ end
38
+
39
+ guest_capability(:openwrt, :rsync_pre) do
40
+ require_relative "cap/rsync"
41
+ Cap::RSync
42
+ end
43
+
44
+ guest_capability(:openwrt, :rsync_command) do
45
+ require_relative "cap/rsync"
46
+ Cap::RSync
47
+ end
48
+
49
+ guest_capability(:openwrt, :rsync_post) do
50
+ require_relative "cap/rsync"
51
+ Cap::RSync
52
+ end
53
+
54
+ guest_capability(:openwrt, :halt) do
55
+ require_relative "cap/halt"
56
+ Cap::Halt
57
+ end
58
+ end
59
+ end
60
+ end
61
+