在定义多个Vagrant VM时避免重复供应

时间:2018-01-05 00:47:51

标签: vagrant provisioning vagrant-provision

问题

我正在尝试更快地配置基本相同的流浪汉VM(仅在网络上有所不同)的多个副本。我遇到的问题是,流浪汉似乎在每台机器上按顺序执行配置步骤。

我想在这里节省时间的原因是因为我使用vagrant作为测试工具的一部分,所以我需要尽量减少运行测试所需的时间。

例如,请考虑以下Vagrantfile:

N_HOSTS = 3
$script = <<SCRIPT
    sudo apt-get -y update
SCRIPT

Vagrant.configure("2") do |config|

  (1..N_HOSTS).each do |i|
    config.vm.define "host#{i}" do |sc|
      sc.vm.box = "ubuntu/xenial64"
      sc.vm.network "private_network", ip: "192.168.10.#{10 + i}"
      sc.vm.hostname = "host#{i}"
    end
  end

  config.vm.provision "shell", inline: $script
end

这相对简单。所有这一切都是apt-get update,但vagrant up在空闲的桌面上占用2分15秒。

潜在解决方案

  1. 并行配置机器。 Currently unanswered on SO
  2. 配置第一台机器,将其包装到一个盒子中,然后从新包装的盒子中启动主机2..N。我是Vagrant的新手,所以我不清楚如何做到这一点,以及这是否是实现目标的最佳方式。

1 个答案:

答案 0 :(得分:1)

您可以使用sudo ufw allow 8983 并行启动VM,它支持使用密钥xargs执行并行命令(对于您的Vagrantfile):

-P <max-procs>

因此,如果你想同时启动三个虚拟机,那就是:

seq 1 N | xargs -PN -I {} vagrant up host{}