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

Kyl*_*ley 223 configuration virtualbox vagrant vagrantfile

启动流浪盒时,"默认"这个名称来自哪里?

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
Run Code Online (Sandbox Code Playgroud)

有没有办法设置这个?

odi*_*ity 331

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

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

我创建了一个名为nametestand ran 的目录

vagrant init precise64 http://files.vagrantup.com/precise64.box
Run Code Online (Sandbox Code Playgroud)

生成默认的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
    
    Run Code Online (Sandbox Code Playgroud)

    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
    
    Run Code Online (Sandbox Code Playgroud)

    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
    
    Run Code Online (Sandbox Code Playgroud)

    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
    
    Run Code Online (Sandbox Code Playgroud)

    VirtualBox GUI名称: "barhost"

    注释: 如果同时使用这两种方法,则name在提供程序配置块中分配的值将获胜.基于zook'(评论者)输入简化

  4. 套装hostname(奖金)

    Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
      config.vm.hostname = "buzbar"
    end
    
    Run Code Online (Sandbox Code Playgroud)

    注释:这将在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
Run Code Online (Sandbox Code Playgroud)

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

  • 如果它是空的,你实际上并不需要`do ... end`块.`config.vm.define"foohost"`工作得很好. (29认同)
  • 值得注意的是,`define VM`方法名称用于Vagrant stdout和logs,而`set provider name` name用于管理提供者的框.所以两者都是相关的. (6认同)
  • 我喜欢这个答案的细节,但它并没有真正解决原始问题.是的,这些配置将导致正确显示在Virtualbox GUI中的"名称",如果您使用vboxmanage列出它们,则相同.然而,当你执行`vagrant up'时,这仍然会使'带来'机器'默认'与'virtualbox'提供程序一起... (6认同)
  • 嘿,我对相关事项做了一些研究.(1)名称中的目录是第一次生成的,在重命名目录时不会更改.(2)名称中的时间戳是第一次生成的,并且在重新启动时不会更改.(3)项目通过UUID映射到VirtualBox VM,存储在PROJECT_ROOT/.vagrant/machines/default/virtualbox/id中.VirtualBox GUI(https://www.virtualbox.org/ticket/6989)中不显示此UUID,但您可以在命令行上使用`VBoxManage list vms`. (3认同)

nik*_*hil 59

这是我为各个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
Run Code Online (Sandbox Code Playgroud)

终端输出:

$ vagrant status
Current machine states:

YOURNAMEHERE             not created (virtualbox)
Run Code Online (Sandbox Code Playgroud)

  • 您可以省略定义末尾的块,因此只需`config.vm.define:app_name`也可以. (9认同)

Arb*_*zar 17

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

使用"vagrant status"时更改基箱名称

 config.vm.define "tendo" do |tendo|
  end
Run Code Online (Sandbox Code Playgroud)

其中"tendo"将是显示的名称而不是默认名称


cmu*_*ur2 6

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

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

  • 我相信这会改变VirtualBox GUI中的名称."您可以自定义VirtualBox GUI中显示的名称"参考:[link](http://docs.vagrantup.com/v2/virtualbox/configuration.html) (3认同)
  • 并不意味着过于挑剔cmur2,但只需提供一个config.vm.define块,就可以在单个机器环境中设置内部Vagrant名称. (3认同)
  • 更改我的Vagrantfile并通过`vagrant destroy`完全撕下机器然后将其重新启动它仍然将其称为默认值. (2认同)
  • 啊,我的错 - 我认为作者想要更改VirtualBox名称,内部Vagrant名称当然只能在多VM环境中更改. (2认同)

mur*_*zel 6

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

config.vm.define "abc"
config.vm.hostname = "abc"
Run Code Online (Sandbox Code Playgroud)


ken*_*orb 5

您可以通过更改值来更改无业游民的默认计算机名称config.vm.define

这是简单的Vagrantfile,它使用getopts并允许您动态更改名称:

# -*- 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
Run Code Online (Sandbox Code Playgroud)

因此,要使用其他名称,可以运行例如:

vagrant --vm-name=my_name up --no-provision
Run Code Online (Sandbox Code Playgroud)

注意:--vm-name需要在up命令前指定参数。

要么:

VM_NAME=my_name vagrant up --no-provision
Run Code Online (Sandbox Code Playgroud)