merge latest code
diff --git a/plstackapi/core/api/roles.py b/plstackapi/core/api/roles.py
index 844fb4f..6c61e25 100644
--- a/plstackapi/core/api/roles.py
+++ b/plstackapi/core/api/roles.py
@@ -1,9 +1,21 @@
+from types import StringTypes
 from plstackapi.openstack.client import OpenStackClient
 from plstackapi.openstack.driver import OpenStackDriver
 from plstackapi.core.api.auth import auth_check
 from plstackapi.core.models import Role
  
 
+def _get_roles(filter):
+    if isinstance(filter, int):
+        roles = Role.objects.filter(id=filter)
+    elif isinstance(filter, StringTypes):
+        roles = Role.objects.filter(role_type=filter)
+    elif isinstance(filter, dict):
+        roles = Role.objects.filter(**filter)
+    else:
+        roles = []
+    return roles
+
 def add_role(auth, name):
     driver = OpenStackDriver(client = auth_check(auth))    
     keystone_role = driver.create_role(name=name)
@@ -13,7 +25,7 @@
 
 def delete_role(auth, filter={}):
     driver = OpenStackDriver(client = auth_check(auth))   
-    roles = Role.objects.filter(**filter)
+    roles = _get_roles(filter) 
     for role in roles:
         driver.delete_role({'id': role.role_id}) 
         role.delete()
@@ -21,8 +33,5 @@
 
 def get_roles(auth, filter={}):
     client = auth_check(auth)
-    roles = Role.objects.filter(**filter)
-    return roles             
+    return _get_roles(filter)             
         
-
-