From: Quentin Smith Date: Sun, 9 Aug 2009 22:45:34 +0000 (-0400) Subject: Implement help handler X-Git-Tag: 0.1.0^2~59 X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/commitdiff_plain/e4854da750615c45d19dbffa1643dc36bfc86048?hp=09b3c4465e1370966c4765ae261c910e7dd67883 Implement help handler svn path=/package_branches/invirt-web/cherrypy-rebased/; revision=2676 --- diff --git a/code/main.py b/code/main.py index 3579794..593b9f0 100755 --- a/code/main.py +++ b/code/main.py @@ -67,6 +67,85 @@ class InvirtWeb(View): index=list @cherrypy.expose + @cherrypy.tools.mako(filename="/help.mako") + def help(self, subject=None, simple=False): + """Handler for help messages.""" + + help_mapping = { + 'Autoinstalls': """ +The autoinstaller builds a minimal Debian or Ubuntu system to run as a +ParaVM. You can access the resulting system by logging into the serial console server +with your Kerberos tickets; there is no root password so sshd will +refuse login.

+ +

Under the covers, the autoinstaller uses our own patched version of +xen-create-image, which is a tool based on debootstrap. If you log +into the serial console while the install is running, you can watch +it. +""", + 'ParaVM Console': """ +ParaVM machines do not support local console access over VNC. To +access the serial console of these machines, you can SSH with Kerberos +to %s, using the name of the machine as your +username.""" % config.console.hostname, + 'HVM/ParaVM': """ +HVM machines use the virtualization features of the processor, while +ParaVM machines rely on a modified kernel to communicate directly with +the hypervisor. HVMs support boot CDs of any operating system, and +the VNC console applet. The three-minute autoinstaller produces +ParaVMs. ParaVMs typically are more efficient, and always support the +console server.

+ +

More details are on the +wiki, including steps to prepare an HVM guest to boot as a ParaVM +(which you can skip by using the autoinstaller to begin with.)

+ +

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 quotas. It must be the name of a +locker that you are an AFS administrator of. In particular, you or an +AFS group you are a member of must have AFS rlidwka bits on the +locker. You can check who administers the LOCKER locker using the +commands 'attach LOCKER; fs la /mit/LOCKER' on Athena.) See also administrator.""", + 'Administrator': """ +The administrator field determines who can access the console and +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 mebibytes of active ram, 50 gibibytes of disk, and 4 +active machines.""", + 'Console': """ +Framebuffer: At a Linux boot prompt in your VM, try +setting fb=false to disable the framebuffer. If you don't, +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 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. +""" + } + + if not subject: + subject = sorted(help_mapping.keys()) + if not isinstance(subject, list): + subject = [subject] + + return dict(user=cherrypy.request.login, + simple=simple, + subjects=subject, + mapping=help_mapping) + help._cp_config['tools.require_login.on'] = False + + @cherrypy.expose @cherrypy.tools.mako(filename="/helloworld.mako") def helloworld(self, **kwargs): return {'request': cherrypy.request, 'kwargs': kwargs} @@ -434,86 +513,6 @@ def modify(username, state, path, fields): info_dict['result'] = result return templates.info(searchList=[info_dict]) - -def helpHandler(username, state, path, fields): - """Handler for help messages.""" - simple = fields.getfirst('simple') - subjects = fields.getlist('subject') - - help_mapping = { - 'Autoinstalls': """ -The autoinstaller builds a minimal Debian or Ubuntu system to run as a -ParaVM. You can access the resulting system by logging into the serial console server -with your Kerberos tickets; there is no root password so sshd will -refuse login.

- -

Under the covers, the autoinstaller uses our own patched version of -xen-create-image, which is a tool based on debootstrap. If you log -into the serial console while the install is running, you can watch -it. -""", - 'ParaVM Console': """ -ParaVM machines do not support local console access over VNC. To -access the serial console of these machines, you can SSH with Kerberos -to %s, using the name of the machine as your -username.""" % config.console.hostname, - 'HVM/ParaVM': """ -HVM machines use the virtualization features of the processor, while -ParaVM machines rely on a modified kernel to communicate directly with -the hypervisor. HVMs support boot CDs of any operating system, and -the VNC console applet. The three-minute autoinstaller produces -ParaVMs. ParaVMs typically are more efficient, and always support the -console server.

- -

More details are on the -wiki, including steps to prepare an HVM guest to boot as a ParaVM -(which you can skip by using the autoinstaller to begin with.)

- -

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 quotas. It must be the name of a -locker that you are an AFS administrator of. In particular, you or an -AFS group you are a member of must have AFS rlidwka bits on the -locker. You can check who administers the LOCKER locker using the -commands 'attach LOCKER; fs la /mit/LOCKER' on Athena.) See also administrator.""", - 'Administrator': """ -The administrator field determines who can access the console and -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 mebibytes of active ram, 50 gibibytes of disk, and 4 -active machines.""", - 'Console': """ -Framebuffer: At a Linux boot prompt in your VM, try -setting fb=false to disable the framebuffer. If you don't, -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 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. -""" - } - - if not subjects: - subjects = sorted(help_mapping.keys()) - - d = dict(user=username, - simple=simple, - subjects=subjects, - mapping=help_mapping) - - return templates.help(searchList=[d]) - - def badOperation(u, s, p, e): """Function called when accessing an unknown URI.""" return ({'Status': '404 Not Found'}, 'Invalid operation.') @@ -635,13 +634,11 @@ def throwError(_, __, ___, ____): """Throw an error, to test the error-tracing mechanisms.""" raise RuntimeError("test of the emergency broadcast system") -mapping = dict(#list=listVms, - vnc=vnc, +mapping = dict(vnc=vnc, command=command, modify=modify, info=info, create=create, - help=helpHandler, unauth=unauthFront, admin=admin, overlord=admin, diff --git a/code/templates/help.mako b/code/templates/help.mako new file mode 100644 index 0000000..ea27773 --- /dev/null +++ b/code/templates/help.mako @@ -0,0 +1,37 @@ +<%page expression_filter="h"/> +<%inherit file="skeleton.mako" /> + +<%! + pageclass = 'help' +%> + +<%def name="title()"> +% if len(subjects) == 1: +Help on ${subjects[0]} +% else: +Help +% endif + + +% if not simple: +

Topics: +% for key in sorted(mapping): +${key} +% endfor +

+

+See also tips and HOWTOs on the wiki. +

+% endif + +% for subject in subjects: +% if subject in mapping: +

${subject}

+

${mapping[subject]|n}

+% else: +

Unknown subject '${subject}'.

+% endif +% endfor +% if simple: +Close +% endif diff --git a/code/templates/help.tmpl b/code/templates/help.tmpl deleted file mode 100644 index 61061ee..0000000 --- a/code/templates/help.tmpl +++ /dev/null @@ -1,39 +0,0 @@ -#from skeleton import skeleton -#extends skeleton - -#attr pageclass = 'help' - -#def title -#if len($subjects) == 1 -Help on $subjects[0] -#else -Help -#end if -#end def - - -#def body -#if not $simple -

Topics: -#for $key in sorted($mapping) -$key -#end for -

-

-See also tips and HOWTOs on the wiki. -

-#end if -#for $subject in $subjects -#if $subject in $mapping -

$subject

-#filter None -

$mapping[$subject]

-#end filter -#else -

Unknown subject '$subject'.

-#end if -#end for -#if $simple -Close -#end if -#end def