end
config.vm.define "mininet" do |mininet|
- mininet.vm.box = "saucy64"
- mininet.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-13.10_chef-provisionerless.box"
+ mininet.vm.box = "trusty64"
+ mininet.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-14.10_chef-provisionerless.box"
mininet.vm.provider "vmware_fusion" do |v, override|
- override.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/vmware/opscode_ubuntu-13.10_chef-provisionerless.box"
+ override.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/vmware/opscode_ubuntu-14.10_chef-provisionerless.box"
end
mininet.vm.hostname = "mininet"
mininet.vm.network "private_network", ip: "192.168.50.15"
--- /dev/null
+#!/usr/bin/python
+
+"""Custom L3 topology
+
+4 hosts directly connected to a bridge instance
+
+Refs: https://www.dropbox.com/s/rh6w9nvkuin7tl9/Screenshot%202014-08-14%2017.53.10.png
+https://www.dropbox.com/s/h42ufboknd2i0q1/Screenshot%202014-08-14%2017.52.09.png
+
+host1 -- blue broadcast
+host2, host4 -- green broadcast
+host3 -- external broadcast
+
+Adding the 'topos' dict with a key/value pair to generate our newly defined
+topology enables one to pass in '--topo=mytopo' from the command line.
+"""
+
+from mininet.topo import Topo
+
+class MyTopo( Topo ):
+
+ """L3 topology."""
+
+ def __init__( self ):
+ """Create custom topo."""
+
+ # Initialize topology
+ Topo.__init__( self )
+
+ # Add hosts and switches
+ h1 = self.addHost('h1',
+ ip="10.10.10.2/24",
+ mac="00:00:00:00:00:01",
+ defaultRoute="dev h1-eth0 via 10.10.10.1")
+
+ h2 = self.addHost('h2',
+ ip="10.10.20.2/24",
+ mac="00:00:00:00:00:02",
+ defaultRoute="dev h2-eth0 via 10.10.20.1")
+
+ h3 = self.addHost('h3',
+ ip="172.16.1.2/24",
+ mac="00:00:00:00:00:03",
+ defaultRoute="dev h3-eth0 via 172.16.1.254")
+
+ h4 = self.addHost('h4',
+ ip="10.10.20.4/24",
+ mac="00:00:00:00:00:04",
+ defaultRoute="dev h4-eth0 via 10.10.20.1")
+
+ s1 = self.addSwitch('s1')
+
+ # Add links
+ self.addLink( s1, h1 )
+ self.addLink( s1, h2 )
+ self.addLink( s1, h3 )
+ self.addLink( s1, h4 )
+
+topos = {'l3': ( lambda: MyTopo() )}
+
-vcsrepo { "/home/vagrant/mininet":
+$deps = [ 'build-essential',
+ 'debhelper',
+ 'dkms',
+ 'fakeroot',
+ 'graphviz',
+ 'linux-headers-generic',
+ 'python-all',
+ 'python-qt4',
+ 'python-zopeinterface',
+ 'python-twisted-conch',
+ 'python-twisted-web'
+]
+
+package { $deps:
+ ensure => installed,
+}
+
+vcsrepo { '/home/vagrant/mininet':
+ ensure => present,
provider => git,
- ensure => present,
- user => "vagrant",
- source => "git://github.com/mininet/mininet",
- revision => '2.1.0p1',
- before => Exec['Install Mininet']
+ user => 'vagrant',
+ source => 'git://github.com/mininet/mininet',
+ revision => '2.1.0p2',
+ before => Exec['Install Mininet']
}
-exec { "Install Mininet":
- command => "/bin/bash mininet/util/install.sh -nfv > /dev/null",
- cwd => '/home/vagrant',
- user => 'vagrant',
+exec { 'Install Mininet':
+ command => 'bash mininet/util/install.sh -nf > /dev/null',
+ cwd => '/home/vagrant',
+ user => 'vagrant',
+ path => $::path,
timeout => 0
}
+
+exec {'openvswitch-2.1.2.tar.gz':
+ command => 'wget http://openvswitch.org/releases/openvswitch-2.1.2.tar.gz',
+ cwd => '/home/vagrant',
+ path => $::path,
+ user => 'vagrant'
+}
+
+exec { 'Extract Open vSwitch':
+ command => 'tar -xvf openvswitch-2.1.2.tar.gz',
+ cwd => '/home/vagrant',
+ user => 'vagrant',
+ path => $::path,
+ timeout => 0,
+ require => Exec['openvswitch-2.1.2.tar.gz']
+}
+
+exec { 'Compile Open vSwitch':
+ command => 'fakeroot debian/rules binary',
+ cwd => '/home/vagrant/openvswitch-2.1.2',
+ user => 'root',
+ path => $::path,
+ timeout => 0,
+ require => [Exec['Extract Open vSwitch'], Package[$deps]]
+}
+
+package { 'openvswitch-common':
+ ensure => installed,
+ provider => dpkg,
+ source => '/home/vagrant/openvswitch-common_2.1.2-1_amd64.deb',
+ require => Exec['Compile Open vSwitch']
+}
+
+package { 'openvswitch-switch':
+ ensure => installed,
+ provider => dpkg,
+ source => '/home/vagrant/openvswitch-switch_2.1.2-1_amd64.deb',
+ require => Package['openvswitch-common']
+}
+
+package { 'openvswitch-datapath-dkms':
+ ensure => installed,
+ provider => dpkg,
+ source => '/home/vagrant/openvswitch-datapath-dkms_2.1.2-1_all.deb',
+ require => Package['openvswitch-switch']
+}
+
+package { 'openvswitch-pki':
+ ensure => installed,
+ provider => dpkg,
+ source => '/home/vagrant/openvswitch-pki_2.1.2-1_all.deb',
+ require => Package['openvswitch-datapath-dkms']
+}
+
+exec { 'Compile Test Controller':
+ command => 'sh boot.sh && sh configure && make',
+ cwd => '/home/vagrant/openvswitch-2.1.2',
+ path => $::path,
+ user => 'root',
+ require => [Exec['Compile Open vSwitch'], Package[$deps]]
+}
+
+exec { 'Link Test Controller':
+ command => 'ln -s /home/vagrant/openvswitch-2.1.2/tests/test-controller /usr/bin/ovs-controller',
+ cwd => '/home/vagrant/openvswitch-2.1.2',
+ path => $::path,
+ user => 'root',
+ require => Exec['Compile Test Controller']
+}
# NO TUNABLES BELOW THIS POINT
#--------------------------------------------------------------------
if [ "$(id -u)" != "0" ]; then
- echo "This script must be run as root." >&2
- exit 1
- fi
-
- if which puppet > /dev/null 2>&1; then
- echo "Puppet is already installed."
- exit 0
- fi
-
- # Do the initial apt-get update
- echo "Initial apt-get update..."
- apt-get update >/dev/null
-
- # Install wget if we have to (some older Ubuntu versions)
- echo "Installing wget..."
- apt-get install -y wget >/dev/null
-
- # Install the PuppetLabs repo
- echo "Configuring PuppetLabs repo..."
- repo_deb_path=$(mktemp)
- wget --output-document="${repo_deb_path}" "${REPO_DEB_URL}" 2>/dev/null
- dpkg -i "${repo_deb_path}" >/dev/null
- apt-get update >/dev/null
-
- # Install Puppet
- echo "Installing Puppet..."
- apt-get install -y puppet >/dev/null
-
- echo "Puppet installed!"
-
- # Install RubyGems for the provider
- echo "Installing RubyGems..."
- apt-get install -y rubygems >/dev/null
- gem install --no-ri --no-rdoc rubygems-update
- update_rubygems >/dev/null
-
- # Installing Puppet Modules
- puppet module install puppetlabs/vcsrepo
- puppet module install puppetlabs/stdlib
-
-
+ echo "This script must be run as root." >&2
+ exit 1
+fi
+
+if which puppet > /dev/null 2>&1 -a apt-cache policy | grep --quiet apt.puppetlabs.com; then
+ echo "Puppet is already installed."
+ exit 0
+fi
+
+# Do the initial apt-get update
+echo "Initial apt-get update..."
+apt-get update >/dev/null
+
+# Install wget if we have to (some older Ubuntu versions)
+echo "Installing wget..."
+apt-get install -y wget >/dev/null
+
+# Install the PuppetLabs repo
+echo "Configuring PuppetLabs repo..."
+repo_deb_path=$(mktemp)
+wget --output-document="${repo_deb_path}" "${REPO_DEB_URL}" 2>/dev/null
+dpkg -i "${repo_deb_path}" >/dev/null
+apt-get update >/dev/null
+
+# Install Puppet
+echo "Installing Puppet..."
+DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install puppet >/dev/null
+
+echo "Puppet installed!"
+
+# Install RubyGems for the provider
+echo "Installing RubyGems..."
+if [ $DISTRIB_CODENAME != "trusty" ]; then
+ apt-get install -y rubygems >/dev/null
+fi
+gem install --no-ri --no-rdoc rubygems-update
+update_rubygems >/dev/null
+
+# Installing Puppet Modules
+puppet module install puppetlabs/vcsrepo
+puppet module install puppetlabs/stdlib