From 62e173886ad2df042a8f6cadd34706ee5871391e Mon Sep 17 00:00:00 2001 From: "Scott S. Lowe" Date: Sat, 26 Nov 2016 01:43:54 -0700 Subject: [PATCH] Add "complex" JSON environment Add examples of working with more "complex" JSON environments. Signed-off-by: Scott S. Lowe --- complex-json/README.md | 5 +++ complex-json/Vagrantfile | 68 ++++++++++++++++++++++++++++++++++++++ complex-json/machines.json | 52 +++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+) create mode 100644 complex-json/README.md create mode 100644 complex-json/Vagrantfile create mode 100644 complex-json/machines.json diff --git a/complex-json/README.md b/complex-json/README.md new file mode 100644 index 0000000..4f41f90 --- /dev/null +++ b/complex-json/README.md @@ -0,0 +1,5 @@ +# Complex JSON Examples + +These files exist to illustrate how configuration data for [Vagrant](http://www.vagrantup.com/) can be stored in a "complex" external JSON data file. It's "complex" only in the fact that the data is stored as more than just a simple list of values. + +Enjoy! diff --git a/complex-json/Vagrantfile b/complex-json/Vagrantfile new file mode 100644 index 0000000..15e0beb --- /dev/null +++ b/complex-json/Vagrantfile @@ -0,0 +1,68 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# Specify minimum Vagrant version and Vagrant API version +Vagrant.require_version '>= 1.6.0' +VAGRANTFILE_API_VERSION = '2' + +# Require 'json' module +require 'json' + +# Read JSON file with VM details (name, box, RAM, CPU, and IP address) +machines = JSON.parse(File.read(File.join(File.dirname(__FILE__), 'machines.json'))) + +# Create and configure the VMs +Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| + + # Always use Vagrant's default insecure key + config.ssh.insert_key = false + + # Iterate through entries in JSON file to create VMs + machines.each do |machine| + + # Configure the VMs per details in machines.yml + config.vm.define machine['name'] do |srv| + + # Don't check for box updates + srv.vm.box_check_update = false + + # Specify the hostname of the VM + srv.vm.hostname = machine['name'] + + # Specify the Vagrant box to use (use VMware box by default) + srv.vm.box = machine['box']['vmw'] + + # Configure default synced folder (disable by default) + if machine['sync_disabled'] != nil + srv.vm.synced_folder '.', '/vagrant', disabled: machine['sync_disabled'] + else + srv.vm.synced_folder '.', '/vagrant', disabled: true + end #if machine['sync_disabled'] + + # Iterate through networks as per settings in machines.yml + machine['nics'].each do |net| + if net['ip_addr'] == 'dhcp' + srv.vm.network net['type'], type: net['ip_addr'] + else + srv.vm.network net['type'], ip: net['ip_addr'] + end # if net['ip_addr'] + end # machine['nics'].each + + # Configure CPU & RAM per settings in machines.yml (Fusion) + srv.vm.provider 'vmware_fusion' do |vmw| + vmw.vmx['memsize'] = machine['ram'] + vmw.vmx['numvcpus'] = machine['vcpu'] + if machine['nested'] == true + vmw.vmx['vhv.enable'] = 'TRUE' + end #if machine['nested'] + end # srv.vm.provider 'vmware_fusion' + + # Configure CPU & RAM per settings in machines.yml (VirtualBox) + srv.vm.provider 'virtualbox' do |vb, override| + vb.memory = machine['ram'] + vb.cpus = machine['vcpu'] + override.vm.box = machine['box']['vb'] + end # srv.vm.provider 'virtualbox' + end # config.vm.define + end # machines.each +end # Vagrant.configure diff --git a/complex-json/machines.json b/complex-json/machines.json new file mode 100644 index 0000000..f06cd00 --- /dev/null +++ b/complex-json/machines.json @@ -0,0 +1,52 @@ +[ + { + "name": "jessie", + "box": { + "vmw": "bento/debian-8.6", + "vb": "debian/jessie64" + }, + "ram": "512", + "vcpu": "1", + "nics": [ + { + "type": "private_network", + "ip_addr": "192.168.100.101" + } + ], + "nested": false + }, + + { + "name": "trusty", + "box": { + "vmw": "bento/ubuntu-14.04", + "vb": "ubuntu/trusty64" + }, + "ram": "512", + "vcpu": "1", + "nics": [ + { + "type": "private_network", + "ip_addr": "192.168.100.102" + } + ], + "nested": false + }, + + { + "name": "precise", + "box": { + "vmw": "bento/ubuntu-12.04", + "vb": "ubuntu/precise64" + }, + "ram": "512", + "vcpu": "1", + "nics": [ + { + "type": "private_network", + "ip_addr": "192.168.100.103" + } + ], + "nested": false + } +]