Làm cách nào để thay đổi tên máy 'mặc định' của Vagrant?


235

Tên 'mặc định' đến từ đâu khi khởi chạy một hộp mơ hồ?

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

Có cách nào để thiết lập điều này?


Đừng quên kiểm tra xem ảo hóa có hoạt động hay không, bật VT-x trong BIOS của bạn. Đó là vấn đề của tôi
Renato Tavares

Câu trả lời:


341

Tôi thấy nhiều lựa chọn khó hiểu, vì vậy tôi quyết định thử nghiệm tất cả chúng để xem chính xác những gì chúng làm.

Tôi đang sử dụng VirtualBox 4.2.16-r86992 và Vagrant 1.3.3.

Tôi đã tạo một thư mục được gọi nametestvà chạy

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

để tạo Vagrantfile mặc định. Sau đó, tôi đã mở GUI VirtualBox để tôi có thể thấy tên mà các hộp tôi tạo sẽ hiển thị là.

  1. Vagrantfile mặc định

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

    Tên GUI VirtualBox: "nametest_default_1386347922"

    Nhận xét: Tên mặc định theo định dạng DIRECTORY_default_TIMESTAMP.

  2. Xác định 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
    

    Tên GUI VirtualBox: "nametest_foohost_1386347922"

    Nhận xét: Nếu bạn xác định rõ ràng VM, tên được sử dụng sẽ thay thế mã thông báo 'mặc định'. Đây là tên đầu ra mơ hồ trên bàn điều khiển. Đơn giản hóa dựa trên zookđầu vào (bình luận viên)

  3. Đặt tên nhà cung cấp

    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
    

    Tên GUI VirtualBox: "foohost"

    Nhận xét: Nếu bạn đặt namethuộc tính trong khối cấu hình nhà cung cấp, tên đó sẽ trở thành toàn bộ tên được hiển thị trong GUI VirtualBox.

    Ví dụ kết hợp: Xác định VM -and- Đặt tên nhà cung cấp

    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
    

    Tên GUI VirtualBox: "barhost"

    Nhận xét: Nếu bạn sử dụng cả hai phương pháp cùng một lúc, giá trị được chỉ định nametrong khối cấu hình nhà cung cấp sẽ thắng. Đơn giản hóa dựa trên zookđầu vào (bình luận viên)

  4. Đặt hostname(TIỀN THƯỞNG)

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

    Nhận xét: Điều này đặt tên máy chủ bên trong VM. Đây sẽ là đầu ra của hostnamelệnh trong VM và đây cũng là thứ hiển thị trong lời nhắc như thế vagrant@<hostname>, ở đây nó sẽ trông như thếvagrant@buzbar

Mã cuối cùng

    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

Nó đây rồi Bây giờ bạn biết 3 tùy chọn khác nhau mà bạn có thể thiết lập và các hiệu ứng họ có. Tôi đoán đó là vấn đề ưu tiên vào thời điểm này? (Tôi chưa quen với Vagrant, vì vậy tôi chưa thể nói về các thực tiễn tốt nhất.)


3
Này, tôi đã nghiên cứu thêm một chút về các vấn đề liên quan. (1) Thư mục trong tên được tạo lần đầu tiên và không thay đổi khi bạn đổi tên thư mục. (2) Dấu thời gian trong tên được tạo lần đầu tiên và không thay đổi khi bạn khởi động lại. (3) Dự án được ánh xạ tới VirtualBox VM thông qua UUID, được lưu trữ trong PRO DỰ_ROOT / .vagrant / Machines / default / virtualbox / id. UUID này không hiển thị trong GUI VirtualBox ( virtualbox.org/ticket/6989 ), nhưng bạn có thể sử dụng VBoxManage list vmstrên dòng lệnh.
bất mãn

Một trong những tài liệu tham khảo hữu ích mà tôi đã sử dụng cho nhận xét trước: stackoverflow.com/questions/9434313/ trên
odigity

6
Cần lưu ý rằng define VMtên phương thức được sử dụng trong thiết bị xuất chuẩn và nhật ký của Vagrant, trong khi set provider nametên được sử dụng để quản lý hộp với nhà cung cấp. Vì vậy, cả hai đều có liên quan.
Redsandro

30
Bạn thực sự không cần do... endkhối nếu nó trống. config.vm.define "foohost"hoạt động tốt
Zook

6
Tôi thích chi tiết của câu trả lời này, nhưng nó không thực sự giải quyết được câu hỏi ban đầu. Có, các cấu hình đó sẽ dẫn đến một "tên" hiển thị trong GUI Virtualbox đúng cách và nếu bạn liệt kê chúng với vboxmanage, thì cũng vậy. Tuy nhiên, điều này vẫn giữ Bringing machine 'default' up with 'virtualbox' provider...xung quanh khi bạn thực thivagrant up
TomSchober

60

Đây là cách tôi đã gán tên cho các VM riêng lẻ. Thay đổi YOURNAMEHEREtên bạn muốn

Nội dung của 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

Đầu ra thiết bị đầu cuối:

$ vagrant status
Current machine states:

YOURNAMEHERE             not created (virtualbox)

9
Bạn có thể bỏ qua khối ở cuối định nghĩa của mình, vì vậy đơn giản là config.vm.define :app_namenó cũng hoạt động.
Vidur

1
nếu YOUNAMEHERE là một biến thì dấu hai chấm ":" sẽ bị xóa:config.vm.define YOURNAMEHERE do |t| end
Radu

17

Nếu bạn muốn thay đổi bất cứ điều gì khác thay vì 'mặc định', thì chỉ cần thêm các dòng bổ sung này vào Vagrantfile của bạn:

Thay đổi tên basebox, khi sử dụng "trạng thái mơ hồ"

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

Trong đó "tendo" sẽ là tên sẽ xuất hiện thay vì mặc định


Tôi nghĩ rằng câu trả lời của bạn tinh tế hơn và rõ ràng những gì bạn đang đặt là một chuỗi trái ngược với các câu trả lời khác sử dụng `: OBarget_VALUE`
Andres Leon Rangel

8

Tôi chỉ định tên bằng cách xác định bên trong VagrantFile và cũng chỉ định tên máy chủ để tôi thấy tên dự án của mình trong khi thực hiện các lệnh Linux độc lập với HĐH của thiết bị. ✌️

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

6

Có, đối với nhà cung cấp Virtualbox hãy làm một cái gì đó như thế này:

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

2
Sau khi thay đổi Vagrantfile của tôi và phá hỏng hoàn toàn máy thông qua vagrant destroysau đó đưa nó trở lại, nó vẫn gọi nó là mặc định.
Kyle Kelley

3
Tôi tin rằng điều này thay đổi tên trong GUI VirtualBox. "Bạn có thể tùy chỉnh tên xuất hiện trong GUI VirtualBox" Tham khảo: link
nikhil 25/07/13

2
À, lỗi của tôi - Tôi nghĩ rằng tác giả muốn thay đổi tên VirtualBox, tên Vagrant bên trong dĩ nhiên chỉ có thể thay đổi trong môi trường nhiều VM.
cmur2

4
Không có nghĩa là quá kén chọn cmur2, nhưng có thể thiết lập tên Vagrant nội bộ trong một môi trường máy đơn giản bằng cách chỉ cung cấp một khối config.vm.define duy nhất.
Dave Birch

5

Bạn có thể thay đổi tên máy mặc định mơ hồ bằng cách thay đổi giá trị của config.vm.define.

Đây là Vagrantfile đơn giản sử dụng getopts và cho phép bạn thay đổi tên động:

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

Vì vậy, để sử dụng tên khác nhau, bạn có thể chạy ví dụ:

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

Lưu ý: --vm-nameTham số cần được chỉ định trước uplệnh.

hoặc là:

VM_NAME=my_name vagrant up --no-provision

1

Trong trường hợp có nhiều người sử dụng tệp mơ hồ của bạn - bạn có thể muốn đặt tên động . Dưới đây là ví dụ về cách thực hiện bằng tên người dùng từ máy HOST của bạn làm tên của hộp và tên máy chủ:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.