2017-05-04 14 views
1

私が作業している作業にVagrantとChef-Clientのプロビジョニングを使用しようとしています。 vagrant upを使用してインスタンスをシェフサーバーに参加させた後、ノードを削除すると、一意の名前が生成されます。私はこれが主に働いている。 Chef Destroyを実行すると、シェフサーバーからノードが自動的に削除されます。名前をキャッシュして後で取り出す方法を見つける必要があります。ホスト名の設定をvagrant upで実行するか、まだわかっていないオプションを実行する必要があります。次のようにVagrant:ホスト名を一度設定してください。

私vagrantfileの抜粋です:

Vagrant.configure('2') do |config| 
    config.vm.box = 'centos/6' 
    config.vm.hostname = "vagrant-#{SecureRandom.hex(2)}-el6.dev.local" 
    config.vm.provision 'chef_client' do |chef| 
     chef.chef_server_url = 'https://chef.dev.local/organizations/foo' 
     chef.add_role 'build_vm' 
     chef.node_name = config.vm.hostname 
     chef.delete_node = true 
     chef.delete_client = true 
    end 
end 

これはvagrant upで実行されると、ホスト名がvagrant-229b-el6.dev.localに設定されているが、破壊で、それはvagrant-3a1c-el6.dev.localを破壊しようとします。明らかに、実行ごとにconfig.vm.hostname行が実行されているので、論理的なことはそれが起こらないようにすることです。シェフが後で削除することを知ってもらうために、vagrant upによって作成されたホスト名を保持するには、どうすればよいですか?

答えて

2

これはバゲージファイルでは実行できません。私は、Vagrantfileはすべての変量ランで読み込まれるので、別のランダムな名前が生成されるたびに読み込まれると思います。ただし、最初に実行したときに生成されたホスト名を環境変数またはファイルに保存し、次回の実行時にそこから読み取ってからファイルを削除するか、env変数をvagrant destroyに設定しないでください。

のようにこれはVagrantfile自体、内部のシンプルなRubyのコードで行うことができます。私はそれがVMを作成し、VirtualBoxのあるときにだけ浮浪者によって生成された `id`ファイルに頼ることができると思い

# We save the hostname into '.vagrant_hostname' file. 
VAGRANT_HOSTNAME = '.vagrant_hostname' 
if File.exist? VAGRANT_HOSTNAME 
    hostname = IO.read(VAGRANT_HOSTNAME).strip 
else 
    hostname = "vagrant-#{SecureRandom.hex(2)}-el6.dev.local" 
    IO.write(VAGRANT_HOSTNAME, hostname) 
end 

Vagrant.configure('2') do |config| 
    [...]  
    config.vm.hostname = hostname 
    [...] 
end 

if <the command is "vagrant destroy"> 
    File.delele VAGRANT_HOSTNAME 
end 
+2

/vmware VM Idので、別のファイルを保守する必要はありません。 –

+0

私は長年にわたり汚れを扱っていません。迷惑行為がホスト名自体をいくつかのファイルに保存する場合、そのファイルを使用することは間違いなくより洗練されたソリューションになります。 –

+2

よく、詳細にする必要があります - いいえ、ホスト名自体は保存しませんが、寄付者は作成したVMのID( '.vagrant'フォルダの下にあるファイルの一部)を保持していますので、OPがconfig.vm.hostname = "vagrant - #{SecureRandom.hex(2)} - el6.dev.local"このファイルが存在する場合は、VMが既にセットアップされ、ホスト名が設定されていることを意味します。 –

関連する問題