2017-09-28 10 views
0

Vagrant 멀티 머신 기능은 매우 멋지다. 그러나 나를 귀찮게하는 것은 바로 "부모"Vagrantfile과 "부모"Vagrantfile 사이에 구성 옵션을 공유하는 좋은 방법이 아닌 것 같다. 아이들 "Vagrantfiles. 부모와 자녀 사이에 구성 옵션을 효율적으로 유지 관리 할 수있는 방법이 있습니까? 예를 들어보다 명확하게 할 수 있습니다.다른 Vagrantfile에서 Vagrantfile 구성을로드 할 수 있습니까?

API, 웹 및 Worker의 3 가지 앱/​​서비스로 구성된 플랫폼이 있다고 가정 해 보겠습니다.

는의 다음의 디렉토리 구조를 가정하자 :

Vagrant.configure("2") do |config| 
    config.vm.box = "debian/jessie64" 
end 

아마도 웹과 노동자 Vagrantfiles이 유사 :

/some_platform 
    /api 
    # app code... 
    Vagrantfile 
    /web 
    # app code... 
    Vagrantfile 
    /worker 
    # app code... 
    Vagrantfile 
    Vagrantfile 

이의이 /some_platform/api/Vagrantfile의 모습을 가정 해 봅시다.

처럼

지금, 이러한 VM을 조정하고 /some_platform/Vagrantfile 나는 방랑에 의존하는 멀티 기계의 경이로움을 사용하여 보이는 :이 예는 인위적인 실감

Vagrant.configure("2") do |config| 
    config.vm.define "web" do |api| 
    api.vm.box = "debian/jessie64" 
    end 

    config.vm.define "web" do |web| 
    web.vm.box = "debian/jessie64" 
    end 

    config.vm.define "web" do |worker| 
    worker.vm.box = "debian/jessie64" 
    end 
end 

, 그러나 당신이 더 일단 방법을 쉽게 알 수 그리고 더 복잡한 설정 선언은 두 곳에서 설정을 복제하는 것이 짜증나고 위험합니다.

"왜 각 프로젝트마다 Vagrantfile이 있습니까?"라는 궁금증이 생길 수 있습니다. 그렇게하면 서버가 실행되는 서버가 어떻게 설정되어야하는지에 대한 진실의 단일 소스가 제공됩니다. 당신이 사용할 수있는 프로 그래머가 있다는 것을 나는 깨닫는다. (그리고 나는 그것들을 사용할 것이다.)하지만 당신은 여전히 ​​그 밖의 다른 것들을 선언해야한다. 나는 DRY를 유지하여 Multi- 머신을 사용하거나 단일 응용 프로그램에서 작업하고 VM/서버 설정을 변경할 수 있습니다.

내가 좋아할만한 것은 다른 Vagrantfiles를 "상위"파일로 병합하는 방법입니다.

그럴 수 있습니까? 또는 나는 시험에 미쳤다? 이것을 달성하는 방법에 대한 영리한 아이디어? 이 문제를 해결하기 위해 yaml 파일과 PORO를 망연판에 썼지 만, 해킹 중 아무 것도 매우 만족스럽지 않습니다.

답변

0

이 2 일 당신이 볼 수있는 (아마도 더 많은,하지만 그 두 내 마음에 온다)는 당신이 다른 파일의 내용을 읽을 수있는 방법의 예는, Vagrantfile은 그냥 How to template Vagrantfile using Ruby?에서

  1. 보기 루비 스크립트를 사용하면 루비의 모든 기능을 사용할 수 있습니다.

  2. 방랑로드 및 병합의 개념이, 당신이 뭔가 당신이 방랑 명령, 당신은 당신의 ~/.vagrant.d/ 폴더 아래에 Vagrantfile을 만들 수를 실행 언제을하고 싶어 그렇다면 from doc을보고 항상 실행됩니다

하나의 단점 (또는 적어도 관심을 지불 할) 다음 Vagrantfile이 (... 최대, 상태, 정지를) 방랑 명령이 실행 (모든 시간) 평가 루비 스크립트입니다