流浪者默认配置

vagrant default configuration

我有一些配置必须始终存在于 Vagrantfile 中,当 init 为 运行 时,无论盒子如何。
例如,当我 运行 vagrant init ubuntu/trusty64vagrant init centos/7 时,这必须存在于两个 Vagrantfiles 中:

config.vm.provider "virtualbox" do |vb|
  vb.memory = 2048
 end

 config.vm.provision "shell", inline: <<-SHELL
   # obligatory provisioning goes here
 SHELL

有什么方法可以配置 vagrant,这样当我 运行 vagrant init 这条线已经存在于 Vagrantfile 中了吗?

默认情况下你不能真正改变这个行为,不幸的是 vagrant init 没有建议使用你自己的 Vagrantfile 的选项(那会很整洁但没有)。有 2 个模板(参见 https://github.com/mitchellh/vagrant/tree/master/templates/commands/init)可以使用,默认模板和最小模板。

您还有以下选择:

  1. 覆盖默认模板Vagrantfile.erb

在您的系统中搜索文件(在 mac 上,它应该在 /opt/vagrant/embedded/gems/gems/vagrant-1.9.1/templates/commands/init/Vagrantfile.erb 中的某处,具体取决于您的版本)并将其更改为您需要的内容。

  1. 你可以在 .vagrant.d 目录下有一个全局 Vagrantfile ,它将应用于你所有的 Vagrantfiles。请参阅 加载顺序和合并vagrantfile documentation.

  2. 使用新命令编写一个插件来创建 Vagrantfile。虽然这可能有点矫枉过正

试试这个 https://www.vagrantup.com/docs/other/environmental-variables.html#vagrant_default_template

export VAGRANT_DEFAULT_TEMPLATE=~/.vagrant.d/Vagrantfile.erb放入~/.bash_profile

touch ~/.vagrant.d/Vagrantfile.erb 

有内容

Vagrant.configure("2") do |config|
  config.vm.define "main"
  config.vm.box = "<%= box_name %>"
  <% if box_version -%>
  config.vm.box_version = "<%= box_version %>"
  <% end -%>
  <% if box_url -%>
  config.vm.box_url = "<%= box_url %>"
  <% end -%>
  # config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "private_network", type: "dhcp"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "4096"
    vb.cpus = 4
  end
end

然后source ~/.bash_profile

vagrant init ubuntu/bionic64

效果很好!