key is now just an attribute of the user model. Added 'creator' field to sliver model
diff --git a/planetstack/openstack/client.py b/planetstack/openstack/client.py
index f3abbb2..b21c341 100644
--- a/planetstack/openstack/client.py
+++ b/planetstack/openstack/client.py
@@ -3,6 +3,8 @@
     from glance import client as glance_client
     from novaclient.v1_1 import client as nova_client
     from quantumclient.v2_0 import client as quantum_client
+    from nova.db.sqlalchemy import api as nova_db_api 
+    from nova.context import get_admin_context
     has_openstack = True
 except:
     has_openstack = False
@@ -110,6 +112,23 @@
     def __getattr__(self, name):
         return getattr(self.client, name)
 
+class NovaDB(Client):
+    def __init__(self, *args, **kwds):
+        Client.__init__(self, *args, **kwds)
+        if has_openstack:
+            self.ctx = get_admin_context()
+            api.FLAGS(default_config_files=['/etc/nova/nova.conf'])
+            self.client = nova_db_api
+
+
+    @require_enabled
+    def connect(self, *args, **kwds):
+        self.__init__(*args, **kwds)
+
+    @require_enabled
+    def __getattr__(self, name):
+        return getattr(self.client, name)
+
 class QuantumClient(Client):
     def __init__(self, *args, **kwds):
         Client.__init__(self, *args, **kwds)
@@ -137,6 +156,7 @@
         self.keystone = KeystoneClient(*args, **kwds)
         self.glance = GlanceClient(*args, **kwds)
         self.nova = NovaClient(*args, **kwds)
+        self.nova_db = NovaDB(*args, **kwds)
         self.quantum = QuantumClient(*args, **kwds)
 
     @require_enabled
diff --git a/planetstack/openstack/driver.py b/planetstack/openstack/driver.py
index f84fbb8..a38b0a1 100644
--- a/planetstack/openstack/driver.py
+++ b/planetstack/openstack/driver.py
@@ -278,12 +278,16 @@
              
         return 1
     
-    def create_keypair(self, name, key):
+    def create_keypair(self, name, public_key):
         keys = self.shell.nova.keypairs.findall(name=name)
         if keys:
             key = keys[0]
+            # update key     
+            if key.public_key != public_key:
+                self.delete_keypair(key.id)
+                key = self.shell.nova.keypairs.create(name=name, public_key=public_key)
         else:
-            key = self.shell.nova.keypairs.create(name=name, public_key=key)
+            key = self.shell.nova.keypairs.create(name=name, public_key=public_key)
         return key
 
     def delete_keypair(self, id):
diff --git a/planetstack/openstack/manager.py b/planetstack/openstack/manager.py
index 83dd954..3c77952 100644
--- a/planetstack/openstack/manager.py
+++ b/planetstack/openstack/manager.py
@@ -6,11 +6,11 @@
 from netaddr import IPAddress, IPNetwork
 from planetstack import settings
 from django.core import management
+from core.models import * 
 from planetstack.config import Config
 try:
     from openstack.client import OpenStackClient
     from openstack.driver import OpenStackDriver
-    from core.models import * 
     has_openstack = True
 except:
     has_openstack = False
@@ -79,12 +79,10 @@
             self.driver.delete_role({'id': role.role})
 
     @require_enabled
-    def save_key(self, key):
-        if not key.nkey_id:
-            key_fields = {'name': random_string(8),
-                          'key': key.key}
-            nova_key = self.driver.create_keypair(**key_fields)
-            key.nkey_id = nova_key.id        
+    def save_key(self, key, name):
+        key_fields = {'name': name,
+                      'public_key': key}
+        nova_key = self.driver.create_keypair(**key_fields)
 
     @require_enabled
     def delete_key(self, key):
@@ -101,6 +99,10 @@
                            'enabled': True}
             keystone_user = self.driver.create_user(**user_fields)
             user.kuser_id = keystone_user.id
+
+        if user.public_key:
+            self.save_key(user.public_key, user.keyname)
+
         if user.site:
             self.driver.add_user_role(user.kuser_id, user.site.tenant_id, 'user')
             if user.is_admin:
@@ -243,7 +245,7 @@
     def save_sliver(self, sliver):
         if not sliver.instance_id:
             instance = self.driver.spawn_instance(name=sliver.name,
-                                   key_name = sliver.key.nkey_id,
+                                   key_name = sliver.creator.keyname,
                                    image_id = sliver.image.image_id,
                                    hostname = sliver.node.name )
             sliver.instance_id = instance.id
@@ -286,7 +288,7 @@
             site = sites[i]
             node = Node(name=compute_nodes_dict[name].hypervisor_hostname,
                         site=site,
-                        deploymentNetwork=deployment)
+                        deployment=deployment)
             node.save()
             i+=1