X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/70f60ee3aa8c2416ef0b72bb89341af2975420a5..e3ef118dac44137bda1374d8e124b095d7f6ad06:/code/main.py
diff --git a/code/main.py b/code/main.py
index cffa809..6fdd31a 100755
--- a/code/main.py
+++ b/code/main.py
@@ -12,6 +12,7 @@ import simplejson
import sys
import time
import urllib
+import socket
from StringIO import StringIO
def revertStandardError():
@@ -121,7 +122,7 @@ class Defaults:
if max_memory is not None:
self.memory = min(self.memory, max_memory)
if max_disk is not None:
- self.max_disk = min(self.disk, max_disk)
+ self.disk = min(self.disk, max_disk)
for key in kws:
setattr(self, key, kws[key])
@@ -150,7 +151,7 @@ def parseCreate(username, state, fields):
kws = dict([(kw, fields.getfirst(kw)) for kw in 'name description owner memory disksize vmtype cdrom autoinstall'.split()])
validate = validation.Validate(username, state, strict=True, **kws)
return dict(contact=username, name=validate.name, description=validate.description, memory=validate.memory,
- disksize=validate.disksize, owner=validate.owner, machine_type=validate.vmtype,
+ disksize=validate.disksize, owner=validate.owner, machine_type=getattr(validate, 'vmtype', Defaults.type),
cdrom=getattr(validate, 'cdrom', None),
autoinstall=getattr(validate, 'autoinstall', None))
@@ -269,13 +270,16 @@ def getHostname(nic):
XXX this should be merged with the similar logic in DNS and DHCP.
"""
- if nic.hostname and '.' in nic.hostname:
- return nic.hostname
+ if nic.hostname:
+ hostname = nic.hostname
elif nic.machine:
- return nic.machine.name + '.' + config.dns.domains[0]
+ hostname = nic.machine.name
else:
return None
-
+ if '.' in hostname:
+ return hostname
+ else:
+ return hostname + '.' + config.dns.domains[0]
def getNicInfo(data_dict, machine):
"""Helper function for info, get data on nics for a machine.
@@ -291,8 +295,7 @@ def getNicInfo(data_dict, machine):
nic_fields = []
for i in range(len(machine.nics)):
nic_fields.extend([(x % i, y % i) for x, y in nic_fields_template])
- if not i:
- data_dict['nic%s_hostname' % i] = getHostname(machine.nics[i])
+ 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
if len(machine.nics) == 1:
@@ -377,6 +380,9 @@ def modifyDict(username, state, fields):
update_acl = True
if hasattr(validate, 'name'):
machine.name = validate.name
+ for n in machine.nics:
+ if n.hostname == oldname:
+ n.hostname = validate.name
if hasattr(validate, 'description'):
machine.description = validate.description
if hasattr(validate, 'admin') and validate.admin != machine.administrator:
@@ -474,7 +480,7 @@ power on and off the machine. This can be either a user or a moira
group.""",
'Quotas': """
Quotas are determined on a per-locker basis. Each locker may have a
-maximum of 512 megabytes of active ram, 50 gigabytes of disk, and 4
+maximum of 512 mebibytes of active ram, 50 gibibytes of disk, and 4
active machines.""",
'Console': """
Framebuffer: At a Linux boot prompt in your VM, try
@@ -483,7 +489,7 @@ your machine will run just fine, but the applet's display of the
console will suffer artifacts.
""",
'Windows': """
-Windows Vista: The Vista image is licensed for all MIT students and will automatically activate off the network; see the licensing confirmation e-mail for details. The installer req uires 512 MB RAM and at least 7.5 GB disk space (15 GB or more recommended).
+Windows Vista: The Vista image is licensed for all MIT students and will automatically activate off the network; see the licensing confirmation e-mail for details. The installer requires 512 MiB RAM and at least 7.5 GiB disk space (15 GiB or more recommended).
Windows XP: 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.
"""
}
@@ -521,8 +527,6 @@ def infoDict(username, state, machine):
cpu_time_float = float(main_status.get('cpu_time', 0))
cputime = datetime.timedelta(seconds=int(cpu_time_float))
checkpoint.checkpoint('Status')
- display_fields = """name uptime memory state cpu_weight on_reboot
- on_poweroff on_crash on_xend_start on_xend_stop bootloader""".split()
display_fields = [('name', 'Name'),
('description', 'Description'),
('owner', 'Owner'),
@@ -537,12 +541,6 @@ def infoDict(username, state, machine):
'DISK_INFO',
('state', 'state (xen format)'),
('cpu_weight', 'CPU weight'+helppopup('CPU Weight')),
- ('on_reboot', 'Action on VM reboot'),
- ('on_poweroff', 'Action on VM poweroff'),
- ('on_crash', 'Action on VM crash'),
- ('on_xend_start', 'Action on Xen start'),
- ('on_xend_stop', 'Action on Xen stop'),
- ('bootloader', 'Bootloader options'),
]
fields = []
machine_info = {}
@@ -609,16 +607,17 @@ def info(username, state, path, fields):
def unauthFront(_, _2, _3, fields):
"""Information for unauth'd users."""
- return templates.unauth(searchList=[{'simple' : True}])
+ return templates.unauth(searchList=[{'simple' : True,
+ 'hostname' : socket.getfqdn()}])
def admin(username, state, path, fields):
if path == '':
return ({'Status': '303 See Other',
'Location': 'admin/'},
"You shouldn't see this message.")
- if not username in getAfsGroupMembers(config.web.adminacl, 'athena.mit.edu'):
+ if not username in getAfsGroupMembers(config.adminacl, 'athena.mit.edu'):
raise InvalidInput('username', username,
- 'Not in admin group %s.' % config.web.adminacl)
+ 'Not in admin group %s.' % config.adminacl)
newstate = State(username, isadmin=True)
newstate.environ = state.environ
return handler(username, newstate, path, fields)
@@ -681,7 +680,7 @@ def getUser(environ):
if environ.get('AUTH_TYPE') == 'Negotiate':
# Convert the krb5 principal into a krb4 username
- if not user.endswith('@%s' % config.authn[0].realm):
+ if not user.endswith('@%s' % config.kerberos.realm):
return
else:
return user.split('@')[0].replace('/', '.')