summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2010-07-25 11:20:09 -0700
committerVishvananda Ishaya <vishvananda@gmail.com>2010-07-25 11:20:09 -0700
commitf7962c73aa9835c76857005ab56f512fbc9eebfd (patch)
tree488ca37ed870959ca553e9bc6cb5961468c8e866
parent5066e1f55fa672f6b6eec1523b5334e6fe9609a2 (diff)
downloadnova-f7962c73aa9835c76857005ab56f512fbc9eebfd.tar.gz
nova-f7962c73aa9835c76857005ab56f512fbc9eebfd.tar.xz
nova-f7962c73aa9835c76857005ab56f512fbc9eebfd.zip
More Cleanup of code
Moved code in AuthManager init to new so it isn't called multiple times Changed AuthManager flag to specify class name as well as module name Added exception for missing auth_driver Changed import to use "recommended" style for nested imports http://docs.python.org/dev/library/functions.html#__import__
-rwxr-xr-xbin/nova-dhcpbridge2
-rw-r--r--nova/auth/fakeldapdriver.py32
-rw-r--r--nova/auth/ldapdriver.py12
-rw-r--r--nova/auth/manager.py22
-rw-r--r--nova/tests/fake_flags.py2
-rw-r--r--nova/tests/network_unittest.py2
6 files changed, 29 insertions, 43 deletions
diff --git a/bin/nova-dhcpbridge b/bin/nova-dhcpbridge
index ece7ffc8c..c519c6ccb 100755
--- a/bin/nova-dhcpbridge
+++ b/bin/nova-dhcpbridge
@@ -78,7 +78,7 @@ def main():
FLAGS.network_size = 32
FLAGS.fake_libvirt=True
FLAGS.fake_network=True
- FLAGS.auth_driver='nova.auth.fakeldapdriver'
+ FLAGS.auth_driver='nova.auth.ldapdriver.FakeLdapDriver'
action = argv[1]
if action in ['add','del','old']:
mac = argv[2]
diff --git a/nova/auth/fakeldapdriver.py b/nova/auth/fakeldapdriver.py
deleted file mode 100644
index 833548c79..000000000
--- a/nova/auth/fakeldapdriver.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-"""
-Fake Auth driver for ldap
-
-"""
-
-from nova.auth import ldapdriver
-
-class AuthDriver(ldapdriver.AuthDriver):
- """Ldap Auth driver
-
- Defines enter and exit and therefore supports the with/as syntax.
- """
- def __init__(self):
- self.ldap = __import__('nova.auth.fakeldap', fromlist=True)
diff --git a/nova/auth/ldapdriver.py b/nova/auth/ldapdriver.py
index 0535977af..1591c88e9 100644
--- a/nova/auth/ldapdriver.py
+++ b/nova/auth/ldapdriver.py
@@ -17,7 +17,7 @@
# under the License.
"""
-Auth driver for ldap
+Auth driver for ldap. Includes FakeLdapDriver.
It should be easy to create a replacement for this driver supporting
other backends by creating another class that exposes the same
@@ -25,6 +25,7 @@ public methods.
"""
import logging
+import sys
from nova import exception
from nova import flags
@@ -61,7 +62,7 @@ flags.DEFINE_string('ldap_developer',
# to define a set interface for AuthDrivers. I'm delaying
# creating this now because I'm expecting an auth refactor
# in which we may want to change the interface a bit more.
-class AuthDriver(object):
+class LdapDriver(object):
"""Ldap Auth driver
Defines enter and exit and therefore supports the with/as syntax.
@@ -471,3 +472,10 @@ class AuthDriver(object):
"""Convert uid to dn"""
return 'uid=%s,%s' % (dn, FLAGS.ldap_user_subtree)
+
+class FakeLdapDriver(LdapDriver):
+ """Fake Ldap Auth driver"""
+ def __init__(self):
+ __import__('nova.auth.fakeldap')
+ self.ldap = sys.modules['nova.auth.fakeldap']
+
diff --git a/nova/auth/manager.py b/nova/auth/manager.py
index 130bed7c2..32c2f9e02 100644
--- a/nova/auth/manager.py
+++ b/nova/auth/manager.py
@@ -24,6 +24,7 @@ import logging
import os
import shutil
import string
+import sys
import tempfile
import uuid
import zipfile
@@ -75,7 +76,7 @@ flags.DEFINE_string('credential_cert_subject',
flags.DEFINE_string('vpn_ip', '127.0.0.1',
'Public IP for the cloudpipe VPN servers')
-flags.DEFINE_string('auth_driver', 'fakeldapdriver',
+flags.DEFINE_string('auth_driver', 'nova.auth.ldapdriver.AuthDriver',
'Driver that auth manager uses')
class AuthBase(object):
@@ -320,16 +321,25 @@ class AuthManager(object):
"""
_instance=None
def __new__(cls, *args, **kwargs):
+ """Returns the AuthManager singleton with driver set
+
+ __init__ is run every time AuthManager() is called, so we need to do
+ any constructor related stuff here. The driver that is specified
+ in the flagfile is loaded here.
+ """
if not cls._instance:
cls._instance = super(AuthManager, cls).__new__(
cls, *args, **kwargs)
+ mod_str, sep, driver_str = FLAGS.auth_driver.rpartition('.')
+ try:
+ mod = __import__(mod_str)
+ cls._instance.driver = getattr(sys.modules[mod_str],
+ driver_str)
+ except (ImportError, AttributeError):
+ raise exception.Error('Auth driver %s cannot be found'
+ % FLAGS.auth_driver)
return cls._instance
- def __init__(self, *args, **kwargs):
- """Imports the driver module and saves the Driver class"""
- mod = __import__(FLAGS.auth_driver, fromlist=True)
- self.driver = mod.AuthDriver
-
def authenticate(self, access, signature, params, verb='GET',
server_string='127.0.0.1:8773', path='/',
verify_signature=True):
diff --git a/nova/tests/fake_flags.py b/nova/tests/fake_flags.py
index 57575b44b..304f24841 100644
--- a/nova/tests/fake_flags.py
+++ b/nova/tests/fake_flags.py
@@ -24,5 +24,5 @@ FLAGS.fake_libvirt = True
FLAGS.fake_storage = True
FLAGS.fake_rabbit = True
FLAGS.fake_network = True
-FLAGS.auth_driver = 'nova.auth.fakeldapdriver'
+FLAGS.auth_driver = 'nova.auth.ldapdriver.FakeLdapDriver'
FLAGS.verbose = True
diff --git a/nova/tests/network_unittest.py b/nova/tests/network_unittest.py
index 12840e736..9e17bf155 100644
--- a/nova/tests/network_unittest.py
+++ b/nova/tests/network_unittest.py
@@ -37,7 +37,7 @@ class NetworkTestCase(test.TrialTestCase):
self.flags(fake_libvirt=True,
fake_storage=True,
fake_network=True,
- auth_driver='nova.auth.fakeldapdriver',
+ auth_driver='nova.auth.ldapdriver.FakeLdapDriver',
network_size=32)
logging.getLogger().setLevel(logging.DEBUG)
self.manager = manager.AuthManager()