वैग्रांत 'डिफ़ॉल्ट' मशीन का नाम कैसे बदलें?


235

आवारा बॉक्स लॉन्च करते समय 'डिफ़ॉल्ट' नाम कहां से आता है?

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

क्या इसे सेट करने का कोई तरीका है?


वर्चुअलाइजेशन सक्रिय है या नहीं, यह जांचना न भूलें कि अपने BIOS में VT-x को सक्षम करें। यह मेरी समस्या थी
Renato Tavares

जवाबों:


341

मुझे कई विकल्प भ्रामक लगे, इसलिए मैंने उन सभी का परीक्षण करने का निर्णय लिया कि वे क्या करते हैं।

मैं VirtualBox 4.2.16-r86992 और Vagrant 1.3.3 का उपयोग कर रहा हूं।

मैंने एक निर्देशिका बनाई nametestऔर बुलाया

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

एक डिफ़ॉल्ट Vagrantfile उत्पन्न करने के लिए। फिर मैंने वर्चुअलबॉक्स जीयूआई खोला ताकि मैं देख सकूं कि मेरे द्वारा बनाए गए बॉक्स किस नाम से दिखाई देंगे।

  1. डिफ़ॉल्ट Vagrantfile

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

    वर्चुअलबॉक्स GUI नाम: "nametest_default_1386347922"

    टिप्पणियाँ: नाम DIRECTORY_default_TIMESTAMP प्रारूप में चूक करता है।

  2. वीएम को परिभाषित करें

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

    वर्चुअलबॉक्स GUI नाम: "nametest_foohost_1386347922"

    टिप्पणियाँ: यदि आप स्पष्ट रूप से एक वीएम को परिभाषित करते हैं, तो उपयोग किया गया नाम टोकन 'डिफ़ॉल्ट' की जगह लेता है। यह कंसोल पर नाम योनि आउटपुट है। सरल 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
    

    वर्चुअलबॉक्स GUI का नाम: "फोहोस्ट"

    टिप्पणियाँ: यदि आप 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
    

    वर्चुअलबॉक्स GUI नाम: "बारहोस्ट"

    टिप्पणियाँ: यदि आप एक ही समय में दोनों विधियों का उपयोग करते हैं, nameतो प्रदाता कॉन्फ़िगरेशन ब्लॉक में दिया गया मान जीत जाता है। सरल zook(टिप्पणीकार) इनपुट पर आधारित है

  4. सेट hostname(बोनस)

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

    टिप्पणियाँ: यह VM के अंदर hostname सेट करता है। यह hostnameVM में कमांड का आउटपुट होगा और यह भी कि क्या प्रॉम्प्ट में दिखाई दे रहा है जैसे 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 अलग-अलग विकल्पों को जानते हैं जिन्हें आप सेट कर सकते हैं और उनके प्रभाव। मुझे लगता है कि यह इस बिंदु पर वरीयता का मामला है? (मैं वैग्रांट के लिए नया हूं, इसलिए मैं अभी तक सर्वोत्तम प्रथाओं से बात नहीं कर सकता।)


3
अरे, मैंने संबंधित मामलों पर थोड़ा और शोध किया। (1) नाम में निर्देशिका पहली बार उत्पन्न होती है और जब आप निर्देशिका का नाम बदलते हैं तो यह नहीं बदलता है। (२) नाम में टाइमस्टैम्प पहली बार उत्पन्न होता है और जब आप पुनः आरंभ करते हैं तो यह परिवर्तित नहीं होता है। (3) परियोजना को यूयूआईडी के माध्यम से एक वर्चुअलबॉक्स वीएम पर मैप किया जाता है, जिसे PROJECT_ROOT / .vagrant / मशीनों / डिफ़ॉल्ट / वर्चुअलबॉक्स / आईडी में संग्रहीत किया जाता है। यह UUID वर्चुअलबॉक्स GUI ( virtualbox.org/ticket/6989 ) में दिखाई नहीं देता है , लेकिन आप VBoxManage list vmsकमांड लाइन पर उपयोग कर सकते हैं ।
१ity

पिछली टिप्पणी के लिए मेरे द्वारा उपयोग किए गए उपयोगी संदर्भों में से एक: stackoverflow.com/questions/9434313/…
17

6
यह ध्यान देने योग्य है कि define VMविधि नाम का उपयोग वैग्रांट स्टडआउट और लॉग set provider nameमें किया जाता है , जबकि नाम का उपयोग प्रदाता के साथ बॉक्स के प्रबंधन के लिए किया जाता है। इसलिए दोनों प्रासंगिक हैं।
Redsandro

30
do... endखाली होने पर आपको वास्तव में ब्लॉक की आवश्यकता नहीं है । config.vm.define "foohost"ठीक काम करता है।
ज़ूक

6
मुझे इस उत्तर का विस्तार पसंद है, लेकिन यह वास्तव में मूल प्रश्न को संबोधित नहीं करता है। हां, उन कॉन्फ़िगरेशनों का परिणाम एक "नाम" में दिखाई देगा जो वर्चुअलबॉक्स GUI में ठीक से दिखाई देगा, और यदि आप उन्हें vboxmanage के साथ सूचीबद्ध करते हैं, तो। हालाँकि, यह तब भी Bringing machine 'default' up with 'virtualbox' provider...आस-पास रहता है जब आप निष्पादित करते हैंvagrant up
टॉम

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भी काम करता है।
विदुर

1
":" यदि YourNameHere एक चर तो पेट है हटा दिया जाना चाहिए:config.vm.define YOURNAMEHERE do |t| end
राडू

17

यदि आप 'डिफ़ॉल्ट' के बजाय कुछ और बदलना चाहते हैं, तो बस इन अतिरिक्त लाइनों को अपने Vagrantfile में जोड़ें:

"आवारा स्थिति" का उपयोग करते समय बेसबॉक्स नाम बदलें

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

जहां "टेंडो" वह नाम होगा जो डिफ़ॉल्ट के बजाय दिखाई देगा


मुझे लगता है कि आपका उत्तर अधिक परिष्कृत है और यह स्पष्ट है कि आप जो सेटिंग कर रहे हैं वह अन्य उत्तरों के विपरीत एक स्ट्रिंग है जो `: OBJECT_VALUE` का उपयोग करता है
एंड्रेस लियोन रंगेल

8

मैं VagrantFile के अंदर परिभाषित करके नाम निर्दिष्ट करता हूं और होस्टनाम भी निर्दिष्ट करता हूं, इसलिए मैं अपने डिवाइस के ओएस से स्वतंत्र रूप से लिनक्स कमांड निष्पादित करते हुए अपने प्रोजेक्ट का नाम देखने का आनंद लेता हूं। ✌️

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

6

हाँ, वर्चुअलबॉक्स प्रदाता कुछ इस तरह से करते हैं:

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

2
मेरे वैग्रांटफाइल को बदलने और मशीन को पूरी तरह से फाड़ने के vagrant destroyबाद फिर वापस लाने के बाद भी इसे डिफ़ॉल्ट कहा जा रहा है।
केली केली

3
मेरा मानना ​​है कि यह VirtualBox GUI में नाम बदल देता है। "आप वर्चुअलबॉक्स GUI में दिखाई देने वाले नाम को कस्टमाइज़ कर सकते हैं" संदर्भ: लिंक
nikhil

2
आह, मेरी गलती jepp - मुझे लगा कि लेखक को VirtualBox का नाम बदलना है, आंतरिक Vagrant नाम बेशक बहु-VM वातावरण में केवल परिवर्तनशील है।
cmur2

4
बहुत picky cmur2 होने का अर्थ नहीं है, लेकिन केवल एक एकल config.vm.define ब्लॉक प्रदान करके एकल मशीन वातावरण में आंतरिक वैग्रंट नाम को सेटअप करना संभव है।
डेव बर्च

5

आप का मान बदलकर योनि डिफ़ॉल्ट मशीन नाम बदल सकते हैं config.vm.define

यहाँ सरल Vagrantfile जो का उपयोग करता है 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.