Index: trunk/packages/hvirt-config/debian/changelog
===================================================================
--- trunk/packages/hvirt-config/debian/changelog	(revision 2914)
+++ trunk/packages/hvirt-config/debian/changelog	(revision 2920)
@@ -1,2 +1,8 @@
+hvirt-config (0.0.15) unstable; urgency=low
+
+  * Added vnc conf line
+
+ -- Greg Brockman <gdb@mit.edu>  Tue, 19 Jan 2010 02:45:33 -0500
+
 hvirt-config (0.0.14) unstable; urgency=low
 
Index: trunk/packages/hvirt-config/dev/master.yaml
===================================================================
--- trunk/packages/hvirt-config/dev/master.yaml	(revision 2914)
+++ trunk/packages/hvirt-config/dev/master.yaml	(revision 2920)
@@ -1,3 +1,3 @@
-contact: &contact hvirt@hcs.harvard..edu
+contact: &contact hvirt@hcs.harvard.edu
 console:
  hostname: hvirt-console-dev.hcs.harvard.edu
@@ -19,4 +19,5 @@
 kerberos:
  realm: HCS.HARVARD.EDU
+ keytab: /etc/invirt/keytab
 
 remote:
@@ -28,4 +29,35 @@
 
 web:
+ sites:
+  certs:
+   port: 443
+   suffix: "MIT.EDU"
+  cas:
+   login: https://secure.hcs.harvard.edu/login
+   validate: https://secure.hcs.harvard.edu/serviceValidate
+   authname: "HCS CAS Login"
+   port: 444
+  noauth:
+   port: 445
+  svn:
+   repopath: /home
+   authname: "testing"
+   port: 1111
+   alias: foo
+   localpath: /home
+ ssl:
+  rewriterules:
+    - rule: apt
+      target: '-'
+      type: L
+  redirects:
+    - rule: wiki
+      target: trac
+  cert: ssl/server.crt
+  key: ssl/server.key
+  ca: /etc/ssl/certs/hcs.ca
+ mods: rewrite
+       ssl
+       auth_cas
  baseuri: https://hvirt-dev.hcs.harvard.edu/
  hostname: hvirt-dev.hcs.harvard.edu
@@ -40,2 +72,6 @@
 lvm:
  vg: root
+
+vnc:
+ base_port: 10003
+ proxy_ip: 140.247.89.175
Index: trunk/packages/invirt-base/debian/changelog
===================================================================
--- trunk/packages/invirt-base/debian/changelog	(revision 2914)
+++ trunk/packages/invirt-base/debian/changelog	(revision 2920)
@@ -1,2 +1,8 @@
+invirt-base (0.0.29) unstable; urgency=low
+
+  * Added a safestructs for doing config without raising.
+
+ -- Greg Brockman <gdb@mit.edu>  Tue, 19 Jan 2010 23:49:19 -0500
+
 invirt-base (0.0.28) unstable; urgency=low
 
Index: trunk/packages/invirt-base/python/invirt/common.py
===================================================================
--- trunk/packages/invirt-base/python/invirt/common.py	(revision 2914)
+++ trunk/packages/invirt-base/python/invirt/common.py	(revision 2920)
@@ -11,7 +11,8 @@
 class struct(dict):
     'A simple namespace object.'
-    def __init__(self, d = {}, __prefix = None, **kwargs):
+    def __init__(self, d = {}, __prefix = None, __default=None, **kwargs):
         super(struct, self).__init__(d)
         self.__prefix = __prefix
+        self.__default = __default
         self.update(kwargs)
     def __getattr__(self, key):
@@ -19,14 +20,17 @@
             return self[key]
         except KeyError:
-            # XX ideally these would point a frame higher on the stack.
-            prefix = self.__prefix
-            if prefix is not None:
-                raise InvirtConfigError('missing configuration variable %s%s'
-                                        % (prefix, key))
+            if self.__default is None:
+                # XX ideally these would point a frame higher on the stack.
+                prefix = self.__prefix
+                if prefix is not None:
+                    raise InvirtConfigError('missing configuration variable '
+                                            '%s%s' % (prefix, key))
+                else:
+                    raise AttributeError("anonymous struct has no member '%s'"
+                                         % (key,))
             else:
-                raise AttributeError("anonymous struct has no member '%s'"
-                                     % (key,))
+                return struct({}, '', self.__default)
 
-def dicts2struct(x, prefix = None):
+def dicts2struct(x, prefix = None, default = None):
     """
     Given a tree of lists/dicts, perform a deep traversal to transform all the
@@ -38,11 +42,13 @@
         def newprefix(k): return prefix
     if type(x) == dict:
-        return struct(((k, dicts2struct(v, newprefix(k)))
+        return struct(((k, dicts2struct(v, newprefix(k), default))
                        for k,v in x.iteritems()),
-                      prefix)
+                      prefix,
+                      default)
     elif type(x) == list:
-        return [dicts2struct(v, newprefix(i)) for i, v in enumerate(x)]
+        return [dicts2struct(v, newprefix(i), default)
+                for i, v in enumerate(x)]
     elif x is None:
-        return struct({}, prefix)
+        return struct({}, prefix, default)
     else:
         return x
Index: trunk/packages/invirt-base/python/invirt/config.py
===================================================================
--- trunk/packages/invirt-base/python/invirt/config.py	(revision 2914)
+++ trunk/packages/invirt-base/python/invirt/config.py	(revision 2920)
@@ -142,4 +142,5 @@
 dicts = load()
 structs = dicts2struct(dicts, '')
+safestructs = dicts2struct(dicts, '', '')
 
 # vim:et:sw=4:ts=4
Index: trunk/packages/invirt-vnc-client/debian/control
===================================================================
--- trunk/packages/invirt-vnc-client/debian/control	(revision 2914)
+++ trunk/packages/invirt-vnc-client/debian/control	(revision 2920)
@@ -8,4 +8,4 @@
 Package: invirt-vnc-client
 Architecture: all
-Depends: ${misc:Depends}, java6-sdk, python, invirt-base
+Depends: ${misc:Depends}, java6-sdk, python, invirt-base, invirt-kerberos-config
 Description: Install the custom Invirt VNC client
