Ruby`s stdlib provides an YAML module for data serialization. By using this module, we can create only one Vagrantfile which reads the configuration from YAML files. If you are thinking of build servers – so only YAML files are needed for generating complete environments.
Preconditions
- Vagrant installed
Preparation
# create new directory $ mkdir ~/Projects/Tutorial && cd ~/Projects/Tutorial # create new files $ touch Vagrantfile && touch server-config.yml # list available BaseBoxes (optional) $ vagrant box list # edit Vagrantfile $ vim Vagrantfile # edit server-config.yml $ vim server-config.yml
# -*- mode: ruby -*- require 'yaml' servers = YAML.load_file('server-config.yml') API_VERSION = "2" Vagrant.configure(API_VERSION) do |config| servers.each do |servers| config.vm.define servers["name"] do |machine| machine.vm.box = servers["box"] machine.vm.network :forwarded_port, guest: 22, host: servers["ssh"], id: 'ssh' machine.vm.provider :virtualbox do |vb| vb.name = servers["name"] vb.memory = servers["memory"] vb.cpus = servers["cpus"] end end end end
--- - name: box_centos7_a box: lupin/centos7 ssh: 2221 memory: 1024 cpus: 2 - name: box_centos7_b box: lupin/centos7 ssh: 2222 memory: 1024 cpus: 2
Usage
# start run $ vagrant up # check status $ vagrant status # SSH example $ vagrant ssh [name]