Merge "Deprecate nova.hooks"

This commit is contained in:
Jenkins
2016-03-03 04:06:53 +00:00
committed by Gerrit Code Review
4 changed files with 13 additions and 59 deletions

View File

@@ -1,57 +0,0 @@
Hooks
=====
Hooks provide a mechanism to extend Nova with custom code through a plugin
mechanism.
Named hooks are added to nova code via a decorator that will lazily load
plugin code matching the name. The loading works via setuptools
`entry points`_.
.. _`entry points`: http://pythonhosted.org/setuptools/pkg_resources.html#entry-points
What are hooks good for?
------------------------
Hooks are good for anchoring your custom code to Nova internal APIs.
What are hooks NOT good for?
----------------------------
Hooks should not be used when API stability is a key factor. Internal APIs may
change. Consider using a notification driver if this is important to you.
Declaring hooks in the Nova codebase
------------------------------------
The following example declares a *resize_hook* around the *resize_instance* method::
from nova import hooks
@hooks.add_hook("resize_hook")
def resize_instance(self, context, instance, a=1, b=2):
...
Hook objects can now be attached via entry points to the *resize_hook*.
Adding hook object code
-----------------------
1. Setup a Python package with a setup.py file.
2. Add the following to the setup.py setup call::
entry_points = {
'nova.hooks': [
'resize_hook=your_package.hooks:YourHookClass',
]
},
3. *YourHookClass* should be an object with *pre* and/or *post* methods::
class YourHookClass(object):
def pre(self, *args, **kwargs):
....
def post(self, rv, *args, **kwargs):
....

View File

@@ -153,7 +153,6 @@ Open Development.
i18n i18n
filter_scheduler filter_scheduler
rpc rpc
hooks
block_device_mapping block_device_mapping
addmethod.openstackapi addmethod.openstackapi
conductor conductor

View File

@@ -16,6 +16,9 @@
"""Decorator and config option definitions for adding custom code (hooks) """Decorator and config option definitions for adding custom code (hooks)
around callables. around callables.
NOTE: as of Nova 13.0 hooks are DEPRECATED and will be removed in the
near future. You should not build any new code using this facility.
Any method may have the 'add_hook' decorator applied, which yields the Any method may have the 'add_hook' decorator applied, which yields the
ability to invoke Hook objects before or after the method. (i.e. pre and ability to invoke Hook objects before or after the method. (i.e. pre and
post) post)
@@ -47,7 +50,7 @@ import functools
from oslo_log import log as logging from oslo_log import log as logging
import stevedore import stevedore
from nova.i18n import _, _LE from nova.i18n import _, _LE, _LW
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
NS = 'nova.hooks' NS = 'nova.hooks'
@@ -82,6 +85,8 @@ class HookManager(stevedore.hook.HookManager):
obj = e.obj obj = e.obj
hook_method = getattr(obj, method_type, None) hook_method = getattr(obj, method_type, None)
if hook_method: if hook_method:
LOG.warning(_LW("Hooks are deprecated as of Nova 13.0 and "
"will be removed in a future release"))
LOG.debug("Running %(name)s %(type)s-hook: %(obj)s", LOG.debug("Running %(name)s %(type)s-hook: %(obj)s",
{'name': name, 'type': method_type, 'obj': obj}) {'name': name, 'type': method_type, 'obj': obj})
try: try:

View File

@@ -0,0 +1,7 @@
---
deprecations:
- Deprecate the use of nova.hooks. This facility used to let
arbitrary out of tree code be executed around certain internal
actions, but is unsuitable for having a well maintained
API. Anyone using this facility should bring forward their use
cases in the Newton cycle as nova-specs.