Jak zmienić domyślną nazwę maszyny Vagrant?

235

Skąd bierze się nazwa „domyślna” podczas uruchamiania włóczęgi?

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

Czy istnieje sposób, aby to ustawić?

Kyle Kelley
źródło
Nie zapomnij sprawdzić, czy wirtualizacja jest aktywna, włącz VT-x w BIOS-ie. To był mój problem
Renato Tavares

Odpowiedzi:

341

Stwierdziłem, że wiele opcji jest mylących, więc postanowiłem przetestować je wszystkie, aby zobaczyć dokładnie, co robią.

Używam VirtualBox 4.2.16-r86992 i Vagrant 1.3.3.

Utworzyłem katalog o nazwie nametesti uruchomiłem

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

wygenerować domyślny plik Vagrantfile. Następnie otworzyłem GUI VirtualBox, aby zobaczyć, jakie nazwy będą tworzyć pola, które utworzę.

  1. Domyślny plik Vagrantfile

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

    Nazwa GUI VirtualBox: „nametest_default_1386347922”

    Komentarze: Domyślna nazwa to format DIRECTORY_default_TIMESTAMP.

  2. Zdefiniuj maszynę wirtualną

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

    Nazwa GUI VirtualBox: „nametest_foohost_1386347922”

    Komentarze: Jeśli jawnie zdefiniujesz maszynę wirtualną, zastosowana nazwa zastępuje token „default”. Jest to nazwa błędnych wyników na konsoli. Uproszczenie na podstawie zookdanych wejściowych (komentujących)

  3. Ustaw nazwę dostawcy

    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
    

    Nazwa GUI VirtualBox: „foohost”

    Komentarze: Jeśli ustawisz nameatrybut w bloku konfiguracji dostawcy, nazwa ta stanie się całą nazwą wyświetlaną w GUI VirtualBox.

    Połączony przykład: Zdefiniuj maszynę wirtualną i ustaw nazwę dostawcy

    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
    

    Nazwa GUI VirtualBox: „barhost”

    Komentarze: Jeśli używasz obu metod jednocześnie, wartość przypisana namew bloku konfiguracji dostawcy wygrywa. Uproszczenie na podstawie zookdanych wejściowych (komentujących)

  4. Zestaw hostname(BONUS)

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

    Komentarze: Ustawia nazwę hosta w maszynie wirtualnej. To będzie wynik hostnamepolecenia w maszynie wirtualnej, a także to, co jest widoczne w wierszu polecenia vagrant@<hostname>, tutaj będzie wyglądaćvagrant@buzbar

Kod końcowy

    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

Tak więc jest. Teraz znasz 3 różne opcje, które możesz ustawić, i ich efekty. Myślę, że w tym momencie jest to kwestia preferencji? (Jestem nowy w Vagrant, więc nie mogę jeszcze mówić o najlepszych praktykach.)

odigity
źródło
3
Hej, zrobiłem trochę więcej badań na powiązane tematy. (1) Katalog w nazwie jest generowany po raz pierwszy i nie zmienia się po zmianie nazwy katalogu. (2) Znacznik czasu w nazwie jest generowany za pierwszym razem i nie zmienia się po ponownym uruchomieniu. (3) Projekt jest mapowany na VirtualBox VM za pomocą UUID, który jest przechowywany w PROJECT_ROOT / .vagrant / Machines / default / virtualbox / id. Ten identyfikator UUID nie jest widoczny w interfejsie GUI VirtualBox ( virtualbox.org/ticket/6989 ), ale można go użyć VBoxManage list vmsw wierszu polecenia.
odigity
Jedno z przydatnych odniesień, które wykorzystałem w poprzednim komentarzu: stackoverflow.com/questions/9434313/…
odigity
6
Warto zauważyć, że define VMnazwa metody jest używana w Vagrant stdout i logach, natomiast set provider namenazwa służy do zarządzania polem z dostawcą. Więc oba są istotne.
Redsandro,
30
Tak naprawdę nie potrzebujesz do... endbloku, jeśli jest pusty. config.vm.define "foohost"działa dobrze.
Zook
6
Podoba mi się szczegół tej odpowiedzi, ale tak naprawdę nie odnosi się do pierwotnego pytania. Tak, te konfiguracje spowodują, że „nazwa” pojawi się poprawnie w graficznym interfejsie Virtualbox, a jeśli wyświetlisz je w vboxmanage, to samo. Jednak nadal występuje to Bringing machine 'default' up with 'virtualbox' provider...po wykonaniuvagrant up
TomSchober
60

W ten sposób przypisałem nazwy do poszczególnych maszyn wirtualnych. Zmień YOURNAMEHEREna żądane imię.

Zawartość pliku 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

Wyjście końcowe:

$ vagrant status
Current machine states:

YOURNAMEHERE             not created (virtualbox)
nikhil
źródło
9
Możesz pominąć blok na końcu definicji, więc po prostu config.vm.define :app_namedziała.
Vidur
1
jeśli NAZWISKO jest zmienną, należy usunąć dwukropek „:”:config.vm.define YOURNAMEHERE do |t| end
Radu,
17

Jeśli chcesz zmienić cokolwiek innego zamiast „domyślnego”, po prostu dodaj te dodatkowe wiersze do pliku Vagrantfile:

Zmień nazwę basebox, używając „statusu włóczęgi”

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

Gdzie „tendo” będzie nazwą, która pojawi się zamiast domyślnej

Arbab Nazar
źródło
Myślę, że twoja odpowiedź jest bardziej dopracowana i oczywiste jest, że to, co ustawiasz, jest ciągiem sprzecznym z innymi odpowiedziami, które używają `: OBJECT_VALUE`
Andres Leon Rangel
8

Podaję nazwę, definiując wewnątrz pliku VagrantFile, a także nazwę hosta, więc cieszę się, widząc nazwę mojego projektu podczas wykonywania poleceń Linuksa niezależnie od systemu operacyjnego mojego urządzenia. ✌️

config.vm.define "abc"
config.vm.hostname = "abc"
muratgozel
źródło
6

Tak, dla dostawcy Virtualbox wykonaj coś takiego:

Vagrant.configure("2") do |config|
    # ...other options...
    config.vm.provider "virtualbox" do |p|
        p.name = "something-else"
    end
end
cmur2
źródło
2
Po zmianie mojego pliku Vagrant i całkowitym rozerwaniu urządzenia, vagrant destroya następnie przywróceniu go, nadal nazywa się domyślnym.
Kyle Kelley,
3
Wierzę, że to zmienia nazwę w graficznym interfejsie VirtualBox. „Możesz dostosować nazwę, która pojawia się w interfejsie GUI VirtualBox” Odwołanie: link
nikhil
2
Ach, pomiń moją winę - myślałem, że autor chce zmienić nazwę VirtualBox, wewnętrzną nazwę Vagrant można oczywiście zmienić tylko w środowisku z wieloma maszynami wirtualnymi.
cmur2
4
Nie oznacza to, że jest zbyt wybredny cmur2, ale możliwe jest skonfigurowanie wewnętrznej nazwy Vagrant w środowisku pojedynczego komputera, po prostu poprzez udostępnienie tylko jednego bloku config.vm.define.
Dave Birch
5

Możesz zmienić domyślną nazwę maszyny, zmieniając wartość config.vm.define.

Oto prosty plik Vagrantfile, który wykorzystuje getopts i pozwala dynamicznie zmieniać nazwę:

# -*- 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

Aby użyć innej nazwy, możesz uruchomić na przykład:

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

Uwaga: --vm-nameparametr należy podać przed uppoleceniem.

lub:

VM_NAME=my_name vagrant up --no-provision
kenorb
źródło
1

W przypadku, gdy wiele osób korzysta z twojego błędnego pliku - możesz ustawić nazwę dynamicznie . Poniżej znajduje się przykład, jak to zrobić, używając nazwy użytkownika z komputera HOST jako nazwy skrzynki i nazwy hosta:

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
Anton Sluchak
źródło