Update Mininet VagrantBox 93/9993/2
authorDave Tucker <djt@redhat.com>
Fri, 15 Aug 2014 22:01:45 +0000 (23:01 +0100)
committerDave Tucker <djt@redhat.com>
Fri, 15 Aug 2014 22:18:53 +0000 (23:18 +0100)
- Use Ubuntu 14.04 LTS
- Upgrade OVS to 2.1.0
- Note: Nasty hack to symlink ovs-controller to /usr/bin
- This can be reverted when it's reintroduced in the debian packages

Change-Id: I4ca320c361f8321a75c674c64bb5ddf37e4d803e
Signed-off-by: Dave Tucker <djt@redhat.com>
Vagrantfile
resources/mininet/topo.py [new file with mode: 0644]
resources/puppet/manifests/mininet.pp
resources/puppet/scripts/bootstrap.sh

index 802662b0bfaae06c7f3fcdfa7d8328d821937ed9..a49014500462493163d003a489d00db5740089b1 100644 (file)
@@ -13,10 +13,10 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
   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"
diff --git a/resources/mininet/topo.py b/resources/mininet/topo.py
new file mode 100644 (file)
index 0000000..ca32894
--- /dev/null
@@ -0,0 +1,60 @@
+#!/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() )}
+
index 98ae327868ac4dcc9de6015d8d3e44e7377a86cc..b0e7922ee1f26de07edf6f6b56654c0c050e693f 100644 (file)
-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']
+}
index 6895b7df6ddb4189bf26bad745f646736ac71d24..b20f50c0d878c0f255c253f631d9af137b0bdb16 100644 (file)
@@ -13,44 +13,44 @@ REPO_DEB_URL="http://apt.puppetlabs.com/puppetlabs-release-${DISTRIB_CODENAME}.d
 # 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