[et-mgmt-tools] Re: [Fwd: Support for VMware Workstation]

Michael DeHaan mdehaan at redhat.com
Wed Mar 19 21:09:29 UTC 2008


Here's an email that bounced off the list...


> ------------------------------------------------------------------------
>
> Subject:
> Support for VMware Workstation
> From:
> Lee Faus <lfaus at redhat.com>
> Date:
> Wed, 19 Mar 2008 12:19:50 -0400
> To:
> et-mgmt-tools at redhat.com
>
> To:
> et-mgmt-tools at redhat.com
>
>
> # Virtualization installation functions.  
> #
> # Copyright 2007-2008 Red Hat, Inc.
> # Michael DeHaan <mdehaan at redhat.com>
> #
> # This software may be freely redistributed under the terms of the GNU
> # general public license.
> #
> # You should have received a copy of the GNU General Public License
> # along with this program; if not, write to the Free Software
> # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
>
> import os, sys, time, stat
> import tempfile
> import random
> from optparse import OptionParser
> import exceptions
> import errno
> import re
> import virtinst
>
> IMAGE_DIR = "/var/lib/vmware/images"
> VMX_DIR = "/var/lib/vmware/vmx"
>
> # FIXME: what to put for guestOS
> # FIXME: are other settings ok?
> TEMPLATE = """
> #!/usr/bin/vmware
> config.version = "8"
> virtualHW.version = "4"
> numvcpus = "2"
> scsi0.present = "TRUE"
> scsi0.virtualDev = "lsilogic"
> scsi0:0.present = "TRUE"
> scsi0:0.writeThrough = "TRUE"
> ide1:0.present = "TRUE"
> ide1:0.deviceType = "cdrom-image"
> Ethernet0.present = "TRUE"
> Ethernet0.AddressType = "generated"
> Ethernet0.virtualDev = "e1000"
> guestOS = "linux"
> priority.grabbed = "normal"
> priority.ungrabbed = "normal"
> powerType.powerOff = "hard"
> powerType.powerOn = "hard"
> powerType.suspend = "hard"
> powerType.reset = "hard"
> floppy0.present = "FALSE"
> scsi0:0.filename = "%(VMDK_IMAGE)s"
> displayName = "%(IMAGE_NAME)s"
> memsize = "%(MEMORY)s"
> """
> #ide1:0.filename = "%(PATH_TO_ISO)s"
>
> class VirtCreateException(exceptions.Exception):
>     pass
>
> def random_mac():
>     """
>     from xend/server/netif.py
>     Generate a random MAC address.
>     Uses OUI 00-16-3E, allocated to
>     Xensource, Inc.  Last 3 fields are random.
>     return: MAC address string
>  
>     FIXME: if VMware has their own range, adapt to that range
>     """
>     mac = [ 0x00, 0x16, 0x3e,
>         random.randint(0x00, 0x7f),
>         random.randint(0x00, 0xff),
>         random.randint(0x00, 0xff) ]
>     return ':'.join(map(lambda x: "%02x" % x, mac))
>
> def make_disk(disksize,image):
>     cmd = "vmware-vdiskmanager -c -a lsilogic -s %sGb -t 0 %s" %
> (disksize, image)
>     print "- %s" % cmd
>     rc = os.system(cmd)
>     if rc != 0:
>        raise VirtCreateException("command failed")
>
> def make_vmx(path,vmdk_image,image_name,mac_address,memory):
>     template_params =  {
>         "VMDK_IMAGE"  : vmdk_image,
>         "IMAGE_NAME"  : image_name,
>         "MAC_ADDRESS" : mac_address.lower(),
>         "MEMORY"      : memory
>     }
>     templated = TEMPLATE % template_params
>     fd = open(path,"w+")
>     fd.write(templated)
>     fd.close()
>
> def register_vmx(vmx_file):
>     cmd = "vmrun start %s" % vmx_file
>     print "- %s" % cmd
>     rc = os.system(cmd)
>     if rc!=0:
>        raise VirtCreateException("vmware registration failed")
>     
> def start_vm(vmx_file):
>     os.chmod(vmx_file,0755)
>     cmd = "vmrun start %s" % vmx_file
>     print "- %s" % cmd
>     rc = os.system(cmd)
>     if rc != 0:
>        raise VirtCreateException("vm start failed")
>
> def start_install(name=None, ram=None, disks=None, mac=None,
>                   uuid=None,  
>                   extra=None,
>                   vcpus=None, 
>                   profile_data=None, bridge=None, arch=None,
> no_gfx=False, fullvirt=True):
>
>     mac = None
>     if not profile_data.has_key("interfaces"):
>         print "- vmware installation requires a system, not a profile"
>         return 1
>     for iname in profile_data["interfaces"]:
>         intf = profile_data["interfaces"][iname]
>         mac = intf["mac_address"]
>     if mac is None:
>         print "- no MAC information available in this record, cannot
> install"
>         return 1
>
>     print "DEBUG: name=%s" % name
>     print "DEBUG: ram=%s" % ram
>     print "DEBUG: mac=%s" % mac
>     print "DEBUG: disks=%s" % disks
>     # starts vmware using PXE.  disk/mem info come from Cobbler
>     # rest of the data comes from PXE which is also intended
>     # to be managed by Cobbler.
>
>     if not os.path.exists(IMAGE_DIR):
>         os.makedirs(IMAGE_DIR)
>     if not os.path.exists(VMX_DIR):
>         os.makedirs(VMX_DIR)
>
>     if len(disks) != 1:
>        raise VirtCreateException("vmware support is limited to 1 virtual
> disk")
>
>     diskname = disks[0][0]
>     disksize = disks[0][1]
>
>     image = "%s/%s" % (IMAGE_DIR, name)
>     print "- saving virt disk image as %s" % image
>     make_disk(disksize,image)
>     vmx = "%s/%s.vmx" % (VMX_DIR, name)
>     print "- saving vmx file as %s" % vmx
>     make_vmx(vmx,image,name,mac,ram)
>     #register_vmx(vmx)
>     start_vm(vmx)
>
>   




More information about the et-mgmt-tools mailing list