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
@@ -1,23 +1,17 @@
1
+ require_relative '../../linux/cap/change_host_name'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestPhoton
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
- echo '#{name}' > /etc/hostname
13
- hostname '#{name}'
7
+ extend VagrantPlugins::GuestLinux::Cap::ChangeHostName
14
8
 
15
- # Prepend ourselves to /etc/hosts
16
- grep -w '#{name}' /etc/hosts || {
17
- sed -i'' '1i 127.0.0.1\\t#{name}\\t#{basename}' /etc/hosts
18
- }
19
- EOH
20
- end
9
+ def self.change_name_command(name)
10
+ return <<-EOH.gsub(/^ {14}/, "")
11
+ # Set the hostname
12
+ echo '#{name}' > /etc/hostname
13
+ hostname '#{name}'
14
+ EOH
21
15
  end
22
16
  end
23
17
  end
@@ -1,27 +1,21 @@
1
+ require_relative '../../linux/cap/change_host_name'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestPld
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
- hostname '#{name}'
12
- sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/sysconfig/network
7
+ extend VagrantPlugins::GuestLinux::Cap::ChangeHostName
13
8
 
14
- sed -i 's/\\(DHCP_HOSTNAME=\\).*/\\1\"#{name}\"/' /etc/sysconfig/interfaces/ifcfg-*
9
+ def self.change_name_command(name)
10
+ return <<-EOH.gsub(/^ {14}/, "")
11
+ hostname '#{name}'
12
+ sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/sysconfig/network
15
13
 
16
- # Prepend ourselves to /etc/hosts
17
- grep -w '#{name}' /etc/hosts || {
18
- sed -i'' '1i 127.0.0.1\\t#{name}\\t#{basename}' /etc/hosts
19
- }
14
+ sed -i 's/\\(DHCP_HOSTNAME=\\).*/\\1\"#{name}\"/' /etc/sysconfig/interfaces/ifcfg-*
20
15
 
21
- # Restart networking
22
- service network restart
23
- EOH
24
- end
16
+ # Restart networking
17
+ service network restart
18
+ EOH
25
19
  end
26
20
  end
27
21
  end
@@ -1,9 +1,12 @@
1
+ require 'vagrant/util/guest_hosts'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestRedHat
3
5
  module Cap
4
6
  class ChangeHostName
5
7
 
6
8
  extend Vagrant::Util::GuestInspection::Linux
9
+ extend Vagrant::Util::GuestHosts::Linux
7
10
 
8
11
  def self.change_host_name(machine, name)
9
12
  comm = machine.communicate
@@ -12,14 +15,13 @@ module VagrantPlugins
12
15
  basename = name.split('.', 2)[0]
13
16
  comm.sudo <<-EOH.gsub(/^ {14}/, '')
14
17
  # Update sysconfig
15
- sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/sysconfig/network
18
+ if [ -f /etc/sysconfig/network ]; then
19
+ sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/sysconfig/network
20
+ fi
16
21
  # Update DNS
17
- sed -i 's/\\(DHCP_HOSTNAME=\\).*/\\1\"#{basename}\"/' /etc/sysconfig/network-scripts/ifcfg-*
22
+ find /etc/sysconfig/network-scripts -maxdepth 1 -type f -name 'ifcfg-*' | xargs -r sed -i 's/\\(DHCP_HOSTNAME=\\).*/\\1\"#{basename}\"/'
18
23
  # Set the hostname - use hostnamectl if available
19
24
  echo '#{name}' > /etc/hostname
20
- grep -w '#{name}' /etc/hosts || {
21
- sed -i'' '1i 127.0.0.1\\t#{name}\\t#{basename}' /etc/hosts
22
- }
23
25
  EOH
24
26
 
25
27
  if hostnamectl?(comm)
@@ -40,6 +42,13 @@ module VagrantPlugins
40
42
  end
41
43
  comm.sudo(restart_command)
42
44
  end
45
+
46
+ network_with_hostname = machine.config.vm.networks.map {|_, c| c if c[:hostname] }.compact[0]
47
+ if network_with_hostname
48
+ replace_host(comm, name, network_with_hostname[:ip])
49
+ else
50
+ add_hostname_to_loopback_interface(comm, name)
51
+ end
43
52
  end
44
53
  end
45
54
  end
@@ -10,8 +10,10 @@ module VagrantPlugins
10
10
  end
11
11
 
12
12
  # Detect various flavors we care about
13
- if output =~ /(CentOS|Red Hat Enterprise|Scientific|Cloud|Virtuozzo)\s*Linux( .+)? release 7/i
13
+ if output =~ /(Red Hat Enterprise|Scientific|Cloud|Virtuozzo)\s*Linux( .+)? release 7/i
14
14
  return :rhel_7
15
+ elsif output =~ /(Red Hat Enterprise|Scientific|Cloud|Virtuozzo)\s*Linux( .+)? release 8/i
16
+ return :rhel_8
15
17
  else
16
18
  return :rhel
17
19
  end
@@ -0,0 +1,20 @@
1
+ module VagrantPlugins
2
+ module GuestRedHat
3
+ module Cap
4
+ class SMB
5
+ def self.smb_install(machine)
6
+ comm = machine.communicate
7
+ if !comm.test("test -f /sbin/mount.cifs")
8
+ comm.sudo <<-EOH.gsub(/^ {14}/, '')
9
+ if command -v dnf; then
10
+ dnf -y install cifs-utils
11
+ else
12
+ yum -y install cifs-utils
13
+ fi
14
+ EOH
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -40,6 +40,11 @@ module VagrantPlugins
40
40
  require_relative "cap/rsync"
41
41
  Cap::RSync
42
42
  end
43
+
44
+ guest_capability(:redhat, :smb_install) do
45
+ require_relative "cap/smb"
46
+ Cap::SMB
47
+ end
43
48
  end
44
49
  end
45
50
  end
@@ -1,25 +1,19 @@
1
+ require_relative '../../linux/cap/change_host_name'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestSlackware
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
- chmod o+w /etc/hostname
13
- echo '#{name}' > /etc/hostname
14
- chmod o-w /etc/hostname
15
- hostname -F /etc/hostname
7
+ extend VagrantPlugins::GuestLinux::Cap::ChangeHostName
16
8
 
17
- # Prepend ourselves to /etc/hosts
18
- grep -w '#{name}' /etc/hosts || {
19
- sed -i'' '1i 127.0.0.1\\t#{name}\\t#{basename}' /etc/hosts
20
- }
21
- EOH
22
- end
9
+ def self.change_name_command(name)
10
+ return <<-EOH.gsub(/^ {14}/, "")
11
+ # Set the hostname
12
+ chmod o+w /etc/hostname
13
+ echo '#{name}' > /etc/hostname
14
+ chmod o-w /etc/hostname
15
+ hostname -F /etc/hostname
16
+ EOH
23
17
  end
24
18
  end
25
19
  end
@@ -29,6 +29,11 @@ module VagrantPlugins
29
29
  require_relative "cap/configure_networks"
30
30
  Cap::ConfigureNetworks
31
31
  end
32
+
33
+ guest_capability(:solaris11, :shell_expand_guest_path) do
34
+ require_relative "../linux/cap/shell_expand_guest_path"
35
+ VagrantPlugins::GuestLinux::Cap::ShellExpandGuestPath
36
+ end
32
37
  end
33
38
  end
34
39
  end
@@ -1,21 +1,43 @@
1
+ require 'vagrant/util/guest_hosts'
2
+ require 'vagrant/util/guest_inspection'
3
+
1
4
  module VagrantPlugins
2
5
  module GuestSUSE
3
6
  module Cap
4
7
  class ChangeHostName
8
+
9
+ extend Vagrant::Util::GuestInspection::Linux
10
+ extend Vagrant::Util::GuestHosts::Linux
11
+
5
12
  def self.change_host_name(machine, name)
6
13
  comm = machine.communicate
7
-
8
14
  basename = name.split(".", 2)[0]
9
- if !comm.test('test "$(hostnamectl --static status)" = "#{basename}"', sudo: false)
10
- comm.sudo <<-EOH.gsub(/^ {14}/, '')
11
- hostnamectl set-hostname '#{basename}'
12
15
 
13
- # Prepend ourselves to /etc/hosts
14
- grep -w '#{name}' /etc/hosts || {
15
- sed -i'' '1i 127.0.0.1\\t#{name}\\t#{basename}' /etc/hosts
16
- }
17
- EOH
16
+ network_with_hostname = machine.config.vm.networks.map {|_, c| c if c[:hostname] }.compact[0]
17
+ if network_with_hostname
18
+ replace_host(comm, name, network_with_hostname[:ip])
19
+ else
20
+ add_hostname_to_loopback_interface(comm, name)
18
21
  end
22
+
23
+ if hostnamectl?(comm)
24
+ if !comm.test("test \"$(hostnamectl --static status)\" = \"#{basename}\"", sudo: false)
25
+ cmd = <<-EOH.gsub(/^ {14}/, "")
26
+ hostnamectl set-hostname '#{basename}'
27
+ echo #{name} > /etc/HOSTNAME
28
+ EOH
29
+ comm.sudo(cmd)
30
+ end
31
+ else
32
+ if !comm.test("hostname -f | grep '^#{name}$'", sudo: false)
33
+ cmd = <<-EOH.gsub(/^ {14}/, "")
34
+ echo #{name} > /etc/HOSTNAME
35
+ hostname '#{basename}'
36
+ EOH
37
+ comm.sudo(cmd)
38
+ end
39
+ end
40
+
19
41
  end
20
42
  end
21
43
  end
@@ -37,7 +37,7 @@ module VagrantPlugins
37
37
 
38
38
  # Ensure the user's ssh directory exists
39
39
  remote_ssh_dir = "#{home_dir}\\.ssh"
40
- comm.execute("dir \"#{remote_ssh_dir}\"\n if errorlevel 1 (mkdir \"#{remote_ssh_dir}\")", shell: "cmd")
40
+ comm.execute("New-Item -Path '#{remote_ssh_dir}' -ItemType directory -Force", shell: "powershell")
41
41
  remote_upload_path = "#{temp_dir}\\vagrant-insert-pubkey-#{Time.now.to_i}"
42
42
  remote_authkeys_path = "#{remote_ssh_dir}\\authorized_keys"
43
43
 
@@ -55,7 +55,7 @@ module VagrantPlugins
55
55
  File.write(keys_file.path, keys.join("\r\n") + "\r\n")
56
56
  comm.upload(keys_file.path, remote_upload_path)
57
57
  keys_file.delete
58
- comm.execute <<-EOC.gsub(/^\s*/, ""), shell: "powershell"
58
+ comm.execute(<<-EOC.gsub(/^\s*/, ""), shell: "powershell")
59
59
  Set-Acl "#{remote_upload_path}" (Get-Acl "#{remote_authkeys_path}")
60
60
  Move-Item -Force "#{remote_upload_path}" "#{remote_authkeys_path}"
61
61
  EOC
@@ -67,7 +67,7 @@ module VagrantPlugins
67
67
  # @return [Hash] {:temp, :home}
68
68
  def self.fetch_guest_paths(communicator)
69
69
  output = ""
70
- communicator.execute("echo %TEMP%\necho %USERPROFILE%", shell: "cmd") do |type, data|
70
+ communicator.execute("Write-Output $env:TEMP\nWrite-Output $env:USERPROFILE", shell: "powershell") do |type, data|
71
71
  if type == :stdout
72
72
  output << data
73
73
  end
@@ -4,7 +4,8 @@ module VagrantPlugins
4
4
  module GuestWindows
5
5
  module Cap
6
6
  class Reboot
7
- MAX_REBOOT_RETRY_DURATION = 120
7
+ DEFAULT_MAX_REBOOT_RETRY_DURATION = 120
8
+ WAIT_SLEEP_TIME = 5
8
9
 
9
10
  def self.reboot(machine)
10
11
  @logger = Log4r::Logger.new("vagrant::windows::reboot")
@@ -25,14 +26,18 @@ module VagrantPlugins
25
26
 
26
27
  @logger.debug("Waiting for machine to finish rebooting")
27
28
 
28
- wait_remaining = MAX_REBOOT_RETRY_DURATION
29
+ wait_remaining = ENV.fetch("VAGRANT_MAX_REBOOT_RETRY_DURATION",
30
+ DEFAULT_MAX_REBOOT_RETRY_DURATION).to_i
31
+ wait_remaining = DEFAULT_MAX_REBOOT_RETRY_DURATION if wait_remaining < 1
32
+
29
33
  begin
30
34
  wait_for_reboot(machine)
31
- rescue HTTPClient::ConnectTimeoutError, Vagrant::Errors::MachineGuestNotReady, WinRM::WinRMHTTPTransportError => e
35
+ rescue => err
32
36
  raise if wait_remaining < 0
37
+ @logger.debug("Exception caught while waiting for reboot: #{err}")
33
38
  @logger.warn("Machine not ready, cannot start reboot yet. Trying again")
34
- sleep(5)
35
- wait_remaining -= 5
39
+ sleep(WAIT_SLEEP_TIME)
40
+ wait_remaining -= WAIT_SLEEP_TIME
36
41
  retry
37
42
  end
38
43
  end
@@ -0,0 +1,49 @@
1
+ require "pathname"
2
+ require "vagrant/util/caps"
3
+
4
+ module VagrantPlugins
5
+ module HostDarwin
6
+ module Cap
7
+ class FsISO
8
+ extend Vagrant::Util::Caps::BuildISO
9
+
10
+ @@logger = Log4r::Logger.new("vagrant::host::darwin::fs_iso")
11
+
12
+ BUILD_ISO_CMD = "hdiutil".freeze
13
+
14
+ # Check that the host has the ability to generate ISOs
15
+ #
16
+ # @param [Vagrant::Environment] env
17
+ # @return [Boolean]
18
+ def self.isofs_available(env)
19
+ !!Vagrant::Util::Which.which(BUILD_ISO_CMD)
20
+ end
21
+
22
+ # Generate an ISO file of the given source directory
23
+ #
24
+ # @param [Vagrant::Environment] env
25
+ # @param [String] source_directory Contents of ISO
26
+ # @param [Map] extra arguments to pass to the iso building command
27
+ # :file_destination (string) location to store ISO
28
+ # :volume_id (String) to set the volume name
29
+ # @return [Pathname] ISO location
30
+ # @note If file_destination exists, source_directory will be checked
31
+ # for recent modifications and a new ISO will be generated if requried.
32
+ def self.create_iso(env, source_directory, extra_opts={})
33
+ source_directory = Pathname.new(source_directory)
34
+ file_destination = self.ensure_output_iso(extra_opts[:file_destination])
35
+
36
+ iso_command = [BUILD_ISO_CMD, "makehybrid", "-hfs", "-iso", "-joliet", "-ov"]
37
+ iso_command.concat(["-default-volume-name", extra_opts[:volume_id]]) if extra_opts[:volume_id]
38
+ iso_command << "-o"
39
+ iso_command << file_destination.to_s
40
+ iso_command << source_directory.to_s
41
+ self.build_iso(iso_command, source_directory, file_destination)
42
+
43
+ @@logger.info("ISO available at #{file_destination}")
44
+ file_destination
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -11,6 +11,16 @@ module VagrantPlugins
11
11
  Host
12
12
  end
13
13
 
14
+ host_capability("darwin", "isofs_available") do
15
+ require_relative "cap/fs_iso"
16
+ Cap::FsISO
17
+ end
18
+
19
+ host_capability("darwin", "create_iso") do
20
+ require_relative "cap/fs_iso"
21
+ Cap::FsISO
22
+ end
23
+
14
24
  host_capability("darwin", "provider_install_virtualbox") do
15
25
  require_relative "cap/provider_install_virtualbox"
16
26
  Cap::ProviderInstallVirtualBox
@@ -0,0 +1,49 @@
1
+ require "pathname"
2
+ require "vagrant/util/caps"
3
+
4
+ module VagrantPlugins
5
+ module HostLinux
6
+ module Cap
7
+ class FsISO
8
+ extend Vagrant::Util::Caps::BuildISO
9
+
10
+ @@logger = Log4r::Logger.new("vagrant::host::linux::fs_iso")
11
+
12
+ BUILD_ISO_CMD = "mkisofs".freeze
13
+
14
+ # Check that the host has the ability to generate ISOs
15
+ #
16
+ # @param [Vagrant::Environment] env
17
+ # @return [Boolean]
18
+ def self.isofs_available(env)
19
+ !!Vagrant::Util::Which.which(BUILD_ISO_CMD)
20
+ end
21
+
22
+ # Generate an ISO file of the given source directory
23
+ #
24
+ # @param [Vagrant::Environment] env
25
+ # @param [String] source_directory Contents of ISO
26
+ # @param [Map] extra arguments to pass to the iso building command
27
+ # :file_destination (string) location to store ISO
28
+ # :volume_id (String) to set the volume name
29
+ # @return [Pathname] ISO location
30
+ # @note If file_destination exists, source_directory will be checked
31
+ # for recent modifications and a new ISO will be generated if requried.
32
+ def self.create_iso(env, source_directory, extra_opts={})
33
+ source_directory = Pathname.new(source_directory)
34
+ file_destination = self.ensure_output_iso(extra_opts[:file_destination])
35
+
36
+ iso_command = [BUILD_ISO_CMD, "-joliet"]
37
+ iso_command.concat(["-volid", extra_opts[:volume_id]]) if extra_opts[:volume_id]
38
+ iso_command << "-o"
39
+ iso_command << file_destination.to_s
40
+ iso_command << source_directory.to_s
41
+ self.build_iso(iso_command, source_directory, file_destination)
42
+
43
+ @@logger.info("ISO available at #{file_destination}")
44
+ file_destination
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end