Add design for diskstats data collector
[ganeti-local] / man / ganeti-os-interface.rst
1 ganeti-os-interface(7) Ganeti | Version @GANETI_VERSION@
2 ========================================================
3
4 Name
5 ----
6
7 ganeti-os-interface - Specifications for guest OS types
8
9 DESCRIPTION
10 -----------
11
12 The method of supporting guest operating systems in Ganeti is to have,
13 for each guest OS type, a directory containing a number of required
14 files. This directory must be present across all nodes (Ganeti doesn't
15 replicate it) in order for the OS to be usable by Ganeti.
16
17
18 REFERENCE
19 ---------
20
21 There are eight required files: *create*, *import*, *export*, *rename*,
22 *verify* (executables), *ganeti_api_version*, *variants.list* and
23 *parameters.list* (text files).
24
25 Common environment
26 ~~~~~~~~~~~~~~~~~~
27
28 All commands will get their input via environment variables. A
29 common set of variables will be exported for all commands, and some
30 of them might have extra ones. Note that all counts are
31 zero-based.
32
33 Since Ganeti version 2.5, the environment will be cleaned up before
34 being passed to scripts, therefore they will not inherit the environment
35 in with which the ganeti node daemon was started. If you depend on any
36 environment variables (non-Ganeti), then you will need to define or
37 source them appropriately.
38
39 OS_API_VERSION
40     The OS API version that the rest of the environment conforms to.
41
42 INSTANCE_NAME
43     The instance name the script should operate on.
44
45 INSTANCE_OS, OS_NAME
46     Both names point to the name of the instance's OS as Ganeti knows
47     it. This can simplify the OS scripts by providing the same scripts
48     under multiple names, and then the scripts can use this name to
49     alter their behaviour.
50
51     With OS API 15 changing the script behavior based on this variable
52     is deprecated: OS_VARIANT should be used instead (see below).
53
54 OS_VARIANT
55     The variant of the OS which should be installed. Each OS must
56     support all variants listed under its variants.list file, and may
57     support more. Any more supported variants should be properly
58     documented in the per-OS documentation.
59
60 HYPERVISOR
61     The hypervisor of this instance.
62
63 DISK_COUNT
64     The number of disks the instance has. The actual disk defitions are
65     in a set of additional variables. The instance's disk will be
66     numbered from 0 to this value minus one.
67
68 DISK_%N_PATH
69     The path to the storage for disk N of the instance. This might be
70     either a block device or a regular file, in which case the OS
71     scripts should use ``losetup`` (if they need to mount it). E.g. the
72     first disk of the instance might be exported as
73     ``DISK_0_PATH=/dev/drbd0``.
74
75 DISK_%N_ACCESS
76     This is how the hypervisor will export the instance disks: either
77     read-write (``rw``) or read-only (``ro``).
78
79 DISK_%N_FRONTEND_TYPE
80     (Optional) If applicable to the current hypervisor type: the type
81     of the device exported by the hypervisor. For example, the Xen HVM
82     hypervisor can export disks as either ``paravirtual`` or
83     ``ioemu``.
84
85 DISK_%N_BACKEND_TYPE
86     How files are visible on the node side. This can be either
87     ``block`` (when using block devices) or ``file:type``, where
88     ``type`` is either ``loop`` or ``blktap`` depending on how the
89     hypervisor will be configured.  Note that not all backend types
90     apply to all hypervisors.
91
92 NIC_COUNT
93     Similar to the ``DISK_COUNT``, this represents the number of NICs
94     of the instance.
95
96 NIC_%N_MAC
97     The MAC address associated with this interface.
98
99 NIC_%N_IP
100     The IP address, if any, associated with the N-th NIC of the
101     instance.
102
103 NIC_%N_MODE
104     The NIC mode, routed, bridged or openvswitch
105
106 NIC_%N_BRIDGE
107     The bridge to which this NIC will be attached. This variable is
108     defined only when the NIC is in bridged mode.
109
110 NIC_%N_LINK
111     In bridged or openvswitch mode, this is the interface to which the
112     NIC will be attached (same as ``NIC_%N_BRIDGE`` for bridged). In
113     routed mode it is the routing table which will be used by the
114     hypervisor to insert the appropriate routes.
115
116 NIC_%N_FRONTEND_TYPE
117     (Optional) If applicable, the type of the exported NIC to the
118     instance, this can be one of: ``rtl8139``, ``ne2k_pci``,
119     ``ne2k_isa``, ``paravirtual``.
120
121 NIC_%d_NETWORK_NAME
122     (Optional) If a NIC network is specified, the network's name.
123
124 NIC_%d_NETWORK_UUID
125     (Optional) If a NIC network is specified, the network's uuid.
126
127 NIC_%d_NETWORK_FAMILY
128     (Optional) If a NIC network is specified, the network's family.
129
130 NIC_%d_NETWORK_SUBNET
131     (Optional) If a NIC network is specified, the network's IPv4 subnet.
132
133 NIC_%d_NETWORK_GATEWAY
134     (Optional) If a NIC network is specified, the network's IPv4
135     gateway.
136
137 NIC_%d_NETWORK_SUBNET6
138     (Optional) If a NIC network is specified, the network's IPv6 subnet.
139
140 NIC_%d_NETWORK_GATEWAY6
141     (Optional) If a NIC network is specified, the network's IPv6
142     gateway.
143
144 NIC_%d_NETWORK_MAC_PREFIX
145     (Optional) If a NIC network is specified, the network's mac prefix.
146
147 NIC_%d_NETWORK_TAGS
148     (Optional) If a NIC network is specified, the network's tags, space
149     separated.
150
151 OSP_*name*
152     Each OS parameter (see below) will be exported in its own
153     variable, prefixed with ``OSP_``, and upper-cased. For example, a
154     ``dhcp`` parameter will be exported as ``OSP_DHCP``.
155
156 DEBUG_LEVEL
157     If non-zero, this should cause the OS script to generate verbose
158     logs of its execution, for troubleshooting purposes. Currently
159     only ``0`` and ``1`` are valid values.
160
161
162 EXECUTABLE SCRIPTS
163 ------------------
164
165
166 create
167 ~~~~~~
168
169 The **create** command is used for creating a new instance from
170 scratch. It has no additional environment variables bside the
171 common ones.
172
173 The ``INSTANCE_NAME`` variable denotes the name of the instance,
174 which is guaranteed to resolve to an IP address. The create script
175 should configure the instance according to this name. It can
176 configure the IP statically or not, depending on the deployment
177 environment.
178
179 The ``INSTANCE_REINSTALL`` variable is set to ``1`` when this create
180 request is reinstalling an existing instance, rather than creating
181 one anew. This can be used, for example, to preserve some data in the
182 old instance in an OS-specific way.
183
184 export
185 ~~~~~~
186
187 This command is used in order to make a backup of a given disk of
188 the instance. The command should write to stdout a dump of the
189 given block device. The output of this program will be passed
190 during restore to the **import** command.
191
192 The specific disk to backup is denoted by two additional environment
193 variables: ``EXPORT_INDEX`` which denotes the index in the instance
194 disks structure (and could be used for example to skip the second disk
195 if not needed for backup) and ``EXPORT_DEVICE`` which has the same value
196 as ``DISK_N_PATH`` but is duplicated here for easier usage by shell
197 scripts (rather than parse the ``DISK_...`` variables).
198
199 To provide the user with an estimate on how long the export will take,
200 a predicted size can be written to the file descriptor passed in the
201 variable ``EXP_SIZE_FD``. The value is in bytes and must be terminated
202 by a newline character (``\n``). Older versions of Ganeti don't
203 support this feature, hence the variable should be checked before
204 use. Example::
205
206     if test -n "$EXP_SIZE_FD"; then
207       blockdev --getsize64 $blockdev >&$EXP_SIZE_FD
208     fi
209
210 import
211 ~~~~~~
212
213 The **import** command is used for restoring an instance from a
214 backup as done by **export**. The arguments are the similar to
215 those passed to **export**, whose output will be provided on
216 stdin.
217
218 The difference in variables is that the current disk is denoted by
219 ``IMPORT_DEVICE`` and ``IMPORT_INDEX`` (instead of ``EXPORT_...``).
220
221 rename
222 ~~~~~~
223
224 This command is used in order to perform a rename at the instance
225 OS level, after the instance has been renamed in Ganeti. The
226 command should do whatever steps are required to ensure that the
227 instance is updated to use the new name, if the operating system
228 supports it.
229
230 Note that it is acceptable for the rename script to do nothing at
231 all, however be warned that in this case, there will be a
232 desynchronization between what gnt-instance list shows you and the
233 actual hostname of the instance.
234
235 The script will be passed one additional environment variable
236 called ``OLD_INSTANCE_NAME`` which holds the old instance name. The
237 ``INSTANCE_NAME`` variable holds the new instance name.
238
239 A very simple rename script should at least change the hostname and
240 IP address of the instance, leaving the administrator to update the
241 other services.
242
243 verify
244 ~~~~~~
245
246 The *verify* script is used to verify consistency of the OS parameters
247 (see below). The command should take one or more arguments denoting
248 what checks should be performed, and return a proper exit code
249 depending on whether the validation failed or succeeded.
250
251 Currently (API version 20), only one parameter is supported:
252 ``parameters``. This should validate the ``OSP_`` variables from the
253 environment, and output diagnostic messages in case the validation
254 fails.
255
256 For the ``dhcp`` parameter given as example above, a verification
257 script could be:
258
259 .. code-block:: bash
260
261     #!/bin/sh
262
263     case $OSP_DHCP in
264       ""|yes|no)
265           ;;
266       *)
267         echo "Invalid value '$OSP_DHCP' for the dhcp parameter" 1>&2
268         exit 1;
269         ;;
270     esac
271
272     exit 0
273
274
275 TEXT FILES
276 ----------
277
278
279 ganeti_api_version
280 ~~~~~~~~~~~~~~~~~~
281
282 The ganeti_api_version file is a plain text file containing the
283 version(s) of the guest OS API that this OS definition complies
284 with, one per line. The version documented by this man page is 20,
285 so this file must contain the number 20 followed by a newline if
286 only this version is supported. A script compatible with more than
287 one Ganeti version should contain the most recent version first
288 (i.e. 20), followed by the old version(s) (in this case 15 and/or
289 10).
290
291 variants.list
292 ~~~~~~~~~~~~~
293
294 variants.list is a plain text file containing all the declared supported
295 variants for this OS, one per line. If this file is missing or empty,
296 then the OS won't be considered to support variants.
297
298 Empty lines and lines starting with a hash (``#``) are ignored.
299
300 parameters.list
301 ~~~~~~~~~~~~~~~
302
303 This file declares the parameters supported by the OS, one parameter
304 per line, with name and description (space and/or tab separated). For
305 example::
306
307     dhcp Whether to enable (yes) or disable (no) dhcp
308     root_size The size of the root partition, in GiB
309
310 The parameters can then be used in instance add or modification, as
311 follows::
312
313     # gnt-instance add -O dhcp=no,root_size=8 ...
314
315
316 NOTES
317 -----
318
319 Backwards compatibility
320 ~~~~~~~~~~~~~~~~~~~~~~~
321
322 Ganeti 2.3 and up is compatible with API versions 10, 15 and 20. The OS
323 parameters and related scripts (verify) are only supported in
324 version 20. The variants functionality (variants.list, and OS_VARIANT
325 env. var) are supported/present only in version 15 and up.
326
327 Common behaviour
328 ~~~~~~~~~~~~~~~~
329
330 All the scripts should display an usage message when called with a
331 wrong number of arguments or when the first argument is ``-h`` or
332 ``--help``.
333
334 Upgrading from old versions
335 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
336
337 Version 15 to 20
338 ^^^^^^^^^^^^^^^^
339
340 The ``parameters.list`` file and ``verify`` script have been
341 added. For no parameters, an empty parameters file and an empty verify
342 script which returns success can be used.
343
344 Version 10 to 15
345 ^^^^^^^^^^^^^^^^
346
347 The ``variants.list`` file has been added, so OSes should support at
348 least one variant, declaring it in that file and must be prepared to
349 parse the OS_VARIANT environment variable. OSes are free to support more
350 variants than just the declared ones. Note that this file is optional;
351 without it, the variants functionality is disabled.
352
353 Version 5 to 10
354 ^^^^^^^^^^^^^^^
355
356 The method for passing data has changed from command line options
357 to environment variables, so scripts should be modified to use
358 these. For an example of how this can be done in a way compatible
359 with both versions, feel free to look at the debootstrap instance's
360 common.sh auxiliary script.
361
362 Also, instances can have now a variable number of disks, not only
363 two, and a variable number of NICs (instead of fixed one), so the
364 scripts should deal with this. The biggest change is in the
365 import/export, which are called once per disk, instead of once per
366 instance.
367
368 Version 4 to 5
369 ^^^^^^^^^^^^^^
370
371 The rename script has been added. If you don't want to do any
372 changes on the instances after a rename, you can migrate the OS
373 definition to version 5 by creating the rename script simply as:
374
375 .. code-block:: bash
376
377     #!/bin/sh
378
379     exit 0
380
381 Note that the script must be executable.
382
383 .. vim: set textwidth=72 :
384 .. Local Variables:
385 .. mode: rst
386 .. fill-column: 72
387 .. End: