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,10 +1,8 @@
1
+ require_relative "../container/installer"
2
+
1
3
  module VagrantPlugins
2
4
  module DockerProvisioner
3
- class Installer
4
- def initialize(machine)
5
- @machine = machine
6
- end
7
-
5
+ class Installer < VagrantPlugins::ContainerProvisioner::Installer
8
6
  # This handles verifying the Docker installation, installing it if it was
9
7
  # requested, and so on. This method will raise exceptions if things are
10
8
  # wrong.
@@ -29,14 +29,14 @@ module VagrantPlugins
29
29
  Cap::Fedora::DockerInstall
30
30
  end
31
31
 
32
- guest_capability("redhat", "docker_install") do
33
- require_relative "cap/redhat/docker_install"
34
- Cap::Redhat::DockerInstall
32
+ guest_capability("centos", "docker_install") do
33
+ require_relative "cap/centos/docker_install"
34
+ Cap::Centos::DockerInstall
35
35
  end
36
36
 
37
- guest_capability("redhat", "docker_start_service") do
38
- require_relative "cap/redhat/docker_start_service"
39
- Cap::Redhat::DockerStartService
37
+ guest_capability("centos", "docker_start_service") do
38
+ require_relative "cap/centos/docker_start_service"
39
+ Cap::Centos::DockerStartService
40
40
  end
41
41
 
42
42
  guest_capability("linux", "docker_installed") do
@@ -1,3 +1,5 @@
1
+ require_relative "../container/provisioner"
2
+
1
3
  require_relative "client"
2
4
  require_relative "installer"
3
5
 
@@ -7,17 +9,16 @@ module VagrantPlugins
7
9
  error_namespace("vagrant.provisioners.docker")
8
10
  end
9
11
 
10
- class Provisioner < Vagrant.plugin("2", :provisioner)
12
+ class Provisioner < VagrantPlugins::ContainerProvisioner::Provisioner
11
13
  def initialize(machine, config, installer = nil, client = nil)
12
14
  super(machine, config)
13
15
 
14
16
  @installer = installer || Installer.new(@machine)
15
17
  @client = client || Client.new(@machine)
18
+ @logger = Log4r::Logger.new("vagrant::provisioners::docker")
16
19
  end
17
20
 
18
21
  def provision
19
- @logger = Log4r::Logger.new("vagrant::provisioners::docker")
20
-
21
22
  @logger.info("Checking for Docker installation...")
22
23
  if @installer.ensure_installed
23
24
  if !config.post_install_provisioner.nil?
@@ -50,13 +51,6 @@ module VagrantPlugins
50
51
  end
51
52
  end
52
53
 
53
- def run_provisioner(env)
54
- klass = Vagrant.plugin("2").manager.provisioners[env[:provisioner].type]
55
- result = klass.new(env[:machine], env[:provisioner].config)
56
- result.config.finalize!
57
-
58
- result.provision
59
- end
60
54
  end
61
55
  end
62
56
  end
@@ -0,0 +1,35 @@
1
+ module VagrantPlugins
2
+ module PodmanProvisioner
3
+ module Cap
4
+ module Centos
5
+ module PodmanInstall
6
+ def self.podman_install(machine, kubic)
7
+ if kubic
8
+ # Official install instructions for podman
9
+ # https://podman.io/getting-started/installation.html
10
+ case machine.guest.capability("flavor")
11
+ when :centos_7
12
+ machine.communicate.tap do |comm|
13
+ comm.sudo("curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/devel:kubic:libcontainers:stable.repo")
14
+ comm.sudo("yum -q -y install podman")
15
+ end
16
+ when :centos_8
17
+ machine.communicate.tap do |comm|
18
+ comm.sudo("dnf -y module disable container-tools &> /dev/null || echo 'container-tools module does not exist'")
19
+ comm.sudo("dnf -y install 'dnf-command(copr)'")
20
+ comm.sudo("dnf -y copr enable rhcontainerbot/container-selinux")
21
+ comm.sudo("curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_8/devel:kubic:libcontainers:stable.repo")
22
+ comm.sudo("dnf -y install podman")
23
+ end
24
+ end
25
+ else
26
+ machine.communicate.tap do |comm|
27
+ comm.sudo("yum -q -y install podman")
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ module VagrantPlugins
2
+ module PodmanProvisioner
3
+ module Cap
4
+ module Linux
5
+ module PodmanInstalled
6
+ def self.podman_installed(machine)
7
+ machine.communicate.test("command -v podman")
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,26 @@
1
+ module VagrantPlugins
2
+ module PodmanProvisioner
3
+ module Cap
4
+ module Redhat
5
+ module PodmanInstall
6
+ def self.podman_install(machine, kubic)
7
+ # Official install instructions for podman
8
+ # https://podman.io/getting-started/installation.html
9
+ case machine.guest.capability("flavor")
10
+ when :rhel_7
11
+ machine.communicate.tap do |comm|
12
+ comm.sudo("subscription-manager repos --enable=rhel-7-server-extras-rpms")
13
+ comm.sudo("yum -q -y install podman")
14
+ end
15
+ when :rhel_8
16
+ machine.communicate.tap do |comm|
17
+ comm.sudo("yum module enable -y container-tools")
18
+ comm.sudo("yum module install -y container-tools")
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,12 @@
1
+ require_relative "../container/client"
2
+
3
+ module VagrantPlugins
4
+ module PodmanProvisioner
5
+ class Client < VagrantPlugins::ContainerProvisioner::Client
6
+ def initialize(machine)
7
+ super(machine, "podman")
8
+ @container_command = "podman"
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,28 @@
1
+ require_relative "../container/config"
2
+
3
+ module VagrantPlugins
4
+ module PodmanProvisioner
5
+ class Config < VagrantPlugins::ContainerProvisioner::Config
6
+ attr_accessor :kubic
7
+
8
+ def initialize
9
+ super()
10
+ @kubic = UNSET_VALUE
11
+ end
12
+
13
+ def finalize!
14
+ super()
15
+ @kubic = false if @kubic == UNSET_VALUE
16
+ end
17
+
18
+ def post_install_provision(name, **options, &block)
19
+ # Abort
20
+ raise PodmanError, :wrong_provisioner if options[:type] == "podman"
21
+
22
+ proxy = VagrantPlugins::Kernel_V2::VMConfig.new
23
+ proxy.provision(name, **options, &block)
24
+ @post_install_provisioner = proxy.provisioners.first
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,33 @@
1
+ require_relative "../container/installer"
2
+
3
+ module VagrantPlugins
4
+ module PodmanProvisioner
5
+ class Installer < VagrantPlugins::ContainerProvisioner::Installer
6
+ # This handles verifying the Podman installation, installing it if it was
7
+ # requested, and so on. This method will raise exceptions if things are
8
+ # wrong.
9
+ # @params [Boolean] - if true install should use kubic project (this will)
10
+ # add a yum repo.
11
+ # if false install comes from default yum
12
+ # @return [Boolean] - false if podman cannot be detected on machine, else
13
+ # true if podman installs correctly or is installed
14
+ def ensure_installed(kubic)
15
+ if !@machine.guest.capability?(:podman_installed)
16
+ @machine.ui.warn("Podman can not be installed")
17
+ return false
18
+ end
19
+
20
+ if !@machine.guest.capability(:podman_installed)
21
+ @machine.ui.detail("Podman installing")
22
+ @machine.guest.capability(:podman_install, kubic)
23
+ end
24
+
25
+ if !@machine.guest.capability(:podman_installed)
26
+ raise PodmanError, :install_failed
27
+ end
28
+
29
+ true
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,38 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module PodmanProvisioner
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "podman"
7
+ description <<-DESC
8
+ Provides support for provisioning your virtual machines with
9
+ OCI images and containers using Podman.
10
+ DESC
11
+
12
+ config(:podman, :provisioner) do
13
+ require_relative "config"
14
+ Config
15
+ end
16
+
17
+ guest_capability("redhat", "podman_install") do
18
+ require_relative "cap/redhat/podman_install"
19
+ Cap::Redhat::PodmanInstall
20
+ end
21
+
22
+ guest_capability("centos", "podman_install") do
23
+ require_relative "cap/centos/podman_install"
24
+ Cap::Centos::PodmanInstall
25
+ end
26
+
27
+ guest_capability("linux", "podman_installed") do
28
+ require_relative "cap/linux/podman_installed"
29
+ Cap::Linux::PodmanInstalled
30
+ end
31
+
32
+ provisioner(:podman) do
33
+ require_relative "provisioner"
34
+ Provisioner
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,52 @@
1
+ require_relative "../container/provisioner"
2
+
3
+ require_relative "installer"
4
+ require_relative "client"
5
+
6
+ module VagrantPlugins
7
+ module PodmanProvisioner
8
+ class PodmanError < Vagrant::Errors::VagrantError
9
+ error_namespace("vagrant.provisioners.podman")
10
+ end
11
+
12
+ class Provisioner < VagrantPlugins::ContainerProvisioner::Provisioner
13
+ def initialize(machine, config, installer = nil, client = nil)
14
+ super(machine, config, installer, client)
15
+
16
+ @installer = installer || Installer.new(@machine)
17
+ @client = client || Client.new(@machine)
18
+ @logger = Log4r::Logger.new("vagrant::provisioners::podman")
19
+ end
20
+
21
+ def provision
22
+ @logger.info("Checking for Podman installation...")
23
+
24
+ if @installer.ensure_installed(config.kubic)
25
+ if !config.post_install_provisioner.nil?
26
+ @logger.info("Running post setup provision script...")
27
+ env = {
28
+ callable: method(:run_provisioner),
29
+ provisioner: config.post_install_provisioner,
30
+ machine: machine}
31
+ machine.env.hook(:run_provisioner, env)
32
+ end
33
+ end
34
+
35
+ if config.images.any?
36
+ @machine.ui.info(I18n.t("vagrant.docker_pulling_images"))
37
+ @client.pull_images(*config.images)
38
+ end
39
+
40
+ if config.build_images.any?
41
+ @machine.ui.info(I18n.t("vagrant.docker_building_images"))
42
+ @client.build_images(config.build_images)
43
+ end
44
+
45
+ if config.containers.any?
46
+ @machine.ui.info(I18n.t("vagrant.docker_starting_containers"))
47
+ @client.run(config.containers)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -4,13 +4,16 @@ cd `mktemp -d`
4
4
 
5
5
  # We just download the bootstrap script by default and execute that.
6
6
  if [ -x /usr/bin/fetch ]; then
7
- /usr/bin/fetch -o bootstrap-salt.sh https://raw.githubusercontent.com/saltstack/salt-bootstrap/stable/bootstrap-salt.sh
7
+ /usr/bin/fetch -o bootstrap-salt.sh https://bootstrap.saltproject.io
8
8
  elif [ -x /usr/bin/curl ]; then
9
- /usr/bin/curl --silent --show-error -L -O https://raw.githubusercontent.com/saltstack/salt-bootstrap/stable/bootstrap-salt.sh
9
+ /usr/bin/curl --silent --show-error -L --output bootstrap-salt.sh https://bootstrap.saltproject.io
10
10
  elif [ -x /usr/bin/wget ]; then
11
- /usr/bin/wget -O bootstrap-salt.sh https://raw.githubusercontent.com/saltstack/salt-bootstrap/stable/bootstrap-salt.sh
11
+ /usr/bin/wget -O bootstrap-salt.sh https://bootstrap.saltproject.io
12
+ elif [ "2" = `python -c 'import sys; sys.stdout.write(str(sys.version_info.major))'` ]; then
13
+ # TODO: remove after there is no supported distros with Python 2
14
+ python -c 'import urllib; urllib.urlretrieve("https://bootstrap.saltproject.io", "bootstrap-salt.sh")'
12
15
  else
13
- python -c 'import urllib; urllib.urlretrieve("https://raw.githubusercontent.com/saltstack/salt-bootstrap/stable/bootstrap-salt.sh", "bootstrap-salt.sh")'
16
+ python -c 'import urllib.request; urllib.request.urlretrieve("https://bootstrap.saltproject.io", "bootstrap-salt.sh")'
14
17
  fi
15
18
 
16
19
  if [ -e bootstrap-salt.sh ]; then
@@ -158,6 +158,10 @@ module VagrantPlugins
158
158
  options = "%s -N" % options
159
159
  end
160
160
 
161
+ if @config.python_version && @machine.config.vm.communicator != :winrm
162
+ options = "%s -x python%s" % [options, @config.python_version]
163
+ end
164
+
161
165
  if @config.install_type && @machine.config.vm.communicator != :winrm
162
166
  options = "%s %s" % [options, @config.install_type]
163
167
  end
@@ -55,7 +55,7 @@ module VagrantPlugins
55
55
  @sha384 = nil if @sha384 == UNSET_VALUE
56
56
  @sha512 = nil if @sha512 == UNSET_VALUE
57
57
  @env = {} if @env == UNSET_VALUE
58
- @upload_path = "/tmp/vagrant-shell" if @upload_path == UNSET_VALUE
58
+ @upload_path = nil if @upload_path == UNSET_VALUE
59
59
  @privileged = true if @privileged == UNSET_VALUE
60
60
  @binary = false if @binary == UNSET_VALUE
61
61
  @keep_color = false if @keep_color == UNSET_VALUE
@@ -109,11 +109,6 @@ module VagrantPlugins
109
109
  errors << I18n.t("vagrant.provisioners.shell.env_must_be_a_hash")
110
110
  end
111
111
 
112
- # There needs to be a path to upload the script to
113
- if !upload_path
114
- errors << I18n.t("vagrant.provisioners.shell.upload_path_not_set")
115
- end
116
-
117
112
  if !args_valid?
118
113
  errors << I18n.t("vagrant.provisioners.shell.args_bad_type")
119
114
  end
@@ -9,6 +9,10 @@ module VagrantPlugins
9
9
  class Provisioner < Vagrant.plugin("2", :provisioner)
10
10
  include Vagrant::Util::Retryable
11
11
 
12
+ DEFAULT_WINDOWS_SHELL_EXT = ".ps1".freeze
13
+
14
+ CMD_WINDOWS_SHELL_EXT = ".bat".freeze
15
+
12
16
  def provision
13
17
  args = ""
14
18
  if config.args.is_a?(String)
@@ -38,6 +42,27 @@ module VagrantPlugins
38
42
  end
39
43
  end
40
44
 
45
+ def upload_path
46
+ if !defined?(@_upload_path)
47
+ case @machine.config.vm.guest
48
+ when :windows
49
+ @_upload_path = Vagrant::Util::Platform.unix_windows_path(config.upload_path.to_s)
50
+ else
51
+ @_upload_path = config.upload_path.to_s
52
+ end
53
+
54
+ if @_upload_path.empty?
55
+ case @machine.config.vm.guest
56
+ when :windows
57
+ @_upload_path = "C:/tmp/vagrant-shell"
58
+ else
59
+ @_upload_path = "/tmp/vagrant-shell"
60
+ end
61
+ end
62
+ end
63
+ @_upload_path
64
+ end
65
+
41
66
  protected
42
67
 
43
68
  # This handles outputting the communication data back to the UI
@@ -63,10 +88,10 @@ module VagrantPlugins
63
88
  env = config.env.map { |k,v| "#{k}=#{quote_and_escape(v.to_s)}" }
64
89
  env = env.join(" ")
65
90
 
66
- command = "chmod +x '#{config.upload_path}'"
91
+ command = "chmod +x '#{upload_path}'"
67
92
  command << " &&"
68
93
  command << " #{env}" if !env.empty?
69
- command << " #{config.upload_path}#{args}"
94
+ command << " #{upload_path}#{args}"
70
95
 
71
96
  with_script_file do |path|
72
97
  # Upload the script to the machine
@@ -79,10 +104,10 @@ module VagrantPlugins
79
104
  end
80
105
 
81
106
  user = info[:username]
82
- comm.sudo("chown -R #{user} #{config.upload_path}",
107
+ comm.sudo("chown -R #{user} #{upload_path}",
83
108
  error_check: false)
84
109
 
85
- comm.upload(path.to_s, config.upload_path)
110
+ comm.upload(path.to_s, upload_path)
86
111
 
87
112
  if config.name
88
113
  @machine.ui.detail(I18n.t("vagrant.provisioners.shell.running",
@@ -113,22 +138,21 @@ module VagrantPlugins
113
138
  with_script_file do |path|
114
139
  # Upload the script to the machine
115
140
  @machine.communicate.tap do |comm|
116
- env = config.env.map{|k,v| comm.generate_environment_export(k, v)}.join
117
- upload_path = config.upload_path.to_s
118
- if File.extname(upload_path).empty?
119
- remote_ext = @machine.config.winssh.shell == "powershell" ? "ps1" : "bat"
120
- upload_path << ".#{remote_ext}"
121
- end
122
- if remote_ext == "ps1"
141
+ env = config.env.map{|k,v| comm.generate_environment_export(k, v)}.join(';')
142
+
143
+ remote_ext = get_windows_ext(path)
144
+ remote_path = add_extension(upload_path, remote_ext)
145
+
146
+ if remote_ext == ".bat"
147
+ command = "#{env}\n cmd.exe /c \"#{remote_path}\" #{args}"
148
+ else
123
149
  # Copy powershell_args from configuration
124
150
  shell_args = config.powershell_args
125
151
  # For PowerShell scripts bypass the execution policy unless already specified
126
152
  shell_args += " -ExecutionPolicy Bypass" if config.powershell_args !~ /[-\/]ExecutionPolicy/i
127
153
  # CLIXML output is kinda useless, especially on non-windows hosts
128
154
  shell_args += " -OutputFormat Text" if config.powershell_args !~ /[-\/]OutputFormat/i
129
- command = "#{env}\npowershell #{shell_args} #{upload_path}#{args}"
130
- else
131
- command = "#{env}\n#{upload_path}#{args}"
155
+ command = "#{env}\npowershell #{shell_args} -file \"#{remote_path}\"#{args}"
132
156
  end
133
157
 
134
158
  # Reset upload path permissions for the current ssh user
@@ -137,8 +161,8 @@ module VagrantPlugins
137
161
  info = @machine.ssh_info
138
162
  raise Vagrant::Errors::SSHNotReady if info.nil?
139
163
  end
140
-
141
- comm.upload(path.to_s, upload_path)
164
+
165
+ comm.upload(path.to_s, remote_path)
142
166
 
143
167
  if config.name
144
168
  @machine.ui.detail(I18n.t("vagrant.provisioners.shell.running",
@@ -154,7 +178,7 @@ module VagrantPlugins
154
178
  # Execute it with sudo
155
179
  comm.execute(
156
180
  command,
157
- sudo: config.privileged,
181
+ shell: :powershell,
158
182
  error_key: :ssh_bad_exit_status_muted
159
183
  ) do |type, data|
160
184
  handle_comm(type, data)
@@ -174,20 +198,17 @@ module VagrantPlugins
174
198
  @machine.communicate.tap do |comm|
175
199
  # Make sure that the upload path has an extension, since
176
200
  # having an extension is critical for Windows execution
177
- upload_path = config.upload_path.to_s
178
- if File.extname(upload_path) == ""
179
- upload_path += File.extname(path.to_s)
180
- end
201
+ winrm_upload_path = add_extension(upload_path, get_windows_ext(path))
181
202
 
182
203
  # Upload it
183
- comm.upload(path.to_s, upload_path)
204
+ comm.upload(path.to_s, winrm_upload_path)
184
205
 
185
206
  # Build the environment
186
207
  env = config.env.map { |k,v| "$env:#{k} = #{quote_and_escape(v.to_s)}" }
187
208
  env = env.join("; ")
188
209
 
189
210
  # Calculate the path that we'll be executing
190
- exec_path = upload_path
211
+ exec_path = winrm_upload_path
191
212
  exec_path.gsub!('/', '\\')
192
213
  exec_path = "c:#{exec_path}" if exec_path.start_with?("\\")
193
214
 
@@ -236,6 +257,22 @@ module VagrantPlugins
236
257
  "#{quote}#{text.gsub(/#{quote}/) { |m| "#{m}\\#{m}#{m}" }}#{quote}"
237
258
  end
238
259
 
260
+ def add_extension(path, ext)
261
+ return path if !File.extname(path.to_s).empty?
262
+ path + ext
263
+ end
264
+
265
+ def get_windows_ext(path)
266
+ remote_ext = File.extname(upload_path.to_s)
267
+ if remote_ext.empty?
268
+ remote_ext = File.extname(path.to_s)
269
+ if remote_ext.empty?
270
+ remote_ext = @machine.config.winssh.shell == "cmd" ? CMD_WINDOWS_SHELL_EXT : DEFAULT_WINDOWS_SHELL_EXT
271
+ end
272
+ end
273
+ remote_ext
274
+ end
275
+
239
276
  # This method yields the path to a script to upload and execute
240
277
  # on the remote server. This method will properly clean up the
241
278
  # script file if needed.
@@ -269,14 +306,12 @@ module VagrantPlugins
269
306
  ext = File.extname(config.path)
270
307
  script = Pathname.new(config.path).expand_path(root_path).read
271
308
  else
272
- # The script is just the inline code...
273
- ext = ".ps1"
274
309
  script = config.inline
275
310
  end
276
311
 
277
312
  # Replace Windows line endings with Unix ones unless binary file
278
313
  # or we're running on Windows.
279
- if !config.binary && @machine.config.vm.communicator != :winrm
314
+ if !config.binary && @machine.config.vm.guest != :windows
280
315
  begin
281
316
  script = script.gsub(/\r\n?$/, "\n")
282
317
  rescue ArgumentError