Как изменить имя машины Vagrant «по умолчанию»?

235

Откуда происходит название «default» при запуске бродячей коробки?

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

Есть ли способ установить это?

Кайл Келли
источник
Не забудьте проверить, активирована ли виртуализация, включите VT-x в вашем BIOS. Это была моя проблема
Ренато Таварес

Ответы:

341

Несколько вариантов показались мне непонятными, поэтому я решил проверить все из них, чтобы точно узнать, что они делают.

Я использую VirtualBox 4.2.16-r86992 и Vagrant 1.3.3.

Я создал каталог с именем nametestи побежал

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

генерировать Vagrantfile по умолчанию. Затем я открыл графический интерфейс VirtualBox, чтобы увидеть, какие имена будут отображаться в ящиках, которые я создаю.

  1. Vagrantfile по умолчанию

    Vagrant.configure('2') do |config|
        config.vm.box = "precise64"
        config.vm.box_url = "http://files.vagrantup.com/precise64.box"
    end
    

    Имя графического интерфейса VirtualBox: "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: "nametest_foohost_1386347922"

    Комментарии: Если вы явно определяете виртуальную машину, используемое имя заменяет маркер «default». Это имя бродячих выходов на консоли. Упрощение на основе 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: "foohost"

    Комментарии: Если вы установите nameатрибут в блоке конфигурации провайдера, это имя станет полным именем, отображаемым в графическом интерфейсе VirtualBox.

    Комбинированный пример: определение виртуальной машины и установка имени провайдера

    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 Имя: "Бархост"

    Комментарии: Если вы используете оба метода одновременно, значение, назначенное nameв блоке конфигурации провайдера, побеждает. Упрощение на основе zookввода (комментатор)

  4. Set hostname(БОНУС)

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

    Комментарии: Устанавливает имя хоста внутри виртуальной машины. Это будет вывод hostnameкоманды в ВМ, а также то, что видно в приглашении 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, поэтому пока не могу говорить о лучших практиках.)

odigity
источник
3
Эй, я провел немного больше исследований по смежным вопросам. (1) Каталог в имени генерируется в первый раз и не изменяется при переименовании каталога. (2) Отметка времени в имени генерируется в первый раз и не изменяется при перезапуске. (3) Проект сопоставляется с виртуальной машиной VirtualBox через UUID, который хранится в PROJECT_ROOT / .vagrant / machines / default / virtualbox / id. Этот UUID не отображается в графическом интерфейсе VirtualBox ( virtualbox.org/ticket/6989 ), но его можно использовать VBoxManage list vmsв командной строке.
чудо
Одна из полезных ссылок, которые я использовал для предыдущего комментария: stackoverflow.com/questions/9434313/…
odigity
6
Стоит отметить, что define VMимя метода используется в стандартном выводе и журналах Vagrant, а set provider nameимя используется для управления коробкой с провайдером. Так что оба актуальны.
Redsandro
30
Вам на самом деле не нужен do... endблок, если он пуст. config.vm.define "foohost"работает просто отлично.
Zook
6
Мне нравятся детали этого ответа, но он не касается первоначального вопроса. Да, эти конфигурации приведут к тому, что «имя» будет отображаться в графическом интерфейсе Virtualbox должным образом, и если вы перечислите их с помощью vboxmanage, то же самое. Тем не менее, это все еще остается в Bringing machine 'default' up with 'virtualbox' provider...vagrant up
силе,
60

Именно так я назначил имена отдельным виртуальным машинам. Измените 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работает тоже.
Видур
1
если YOURNAMEHERE - переменная, то двоеточие ":" должно быть удалено:config.vm.define YOURNAMEHERE do |t| end
Раду
17

Если вы хотите изменить что-то еще вместо «default», просто добавьте эти дополнительные строки в ваш Vagrantfile:

Измените имя базовой коробки, когда используете «статус бродяги»

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

Где «тендо» будет именем, которое будет отображаться вместо имени по умолчанию

Арбаб Назар
источник
Я думаю, что ваш ответ более точен, и очевидно, что вы устанавливаете строку, противоречащую другим ответам, которые используют `: OBJECT_VALUE`
Andres Leon Rangel
8

Я определяю имя, определяя его внутри VagrantFile, а также задаю имя хоста, поэтому мне нравится видеть имя моего проекта, когда он выполняет команды Linux независимо от операционной системы моего устройства. ✌️

config.vm.define "abc"
config.vm.hostname = "abc"
muratgozel
источник
6

Да, для провайдера Virtualbox сделайте что-то вроде этого:

Vagrant.configure("2") do |config|
    # ...other options...
    config.vm.provider "virtualbox" do |p|
        p.name = "something-else"
    end
end
cmur2
источник
2
После изменения моего Vagrantfile и полного срыва машины через vagrant destroyее восстановление, она все еще называется по умолчанию.
Кайл Келли
3
Я считаю, что это меняет имя в графическом интерфейсе VirtualBox. «Вы можете настроить имя, отображаемое в графическом интерфейсе VirtualBox». Ссылка: ссылка
nikhil
2
Ах, джеп, я виноват - я думал, что автор хочет изменить имя VirtualBox, внутреннее имя Vagrant, конечно, можно изменить только в среде с несколькими виртуальными машинами.
cmur2
4
Не означает быть слишком требовательным cmur2, но можно настроить внутреннее имя Vagrant в среде одного компьютера, просто предоставив только один блок config.vm.define.
Дейв Берч
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

Таким образом, чтобы использовать другое имя, вы можете запустить, например:

vagrant --vm-name=my_name up --no-provision

Примечание: --vm-nameпараметр должен быть указан перед upкомандой.

или:

VM_NAME=my_name vagrant up --no-provision
kenorb
источник
1

Если ваш бродячий файл используют многие люди, возможно, вы захотите установить имя динамически . Ниже приведен пример того, как это сделать, используя имя пользователя с вашего компьютера 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
Антон Случак
источник