blob: 8bb92ed4b901cabafc1ae0a9ab1dd077fa542bf5 [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
Sean Dague32930462014-11-18 06:51:16 -05009==============
Sean M. Collins09e550c2014-10-21 11:40:08 -040010
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
YAMAMOTO Takashib1a153e2015-02-09 12:43:12 +090019the scripts are called, and with a suffix of ``.sh``. DevStack reserves
Sean M. Collins09e550c2014-10-21 11:40:08 -040020for 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
Sean Dague2c65e712014-12-18 09:44:56 -050095
96Externally Hosted Plugins
97=========================
98
99Based on the extras.d hooks, DevStack supports a standard mechansim
100for including plugins from external repositories. The plugin interface
101assumes the following:
102
103An external git repository that includes a ``devstack/`` top level
104directory. Inside this directory there can be 2 files.
105
106- ``settings`` - a file containing global variables that will be
107 sourced very early in the process. This is helpful if other plugins
108 might depend on this one, and need access to global variables to do
109 their work.
110- ``plugin.sh`` - the actual plugin. It will be executed by devstack
111 during it's run. The run order will be done in the registration
112 order for these plugins, and will occur immediately after all in
113 tree extras.d dispatch at the phase in question. The plugin.sh
114 looks like the extras.d dispatcher above **except** it should not
115 include the is_service_enabled conditional. All external plugins are
116 always assumed to be enabled.
117
118Plugins are registered by adding the following to the localrc section
119of ``local.conf``.
120
121They are added in the following format::
122
123 enable_plugin <NAME> <GITURL> [GITREF]
124
125- ``name`` - an arbitrary name. (ex: glustfs, docker, zaqar, congress)
126- ``giturl`` - a valid git url that can be cloned
127- ``gitref`` - an optional git ref (branch / ref / tag) that will be
128 cloned. Defaults to master.
129
130An example would be as follows::
131
132 enable_plugin glusterfs https://github.com/sdague/devstack-plugins glusterfs
133
Sean M. Collins09e550c2014-10-21 11:40:08 -0400134Hypervisor
Sean Dague32930462014-11-18 06:51:16 -0500135==========
Sean M. Collins09e550c2014-10-21 11:40:08 -0400136
137Hypervisor plugins are fairly new and condense most hypervisor
138configuration into one place.
139
140The initial plugin implemented was for Docker support and is a useful
141template for the required support. Plugins are placed in
142``lib/nova_plugins`` and named ``hypervisor-<name>`` where ``<name>`` is
143the value of ``VIRT_DRIVER``. Plugins must define the following
144functions:
145
146- ``install_nova_hypervisor`` - install any external requirements
147- ``configure_nova_hypervisor`` - make configuration changes, including
148 those to other services
149- ``start_nova_hypervisor`` - start any external services
150- ``stop_nova_hypervisor`` - stop any external services
151- ``cleanup_nova_hypervisor`` - remove transient data and cache