Vagrant '기본'컴퓨터 이름을 변경하는 방법?


235

방랑 상자를 시작할 때 '기본'이라는 이름은 어디에서 유래합니까?

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

이것을 설정하는 방법이 있습니까?


가상화가 활성화되어 있는지 확인하는 것을 잊지 말고 BIOS에서 VT-x를 활성화하십시오. 그건 내 문제였다
레나토 타바레스

답변:


341

여러 옵션이 혼란스러워서 모든 작업을 테스트하여 정확히 무엇을하는지 결정했습니다.

VirtualBox 4.2.16-r86992 및 Vagrant 1.3.3을 사용하고 있습니다.

라는 디렉토리를 nametest만들고 실행했습니다.

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

기본 Vagrantfile을 생성합니다. 그런 다음 VirtualBox GUI를 열어서 만든 상자가 어떤 이름으로 표시되는지 확인할 수있었습니다.

  1. 기본 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을 명시 적으로 정의하면 사용 된 이름이 'default'토큰을 대체합니다. 이 이름 방랑 콘솔에 출력. 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(BONUS)

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

    주석 : VM 내부의 호스트 이름을 설정합니다. 이것은 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 가지 옵션과 그 효과를 알게되었습니다. 이 시점에서 그것이 선호의 문제라고 생각합니까? (Vagrant를 처음 사용하므로 아직 모범 사례에 대해 이야기 할 수 없습니다.)


3
이봐, 나는 관련 문제에 대해 조금 더 연구했다. (1) 이름의 디렉토리는 처음 생성되며 디렉토리 이름을 바꿀 때 변경되지 않습니다. (2) 이름의 타임 스탬프는 처음 생성되며 다시 시작할 때 변경되지 않습니다. (3) 프로젝트는 PROJECT_ROOT / .vagrant / machines / default / virtualbox / id에 저장된 UUID를 통해 VirtualBox VM에 매핑됩니다. 이 UUID는 VirtualBox GUI ( virtualbox.org/ticket/6989 )에는 표시되지 않지만 VBoxManage list vms명령 행에서 사용할 수 있습니다 .
odigity

이전 의견에 사용한 유용한 참고 문헌 중 하나 : stackoverflow.com/questions/9434313/…
odigity

6
그것은 참고로 가치가 define VM있는 동안, 메소드 이름은 방랑의 표준 출력 및 로그에 사용되는 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

이것이 개별 VM에 이름을 할당하는 방식입니다. 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

'default'대신 다른 것을 변경하려면 Vagrantfile에 다음 줄을 추가하십시오.

"vagrant status"를 사용할 때베이스 박스 이름 변경

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

여기서 "tendo"는 기본값 대신 표시되는 이름입니다.


OBJECT_VALUE` : 당신이 설정있는 것은`를 사용하는 다른 답변에 문자열 반대입니다 나는 당신의 대답은 더 정제 된 생각과는 분명하다
안드레스 레온 랑겔

8

VagrantFile 내부 에 정의 하여 이름을 지정하고 호스트 이름 도 지정 하므로 장치의 OS와 독립적으로 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에 나타나는 이름을 사용자 정의 할 수 있습니다"참조 : link
nikhil

2
아, 내 잘못-내 저자는 VirtualBox 이름을 변경하고 싶다고 생각했는데 내부 Vagrant 이름은 물론 다중 VM 환경에서만 변경할 수 있습니다.
cmur2

4
너무 까다 롭다는 의미는 아니지만 단일 config.vm.define 블록 만 제공하면 단일 시스템 환경에서 내부 Vagrant 이름을 설정할 수 있습니다.
Dave Birch

5

의 값을 변경하여 방랑 기본 시스템 이름을 변경할 수 있습니다 config.vm.define.

다음은 getopts 를 사용 하고 이름을 동적으로 변경할 수 있는 간단한 Vagrantfile입니다 .

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

vagrant 파일을 사용하는 사람들이 많은 경우 이름을 동적으로 설정 하려고 할 수 있습니다 . 아래는 호스트 컴퓨터의 사용자 이름을 상자 이름 및 호스트 이름으로 사용하는 방법의 예 입니다 .

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.