Come modificare il nome della macchina "predefinito" di Vagrant?


235

Da dove viene il nome 'default' quando si lancia un box vagabondo?

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

C'è un modo per impostare questo?


Non dimenticare di verificare se la virtualizzazione è attiva, abilitare VT-x nel BIOS. Quello era il mio problema
Renato Tavares il

Risposte:


341

Ho trovato confuse le molteplici opzioni, quindi ho deciso di testarle tutte per vedere esattamente cosa fanno.

Sto usando VirtualBox 4.2.16-r86992 e Vagrant 1.3.3.

Ho creato una directory chiamata nametested eseguita

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

per generare un file Vagrant predefinito. Quindi ho aperto la GUI di VirtualBox in modo che potessi vedere con quali nomi appariranno le caselle che creo.

  1. Vagrantfile predefinito

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

    Nome GUI VirtualBox: "nametest_default_1386347922"

    Commenti: il nome predefinito è nel formato DIRECTORY_default_TIMESTAMP.

  2. Definisci 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
    

    Nome GUI di VirtualBox: "nametest_foohost_1386347922"

    Commenti: se si definisce esplicitamente una macchina virtuale, il nome utilizzato sostituisce il token "predefinito". Questo è il nome degli output vagabondi sulla console. Semplificazione basata zooksull'input (commentatore)

  3. Imposta il nome del provider

    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
    

    Nome della GUI di VirtualBox: "foohost"

    Commenti: se si imposta l' nameattributo in un blocco di configurazione del provider, quel nome diventerà l'intero nome visualizzato nella GUI di VirtualBox.

    Esempio combinato: definire la VM e impostare il nome del provider

    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
    

    Nome della GUI di VirtualBox: "barhost"

    Commenti: se si utilizzano entrambi i metodi contemporaneamente, namevince il valore assegnato a nel blocco di configurazione del provider. Semplificazione basata zooksull'input (commentatore)

  4. Set hostname(BONUS)

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

    Commenti: imposta il nome host all'interno della VM. Questo sarebbe l'output del hostnamecomando nella VM e anche questo è ciò che è visibile nel prompt vagrant@<hostname>, qui appariràvagrant@buzbar

Codice finale

    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

Quindi eccolo. Ora conosci 3 diverse opzioni che puoi impostare e gli effetti che hanno. Immagino sia una questione di preferenza a questo punto? (Sono nuovo di Vagrant, quindi non posso ancora parlare delle migliori pratiche.)


3
Ehi, ho fatto qualche ricerca in più su argomenti correlati. (1) La directory nel nome viene generata la prima volta e non cambia quando si rinomina la directory. (2) Il timestamp nel nome viene generato la prima volta e non cambia al riavvio. (3) Il progetto è mappato su una VM VirtualBox tramite UUID, che è memorizzato in PROJECT_ROOT / .vagrant / machines / default / virtualbox / id. Questo UUID non è visibile nella GUI di VirtualBox ( virtualbox.org/ticket/6989 ), ma è possibile utilizzarlo VBoxManage list vmsdalla riga di comando.
odigity

Uno dei riferimenti utili che ho usato per il commento precedente: stackoverflow.com/questions/9434313/...
odigity

6
Vale la pena notare che il define VMnome del metodo viene utilizzato nello stdout e nei log di Vagrant, mentre il set provider namenome viene utilizzato per la gestione della casella con il provider. Quindi entrambi sono rilevanti.
Redsandro,

30
In realtà non è necessario il do... endblocco se è vuoto. config.vm.define "foohost"funziona benissimo.
Zook,

6
Adoro i dettagli di questa risposta, ma in realtà non risponde alla domanda originale. Sì, tali configurazioni comporteranno la visualizzazione corretta di un "nome" nella GUI di Virtualbox e, se li elenchi con vboxmanage, lo stesso. Tuttavia, questo è ancora Bringing machine 'default' up with 'virtualbox' provider...vagrant up
valido

60

Questo è il modo in cui ho assegnato i nomi alle singole macchine virtuali. Cambia YOURNAMEHEREil nome desiderato.

Contenuto di 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

Uscita terminale:

$ vagrant status
Current machine states:

YOURNAMEHERE             not created (virtualbox)

9
Puoi omettere il blocco alla fine della tua definizione, quindi config.vm.define :app_namefunziona anche semplicemente .
Vidur,

1
se YOURNAMEHERE è una variabile, i due punti ":" devono essere rimossi:config.vm.define YOURNAMEHERE do |t| end
Radu,

17

Se vuoi cambiare qualcos'altro invece di 'default', aggiungi semplicemente queste righe aggiuntive al tuo Vagrantfile:

Cambia il nome della basebox quando usi "stato vagabondo"

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

Dove "tendo" sarà il nome che apparirà al posto del default


Penso che la tua risposta sia più raffinata ed è ovvio che ciò che stai impostando è una stringa contraria ad altre risposte che usano `: OBJECT_VALUE`
Andres Leon Rangel

8

Specifico il nome definendo all'interno del VagrantFile e anche il nome host, quindi mi diverto a vedere il nome del mio progetto mentre eseguo i comandi Linux indipendentemente dal sistema operativo del mio dispositivo. ✌️

config.vm.define "abc"
config.vm.hostname = "abc"

6

Sì, per il provider Virtualbox fai qualcosa del genere:

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

2
Dopo aver cambiato il mio Vagrantfile e aver strappato completamente la macchina, riavviandolo, vagrant destroylo sta ancora chiamando come predefinito.
Kyle Kelley,

3
Credo che questo cambi il nome nella GUI di VirtualBox. "Puoi personalizzare il nome che appare nella GUI di VirtualBox" Riferimento: link
nikhil

2
Ah, jepp colpa mia - Ho pensato che l'autore volesse cambiare il nome di VirtualBox, il nome Vagrant interno è ovviamente modificabile solo in un ambiente multi-VM.
cmur2

4
Non significa essere troppo esigenti cmur2, ma è possibile impostare un nome Vagrant interno in un unico ambiente macchina semplicemente fornendo un solo blocco config.vm.define.
Dave Birch,

5

È possibile modificare il nome della macchina predefinita del vagabondo modificando il valore di config.vm.define.

Ecco il semplice Vagrantfile che usa getopts e ti permette di cambiare il nome in modo dinamico:

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

Quindi, per usare un nome diverso, puoi eseguire ad esempio:

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

Nota: il --vm-nameparametro deve essere specificato prima del upcomando.

o:

VM_NAME=my_name vagrant up --no-provision

1

Nel caso in cui ci siano molte persone che usano il tuo file vagabondo, potresti voler impostare il nome in modo dinamico . Di seguito è riportato l'esempio su come farlo utilizzando il nome utente della macchina HOST come nome della casella e nome 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.