¿Cómo cambiar el nombre de máquina 'predeterminado' de Vagrant?

235

¿De dónde viene el nombre 'predeterminado' cuando se inicia un cuadro vagabundo?

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

¿Hay alguna manera de configurar esto?

Kyle Kelley
fuente
No olvide verificar si la virtualización está activa, active VT-x en su BIOS. Ese fue mi problema
Renato Tavares

Respuestas:

341

Encontré las múltiples opciones confusas, así que decidí probarlas todas para ver exactamente lo que hacen.

Estoy usando VirtualBox 4.2.16-r86992 y Vagrant 1.3.3.

Creé un directorio llamado nametesty ejecuté

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

para generar un Vagrantfile predeterminado. Luego abrí la GUI de VirtualBox para poder ver qué nombres aparecerían en los cuadros que creo.

  1. Archivo Vagrant predeterminado

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

    Nombre de la GUI de VirtualBox: "nametest_default_1386347922"

    Comentarios: el nombre predeterminado es el formato DIRECTORY_default_TIMESTAMP.

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

    Nombre de la GUI de VirtualBox: "nametest_foohost_1386347922"

    Comentarios: Si define explícitamente una VM, el nombre utilizado reemplaza el token 'predeterminado'. Este es el nombre de las salidas vagabundas en la consola. Simplificación basada en zookla entrada de (comentarista)

  3. Establecer nombre de proveedor

    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
    

    Nombre de la GUI de VirtualBox: "foohost"

    Comentarios: Si establece el nameatributo en un bloque de configuración del proveedor, ese nombre se convertirá en el nombre completo que se muestra en la GUI de VirtualBox.

    Ejemplo combinado: definir VM -y- Establecer nombre de proveedor

    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
    

    Nombre de la GUI de VirtualBox: "barhost"

    Comentarios: Si usa ambos métodos al mismo tiempo, namegana el valor asignado en el bloque de configuración del proveedor. Simplificación basada en zookla entrada de (comentarista)

  4. Conjunto hostname(BONIFICACIÓN)

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

    Comentarios: Esto establece el nombre de host dentro de la VM. Esta sería la salida del hostnamecomando en la VM y también esto es lo que es visible en el indicador vagrant@<hostname>, aquí se verá comovagrant@buzbar

Código final

    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

Entonces ahí está. Ahora conoce 3 opciones diferentes que puede configurar y los efectos que tienen. Supongo que es una cuestión de preferencia en este momento? (Soy nuevo en Vagrant, por lo que todavía no puedo hablar sobre las mejores prácticas).

odigity
fuente
3
Hola, investigué un poco más sobre asuntos relacionados. (1) El directorio en el nombre se genera la primera vez y no cambia cuando cambia el nombre del directorio. (2) La marca de tiempo en el nombre se genera la primera vez y no cambia cuando reinicia. (3) El proyecto se asigna a una VM VirtualBox a través de UUID, que se almacena en PROJECT_ROOT / .vagrant / machines / default / virtualbox / id. Este UUID no está visible en la GUI de VirtualBox ( virtualbox.org/ticket/6989 ), pero puede usarlo VBoxManage list vmsen la línea de comandos.
Odigity
Una de las referencias útiles que utilicé para el comentario anterior: stackoverflow.com/questions/9434313/…
odigity
66
Vale la pena señalar que el define VMnombre del método se usa en Vagrant stdout y registros, mientras que el set provider namenombre se usa para administrar el cuadro con el proveedor. Entonces ambos son relevantes.
Redsandro
30
En realidad no necesitas el do... endbloque si está vacío. config.vm.define "foohost"funciona bien
Zook
66
Me encantan los detalles de esta respuesta, pero en realidad no aborda la pregunta original. Sí, esas configuraciones darán como resultado un "nombre" que se mostrará en la GUI de Virtualbox correctamente, y si los enumera con vboxmanage, lo mismo. Sin embargo, esto todavía se mantiene Bringing machine 'default' up with 'virtualbox' provider...cuando se ejecutavagrant up
TomSchober
60

Esta es la forma en que he asignado nombres a máquinas virtuales individuales. Cambia YOURNAMEHEREa tu nombre deseado.

Contenido de 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

Terminal de salida:

$ vagrant status
Current machine states:

YOURNAMEHERE             not created (virtualbox)
nikhil
fuente
99
Puede omitir el bloque al final de su definición, por lo que simplemente config.vm.define :app_namefunciona también.
Vidur
1
si YOURNAMEHERE es una variable, entonces se deben eliminar los dos puntos ":":config.vm.define YOURNAMEHERE do |t| end
Radu
17

Si desea cambiar algo más en lugar de 'predeterminado', simplemente agregue estas líneas adicionales a su Vagrantfile:

Cambie el nombre del cuadro base, cuando use "estado vagabundo"

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

Donde "tendo" será el nombre que aparecerá en lugar del predeterminado

Arbab Nazar
fuente
Creo que su respuesta es más refinada y es obvio que lo que está configurando es una cadena contraria a otras respuestas que usan `: OBJECT_VALUE`
Andres Leon Rangel
8

Especifico el nombre definiéndolo dentro del VagrantFile y también especifico el nombre del host, así que disfruto ver el nombre de mi proyecto mientras ejecuto comandos de Linux independientemente del sistema operativo de mi dispositivo. ✌️

config.vm.define "abc"
config.vm.hostname = "abc"
muratgozel
fuente
6

Sí, para el proveedor de Virtualbox, haga algo como esto:

Vagrant.configure("2") do |config|
    # ...other options...
    config.vm.provider "virtualbox" do |p|
        p.name = "something-else"
    end
end
cmur2
fuente
2
Después de cambiar mi Vagrantfile y derribar completamente la máquina vagrant destroyy volver a encenderla, sigue llamándola predeterminada.
Kyle Kelley
3
Creo que esto cambia el nombre en la GUI de VirtualBox. "Puede personalizar el nombre que aparece en la GUI de VirtualBox" Referencia: enlace
nikhil
2
Ah, jepp, es mi culpa: pensé que el autor quería cambiar el nombre de VirtualBox, el nombre interno de Vagrant, por supuesto, solo se puede cambiar en un entorno de varias máquinas virtuales.
cmur2
44
No significa ser demasiado exigente cmur2, pero es posible configurar un nombre interno de Vagrant en un solo entorno de máquina simplemente proporcionando un solo bloque config.vm.define.
Dave Birch
5

Puede cambiar el nombre de máquina predeterminado vagabundo cambiando el valor de config.vm.define.

Aquí está el simple Vagrantfile que usa getopts y le permite cambiar el nombre dinámicamente:

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

Entonces, para usar un nombre diferente, puede ejecutar, por ejemplo:

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

Nota: El --vm-nameparámetro debe especificarse antes del upcomando.

o:

VM_NAME=my_name vagrant up --no-provision
kenorb
fuente
1

En caso de que haya muchas personas usando su archivo vagabundo, es posible que desee establecer el nombre dinámicamente . A continuación se muestra el ejemplo de cómo hacerlo utilizando el nombre de usuario de su máquina HOST como el nombre del cuadro y el nombre de 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
Anton Sluchak
fuente