Extending nova models

asked 2014-05-21 13:24:20 -0500

radekg gravatar image

Hi everyone,

This is my first question here. I hope I could get an answer for the problem I'm currently facing in the development of a nova API extension. I am trying to add a couple of API endpoints that would serve as an interface to the table storing some data. I was able to create an API endpoint by placing my extension in api/openstack/compute/contrib and modifying the policy.json file. This is now working.

I then added the migration to create a table to nova/db/sqlalchemy/migrate_repo_versions/245_add_custom_table.

After unstack.sh and stack.sh (I'm using devstack) I can see my table being created. Great.

Next, I proceeded with creating an object definition and created a file in nova/objects. I am basing myself on keypairs.py example ( https://github.com/openstack/nova/blob/2efd3faa3e07fdf16c2d91c16462e7e1e3f33e17/nova/api/openstack/compute/contrib/keypairs.py#L97 (https://github.com/openstack/nova/blo...) )


calls this https://github.com/openstack/nova/blob/839fe777e256d36e69e9fd7c571aed2c860b122c/nova/compute/api.py#L3512 (https://github.com/openstack/nova/blo...) the important part is

keypair = keypair_obj.KeyPair()
keypair.user_id = user_id
keypair.name = key_name
keypair.fingerprint = fingerprint
keypair.public_key = public_key

KeyPair() is https://github.com/openstack/nova/blob/master/nova/objects/keypair.py (https://github.com/openstack/nova/blo...)

this has a method https://github.com/openstack/nova/blob/master/nova/objects/keypair.py#L52 (https://github.com/openstack/nova/blo...) and it's calling db_keypair = db.key_pair_create(context, updates) db points to from nova import db

which I believe points to this https://github.com/openstack/nova/blob/master/nova/db/__init__.py (https://github.com/openstack/nova/blo...) which loads https://github.com/openstack/nova/blob/master/nova/db/api.py (https://github.com/openstack/nova/blo...) there's a function called https://github.com/openstack/nova/blob/master/nova/db/api.py#L922 (https://github.com/openstack/nova/blo...) key_pair_createhttps://github.com/openstack/nova/blob/master/nova/db/api.py#L924 (https://github.com/openstack/nova/blo...)

IMPL is https://github.com/openstack/nova/blob/master/nova/db/api.py#L69-L95 (https://github.com/openstack/nova/blo...) but where is IMPL.key_pair_create?

Is there an easy way to insert a record into the table? Thank you for any pointers.

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2014-05-22 16:48:40 -0500

radekg gravatar image

The way I resolved this is using my own sqlalchemy connection within an object class. It's not perfect but it works. I managed to replicate most of the functionality provided by db api, which I was not able to use in the beginning.

edit flag offensive delete link more

Get to know Ask OpenStack

Resources for moderators

Question Tools

1 follower


Asked: 2014-05-21 13:24:20 -0500

Seen: 73 times

Last updated: May 22 '14