On 12/04/2015 04:26 PM, Armando M. wrote:


On 4 December 2015 at 10:02, Kevin Benton <[email protected]
<mailto:[email protected]>> wrote:

    So obviously the stuff in the client can be updated since most of
    that is user-facing. However, on the server side maybe we can start
    out by keeping all of the internal code and DB tables the same. Then
    all we need to worry about is the API translation code to start.

    Once our public-facing stuff is done, we can just start the
    transition to project_id internally at our own pace and in much less
    invasive chunks.


This plan is sensible, and kudos to Dariusz to take it on...this is no
small feat of engineering and it won't be the effort of a single...we're
all here to help. Let me state the obvious and remind that this is not a
mechanical search and replace effort. We gotta be extra careful to
support both terms in the process.

To sum it up I see the following steps:

1) Make or figure out how the server can talk to the v3 API - which is
bug 1503428. If Monty is unable to tackle it soon, I am sure he'll be
happy to hand it back and Darius, perhaps, can take over

I will hack on this next week - sorry for the delay so far. I'd love to do a first rough pass and then get Darius to look at it and tell me where I'm insane.

This will ensure that if for whatever reason v2 gets pulled out tomorrow
(not gonna happen, but still), we're not left high and dry. To achieve
this, I think we don't invasively need to change tenant id with project
id, but only where it's key to get/validate a token.

++

2) Start from the client to allow to handle both project_id and tenant_id.

The server must be enhanced to be able to convert project_id to
tenant_id on the fly. The change should be relatively limited in a few
places, like where the request come in. At this time nothing else is
required to change in the server.

From an auth perspective, keystoneauth will handle both tenant and project as auth parameters (and I've got a patch coming to neutronclient to help get that all fleshed out too)

From the server/api side and client lib side where people are passing in tenant_ids to neutron resources because it's important to associate a resource with a tenant/project - I think this is a GREAT plan, and thank you for doing it this way. As a consumer of your API, I neither want to have to change my code to the new version, or write new code using the old version (thus perpetuating the move in history)

I would suggest/request if there is a way (and this might be _terrible_ to mark tenant_id in the _docs_ as either hidden or deprecated, so that new users don't write new code using it - but of course we should continue to accept tenant_id until the end of time because of how much we love our users.

3) Tackle the data model.

I wonder if we could leverage some sqlalchemy magic to support both
project_id and tenant_id in the db logic, seamlessly....something worth
investigating (zzzeek may be of help here). The sooner we start here,
the sooner we catch and fix breakages

4) Tackle the codebase sweep.

As for projects that use neutron and use the internal APIs, I can't see
a clean way of handling the bw compat if not by sprinkling decorators
that will take the signature of all the affected methods and convert the
tenant_id, but we could definitely explore how this would look like.

Yah. That one is going to be yuck. I'm happy to hand people beer ... :)


    On Thu, Dec 3, 2015 at 10:25 AM, Smigiel, Dariusz
    <[email protected] <mailto:[email protected]>> wrote:

        Hey Neutrinos (thanks armax for this word :),
        Keystone is planning to deprecate V2 API (again :). This time in
        Mitaka [6], and probably forever. It will stay at least four
        releases, but we need to decide, how to conquer problem of
        renaming...
        And more important: consider if it's a problem for Neutron?

        I'm looking at blueprint [1] about renaming all occurrences of
        'tenant' to 'project', and trying to find out all the details.
        First attempt to solve this problem was raised in November 2013
        [4][5] but unfortunately, no one finished it. Although Keystone
        V3 API is already supported in Neutron client [2], there are
        still some unknowns about Neutron server side. Monty Taylor is
        trying to address necessary (if any) changes [3].

        Findings:
        I've focused on two projects: python-neutronclient and neutron.
        grep found 429 occurrences of 'tenant' in Client while Server
        has 3021 of it. Some of them are just documentation and
        docstrings, but there are a lot of places, where variables are
        tangled: defined in DB, used in server, accessed by client. Most
        of places are just internal usages. The only thing where I've
        found 'public' information about tenants is 'help' command in
        neutron client.

        Suggested plan for conquer:
        1. First step would be to deal with neutronclient. It's much
        smaller amount of code to look through, update all places and be
        successful :)
        2. Bigger challenge will be to change server side code. I'd
        suggest to start with renaming db columns. It affects a lot of
        places, so when finished should significantly lower number of
        remained "tenants".
        3. Deal with all other places.

        Pros:
        - variable names unification in OpenStack code base. Someone
        needs to start this job.
        - one way to describe the same thing, instead of:
        tenant/account/project. Helpful, especially for newcomers.
        - alignment with Keystone V3 API

        Cons:
        - A. Lot. Of. Work.
        - dealing with DB migrations
        - about 2-4 weeks of work for every part of code. Additional, a
        lot of patchsets to be reviewed.

        What do you think about this? About proposed way of dealing with
        all changes?
        Is this change necessary?
        Did I forget about something?

        I'll be grateful for any kind of feedback.

        Thanks,
          Dariusz Smigiel (dasm)
          Intel Technology Poland

        [1]
        https://blueprints.launchpad.net/neutron/+spec/rename-tenant-to-project
        [2]
        
https://blueprints.launchpad.net/python-neutronclient/+spec/keystone-api-v3-support
        [3] https://bugs.launchpad.net/neutron/+bug/1503428
        [4]
        
http://lists.openstack.org/pipermail/openstack-dev/2013-November/020457.html
        [5]
        
http://lists.openstack.org/pipermail/openstack-dev/2013-December/021083.html
        [6]
        
http://lists.openstack.org/pipermail/openstack-dev/2015-November/080816.htm

        
__________________________________________________________________________
        OpenStack Development Mailing List (not for usage questions)
        Unsubscribe:
        [email protected]?subject:unsubscribe
        <http://[email protected]?subject:unsubscribe>
        http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




    --
    Kevin Benton

    __________________________________________________________________________
    OpenStack Development Mailing List (not for usage questions)
    Unsubscribe:
    [email protected]?subject:unsubscribe
    <http://[email protected]?subject:unsubscribe>
    http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: [email protected]?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev



__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: [email protected]?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to