openstack team mailing list archive
Mailing list archive
Re: Extensions, code vs. API
Yes some extensions modify core code. We are trying to strike a middle ground between ease-of-implementation and stability. Stability of the API is vital, so public facing features definitely need to be extensions until we create a new version of the api. Internal stability is less important, so modifying core components to implement important extensions seems ok.
Eventually we might have to develop db-extensions and manager and driver plugins so you could ship all levels of an extension separately. This would be very valuable, but it also significantly complicates the code base, so we have been avoiding generalizing the code so far.
Something to think about at the design summit. I'm going to propose a discussion regarding shipping external "drivers", and this seems like it fits right in with that.
On Feb 6, 2012, at 11:30 AM, Andrew Bogott wrote:
> I've just finished re-reading 'OpenStack API Extensions -- an overview.' I understand the distinction between a core API and an API extension, and the value of that distinction is clear.
> What I don't understand is how that distinction plays out when it comes to implementation. Within our shared implementation, is there any actual coding distinction between 'core' and 'extension'? For example, when I implemented the DNS extension I put most of the code in api/openstack/compute/contrib (clearly the place for 'extensions'.) But to support the actual functionality I made changes in nova/network/manager.py and added a couple of db tables. Everyone seemed fine with that.
> Can I expect that any non-test-breaking code will be merged as long as it doesn't alter the core API, even if it's for an unpopular or obscure extension (e.g. puppet support)? If not, how have other developers handled cases where adding a private API extension requires modifications of shared code?
> Mailing list: https://launchpad.net/~openstack
> Post to : openstack@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~openstack
> More help : https://help.launchpad.net/ListHelp