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
@@ -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