วิธีการเปลี่ยนชื่อเครื่อง 'เริ่มต้น' ของ Vagrant?


235

ชื่อ 'ค่าเริ่มต้น' มาจากไหนเมื่อเปิดตัวกล่องคนเร่ร่อน?

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

มีวิธีตั้งค่านี้ไหม


อย่าลืมตรวจสอบว่า virtualization เปิดใช้งานอยู่หรือไม่เปิดใช้งาน VT-x ใน BIOS ของคุณ นั่นคือปัญหาของฉัน
Renato Tavares

คำตอบ:


341

ฉันพบว่ามีหลายตัวเลือกที่สับสนดังนั้นฉันจึงตัดสินใจทดสอบพวกเขาทั้งหมดเพื่อดูว่าพวกเขาทำอะไร

ฉันใช้ VirtualBox 4.2.16-r86992 และ Vagrant 1.3.3

ฉันสร้างไดเรกทอรีที่ชื่อnametestและรัน

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

เพื่อสร้าง Vagrantfile เริ่มต้น จากนั้นฉันก็เปิด VirtualBox GUI เพื่อที่ฉันจะได้เห็นชื่อของกล่องที่ฉันสร้างจะปรากฏขึ้น

  1. Default Vagrantfile

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

    ชื่อ VirtualBox GUI: "nametest_default_1386347922"

    ความคิดเห็น: ชื่อเริ่มต้นเป็นรูปแบบ DIRECTORY_default_TIMESTAMP

  2. กำหนด 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
    

    ชื่อ VirtualBox GUI: "nametest_foohost_1386347922"

    ความคิดเห็น: หากคุณกำหนด VM อย่างชัดเจนชื่อที่ใช้จะแทนที่โทเค็น 'ค่าเริ่มต้น' นี่คือชื่อคนจรจัดเอาต์พุตบนคอนโซล ลดความซับซ้อนตามการzookป้อนข้อมูลของ (ผู้วิจารณ์)

  3. ตั้งชื่อผู้ให้บริการ

    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: "foohost"

    ความคิดเห็น: หากคุณตั้งค่าnameคุณลักษณะในบล็อกการกำหนดค่าผู้ให้บริการชื่อนั้นจะกลายเป็นชื่อทั้งหมดที่แสดงใน VirtualBox GUI

    ตัวอย่างรวม:กำหนด VM- และ - ตั้งชื่อผู้ให้บริการ

    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: "barhost"

    ความคิดเห็น: หากคุณใช้ทั้งสองวิธีในเวลาเดียวกันค่าที่กำหนดให้nameในบล็อกการกำหนดค่าของผู้ให้บริการจะเป็นผู้ชนะ ลดความซับซ้อนตามการzookป้อนข้อมูลของ (ผู้วิจารณ์)

  4. ชุดhostname(โบนัส)

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

    ความคิดเห็น:ชุดชื่อโฮสต์ภายใน VM นี่จะเป็นผลลัพธ์ของhostnameคำสั่งใน VM และนี่คือสิ่งที่มองเห็นได้ในพรอมต์เช่นvagrant@<hostname>ที่นี่มันจะมีลักษณะvagrant@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

ดังนั้นจึงเป็น ตอนนี้คุณรู้ตัวเลือกที่แตกต่างกัน 3 แบบที่คุณสามารถตั้งค่าและเอฟเฟกต์ที่มี ฉันคิดว่ามันเป็นเรื่องของการตั้งค่าที่จุดนี้? (ฉันใหม่สำหรับ Vagrant ดังนั้นฉันยังไม่สามารถพูดถึงแนวทางปฏิบัติที่ดีที่สุดได้)


3
เฮ้ฉันค้นคว้าเพิ่มอีกเล็กน้อยในเรื่องที่เกี่ยวข้อง (1) ไดเรกทอรีในชื่อถูกสร้างขึ้นในครั้งแรกและจะไม่เปลี่ยนแปลงเมื่อคุณเปลี่ยนชื่อไดเรกทอรี (2) การประทับเวลาในชื่อถูกสร้างขึ้นในครั้งแรกและจะไม่เปลี่ยนแปลงเมื่อคุณรีสตาร์ท (3) โปรเจ็กต์ถูกแม็พกับ VirtualBox VM ผ่าน UUID ซึ่งถูกเก็บไว้ใน PROJECT_ROOT / .vagrant / machines / default / virtualbox / id UUID นี้ไม่สามารถมองเห็นได้ใน VirtualBox GUI ( virtualbox.org/ticket/6989 ) แต่คุณสามารถใช้VBoxManage list vmsบนบรรทัดคำสั่ง
odigity

หนึ่งในการอ้างอิงที่มีประโยชน์ที่ฉันใช้สำหรับความคิดเห็นก่อนหน้านี้: stackoverflow.com/questions/9434313//
odigity

6
ควรทราบว่าdefine VMชื่อวิธีการใช้ใน stdout และบันทึกของ Vagrant ในขณะที่set provider nameชื่อนั้นใช้สำหรับจัดการกล่องกับผู้ให้บริการ ดังนั้นทั้งสองเกี่ยวข้องกัน
Redsandro

30
คุณไม่จำเป็นต้องdo... endปิดกั้นจริงๆถ้ามันว่างเปล่า config.vm.define "foohost"ทำงานได้ดี
Zook

6
ฉันชอบรายละเอียดของคำตอบนี้ แต่ไม่ได้ตอบคำถามเดิม ใช่การกำหนดค่าเหล่านั้นจะส่งผลให้ "ชื่อ" ปรากฏขึ้นใน Virtualbox GUI อย่างถูกต้องและหากคุณแสดงรายการเหล่านั้นด้วย vboxmanage ก็จะเหมือนกัน อย่างไรก็ตามสิ่งนี้ยังคงBringing machine 'default' up with 'virtualbox' provider...อยู่เมื่อคุณดำเนินการvagrant up
TomSchober

60

นี่คือวิธีที่ฉันได้กำหนดชื่อให้กับแต่ละ VMs เปลี่ยนYOURNAMEHEREเป็นชื่อที่คุณต้องการ

เนื้อหาของ 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

ขั้วเอาท์พุท:

$ vagrant status
Current machine states:

YOURNAMEHERE             not created (virtualbox)

9
คุณสามารถละเว้นบล็อกในตอนท้ายของการกำหนดของคุณดังนั้นก็config.vm.define :app_nameทำงานได้เช่นกัน
Vidur

1
ถ้า YOURNAMEHERE เป็นตัวแปรโคลอน ":" ควรถูกลบ:config.vm.define YOURNAMEHERE do |t| end
Radu

17

หากคุณต้องการเปลี่ยนสิ่งอื่นแทน 'ค่าเริ่มต้น' เพียงเพิ่มบรรทัดเพิ่มเติมเหล่านี้ใน Vagrantfile ของคุณ:

เปลี่ยนชื่อ basebox เมื่อใช้ "สถานะคนจรจัด"

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

โดยที่ "tendo" จะเป็นชื่อที่จะปรากฏขึ้นแทนที่จะเป็นค่าเริ่มต้น


ฉันคิดว่าคำตอบของคุณละเอียดกว่าและเห็นได้ชัดว่าสิ่งที่คุณกำลังตั้งค่านั้นเป็นสายตรงข้ามกับคำตอบอื่น ๆ ที่ใช้ `: OBJECT_VALUE`
Andres Leon Rangel

8

ฉันระบุชื่อโดยกำหนดภายในVagrantFileและระบุชื่อโฮสต์ดังนั้นฉันสนุกกับการเห็นชื่อโครงการของฉันในขณะที่รันคำสั่ง Linux อย่างอิสระจากระบบปฏิบัติการของอุปกรณ์ ✌️

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

6

ใช่สำหรับผู้ให้บริการ Virtualbox ทำสิ่งนี้:

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

2
หลังจากเปลี่ยน Vagrantfile ของฉันและฉีกเครื่องผ่าน vagrant destroyแล้วนำกลับขึ้นมันก็ยังเรียกมันว่าเริ่มต้น
Kyle Kelley

3
ฉันเชื่อว่านี่เป็นการเปลี่ยนชื่อใน VirtualBox GUI "คุณสามารถปรับแต่งชื่อที่ปรากฏใน VirtualBox GUI" การอ้างอิง: ลิงค์
nikhil

2
อา, เป็นความผิดของฉัน - ฉันคิดว่าผู้เขียนต้องการเปลี่ยนชื่อ VirtualBox, ชื่อ Vagrant ภายในนั้นแน่นอนว่าสามารถเปลี่ยนแปลงได้ในสภาพแวดล้อม multi-VM เท่านั้น
cmur2

4
ไม่ได้หมายความว่าจะพิถีพิถัน cmur2 มากเกินไป แต่เป็นไปได้ที่จะตั้งค่าชื่อ Vagrant ภายในในสภาพแวดล้อมของเครื่องเดียวโดยเพียงแค่บล็อก config.vm.define เดียว
เดฟเบิร์ช

5

คุณสามารถเปลี่ยนชื่อเครื่องเริ่มต้นคนจรจัดได้โดยเปลี่ยนค่าconfig.vm.defineเป็น

นี่คือไฟล์ Vagrant ธรรมดาที่ใช้getoptsและให้คุณเปลี่ยนชื่อแบบไดนามิก:

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

เพื่อใช้ชื่ออื่นคุณสามารถเรียกใช้ตัวอย่างเช่น:

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

หมายเหตุ: --vm-nameจำเป็นต้องระบุพารามิเตอร์ก่อนupคำสั่ง

หรือ:

VM_NAME=my_name vagrant up --no-provision

1

ในกรณีที่มีคนจำนวนมากโดยใช้ไฟล์จรจัดของคุณ - คุณอาจต้องการที่จะตั้งชื่อแบบไดนามิก ด้านล่างเป็นตัวอย่างวิธีการใช้ชื่อผู้ใช้จากเครื่อง 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.