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
@@ -12,15 +12,11 @@ module VagrantPlugins
12
12
  end
13
13
 
14
14
  def finalize!
15
- @shell = "cmd" if @shell == UNSET_VALUE
15
+ @shell = "powershell" if @shell == UNSET_VALUE
16
16
  @sudo_command = "%c" if @sudo_command == UNSET_VALUE
17
- @upload_directory = "C:\\Windows\\Temp" if @upload_directory == UNSET_VALUE
17
+ @upload_directory = "C:/Windows/Temp" if @upload_directory == UNSET_VALUE
18
18
  if @export_command_template == UNSET_VALUE
19
- if @shell == "cmd"
20
- @export_command_template = 'set %ENV_KEY%="%ENV_VALUE%"'
21
- else
22
- @export_command_template = '$env:%ENV_KEY%="%ENV_VALUE%"'
23
- end
19
+ @export_command_template = '$env:%ENV_KEY%="%ENV_VALUE%"'
24
20
  end
25
21
  super
26
22
  end
@@ -1,7 +1,11 @@
1
+ require 'vagrant/util/guest_hosts'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestAlpine
3
5
  module Cap
4
6
  class ChangeHostName
7
+ include Vagrant::Util::GuestHosts::Linux
8
+
5
9
  def self.change_host_name(machine, name)
6
10
  new(machine, name).change!
7
11
  end
@@ -14,10 +18,10 @@ module VagrantPlugins
14
18
  end
15
19
 
16
20
  def change!
21
+ update_etc_hosts
17
22
  return unless should_change?
18
23
 
19
24
  update_etc_hostname
20
- update_etc_hosts
21
25
  refresh_hostname_service
22
26
  update_mailname
23
27
  renew_dhcp
@@ -48,17 +52,12 @@ module VagrantPlugins
48
52
  # 127.0.0.1 localhost
49
53
  # 127.0.1.1 host.fqdn.com host.fqdn host
50
54
  def update_etc_hosts
51
- if machine.communicate.test("grep '#{current_hostname}' /etc/hosts")
52
- # Current hostname entry is in /etc/hosts
53
- ip_address = '([0-9]{1,3}\.){3}[0-9]{1,3}'
54
- search = "^(#{ip_address})\\s+#{Regexp.escape(current_hostname)}(\\s.*)?$"
55
- replace = "\\1 #{new_hostname} #{short_hostname}"
56
- expression = ['s', search, replace, 'g'].join('@')
57
-
58
- machine.communicate.sudo("sed -ri '#{expression}' /etc/hosts")
55
+ comm = machine.communicate
56
+ network_with_hostname = machine.config.vm.networks.map {|_, c| c if c[:hostname] }.compact[0]
57
+ if network_with_hostname
58
+ replace_host(comm, new_hostname, network_with_hostname[:ip])
59
59
  else
60
- # Current hostname entry isn't in /etc/hosts, just append it
61
- machine.communicate.sudo("echo '127.0.1.1 #{new_hostname} #{short_hostname}' >>/etc/hosts")
60
+ add_hostname_to_loopback_interface(comm, new_hostname)
62
61
  end
63
62
  end
64
63
 
@@ -45,7 +45,7 @@ module VagrantPlugins
45
45
  # each specifically, we avoid reconfiguring eth0 (the NAT interface) so
46
46
  # SSH never dies.
47
47
  interfaces.each do |interface|
48
- comm.sudo("/sbin/ifdown eth#{interface} 2> /dev/null")
48
+ comm.sudo("if [[ $(/sbin/ip a show eth#{interface} | grep UP) ]]; then /sbin/ifdown eth#{interface} 2> /dev/null; fi")
49
49
  comm.sudo("/sbin/ip addr flush dev eth#{interface} 2> /dev/null")
50
50
  end
51
51
 
@@ -1,63 +1,50 @@
1
+ require_relative '../../linux/cap/change_host_name'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestALT
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
- # Save current hostname saved in /etc/hosts
12
- CURRENT_HOSTNAME_FULL="$(hostname -f)"
13
- CURRENT_HOSTNAME_SHORT="$(hostname -s)"
14
-
15
- # New hostname to be saved in /etc/hosts
16
- NEW_HOSTNAME_FULL='#{name}'
17
- NEW_HOSTNAME_SHORT="${NEW_HOSTNAME_FULL%%.*}"
18
-
19
- # Set the hostname - use hostnamectl if available
20
- if command -v hostnamectl; then
21
- hostnamectl set-hostname --static '#{name}'
22
- hostnamectl set-hostname --transient '#{name}'
23
- else
24
- hostname '#{name}'
25
- fi
26
-
27
- # Update ourselves in /etc/hosts
28
- if grep -w "$CURRENT_HOSTNAME_FULL" /etc/hosts; then
29
- sed -i -e "s/\(\s\)$CURRENT_HOSTNAME_FULL\(\s\)/\1$NEW_HOSTNAME_FULL\2/g" -e "s/\(\s\)$CURRENT_HOSTNAME_FULL$/\1$NEW_HOSTNAME_FULL/g" /etc/hosts
30
- fi
31
- if grep -w "$CURRENT_HOSTNAME_SHORT" /etc/hosts; then
32
- sed -i -e "s/\(\s\)$CURRENT_HOSTNAME_SHORT\(\s\)/\1$NEW_HOSTNAME_SHORT\2/g" -e "s/\(\s\)$CURRENT_HOSTNAME_SHORT$/\1$NEW_HOSTNAME_SHORT/g" /etc/hosts
33
- fi
7
+ extend VagrantPlugins::GuestLinux::Cap::ChangeHostName
8
+
9
+ def self.change_name_command(name)
10
+ basename = name.split(".", 2)[0]
11
+ return <<-EOH.gsub(/^ {14}/, '')
12
+ # Save current hostname saved in /etc/hosts
13
+ CURRENT_HOSTNAME_FULL="$(hostname -f)"
14
+ CURRENT_HOSTNAME_SHORT="$(hostname -s)"
34
15
 
35
- # Persist hostname change across reboots
36
- if [ -f /etc/sysconfig/network ]; then
37
- sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/sysconfig/network
38
- elif [ -f /etc/hostname ]; then
39
- sed -i 's/.*/#{name}/' /etc/hostname
40
- else
41
- echo 'Unrecognized system. Hostname change may not persist across reboots.'
42
- exit 0
43
- fi
16
+ # Set the hostname - use hostnamectl if available
17
+ if command -v hostnamectl; then
18
+ hostnamectl set-hostname --static '#{name}'
19
+ hostnamectl set-hostname --transient '#{name}'
20
+ else
21
+ hostname '#{name}'
22
+ fi
44
23
 
45
- # Restart the network if we find a recognized SYS V init script
46
- if command -v service; then
47
- if [ -f /etc/init.d/network ]; then
48
- service network restart
49
- elif [ -f /etc/init.d/networking ]; then
50
- service networking restart
51
- elif [ -f /etc/init.d/NetworkManager ]; then
52
- service NetworkManager restart
53
- else
54
- echo 'Unrecognized system. Networking was not restarted following hostname change.'
55
- exit 0
56
- fi
57
- fi
24
+ # Persist hostname change across reboots
25
+ if [ -f /etc/sysconfig/network ]; then
26
+ sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/sysconfig/network
27
+ elif [ -f /etc/hostname ]; then
28
+ sed -i 's/.*/#{name}/' /etc/hostname
29
+ else
30
+ echo 'Unrecognized system. Hostname change may not persist across reboots.'
31
+ exit 0
32
+ fi
58
33
 
59
- EOH
60
- end
34
+ # Restart the network if we find a recognized SYS V init script
35
+ if command -v service; then
36
+ if [ -f /etc/init.d/network ]; then
37
+ service network restart
38
+ elif [ -f /etc/init.d/networking ]; then
39
+ service networking restart
40
+ elif [ -f /etc/init.d/NetworkManager ]; then
41
+ service NetworkManager restart
42
+ else
43
+ echo 'Unrecognized system. Networking was not restarted following hostname change.'
44
+ exit 0
45
+ fi
46
+ fi
47
+ EOH
61
48
  end
62
49
  end
63
50
  end
@@ -1,22 +1,13 @@
1
+ require_relative '../../linux/cap/change_host_name'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestArch
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
- hostnamectl set-hostname '#{basename}'
7
+ extend VagrantPlugins::GuestLinux::Cap::ChangeHostName
13
8
 
14
- # Prepend ourselves to /etc/hosts
15
- test $? -eq 0 && (grep -w '#{name}' /etc/hosts || {
16
- sed -i'' '1i 127.0.0.1\\t#{name}\\t#{basename}' /etc/hosts
17
- })
18
- EOH
19
- end
9
+ def self.change_name_command(name)
10
+ "hostnamectl set-hostname '#{name.split(".", 2).first}'"
20
11
  end
21
12
  end
22
13
  end
@@ -9,10 +9,12 @@ module VagrantPlugins
9
9
  module Cap
10
10
  class ConfigureNetworks
11
11
  include Vagrant::Util
12
+ extend Vagrant::Util::GuestInspection::Linux
12
13
 
13
14
  def self.configure_networks(machine, networks)
14
15
  comm = machine.communicate
15
16
  commands = []
17
+ uses_systemd_networkd = systemd_networkd?(comm)
16
18
 
17
19
  interfaces = machine.guest.capability(:network_interfaces)
18
20
  networks.each.with_index do |network, i|
@@ -25,9 +27,15 @@ module VagrantPlugins
25
27
  network[:netmask] = (32-Math.log2((IPAddr.new(network[:netmask], Socket::AF_INET).to_i^0xffffffff)+1)).to_i
26
28
  end
27
29
 
28
- entry = TemplateRenderer.render("guests/arch/network_#{network[:type]}",
29
- options: network,
30
- )
30
+ if uses_systemd_networkd
31
+ entry = TemplateRenderer.render("guests/arch/systemd_networkd/network_#{network[:type]}",
32
+ options: network,
33
+ )
34
+ else
35
+ entry = TemplateRenderer.render("guests/arch/default_network/network_#{network[:type]}",
36
+ options: network,
37
+ )
38
+ end
31
39
 
32
40
  remote_path = "/tmp/vagrant-network-#{network[:device]}-#{Time.now.to_i}-#{i}"
33
41
 
@@ -39,13 +47,22 @@ module VagrantPlugins
39
47
  comm.upload(f.path, remote_path)
40
48
  end
41
49
 
42
- commands << <<-EOH.gsub(/^ {14}/, '').rstrip
43
- # Configure #{network[:device]}
44
- mv '#{remote_path}' '/etc/netctl/#{network[:device]}' &&
45
- ip link set '#{network[:device]}' down &&
46
- netctl restart '#{network[:device]}' &&
47
- netctl enable '#{network[:device]}'
48
- EOH
50
+ if uses_systemd_networkd
51
+ commands << <<-EOH.gsub(/^ {16}/, '').rstrip
52
+ # Configure #{network[:device]}
53
+ chmod 0644 '#{remote_path}' &&
54
+ mv '#{remote_path}' '/etc/systemd/network/#{network[:device]}.network' &&
55
+ networkctl reload
56
+ EOH
57
+ else
58
+ commands << <<-EOH.gsub(/^ {16}/, '').rstrip
59
+ # Configure #{network[:device]}
60
+ mv '#{remote_path}' '/etc/netctl/#{network[:device]}' &&
61
+ ip link set '#{network[:device]}' down &&
62
+ netctl restart '#{network[:device]}' &&
63
+ netctl enable '#{network[:device]}'
64
+ EOH
65
+ end
49
66
  end
50
67
 
51
68
  # Run all the network modification commands in one communicator call.
@@ -7,7 +7,7 @@ module VagrantPlugins
7
7
  if !comm.test("test -f /usr/bin/mount.cifs")
8
8
  comm.sudo <<-EOH.gsub(/^ {14}/, '')
9
9
  pacman -Sy --noconfirm
10
- pacman -S --noconfirm cifs-utils
10
+ pacman -S --noconfirm smbclient cifs-utils
11
11
  EOH
12
12
  end
13
13
  end
@@ -1,22 +1,13 @@
1
+ require_relative '../../linux/cap/change_host_name'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestAtomic
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
- hostnamectl set-hostname '#{basename}'
7
+ extend VagrantPlugins::GuestLinux::Cap::ChangeHostName
13
8
 
14
- # Prepend ourselves to /etc/hosts
15
- test $? -eq 0 && (grep -w '#{name}' /etc/hosts || {
16
- sed -i'' '1i 127.0.0.1\\t#{name}\\t#{basename}' /etc/hosts
17
- })
18
- EOH
19
- end
9
+ def self.change_name_command(name)
10
+ "hostnamectl set-hostname '#{name.split(".", 2).first}'"
20
11
  end
21
12
  end
22
13
  end
@@ -0,0 +1,24 @@
1
+ module VagrantPlugins
2
+ module GuestCentos
3
+ module Cap
4
+ class Flavor
5
+ def self.flavor(machine)
6
+ # Read the version file
7
+ output = ""
8
+ machine.communicate.sudo("cat /etc/centos-release") do |_, data|
9
+ output = data
10
+ end
11
+
12
+ # Detect various flavors we care about
13
+ if output =~ /(CentOS)( .+)? 7/i
14
+ return :centos_7
15
+ elsif output =~ /(CentOS)( .+)? 8/i
16
+ return :centos_8
17
+ else
18
+ return :centos
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,9 @@
1
+ module VagrantPlugins
2
+ module GuestCentos
3
+ class Guest < Vagrant.plugin("2", :guest)
4
+ def detect?(machine)
5
+ machine.communicate.test("cat /etc/centos-release")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,20 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module GuestCentos
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "CentOS guest"
7
+ description "CentOS guest support."
8
+
9
+ guest(:centos, :redhat) do
10
+ require_relative "guest"
11
+ Guest
12
+ end
13
+
14
+ guest_capability(:centos, :flavor) do
15
+ require_relative "cap/flavor"
16
+ Cap::Flavor
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,7 +1,11 @@
1
+ require 'vagrant/util/guest_hosts'
2
+
1
3
  module VagrantPlugins
2
4
  module GuestDarwin
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
 
@@ -21,14 +25,14 @@ module VagrantPlugins
21
25
  fi
22
26
 
23
27
  hostname '#{name}'
24
-
25
- # Prepend ourselves to /etc/hosts - sed on bsd is sad
26
- grep -w '#{name}' /etc/hosts || {
27
- echo -e '127.0.0.1\\t#{name}\\t#{basename}' | cat - /etc/hosts > /tmp/tmp-hosts &&
28
- mv /tmp/tmp-hosts /etc/hosts
29
- }
30
28
  EOH
31
29
  end
30
+ network_with_hostname = machine.config.vm.networks.map {|_, c| c if c[:hostname] }.compact[0]
31
+ if network_with_hostname
32
+ replace_host(comm, name, network_with_hostname[:ip])
33
+ else
34
+ add_hostname_to_loopback_interface(comm, name)
35
+ end
32
36
  end
33
37
  end
34
38
  end
@@ -0,0 +1,40 @@
1
+ module VagrantPlugins
2
+ module GuestDarwin
3
+ module Cap
4
+ class DarwinVersion
5
+
6
+ VERSION_REGEX = /\d+.\d+.?\d*/.freeze
7
+
8
+ # Get the darwin version
9
+ #
10
+ # @param [Machine]
11
+ # @return [String] version of drawin
12
+ def self.darwin_version(machine)
13
+ output = ""
14
+ machine.communicate.sudo("sysctl kern.osrelease") do |_, data|
15
+ output = data
16
+ end
17
+ output.scan(VERSION_REGEX).first
18
+ end
19
+
20
+ # Get the darwin major version
21
+ #
22
+ # @param [Machine]
23
+ # @return [int] major version of drawin (nil if version is not detected)
24
+ def self.darwin_major_version(machine)
25
+ output = ""
26
+ machine.communicate.sudo("sysctl kern.osrelease") do |_, data|
27
+ output = data
28
+ end
29
+ version_string = output.scan(VERSION_REGEX).first
30
+ if version_string
31
+ major_version = version_string.split(".").first.to_i
32
+ else
33
+ major_version = nil
34
+ end
35
+ major_version
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -26,7 +26,7 @@ module VagrantPlugins
26
26
  mount_options = options[:mount_options];
27
27
  mount_command = "mount -t smbfs " +
28
28
  (mount_options ? "-o '#{mount_options.join(",")}' " : "") +
29
- "'//#{options[:smb_username]}:#{smb_password}@#{options[:smb_host]}/#{name}' " +
29
+ "//#{options[:smb_username]}:#{smb_password}@#{options[:smb_host]}/#{name} " +
30
30
  "#{expanded_guest_path}"
31
31
  retryable(on: Vagrant::Errors::DarwinMountFailed, tries: 10, sleep: 2) do
32
32
  machine.communicate.execute(