vagrant-unbundled 2.2.7.0 → 2.2.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) hide show
  1. checksums.yaml +4 -4
  2. data/.hashibot.hcl +2 -0
  3. data/CHANGELOG.md +228 -0
  4. data/Gemfile +1 -1
  5. data/README.md +9 -51
  6. data/RELEASE.md +1 -1
  7. data/bin/vagrant +50 -1
  8. data/contrib/README.md +1 -0
  9. data/contrib/sudoers/linux-suse +2 -2
  10. data/contrib/zsh/_vagrant +738 -0
  11. data/contrib/zsh/generate_zsh_completion.rb +165 -0
  12. data/lib/vagrant.rb +28 -5
  13. data/lib/vagrant/action.rb +7 -0
  14. data/lib/vagrant/action/builder.rb +184 -38
  15. data/lib/vagrant/action/builtin/box_add.rb +24 -8
  16. data/lib/vagrant/action/builtin/box_check_outdated.rb +2 -1
  17. data/lib/vagrant/action/builtin/cleanup_disks.rb +56 -0
  18. data/lib/vagrant/action/builtin/cloud_init_setup.rb +122 -0
  19. data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
  20. data/lib/vagrant/action/builtin/delayed.rb +26 -0
  21. data/lib/vagrant/action/builtin/disk.rb +14 -1
  22. data/lib/vagrant/action/builtin/handle_box.rb +3 -1
  23. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +28 -9
  24. data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
  25. data/lib/vagrant/action/builtin/mixin_provisioners.rb +1 -0
  26. data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
  27. data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
  28. data/lib/vagrant/action/builtin/synced_folders.rb +16 -0
  29. data/lib/vagrant/action/builtin/trigger.rb +37 -0
  30. data/lib/vagrant/action/hook.rb +76 -23
  31. data/lib/vagrant/action/runner.rb +12 -27
  32. data/lib/vagrant/action/warden.rb +28 -31
  33. data/lib/vagrant/box.rb +11 -4
  34. data/lib/vagrant/box_collection.rb +1 -1
  35. data/lib/vagrant/bundler.rb +310 -61
  36. data/lib/vagrant/cli.rb +4 -2
  37. data/lib/vagrant/environment.rb +1 -0
  38. data/lib/vagrant/errors.rb +69 -1
  39. data/lib/vagrant/machine.rb +64 -11
  40. data/lib/vagrant/machine_index.rb +28 -1
  41. data/lib/vagrant/patches/net-ssh.rb +186 -0
  42. data/lib/vagrant/plugin/manager.rb +45 -16
  43. data/lib/vagrant/plugin/v2/command.rb +7 -2
  44. data/lib/vagrant/plugin/v2/components.rb +6 -0
  45. data/lib/vagrant/plugin/v2/manager.rb +67 -0
  46. data/lib/vagrant/plugin/v2/plugin.rb +13 -0
  47. data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
  48. data/lib/vagrant/plugin/v2/trigger.rb +64 -25
  49. data/lib/vagrant/shared_helpers.rb +36 -0
  50. data/lib/vagrant/ui.rb +43 -2
  51. data/lib/vagrant/util.rb +2 -0
  52. data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
  53. data/lib/vagrant/util/caps.rb +48 -0
  54. data/lib/vagrant/util/credential_scrubber.rb +1 -1
  55. data/lib/vagrant/util/curl_helper.rb +12 -8
  56. data/lib/vagrant/util/directory.rb +19 -0
  57. data/lib/vagrant/util/downloader.rb +10 -5
  58. data/lib/vagrant/util/guest_hosts.rb +68 -0
  59. data/lib/vagrant/util/guest_inspection.rb +9 -1
  60. data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
  61. data/lib/vagrant/util/io.rb +7 -27
  62. data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
  63. data/lib/vagrant/util/is_port_open.rb +8 -19
  64. data/lib/vagrant/util/map_command_options.rb +33 -0
  65. data/lib/vagrant/util/mime.rb +92 -0
  66. data/lib/vagrant/util/network_ip.rb +11 -1
  67. data/lib/vagrant/util/numeric.rb +28 -0
  68. data/lib/vagrant/util/platform.rb +10 -2
  69. data/lib/vagrant/util/powershell.rb +31 -15
  70. data/lib/vagrant/util/subprocess.rb +9 -1
  71. data/lib/vagrant/util/template_renderer.rb +2 -2
  72. data/lib/vagrant/util/uploader.rb +7 -4
  73. data/lib/vagrant/vagrantfile.rb +2 -2
  74. data/plugins/commands/autocomplete/command/install.rb +49 -0
  75. data/plugins/commands/autocomplete/command/root.rb +64 -0
  76. data/plugins/commands/autocomplete/plugin.rb +18 -0
  77. data/plugins/commands/cap/command.rb +5 -1
  78. data/plugins/commands/cloud/auth/login.rb +20 -23
  79. data/plugins/commands/cloud/auth/logout.rb +2 -10
  80. data/plugins/commands/cloud/auth/middleware/add_authentication.rb +60 -31
  81. data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +64 -0
  82. data/plugins/commands/cloud/auth/whoami.rb +18 -20
  83. data/plugins/commands/cloud/box/create.rb +33 -29
  84. data/plugins/commands/cloud/box/delete.rb +30 -24
  85. data/plugins/commands/cloud/box/show.rb +41 -31
  86. data/plugins/commands/cloud/box/update.rb +34 -26
  87. data/plugins/commands/cloud/client/client.rb +55 -79
  88. data/plugins/commands/cloud/list.rb +3 -4
  89. data/plugins/commands/cloud/locales/en.yml +15 -11
  90. data/plugins/commands/cloud/plugin.rb +10 -0
  91. data/plugins/commands/cloud/provider/create.rb +38 -28
  92. data/plugins/commands/cloud/provider/delete.rb +39 -29
  93. data/plugins/commands/cloud/provider/update.rb +37 -28
  94. data/plugins/commands/cloud/provider/upload.rb +53 -33
  95. data/plugins/commands/cloud/publish.rb +193 -106
  96. data/plugins/commands/cloud/search.rb +34 -21
  97. data/plugins/commands/cloud/util.rb +273 -161
  98. data/plugins/commands/cloud/version/create.rb +33 -28
  99. data/plugins/commands/cloud/version/delete.rb +35 -28
  100. data/plugins/commands/cloud/version/release.rb +35 -29
  101. data/plugins/commands/cloud/version/revoke.rb +36 -29
  102. data/plugins/commands/cloud/version/update.rb +29 -25
  103. data/plugins/commands/destroy/command.rb +7 -7
  104. data/plugins/commands/login/plugin.rb +0 -13
  105. data/plugins/commands/ssh_config/command.rb +1 -1
  106. data/plugins/communicators/ssh/communicator.rb +25 -24
  107. data/plugins/communicators/winrm/config.rb +1 -1
  108. data/plugins/communicators/winrm/helper.rb +1 -1
  109. data/plugins/communicators/winrm/shell.rb +1 -1
  110. data/plugins/communicators/winssh/communicator.rb +126 -38
  111. data/plugins/communicators/winssh/config.rb +3 -7
  112. data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
  113. data/plugins/guests/alpine/cap/configure_networks.rb +1 -1
  114. data/plugins/guests/alt/cap/change_host_name.rb +40 -53
  115. data/plugins/guests/arch/cap/change_host_name.rb +5 -14
  116. data/plugins/guests/arch/cap/configure_networks.rb +27 -10
  117. data/plugins/guests/arch/cap/smb.rb +1 -1
  118. data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
  119. data/plugins/guests/centos/cap/flavor.rb +24 -0
  120. data/plugins/guests/centos/guest.rb +9 -0
  121. data/plugins/guests/centos/plugin.rb +20 -0
  122. data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
  123. data/plugins/guests/darwin/cap/darwin_version.rb +40 -0
  124. data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +1 -1
  125. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +33 -10
  126. data/plugins/guests/darwin/plugin.rb +15 -0
  127. data/plugins/guests/debian/cap/change_host_name.rb +12 -11
  128. data/plugins/guests/debian/cap/configure_networks.rb +14 -6
  129. data/plugins/guests/esxi/cap/public_key.rb +3 -1
  130. data/plugins/guests/fedora/guest.rb +4 -4
  131. data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
  132. data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
  133. data/plugins/guests/haiku/cap/rsync.rb +19 -0
  134. data/plugins/guests/haiku/plugin.rb +15 -0
  135. data/plugins/guests/linux/cap/change_host_name.rb +46 -0
  136. data/plugins/guests/linux/cap/halt.rb +9 -1
  137. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +25 -34
  138. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +10 -11
  139. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +74 -0
  140. data/plugins/guests/linux/cap/reboot.rb +36 -7
  141. data/plugins/guests/linux/plugin.rb +10 -0
  142. data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
  143. data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
  144. data/plugins/guests/openwrt/cap/change_host_name.rb +19 -0
  145. data/plugins/guests/openwrt/cap/halt.rb +16 -0
  146. data/plugins/guests/openwrt/cap/insert_public_key.rb +20 -0
  147. data/plugins/guests/openwrt/cap/remove_public_key.rb +22 -0
  148. data/plugins/guests/openwrt/cap/rsync.rb +35 -0
  149. data/plugins/guests/openwrt/guest.rb +23 -0
  150. data/plugins/guests/openwrt/plugin.rb +61 -0
  151. data/plugins/guests/photon/cap/change_host_name.rb +9 -15
  152. data/plugins/guests/pld/cap/change_host_name.rb +11 -17
  153. data/plugins/guests/redhat/cap/change_host_name.rb +14 -5
  154. data/plugins/guests/redhat/cap/flavor.rb +3 -1
  155. data/plugins/guests/redhat/cap/smb.rb +20 -0
  156. data/plugins/guests/redhat/plugin.rb +5 -0
  157. data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
  158. data/plugins/guests/solaris11/plugin.rb +5 -0
  159. data/plugins/guests/suse/cap/change_host_name.rb +31 -9
  160. data/plugins/guests/windows/cap/public_key.rb +3 -3
  161. data/plugins/guests/windows/cap/reboot.rb +10 -5
  162. data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
  163. data/plugins/hosts/darwin/plugin.rb +10 -0
  164. data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
  165. data/plugins/hosts/linux/cap/nfs.rb +1 -0
  166. data/plugins/hosts/linux/cap/rdp.rb +1 -1
  167. data/plugins/hosts/linux/plugin.rb +10 -0
  168. data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
  169. data/plugins/hosts/windows/cap/rdp.rb +1 -1
  170. data/plugins/hosts/windows/plugin.rb +15 -0
  171. data/plugins/kernel_v2/config/cloud_init.rb +133 -0
  172. data/plugins/kernel_v2/config/disk.rb +67 -14
  173. data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
  174. data/plugins/kernel_v2/config/vm.rb +155 -21
  175. data/plugins/kernel_v2/config/vm_provisioner.rb +13 -2
  176. data/plugins/kernel_v2/config/vm_trigger.rb +6 -5
  177. data/plugins/providers/docker/action.rb +8 -17
  178. data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
  179. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
  180. data/plugins/providers/docker/cap/has_communicator.rb +11 -0
  181. data/plugins/providers/docker/communicator.rb +1 -1
  182. data/plugins/providers/docker/driver.rb +58 -7
  183. data/plugins/providers/docker/plugin.rb +5 -0
  184. data/plugins/providers/hyperv/action.rb +3 -1
  185. data/plugins/providers/hyperv/action/configure.rb +8 -0
  186. data/plugins/providers/hyperv/action/export.rb +4 -2
  187. data/plugins/providers/hyperv/cap/cleanup_disks.rb +54 -0
  188. data/plugins/providers/hyperv/cap/configure_disks.rb +200 -0
  189. data/plugins/providers/hyperv/cap/validate_disk_ext.rb +34 -0
  190. data/plugins/providers/hyperv/config.rb +5 -0
  191. data/plugins/providers/hyperv/driver.rb +90 -9
  192. data/plugins/providers/hyperv/plugin.rb +25 -0
  193. data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +28 -0
  194. data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +13 -0
  195. data/plugins/providers/hyperv/scripts/get_vhd.ps1 +16 -0
  196. data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +1 -1
  197. data/plugins/providers/hyperv/scripts/list_hdds.ps1 +17 -0
  198. data/plugins/providers/hyperv/scripts/new_vhd.ps1 +31 -0
  199. data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +25 -0
  200. data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +18 -0
  201. data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +24 -0
  202. data/plugins/providers/hyperv/scripts/set_vm_integration_services.ps1 +3 -3
  203. data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +14 -6
  204. data/plugins/providers/virtualbox/action.rb +13 -1
  205. data/plugins/providers/virtualbox/action/export.rb +4 -2
  206. data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
  207. data/plugins/providers/virtualbox/action/import.rb +8 -4
  208. data/plugins/providers/virtualbox/action/network.rb +12 -5
  209. data/plugins/providers/virtualbox/action/prepare_clone_snapshot.rb +4 -2
  210. data/plugins/providers/virtualbox/action/snapshot_delete.rb +4 -2
  211. data/plugins/providers/virtualbox/action/snapshot_restore.rb +4 -2
  212. data/plugins/providers/virtualbox/cap/cleanup_disks.rb +85 -0
  213. data/plugins/providers/virtualbox/cap/configure_disks.rb +440 -0
  214. data/plugins/providers/virtualbox/cap/mount_options.rb +40 -0
  215. data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +34 -0
  216. data/plugins/providers/virtualbox/driver/base.rb +15 -0
  217. data/plugins/providers/virtualbox/driver/meta.rb +16 -2
  218. data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
  219. data/plugins/providers/virtualbox/driver/version_6_1.rb +23 -0
  220. data/plugins/providers/virtualbox/model/storage_controller.rb +135 -0
  221. data/plugins/providers/virtualbox/model/storage_controller_array.rb +98 -0
  222. data/plugins/providers/virtualbox/plugin.rb +42 -0
  223. data/plugins/providers/virtualbox/provider.rb +2 -1
  224. data/plugins/providers/virtualbox/synced_folder.rb +1 -0
  225. data/plugins/provisioners/ansible/cap/guest/alpine/ansible_install.rb +44 -0
  226. data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +1 -1
  227. data/plugins/provisioners/ansible/plugin.rb +5 -0
  228. data/plugins/provisioners/ansible/provisioner/base.rb +1 -1
  229. data/plugins/provisioners/container/client.rb +203 -0
  230. data/plugins/provisioners/container/config.rb +83 -0
  231. data/plugins/provisioners/container/installer.rb +13 -0
  232. data/plugins/provisioners/container/plugin.rb +23 -0
  233. data/plugins/provisioners/container/provisioner.rb +28 -0
  234. data/plugins/provisioners/docker/cap/{redhat → centos}/docker_install.rb +10 -7
  235. data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +24 -0
  236. data/plugins/provisioners/docker/client.rb +4 -175
  237. data/plugins/provisioners/docker/config.rb +2 -72
  238. data/plugins/provisioners/docker/installer.rb +3 -5
  239. data/plugins/provisioners/docker/plugin.rb +6 -6
  240. data/plugins/provisioners/docker/provisioner.rb +4 -10
  241. data/plugins/provisioners/podman/cap/centos/podman_install.rb +35 -0
  242. data/plugins/provisioners/podman/cap/linux/podman_installed.rb +13 -0
  243. data/plugins/provisioners/podman/cap/redhat/podman_install.rb +26 -0
  244. data/plugins/provisioners/podman/client.rb +12 -0
  245. data/plugins/provisioners/podman/config.rb +28 -0
  246. data/plugins/provisioners/podman/installer.rb +33 -0
  247. data/plugins/provisioners/podman/plugin.rb +38 -0
  248. data/plugins/provisioners/podman/provisioner.rb +52 -0
  249. data/plugins/provisioners/salt/bootstrap-salt.sh +7 -4
  250. data/plugins/provisioners/salt/provisioner.rb +4 -0
  251. data/plugins/provisioners/shell/config.rb +1 -6
  252. data/plugins/provisioners/shell/provisioner.rb +61 -26
  253. data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
  254. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
  255. data/plugins/synced_folders/smb/cap/mount_options.rb +56 -0
  256. data/plugins/synced_folders/smb/plugin.rb +20 -0
  257. data/plugins/synced_folders/smb/synced_folder.rb +2 -2
  258. data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
  259. data/scripts/website_push_www.sh +1 -1
  260. data/templates/commands/init/Vagrantfile.min.erb +3 -0
  261. data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
  262. data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
  263. data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
  264. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  265. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  266. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  267. data/templates/guests/linux/etc_fstab.erb +6 -0
  268. data/templates/guests/nixos/network.erb +5 -6
  269. data/templates/locales/en.yml +221 -5
  270. data/templates/locales/providers_docker.yml +4 -0
  271. data/templates/nfs/exports_darwin.erb +1 -1
  272. data/vagrant.gemspec +14 -20
  273. data/version.txt +1 -1
  274. metadata +5092 -8978
  275. data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
  276. data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
  277. data/plugins/commands/login/client.rb +0 -253
  278. data/plugins/commands/login/command.rb +0 -137
  279. data/plugins/commands/login/errors.rb +0 -24
  280. data/plugins/commands/login/locales/en.yml +0 -49
  281. data/plugins/provisioners/docker/cap/redhat/docker_start_service.rb +0 -16
  282. data/scripts/website_push_docs.sh +0 -40
@@ -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