2017-02-04 2 views
1

Ich habe eine Umgebung mit Vagrant gebaut. Grundsätzlich eine Datenbank-VM und eine Webserver-VM (beide Ubuntu-Server 14.04). Wenn der Webserver am Ende der Bereitstellung ist, möchte ich einige Migrationen (Datenbankänderungen) auf der Datenbank-VM ausführen. Das Problem ist, dass meine Django-App mit einem Namen für den Datenbankserver anstatt einer IP konfiguriert ist. Ist es irgendwie möglich, dass ich die Webserver-VM die VM der Datenbank sehen lassen kann, ohne dass ich explizit ihre IP-Adresse festlegen muss?Vagrant: wie man eine VM eine andere VM nach Namen finden

Hier ist die einzige Lösung, die ich bisher gefunden habe:

Vagrantfile

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure(2) do |config| 
    config.vm.define "db" do |db| 
    db.vm.box = "ubuntu/trusty64" 
    db.vm.hostname = 'db' 
    # Notice the IP is fixed. I rather not want to do it this way 
    db.vm.network "public_network", ip: "192.168.1.147", bridge: "wlan0" 

    db.vm.provider "virtualbox" do |vb| 
     vb.memory = "512" 
     vb.cpus = 1 
    end 

    config.vm.provision "ansible" do |ansible| 
     ansible.playbook = "playbook_db.yml" 
    end 
    end 

    config.vm.define "web" do |web| 
    web.vm.box = "ubuntu/trusty64" 
    web.vm.hostname = 'web' 
    web.vm.network "forwarded_port", guest: 8000, host: 8000 

    web.vm.provider "virtualbox" do |vb| 
     vb.memory = "512" 
     vb.cpus = 1 
    end 

    config.vm.provision "ansible" do |ansible| 
     ansible.playbook = "playbook_web.yml" 
    end 
    end 

end 

playbook_web.yml

--- 
- hosts: web 
    sudo: yes 
    tasks: 
    ... 
    - name: Adding DNS resolution for 'database' ... 
    shell: sed -i '1 i\192.168.1.147 database' /etc/hosts 
    ... 

Antwort

0

Sie die Landrush-Plugin verwenden können, für Vagrant : https://github.com/vagrant-landrush/landrush.

das Plugin installieren und dann für Ihre Instanzen mit Ihrer Vagrantfile aktivieren:

config.landrush.enabled = true 

Dies ermöglicht Ihre Instanzen einander über DNS und somit keine statische IP ist notwendig zu finden. Beachten Sie, dass Sie damit auch Ihre Instanzen von Ihrem Host-Computer aus finden können, damit Sie Ansible auch von Ihrem Host-Computer aus ausführen können.

Der Standardhostname für die Landrush-Plugin erfordert eine Domäne von vagrant.test, die in einer Folge hätte:

db.vm.hostname = 'db.vagrant.test' 

aber Sie können dies ändern, mit der config.landrush.tld = 'domain' Option in Ihrem Vagrantfile.

Verwandte Themen