From 80558cd0ed3d691e11daf7d199f8e23df06fcc77 Mon Sep 17 00:00:00 2001 From: "Scott S. Lowe" Date: Wed, 4 May 2016 23:06:44 -0600 Subject: [PATCH] Add JunOS learning environment Add files for a Vagrant-based JunOS learning environment --- junos/Vagrantfile | 66 ++++++++++++++++++++++++++++++++++ junos/Vagrantfile-working | 74 +++++++++++++++++++++++++++++++++++++++ junos/devices.yml | 6 ++++ 3 files changed, 146 insertions(+) create mode 100644 junos/Vagrantfile create mode 100644 junos/Vagrantfile-working create mode 100644 junos/devices.yml diff --git a/junos/Vagrantfile b/junos/Vagrantfile new file mode 100644 index 0000000..048fd5d --- /dev/null +++ b/junos/Vagrantfile @@ -0,0 +1,66 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# Specify Vagrant version, Vagrant API version, and desired clone location +Vagrant.require_version '>= 1.6.0' +VAGRANTFILE_API_VERSION = '2' +ENV['VAGRANT_VMWARE_CLONE_DIRECTORY'] = '~/.vagrant' + +# Require 'yaml' module +require 'yaml' + +# Read YAML file with VM details (box, CPU, and RAM) +devices = YAML.load_file(File.join(File.dirname(__FILE__), 'devices.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 + devices.each do |device| + config.vm.define device['name'] do |dvc| + + # Don't check for box updates + dvc.vm.box_check_update = false + + # Set device hostname + #dvc.vm.hostname = device['name'] + + # Set box to VMware Fusion box by default + dvc.vm.box = device['vmw_box'] + + # Disable default synced folder + #dvc.vm.synced_folder '.', '/vagrant', disabled: true + + # Configure first private (inter-device) network + #if device['net_1_addr'] != nil + # dvc.vm.network 'private_network', ip: device['net_1_addr'] + #end # if device['net_1_addr'] + + # Configure second private (inter-device) network + #if device['net_2_addr'] != nil + # dvc.vm.network 'private_network', ip: device['net_2_addr'] + #end # if device['net_2_addr'] + + # Configure CPU & RAM per settings in devices.yml (Fusion) + # No inclusion of nested virtualization support in this Vagrantfile + # Disable host/guest file system (shared folders) + dvc.vm.provider 'vmware_fusion' do |vmw| + vmw.vmx['memsize'] = device['ram'] + vmw.vmx['numvcpus'] = device['vcpu'] + vmw.functional_hgfs = false + end # dvc.vm.provider vmware_fusion + + # Configure CPU & RAM per settings in devices.yml (VirtualBox) + # Disable host/guest shared folders + dvc.vm.provider 'virtualbox' do |vb, override| + vb.memory = device['ram'] + vb.cpus = device['vcpu'] + vb.functional_vboxsf = false + override.vm.box = device['vb_box'] + end # dvc.vm.provider virtualbox + end # config.vm.define + end # devices.each +end # Vagrant.configure diff --git a/junos/Vagrantfile-working b/junos/Vagrantfile-working new file mode 100644 index 0000000..9f0a723 --- /dev/null +++ b/junos/Vagrantfile-working @@ -0,0 +1,74 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure(2) do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://atlas.hashicorp.com/search. + config.vm.box = "juniper/ffp-12.1X47-D15.4-packetmode" + + # Use Vagrant's default insecure SSH key + config.ssh.insert_key = false + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + # config.vm.synced_folder "../data", "/vagrant_data" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + config.vm.provider "vmware_fusion" do |vmw| + # # Display the VirtualBox GUI when booting the machine + vmw.gui = true + # + # # Customize the amount of memory on the VM: + # vb.memory = "1024" + end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies + # such as FTP and Heroku are also available. See the documentation at + # https://docs.vagrantup.com/v2/push/atlas.html for more information. + # config.push.define "atlas" do |push| + # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" + # end + + # Enable provisioning with a shell script. Additional provisioners such as + # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the + # documentation for more information about their specific syntax and use. + # config.vm.provision "shell", inline: <<-SHELL + # sudo apt-get update + # sudo apt-get install -y apache2 + # SHELL +end diff --git a/junos/devices.yml b/junos/devices.yml new file mode 100644 index 0000000..d6c3f57 --- /dev/null +++ b/junos/devices.yml @@ -0,0 +1,6 @@ +--- +- name: junos-01 + vmw_box: "juniper/ffp-12.1X47-D15.4-packetmode" + vb_box: "juniper/ffp-12.1X47-D15.4-packetmode" + ram: "1024" + vcpu: "1"