Vagrant:如何使一个VM按名称

时间:2017-02-04 13:19:03

标签: vagrant ubuntu-14.04 vagrantfile vagrant-provision

我有一个用流浪汉建造的环境。基本上是数据库VM和Web服务器VM(都是Ubuntu服务器14.04)。当Web服务器处于配置结束时,我想在数据库VM上运行一些迁移(数据库更改)。问题是,我的django App配置了数据库服务器的名称而不是IP。无论如何我可以让网络服务器虚拟机看到数据库虚拟机而无需明确设置它的IP吗?

这是迄今为止我找到的唯一解决方案:

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

1 个答案:

答案 0 :(得分:0)

您可以使用Landrush插件进行Vagrant:https://github.com/vagrant-landrush/landrush

安装插件,然后在Vagrantfile中为您的实例启用它:

config.landrush.enabled = true

这将允许您的实例通过DNS找到对方,因此不需要静态IP。请注意,这也允许您从主机中查找实例,以便您也可以从主机上运行Ansible。

landrush插件的默认主机名需要vagrant.test的域,这将导致:

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

但您可以使用Vagrantfile中的config.landrush.tld = 'domain'选项进行更改。