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 group = self.setting_group('VM settings')
36 group.add_setting('mem', extra_args=['-m'], default='128', help='Assign MEM megabytes of memory to the guest vm. [default: %default]')
37 group.add_setting('cpus', type='int', default=1, help='Assign NUM cpus to the guest vm. [default: %default]')
38
45
48
50 mem = self.context.get_setting('mem')
51 cpus = self.context.get_setting('cpus')
52 hostname = self.context.distro.get_setting('hostname')
53 arch = self.context.distro.get_setting('arch')
54 mac = self.context.get_setting('mac')
55 vmdesc = VMBuilder.util.render_template('vmware',
56 self.context,
57 self.vmxtemplate,
58 { 'disks' : self.get_disks(),
59 'vmhwversion' : self.vmhwversion,
60 'mem' : mem,
61 'numvcpus' : cpus,
62 'hostname' : hostname,
63 'arch' : arch,
64 'mac' : mac,
65 'guestos' : (arch == 'amd64' and 'ubuntu-64' or 'ubuntu') })
66
67 vmx = '%s/%s.vmx' % (destdir, hostname)
68 fp = open(vmx, 'w')
69 fp.write(vmdesc)
70 fp.close()
71 os.chmod(vmx, stat.S_IRWXU | stat.S_IRWXU | stat.S_IROTH | stat.S_IXOTH)
72 self.call_hooks('fix_ownership', vmx)
73
78
83
85 name = 'VMWare ESXi'
86 arg = 'esxi'
87 vmhwversion = 4
88 adaptertype = 'lsilogic'
89 vmxtemplate = 'esxi.vmx'
90
91 vmdks = []
92
94 self.imgs = []
95 for disk in disks:
96
97
98 diskfilename = os.path.basename(disk.filename)
99 if '.' in diskfilename:
100 diskfilename = diskfilename[:diskfilename.rindex('.')]
101
102 flat = '%s/%s-flat.vmdk' % (destdir, diskfilename)
103 self.vmdks.append(diskfilename)
104
105 move(disk.filename, flat)
106
107 self.call_hooks('fix_ownership', flat)
108
109
110 sectorTotal = disk.size * 2048
111 sector = int(floor(sectorTotal / 16065))
112
113 diskdescriptor = VMBuilder.util.render_template('vmware', self.context, 'flat.vmdk', { 'adaptertype' : self.adaptertype, 'sectors' : sector, 'diskname' : os.path.basename(flat), 'disksize' : sectorTotal })
114 vmdk = '%s/%s.vmdk' % (destdir, diskfilename)
115
116 fp = open(vmdk, 'w')
117 fp.write(diskdescriptor)
118 fp.close()
119 os.chmod(vmdk, stat.S_IRWXU | stat.S_IRWXU | stat.S_IROTH | stat.S_IXOTH)
120
121 self.call_hooks('fix_ownership', vmdk)
122
125
126 register_hypervisor(VMWareServer)
127 register_hypervisor(VMWareWorkstation6)
128 register_hypervisor(VMWareEsxi)
129