.. -*- mode: rst -*- .. _development-core: ========================= Server Core Development ========================= .. versionadded:: 1.3.0 Bcfg2 1.3 added a pluggable server core system so that the server core itself can be easily swapped out to use different technologies. It currently ships with two backends: a builtin core written from scratch using the various server tools in the Python standard library; and an experimental `CherryPy `_ based core. This page documents the server core interface so that other cores can be written to take advantage of other technologies, e.g., `Tornado `_ or `Twisted `_. A core implementation needs to: * Override :func:`Bcfg2.Server.Core.BaseCore._daemonize` to handle daemonization, writing the PID file, and dropping privileges. * Override :func:`Bcfg2.Server.Core.BaseCore._run` to handle server startup. * Override :func:`Bcfg2.Server.Core.BaseCore._block` to run the blocking server loop. * Call :func:`Bcfg2.Server.Core.BaseCore.shutdown` on orderly shutdown. Nearly all XML-RPC handling is delegated entirely to the core implementation. It needs to: * Call :func:`Bcfg2.Server.Core.BaseCore.authenticate` to authenticate clients. * Handle :exc:`xmlrpclib.Fault` exceptions raised by the exposed XML-RPC methods as appropriate. * Dispatch XML-RPC method invocations to the appropriate method, including Plugin RMI. The client address pair (a tuple of remote IP address and remote hostname) must be prepended to the argument list passed to built-in methods (i.e., not to plugin RMI). Additionally, running and configuring the server is delegated to the core. It needs to honor the configuration options that influence how and where the server runs, including the server location (host and port), listening interfaces, and SSL certificate and key. Base Core ========= .. automodule:: Bcfg2.Server.Core Core Implementations ==================== Builtin Core ------------ The builtin server core consists of the core implementation (:class:`Bcfg2.Server.BuiltinCore.Core`) and the XML-RPC server implementation (:mod:`Bcfg2.SSLServer`). Core ~~~~ .. automodule:: Bcfg2.Server.BuiltinCore XML-RPC Server ~~~~~~~~~~~~~~ .. automodule:: Bcfg2.SSLServer Multiprocessing Core -------------------- .. automodule:: Bcfg2.Server.MultiprocessingCore CherryPy Core ------------- .. automodule:: Bcfg2.Server.CherryPyCore