12345678910111213141516171819202122232425262728293031323334 |
- How to write a configuration plugin
- ===================================
- The plugins are used to describe configuration modules that have no hosting
- process. Therefore there's no process to provide their specification and to
- check them for correctness. So the plugin takes this responsibility.
- Each plugin is a python file installed into the
- `@prefix@/share/@PACKAGE@/config_plugins` directory (usually
- `/usr/share/bind10/config_plugins`). It is loaded automatically at startup.
- The entrypoint of a plugin is function called `load()`. It should return a
- tuple, first value should be the module specification (usually instance of
- `isc.config.module_spec.ModuleSpec`, loaded by `module_spec_from_file()`).
- The second value is a callable object. It will be called whenever the
- configuration of module needs to be checked. The only parameter will be the new
- config (as python dictionary). To accept the new configuration, return None. If
- you return a string, it is taken as an error message. If you raise an
- exception, the config is rejected as well, however it is not considered a
- graceful rejection, but a failure of the module.
- So, this is how a plugin could look like:
- from isc.config.module_spec import module_spec_from_file
- def check(config):
- if config['bogosity'] > 1:
- return "Too bogus to live with"
- else:
- return None
- def load():
- return (module_spec_from_file('module_spec.spec'), check)
|