Vagrant 'varsayılan' makine adını nasıl değiştirebilirim?


235

Bir vagrant kutusu başlatılırken 'varsayılan' adı nereden geliyor?

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

Bunu ayarlamanın bir yolu var mı?


Sanallaştırmanın etkin olup olmadığını kontrol etmeyi unutmayın, BIOS'unuzda VT-x'i etkinleştirin. Benim sorunum buydu
Renato Tavares

Yanıtlar:


341

Birden fazla seçeneği kafa karıştırıcı buldum, bu yüzden hepsini tam olarak ne yaptıklarını görmek için test etmeye karar verdim.

VirtualBox 4.2.16-r86992 ve Vagrant 1.3.3 kullanıyorum.

Adlı bir dizin oluşturdum nametestve koştum

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

Varsayılan bir Vagrantfile oluşturmak için. Sonra VirtualBox GUI'yi açtım, böylece oluşturduğum kutuların hangi isimleri göstereceğini görebiliyordum.

  1. Varsayılan Vagrantfile

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

    VirtualBox GUI Adı: "nametest_default_1386347922"

    Yorumlar: Ad varsayılan olarak DIRECTORY_default_TIMESTAMP biçimindedir.

  2. VM'yi tanımlayın

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

    VirtualBox GUI Adı: "nametest_foohost_1386347922"

    Yorumlar: Bir VM'yi açıkça tanımlarsanız, kullanılan ad 'varsayılan' belirtecinin yerini alır. Bu, konsoldaki vagrant çıktılarının adıdır . Adlı kullanıcının zook(yorum yapan) girdisine dayalı sadeleştirme

  3. Sağlayıcı Adını Ayarla

    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
    

    VirtualBox GUI Adı: "foohost"

    Yorumlar:name Özniteliği bir sağlayıcı yapılandırma bloğunda ayarlarsanız , bu ad VirtualBox GUI'de görüntülenen adın tamamı olur.

    Birleşik Örnek: VM -ve- Set Sağlayıcı Adını tanımlayın

    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
    

    VirtualBox GUI Adı: "barhost"

    Yorumlar: Her iki yöntemi de aynı anda kullanırsanız, namesağlayıcı yapılandırma bloğuna atanan değer kazanır. Adlı kullanıcının zook(yorum yapan) girdisine dayalı sadeleştirme

  4. Set hostname(BONUS)

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

    Yorumlar: Bu, VM içindeki ana bilgisayar adını ayarlar. Bu hostname, VM'deki komutun çıktısı olacaktı ve aynı zamanda bilgi isteminde görünen şey vagrant@<hostname>, burada şöyle görünecekvagrant@buzbar

Nihai Kod

    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

İşte orada. Artık ayarlayabileceğiniz 3 farklı seçenek ve bunların etkilerini biliyorsunuz. Sanırım bu noktada bir tercih meselesi? (Vagrant için yeniyim, bu yüzden henüz en iyi uygulamalarla konuşamıyorum.)


3
Hey, ilgili konularda biraz daha araştırma yaptım. (1) Addaki dizin ilk kez oluşturulur ve dizini yeniden adlandırdığınızda değişmez. (2) Addaki zaman damgası ilk kez oluşturulur ve yeniden başlattığınızda değişmez. (3) Proje, PROJECT_ROOT / .vagrant / machines / default / virtualbox / id içinde saklanan UUID aracılığıyla bir VirtualBox VM ile eşleştirilir. Bu UUID, VirtualBox GUI'de ( virtualbox.org/ticket/6989 ) görünmez , ancak VBoxManage list vmskomut satırında kullanabilirsiniz.
odigity

Önceki yorum için kullandığım faydalı referanslardan biri: stackoverflow.com/questions/9434313/…
odigity

6
define VMYöntem adının Vagrant stdout ve günlüklerinde kullanıldığını, set provider nameadın sağlayıcı ile kutuyu yönetmek için kullanıldığını belirtmek gerekir . Yani her ikisi de alakalı.
Redsandro

30
Boşsa aslında do... endbloğa ihtiyacınız yoktur . config.vm.define "foohost"gayet iyi çalışıyor.
Zook

6
Bu cevabın detayını seviyorum, ancak orijinal soruyu gerçekten ele almıyor. Evet, bu yapılandırmalar Virtualbox GUI'de düzgün bir şekilde "ad" görünmesine neden olur ve bunları vboxmanage ile listelerseniz aynı şey olur. Ancak, Bringing machine 'default' up with 'virtualbox' provider...yürüttüğünüzde bu hala devam ediyorvagrant up
TomSchober

60

Bu, bireysel VM'lere ad atamamın yoludur. YOURNAMEHEREİstediğiniz isimle değiştirin .

Vagrantfile içeriği:

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 çıkışı:

$ vagrant status
Current machine states:

YOURNAMEHERE             not created (virtualbox)

9
Tanımınızın sonunda bloğu atlayabilirsiniz, bu yüzden config.vm.define :app_namede çalışır.
Vidur

1
YOURNAMEHERE bir değişkense, iki nokta üst üste ":" kaldırılmalıdır:config.vm.define YOURNAMEHERE do |t| end
Radu

17

'Varsayılan' yerine başka bir şey değiştirmek isterseniz Vagrantfile'ınıza şu ek satırları ekleyin:

"Vagrant status" kullanırken ana kutu adını değiştirin

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

Burada "tendo" varsayılan yerine görünecek ad olacaktır


Cevabınızın daha rafine olduğunu ve ayarladığınız şeyin `` OBJECT_VALUE``
Andres Leon Rangel

8

VagrantFile içinde tanımlayarak adı belirtin ve ayrıca ana bilgisayar adını belirtin, böylece cihazımın işletim sisteminden bağımsız olarak Linux komutlarını yürütürken projemin adını görmekten zevk alıyorum. ✌️

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

6

Evet, Virtualbox sağlayıcısı için böyle bir şey yapın:

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

2
Vagrantfile'ımı değiştirdikten ve makineyi tamamen yırttıktan vagrant destroysonra geri getirdikten sonra hala varsayılan olarak adlandırıyor.
Kyle Kelley

3
Bunun VirtualBox GUI'deki adı değiştirdiğine inanıyorum. "VirtualBox GUI'sinde görünen ismi özelleştirebilirsiniz" Referans: link
nikhil

2
Ah, benim hatam jepp - Ben yazarın VirtualBox adını değiştirmek istediğini düşündüm, iç Vagrant adı elbette sadece bir çoklu VM ortamında değiştirilebilir.
cmur2

4
Çok seçici cmur2 olduğu anlamına gelmez, ancak yalnızca tek bir config.vm.define bloğu sağlayarak tek bir makine ortamında dahili bir Vagrant adı ayarlamak mümkündür.
Dave Birch

5

Değerini değiştirerek vagrant varsayılan makine adını değiştirebilirsiniz config.vm.define.

İşte getopts kullanan ve adı dinamik olarak değiştirmenize izin veren basit Vagrantfile :

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

Farklı bir ad kullanmak için, örneğin çalıştırabilirsiniz:

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

Not: --vm-nameParametrenin upkomuttan önce belirtilmesi gerekir .

veya:

VM_NAME=my_name vagrant up --no-provision

1

Vagrant dosyanızı kullanan birçok kişi varsa - adı dinamik olarak ayarlamak isteyebilirsiniz . Aşağıda, kutunun adı ve ana bilgisayar adı olarak HOST makinenizdeki kullanıcı adını kullanarak nasıl yapılacağı örneği verilmiştir :

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.