1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 from VMBuilder import register_hypervisor, Hypervisor
21 import VMBuilder
22 import VMBuilder.hypervisor
23 import os
24 import os.path
25 import stat
26 from shutil import move
27 from math import floor
28
30 filetype = 'vmdk'
31 preferred_storage = VMBuilder.hypervisor.STORAGE_DISK_IMAGE
32 needs_bootloader = True
33 vmxtemplate = 'vmware'
34
36 self.imgs = []
37 for disk in self.vm.disks:
38 img_path = disk.convert(self.vm.destdir, self.filetype)
39 self.imgs.append(img_path)
40 self.vm.result_files.append(img_path)
41
44
46 vmdesc = VMBuilder.util.render_template('vmware', self.vm, vmxtemplate, { 'disks' : self.disks(), 'vmhwversion' : self.vmhwversion, 'cpu' : self.vm.cpu, 'mem' : self.vm.mem, 'hostname' : self.vm.hostname, 'arch' : self.vm.arch, 'guestos' : (self.vm.arch == 'amd64' and 'ubuntu-64' or 'ubuntu') })
47
48 vmx = '%s/%s.vmx' % (self.vm.destdir, self.vm.hostname)
49 fp = open(vmx, 'w')
50 fp.write(vmdesc)
51 fp.close()
52 os.chmod(vmx, stat.S_IRWXU | stat.S_IRWXU | stat.S_IROTH | stat.S_IXOTH)
53 self.vm.result_files.append(vmx)
54
59
64
66 name = 'VMWare ESXi'
67 arg = 'esxi'
68 vmhwversion = 4
69 adaptertype = 'lsilogic'
70 vmxtemplate = 'esxi.vmx'
71
72 vmdks = []
73
75 self.imgs = []
76 for disk in self.vm.disks:
77
78
79 diskfilename = os.path.basename(disk.filename)
80 if '.' in diskfilename:
81 diskfilename = diskfilename[:diskfilename.rindex('.')]
82
83 flat = '%s/%s-flat.vmdk' % (self.vm.destdir, diskfilename)
84 self.vmdks.append(diskfilename)
85
86 move(disk.filename, flat)
87
88 self.vm.result_files.append(flat)
89
90
91 sectorTotal = disk.size * 2048
92 sector = int(floor(sectorTotal / 16065))
93
94 diskdescriptor = VMBuilder.util.render_template('vmware', self.vm, 'flat.vmdk', { 'adaptertype' : self.adaptertype, 'sectors' : sector, 'diskname' : os.path.basename(flat), 'disksize' : sectorTotal })
95 vmdk = '%s/%s.vmdk' % (self.vm.destdir, diskfilename)
96
97 fp = open(vmdk, 'w')
98 fp.write(diskdescriptor)
99 fp.close()
100 os.chmod(vmdk, stat.S_IRWXU | stat.S_IRWXU | stat.S_IROTH | stat.S_IXOTH)
101
102 self.vm.result_files.append(vmdk)
103
106
107 register_hypervisor(VMWareServer)
108 register_hypervisor(VMWareWorkstation6)
109 register_hypervisor(VMWareEsxi)
110