Vagrant 手册之 Vagrantfile - 提示及技巧

原文地址html

Vagrantfile 是一种很是灵活的配置格式。语法基于 Ruby,能够用它作不少事情。在本页使用一些提示和技巧时,请注意正确使用它们。node

1. 使用循环定义虚拟机

若是你想对多机器应用稍微不一样的配置,能够使用一个循环来作到这一点。例如,若是你想建立三台机器:web

(1..3).each do |i|
  config.vm.define "node-#{i}" do |node|
    node.vm.provision "shell",
      inline: "echo hello from node #{i}"
  end
end

警告:多机器定义和 provider 覆盖的内部部分是延迟加载的(The inner portion of multi-machine definitions and provider overrides are lazy-loaded)。若是更改配置中使用的变量的值,这可能会致使问题。例如,下面的循环不起做用:shell

# 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 的值,而不是复制。所以,当你运行这个时,每一个节点都会提供相同的文本。ruby

这是一个容易犯的错误,而 Vagrant 没法真正避免,因此咱们能作的最好的就是在这里提到它。ssh

2. 在 ssh 会话中覆盖主机 locale

一般,主机 locale 环境变量传递给客户机。若是客户机软件不支持主机 locale,则可能会致使失败。一种可能的解决方案是覆盖 Vagrantfile 中的语言环境:ide

ENV["LC_ALL"] = "en_US.UTF-8"

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

更改仅在 Vagrantfile 中可见。svg

相关文章
相关标签/搜索