如何更改Vagrant'默认'机器名称?

时间:2013-07-24 22:07:32

标签: configuration vagrant virtualbox vagrantfile

启动流浪者盒时,名称“default”来自何处?

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...

有没有办法设置它?

7 个答案:

答案 0 :(得分:320)

我发现多个选项令人困惑,所以我决定测试所有这些选项以确切了解它们的作用。

我正在使用VirtualBox 4.2.16-r86992和Vagrant 1.3.3。

我创建了一个名为nametest的目录并运行了

vagrant init precise64 http://files.vagrantup.com/precise64.box

生成默认的Vagrantfile。然后我打开了VirtualBox GUI,这样我就可以看到我创建的框会显示为什么名称。

  1. 默认的Vagrantfile

    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格式。

  2. 定义VM

    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,则使用的名称将替换令牌“default”。这是控制台上的名称 vagrant 输出。根据{{​​1}}的(评论者)输入进行简化

  3. 设置提供商名称

    zook

    VirtualBox GUI名称:“foohost”

    注释:如果在提供程序配置块中设置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中显示的整个名称。

    组合示例: 定义VM并设置提供商名称

    name

    VirtualBox GUI名称:“barhost”

    注释:如果同时使用这两种方法,则在提供程序配置块中分配给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 的值将获胜。根据{{​​1}}的(评论者)输入进行简化

  4. 设置name(BONUS)

    zook

    评论:这会在VM中设置主机名。这将是VM中hostname命令的输出,这也是Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.hostname = "buzbar" end 等提示中可见的内容,此处看起来像hostname

  5. 最终代码

    vagrant@<hostname>

    就是这样。您现在知道可以设置3种不同的选项以及它们具有的效果。我想这是一个偏好的问题吗? (我是Vagrant的新手,所以我还不能谈论最佳实践。)

答案 1 :(得分:57)

这是我为各个VM分配名称的方式。将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)

答案 2 :(得分:16)

如果你想改变其他任何东西而不是'default',那么只需将这些额外的行添加到你的Vagrantfile中:

使用“vagrant status”

时更改基箱名称
 config.vm.define "tendo" do |tendo|
  end

其中“tendo”将是显示的名称而不是默认值

答案 3 :(得分:6)

我在 VagrantFile 中通过定义指定名称,并指定主机名,因此我喜欢在执行Linux时看到我的项目名称命令独立于我的设备的操作系统。 ✌️

config.vm.define "abc"
config.vm.hostname = "abc"

答案 4 :(得分:5)

是的,对于Virtualbox提供商,请执行以下操作:

Vagrant.configure("2") do |config|
    # ...other options...
    config.vm.provider "virtualbox" do |p|
        p.name = "something-else"
    end
end

答案 5 :(得分:4)

您可以通过更改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

答案 6 :(得分:0)

如果有很多人使用您的流浪文件 - 您可能希望动态设置名称。以下示例如何使用 HOST计算机中的用户名作为框和主机名的名称:

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