On 03/27/2018 12:42 PM, Matt Riedemann wrote:
On 3/27/2018 10:37 AM, Jay Pipes wrote:
If we want to actually fix the issue once and for all, we need to make availability zones a real thing that has a permanent identifier (UUID) and store that permanent identifier in the instance (not the instance metadata).

Aggregates have a UUID now, exposed in microversion 2.41 (you added it). Is that what you mean by AZs having a UUID, since AZs are modeled as host aggregates?

Kind of. AZs are not actually a "thing" in Nova, as you know. They are just a hacked-up key/value metadata item on the nova host aggregate that has some "special" meaning and tribal knowledge [0] associated with it.

And, of course, nova host aggregates are not visible to normal end users, which makes the coupling of AZ to host aggregate metadata even more hacky.

One of the alternatives in the spec is not relying on name as a unique identifier and just make sure everything is held together via the aggregate UUID, which is now possible.

A few things are needed:

1) Stop *referring* to the AZ by name in the instance_metadata item corresponding to the availability_zone key. Instead, use the aggregate's UUID.

2) Stop using the instance_metadata to store this information. On nova boot --availability-zone=$ZONE_NAME, nova-api should look up the aggregate having the name of $ZONE_NAME, and store the internal aggregate ID in a new instance_mappings.availability_zone_id column. The UUID of this aggregate should be placed into a new build_requests.availability_zone_uuid column/attribute and passed along through the scheduler to the cell control plane, where it should be stored in the cell DB's instances table as a new field "availability_zone_uuid". In this way, outside of the Nova API database we always refer to the availability zone using the external UUID, never the name or the internal ID.

3) Add an attribute to the nova API database aggregates [1] table called "visibility" that can indicate whether the aggregate is publicly-visible or not. That way, the operator can establish groups of compute resources that can be viewed by a normal end user (availability zones, regions, sub-regions, power-domains, whatever they want).

Best,
-jay

[0] Example of tribal knowledge is the fact that a single host aggregate cannot have the multiple availability zone metadata items associated with it: https://github.com/openstack/nova/blob/97042c0253be345beff3b99d08988cf95f60e759/nova/compute/api.py#L5066-L5083

[1] Or scrap nova host aggregates entirely and just move all this to the placement service/database, adding a name and visibility column to the placement_aggregates table...

__________________________________________________________________________
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

Reply via email to