启动 vagrant box 时,“default”这个名字是从哪里来的?
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
有没有办法设置这个?
启动 vagrant box 时,“default”这个名字是从哪里来的?
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
有没有办法设置这个?
我发现多个选项令人困惑,所以我决定测试所有选项以了解它们的确切作用。
我正在使用 VirtualBox 4.2.16-r86992 和 Vagrant 1.3.3。
我创建了一个名为nametest
并运行的目录
vagrant init precise64 http://files.vagrantup.com/precise64.box
生成一个默认的 Vagrantfile。然后我打开了 VirtualBox GUI,这样我就可以看到我创建的盒子的名称。
默认 Vagrant 文件
Vagrant.configure('2') do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
end
VirtualBox GUI 名称: “nametest_default_1386347922”
注释: 名称默认为 DIRECTORY_default_TIMESTAMP 格式。
定义虚拟机
Vagrant.configure('2') do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.define "foohost"
end
VirtualBox GUI 名称: “nametest_foohost_1386347922”
注释: 如果您明确定义 VM,则使用的名称将替换标记“默认”。这是控制台上的名称vagrant输出。基于zook
的(评论者)输入进行简化
设置提供者名称
Vagrant.configure('2') do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.provider :virtualbox do |vb|
vb.name = "foohost"
end
end
VirtualBox GUI 名称: “foohost”
注释: 如果您name
在提供程序配置块中设置属性,该名称将成为 VirtualBox GUI 中显示的整个名称。
组合示例:定义 VM -and- 设置提供程序名称
Vagrant.configure('2') do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.define "foohost"
config.vm.provider :virtualbox do |vb|
vb.name = "barhost"
end
end
VirtualBox GUI 名称: “barhost”
评论: 如果您同时使用这两种方法,则在提供程序配置块中分配的值name
获胜。基于zook
的(评论者)输入进行简化
套装hostname
(奖金)
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.hostname = "buzbar"
end
评论:这将设置 VM 内的主机名。这将是hostname
VM 中命令的输出,这也是提示中可见的内容vagrant@<hostname>
,如下所示vagrant@buzbar
Vagrant.configure('2') do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.hostname = "buzbar"
config.vm.define "foohost"
config.vm.provider :virtualbox do |vb|
vb.name = "barhost"
end
end
就这样。您现在知道可以设置的 3 个不同选项以及它们的效果。我想这是一个偏好问题?(我是 Vagrant 的新手,所以我还不能谈论最佳实践。)
这就是我为各个虚拟机分配名称的方式。更改YOURNAMEHERE
为您想要的名称。
Vagrantfile 的内容:
Vagrant.configure("2") do |config|
# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "precise32"
# The url from where the 'config.vm.box' box will be fetched if it
# doesn't already exist on the user's system.
config.vm.box_url = "http://files.vagrantup.com/precise32.box"
config.vm.define :YOURNAMEHERE do |t|
end
end
终端输出:
$ vagrant status
Current machine states:
YOURNAMEHERE not created (virtualbox)
我通过在VagrantFile中定义来指定名称,并指定主机名,因此我喜欢在独立于设备操作系统执行 Linux 命令时看到我的项目名称。✌️
config.vm.define "abc"
config.vm.hostname = "abc"
如果您想更改其他任何内容而不是“默认”,那么只需将这些附加行添加到您的 Vagrantfile 中:
config.vm.define "tendo" do |tendo|
end
其中“tendo”将是出现的名称而不是默认名称
您可以通过更改config.vm.define
.
这是使用getopts并允许您动态更改名称的简单 Vagrantfile:
# -*- mode: ruby -*-
require 'getoptlong'
opts = GetoptLong.new(
[ '--vm-name', GetoptLong::OPTIONAL_ARGUMENT ],
)
vm_name = ENV['VM_NAME'] || 'default'
begin
opts.each do |opt, arg|
case opt
when '--vm-name'
vm_name = arg
end
end
rescue
end
Vagrant.configure(2) do |config|
config.vm.define vm_name
config.vm.provider "virtualbox" do |vbox, override|
override.vm.box = "ubuntu/wily64"
# ...
end
# ...
end
因此,要使用不同的名称,您可以运行例如:
vagrant --vm-name=my_name up --no-provision
注意:该--vm-name
参数需要在命令前指定up
。
或者:
VM_NAME=my_name vagrant up --no-provision
是的,对于 Virtualbox 提供商,请执行以下操作:
Vagrant.configure("2") do |config|
# ...other options...
config.vm.provider "virtualbox" do |p|
p.name = "something-else"
end
end
如果有很多人使用您的 vagrant 文件 - 您可能希望动态设置名称。下面是如何使用主机中的用户名作为盒子名称和主机名的示例:
require 'etc'
vagrant_name = "yourProjectName-" + Etc.getlogin
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.hostname = vagrant_name
config.vm.provider "virtualbox" do |v|
v.name = vagrant_name
end
end