Hi David, Yes, that is another way of describing it. I think, for IceHouse, there are a number of discussion to be had around whether role should stay a simple name/id, or whether it should have structure/attributes. There is already one proposal to give it a ServiceID, another we have often discussion is whether it should have a domain attribute. IWe'll have to think long and hard about what we do there.
Henry On 20 Jun 2013, at 09:16, David Chadwick wrote: > Hi Henry > > I (think I) understand what you are trying to do. To rephrase it from a > different angle, you are trying to assign virtual roles in projects that > currently dont exist, to users now, so that when these projects may > eventually come into existence, these users will automatically have real > roles in these new projects. You have no idea what these new projects might > be, but you have the entire virtual space covered. > > Thinking to the future, an alternative model is to have global hierarchical > role names (domain.role, domain.project.role) and to assign the role *.*.role > to someone now. > > regards > > David > > On 19/06/2013 23:05, Henry Nash wrote: >> Hi David, >> >> Thanks for digging into this. So here is a very specific use case: >> >> a) A cloud provider (CP) creates a domain (Pepsi)for new customer, within >> which the customer will be able to create their users, groups and projects. >> b) As part of the on-boarding process, the CP creates an admin user and >> admin_group within the Pepsi domain, and assigns them the "DomainAdmin" role >> against the Pepsi domain. The policy file is set up so that >> user/group/project management requires the api caller to have DomainAdmin on >> the domain in question. The CP gives the log in name/password to the >> person who works for Pepsi who will be the first admin user. So far so good >> - then can add more admins to their (domain specific) admin_group and go on >> the merry way. >> c) However, part of the SLA between the CP and their customers is that the >> CP can do things like migrate VMs to do maintenance on hosts etc. For this >> nova requires that they have (say) the VM_Admin role. Given that it is the >> Pepsi admin who will create all the projects in their domain, how is it that >> the CP ensures they have VM_Admin assigned to some CP admin use or admin >> group of their choosing (and that they might change in the future, and don't >> want to have ask the Pepsi admin to do anything special)? >> >> This is the classic example I am solving, within the following constraints: >> >> - We don't want to change the definition of a role (e.g. make roles domain >> specific)...too big a change, and needs much more discussion >> - We are, for now, stuck with the keystone notion of a role assignment is a >> 3-party deal (actor, role and target). >> >> My proposal, which is an extension so that we are not committing it to core, >> is to allow the CP to assign a role to a domain that is inherited to >> projects within that domain. The Pepsi administrator cannot remove this >> role, since the policy rule would require that the a API caller was in the >> same domain as the role-assignment actor being removed. >> >> Henry >> On 19 Jun 2013, at 20:56, David Chadwick wrote: >> >>> hI Henry >>> >>> looking to the ICEy future, would the following work (and be simpler)? >>> >>> On 19/06/2013 16:47, Henry Nash wrote: >>>> Hi >>>> >>>> So I don't doubt there are many ways of articulating the targeted >>>> objects - and a more comprehensive solution might involve the mapping >>>> you mention (although that's definitely not a Havana discussion!). >>>> >>>> We do, however, have an existing serious hole in our current apis & >>>> policy protection that limits the ability of a cloud provider to >>>> delegate admin responsibility for a domain to a customer, >>> >>> There is a specific role created for that domain, call it adminX, and this >>> role is assigned to the customer >>> >>> while still >>>> ensuring they maintain certain roles over all projects created in >>> >>> not sure what you mean by maintain certain roles. Do you mean administer >>> the roles in the domain? and if so, CRUD the roles or only assign/de-assign >>> users to roles. >>> >>>> that customer domain (without the ability of the customer admin >>>> removing them!). >>> >>> So the privilege that is NOT assigned to role adminX is to delete certain >>> roles, but the privilege to assign and remove users from these roles is >>> given to it. >>> >>> The privilege to CRUD these certain roles remains with the cloud provider >>> role, whilst adminX can crud other roles. >>> >>> I am trying to understand your use case so as to try to design a cleaner >>> model for it >>> >>> regards >>> >>> David >>> >>> This is the use case I am trying to solve first and >>>> foremost. This is a subset of the general problem, and using the >>>> domain as the container to specify applying to all current and future >>>> projects (which I call inheritance) is, I believe, the most >>>> appropriate. However, as we agreed, this should be an extension, >>>> since we are likely to settle on a more comprehensive re-write of >>>> these APIs for IceHouse. >>>> >>>> As per the keystone IRC meeting, I have now done the following: >>>> >>>> 1) Removed all mention of multiple target objects (and hence >>>> inheritance) from the newly proposed GET /role-assignment API (that >>>> replaces the various broken ones we have removed from the spec). >>>> This updated API is now available for review at: >>>> https://review.openstack.org/#/c/32394/8 >>>> >>>> 2) Moved the "inherit roles from parent domain" extension to role >>>> assignment setting to an extension. This API is available for review >>>> at: https://review.openstack.org/#/c/29781/15 >>>> >>>> I think this is a good way to proceed, unless anyone has significant >>>> objections. >>>> >>>> Henry On 19 Jun 2013, at 15:36, Adam Young wrote: >>>> >>>>> The more I think about it, the more I think that tying the >>>>> inheritance to the domain assignment is the wrong solution. >>>>> >>>>> David/Kristy originally had the Mapping blueprint and patch. It >>>>> contained the ability to provide arbitrary rules for mapping from >>>>> the identity attributes to the roles. I think that it is time to >>>>> implement that. >>>>> >>>>> It would be more correct to say that all users in a specific group >>>>> (fetched out of Identity/LDAP) would get a specific role in a >>>>> project than to say that a user with a domain role should therefore >>>>> inherit a role in all projects. >>>>> >>>>> When creating a scoped token, we need to query a subset of the >>>>> users identity information. I think that the right direction for >>>>> this query to flow would be: >>>>> >>>>> project->roles->role-mappings->groups >>>>> >>>>> as opposed to what we do now, which is to do a global query: give >>>>> me all groups for this user and select which ones apply. For >>>>> LDAP/SQL Identity backends we want to trigger the miniaml query >>>>> which is "let me know if the user is in groups G1, G2, G3..." as >>>>> those are the groups that potentially apply to role assignments for >>>>> this project. >>>>> >>>>> >>>>> So I'd like to redefine the problem definition here: >>>>> >>>>> "Provide a mechanism by which role assignments can be specified for >>>>> more than one project." One such rule would obviously be "all >>>>> projects in domain D1" >>>>> >>>>> But it should be based on groups, not on domain role assignments. >>>>> >>>>> >>>>> >>>>> >>>>> On 06/10/2013 11:41 AM, David Chadwick wrote: >>>>>> >>>>>> >>>>>> On 10/06/2013 16:02, Henry Nash wrote: >>>>>>> Hi David, >>>>>>> >>>>>>> I wasn't suggesting that we encode "inhertitness" in the name, >>>>>>> just that if you want to have a role that is non-inherited and >>>>>>> one that is inherited that relate to the same type of >>>>>>> permission, then since role name must be globally unique, then >>>>>>> the two roles must have different names....hence potentially >>>>>>> leading to the complication in the policy file. >>>>>> >>>>>> I dont see why different role names would lead to complications >>>>>> in the policy file, since policies are there to assign different >>>>>> permissions to different roles. >>>>>> >>>>>> What can happen is that policy files can get very large and >>>>>> complex, but that can happen regardless of whether roles are >>>>>> inherited or not, and mistakes can be made by assigning the wrong >>>>>> roles to users or the wrong permissions to roles, but again this >>>>>> is independent of the role definition. >>>>>> >>>>>> regards >>>>>> >>>>>> David >>>>>>> >>>>>>> Henry On 10 Jun 2013, at 15:57, David Chadwick wrote: >>>>>>> >>>>>>>> Hi Henry >>>>>>>> >>>>>>>> on the definition of inherited roles, I dont think this >>>>>>>> should be part of the role name, but rather, each role should >>>>>>>> have meta information attached to it, in its role table >>>>>>>> definition, that indicates the properties of the role >>>>>>>> definition. In this way, you can make the role definition >>>>>>>> extensible by adding new columns to the table as and when >>>>>>>> needed e.g. if in future you want to have global roles >>>>>>>> inherited by domains, you add a new column, say >>>>>>>> GlobalToDomain, which could be a boolean with a default value >>>>>>>> of false, and with a value true indicating that it is >>>>>>>> inherited from global to domain. All pre-existing roles would >>>>>>>> not be of this type, and therefore all pre-existing code >>>>>>>> would work without this new inheritance. >>>>>>>> >>>>>>>> I would not alter the role-user assignment API as this >>>>>>>> should simply specify the role and user and project. The code >>>>>>>> may need enhancing in the future, if new types of inheritance >>>>>>>> are added, in order to cater for cases where the role is >>>>>>>> wrongly specified by the administrator i.e. it does not apply >>>>>>>> to the project in question through lack of inheritance. >>>>>>>> >>>>>>>> regards >>>>>>>> >>>>>>>> David >>>>>>>> >>>>>>>> On 08/06/2013 11:38, Henry Nash wrote: >>>>>>>>> So on the idea of using the role def for inheritance >>>>>>>>> definition, there were a couple of things that concerned me >>>>>>>>> about it: >>>>>>>>> >>>>>>>>> 1) While it definitely can simply the api changes required >>>>>>>>> for the current requirements, I worry that we are passing >>>>>>>>> the complexity on to the creation of the policy file. >>>>>>>>> Since the role names of an inherited and non-inherited role >>>>>>>>> will obviously have to be different, is there a danger that >>>>>>>>> policy files end up with lots of rules that have "role: >>>>>>>>> xxxx and role: xxxx_inherited"? I guess we can make the >>>>>>>>> argument that since (with today's requirements at least) >>>>>>>>> the only objects that will end of inheriting an assignment >>>>>>>>> will be projects, the likelihood is that the api lines in >>>>>>>>> the policy file that contains inherited and non-inherited >>>>>>>>> will be different, hence avoiding the problem. However, if, >>>>>>>>> in the future, we were to expand inheritance to support all >>>>>>>>> domains, or all projects in all domains, then this problem >>>>>>>>> would arise for domain-relevant apis lines in the policy >>>>>>>>> file. >>>>>>>>> >>>>>>>>> 2) If, again, in the future we support inheritance across >>>>>>>>> all domains/projects - would we need to more fine grained >>>>>>>>> control of the inheritance? For instance, we want a role >>>>>>>>> that was inherited by all domains, but not the projects in >>>>>>>>> each domain? Perhaps, one could imagine expanding the >>>>>>>>> role-def to somehow indicate this (maybe rather than just >>>>>>>>> having a simple "inherited" boolean, we specify >>>>>>>>> "project_inherited", to which we could, in the future, add >>>>>>>>> "domain_inherited"?). We also have the problem of how you >>>>>>>>> assign such a role? I guess you would still need some kind >>>>>>>>> of modification to the assignment APIs to indicate "all >>>>>>>>> domains" (perhaps the "domains/*" that was suggested)? >>>>>>>>> >>>>>>>>> I'd be interested in views on the above - I'm Ok fi we >>>>>>>>> decide that role-def is the right way to go, but want to >>>>>>>>> make sure we clearly understand how we would expand this in >>>>>>>>> the future. >>>>>>>>> >>>>>>>>> Henry On 7 Jun 2013, at 18:12, Dolph Mathews wrote: >>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Thu, Jun 6, 2013 at 5:48 AM, David Chadwick >>>>>>>>>> <d.w.chadw...@kent.ac.uk >>>>>>>>>> <mailto:d.w.chadw...@kent.ac.uk>> wrote: >>>>>>>>>> >>>>>>>>>> Hi Henry >>>>>>>>>> >>>>>>>>>> My take on this is that whether a role is automatically >>>>>>>>>> inheritable or not should be an attribute of the role >>>>>>>>>> itself, and should be independent of who the role is >>>>>>>>>> assigned to. Therefore when the role is initially >>>>>>>>>> defined, it should be stated by the Keystone admin >>>>>>>>>> whether it is an inherited role or not. >>>>>>>>>> >>>>>>>>>> Role assignment is a separate issue and should not be >>>>>>>>>> confused with the basic definition of the role. Role >>>>>>>>>> assignment should simply be a matter of naming the >>>>>>>>>> subject (domain, project or user) and the role. If you >>>>>>>>>> dont want the role to be inherited then use a >>>>>>>>>> non-inheritable role. >>>>>>>>>> >>>>>>>>>> The problem with all the APIs below is that they conflate >>>>>>>>>> role definition and role assignment together in the same >>>>>>>>>> API call. There should be no need to have user_ids in the >>>>>>>>>> definition of a role. Similarly there should be no >>>>>>>>>> mention of inherited in the assignment of a role to a >>>>>>>>>> user. >>>>>>>>>> >>>>>>>>>> regards >>>>>>>>>> >>>>>>>>>> David >>>>>>>>>> >>>>>>>>>> +1; I really like the simplicity of this approach, and >>>>>>>>>> it sounds like something we can migrate to easily (e.g. >>>>>>>>>> default inheritable=False for existing roles). Then >>>>>>>>>> global role assignments would follow an API like: >>>>>>>>>> >>>>>>>>>> GET /users/{user_id}/roles # list global roles HEAD >>>>>>>>>> /users/{user_id}/roles/{inheritable_role_id} # check if >>>>>>>>>> a global role is assigned PUT >>>>>>>>>> /users/{user_id}/roles/{inheritable_role_id} # assign a >>>>>>>>>> global role DELETE >>>>>>>>>> /users/{user_id}/roles/{inheritable_role_id} # revoke a >>>>>>>>>> global role >>>>>>>>>> >>>>>>>>>> where a non-inheritable role assigned a user without a >>>>>>>>>> domain or project for context wouldn't make any sense. In >>>>>>>>>> fact, assigning an inheritable role to a user on a >>>>>>>>>> project wouldn't be very useful (as it wouldn't inherit >>>>>>>>>> to anything in the core API), but I don't see a reason to >>>>>>>>>> deny it. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 05/06/2013 15:31, Henry Nash wrote: >>>>>>>>>> >>>>>>>>>> Hi >>>>>>>>>> >>>>>>>>>> As per the discussion during the keystone IRC meeting >>>>>>>>>> yesterday, I have been reviewing the proposals for this >>>>>>>>>> functionality. There have been two objections to the >>>>>>>>>> current proposal (which can be found here: >>>>>>>>>> https://review.openstack.org/#__/c/29781/10 >>>>>>>>>> <https://review.openstack.org/#/c/29781/10>), which are: >>>>>>>>>> >>>>>>>>>> 1) The api changes should allow for a logical, generic >>>>>>>>>> future extension for support of inherited roles across >>>>>>>>>> all domains etc., should we chose to go that route 2) The >>>>>>>>>> use of a single api to list the various grants, filtered >>>>>>>>>> by a query string if necessary. >>>>>>>>>> >>>>>>>>>> My proposal for handling these two objections is as >>>>>>>>>> follows: >>>>>>>>>> >>>>>>>>>> 1) API extensions. >>>>>>>>>> >>>>>>>>>> There are several aspects of inherited roles that we are >>>>>>>>>> trying to cement, which are: >>>>>>>>>> >>>>>>>>>> a) The are dynamic - i.e. this isn't a case of a short >>>>>>>>>> hand for saying add this role to all the current projects >>>>>>>>>> in the domain - rather it is a role assignment that is >>>>>>>>>> attached to the domain but is added to the effective >>>>>>>>>> roles of any project (now and in the future) that exists >>>>>>>>>> in this domain b) The are separate from a role that is on >>>>>>>>>> the domain itself - i.e. we need to ensure that we keep >>>>>>>>>> separate inherited and non-inherited roles. c) Maintain >>>>>>>>>> the philosophy that If you can create a role assignment >>>>>>>>>> with a given API, there should be an equivalent to read >>>>>>>>>> it back and delete it (i.e. you mustn't have the case >>>>>>>>>> where, for instance you can list a grant, but can't >>>>>>>>>> delete it at the conceptual level) >>>>>>>>>> >>>>>>>>>> The current proposal had been to do this by adding an >>>>>>>>>> "inherited" component of the url for create, check and >>>>>>>>>> delete grants to a domain, e.g. >>>>>>>>>> >>>>>>>>>> PUT >>>>>>>>>> /domains/{domain_id}/users/{__user_id}/roles/{role_id} >>>>>>>>>> PUT >>>>>>>>>> /domains/{domain_id}/users/{__user_id}/roles/{role_id}/__inherited >>>>>>>>>> >>>>>>>>>> >>>>>> >>>>>>>>>> >>> GET /domains/{domain_id}/users/{__user_id}/roles/{role_id} >>>>>>>>>> GET >>>>>>>>>> /domains/{domain_id}/users/{__user_id}/roles/{role_id}/__inherited >>>>>>>>>> >>>>>>>>>> >>>>>> >>>>>>>>>> >>> DELETE /domains/{domain_id}/users/{__user_id}/roles/{role_id} >>>>>>>>>> DELETE >>>>>>>>>> /domains/{domain_id}/users/{__user_id}/roles/{role_id}/__inherited >>>>>>>>>> >>>>>>>>>> >>>>>> >>>>>>>>>> >>> etc. >>>>>>>>>> >>>>>>>>>> A counter proposal has been made to expand this, along >>>>>>>>>> this lines of: >>>>>>>>>> >>>>>>>>>> Role applicable to all projects within a domain PUT >>>>>>>>>> /domains/{domain_id}/users/{__user_id}/roles/{role_id}/__projects >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>> >>>>>>>>>> >>> Roles inherited by all projects in all domains >>>>>>>>>> PUT /usrs/{user_id}/roles/{role___id}/projects >>>>>>>>>> >>>>>>>>>> Roles inherited by all domains, at the domain level PUT >>>>>>>>>> /usrs/{user_id}/roles/{role___id}/domains >>>>>>>>>> >>>>>>>>>> While I understand the desire to have extensibility if we >>>>>>>>>> wish to provide more "global-ness" of roles, I think the >>>>>>>>>> above proposal is less clear about whether these >>>>>>>>>> assignments are dynamic (see item a) above). How about >>>>>>>>>> this as a counter proposal: >>>>>>>>>> >>>>>>>>>> Role applicable inherited by all projects within a domain >>>>>>>>>> (this is the same as the current proposal) PUT >>>>>>>>>> /domains/{domain_id}/users/{__user_id}/roles/{role_id}/__inherited >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>> >>>>>>>>>> >>> Roles inherited by all projects in all domains - if we were to >>>>>>>>>> ever support this (not part of the current proposal) PUT >>>>>>>>>> /domains/users/{user_id}/__roles/{role_id}/inherited >>>>>>>>>> >>>>>>>>>> Roles inherited by all domains, at the domain level - if >>>>>>>>>> we were to ever support this (not part of the current >>>>>>>>>> proposal) PUT >>>>>>>>>> /domains/users/{user_id}/__roles/{role_id}/inherited >>>>>>>>>> >>>>>>>>>> To go along with the above, you would have the respective >>>>>>>>>> GET, CHECK & DELETE versions of those apis. >>>>>>>>>> >>>>>>>>>> 2) Single vs multiple apis I think this comment is >>>>>>>>>> actually misplaced in the gerrit review, and is intended >>>>>>>>>> to directed at the api extensions I proposed to allow the >>>>>>>>>> list of a users "effective" roles on a project (i.e. >>>>>>>>>> directly assigned, those by virtue of group membership >>>>>>>>>> and inheritance from the parent domain). For this, I >>>>>>>>>> proposed adding an optional "effective" query parameter >>>>>>>>>> to each of: >>>>>>>>>> >>>>>>>>>> List user's roles on project: `GET >>>>>>>>>> /projects/{project_id}/users/{__user_id}/roles List >>>>>>>>>> group's roles on project: `GET >>>>>>>>>> /projects/{project_id}/groups/__{group_id}/roles Check >>>>>>>>>> user's role on project: `GET >>>>>>>>>> /projects/{project_id}/users/{__user_id}/role/{role_id} >>>>>>>>>> Check group's roles on project: `GET >>>>>>>>>> /projects/{project_id}/groups/__{group_id}/role/{role_id} >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>> e.g. GET >>>>>>>>>> /projects/{project_id}/users/{__user_id}/roles?effective >>>>>>>>>> ...would get you the effective roles the user has on >>>>>>>>>> that project, as opposed to only the directly assigned >>>>>>>>>> ones if you issue the call without the "effective" query >>>>>>>>>> parameter. >>>>>>>>>> >>>>>>>>>> Dolph and I had already been discussing that the existing >>>>>>>>>> v3 api of: >>>>>>>>>> >>>>>>>>>> GET /users/{user_id}/roles >>>>>>>>>> >>>>>>>>>> ...which is meant to return all the role assignments for >>>>>>>>>> a user, but is in fact broken in the current Grizzly code >>>>>>>>>> (it always returns an error). So I agree with the >>>>>>>>>> proposal that we should scrap the "effective" query >>>>>>>>>> parameter for the specific list/check calls for the >>>>>>>>>> project - and instead properly implement the "get all >>>>>>>>>> assignments for a user" call. I propose the amended spec >>>>>>>>>> for this call is: >>>>>>>>>> >>>>>>>>>> #### List a user's effective role assignments: `GET >>>>>>>>>> /users/{user_id}/role-__assignments` >>>>>>>>>> >>>>>>>>>> query_string: page (optional) query_string: per_page >>>>>>>>>> (optional, default 30) query_string: id, project_id, >>>>>>>>>> domain_id >>>>>>>>>> >>>>>>>>>> Response: >>>>>>>>>> >>>>>>>>>> Status: 200 OK >>>>>>>>>> >>>>>>>>>> [ { "id": "--role-id--", "name": "--role-name--", >>>>>>>>>> "project_id": "--project-id--", "source": { "direct": >>>>>>>>>> true, (optional) "domain_inherited: "--domain-id--", >>>>>>>>>> (optional) "group_membership: "--group-id--" (optional) } >>>>>>>>>> }, { "domain_id": "--domain-id--", "id": "--role-id--", >>>>>>>>>> "name": "--role-name--", "source": { "direct": true, >>>>>>>>>> (optional) "group_membership: "--group-id--" (optional) } >>>>>>>>>> } ] >>>>>>>>>> >>>>>>>>>> The "source" structure must have at least one of the >>>>>>>>>> values given above (and could have more than one, e.g. >>>>>>>>>> both domain_inherited and global_membership for a project >>>>>>>>>> where the role is due to a group role that is inherited >>>>>>>>>> from the domain). If were even to support global roles >>>>>>>>>> across all domains, then we would extend the "source >>>>>>>>>> structure" accordingly. I'm open to other options for >>>>>>>>>> the above format. however, so comments welcome. >>>>>>>>>> >>>>>>>>>> Does this sounds like a reasonable plan overall? >>>>>>>>>> >>>>>>>>>> Henry >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> _________________________________________________ >>>>>>>>>> OpenStack-dev mailing list >>>>>>>>>> OpenStack-dev@lists.openstack.__org >>>>>>>>>> <mailto:OpenStack-dev@lists.openstack.org> >>>>>>>>>> http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev >>>>>>>>>> >>>>>>>>>> >>>>>> >>>>>>>>>> >>> <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> _________________________________________________ >>>>>>>>>> OpenStack-dev mailing list >>>>>>>>>> OpenStack-dev@lists.openstack.__org >>>>>>>>>> <mailto:OpenStack-dev@lists.openstack.org> >>>>>>>>>> http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev >>>>>>>>>> >>>>>>>>>> >>>>>> >>>>>>>>>> >>> <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> _______________________________________________ >>>>>>>>>> OpenStack-dev mailing list >>>>>>>>>> OpenStack-dev@lists.openstack.org >>>>>>>>>> <mailto:OpenStack-dev@lists.openstack.org> >>>>>>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>> >>>>>>>>>> >>> _______________________________________________ >>>>>>>>> OpenStack-dev mailing list >>>>>>>>> OpenStack-dev@lists.openstack.org >>>>>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>>>>> >>> _______________________________________________ >>>>>> OpenStack-dev mailing list OpenStack-dev@lists.openstack.org >>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>>>> >>>>> >>>>> >>>>>> >>> _______________________________________________ >>>>> OpenStack-dev mailing list OpenStack-dev@lists.openstack.org >>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>>>> >>>> >>>> >>>> _______________________________________________ OpenStack-dev mailing >>>> list OpenStack-dev@lists.openstack.org >>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>>> >>> >> > _______________________________________________ OpenStack-dev mailing list OpenStack-dev@lists.openstack.org http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev