added methods
diff --git a/plstackapi/openstack/driver.py b/plstackapi/openstack/driver.py
index 099240a..bdb08a9 100644
--- a/plstackapi/openstack/driver.py
+++ b/plstackapi/openstack/driver.py
@@ -30,7 +30,59 @@
     def delete_tenant(self, id):
         tenant = self.shell.keystone.tenants.find(id=id)
         return self.shell.keystone.tenants.delete(tenant)
-         
+
+    def create_router(self, name):
+        router = self.shell.quantum.create_router(name=name)
+        # TODO: add router to external network
+        return router
+
+    def delete_router(self, name):
+        return self.shell.quantum.delete_router(name=name)
+    
+    def create_network(self, name):
+        return self.shell.quantum.create_network(name=name, admin_state_up=True)
+    
+    def delete_network(self, name):
+        nets = self.shell.quantum.list_networks(name=name)
+        for net in nets:
+            # delete all subnets:
+            #subnets = self.api.client_shell.quantum.list_subnets(network_id=net['network_id'])['subnets']
+            for subnet_id in net['subnets']:
+                self.delete_subnet(subnet_id)
+            self.shell.quantum.delete_network(net['id'])
+    
+    def create_subnet(self, network_name, cidr_ip, ip_version, start, end):
+        nets = self.shell.quantum.list_networks(name=network_name)
+        if not nets:
+            raise Exception, "No such network: %s" % network_name   
+        nets = nets[0]
+
+        subnets = self.shell.quantum.list_subnets(name=self.name)
+        allocation_pools = [{'start': start, 'end': end}]
+        subnet = self.shell.quantum.create_subnet(network_id=net['id'],
+                                                ip_version=ip_version,
+                                                cidr=cidr_ip,
+                                                dns_nameservers=['8.8.8.8'],         
+                                                allocation_pools=allocation_pools)
+
+        # TODO: Add route to external network
+        # e.g. #  route add -net 10.0.3.0/24 dev br-ex gw 10.100.0.5 
+        return subnet
+
+    def delete_subnet(self, id):
+        return self.client.quantum.delete_subnet(id=id)
+     
+    
+    def create_keypair(self, name, key):
+        keys = self.client.nova.keypairs.findall(name=name)
+        if keys:
+            raise Exception, "Key name already exists: %s" % name
+        return self.client.nova.keypairs.create(name=name, public_key=key)
+
+    def delete_keypair(self, name):
+        keys = self.client.nova.keypairs.findall(name=name)
+        for key in keys:
+            self.client.nova.keypairs.delete(key) 
 
     def spawn_instance(self, name, key_name=None, hostname=None, flavor=None, image=None, security_group=None, pubkeys=[]):
         if not flavor: