From be92f4dd567fce7f319bc57780481b2e0d73b1eb Mon Sep 17 00:00:00 2001 From: "Scott S. Lowe" Date: Mon, 3 Oct 2016 21:32:20 -0600 Subject: [PATCH] Add examples of working with "complex" YAML files Add examples of using data encoded in more "complex" YAML files within a Vagrant environment --- complex-yaml/README.md | 3 ++ complex-yaml/Vagrantfile | 65 +++++++++++++++++++++++++++++++++++++++ complex-yaml/machines.yml | 12 ++++++++ 3 files changed, 80 insertions(+) create mode 100644 complex-yaml/README.md create mode 100644 complex-yaml/Vagrantfile create mode 100644 complex-yaml/machines.yml diff --git a/complex-yaml/README.md b/complex-yaml/README.md new file mode 100644 index 0000000..6564c0b --- /dev/null +++ b/complex-yaml/README.md @@ -0,0 +1,3 @@ +# Complex YAML Examples + +These files only exist to show some examples of "complex" YAML data files, and how the data in them can be referenced by Vagrant in a `Vagrantfile`. The examples include "nested" data files and multiple loops based on data in YAML files. diff --git a/complex-yaml/Vagrantfile b/complex-yaml/Vagrantfile new file mode 100644 index 0000000..6745134 --- /dev/null +++ b/complex-yaml/Vagrantfile @@ -0,0 +1,65 @@ +# -*- 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 'yaml' module +require 'yaml' + +# Read YAML file with VM details (box, CPU, RAM, IP addresses) +# Edit machines.yml to change VM configuration details +machines = YAML.load_file(File.join(File.dirname(__FILE__), 'machines.yml')) + +# 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 YAML 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| + srv.vm.network net['type'], ip: 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-yaml/machines.yml b/complex-yaml/machines.yml new file mode 100644 index 0000000..5810792 --- /dev/null +++ b/complex-yaml/machines.yml @@ -0,0 +1,12 @@ +--- +- box: + vmw: slowe/debian-81-x64 + vb: debian/jessie64 + name: jessie + nics: + - type: "private_network" + ip_addr: "192.168.100.101" + - type: "public_network" + ip_addr: "192.168.1.198" + ram: "1024" + vcpu: "1"