2016-10-23 3 views
0

방역함을 사용할 수 있도록 준비하고 있습니다. 그러나 제 방미 호스트는 지원하지 않습니다. 그래서 방역 상자에서 로컬 호스트에 대해 책임감을 실행해야합니다. 나는 쉘 프로비저를 사용하고 있으며, 가능한 한 설치하고 동기화 된 폴더의 플레이 북에 대해 올바른 명령을 실행할 스크립트를 실행하고 있습니다.방부제 구성을 유지하는 방법

이 솔루션은 작동하지만 구성 데이터가 파일 사이에 어지럽 혀서 유지 관리가 어렵습니다. 아래에서 볼 수 있듯이 Vagrantfile과 프로비저닝 스크립트에 모두 하드 코딩 된 게임 북 경로의 중복이 있습니다. 그리고 우리가 알다시피, 복제는 악의 근원입니다. 오히려 모든 구성 문자열을 Vagrantfile 또는 외부 파일에 보관하고 싶습니다. 이게 내 사건에 가능한거야? 명령 행 매개 변수로이 값을 대체 할 수 있으면 좋을 것입니다. 여기

프로비저닝 스크립트

apt-get install -y python-pip 
apt-get install -y git-core 

if [ -z $PLAYBOOK_PATH ]; then 
    echo "PLAYBOOK_PATH not set, using default" 
    PLAYBOOK_PATH=/etc/provisioning/vagrant/playbook.yml 
fi 

if [ -n $PLAYBOOK_PATH ]; then 
    echo "PLAYBOOK_PATH set at $PLAYBOOK_PATH" 

    if [ -f $PLAYBOOK_PATH ]; then 
    echo "PLAYBOOK FOUND, insalling ansible and starting provisioning" 
    pip install ansible 
    pip install markupsafe 

    if (ansible-playbook $PLAYBOOK_PATH); then 
     echo "provisioning OK" 
    else 
     echo "prvosioning failed" 
    fi 

    else 
    echo "PLAYBOOK not found" 
    fi 

else 
    echo "PLAYBOOK_PATH not set" 
fi 

방랑 파일 여기

VAGRANT_API_VERSION = 2 
BOX_IMAGE = "ubuntu/trusty64" 
PROVISIONING_SRC = "./provisioning" 
PROVISIONING_DEST = "/etc/provisioning/vagrant" 

Vagrant.configure(VAGRANT_API_VERSION) do |config| 

    config.vm.box = BOX_IMAGE 
    config.vm.network "private_network", ip: "192.168.22.22" 
    config.vm.network "forwarded_port", guest: 8080, host: 8080 
    config.vm.network "forwarded_port", guest: 8081, host: 8081 
    config.vm.network "forwarded_port", guest: 2222, host: 2223 
    config.vm.network "forwarded_port", guest: 5000, host: 5000 
    config.vm.network "forwarded_port", guest: 50000, host: 50000 
    config.vm.provision :shell, path: "provisioning.sh" 

    config.vm.synced_folder "./provisioning", "/etc/provisioning/vagrant" 

end 

입니다 그리고 마지막으로 여기 폴더

- name: Provision local docker host 
    hosts: localhost 
    become : yes 
    roles: 
    - docker.ubuntu 
    tasks: 
    - name: Add vagrant to docker group 
    become: yes 
    user: name=vagrant groups=docker append=yes 

답변

1

프로비저닝 내부의 각본입니다 당신은 반드시 할 필요가없는 이 모든 것.

방랑은 running ansible on the guest VM aka ansible local

방랑 Ansible 현지 제공자가 게스트 머신에 직접 ansible-작전 을 실행하여 Ansible 플레이 북을 사용 규정에 손님을 수행 할 수 있습니다를 지원합니다.

당신은

VAGRANT_API_VERSION = 2 
BOX_IMAGE = "ubuntu/trusty64" 
PROVISIONING_SRC = "./provisioning" 
PROVISIONING_DEST = "/etc/provisioning/vagrant" 

Vagrant.configure(VAGRANT_API_VERSION) do |config| 

    config.vm.box = BOX_IMAGE 
    config.vm.network "private_network", ip: "192.168.22.22" 
    config.vm.network "forwarded_port", guest: 8080, host: 8080 
    config.vm.network "forwarded_port", guest: 8081, host: 8081 
    config.vm.network "forwarded_port", guest: 2222, host: 2223 
    config.vm.network "forwarded_port", guest: 5000, host: 5000 
    config.vm.network "forwarded_port", guest: 50000, host: 50000 

    config.vm.provision "ansible_local" do |ansible| 
    ansible.playbook = "provisioning/playbook.yml" 
    end 

end 
같은 Vagrantfile을 가질 수있다
관련 문제