Як змінити ім'я машини "за замовчуванням" Vagrant?


235

Звідки походить назва "за замовчуванням" під час запуску бродячого вікна?

$ 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 за замовчуванням. Потім я відкрив GUI 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. Визначте 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
    

    Ім'я GUI VirtualBox: "nametest_foohost_1386347922"

    Коментарі: Якщо ви чітко визначаєте VM, ім'я, яке використовується, замінює маркер "за замовчуванням". Це ім'я бродячих виходів на консолі. Спрощення на основі zookвведення 's (commenter)

  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.

    Комбінований приклад: Визначте 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: "barhost"

    Коментарі: Якщо ви використовуєте обидва способи одночасно, nameперемагає значення, призначене в блоці конфігурації постачальника. Спрощення на основі zookвведення 's (commenter)

  4. Набір hostname(BONUS)

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

    Коментарі: Це встановлює ім'я хоста всередині VM. Це було б результатом 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, тому поки що не можу говорити про найкращі практики.)


3
Гей, я зробив трохи більше досліджень з суміжних питань. (1) Каталог в імені створюється вперше і не змінюється при перейменуванні каталогу. (2) Часова мітка в назві створюється вперше і не змінюється при перезапуску. (3) Проект відображається у VM VirtualBox через UUID, який зберігається у PROJECT_ROOT / .vagrant / machines / default / virtualbox / id. Цей UUID не відображається в GUI VirtualBox ( virtualbox.org/ticket/6989 ), але його можна використовувати VBoxManage list vmsв командному рядку.
одіозність

Одним з корисних посилань , які я використовував для попереднього коментаря: stackoverflow.com/questions/9434313 / ...
odigity

6
Варто зазначити, що define VMім'я методу використовується у викладачі Vagrant і журналах, а set provider nameім'я використовується для керування вікном з провайдером. Тож обидва є актуальними.
Редсандро

30
Вам насправді не потрібен do... endблок, якщо він порожній. config.vm.define "foohost"працює просто чудово.
Zook

6
Мені подобається деталь цієї відповіді, але вона насправді не стосується початкового питання. Так, ці конфігурації призведуть до того, що "GUI" відобразиться належним чином у графічному інтерфейсі Virtualbox, а якщо ви перерахуєте їх за допомогою vboxmanage, те саме. Однак це все ще зберігається Bringing machine 'default' up with 'virtualbox' provider...під час виконанняvagrant up
TomSchober

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
Radu

17

Якщо ви хочете змінити що-небудь інше замість "за замовчуванням", просто додайте ці додаткові рядки у свій Vagrantfile:

Змініть ім'я базової скриньки, використовуючи "статус бродячого"

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

Де "tendo" буде ім'ям, яке з'явиться замість типового


Я думаю, що ваша відповідь є більш вишуканою, і очевидно, що те, що ви встановлюєте, є рядком, що суперечить іншим відповідям, які використовують `: OBJECT_VALUE`
Андрес Леон Рангел,

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її повернення, вона все ще називає її за замовчуванням.
Кайл Келлі

3
Я вважаю, що це змінює ім'я в графічному інтерфейсі VirtualBox. "Ви можете налаштувати ім'я, яке відображається у GUI VirtualBox" Довідка: посилання
nikhil

2
Ах, jepp моя провина - я думав, що автор хоче змінити ім'я VirtualBox, внутрішнє ім'я Vagrant, звичайно, може змінюватися лише в середовищі з декількома VM.
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

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.