How to change Vagrant 'default' machine name?

前端 未结 7 578
有刺的猬
有刺的猬 2020-11-28 00:29

Where does the name \'default\' come from when launching a vagrant box?

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


        
相关标签:
7条回答
  • 2020-11-28 00:50

    In case there are many people using your vagrant file - you might want to set name dynamically. Below is the example how to do it using username from your HOST machine as the name of the box and hostname:

    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
    
    0 讨论(0)
  • 2020-11-28 00:52

    I found the multiple options confusing, so I decided to test all of them to see exactly what they do.

    I'm using VirtualBox 4.2.16-r86992 and Vagrant 1.3.3.

    I created a directory called nametest and ran

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

    to generate a default Vagrantfile. Then I opened the VirtualBox GUI so I could see what names the boxes I create would show up as.

    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 Name: "nametest_default_1386347922"

      Comments: The name defaults to the format DIRECTORY_default_TIMESTAMP.

    2. Define 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 Name: "nametest_foohost_1386347922"

      Comments: If you explicitly define a VM, the name used replaces the token 'default'. This is the name vagrant outputs on the console. Simplifying based on zook's (commenter) input

    3. Set Provider Name

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

      Comments: If you set the name attribute in a provider configuration block, that name will become the entire name displayed in the VirtualBox GUI.

      Combined Example: Define VM -and- Set Provider Name

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

      Comments: If you use both methods at the same time, the value assigned to name in the provider configuration block wins. Simplifying based on zook's (commenter) input

    4. Set hostname (BONUS)

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

      Comments: This sets the hostname inside the VM. This would be the output of hostname command in the VM and also this is what's visible in the prompt like vagrant@<hostname>, here it will look like vagrant@buzbar

    Final Code

        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
    

    So there it is. You now know 3 different options you can set and the effects they have. I guess it's a matter of preference at this point? (I'm new to Vagrant, so I can't speak to best practices yet.)

    0 讨论(0)
  • 2020-11-28 00:55

    Yes, for Virtualbox provider do something like this:

    Vagrant.configure("2") do |config|
        # ...other options...
        config.vm.provider "virtualbox" do |p|
            p.name = "something-else"
        end
    end
    
    0 讨论(0)
  • 2020-11-28 00:58

    If you want to change anything else instead of 'default', then just add these additional lines to your Vagrantfile:

    Change the basebox name, when using "vagrant status"

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

    Where "tendo" will be the name that will appear instead of default

    0 讨论(0)
  • 2020-11-28 01:08

    This is the way I've assigned names to individual VMs. Change YOURNAMEHERE to your desired name.

    Contents of 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
    

    Terminal output:

    $ vagrant status
    Current machine states:
    
    YOURNAMEHERE             not created (virtualbox)
    
    0 讨论(0)
  • 2020-11-28 01:08

    I specify the name by defining inside the VagrantFile and also specify the hostname so i enjoy seeing the name of my project while executing Linux commands independently from my device's OS. ✌️

    config.vm.define "abc"
    config.vm.hostname = "abc"
    
    0 讨论(0)
提交回复
热议问题