如何更改Vagrant“默认”计算机名称?


Answers:


341

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

我正在使用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. 定义虚拟机

    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输出名称。根据zook的(注释器)输入进行简化

  3. 设置提供商名称

    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并设置提供程序名称

    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的(注释器)输入进行简化

  4. 套装hostname(奖金)

    Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
      config.vm.hostname = "buzbar"
    end
    

    注释:这将在VM内部设置主机名。这将是hostnameVM 中命令的输出,这也是在提示符()中可见的内容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的新手,所以我还不能说出最佳实践。)


3
嘿,我对相关问题做了更多研究。(1)名称中的目录是第一次生成的,重命名目录时不会更改。(2)名称中的时间戳是第一次生成的,并且在您重新启动时不会更改。(3)通过UUID将项目映射到VirtualBox VM,该UUID存储在PROJECT_ROOT / .vagrant / machines / default / virtualbox / id中。该UUID在VirtualBox GUI(virtualbox.org/ticket/6989)中不可见,但是您可以VBoxManage list vms在命令行上使用。
odigity 2014年

我在上
一条

6
值得注意的是,define VM方法名称用于Vagrant stdout和日志中,而set provider name名称则用于管理提供程序的框。因此,两者都是相关的。
Redsandro 2014年

30
如果该do... end块为空,则实际上并不需要它。config.vm.define "foohost"效果很好。
Zook

6
我喜欢这个答案的细节,但是它并没有真正解决最初的问题。是的,这些配置将导致“名称”正确显示在Virtualbox GUI中,并且如果使用vboxmanage列出它们,则相同。但是,Bringing machine 'default' up with 'virtualbox' provider...执行时这种情况仍然存在vagrant up
-TomSchober

60

这是我为各个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)

9
您可以在定义末尾省略该块,因此也可以config.vm.define :app_name正常工作。
Vidur

1
如果YOURNAMEHERE是变量,则应删除冒号“:”:config.vm.define YOURNAMEHERE do |t| end
Radu 2015年

17

如果您想更改其他内容而不是“默认”,则只需将以下其他行添加到您的Vagrantfile中:

使用“闲置状态”时,更改基盒名称

 config.vm.define "tendo" do |tendo|
  end

其中“ tendo”是将出现的名称而不是默认名称


我认为您的答案更为精确,很明显,您所设置的字符串与使用`:OBJECT_VALUE`的其他答案相反
Andres Leon Rangel

8

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

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

6

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

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

2
更改我的Vagrantfile并通过vagrant destroy重新启动将机器完全拆除 后,仍将其称为默认值。
凯尔·凯利2013年

3
我相信这会更改VirtualBox GUI中的名称。“您可以自定义出现在VirtualBox GUI中的名称”参考:链接
nikhil

2
啊,弥补了我的错-我以为作者想更改VirtualBox名称,内部Vagrant名称当然只能在多VM环境中才能更改。
cmur2

4
cmur2并不是太挑剔,但是可以通过仅提供一个config.vm.define块在单个机器环境中设置内部Vagrant名称。
戴夫·伯奇

5

您可以通过更改值来更改无业游民的默认计算机名称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

1

如果有很多人在使用您的无用信息文件-您可能需要动态设置名称。下面是使用主机中的用户名作为框名和主机名的示例方法:

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.