Comment changer le nom de machine 'par défaut' de Vagrant?

235

D'où vient le nom 'default' lors du lancement d'une boîte vagabonde?

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

Y a-t-il un moyen de régler cela?

Kyle Kelley
la source
N'oubliez pas de vérifier si la virtualisation est active, activez VT-x dans votre BIOS. C'était mon problème
Renato Tavares

Réponses:

341

J'ai trouvé les multiples options déroutantes, j'ai donc décidé de les tester toutes pour voir exactement ce qu'elles faisaient.

J'utilise VirtualBox 4.2.16-r86992 et Vagrant 1.3.3.

J'ai créé un répertoire appelé nametestet exécuté

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

pour générer un Vagrantfile par défaut. Ensuite, j'ai ouvert l'interface graphique de VirtualBox pour que je puisse voir les noms des boîtes que je créerais.

  1. Fichier Vagrant par défaut

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

    Nom de l'interface graphique de VirtualBox: "nametest_default_1386347922"

    Commentaires: Le nom est par défaut au format DIRECTORY_default_TIMESTAMP.

  2. Définir 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
    

    Nom de l'interface graphique de VirtualBox: "nametest_foohost_1386347922"

    Commentaires: Si vous définissez explicitement une machine virtuelle, le nom utilisé remplace le jeton «par défaut». Il s'agit du nom des sorties vagabondes sur la console. Simplification basée sur zookl'entrée de (commentateur)

  3. Définir le nom du fournisseur

    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
    

    Nom de l'interface graphique de VirtualBox: "foohost"

    Commentaires: Si vous définissez l' nameattribut dans un bloc de configuration de fournisseur, ce nom deviendra le nom complet affiché dans l'interface graphique de VirtualBox.

    Exemple combiné: définir VM et définir le nom du fournisseur

    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
    

    Nom de l'interface graphique de VirtualBox: "barhost"

    Commentaires: si vous utilisez les deux méthodes en même temps, la valeur attribuée à namedans le bloc de configuration du fournisseur l'emporte. Simplification basée sur zookl'entrée de (commentateur)

  4. Set hostname(BONUS)

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

    Commentaires: cela définit le nom d'hôte à l'intérieur de la machine virtuelle. Ce serait la sortie de la hostnamecommande dans la machine virtuelle et c'est également ce qui est visible dans l'invite vagrant@<hostname>, ici, cela ressembleravagrant@buzbar

Code 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

Tiens voilà. Vous connaissez maintenant 3 options différentes que vous pouvez définir et leurs effets. Je suppose que c'est une question de préférence à ce stade? (Je suis nouveau sur Vagrant, donc je ne peux pas encore parler des meilleures pratiques.)

odeur
la source
3
Hé, j'ai fait un peu plus de recherche sur des sujets connexes. (1) Le répertoire dans le nom est généré la première fois et ne change pas lorsque vous renommez le répertoire. (2) L'horodatage du nom est généré la première fois et ne change pas au redémarrage. (3) Le projet est mappé à une machine virtuelle VirtualBox via UUID, qui est stocké dans PROJECT_ROOT / .vagrant / machines / default / virtualbox / id. Cet UUID n'est pas visible dans l'interface graphique de VirtualBox ( virtualbox.org/ticket/6989 ), mais vous pouvez l'utiliser VBoxManage list vmssur la ligne de commande.
odigité du
L'une des références utiles que j'ai utilisées pour le commentaire précédent: stackoverflow.com/questions/9434313/…
odigity
6
Il convient de noter que le define VMnom de la méthode est utilisé dans stdout Vagrant et les journaux, tandis que le set provider namenom est utilisé pour gérer la boîte avec le fournisseur. Les deux sont donc pertinents.
Redsandro
30
Vous n'avez pas réellement besoin du do... endbloc s'il est vide. config.vm.define "foohost"fonctionne très bien.
Zook
6
J'adore le détail de cette réponse, mais elle ne répond pas vraiment à la question d'origine. Oui, ces configurations entraîneront un "nom" s'affichant correctement dans l'interface graphique de Virtualbox, et si vous les répertoriez avec vboxmanage, la même chose. Cependant, cela persiste Bringing machine 'default' up with 'virtualbox' provider...quand vous exécutezvagrant up
TomSchober
60

C'est ainsi que j'ai attribué des noms à des machines virtuelles individuelles. ChangementYOURNAMEHERE pour votre nom souhaité.

Contenu 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

Sortie borne:

$ vagrant status
Current machine states:

YOURNAMEHERE             not created (virtualbox)
nikhil
la source
9
Vous pouvez omettre le bloc à la fin de votre définition, donc tout simplement config.vm.define :app_namefonctionne aussi.
Vidur
1
si YOURNAMEHERE est une variable, les deux points ":" doivent être supprimés:config.vm.define YOURNAMEHERE do |t| end
Radu
17

Si vous souhaitez changer autre chose au lieu de «par défaut», ajoutez simplement ces lignes supplémentaires à votre Vagrantfile:

Modifier le nom de la basebox lors de l'utilisation du "statut vagabond"

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

Où "tendo" sera le nom qui apparaîtra au lieu de défaut

Arbab Nazar
la source
Je pense que votre réponse est plus raffinée et il est évident que ce que vous définissez est une chaîne contrairement aux autres réponses qui utilisent `: OBJECT_VALUE`
Andres Leon Rangel
8

Je spécifie le nom en définissant à l'intérieur du VagrantFile et spécifie également le nom d'hôte, donc j'aime voir le nom de mon projet lors de l'exécution des commandes Linux indépendamment du système d'exploitation de mon appareil. ✌️

config.vm.define "abc"
config.vm.hostname = "abc"
muratgozel
la source
6

Oui, pour le fournisseur Virtualbox, faites quelque chose comme ceci:

Vagrant.configure("2") do |config|
    # ...other options...
    config.vm.provider "virtualbox" do |p|
        p.name = "something-else"
    end
end
cmur2
la source
2
Après avoir changé mon Vagrantfile et complètement démoli la machine via vagrant destroypuis l'avoir ramené, il l'appelle toujours par défaut.
Kyle Kelley
3
Je crois que cela change le nom dans l'interface graphique de VirtualBox. "Vous pouvez personnaliser le nom qui apparaît dans l'interface graphique de VirtualBox" Référence: lien
nikhil
2
Ah, jepp ma faute - je pensais que l'auteur voulait changer le nom de VirtualBox, le nom interne de Vagrant n'est bien sûr modifiable que dans un environnement multi-VM.
cmur2
4
Cela ne signifie pas être trop pointilleux cmur2, mais il est possible de configurer un nom Vagrant interne dans un environnement de machine unique en fournissant simplement un seul bloc config.vm.define.
Dave Birch
5

Vous pouvez modifier le nom de machine par défaut vagabond en modifiant la valeur de config.vm.define.

Voici le simple Vagrantfile qui utilise getopts et vous permet de changer le nom dynamiquement:

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

Donc, pour utiliser un nom différent, vous pouvez exécuter par exemple:

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

Remarque: Le --vm-nameparamètre doit être spécifié avant la upcommande.

ou:

VM_NAME=my_name vagrant up --no-provision
Kenorb
la source
1

Dans le cas où de nombreuses personnes utilisent votre fichier vagabond - vous souhaiterez peut-être définir un nom de manière dynamique . Vous trouverez ci-dessous l'exemple comment le faire en utilisant le nom d'utilisateur de votre machine HÔTE comme nom de la boîte et nom d'hôte:

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
la source