This proposal is about stabilizing some of the common interfaces used by Neutron’s child repos, both the advanced services and decomposed plugins.
Part of the goal of splitting functionality and vendor code out of neutron was to increase focus on core neutron, getting it stable, and increasing the velocity of making changes. Since the services repos and decomposed plugins/drivers are both importing and using internal neutron interfaces, unless we run existing tests against the universe of all of this code, it becomes difficult to re-factor or make simple changes without breaking these newly separated projects and plugins.
In addition, there is a certain amount of magic involved in the implicit dependency that neutron is installed, because of the openstack/requirements rules regarding global dependencies, and neutron not being on that list. We end up having to assume neutron is present and are unable to check that the version present is compatible.
The requirements driving this change are:
This proposal is to split neutron into a neutron-lib of reusable library code and neutron core (servers, agents, plugins, drivers.) Part of creating neutron-lib would involve creating rigid interface tests for exposed library methods.
This library will live in the new repo neutron-lib, and will be published to pypi.
This would not be a mechanical split, but rather each piece of code moved into the library would need to satisfy several criteria:
Some trivial items, like the exceptions module, can move over directly as part of this blueprint, however even trivial code that is not shared by anyone should not move. Most modules with any complexity at all will require separate blueprints and careful consideration.
This blueprint can be considered complete when: