|  | ======= | 
|  | Plugins | 
|  | ======= | 
|  |  | 
|  | DevStack has a couple of plugin mechanisms to allow easily adding | 
|  | support for additional projects and features. | 
|  |  | 
|  | Extras.d Hooks | 
|  | ============== | 
|  |  | 
|  | These hooks are an extension of the service calls in | 
|  | ``stack.sh`` at specific points in its run, plus ``unstack.sh`` and | 
|  | ``clean.sh``. A number of the higher-layer projects are implemented in | 
|  | DevStack using this mechanism. | 
|  |  | 
|  | The script in ``extras.d`` is expected to be mostly a dispatcher to | 
|  | functions in a ``lib/*`` script. The scripts are named with a | 
|  | zero-padded two digits sequence number prefix to control the order that | 
|  | the scripts are called, and with a suffix of ``.sh``. DevSack reserves | 
|  | for itself the sequence numbers 00 through 09 and 90 through 99. | 
|  |  | 
|  | Below is a template that shows handlers for the possible command-line | 
|  | arguments: | 
|  |  | 
|  | :: | 
|  |  | 
|  | # template.sh - DevStack extras.d dispatch script template | 
|  |  | 
|  | # check for service enabled | 
|  | if is_service_enabled template; then | 
|  |  | 
|  | if [[ "$1" == "source" ]]; then | 
|  | # Initial source of lib script | 
|  | source $TOP_DIR/lib/template | 
|  | fi | 
|  |  | 
|  | if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then | 
|  | # Set up system services | 
|  | echo_summary "Configuring system services Template" | 
|  | install_package cowsay | 
|  |  | 
|  | elif [[ "$1" == "stack" && "$2" == "install" ]]; then | 
|  | # Perform installation of service source | 
|  | echo_summary "Installing Template" | 
|  | install_template | 
|  |  | 
|  | elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then | 
|  | # Configure after the other layer 1 and 2 services have been configured | 
|  | echo_summary "Configuring Template" | 
|  | configure_template | 
|  |  | 
|  | elif [[ "$1" == "stack" && "$2" == "extra" ]]; then | 
|  | # Initialize and start the template service | 
|  | echo_summary "Initializing Template" | 
|  | ##init_template | 
|  | fi | 
|  |  | 
|  | if [[ "$1" == "unstack" ]]; then | 
|  | # Shut down template services | 
|  | # no-op | 
|  | : | 
|  | fi | 
|  |  | 
|  | if [[ "$1" == "clean" ]]; then | 
|  | # Remove state and transient data | 
|  | # Remember clean.sh first calls unstack.sh | 
|  | # no-op | 
|  | : | 
|  | fi | 
|  | fi | 
|  |  | 
|  | The arguments are: | 
|  |  | 
|  | -  **source** - Called by each script that utilizes ``extras.d`` hooks; | 
|  | this replaces directly sourcing the ``lib/*`` script. | 
|  | -  **stack** - Called by ``stack.sh`` three times for different phases | 
|  | of its run: | 
|  |  | 
|  | -  **pre-install** - Called after system (OS) setup is complete and | 
|  | before project source is installed. | 
|  | -  **install** - Called after the layer 1 and 2 projects source and | 
|  | their dependencies have been installed. | 
|  | -  **post-config** - Called after the layer 1 and 2 services have | 
|  | been configured. All configuration files for enabled services | 
|  | should exist at this point. | 
|  | -  **extra** - Called near the end after layer 1 and 2 services have | 
|  | been started. This is the existing hook and has not otherwise | 
|  | changed. | 
|  |  | 
|  | -  **unstack** - Called by ``unstack.sh`` before other services are shut | 
|  | down. | 
|  | -  **clean** - Called by ``clean.sh`` before other services are cleaned, | 
|  | but after ``unstack.sh`` has been called. | 
|  |  | 
|  | Hypervisor | 
|  | ========== | 
|  |  | 
|  | Hypervisor plugins are fairly new and condense most hypervisor | 
|  | configuration into one place. | 
|  |  | 
|  | The initial plugin implemented was for Docker support and is a useful | 
|  | template for the required support. Plugins are placed in | 
|  | ``lib/nova_plugins`` and named ``hypervisor-<name>`` where ``<name>`` is | 
|  | the value of ``VIRT_DRIVER``. Plugins must define the following | 
|  | functions: | 
|  |  | 
|  | -  ``install_nova_hypervisor`` - install any external requirements | 
|  | -  ``configure_nova_hypervisor`` - make configuration changes, including | 
|  | those to other services | 
|  | -  ``start_nova_hypervisor`` - start any external services | 
|  | -  ``stop_nova_hypervisor`` - stop any external services | 
|  | -  ``cleanup_nova_hypervisor`` - remove transient data and cache |