Wie ändere ich den Standard-Computernamen von Vagrant?

235

Woher kommt der Name "Standard" beim Starten einer Vagabundbox?

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

Gibt es eine Möglichkeit, dies einzustellen?

Kyle Kelley
quelle
Vergessen Sie nicht zu überprüfen, ob die Virtualisierung aktiv ist, und aktivieren Sie VT-x in Ihrem BIOS. Das war mein Problem
Renato Tavares

Antworten:

341

Ich fand die verschiedenen Optionen verwirrend und beschloss, alle zu testen, um genau zu sehen, was sie tun.

Ich verwende VirtualBox 4.2.16-r86992 und Vagrant 1.3.3.

Ich habe ein Verzeichnis namens erstellt nametestund ausgeführt

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

um eine Standard-Vagrant-Datei zu generieren. Dann öffnete ich die VirtualBox-GUI, damit ich sehen konnte, unter welchen Namen die von mir erstellten Felder angezeigt werden.

  1. Standard Vagrantfile

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

    Name der VirtualBox- Benutzeroberfläche : "nametest_default_1386347922"

    Kommentare: Der Name hat standardmäßig das Format DIRECTORY_default_TIMESTAMP.

  2. VM definieren

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

    Name der VirtualBox- Benutzeroberfläche : "nametest_foohost_1386347922"

    Kommentare: Wenn Sie eine VM explizit definieren, ersetzt der verwendete Name das Token 'Standard'. Dies ist der Name vagrant Ausgaben auf der Konsole. Vereinfachung basierend auf zookder Eingabe (Kommentator)

  3. Stellen Sie den Anbieternamen ein

    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
    

    Name der VirtualBox- Benutzeroberfläche : "foohost"

    Kommentare: Wenn Sie das nameAttribut in einem Anbieterkonfigurationsblock festlegen , wird dieser Name zum gesamten Namen, der in der VirtualBox-GUI angezeigt wird.

    Kombiniertes Beispiel: Definieren Sie den VM-and-Set-Providernamen

    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
    

    Name der VirtualBox- Benutzeroberfläche : "barhost"

    Kommentare: Wenn Sie beide Methoden gleichzeitig verwenden, namegewinnt der im Anbieterkonfigurationsblock zugewiesene Wert . Vereinfachung basierend auf zookder Eingabe (Kommentator)

  4. Set hostname(BONUS)

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

    Kommentare: Hiermit wird der Hostname in der VM festgelegt. Dies wäre die Ausgabe des hostnameBefehls in der VM, und dies ist auch das, was in der Eingabeaufforderung angezeigt vagrant@<hostname>wird. Hier sieht es so ausvagrant@buzbar

Endgültiger Code

    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

Da ist es also. Sie kennen jetzt 3 verschiedene Optionen, die Sie einstellen können, und deren Auswirkungen. Ich denke, es ist an dieser Stelle eine Frage der Präferenz? (Ich bin neu bei Vagrant, daher kann ich noch nicht mit Best Practices sprechen.)

Odigität
quelle
3
Hey, ich habe ein bisschen mehr über verwandte Themen recherchiert. (1) Das Verzeichnis im Namen wird beim ersten Mal generiert und ändert sich nicht, wenn Sie das Verzeichnis umbenennen. (2) Der Zeitstempel im Namen wird beim ersten Mal generiert und ändert sich beim Neustart nicht. (3) Das Projekt wird über die UUID einer VirtualBox-VM zugeordnet, die in PROJECT_ROOT / .vagrant / machine / default / virtualbox / id gespeichert ist. Diese UUID ist in der VirtualBox-GUI ( virtualbox.org/ticket/6989 ) nicht sichtbar , kann jedoch VBoxManage list vmsin der Befehlszeile verwendet werden.
Odigity
Eine der nützlichen Referenzen, die ich für den vorherigen Kommentar verwendet habe: stackoverflow.com/questions/9434313/…
Odigity
6
Es ist zu beachten, dass der define VMMethodenname in Vagrant stdout und Protokollen verwendet wird, während der set provider nameName für die Verwaltung der Box mit dem Anbieter verwendet wird. Beides ist also relevant.
Redsandro
30
Sie brauchen den do... endBlock nicht wirklich , wenn er leer ist. config.vm.define "foohost"funktioniert gut.
Zook
6
Ich liebe das Detail dieser Antwort, aber es geht nicht wirklich auf die ursprüngliche Frage ein. Ja, diese Konfigurationen führen dazu, dass ein "Name" ordnungsgemäß in der Virtualbox-GUI angezeigt wird. Wenn Sie sie mit vboxmanage auflisten, ist dies auch der Fall. Dies bleibt jedoch bestehen, Bringing machine 'default' up with 'virtualbox' provider...wenn Sie ausführenvagrant up
TomSchober
60

Auf diese Weise habe ich einzelnen VMs Namen zugewiesen. Ändern Sie YOURNAMEHEREIhren gewünschten Namen.

Inhalt von 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

Terminalausgang:

$ vagrant status
Current machine states:

YOURNAMEHERE             not created (virtualbox)
Nikil
quelle
9
Sie können den Block am Ende Ihrer Definition weglassen, config.vm.define :app_namefunktioniert also auch einfach .
Vidur
1
Wenn YOURNAMEHERE eine Variable ist, sollte der Doppelpunkt ":" entfernt werden:config.vm.define YOURNAMEHERE do |t| end
Radu
17

Wenn Sie etwas anderes als "Standard" ändern möchten, fügen Sie einfach diese zusätzlichen Zeilen zu Ihrer Vagrant-Datei hinzu:

Ändern Sie den Namen der Basisbox, wenn Sie "Vagrant Status" verwenden.

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

Wobei "tendo" der Name ist, der anstelle der Standardeinstellung angezeigt wird

Arbab Nazar
quelle
Ich denke, Ihre Antwort ist verfeinert und es ist offensichtlich, dass das, was Sie einstellen, eine Zeichenfolge ist, die im Gegensatz zu anderen Antworten steht, die `: OBJECT_VALUE`
Andres Leon Rangel
8

Ich gebe den Namen durch Definieren in der VagrantFile an und gebe auch den Hostnamen an, damit ich den Namen meines Projekts sehen kann, während ich Linux-Befehle unabhängig vom Betriebssystem meines Geräts ausführe. ✌️

config.vm.define "abc"
config.vm.hostname = "abc"
Muratgozel
quelle
6

Ja, für Virtualbox-Anbieter gehen Sie wie folgt vor:

Vagrant.configure("2") do |config|
    # ...other options...
    config.vm.provider "virtualbox" do |p|
        p.name = "something-else"
    end
end
cmur2
quelle
2
Nachdem ich meine Vagrant-Datei geändert und die Maschine vollständig heruntergefahren habe, vagrant destroyindem ich sie wieder hochgefahren habe , wird sie immer noch als Standard bezeichnet.
Kyle Kelley
3
Ich glaube, dies ändert den Namen in der VirtualBox-GUI. "Sie können den Namen anpassen, der in der VirtualBox-
Benutzeroberfläche angezeigt wird
2
Ah, jepp meine Schuld - ich dachte, der Autor möchte den VirtualBox-Namen ändern, der interne Vagrant-Name kann natürlich nur in einer Umgebung mit mehreren VMs geändert werden.
cmur2
4
Das bedeutet nicht, zu wählerisch zu sein, aber es ist möglich, einen internen Vagrant-Namen in einer einzelnen Computerumgebung einzurichten, indem einfach nur ein einziger config.vm.define-Block bereitgestellt wird.
Dave Birch
5

Sie können den Standard-Computernamen ändern, indem Sie den Wert von ändern config.vm.define.

Hier ist die einfache Vagrant-Datei, die getopts verwendet und es Ihnen ermöglicht, den Namen dynamisch zu ändern:

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

Um einen anderen Namen zu verwenden, können Sie beispielsweise Folgendes ausführen:

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

Hinweis: Der --vm-nameParameter muss vor dem upBefehl angegeben werden.

oder:

VM_NAME=my_name vagrant up --no-provision
Kenorb
quelle
1

Falls viele Personen Ihre Vagabunddatei verwenden, möchten Sie den Namen möglicherweise dynamisch festlegen . Im Folgenden finden Sie ein Beispiel für die Verwendung des Benutzernamens Ihres HOST-Computers als Name der Box und des Hostnamens:

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
quelle