<p>We recommend using a ParaVM when possible and an HVM when necessary.
""",
- 'CPU Weight': """
-Don't ask us! We're as mystified as you are.""",
'Owner': """
The owner field is used to determine <a
href="help?subject=Quotas">quotas</a>. It must be the name of a
console will suffer artifacts.
""",
'Windows': """
+<strong>Windows 7:</strong> The Windows 7 image is licensed for all MIT students and will automatically activate off the network; see <a href="/static/msca-7.txt">the licensing agreement</a> for details. The installer requires 512 MiB RAM and at least 15 GiB disk space (20 GiB or more recommended).<br>
<strong>Windows Vista:</strong> The Vista image is licensed for all MIT students and will automatically activate off the network; see <a href="/static/msca-email.txt">the licensing confirmation e-mail</a> for details. The installer requires 512 MiB RAM and at least 7.5 GiB disk space (15 GiB or more recommended).<br>
<strong>Windows XP:</strong> This is the volume license CD image. You will need your own volume license key to complete the install. We do not have these available for the general MIT community; ask your department if they have one, or visit <a href="http://msca.mit.edu/">http://msca.mit.edu/</a> if you are staff/faculty to request one.
"""
machines=machines,
has_vnc=has_vnc,
installing=installing,
- disable_creation=True)
+ disable_creation=False)
return d
def getHostname(nic):
nic_fields_template = [('nic%s_hostname', 'NIC %s Hostname'),
('nic%s_mac', 'NIC %s MAC Addr'),
('nic%s_ip', 'NIC %s IP'),
+ ('nic%s_netmask', 'NIC %s Netmask'),
+ ('nic%s_gateway', 'NIC %s Gateway'),
]
nic_fields = []
for i in range(len(machine.nics)):
data_dict['nic%s_hostname' % i] = getHostname(machine.nics[i])
data_dict['nic%s_mac' % i] = machine.nics[i].mac_addr
data_dict['nic%s_ip' % i] = machine.nics[i].ip
+ data_dict['nic%s_netmask' % i] = machine.nics[i].netmask
+ data_dict['nic%s_gateway' % i] = machine.nics[i].gateway
+ if machine.nics[i].other_ip:
+ nic_fields.append(('nic%s_other' % i, 'NIC %s Other Address' % i))
+ other = '%s/%s via %s' % (machine.nics[i].other_ip, machine.nics[i].other_netmask, machine.nics[i].other_gateway)
+ other_action = machine.nics[i].other_action
+ if other_action == 'dnat':
+ other += " (NAT to primary IP)"
+ elif other_action == 'renumber':
+ other += " (cold boot or renew DHCP lease to swap)"
+ elif other_action == 'renumber_dhcp':
+ other += " (renew DHCP lease to swap)"
+ elif other_action == 'remove':
+ other += " (will be removed at next cold boot or DHCP lease renewal)"
+ else:
+ other += " (pending assignment)"
+ data_dict['nic%s_other' % i] = other
if len(machine.nics) == 1:
nic_fields = [(x, y.replace('NIC 0 ', '')) for x, y in nic_fields]
return nic_fields
if hasattr(validate, 'contact'):
machine.contact = validate.contact
- session.save_or_update(machine)
+ session.add(machine)
session.commit()
except:
session.rollback()
if disk.size != disksize:
olddisk[disk.guest_device_name] = disksize
disk.size = disksize
- session.save_or_update(disk)
+ session.add(disk)
for diskname in olddisk:
controls.resizeDisk(oldname, diskname, str(olddisk[diskname]))
- session.save_or_update(machine)
+ session.add(machine)
session.commit()
except:
session.rollback()
n.hostname = validate.name
if hasattr(validate, 'name'):
controls.renameMachine(machine, oldname, validate.name)
- session.save_or_update(machine)
+ session.add(machine)
session.commit()
except:
session.rollback()
def infoDict(username, state, machine):
"""Get the variables used by info.tmpl."""
- status = controls.statusInfo(machine)
+ try:
+ status = controls.statusInfo(machine)
+ except CodeError, e:
+ # machine was shut down in between the call to listInfoDict and this
+ status = None
has_vnc = hasVnc(status)
if status is None:
main_status = dict(name=machine.name,
else:
main_status = dict(status[1:])
main_status['host'] = controls.listHost(machine)
- start_time = float(main_status.get('start_time', 0))
- uptime = datetime.timedelta(seconds=int(time.time()-start_time))
+ start_time = main_status.get('start_time')
+ if start_time is None:
+ uptime = "Still booting?"
+ else:
+ start_time = float(start_time)
+ uptime = datetime.timedelta(seconds=int(time.time()-start_time))
cpu_time_float = float(main_status.get('cpu_time', 0))
cputime = datetime.timedelta(seconds=int(cpu_time_float))
display_fields = [('name', 'Name'),
display_fields = (display_fields[:disk_point] + disk_fields +
display_fields[disk_point+1:])
+ renumber = False
+ for n in machine.nics:
+ if n.other_action in ('renumber', 'renumber_dhcp'):
+ renumber = True
+
main_status['memory'] += ' MiB'
for field, disp in display_fields:
if field in ('uptime', 'cputime') and locals()[field] is not None:
defaults.disk = "%0.2f" % (machine.disks[0].size/1024.)
d = dict(user=username,
on=status is not None,
+ renumber=renumber,
machine=machine,
defaults=defaults,
has_vnc=has_vnc,