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.
- checksums.yaml +4 -4
- data/.hashibot.hcl +2 -0
- data/CHANGELOG.md +228 -0
- data/Gemfile +1 -1
- data/README.md +9 -51
- data/RELEASE.md +1 -1
- data/bin/vagrant +50 -1
- data/contrib/README.md +1 -0
- data/contrib/sudoers/linux-suse +2 -2
- data/contrib/zsh/_vagrant +738 -0
- data/contrib/zsh/generate_zsh_completion.rb +165 -0
- data/lib/vagrant.rb +28 -5
- data/lib/vagrant/action.rb +7 -0
- data/lib/vagrant/action/builder.rb +184 -38
- data/lib/vagrant/action/builtin/box_add.rb +24 -8
- data/lib/vagrant/action/builtin/box_check_outdated.rb +2 -1
- data/lib/vagrant/action/builtin/cleanup_disks.rb +56 -0
- data/lib/vagrant/action/builtin/cloud_init_setup.rb +122 -0
- data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
- data/lib/vagrant/action/builtin/delayed.rb +26 -0
- data/lib/vagrant/action/builtin/disk.rb +14 -1
- data/lib/vagrant/action/builtin/handle_box.rb +3 -1
- data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +28 -9
- data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
- data/lib/vagrant/action/builtin/mixin_provisioners.rb +1 -0
- data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
- data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
- data/lib/vagrant/action/builtin/synced_folders.rb +16 -0
- data/lib/vagrant/action/builtin/trigger.rb +37 -0
- data/lib/vagrant/action/hook.rb +76 -23
- data/lib/vagrant/action/runner.rb +12 -27
- data/lib/vagrant/action/warden.rb +28 -31
- data/lib/vagrant/box.rb +11 -4
- data/lib/vagrant/box_collection.rb +1 -1
- data/lib/vagrant/bundler.rb +310 -61
- data/lib/vagrant/cli.rb +4 -2
- data/lib/vagrant/environment.rb +1 -0
- data/lib/vagrant/errors.rb +69 -1
- data/lib/vagrant/machine.rb +64 -11
- data/lib/vagrant/machine_index.rb +28 -1
- data/lib/vagrant/patches/net-ssh.rb +186 -0
- data/lib/vagrant/plugin/manager.rb +45 -16
- data/lib/vagrant/plugin/v2/command.rb +7 -2
- data/lib/vagrant/plugin/v2/components.rb +6 -0
- data/lib/vagrant/plugin/v2/manager.rb +67 -0
- data/lib/vagrant/plugin/v2/plugin.rb +13 -0
- data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
- data/lib/vagrant/plugin/v2/trigger.rb +64 -25
- data/lib/vagrant/shared_helpers.rb +36 -0
- data/lib/vagrant/ui.rb +43 -2
- data/lib/vagrant/util.rb +2 -0
- data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
- data/lib/vagrant/util/caps.rb +48 -0
- data/lib/vagrant/util/credential_scrubber.rb +1 -1
- data/lib/vagrant/util/curl_helper.rb +12 -8
- data/lib/vagrant/util/directory.rb +19 -0
- data/lib/vagrant/util/downloader.rb +10 -5
- data/lib/vagrant/util/guest_hosts.rb +68 -0
- data/lib/vagrant/util/guest_inspection.rb +9 -1
- data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
- data/lib/vagrant/util/io.rb +7 -27
- data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
- data/lib/vagrant/util/is_port_open.rb +8 -19
- data/lib/vagrant/util/map_command_options.rb +33 -0
- data/lib/vagrant/util/mime.rb +92 -0
- data/lib/vagrant/util/network_ip.rb +11 -1
- data/lib/vagrant/util/numeric.rb +28 -0
- data/lib/vagrant/util/platform.rb +10 -2
- data/lib/vagrant/util/powershell.rb +31 -15
- data/lib/vagrant/util/subprocess.rb +9 -1
- data/lib/vagrant/util/template_renderer.rb +2 -2
- data/lib/vagrant/util/uploader.rb +7 -4
- data/lib/vagrant/vagrantfile.rb +2 -2
- data/plugins/commands/autocomplete/command/install.rb +49 -0
- data/plugins/commands/autocomplete/command/root.rb +64 -0
- data/plugins/commands/autocomplete/plugin.rb +18 -0
- data/plugins/commands/cap/command.rb +5 -1
- data/plugins/commands/cloud/auth/login.rb +20 -23
- data/plugins/commands/cloud/auth/logout.rb +2 -10
- data/plugins/commands/cloud/auth/middleware/add_authentication.rb +60 -31
- data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +64 -0
- data/plugins/commands/cloud/auth/whoami.rb +18 -20
- data/plugins/commands/cloud/box/create.rb +33 -29
- data/plugins/commands/cloud/box/delete.rb +30 -24
- data/plugins/commands/cloud/box/show.rb +41 -31
- data/plugins/commands/cloud/box/update.rb +34 -26
- data/plugins/commands/cloud/client/client.rb +55 -79
- data/plugins/commands/cloud/list.rb +3 -4
- data/plugins/commands/cloud/locales/en.yml +15 -11
- data/plugins/commands/cloud/plugin.rb +10 -0
- data/plugins/commands/cloud/provider/create.rb +38 -28
- data/plugins/commands/cloud/provider/delete.rb +39 -29
- data/plugins/commands/cloud/provider/update.rb +37 -28
- data/plugins/commands/cloud/provider/upload.rb +53 -33
- data/plugins/commands/cloud/publish.rb +193 -106
- data/plugins/commands/cloud/search.rb +34 -21
- data/plugins/commands/cloud/util.rb +273 -161
- data/plugins/commands/cloud/version/create.rb +33 -28
- data/plugins/commands/cloud/version/delete.rb +35 -28
- data/plugins/commands/cloud/version/release.rb +35 -29
- data/plugins/commands/cloud/version/revoke.rb +36 -29
- data/plugins/commands/cloud/version/update.rb +29 -25
- data/plugins/commands/destroy/command.rb +7 -7
- data/plugins/commands/login/plugin.rb +0 -13
- data/plugins/commands/ssh_config/command.rb +1 -1
- data/plugins/communicators/ssh/communicator.rb +25 -24
- data/plugins/communicators/winrm/config.rb +1 -1
- data/plugins/communicators/winrm/helper.rb +1 -1
- data/plugins/communicators/winrm/shell.rb +1 -1
- data/plugins/communicators/winssh/communicator.rb +126 -38
- data/plugins/communicators/winssh/config.rb +3 -7
- data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
- data/plugins/guests/alpine/cap/configure_networks.rb +1 -1
- data/plugins/guests/alt/cap/change_host_name.rb +40 -53
- data/plugins/guests/arch/cap/change_host_name.rb +5 -14
- data/plugins/guests/arch/cap/configure_networks.rb +27 -10
- data/plugins/guests/arch/cap/smb.rb +1 -1
- data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
- data/plugins/guests/centos/cap/flavor.rb +24 -0
- data/plugins/guests/centos/guest.rb +9 -0
- data/plugins/guests/centos/plugin.rb +20 -0
- data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
- data/plugins/guests/darwin/cap/darwin_version.rb +40 -0
- data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +1 -1
- data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +33 -10
- data/plugins/guests/darwin/plugin.rb +15 -0
- data/plugins/guests/debian/cap/change_host_name.rb +12 -11
- data/plugins/guests/debian/cap/configure_networks.rb +14 -6
- data/plugins/guests/esxi/cap/public_key.rb +3 -1
- data/plugins/guests/fedora/guest.rb +4 -4
- data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
- data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
- data/plugins/guests/haiku/cap/rsync.rb +19 -0
- data/plugins/guests/haiku/plugin.rb +15 -0
- data/plugins/guests/linux/cap/change_host_name.rb +46 -0
- data/plugins/guests/linux/cap/halt.rb +9 -1
- data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +25 -34
- data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +10 -11
- data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +74 -0
- data/plugins/guests/linux/cap/reboot.rb +36 -7
- data/plugins/guests/linux/plugin.rb +10 -0
- data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
- data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
- data/plugins/guests/openwrt/cap/change_host_name.rb +19 -0
- data/plugins/guests/openwrt/cap/halt.rb +16 -0
- data/plugins/guests/openwrt/cap/insert_public_key.rb +20 -0
- data/plugins/guests/openwrt/cap/remove_public_key.rb +22 -0
- data/plugins/guests/openwrt/cap/rsync.rb +35 -0
- data/plugins/guests/openwrt/guest.rb +23 -0
- data/plugins/guests/openwrt/plugin.rb +61 -0
- data/plugins/guests/photon/cap/change_host_name.rb +9 -15
- data/plugins/guests/pld/cap/change_host_name.rb +11 -17
- data/plugins/guests/redhat/cap/change_host_name.rb +14 -5
- data/plugins/guests/redhat/cap/flavor.rb +3 -1
- data/plugins/guests/redhat/cap/smb.rb +20 -0
- data/plugins/guests/redhat/plugin.rb +5 -0
- data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
- data/plugins/guests/solaris11/plugin.rb +5 -0
- data/plugins/guests/suse/cap/change_host_name.rb +31 -9
- data/plugins/guests/windows/cap/public_key.rb +3 -3
- data/plugins/guests/windows/cap/reboot.rb +10 -5
- data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
- data/plugins/hosts/darwin/plugin.rb +10 -0
- data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
- data/plugins/hosts/linux/cap/nfs.rb +1 -0
- data/plugins/hosts/linux/cap/rdp.rb +1 -1
- data/plugins/hosts/linux/plugin.rb +10 -0
- data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
- data/plugins/hosts/windows/cap/rdp.rb +1 -1
- data/plugins/hosts/windows/plugin.rb +15 -0
- data/plugins/kernel_v2/config/cloud_init.rb +133 -0
- data/plugins/kernel_v2/config/disk.rb +67 -14
- data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
- data/plugins/kernel_v2/config/vm.rb +155 -21
- data/plugins/kernel_v2/config/vm_provisioner.rb +13 -2
- data/plugins/kernel_v2/config/vm_trigger.rb +6 -5
- data/plugins/providers/docker/action.rb +8 -17
- data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
- data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
- data/plugins/providers/docker/cap/has_communicator.rb +11 -0
- data/plugins/providers/docker/communicator.rb +1 -1
- data/plugins/providers/docker/driver.rb +58 -7
- data/plugins/providers/docker/plugin.rb +5 -0
- data/plugins/providers/hyperv/action.rb +3 -1
- data/plugins/providers/hyperv/action/configure.rb +8 -0
- data/plugins/providers/hyperv/action/export.rb +4 -2
- data/plugins/providers/hyperv/cap/cleanup_disks.rb +54 -0
- data/plugins/providers/hyperv/cap/configure_disks.rb +200 -0
- data/plugins/providers/hyperv/cap/validate_disk_ext.rb +34 -0
- data/plugins/providers/hyperv/config.rb +5 -0
- data/plugins/providers/hyperv/driver.rb +90 -9
- data/plugins/providers/hyperv/plugin.rb +25 -0
- data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +28 -0
- data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +13 -0
- data/plugins/providers/hyperv/scripts/get_vhd.ps1 +16 -0
- data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +1 -1
- data/plugins/providers/hyperv/scripts/list_hdds.ps1 +17 -0
- data/plugins/providers/hyperv/scripts/new_vhd.ps1 +31 -0
- data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +25 -0
- data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +18 -0
- data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +24 -0
- data/plugins/providers/hyperv/scripts/set_vm_integration_services.ps1 +3 -3
- data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +14 -6
- data/plugins/providers/virtualbox/action.rb +13 -1
- data/plugins/providers/virtualbox/action/export.rb +4 -2
- data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
- data/plugins/providers/virtualbox/action/import.rb +8 -4
- data/plugins/providers/virtualbox/action/network.rb +12 -5
- data/plugins/providers/virtualbox/action/prepare_clone_snapshot.rb +4 -2
- data/plugins/providers/virtualbox/action/snapshot_delete.rb +4 -2
- data/plugins/providers/virtualbox/action/snapshot_restore.rb +4 -2
- data/plugins/providers/virtualbox/cap/cleanup_disks.rb +85 -0
- data/plugins/providers/virtualbox/cap/configure_disks.rb +440 -0
- data/plugins/providers/virtualbox/cap/mount_options.rb +40 -0
- data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +34 -0
- data/plugins/providers/virtualbox/driver/base.rb +15 -0
- data/plugins/providers/virtualbox/driver/meta.rb +16 -2
- data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
- data/plugins/providers/virtualbox/driver/version_6_1.rb +23 -0
- data/plugins/providers/virtualbox/model/storage_controller.rb +135 -0
- data/plugins/providers/virtualbox/model/storage_controller_array.rb +98 -0
- data/plugins/providers/virtualbox/plugin.rb +42 -0
- data/plugins/providers/virtualbox/provider.rb +2 -1
- data/plugins/providers/virtualbox/synced_folder.rb +1 -0
- data/plugins/provisioners/ansible/cap/guest/alpine/ansible_install.rb +44 -0
- data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +1 -1
- data/plugins/provisioners/ansible/plugin.rb +5 -0
- data/plugins/provisioners/ansible/provisioner/base.rb +1 -1
- data/plugins/provisioners/container/client.rb +203 -0
- data/plugins/provisioners/container/config.rb +83 -0
- data/plugins/provisioners/container/installer.rb +13 -0
- data/plugins/provisioners/container/plugin.rb +23 -0
- data/plugins/provisioners/container/provisioner.rb +28 -0
- data/plugins/provisioners/docker/cap/{redhat → centos}/docker_install.rb +10 -7
- data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +24 -0
- data/plugins/provisioners/docker/client.rb +4 -175
- data/plugins/provisioners/docker/config.rb +2 -72
- data/plugins/provisioners/docker/installer.rb +3 -5
- data/plugins/provisioners/docker/plugin.rb +6 -6
- data/plugins/provisioners/docker/provisioner.rb +4 -10
- data/plugins/provisioners/podman/cap/centos/podman_install.rb +35 -0
- data/plugins/provisioners/podman/cap/linux/podman_installed.rb +13 -0
- data/plugins/provisioners/podman/cap/redhat/podman_install.rb +26 -0
- data/plugins/provisioners/podman/client.rb +12 -0
- data/plugins/provisioners/podman/config.rb +28 -0
- data/plugins/provisioners/podman/installer.rb +33 -0
- data/plugins/provisioners/podman/plugin.rb +38 -0
- data/plugins/provisioners/podman/provisioner.rb +52 -0
- data/plugins/provisioners/salt/bootstrap-salt.sh +7 -4
- data/plugins/provisioners/salt/provisioner.rb +4 -0
- data/plugins/provisioners/shell/config.rb +1 -6
- data/plugins/provisioners/shell/provisioner.rb +61 -26
- data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
- data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
- data/plugins/synced_folders/smb/cap/mount_options.rb +56 -0
- data/plugins/synced_folders/smb/plugin.rb +20 -0
- data/plugins/synced_folders/smb/synced_folder.rb +2 -2
- data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
- data/scripts/website_push_www.sh +1 -1
- data/templates/commands/init/Vagrantfile.min.erb +3 -0
- data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
- data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
- data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
- data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
- data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
- data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
- data/templates/guests/linux/etc_fstab.erb +6 -0
- data/templates/guests/nixos/network.erb +5 -6
- data/templates/locales/en.yml +221 -5
- data/templates/locales/providers_docker.yml +4 -0
- data/templates/nfs/exports_darwin.erb +1 -1
- data/vagrant.gemspec +14 -20
- data/version.txt +1 -1
- metadata +5092 -8978
- data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
- data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
- data/plugins/commands/login/client.rb +0 -253
- data/plugins/commands/login/command.rb +0 -137
- data/plugins/commands/login/errors.rb +0 -24
- data/plugins/commands/login/locales/en.yml +0 -49
- data/plugins/provisioners/docker/cap/redhat/docker_start_service.rb +0 -16
- 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,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
|
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("
|
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 :
|
15
|
-
|
17
|
+
when :centos
|
18
|
+
docker_enable_service(machine)
|
16
19
|
else
|
17
|
-
|
20
|
+
docker_enable_systemctl(machine)
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
21
|
-
def self.
|
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.
|
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
|
-
|
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
|
-
|
8
|
-
|
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
|
-
|
1
|
+
require_relative "../container/config"
|
2
2
|
|
3
3
|
module VagrantPlugins
|
4
4
|
module DockerProvisioner
|
5
|
-
class 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
|