diff --git a/onos-build-vm.py b/onos-build-vm.py
new file mode 100755
index 0000000..21e86d7
--- /dev/null
+++ b/onos-build-vm.py
@@ -0,0 +1,75 @@
+#!/usr/bin/python
+
+import os
+import sys
+import re
+import argparse
+from stat import ST_MODE, ST_SIZE
+from subprocess import check_output
+
+# Add the Mininet build script directory to the path, so we can import it
+#TODO do a better job finding Mininet
+path = os.path.join( '~', 'mininet', 'util', 'vm' )
+path = os.path.expanduser( path )
+if os.path.isdir( path ):
+    sys.path.append( path )
+else:
+    print 'Cannot find Mininet build script. Exiting...'
+    sys.exit( 1 )
+
+# Import required functions from the Mininet build script
+from build import bootAndRun, Prompt, OVFOSNameID, generateOVF, log, build, run
+
+def installONOS( vm, prompt=Prompt ):
+    # start with sendline
+    #TODO consider resizing the HDD
+    url = 'https://gerrit.onlab.us/gitweb?p=ONOS-VM.git;a=blob_plain;hb=refs/heads/master;f=vm-setup.sh'
+    vm.sendline( 'wget -O - %s | bash' % url )
+    # end with expect prompt
+    vm.expect( prompt )
+
+def vmdk2size( vmdk ):
+    "Return virtual disk size (in bytes) of vmdk image"
+    output = check_output( [ 'file', vmdk ] )
+    assert 'disk image' in output
+    return os.stat( vmdk )[ ST_SIZE ]
+
+def buildONOS( image, out, flavor='raring64server', installMemory=1024, ovfMemory=2048  ):
+    if not image:
+        # build VM from flavor
+        #build( flavor )
+        pass
+
+    bootAndRun( image, runFunction=installONOS, memory=installMemory, outputFile=out )
+
+    size = vmdk2size( out + '.vmdk' ) # get vmdk size
+    ovfname = out
+    osname, osid = OVFOSNameID( flavor )
+    print osname, osid
+
+    ovf = generateOVF( name=ovfname, osname=osname, osid=osid,
+                       diskname=out+'.vmdk', disksize=size, mem=2048, cpus=4,
+                       vmname='ONOS-VM', vminfo='An ONOS VM' )
+    log( '* Generated OVF descriptor file', ovf )
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser( description='ONOS VM build script' )
+    parser.add_argument( '-i', '--image', metavar='image', required=True,
+                         help='Build from an existing VM image' )
+    parser.add_argument( '-f', '--flavor', default='raring64server',
+                         help='VM flavor to build (e.g. raring64server)' )
+    parser.add_argument( 'scripts', nargs='*',
+                         help='VM flavor(s) to build (e.g. raring64server)' )
+    parser.add_argument( '-z', '--zip', action='store_true',
+                         help='archive .ovf and .vmdk into .zip file' )
+    parser.add_argument( '-o', '--out', required=True,
+                         help='output file for test image (vmdk)' )
+    args = parser.parse_args()
+
+    print args
+
+    buildONOS( args.image, args.out )
+
+    if args.zip:
+        log( '* Generating .zip file' )
+        run( 'zip %s-ovf.zip %s %s' % ( args.out, args.out + '.ovf', args.out + '.vmdk' ) )
