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
@@ -0,0 +1,83 @@
1
+ require 'set'
2
+
3
+ module VagrantPlugins
4
+ module ContainerProvisioner
5
+ class Config < Vagrant.plugin("2", :config)
6
+ attr_reader :images
7
+ attr_accessor :post_install_provisioner
8
+
9
+ def initialize
10
+ @images = Set.new
11
+ @post_install_provisioner = nil
12
+
13
+ @__build_images = []
14
+ @__containers = Hash.new { |h, k| h[k] = {} }
15
+ end
16
+
17
+ # Accessor for internal state.
18
+ def build_images
19
+ @__build_images
20
+ end
21
+
22
+ # Accessor for the internal state.
23
+ def containers
24
+ @__containers
25
+ end
26
+
27
+ # Defines an image to build using `<cmd> build` within the machine.
28
+ #
29
+ # @param [String] path Path to the Dockerfile to pass to
30
+ # container build command
31
+ def build_image(path, **opts)
32
+ @__build_images << [path, opts]
33
+ end
34
+
35
+ def images=(images)
36
+ @images = Set.new(images)
37
+ end
38
+
39
+ def pull_images(*images)
40
+ @images += images.map(&:to_s)
41
+ end
42
+
43
+ def post_install_provision(name, **options, &block)
44
+ proxy = VagrantPlugins::Kernel_V2::VMConfig.new
45
+ proxy.provision(name, **options, &block)
46
+ @post_install_provisioner = proxy.provisioners.first
47
+ end
48
+
49
+ def run(name, **options)
50
+ @__containers[name.to_s] = options.dup
51
+ end
52
+
53
+ def merge(other)
54
+ super.tap do |result|
55
+ result.pull_images(*(other.images + self.images))
56
+
57
+ build_images = @__build_images.dup
58
+ build_images += other.build_images
59
+ result.instance_variable_set(:@__build_images, build_images)
60
+
61
+ containers = {}
62
+ @__containers.each do |name, params|
63
+ containers[name] = params.dup
64
+ end
65
+ other.containers.each do |name, params|
66
+ containers[name] = @__containers[name].merge(params)
67
+ end
68
+
69
+ result.instance_variable_set(:@__containers, containers)
70
+ end
71
+ end
72
+
73
+ def finalize!
74
+ @__containers.each do |name, params|
75
+ params[:image] ||= name
76
+ params[:auto_assign_name] = true if !params.key?(:auto_assign_name)
77
+ params[:daemonize] = true if !params.key?(:daemonize)
78
+ params[:restart] = "always" if !params.key?(:restart)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,13 @@
1
+ module VagrantPlugins
2
+ module ContainerProvisioner
3
+ class Installer
4
+ def initialize(machine)
5
+ @machine = machine
6
+ end
7
+
8
+ def ensure_installed
9
+ # nothing to do
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module ContainerProvisioner
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "container"
7
+ description <<-DESC
8
+ Provides support for provisioning your virtual machines with
9
+ OCI images and containers.
10
+ DESC
11
+
12
+ config(:container, :provisioner) do
13
+ require_relative "config"
14
+ Config
15
+ end
16
+
17
+ provisioner(:container) do
18
+ require_relative "provisioner"
19
+ Provisioner
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ require_relative "client"
2
+ require_relative "installer"
3
+
4
+ module VagrantPlugins
5
+ module ContainerProvisioner
6
+ class Provisioner < Vagrant.plugin("2", :provisioner)
7
+ def initialize(machine, config, installer = nil, client = nil)
8
+ super(machine, config)
9
+
10
+ @installer = installer || Installer.new(@machine)
11
+ @client = client || Client.new(@machine, "")
12
+ @logger = Log4r::Logger.new("vagrant::provisioners::container")
13
+ end
14
+
15
+ def provision
16
+ # nothing to do
17
+ end
18
+
19
+ def run_provisioner(env)
20
+ klass = Vagrant.plugin("2").manager.provisioners[env[:provisioner].type]
21
+ result = klass.new(env[:machine], env[:provisioner].config)
22
+ result.config.finalize!
23
+
24
+ result.provision
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,31 +1,34 @@
1
1
  module VagrantPlugins
2
2
  module DockerProvisioner
3
3
  module Cap
4
- module Redhat
4
+ module Centos
5
5
  module DockerInstall
6
6
  def self.docker_install(machine)
7
7
  machine.communicate.tap do |comm|
8
8
  comm.sudo("yum -q -y update")
9
9
  comm.sudo("yum -q -y remove docker-io* || true")
10
- comm.sudo("curl -sSL https://get.docker.com/ | sh")
10
+ comm.sudo("yum install -y -q yum-utils")
11
+ comm.sudo("yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo")
12
+ comm.sudo("yum makecache")
13
+ comm.sudo("yum install -y -q docker-ce")
11
14
  end
12
15
 
13
16
  case machine.guest.capability("flavor")
14
- when :rhel_7
15
- docker_enable_rhel7(machine)
17
+ when :centos
18
+ docker_enable_service(machine)
16
19
  else
17
- docker_enable_default(machine)
20
+ docker_enable_systemctl(machine)
18
21
  end
19
22
  end
20
23
 
21
- def self.docker_enable_rhel7(machine)
24
+ def self.docker_enable_systemctl(machine)
22
25
  machine.communicate.tap do |comm|
23
26
  comm.sudo("systemctl start docker.service")
24
27
  comm.sudo("systemctl enable docker.service")
25
28
  end
26
29
  end
27
30
 
28
- def self.docker_enable_default(machine)
31
+ def self.docker_enable_service(machine)
29
32
  machine.communicate.tap do |comm|
30
33
  comm.sudo("service docker start")
31
34
  comm.sudo("chkconfig docker on")
@@ -0,0 +1,24 @@
1
+ module VagrantPlugins
2
+ module DockerProvisioner
3
+ module Cap
4
+ module Centos
5
+ module DockerStartService
6
+ def self.docker_start_service(machine)
7
+ case machine.guest.capability("flavor")
8
+ when :centos
9
+ machine.communicate.tap do |comm|
10
+ comm.sudo("service docker start")
11
+ comm.sudo("chkconfig docker on")
12
+ end
13
+ else
14
+ machine.communicate.tap do |comm|
15
+ comm.sudo("systemctl start docker.service")
16
+ comm.sudo("systemctl enable docker.service")
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,32 +1,11 @@
1
- require 'digest/sha1'
1
+ require_relative "../container/client"
2
2
 
3
3
  module VagrantPlugins
4
4
  module DockerProvisioner
5
- class Client
5
+ class Client < VagrantPlugins::ContainerProvisioner::Client
6
6
  def initialize(machine)
7
- @machine = machine
8
- end
9
-
10
- def build_images(images)
11
- @machine.communicate.tap do |comm|
12
- images.each do |path, opts|
13
- @machine.ui.info(I18n.t("vagrant.docker_building_single", path: path))
14
- comm.sudo("docker build #{opts[:args]} #{path}") do |type, data|
15
- handle_comm(type, data)
16
- end
17
- end
18
- end
19
- end
20
-
21
- def pull_images(*images)
22
- @machine.communicate.tap do |comm|
23
- images.each do |image|
24
- @machine.ui.info(I18n.t("vagrant.docker_pulling_single", name: image))
25
- comm.sudo("docker pull #{image}") do |type, data|
26
- handle_comm(type, data)
27
- end
28
- end
29
- end
7
+ super(machine, "docker")
8
+ @container_command = "docker"
30
9
  end
31
10
 
32
11
  def start_service
@@ -39,156 +18,6 @@ module VagrantPlugins
39
18
  @machine.guest.capability(:docker_daemon_running)
40
19
  end
41
20
 
42
- def run(containers)
43
- containers.each do |name, config|
44
- cids_dir = "/var/lib/vagrant/cids"
45
- config[:cidfile] ||= "#{cids_dir}/#{Digest::SHA1.hexdigest name}"
46
-
47
- @machine.ui.info(I18n.t("vagrant.docker_running", name: name))
48
- @machine.communicate.sudo("mkdir -p #{cids_dir}")
49
- run_container({
50
- name: name,
51
- original_name: name,
52
- }.merge(config))
53
- end
54
- end
55
-
56
- def run_container(config)
57
- raise "Container's cidfile was not provided!" if !config[:cidfile]
58
-
59
- id = "$(cat #{config[:cidfile]})"
60
-
61
- if container_exists?(id)
62
- if container_args_changed?(config)
63
- @machine.ui.info(I18n.t("vagrant.docker_restarting_container_args",
64
- name: config[:name],
65
- ))
66
- stop_container(id)
67
- create_container(config)
68
- elsif container_image_changed?(config)
69
- @machine.ui.info(I18n.t("vagrant.docker_restarting_container_image",
70
- name: config[:name],
71
- ))
72
- stop_container(id)
73
- create_container(config)
74
- else
75
- start_container(id)
76
- end
77
- else
78
- create_container(config)
79
- end
80
- end
81
-
82
- def container_exists?(id)
83
- lookup_container(id, true)
84
- end
85
-
86
- def start_container(id)
87
- if !container_running?(id)
88
- @machine.communicate.sudo("docker start #{id}")
89
- end
90
- end
91
-
92
- def stop_container(id)
93
- @machine.communicate.sudo %[
94
- docker stop #{id}
95
- docker rm #{id}
96
- ]
97
- end
98
-
99
- def container_running?(id)
100
- lookup_container(id)
101
- end
102
-
103
- def container_image_changed?(config)
104
- # Returns true if there is a container running with the given :name,
105
- # and the container is not using the latest :image.
106
-
107
- # Here, "docker inspect <container>" returns the id of the image
108
- # that the container is using. We check that the latest image that
109
- # has been built with that name (:image) matches the one that the
110
- # container is running.
111
- cmd = ("docker inspect --format='{{.Image}}' #{config[:name]} |" +
112
- " grep $(docker images -q #{config[:image]})")
113
- return !@machine.communicate.test(cmd)
114
- end
115
-
116
- def container_args_changed?(config)
117
- path = container_data_path(config)
118
- return true if !path.exist?
119
-
120
- args = container_run_args(config)
121
- sha = Digest::SHA1.hexdigest(args)
122
- return true if path.read.chomp != sha
123
-
124
- return false
125
- end
126
-
127
- def create_container(config)
128
- args = container_run_args(config)
129
-
130
- @machine.communicate.sudo %[rm -f "#{config[:cidfile]}"]
131
- @machine.communicate.sudo %[docker run #{args}]
132
-
133
- sha = Digest::SHA1.hexdigest(args)
134
- container_data_path(config).open("w+") do |f|
135
- f.write(sha)
136
- end
137
- end
138
-
139
- def lookup_container(id, list_all = false)
140
- docker_ps = "sudo docker ps -q"
141
- docker_ps << " -a" if list_all
142
- @machine.communicate.tap do |comm|
143
- # Docker < 0.7.0 stores container IDs using its short version while
144
- # recent versions use the full container ID
145
- # using full container ID from now on.
146
- return comm.test("#{docker_ps} --no-trunc | grep -wFq #{id}")
147
- end
148
- end
149
-
150
- def container_name(config)
151
- name = config[:name]
152
-
153
- # If the name is the automatically assigned name, then
154
- # replace the "/" with "-" because "/" is not a valid
155
- # character for a docker container name.
156
- name = name.gsub("/", "-") if name == config[:original_name]
157
- name
158
- end
159
-
160
- def container_run_args(config)
161
- name = container_name(config)
162
-
163
- args = "--cidfile=#{config[:cidfile]} "
164
- args << "-d " if config[:daemonize]
165
- args << "--name #{name} " if name && config[:auto_assign_name]
166
- args << "--restart=#{config[:restart]}" if config[:restart]
167
- args << " #{config[:args]}" if config[:args]
168
-
169
- "#{args} #{config[:image]} #{config[:cmd]}".strip
170
- end
171
-
172
- def container_data_path(config)
173
- name = container_name(config)
174
- @machine.data_dir.join("docker-#{name}")
175
- end
176
-
177
- protected
178
-
179
- # This handles outputting the communication data back to the UI
180
- def handle_comm(type, data)
181
- if [:stderr, :stdout].include?(type)
182
- # Clear out the newline since we add one
183
- data = data.chomp
184
- return if data.empty?
185
-
186
- options = {}
187
- #options[:color] = color if !config.keep_color
188
-
189
- @machine.ui.info(data.chomp, options)
190
- end
191
- end
192
21
  end
193
22
  end
194
23
  end
@@ -1,45 +1,8 @@
1
- require 'set'
1
+ require_relative "../container/config"
2
2
 
3
3
  module VagrantPlugins
4
4
  module DockerProvisioner
5
- class Config < Vagrant.plugin("2", :config)
6
- attr_reader :images
7
- attr_accessor :post_install_provisioner
8
-
9
- def initialize
10
- @images = Set.new
11
- @post_install_provisioner = nil
12
-
13
- @__build_images = []
14
- @__containers = Hash.new { |h, k| h[k] = {} }
15
- end
16
-
17
- # Accessor for internal state.
18
- def build_images
19
- @__build_images
20
- end
21
-
22
- # Accessor for the internal state.
23
- def containers
24
- @__containers
25
- end
26
-
27
- # Defines an image to build using `docker build` within the machine.
28
- #
29
- # @param [String] path Path to the Dockerfile to pass to
30
- # `docker build`.
31
- def build_image(path, **opts)
32
- @__build_images << [path, opts]
33
- end
34
-
35
- def images=(images)
36
- @images = Set.new(images)
37
- end
38
-
39
- def pull_images(*images)
40
- @images += images.map(&:to_s)
41
- end
42
-
5
+ class Config < VagrantPlugins::ContainerProvisioner::Config
43
6
  def post_install_provision(name, **options, &block)
44
7
  # Abort
45
8
  raise DockerError, :wrong_provisioner if options[:type] == "docker"
@@ -48,39 +11,6 @@ module VagrantPlugins
48
11
  proxy.provision(name, **options, &block)
49
12
  @post_install_provisioner = proxy.provisioners.first
50
13
  end
51
-
52
- def run(name, **options)
53
- @__containers[name.to_s] = options.dup
54
- end
55
-
56
- def merge(other)
57
- super.tap do |result|
58
- result.pull_images(*(other.images + self.images))
59
-
60
- build_images = @__build_images.dup
61
- build_images += other.build_images
62
- result.instance_variable_set(:@__build_images, build_images)
63
-
64
- containers = {}
65
- @__containers.each do |name, params|
66
- containers[name] = params.dup
67
- end
68
- other.containers.each do |name, params|
69
- containers[name] = @__containers[name].merge(params)
70
- end
71
-
72
- result.instance_variable_set(:@__containers, containers)
73
- end
74
- end
75
-
76
- def finalize!
77
- @__containers.each do |name, params|
78
- params[:image] ||= name
79
- params[:auto_assign_name] = true if !params.key?(:auto_assign_name)
80
- params[:daemonize] = true if !params.key?(:daemonize)
81
- params[:restart] = "always" if !params.key?(:restart)
82
- end
83
- end
84
14
  end
85
15
  end
86
16
  end