Tips & Tricks
Vagrantfile是一种非常灵活的配置格式。因为它只是Ruby,所以你可以用它做很多事情。然而,同样的道理,因为它是Ruby,所以有很多方法可以朝自己的脚开枪(即伤到自己)。在使用本页上的一些提示和技巧时,请注意正确使用它们。
1.Loop Over VM Definitions 循环实现虚拟机定义
如果你想对许多多机机器应用稍微不同的配置,可以使用循环来实现这一点。例如,如果你想创建三个机器:
(1..3).each do |i| config.vm.define "node-#{i}" do |node| node.vm.provision "shell", inline: "echo hello from node #{i}" end end
⚠️多机器定义和提供程序重写的内部部分是延迟加载的。如果更改配置中使用的变量的值,可能会导致问题。
例如,下面的循环不工作:
# THIS DOES NOT WORK! for i in 1..3 do config.vm.define "node-#{i}" do |node| node.vm.provision "shell", inline: "echo hello from node #{i}" end end
Ruby中的for i in ...结构实际上在每次迭代中都修改了i的值,而不仅仅只是复制。因此,当你运行这个时,每个节点实际上都将提供相同的文本。
这是一个很容易犯的错误,vagrant并不能真正保护它,所以我们能做的最好的就是在这里提到它。
2.Overwrite host locale in ssh session在ssh会话中覆盖主机区域设置
通常,宿主语言环境变量被传递给客户。如果客户软件不支持主机区域设置,可能会导致失败。一个可能的解决方案是覆盖Vagrantfile中的locale:
ENV["LC_ALL"] = "en_US.UTF-8" Vagrant.configure("2") do |config| # ... end
这个改变只在Vagrantfile文件中可见