blob: b4136c4653d76181136a43ad4dd799bfd721b264 [file] [log] [blame]
Dean Troyer0986a7b2014-10-29 22:08:13 -05001=======
2Plugins
3=======
Sean M. Collins09e550c2014-10-21 11:40:08 -04004
5DevStack has a couple of plugin mechanisms to allow easily adding
6support for additional projects and features.
7
8Extras.d Hooks
9~~~~~~~~~~~~~~
10
Dean Troyerea3cdfa2014-11-08 08:29:16 -060011These hooks are an extension of the service calls in
12``stack.sh`` at specific points in its run, plus ``unstack.sh`` and
Sean M. Collins09e550c2014-10-21 11:40:08 -040013``clean.sh``. A number of the higher-layer projects are implemented in
14DevStack using this mechanism.
15
16The script in ``extras.d`` is expected to be mostly a dispatcher to
17functions in a ``lib/*`` script. The scripts are named with a
18zero-padded two digits sequence number prefix to control the order that
19the scripts are called, and with a suffix of ``.sh``. DevSack reserves
20for itself the sequence numbers 00 through 09 and 90 through 99.
21
22Below is a template that shows handlers for the possible command-line
23arguments:
24
25::
26
27 # template.sh - DevStack extras.d dispatch script template
28
29 # check for service enabled
30 if is_service_enabled template; then
31
32 if [[ "$1" == "source" ]]; then
33 # Initial source of lib script
34 source $TOP_DIR/lib/template
35 fi
36
37 if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then
38 # Set up system services
39 echo_summary "Configuring system services Template"
40 install_package cowsay
41
42 elif [[ "$1" == "stack" && "$2" == "install" ]]; then
43 # Perform installation of service source
44 echo_summary "Installing Template"
45 install_template
46
47 elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
48 # Configure after the other layer 1 and 2 services have been configured
49 echo_summary "Configuring Template"
50 configure_template
51
52 elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
53 # Initialize and start the template service
54 echo_summary "Initializing Template"
55 ##init_template
56 fi
57
58 if [[ "$1" == "unstack" ]]; then
59 # Shut down template services
60 # no-op
61 :
62 fi
63
64 if [[ "$1" == "clean" ]]; then
65 # Remove state and transient data
66 # Remember clean.sh first calls unstack.sh
67 # no-op
68 :
69 fi
70 fi
71
72The arguments are:
73
74- **source** - Called by each script that utilizes ``extras.d`` hooks;
75 this replaces directly sourcing the ``lib/*`` script.
76- **stack** - Called by ``stack.sh`` three times for different phases
77 of its run:
78
79 - **pre-install** - Called after system (OS) setup is complete and
80 before project source is installed.
81 - **install** - Called after the layer 1 and 2 projects source and
82 their dependencies have been installed.
83 - **post-config** - Called after the layer 1 and 2 services have
84 been configured. All configuration files for enabled services
85 should exist at this point.
86 - **extra** - Called near the end after layer 1 and 2 services have
87 been started. This is the existing hook and has not otherwise
88 changed.
89
90- **unstack** - Called by ``unstack.sh`` before other services are shut
91 down.
92- **clean** - Called by ``clean.sh`` before other services are cleaned,
93 but after ``unstack.sh`` has been called.
94
95Hypervisor
96~~~~~~~~~~
97
98Hypervisor plugins are fairly new and condense most hypervisor
99configuration into one place.
100
101The initial plugin implemented was for Docker support and is a useful
102template for the required support. Plugins are placed in
103``lib/nova_plugins`` and named ``hypervisor-<name>`` where ``<name>`` is
104the value of ``VIRT_DRIVER``. Plugins must define the following
105functions:
106
107- ``install_nova_hypervisor`` - install any external requirements
108- ``configure_nova_hypervisor`` - make configuration changes, including
109 those to other services
110- ``start_nova_hypervisor`` - start any external services
111- ``stop_nova_hypervisor`` - stop any external services
112- ``cleanup_nova_hypervisor`` - remove transient data and cache