Override Vagrant configuration settings locally (per-dev)
The Vagrantfile
is just Ruby, so YAML is another option.
For example, in the Vagrantfile
I do this:
# -*- mode: ruby -*-# vi: set ft=ruby :require 'yaml'settings = YAML.load_file 'vagrant.yml'db_ip_address = settings['db']['ip_address']api_ip_address = settings['api']['ip_address']Vagrant.configure("2") do |config| config.vm.box = "ffuenf/ubuntu-13.10-server-amd64" config.vm.box_url = "https://vagrantcloud.com/ffuenf/ubuntu-13.10-server-amd64/version/4/provider/virtualbox.box" config.vm.define "db" do |db| db.vm.synced_folder settings['db']['artifacts_dir']['host'], settings['db']['artifacts_dir']['guest'] db.vm.network "private_network", ip: db_ip_address ... other stuff ... end config.vm.define "api" do |api| api.vm.synced_folder settings['api']['artifacts_dir']['host'], settings['api']['artifacts_dir']['guest'] api.vm.network "private_network", ip: api_ip_address api.vm.network "forwarded_port", guest: settings['api']['forwarded_port']['guest'], host: settings['api']['forwarded_port']['host'] endend
Then I have a vagrant.yml
file (I just made up the name; you can use whatever name you like) for the developer-specific configuration:
db: ip_address: 192.168.4.14 artifacts_dir: host: /Users/willie/myapp/db-scripts guest: /opt/myapp/dbapi: ip_address: 192.168.4.15 forwarded_port: host: 9080 guest: 8080 artifacts_dir: host: /Users/willie/myapp/artifacts guest: /opt/myapp/api
I would suggest using environment variables to dynamically change the behavior of the Vagrantfile
without editing the file itself.
To give a real world example, here's how you could use an Ubuntu base box by default but have an environment variable define an alternative Linux distribution:
if ENV['OPERATINGSYSTEM'] if ENV['OPERATINGSYSTEM'].downcase == 'redhat' os_name = 'centos' config.vm.box = 'centos' config.vm.box_url = 'https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box' else raise(Exception, "undefined operatingsystem: #{ENV['OPERATINGSYSTEM']}") endelse os_name = 'precise64' config.vm.box = 'precise64' config.vm.box_url = 'http://files.vagrantup.com/precise64.box'end
This example comes from https://github.com/puppetlabs/puppetlabs-openstack_dev_env
If you are prepared to define settings that are applied to all your vagrant boxes it's worth noting that, "Vagrant actually loads a series of Vagrantfiles, merging the settings as it goes." (ref https://docs.vagrantup.com/v2/vagrantfile/)
So I have the following defined in ~/.vagrant.d/Vagrantfile
to increase the amount of RAM for my Vagrant boxes:
Vagrant.configure(2) do |config| config.vm.provider "virtualbox" do |vb| vb.memory = 2048 endend