Bagaimana cara mengubah nama mesin Vagrant 'default'?

235

Dari mana asal nama 'default' saat meluncurkan kotak gelandangan?

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

Apakah ada cara untuk mengatur ini?

Kyle Kelley
sumber
Jangan lupa untuk memeriksa apakah virtualisasi aktif, aktifkan VT-x di BIOS Anda. Itu masalah saya
Renato Tavares

Jawaban:

341

Saya menemukan beberapa opsi membingungkan, jadi saya memutuskan untuk menguji semuanya untuk melihat apa yang mereka lakukan.

Saya menggunakan VirtualBox 4.2.16-r86992 dan Vagrant 1.3.3.

Saya membuat direktori bernama nametestdan berlari

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

untuk menghasilkan Vagrantfile default. Kemudian saya membuka GUI VirtualBox sehingga saya bisa melihat apa nama kotak yang saya buat akan muncul.

  1. Default Vagrantfile

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

    Nama GUI VirtualBox: "nametest_default_1386347922"

    Komentar: Nama default ke format DIRECTORY_default_TIMESTAMP.

  2. Tentukan 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
    

    Nama GUI VirtualBox: "nametest_foohost_1386347922"

    Komentar: Jika Anda secara eksplisit mendefinisikan VM, nama yang digunakan menggantikan token 'default'. Ini adalah keluaran nama gelandangan di konsol. Menyederhanakan berdasarkan zookmasukan (komentator)

  3. Tetapkan Nama Penyedia

    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
    

    Nama GUI VirtualBox: "foohost"

    Komentar: Jika Anda mengatur nameatribut di blok konfigurasi penyedia, nama itu akan menjadi seluruh nama yang ditampilkan di GUI VirtualBox.

    Contoh Gabungan: Tetapkan VM -dan- Tetapkan Nama Penyedia

    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
    

    Nama GUI VirtualBox: "barhost"

    Komentar: Jika Anda menggunakan kedua metode secara bersamaan, nilai yang ditetapkan namedalam blok konfigurasi penyedia menang. Menyederhanakan berdasarkan zookmasukan (komentator)

  4. Set hostname(BONUS)

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

    Komentar: Ini menetapkan nama host di dalam VM. Ini akan menjadi output dari hostnameperintah di VM dan juga ini adalah apa yang terlihat di prompt seperti vagrant@<hostname>, di sini akan terlihat sepertivagrant@buzbar

Kode Akhir

    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

Jadi begitulah. Anda sekarang tahu 3 opsi berbeda yang dapat Anda atur dan efek yang dimilikinya. Saya kira ini masalah pilihan saat ini? (Saya baru mengenal Vagrant, jadi saya belum bisa berbicara dengan praktik terbaik.)

odigity
sumber
3
Hei, saya melakukan sedikit riset tentang hal-hal terkait. (1) Direktori dalam nama dihasilkan pertama kali dan tidak berubah ketika Anda mengganti nama direktori. (2) Stempel waktu dalam nama dibuat pertama kali dan tidak berubah ketika Anda memulai ulang. (3) Proyek ini dipetakan ke VM VirtualBox melalui UUID, yang disimpan di PROJECT_ROOT / .vagrant / Machines / default / virtualbox / id. UUID ini tidak terlihat di GUI VirtualBox ( virtualbox.org/ticket/6989 ), tetapi Anda dapat menggunakan VBoxManage list vmspada baris perintah.
odigity
Salah satu referensi bermanfaat yang saya gunakan untuk komentar sebelumnya: stackoverflow.com/questions/9434313/…
odigity
6
Perlu dicatat bahwa define VMnama metode digunakan dalam stdout dan log Vagrant, sementara set provider namenama digunakan untuk mengelola kotak dengan penyedia. Jadi keduanya relevan.
Redsandro
30
Anda sebenarnya tidak perlu do... endblok jika kosong. config.vm.define "foohost"berfungsi dengan baik.
Zook
6
Saya suka detail jawaban ini, tetapi tidak benar-benar menjawab pertanyaan awal. Ya, konfigurasi tersebut akan menghasilkan "nama" yang muncul di GUI Virtualbox dengan benar, dan jika Anda mencantumkannya dengan vboxmanage, hal yang sama. Namun, ini masih Bringing machine 'default' up with 'virtualbox' provider...ada ketika Anda mengeksekusivagrant up
TomSchober
60

Ini adalah cara saya menetapkan nama untuk masing-masing VM. Ubah YOURNAMEHEREnama yang Anda inginkan.

Isi dari 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

Output terminal:

$ vagrant status
Current machine states:

YOURNAMEHERE             not created (virtualbox)
nikhil
sumber
9
Anda bisa menghilangkan blok di akhir definisi Anda, jadi cukup config.vm.define :app_nameberfungsi juga.
Viduri
1
jika YourNAMEHERE adalah variabel, maka titik dua ":" harus dihapus:config.vm.define YOURNAMEHERE do |t| end
Radu
17

Jika Anda ingin mengubah hal lain alih-alih 'default', maka tambahkan saja baris tambahan ini ke Vagrantfile Anda:

Ubah nama basebox, saat menggunakan "status gelandangan"

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

Di mana "tendo" akan menjadi nama yang akan muncul alih-alih default

Arbab Nazar
sumber
Saya pikir jawaban Anda lebih halus dan jelas bahwa apa yang Anda tetapkan adalah string yang bertentangan dengan jawaban lain yang menggunakan `: OBJECT_VALUE`
Andres Leon Rangel
8

Saya menentukan nama dengan mendefinisikan di dalam VagrantFile dan juga menentukan nama host jadi saya senang melihat nama proyek saya saat menjalankan perintah Linux secara independen dari OS perangkat saya. ✌️

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

Ya, untuk penyedia Virtualbox melakukan sesuatu seperti ini:

Vagrant.configure("2") do |config|
    # ...other options...
    config.vm.provider "virtualbox" do |p|
        p.name = "something-else"
    end
end
cmur2
sumber
2
Setelah mengubah Vagrantfile saya dan sepenuhnya merobohkan mesin melalui vagrant destroykemudian membawanya kembali itu masih menyebutnya default.
Kyle Kelley
3
Saya percaya ini mengubah nama di GUI VirtualBox. "Anda dapat menyesuaikan nama yang muncul di GUI VirtualBox" Referensi: tautan
nikhil
2
Ah, jepp kesalahan saya - saya pikir penulis ingin mengubah nama VirtualBox, nama Vagrant internal tentu saja hanya dapat diubah dalam lingkungan multi-VM.
cmur2
4
Tidak berarti terlalu pilih-pilih cmur2, tetapi dimungkinkan untuk mengatur nama Vagrant internal dalam lingkungan mesin tunggal dengan hanya menyediakan satu blok config.vm.define.
Dave Birch
5

Anda dapat mengubah nama mesin default gelandangan dengan mengubah nilai config.vm.define.

Berikut adalah Vagrantfile sederhana yang menggunakan getopts dan memungkinkan Anda untuk mengubah nama secara dinamis:

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

Jadi untuk menggunakan nama yang berbeda, Anda dapat menjalankan misalnya:

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

Catatan: --vm-nameParameter perlu ditentukan sebelum upperintah.

atau:

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

Jika ada banyak orang yang menggunakan file gelandangan Anda - Anda mungkin ingin mengatur nama secara dinamis . Di bawah ini adalah contoh bagaimana melakukannya menggunakan nama pengguna dari mesin HOST Anda sebagai nama kotak dan nama 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
sumber