이전에 이미 수행 한 경우 VM 프로비저닝을 피하기 위해 쉘 프로비저러를 얻으려고합니다.이미 프로비저닝 된 경우 Vagrant VM을 재 프로비저닝하지 마십시오.
는 다음 Vagrantfile을 생각해 보면 vagrant up minimal
을 실행하면
Vagrant::Config.run do |config|
config.vm.define :minimal do |config|
# Base image
config.vm.box = "lucid32"
config.vm.box_url = "http://files.vagrantup.com/lucid32.box"
config.vm.provision :shell, :inline => "mkdir /tmp/foobar"
end
end
, 그것은 처음에 상자와 규정을 만들 것입니다. 그런 다음 vagrant provision minimal
을 실행하면 상자 재 작성을 시도하지만 실패합니다 (/ tmp/foobar 디렉토리가 이미 있으므로).
과거에 컴퓨터를 프로비저닝했는지 나중에 기억하고 나중에 재 프로비저닝하는 것을 방지 할 수있는 방법이 있습니까?
더 많은 컨텍스트 : vagrant up minimal
을 실행하고 호스트 컴퓨터를 다시 시작한 다음 vagrant up minimal
을 다시 실행하면 상자를 다시 프로 비전하려고 시도하고 실패합니다. VirtualBox가 자주 호스트 시스템에서 커널 패닉을 일으키는 경우가 많습니다.
제공자의 나무 등이 합리적인 것으로 보인다 만들기 :
여기에 두 번 프로비저닝 방지하는 방법의 낮은 이마 예입니다. 반드시 쉬운 것은 아니지만. –
if 문으로 둘러싸인 섹션으로 내 프로비저닝 스크립트를 깰 수 있습니다. 나는 각 섹션의 끝에서 파일을 건 드리면 if 문이 해당 파일이 있는지 확인합니다. 따라서 코드의 각 섹션은 한 번만 실행됩니다. 이것은 매우 적은 복잡성을 추가하며 파일을 확인하고 쓰는 기능이있어서 혼란을 줄일 수 있습니다. 지금까지, 이것은 꽤 잘 작동합니다. 또한 "test -d/path/to/dir || mkdir/path/to/dir"이이 특정 문제를 처리하는 더 좋은 방법 일 수 있음을 제안합니다. 파일에는 -f가 있고 기호 링크에는 -L도 있습니다. "man bash"는 더 많은 것을 가지고 있습니다. – bogeymin
idempotency를 만드는 간단하고 멍청한 방법은 프로비저닝이 끝날 때 (모든 것이 성공했다면)'touch ~/.VM_PROVISIONED'를 터치하고'[-e ~/.VM_PROVISIONED] '를 통해 처음부터 그 존재를 확인하는 것입니다. –