2017-02-04 90 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'选项进行更改。

相关问题