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