Vagrantの「デフォルト」マシン名を変更するにはどうすればよいですか?


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を生成します。次に、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を明示的に定義する場合、使用される名前がトークン「デフォルト」を置き換えます。これは、コンソールのvagrant出力の名前です。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内のホスト名を設定します。これは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、コマンドラインで使用できます。
オディティー

:私は以前のコメントに使用する便利な参考文献の一つstackoverflow.com/questions/9434313/...
odigity

6
define VMメソッド名はVagrant stdoutとログでset provider name使用され、名前はプロバイダーでボックスを管理するために使用されることに注意してください。したがって、両方とも関連しています。
Redsandro 2014

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
ラドゥ

17

「デフォルト」以外の何かを変更したい場合は、次の行をVagrantfileに追加するだけです。

「vagrant status」を使用する場合、ベースボックス名を変更します

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

「tendo」はデフォルトの代わりに表示される名前になります


あなたの答えはより洗練されていると思います。設定しているのは、 `:OBJECT_VALUE`を使用する他の答えとは逆の文字列であることは明らかです
Andres Leon Rangel

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、それを元に戻した後も、それをデフォルトと呼んでいます。
カイルケリー2013

3
これにより、VirtualBox GUIの名前が変更されると思います。「VirtualBox GUIに表示される名前をカスタマイズできます」リファレンス:リンク
nikhil

2
ああ、私のせいだ-私は作者がVirtualBox名を変更したいと思った、内部Vagrant名はもちろんマルチVM環境でのみ変更可能であると思った。
cmur2 2013

4
厳格すぎるcmur2であるという意味ではありませんが、単一のconfig.vm.defineブロックのみを提供するだけで、単一のマシン環境で内部Vagrant名をセットアップすることが可能です。
デイブ・バーチ

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.