Both proposals allow you to provide a path as the project name in auth (so you can still use domain name + project path name). The difference between the two is whether you formally represent the path in the name attribute of a project, i.e. when it is returned by GET /project. The relax name constraints works like the linux dir tree. If I do an ‘ls’ I get the node names of the all entities in that directory, but I can still do 'cd /a/b/c' to jump right to where I want.
Henry > On 3 Jun 2016, at 23:53, Morgan Fainberg <morgan.fainb...@gmail.com> wrote: > > > On Jun 3, 2016 12:42, "Lance Bragstad" <lbrags...@gmail.com > <mailto:lbrags...@gmail.com>> wrote: > > > > > > > > On Fri, Jun 3, 2016 at 11:20 AM, Henry Nash <henryna...@mac.com > > <mailto:henryna...@mac.com>> wrote: > >> > >> > >>> On 3 Jun 2016, at 16:38, Lance Bragstad <lbrags...@gmail.com > >>> <mailto:lbrags...@gmail.com>> wrote: > >>> > >>> > >>> > >>> On Fri, Jun 3, 2016 at 3:20 AM, Henry Nash <henryna...@mac.com > >>> <mailto:henryna...@mac.com>> wrote: > >>>> > >>>> > >>>>> On 3 Jun 2016, at 01:22, Adam Young <ayo...@redhat.com > >>>>> <mailto:ayo...@redhat.com>> wrote: > >>>>> > >>>>> On 06/02/2016 07:22 PM, Henry Nash wrote: > >>>>>> > >>>>>> Hi > >>>>>> > >>>>>> As you know, I have been working on specs that change the way we > >>>>>> handle the uniqueness of project names in Newton. The goal of this is > >>>>>> to better support project hierarchies, which as they stand today are > >>>>>> restrictive in that all project names within a domain must be unique, > >>>>>> irrespective of where in the hierarchy that projects sits (unlike, > >>>>>> say, the unix directory structure where a node name only has to be > >>>>>> unique within its parent). Such a restriction is particularly > >>>>>> problematic when enterprise start modelling things like test, QA and > >>>>>> production as branches of a project hierarchy, e.g.: > >>>>>> > >>>>>> /mydivsion/projectA/dev > >>>>>> /mydivsion/projectA/QA > >>>>>> /mydivsion/projectA/prod > >>>>>> /mydivsion/projectB/dev > >>>>>> /mydivsion/projectB/QA > >>>>>> /mydivsion/projectB/prod > >>>>>> > >>>>>> Obviously the idea of a project name (née tenant) being unique has > >>>>>> been around since near the beginning of (OpenStack) time, so we must > >>>>>> be cautions. There are two alternative specs proposed: > >>>>>> > >>>>>> 1) Relax project name constraints: > >>>>>> https://review.openstack.org/#/c/310048/ > >>>>>> <https://review.openstack.org/#/c/310048/> > >>>>>> 2) Hierarchical project naming: > >>>>>> https://review.openstack.org/#/c/318605/ > >>>>>> <https://review.openstack.org/#/c/318605/> > >>>>>> > >>>>>> First, here’s what they have in common: > >>>>>> > >>>>>> a) They both solve the above problem > >>>>>> b) They both allow an authorization scope to use a path rather than > >>>>>> just a simple name, hence allowing you to address a project anywhere > >>>>>> in the hierarchy > >>>>>> c) Neither have any impact if you are NOT using a hierarchy - i.e. if > >>>>>> you just have a flat layer of projects in a domain, then they have no > >>>>>> API or semantic impact (since both ensure that a project’s name must > >>>>>> still be unique within a parent) > >>>>>> > >>>>>> Here’s how the differ: > >>>>>> > >>>>>> - Relax project name constraints (1), keeps the meaning of the ‘name’ > >>>>>> attribute of a project to be its node-name in the hierarchy, but > >>>>>> formally relaxes the uniqueness constraint to say that it only has to > >>>>>> be unique within its parent. In other words, let’s really model this a > >>>>>> bit like a unix directory tree. > >>> > >>> I think I lean towards relaxing the project name constraint. The reason > >>> is because we already expose `domain_id`, `parent_id`, and `name` of a > >>> project. By relaxing the constraint we can give the user everything the > >>> need to know about a project without really changing any of these. When > >>> using 3.7, you know what domain your project is in, you know the > >>> identifier of the parent project, and you know that your project name is > >>> unique within the parent. > >>>>>> > >>>>>> - Hierarchical project naming (2), formally changes the meaning of the > >>>>>> ‘name’ attribute to include the path to the node as well as the node > >>>>>> name, and hence ensures that the (new) value of the name attribute > >>>>>> remains unique. > >>> > >>> Do we intend to *store* the full path as the name, or just build it out > >>> on demand? If we do store the full path, we will have to think about our > >>> current data model since the depth of the organization or domain would be > >>> limited by the max possible name length. Will performance be something to > >>> think about building the full path on every request? > >> > >> I now mention this issue in the spec for hierarchical project naming (the > >> relax naming approach does not suffer this issue). As you say, we’ll have > >> to change the DB (today it is only 64 chars) if we do store the full path > >> . This is slightly problematic since the maximum depth of hierarchy is > >> controlled by a config option, and hence could be changed. We will > >> absolutely have be able to build the path on-the-fly in order to support > >> legacy drivers (who won’t be able to store more than 64 chars). We may > >> need to do some performance tests to ascertain if we can get away with > >> building the path on-the-fly in all cases and avoid changing the table. > >> One additional point is that, of course, the API will return this path > >> whenever it returns a project - so clients will need to be aware of this > >> increase in size. > > > > > > These are all good points that continue to push me towards relaxing the > > project naming constraint :) > >>>>>> > >>>>>> > >>>>>> While whichever approach we chose would only be included in a new > >>>>>> microversion (3.7) of the Identity API, although some relevant APIs > >>>>>> can remain unaffected for a client talking 3.6 to a Newton server, not > >>>>>> all can be. As pointed out be jamielennox, this is a data modelling > >>>>>> problem - if a Newton server has created multiple projects called > >>>>>> “dev” in the hierarchy, a 3.6 client trying to scope a token simply to > >>>>>> “dev” cannot be answered correctly (and it is proposed we would have > >>>>>> to return an HTTP 409 Conflict error if multiple nodes with the same > >>>>>> name were detected). This is true for both approaches. > >>>>>> > >>>>>> Other comments on the approaches: > >>>>>> > >>>>>> - Having a full path as the name seems duplicative with the current > >>>>>> project entity - since we already return the parent_id (hence > >>>>>> parent_id + name is, today, sufficient to place a project in the > >>>>>> hierarchy). > >>>>> > >>>>> > >>>>> The one thing I like is the ability to specify just the full path for > >>>>> the OS_PROJECT_NAME env var, but we could make that a separate > >>>>> variable. Just as DOMAIN_ID + PROJECT_NAME is unique today, > >>>>> OS_PROJECT_PATH should be able to fully specify a project > >>>>> unambiguously. I'm not sure which would have a larger impact on users. > >>>>> > >>>> Agreed - and this could be done for both approaches (since this is all > >>>> part of the “auth data flow"). > >>>>> > >>>>> > >>>>>> - In the past, we have been concerned about the issue of what we do if > >>>>>> there is a project further up the tree that we do not have any roles > >>>>>> on. In such cases, APIs like list project parents will not display > >>>>>> anything other than the project ID for such projects. In the case of > >>>>>> making the name the full path, we would be effectively exposing the > >>>>>> name of all projects above us, irrespective of whether we had roles on > >>>>>> them. Maybe this is OK, maybe it isn’t. > >>>>> > >>>>> > >>>>> I think it is OK. If this info needs to be hidden from a user, the > >>>>> project should probably be in a different domain. > >>>>> > >>>>>> - While making the name the path keeps it unique, this is fine if > >>>>>> clients blindly use this attribute to plug back into another API to > >>>>>> call. However if, for example, you are Horizon and are displaying them > >>>>>> in a UI then you need to start breaking down the path into its > >>>>>> components, where you don’t today. > >>>>>> - One area where names as the hierarchical path DOES look right is > >>>>>> calling the /auth/projects API - where what the caller wants is a list > >>>>>> of projects they can scope to - so you WANT this to be the path you > >>>>>> can put in an auth request. > >>>>>> > >>>>>> Given that neither can fully protect a 3.6 client, my personal > >>>>>> preference is to go with the cleaner logical approach which I believe > >>>>>> is the Relax project name constraints (1), with the addition of > >>>>>> changing GET /auth/projects to return the path (since this is a > >>>>>> specialised API that happens before authentication) - but I am open to > >>>>>> persuasion (as the song goes). > >>>>>> > >>>>>> There are those that might say that perhaps we just can’t change this. > >>>>>> I would argue that since this ONLY affects people who actually create > >>>>>> hierarchies and that today such hierarchical use is in its infancy, > >>>>>> then now IS the time to change this. If we leave it too long, then it > >>>>>> will become really hard to change what will by then have become a > >>>>>> tough restriction. > >>>>>> > >>>>>> Henry > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> __________________________________________________________________________ > >>>>>> OpenStack Development Mailing List (not for usage questions) > >>>>>> Unsubscribe: > >>>>>> openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > >>>>>> <http://openstack-dev-requ...@lists.openstack.org/?subject:unsubscribe> > >>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > >>>>>> <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev> > >>>>> > >>>>> > >>>>> __________________________________________________________________________ > >>>>> OpenStack Development Mailing List (not for usage questions) > >>>>> Unsubscribe: > >>>>> openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > >>>>> <http://openstack-dev-requ...@lists.openstack.org/?subject:unsubscribe> > >>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > >>>>> <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev> > >>>> > >>>> > >>>> > >>>> __________________________________________________________________________ > >>>> OpenStack Development Mailing List (not for usage questions) > >>>> Unsubscribe: > >>>> openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > >>>> <http://openstack-dev-requ...@lists.openstack.org/?subject:unsubscribe> > >>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > >>>> <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev> > >>>> > >>> > >>> __________________________________________________________________________ > >>> OpenStack Development Mailing List (not for usage questions) > >>> Unsubscribe: > >>> openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > >>> <http://openstack-dev-requ...@lists.openstack.org/?subject:unsubscribe> > >>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > >>> <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev> > >> > >> > >> > >> __________________________________________________________________________ > >> OpenStack Development Mailing List (not for usage questions) > >> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > >> <http://openstack-dev-requ...@lists.openstack.org/?subject:unsubscribe> > >> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > >> <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev> > >> > > > > > > __________________________________________________________________________ > > OpenStack Development Mailing List (not for usage questions) > > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > > <http://openstack-dev-requ...@lists.openstack.org/?subject:unsubscribe> > > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > > <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev> > > > > My main concern with relaxing the uniqueness is you now have a significant > issue with auth changing. Fundamentally you cannot scope to a project under a > domain by name and domain name alone. This will break current auth paths and > auth mechanisms. > > I personally think we are a bit wedged even with microversions without > providing the full path as a name for projects created as such (and current > projects retaining the uniqueness or if created via the old api maintaining > the uniqueness constraint and new api projects not being represented at all). > > So in short, I am strongly against relaxing uniqueness. > > New (microversion) would make projects that are only represented by full > path. Old projects could be represented either way. (For auth/crud that uses > project names). > > Old microversion api (today) would require uniqueness constraint and not > show/allow full pathname projects. > > This way we do not break auth that works today. > > Most everyone consumes and stores by id (nova, cinder, etc) so we likely > won't break much with extended project names. > > __________________________________________________________________________ > OpenStack Development Mailing List (not for usage questions) > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
__________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev