Como alterar o nome da máquina 'padrão' do Vagrant?

235

De onde vem o nome "padrão" ao iniciar uma caixa de vagabundos?

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

Existe uma maneira de definir isso?

Kyle Kelley
fonte
Não se esqueça de verificar se a virtualização está ativa, ative o VT-x no seu BIOS. Esse era o meu problema
Renato Tavares

Respostas:

341

Achei as várias opções confusas, então decidi testar todas elas para ver exatamente o que elas fazem.

Estou usando o VirtualBox 4.2.16-r86992 e o Vagrant 1.3.3.

Eu criei um diretório chamado nameteste executei

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

para gerar um arquivo Vagrant padrão. Em seguida, abri a GUI do VirtualBox para poder ver quais nomes as caixas que eu criar apareceriam.

  1. Arquivo Vagrant padrão

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

    Nome da GUI do VirtualBox: "nametest_default_1386347922"

    Comentários: o nome padrão é o 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
    

    Nome da GUI do VirtualBox: "nametest_foohost_1386347922"

    Comentários: se você definir explicitamente uma VM, o nome usado substituirá o token 'padrão'. Esse é o nome de saídas vagantes no console. Simplificando com base na zookentrada de (comentarista)

  3. Definir nome do provedor

    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 da GUI do VirtualBox: "foohost"

    Comentários: se você definir o nameatributo em um bloco de configuração do provedor, esse nome se tornará o nome inteiro exibido na GUI do VirtualBox.

    Exemplo combinado: definir VM - e - definir nome do provedor

    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 da GUI do VirtualBox: "barhost"

    Comentários: Se você usar os dois métodos ao mesmo tempo, o valor atribuído nameno bloco de configuração do provedor vence. Simplificando com base na zookentrada de (comentarista)

  4. Conjunto hostname(BÔNUS)

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

    Comentários: define o nome do host dentro da VM. Esta seria a saída do hostnamecomando na VM e também é isso que é visível no prompt como vagrant@<hostname>, aqui vai parecervagrant@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

Então aí está. Agora você conhece três opções diferentes que pode definir e os efeitos que elas têm. Eu acho que é uma questão de preferência neste momento? (Sou novo no Vagrant, por isso ainda não posso falar com as melhores práticas.)

odiosidade
fonte
3
Ei, eu fiz um pouco mais de pesquisa sobre assuntos relacionados. (1) O diretório no nome é gerado pela primeira vez e não muda quando você renomeia o diretório. (2) O registro de data e hora no nome é gerado pela primeira vez e não muda quando você reinicia. (3) O projeto é mapeado para uma VM do VirtualBox via UUID, que é armazenada em PROJECT_ROOT / .vagrant / machines / default / virtualbox / id. Este UUID não está visível na GUI do VirtualBox ( virtualbox.org/ticket/6989 ), mas você pode usá-lo VBoxManage list vmsna linha de comando.
odigity
Uma das referências úteis que usei para o comentário anterior: stackoverflow.com/questions/9434313/…
odigity
6
Vale ressaltar que o define VMnome do método é usado no stdout e nos logs do Vagrant, enquanto o set provider namenome é usado para gerenciar a caixa com o provedor. Então, ambos são relevantes.
Redsandro
30
Você realmente não precisa do do... endbloco se estiver vazio. config.vm.define "foohost"funciona muito bem.
Zook
6
Adoro os detalhes desta resposta, mas ela realmente não aborda a pergunta original. Sim, essas configurações resultarão em um "nome" aparecendo na GUI do Virtualbox corretamente e, se você listá-los com vboxmanage, o mesmo. No entanto, isso ainda mantém Bringing machine 'default' up with 'virtualbox' provider...em torno de quando você executavagrant up
TomSchober
60

Foi assim que designei nomes para VMs individuais. Mude YOURNAMEHEREpara o nome desejado.

Conteúdo do 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

Saída terminal:

$ vagrant status
Current machine states:

YOURNAMEHERE             not created (virtualbox)
Nikhil
fonte
9
Você pode omitir o bloco no final da sua definição, então simplesmente config.vm.define :app_nametambém funciona.
Vidur 30/07/2015
1
se YOURNAMEHERE for uma variável, os dois pontos ":" devem ser removidos:config.vm.define YOURNAMEHERE do |t| end
Radu
17

Se você quiser alterar qualquer outra coisa em vez de 'padrão', adicione estas linhas adicionais ao seu arquivo Vagrant:

Altere o nome da caixa de base ao usar "status vagrant"

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

Onde "tendo" será o nome que aparecerá em vez do padrão

Arbab Nazar
fonte
Eu acho que sua resposta é mais refinada e é óbvio que o que você está definindo é uma string contrária a outras respostas que usam `: OBJECT_VALUE`
Andres Leon Rangel
8

Eu especifico o nome definindo dentro do VagrantFile e também o nome do host, para que eu goste de ver o nome do meu projeto enquanto executo comandos do Linux independentemente do sistema operacional do meu dispositivo. ✌️

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

Sim, para o provedor Virtualbox, faça algo assim:

Vagrant.configure("2") do |config|
    # ...other options...
    config.vm.provider "virtualbox" do |p|
        p.name = "something-else"
    end
end
cmur2
fonte
2
Depois de alterar meu arquivo Vagrant e derrubar totalmente a máquina vagrant destroy, trazendo-a de volta, ainda a chama de padrão.
Kyle Kelley
3
Eu acredito que isso muda o nome na GUI do VirtualBox. "Você pode personalizar o nome que aparece na GUI do VirtualBox" Referência: link
nikhil
2
Ah, jepp minha culpa - eu pensei que o autor queria mudar o nome do VirtualBox, o nome interno do Vagrant só pode ser alterado em um ambiente com várias VMs.
Cmd2
4
Não querendo ser muito exigente cmur2, mas é possível configurar um nome interno do Vagrant em um único ambiente de máquina, fornecendo apenas um único bloco config.vm.define.
Dave Birch
5

Você pode alterar o nome da máquina padrão vagrant alterando o valor de config.vm.define.

Aqui está o arquivo Vagrant simples que usa getopts e permite alterar o nome dinamicamente:

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

Então, para usar um nome diferente, você pode executar, por exemplo:

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

Nota: O --vm-nameparâmetro precisa ser especificado antes do upcomando.

ou:

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

Caso haja muitas pessoas usando seu arquivo vagrant - convém definir o nome dinamicamente . Abaixo está o exemplo de como fazer isso usando o nome de usuário da sua máquina HOST como o nome da caixa e o nome do 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
fonte