From dfd79bde56ed527103801f08093f36dd88d0a17f Mon Sep 17 00:00:00 2001 From: Bob Lantz Date: Wed, 15 Jan 2014 10:47:06 -0800 Subject: [PATCH] Add OperatingSystemSection to OVF template should facilitate importing 64-bit image --- util/vm/build.py | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/util/vm/build.py b/util/vm/build.py index a5f46b3..5470544 100755 --- a/util/vm/build.py +++ b/util/vm/build.py @@ -91,6 +91,18 @@ def OSVersion( flavor ): urlbase = path.basename( isoURLs.get( flavor, 'unknown' ) ) return path.splitext( urlbase )[ 0 ] +def OVFOSNameID( flavor ): + "Return OVF-specified ( OS Name, ID ) for flavor" + version = OSVersion( flavor ) + arch = archFor( flavor ) + if 'ubuntu' in version: + map = { 'i386': ( 'Ubuntu', 93 ), + 'x86_64': ( 'Ubuntu 64-bit', 94 ) } + else: + map = { 'i386': ( 'Linux', 36 ), + 'x86_64': ( 'Linux 64-bit', 101 ) } + osname, osid = map[ arch ] + return osname, osid LogStartTime = time() LogFile = None @@ -588,11 +600,11 @@ OVFTemplate = """ xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - + Virtual disk information - @@ -603,8 +615,12 @@ OVFTemplate = """ -A Mininet Virtual Machine (%s) +A Mininet Virtual Machine (%(name)s) mininet-vm + +The kind of installed guest operating system +%(osname)s + Virtual hardware requirements @@ -618,10 +634,10 @@ OVFTemplate = """ byte * 2^20 Memory Size -%dMB of memory +%(mem)dMB of memory 2 4 -%d +%(mem)d 0 @@ -664,16 +680,20 @@ OVFTemplate = """ """ -def generateOVF( name, diskname, disksize, mem=1024 ): +def generateOVF( name, osname, osid, diskname, disksize, mem=1024 ): """Generate (and return) OVF file "name.ovf" name: root name of OVF file to generate + osname: OS name for OVF (Ubuntu | Ubuntu 64-bit) + osid: OS ID for OVF (93 | 94 ) diskname: name of disk file disksize: size of virtual disk in bytes mem: VM memory size in MB""" ovf = name + '.ovf' filesize = stat( diskname )[ ST_SIZE ] - # OVFTemplate uses the memory size twice in a row - xmltext = OVFTemplate % ( diskname, filesize, disksize, name, mem, mem ) + params = dict( osname=osname, osid=osid, diskname=diskname, + filesize=filesize, disksize=disksize, name=name, + mem=mem ) + xmltext = OVFTemplate % params with open( ovf, 'w+' ) as f: f.write( xmltext ) return ovf @@ -723,13 +743,16 @@ def build( flavor='raring32server', tests=None, pre='', post='', memory=1024 ): vm = boot( volume, kernel, initrd, logfile, memory=memory ) version = interact( vm, tests=tests, pre=pre, post=post ) size = qcow2size( volume ) - vmdk = convert( volume, basename='mininet-vm-' + archFor( flavor ) ) + arch = archFor( flavor ) + vmdk = convert( volume, basename='mininet-vm-' + arch ) if not SaveQCOW2: log( '* Removing qcow2 volume', volume ) os.remove( volume ) log( '* Converted VM image stored as', abspath( vmdk ) ) ovfname = 'mininet-%s-%s-%s' % ( version, ovfdate, OSVersion( flavor ) ) - ovf = generateOVF( diskname=vmdk, disksize=size, name=ovfname ) + osname, osid = OVFOSNameID( flavor ) + ovf = generateOVF( name=ovfname, osname=osname, osid=osid, + diskname=vmdk, disksize=size ) log( '* Generated OVF descriptor file', ovf ) if Zip: log( '* Generating .zip file' )