[openstack-dev] [keystone] Split the Identity Backend blueprint

Alexius Ludeman lex at lexinator.com
Tue Jul 23 16:15:06 UTC 2013


hi Adam,

Can you explain why RoleApi() and ProjectApi() are duplicated
in assignment/backends/ldap.py and identity/backends/ldap.py?

It would seem duplicating the same class in two files should be refactored
into new shared file.

thanks
lex



On Tue, Jul 23, 2013 at 7:21 AM, Adam Young <ayoung at redhat.com> wrote:

>  On 07/22/2013 09:49 PM, Miller, Mark M (EB SW Cloud - R&D - Corvallis)
> wrote:
>
>  Adam,****
>
> ** **
>
> Sorry for the questions, but even though I have been programming for
> nearly 30 years I am new to Python and I find the code base somewhat
> difficult to follow. I have noticed that the file keystone.identity.backends.ldap.Identity
> has a set of methods and file keystone.assignment.backends.sql.Assignment
> has a set of methods. My question is this: is there a way to specify which
> methods to use the ldap.Identity backend with and which methods to use the
> sql. Assignment backend with or does each backend only support all of the
> methods provided by each file? In working with an enterprise LDAP server,
> there is no way we will be able to create users or to write to it. If there
> is a way to pick and choose which methods access the LDAP server and which
> ones access the SQL keystone database, then I have what we need.
>
>
> Here's the general gist:
>
> We split off the Assignment functions from Identity in order to be able to
> vary the two backends independently.    THe expectation is that people will
> use the LDAP backlend for Identity and the SQL backend for Assignments.
> LDAP will be read only, and Assignments will be read-write.  That being
> said, there are cases where people will have writable LDAP, or will use the
> SQL Identity backend, so there are functions which can change the state of
> the Identity backend, and those are not going to go away.
>
> The general code set up is as follows:
>
> Routers describe the mappings from URLs to Python Code.
> Controllers ate stateless objects.  In theory they should be protocol
> agnostic, but in practice they are aware that they are being used with HTTP.
> Managers and Drivers implement the Data layer.  The managers start as
> simple accessors, but over time they get more and more logic.   We don't
> have a clear place for Business logic.  Since the Backends are radically
> different, a lot of the logic has gotten duplicated between LDAP, SQL,
> Memcahced, and others.  We are working to minimize this.  The general
> approach is that code that should not be duplicated gets "pulled up" to the
> manager.  This kind of refactoring is constant and ongoing.
>
> When I split out the Assignment backend, I tried to to it in a way that
> did not modify the unit tests, so that other reviewers would have
> theassurance that the chagnes were just restructuring,  not fundamentally
> changing functionality.  Thus, we had a shim layer in the Identity Layer
> that called through to the assignment layer.  This has the added benefit of
> maintaining API compatibility for anyone who has customized code.  However,
> I've found a lot of our tests were talking to the driver, not talking
> through the manager, and thus I had to clean up a bunch of the tests to go
> through the manager as well.
>
> As an end user, you should specify that the Identity backend is LDAP and
> the Assignment backend is SQL.  Assuimg your LDAP backend is not writable,
> and call to the Identity layer that attempts to morph the state of the
> Directory store will fail.  However, what you should be doing is using the
> user groups from LDAP as a way to manage users, and place those groups into
> Role Assignments.  Roles, Role Assignments, and Projects all live in the
> Identity (SQL) backend, and all of those should be writeable regardless of
> LDAP state.
>
>  ****
>
> ** **
>
> Thanks,****
>
> ** **
>
> Mark****
>
> ** **
>
> ** **
>
> *From:* Adam Young [mailto:ayoung at redhat.com <ayoung at redhat.com>]
> *Sent:* Monday, July 22, 2013 4:52 PM
>
> *To:* Miller, Mark M (EB SW Cloud - R&D - Corvallis)
> *Cc:* Dolph Mathews; OpenStack Development Mailing List
> *Subject:* Re: [keystone] Split the Identity Backend blueprint****
>
>  ** **
>
> On 07/22/2013 07:43 PM, Miller, Mark M (EB SW Cloud - R&D - Corvallis)
> wrote:****
>
> Adam,****
>
>  ****
>
> You wrote:****
>
>  ****
>
> [identity] ****
>
>  driver = keystone.identity.backends.ldap.Identity****
>
>  ****
>
> [assignment] ****
>
> driver = keystone.assignment.backends.sql.Identity****
>
>  ****
>
> Did you mean to write: ****
>
>  ****
>
> [assignment] ****
>
> driver = keystone.assignment.backends.sql.Assignment****
>
> Yes, that was a mistake on my part.  Sorry
>
> ****
>
>  ****
>
> Mark****
>
>  ****
>
> *From:* Adam Young [mailto:ayoung at redhat.com <ayoung at redhat.com>]
> *Sent:* Monday, July 22, 2013 12:50 PM
> *To:* Miller, Mark M (EB SW Cloud - R&D - Corvallis)
> *Cc:* Dolph Mathews; OpenStack Development Mailing List
> *Subject:* Re: [keystone] Split the Identity Backend blueprint****
>
>  ****
>
> On 07/22/2013 01:38 PM, Miller, Mark M (EB SW Cloud - R&D - Corvallis)
> wrote:****
>
> Hello,****
>
>  ****
>
> I have been reading source code in an attempt to figure out how to use the
> new split backend feature, specifically how to split the identity data
> between an ldap server and the standard Keystone sql database. However, I
> haven’t been able to figure it out quite yet. Does someone have some
> examples of this new feature in action? Is there another configuration file
> that is required?****
>
>  ****
>
>                 [identity]****
>
>                 driver = driver = keystone.identity.backends.sql.Identity*
> ***
>
>  ****
>
>                 [assignment]****
>
>                 driver = ???****
>
>  ****
>
>                 [ldap]****
>
>                 Quite a few options****
>
>  ****
>
> Regards,****
>
>  ****
>
> Mark Miller****
>
>
> RIght now the only support split approach is LDAP for Identity, SQL for
> assignments.
>
> [identity] ****
>
>  driver = keystone.identity.backends.ldap.Identity****
>
>  ****
>
> [assignment] ****
>
> driver = keystone.assignment.backends.sql.Identity****
>
> ** **
>
>
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20130723/9bb1cc28/attachment.html>


More information about the OpenStack-dev mailing list