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?
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?
Respostas:
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 nametest
e 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.
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.
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 zook
entrada de (comentarista)
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 name
atributo 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 name
no bloco de configuração do provedor vence. Simplificando com base na zook
entrada de (comentarista)
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 hostname
comando na VM e também é isso que é visível no prompt como vagrant@<hostname>
, aqui vai parecervagrant@buzbar
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.)
VBoxManage list vms
na linha de comando.
define VM
nome do método é usado no stdout e nos logs do Vagrant, enquanto o set provider name
nome é usado para gerenciar a caixa com o provedor. Então, ambos são relevantes.
do... end
bloco se estiver vazio. config.vm.define "foohost"
funciona muito bem.
Bringing machine 'default' up with 'virtualbox' provider...
em torno de quando você executavagrant up
Foi assim que designei nomes para VMs individuais. Mude YOURNAMEHERE
para 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)
config.vm.define :app_name
também funciona.
config.vm.define YOURNAMEHERE do |t| end
Se você quiser alterar qualquer outra coisa em vez de 'padrão', adicione estas linhas adicionais ao seu arquivo Vagrant:
config.vm.define "tendo" do |tendo|
end
Onde "tendo" será o nome que aparecerá em vez do padrão
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"
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
vagrant destroy
, trazendo-a de volta, ainda a chama de padrão.
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-name
parâmetro precisa ser especificado antes do up
comando.
ou:
VM_NAME=my_name vagrant up --no-provision
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