2017-05-04 17 views
1

작업중인 Vagrant 및 Chef-Client 프로비저닝을 사용하려고합니다. vagrant up을 사용할 때 고유 한 이름을 생성하고 Chef 서버에 인스턴스를 가입시킨 다음 완료되면 노드를 제거 할 수 있기를 원합니다. 나는 이것을 주로 작동한다. Chef Destroy를 실행하면 Chef Server에서 노드가 자동으로 제거되는 문제에 봉착했습니다. 이름을 캐시에 저장하고 나중에 가져 오는 방법을 찾고 vagrant up의 호스트 이름 구성 만 실행하거나 아직 파악하지 못한 옵션을 찾아야합니다. 다음과 같이Vagrant : 호스트 이름 설정 (Vagrant Up)

내 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-229b-el6.dev.local로 설정되어 vagrant up에서 실행되면하지만 파괴에 vagrant-3a1c-el6.dev.local을 파괴하려고합니다. 논리적 인 일은 그런 일이 일어나지 않도록 각 실행마다 분명히 config.vm.hostname 행을 실행하는 것입니다. 요리사가 나중에 그것을 제거 할 수 있도록 vagrant up에 의해 생성 된 호스트 이름을 유지하려면 어떻게해야합니까?

답변

2

Vagrantfile에서만이 작업을 수행 할 수 있습니다. 내 생각에, Vagrantfile은 모든 유랑인이 실행될 때마다 읽혀 지므로 매번 다른 임의의 이름을 생성합니다. 당신이 할 수있는 일은 생성 된 호스트 네임을 처음 실행했을 때 환경 변수 나 파일에 저장하고 다음 실행시 거기에서 읽은 다음 파일을 지우거나 env 변수를 vagrant destroy에서 설정 해제하는 것입니다.

이처럼 Vagrantfile 자체 내부에 간단한 루비 코드에 의해 수행 할 수 있습니다

# 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

나는 그것이 VM을 생성하고 버추얼 어느 때 방랑에 의해 생성 된'id' 파일에 의존 단지 수 있다고 생각/VM웨어 VM ID 그래서 다른 파일을 유지할 필요가 없습니다. –

+0

오랫동안 방랑제로 일하지 않았습니다. 방랑자가 호스트 이름 자체를 일부 파일에 저장하는 경우 해당 파일을 사용하면 명확한 해결책이됩니다. –

+2

글쎄요, 자세한 내용이 필요합니다 - 아니 호스트 이름 자체를 저장하지 않지만, 방황하는 그것이 만든 VM의 ID ('.vagrant' 폴더에있는 파일의 일부)와 파일을 유지하므로 OP가 vangrant - # {SecureRandom.hex (2)} - el6.dev.local "이 파일이 존재하면 VM이 이미 설정되었고 호스트 이름이 설정되었음을 나타내는 행을 실행하지 않습니다. –