2017-02-04 112 views
1

我有一個用vagrant構建的環境。基本上是一個數據庫虛擬機和一個網絡服務器虛擬機(兩個Ubuntu服務器14.04)。當Web服務器在配置結束時,我想在數據庫虛擬機上運行一些遷移(數據庫更改)。問題是,我的django App配置了數據庫服務器的名稱而不是IP。無論如何,我可以使Web服務器虛擬機看到數據庫虛擬機,而不必明確設置它的IP?Vagrant:如何讓一個虛擬機按名稱找到另一個虛擬機

這裏是我到目前爲止發現的唯一解決辦法:

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 
    ... 

回答

0

可以使用搶灘插件流浪:https://github.com/vagrant-landrush/landrush

安裝插件,然後用啓用它在你的Vagrantfile您的實例:

config.landrush.enabled = true 

這將使你的情況下,通過DNS找到對方,因此沒有靜態IP是必要的。注意這也可以讓你從你的主機找到你的實例,這樣你就可以從你的主機上運行Ansible。

爲搶灘插件默認的主機名需要vagrant.test域這會導致:

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

,但你可以在你的Vagrantfile的config.landrush.tld = 'domain'選項進行更改。

相關問題