[openstack-dev] [keystone][nova][cinder][horizon][all] properties / metadata for resources

Jay Pipes jaypipes at gmail.com
Sat Nov 5 22:15:51 UTC 2016


On 11/05/2016 01:15 AM, Steve Martinelli wrote:
> The keystone team has a new spec being proposed for the Ocata release,
> it essentially boils down to adding properties / metadata for projects
> (for now) [1].

Yes, I'd seen that particular spec review and found it interesting in a 
couple ways.

> We have somewhat had support for this, we have an "extras" column
> defined in our database schema, whatever a user puts in a request that
> doesn't match up with our API, those key-values are dumped into the
> "extras" column. It's not a pleasant user experience, since you can't
> really "unset" the data easily, or grab it, or update it. There's
> actually been patches to keystoneclient for getting around this, but its
> rather hacky and hardcodes a lot of values [2] [3]

"not a pleasant user experience" would be an understatement :)

In addition to the unpleasant user experience, there is the additional 
problem that jamming such information into a JSON BLOB and storing it in 
a TEXT field in a relational database means none of the information 
stored in the field can be indexed which means there's no ability to 
search on particular key or value information.

> I've added nova and cinder here since the APIs that are being proposed
> are more or less carbon copies of what is available through their APIs
> (for server and volumes, respectively). What has been your project's
> experience with handling metadata / properties? I assume that its been
> there a while and you can't remove it. If you could go back and redo
> things, would you do it another way? Would you take a more purist stance
> and enforce more strict APIs, metadata be damned?

Yes. I would get rid of the server metadata API that is in the Compute 
API. I believe the server tags API in the Compute API is appropriate for 
user-defined taxonomy of servers. For non user-defined things like 
system metadata, I prefer to have schema-defined attributes that are 
standardize and typed but a structured "properties" API can be useful as 
long as the key and value fields are indexable and reasonably sized.

> I also added horizon because i'm curious about the impact this causes
> when representing a resource.
>
> Personally, I am for the idea, we've had numerous requests from
> operators about providing this support and I like to make them happy.

I am most concerned actually about the resistance from some in the 
Keystone contributor community to storing quota *limits* [1] for users 
and projects. Right now, every service project needs to store 
information about quota limits for all users and projects, and the 
services each do this annoyingly differently. Keystone is the thing that 
stores attributes of a user or a project. Limits of various quantitative 
resources in the system are an attribute of a user or a project. This 
information belongs in Keystone, IMHO, with a good REST API that other 
services can use to grab this information.

Best,
-jay

[1] limits, not usages.



More information about the OpenStack-dev mailing list