Bir Vagrant proje dizinini mevcut bir VirtualBox VM ile nasıl ilişkilendiririm?


132

Bir şekilde Vagrant projem VirtualBox VM ile ilişkisini kesmiş, böylece vagrant upVagrant temel kutuyu içe aktaracak ve yeni bir sanal makine oluşturacak.

Vagrant projesini mevcut VM ile yeniden ilişkilendirmenin bir yolu var mı? Vagrant, bir Vagrantfile'ı bir VirtualBox VM dizini ile dahili olarak nasıl ilişkilendirir?

Yanıtlar:


89

UYARI: Aşağıdaki çözüm Vagrant 1.0.x için işe yarıyor ancak Vagrant 1.1+ için geçerli değil .

Vagrant, VM'nizin UUID'sini izlemek için "Vagrantfile" dosyanızla aynı dizindeki ".vagrant" dosyasını kullanır. Bir VM yoksa bu dosya mevcut olmayacaktır. Dosyanın biçimi JSON şeklindedir. Tek bir VM mevcutsa şöyle görünür:

{
   "active":{
      "default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
   }
}

default varsayılan sanal makinenin adıdır (çoklu sanal makine kurulumlarını kullanmıyorsanız).

Sanal makinenizin bir şekilde ilişkisi kesilirse, yapabileceğiniz şey VBoxManage list vms, VirtualBox'ın bildiği her sanal makineyi adı ve UUID'si ile listelemektir. Ardından, kendinizle .vagrantaynı dizinde manuel olarak bir dosya oluşturun Vagrantfileve içeriğini doğru şekilde doldurun.

vagrant statusVagrant'ın doğru değişiklikleri aldığından emin olmak için çalıştırın .

Not: Bu, Vagrant tarafından resmi olarak desteklenmemektedir ve Vagrant .vagrantherhangi bir zamanda formatını değiştirebilir . Ancak bu, Vagrant 0.9.7'den itibaren geçerlidir ve Vagrant 1.0 için geçerli olacaktır.


Müthiş! Teşekkür ederim. Bir şeyin eksik olduğunu hissettim.
jrdmcgr

48
Vagrant 1.1 için UUID'ler, adresinde makineye özel bir dosyada saklanır .vagrant/machines/{name}/{provider}/id. Aslında, dosyanın içerdiği tek şey UUID'dir.

2
Bu numarayı denedim ama serseri statüsü, devletin yaratılmadığını bildiriyor. Vagrant up daha sonra yeni bir sanal makine oluşturur ve iyi çalışır. Kimlik dosyasını değiştirirsem, onu az önce oluşturduğu kutunun uuid'ine geri değiştirsem bile oluşturulmadığını bildirir.
Reece Marsland

4
Vagrant 1.1+ ile, kimliğin sonuna yeni bir satır eklemediğinizden emin olun. Ayrıntılar için github.com/mitchellh/vagrant/issues/1755 sayfasına bakın
Mads Mobæk

1
Profilimde (Mac) .vagrant arıyordum. (En azından benim için) yemek kitapları klasörü ve VagrantFile ile aynı klasörde olduğunu unutmayın. (Vagrant sürüm 1.4.3)
allicarn

208

İçin Vagrant 1.6.3 aşağıdakileri yapın:

1) Vagrantfile dosyanızın bulunduğu dizinde şu komutu çalıştırın:

VBoxManage list vms

Bunun gibi bir şeye sahip olacaksınız:

"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

2) Aşağıdaki yola gidin:

cd .vagrant/machines/default/virtualbox

3) xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx sanal makinenizin kimliğiyle id adlı bir dosya oluşturun

4) Dosyayı kaydedin ve serseriyi çalıştırın


8
idDosyayı satırsonu olmadan oluşturmanın iyi bir yolu echo -n '<your id here>' > id.
Xiong Chiamiov

1
Harika çalışıyor. Peki bu neden oluyor?
JohnnyQ

Vagrant 1.7.2 ile benim için çalıştı. Teşekkürler!
Rafen

1
Mükemmel çalıştı.
Casey Robinson

# test1 ve test2 kutuları ...for box in test1 test2; do virtualboxid=$(VBoxManage list vms | grep $box | cut -d' ' -f2); echo -n $virtualboxid > .vagrant/machines/$box/virtualbox/id; done
luismartingil

48

Üst versiyondaki çözüm tamamen aynı.

Ancak önce .vbox dosyasını el ile başlatmanız gerekir, böylece dosya VBoxManage list vms

Sonra .vagrant/machines/default/virtualbox/iduuid'in doğru olup olmadığını kontrol edebilirsiniz .


4
Ayrıca, iddosyayı düzenliyorsanız, tek satırda tutmanız gerektiğini de belirtmek gerekir. Bazı nedenlerden dolayı satırsonunu sevmiyor (metin düzenleyicim varsayılan olarak ekler, bu yüzden problemlerim vardı).
Dan2552

Bununla ilgili bir sorunla karşılaştım çünkü içinde bulunduğu klasörü yeniden adlandırmıştım. Vagrant, mevcut VM'yi kullanmak yerine klasörle aynı ada sahip yeni bir VM oluşturmakta ısrar etti. .vagrant1.0 formatında bir dosya oluşturarak düzelttim ve otomatik olarak yükseltti. Bunu yaptığım anda, aslında eski VM'yi yeni proje dizini adına yeniden adlandırdı.
Jonah

2
Serseri / makineler / varsayılan / sanal kutu / kimliğimin yanlış VirtualBox makine kimliğine işaret ettiği bağlantının kesilmesine neyin neden olduğundan emin değilim. Yardımcı olan dosya $ HOME / .VirtualBox / VirtualBox.xml idi. VirtualBox makine UUID'lerinin makine adlarıyla eşleştirildiği bir MachineRegistry bölümüne sahiptir. Örneğin <MachineEntry uuid = "{f232f951-103b-af28-9f8d-b2ab21bs258f}" src = "$ HOME / VirtualBox VMs \ <machine-name> \ <machine-name> .vbox" />
arntg

14

Bugün sorun yaşadım, .vagrantklasörüm eksikti ve basitçe kimliği ayarlamaktan birkaç adım daha olduğunu gördü:

  1. Kimliği ayarlayın:

    VBoxManage list vms
    

    Kimliği bulun ve ayarlayın {project-folder}/.vagrant/machines/default/virtualbox/id .

    Not defaultsizin de ayarlarsanız farklı olabilir Vagrantfilemesela config.vm.define "someothername".

  2. Makinenin temel hazırlığını durdurun:

    Dosyayla action_provisionaynı dizinde bir dosya oluşturun id, içeriğini şu şekilde ayarlayın: 1. adımda bulunan id ile 1.5:{id}değiştirin {id}.

  3. Yeni bir genel / özel anahtar ayarlayın:

    Vagrant .vagrant/machines/default/virtualbox/private_key, makineye ssh yapmak için saklanan özel bir anahtarı kullanır . Yeni bir tane oluşturmanız gerekecek.

    ssh-keygen -t rsa
    

    adlandırın private_key.

    vagrant sshsonra private_key.pubiçine kopyalayın /home/vagrant/.ssh/authorized_keys.


"yetkili_keys" bir dosya mı yoksa dizin mi?
user2568374

bu bir dosya, üzerinde arama yaparsanız birçok şey bulacaksınız, bu standart bir ssh şey
Petecoop

Aynı anahtarları kullandığım için son seti (üçüncü) yapmak zorunda değildim. Aksi takdirde, gerçekten iyi açıklanmış ve her şey mükemmel.
Dazag

Win10'da üçüncü adım nasıl atılır?
navono

9

Vagrant 1.7.4 ile bugün aynı problemi güncelleyin:

Örneğin, 'vip-quickstart_default_1431365185830_12124' kutusunu serseriyle eşleştirmek için.

$ VBoxManage list
"vip-quickstart_default_1431365185830_12124" {50feafd3-74cd-40b5-a170-3c976348de27}
$ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id

6

Çoklu sanal makine kurulumları için aşağıdaki gibi görünür:

{
   "active":{
        "web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
        "db":"13503bc5-76b8-4c26-95c4-32435b372212"
   }
}

VM adlarını, bu VM'leri oluşturmak için kullanılan Vagrantfile'dan alabilirsiniz. Şu satırı arayın:

config.vm.define :web do |web_config|

Bu durumda "web" vm'nin adıdır.


Ve db varsayılan bir sanal makinedir ??
Robert

1
Burada bir varsayılan olduğunu sanmıyorum, sadece web ve db. Vagrantfile'a bağlı olarak, vm'nin önce inşa edileceği bir sıra vardır.
agwntr

5

Ben kullanıyorum serseri 1.8.1 üzerinde OSX El Capitan

Bilgisayarım yeniden başlatıldığında vm'im düzgün kapatılmadı, bu yüzden denediğimde vagrant upher zaman yeni vm oluşturuyordu. Burada benim için hiçbir çözüm işe yaramadı. Ama işe yarayan şey ingmmurillo'nun cevabının bir varyasyonuydu

Yani .vagrant/machines/default/virtualbox/id, çalışan kimliğe göre oluşturmak yerine VBoxManage list vms. Kimliği güncellemem gerekiyordu.vagrant/machines/local/virtual_box/id

Bunu benim için esasen yapan tek bir satırım var:

echo -n `VBoxManage list vms | head -n 1 | awk '{print substr($2, 2, length($2)-2)}'` > .vagrant/machines/local/virtualbox/id

Bu, çalıştırmaya başlamam gereken ilk kutunun olduğunu varsayar VBoxManage list vms


4

Bu, @ Petecoop'un cevabından değiştirilmiştir .

Çalıştırmak vagrant haltHenüz kutuyu kapatmadıysanız .

Ardından sanal kutularınızı listeleyin: VBoxManage list vms

Tüm sanal kutularınızı listeleyecektir. Eğer dönmek ve kıvırcık parantez arasındaki kimliği kapmak isteyen kutuyu tanımlayın: {}.

Ardından proje kimliği dosyasını düzenleyin: sudo nano .vagrant/machines/default/virtualbox/id (proje dizininden)

VB'ler listesinden kopyaladığınız kimlik ile değiştirin.

Deneyin vagrant reload.

Bu işe yaramazsa ve SSH yetkilendirmesine takılırsa (tökezlediğim yerde), güvensiz genel anahtarı serseri git'ten kopyalayın . İçeriğini değiştirin /.vagrant/machines/default/virtualbox/private_key. Elbette orijinali yedekleyin:cp private_key private_key-bak .

Sonra koş vagrant reload. Güvenli olmayan anahtarı tanımladığını ve yeni bir tane oluşturduğunu söyleyecektir.

default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!

Tamamen hazır olmalısın.


3

Vagrant 1.9.1'de:

Virtual Box'ta 'Ubuntu 16.04.1' adında bir sanal makinem vardı, bu yüzden onu bir serseri kutusu olarak paketledim:

vagrant package --base "Ubuntu 16.04.1"

ile yanıt verir ...

==> Ubuntu 16.04.1: Exporting VM...
==> Ubuntu 16.04.1: Compressing package to: blah blah/package.box

0

MacOS'dayım ve kutulardaki .lock'ları kaldırmanın sorunumu çözdüğünü gördüm.

Bazı sebeplerden dolayı

vagrant halt

bu kilitleri kaldırmadım ve timemachine kullanarak .vagrant / machine / default / virtualbox içindeki tüm ayarlarımı geri yükledikten sonra, kilitleri kaldırdıktan sonra, doğru makine açıldı.

Sadece 1 küçük sorun kaldı, gruba açıldı, bu yüzden bir kez enter tuşuna basmak zorunda kaldım, bunun devam edip etmediğini bilmiyorum, ama yakında öğreneceğim.

Serseri 1.7.4 ve sanal kutu 5.0.2 çalıştırıyorum

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.