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

Michael DeHaan mdehaan at redhat.com
Wed Mar 19 21:16:40 UTC 2008


Michael DeHaan wrote:
> 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)
>>
>>   
>
> _______________________________________________
> et-mgmt-tools mailing list
> et-mgmt-tools at redhat.com
> https://www.redhat.com/mailman/listinfo/et-mgmt-tools

Lee,

Thanks for the patch, this sounds great.

Can you resubmit this to the list formatted with "git-format-patch" so 
we can see what changed and what stayed the same?
If you have problems with git-format-patch, traditional patching and 
"diff -U 10" is also good.

Ideally patches sent as attachments work best, though to avoid mailing 
list problems with mailman, you do need some additional  text in the email.

If you can send in the patch I'll apply it -- and hopefully some other 
heavy VMware users can offer up some testing also.

--Michael





More information about the et-mgmt-tools mailing list