Statistics
| Branch: | Tag: | Revision:

root / man / ganeti-os-interface.rst @ d89168ff

History | View | Annotate | Download (12.4 kB)

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
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_TYPE
148
    (Optional) If a NIC network is specified, the network's type.
149

    
150
NIC_%d_NETWORK_TAGS
151
    (Optional) If a NIC network is specified, the network's tags, space
152
    separated.
153

    
154
OSP_*name*
155
    Each OS parameter (see below) will be exported in its own
156
    variable, prefixed with ``OSP_``, and upper-cased. For example, a
157
    ``dhcp`` parameter will be exported as ``OSP_DHCP``.
158

    
159
DEBUG_LEVEL
160
    If non-zero, this should cause the OS script to generate verbose
161
    logs of its execution, for troubleshooting purposes. Currently
162
    only ``0`` and ``1`` are valid values.
163

    
164

    
165
EXECUTABLE SCRIPTS
166
------------------
167

    
168

    
169
create
170
~~~~~~
171

    
172
The **create** command is used for creating a new instance from
173
scratch. It has no additional environment variables bside the
174
common ones.
175

    
176
The ``INSTANCE_NAME`` variable denotes the name of the instance,
177
which is guaranteed to resolve to an IP address. The create script
178
should configure the instance according to this name. It can
179
configure the IP statically or not, depending on the deployment
180
environment.
181

    
182
The ``INSTANCE_REINSTALL`` variable is set to ``1`` when this create
183
request is reinstalling an existing instance, rather than creating
184
one anew. This can be used, for example, to preserve some data in the
185
old instance in an OS-specific way.
186

    
187
export
188
~~~~~~
189

    
190
This command is used in order to make a backup of a given disk of
191
the instance. The command should write to stdout a dump of the
192
given block device. The output of this program will be passed
193
during restore to the **import** command.
194

    
195
The specific disk to backup is denoted by two additional environment
196
variables: ``EXPORT_INDEX`` which denotes the index in the instance
197
disks structure (and could be used for example to skip the second disk
198
if not needed for backup) and ``EXPORT_DEVICE`` which has the same value
199
as ``DISK_N_PATH`` but is duplicated here for easier usage by shell
200
scripts (rather than parse the ``DISK_...`` variables).
201

    
202
To provide the user with an estimate on how long the export will take,
203
a predicted size can be written to the file descriptor passed in the
204
variable ``EXP_SIZE_FD``. The value is in bytes and must be terminated
205
by a newline character (``\n``). Older versions of Ganeti don't
206
support this feature, hence the variable should be checked before
207
use. Example::
208

    
209
    if test -n "$EXP_SIZE_FD"; then
210
      blockdev --getsize64 $blockdev >&$EXP_SIZE_FD
211
    fi
212

    
213
import
214
~~~~~~
215

    
216
The **import** command is used for restoring an instance from a
217
backup as done by **export**. The arguments are the similar to
218
those passed to **export**, whose output will be provided on
219
stdin.
220

    
221
The difference in variables is that the current disk is denoted by
222
``IMPORT_DEVICE`` and ``IMPORT_INDEX`` (instead of ``EXPORT_...``).
223

    
224
rename
225
~~~~~~
226

    
227
This command is used in order to perform a rename at the instance
228
OS level, after the instance has been renamed in Ganeti. The
229
command should do whatever steps are required to ensure that the
230
instance is updated to use the new name, if the operating system
231
supports it.
232

    
233
Note that it is acceptable for the rename script to do nothing at
234
all, however be warned that in this case, there will be a
235
desynchronization between what gnt-instance list shows you and the
236
actual hostname of the instance.
237

    
238
The script will be passed one additional environment variable
239
called ``OLD_INSTANCE_NAME`` which holds the old instance name. The
240
``INSTANCE_NAME`` variable holds the new instance name.
241

    
242
A very simple rename script should at least change the hostname and
243
IP address of the instance, leaving the administrator to update the
244
other services.
245

    
246
verify
247
~~~~~~
248

    
249
The *verify* script is used to verify consistency of the OS parameters
250
(see below). The command should take one or more arguments denoting
251
what checks should be performed, and return a proper exit code
252
depending on whether the validation failed or succeeded.
253

    
254
Currently (API version 20), only one parameter is supported:
255
``parameters``. This should validate the ``OSP_`` variables from the
256
environment, and output diagnostic messages in case the validation
257
fails.
258

    
259
For the ``dhcp`` parameter given as example above, a verification
260
script could be:
261

    
262
.. code-block:: bash
263

    
264
    #!/bin/sh
265

    
266
    case $OSP_DHCP in
267
      ""|yes|no)
268
          ;;
269
      *)
270
        echo "Invalid value '$OSP_DHCP' for the dhcp parameter" 1>&2
271
        exit 1;
272
        ;;
273
    esac
274

    
275
    exit 0
276

    
277

    
278
TEXT FILES
279
----------
280

    
281

    
282
ganeti_api_version
283
~~~~~~~~~~~~~~~~~~
284

    
285
The ganeti_api_version file is a plain text file containing the
286
version(s) of the guest OS API that this OS definition complies
287
with, one per line. The version documented by this man page is 20,
288
so this file must contain the number 20 followed by a newline if
289
only this version is supported. A script compatible with more than
290
one Ganeti version should contain the most recent version first
291
(i.e. 20), followed by the old version(s) (in this case 15 and/or
292
10).
293

    
294
variants.list
295
~~~~~~~~~~~~~
296

    
297
variants.list is a plain text file containing all the declared supported
298
variants for this OS, one per line. If this file is missing or empty,
299
then the OS won't be considered to support variants.
300

    
301
Empty lines and lines starting with a hash (``#``) are ignored.
302

    
303
parameters.list
304
~~~~~~~~~~~~~~~
305

    
306
This file declares the parameters supported by the OS, one parameter
307
per line, with name and description (space and/or tab separated). For
308
example::
309

    
310
    dhcp Whether to enable (yes) or disable (no) dhcp
311
    root_size The size of the root partition, in GiB
312

    
313
The parameters can then be used in instance add or modification, as
314
follows::
315

    
316
    # gnt-instance add -O dhcp=no,root_size=8 ...
317

    
318

    
319
NOTES
320
-----
321

    
322
Backwards compatibility
323
~~~~~~~~~~~~~~~~~~~~~~~
324

    
325
Ganeti 2.3 and up is compatible with API versions 10, 15 and 20. The OS
326
parameters and related scripts (verify) are only supported in
327
version 20. The variants functionality (variants.list, and OS_VARIANT
328
env. var) are supported/present only in version 15 and up.
329

    
330
Common behaviour
331
~~~~~~~~~~~~~~~~
332

    
333
All the scripts should display an usage message when called with a
334
wrong number of arguments or when the first argument is ``-h`` or
335
``--help``.
336

    
337
Upgrading from old versions
338
~~~~~~~~~~~~~~~~~~~~~~~~~~~
339

    
340
Version 15 to 20
341
^^^^^^^^^^^^^^^^
342

    
343
The ``parameters.list`` file and ``verify`` script have been
344
added. For no parameters, an empty parameters file and an empty verify
345
script which returns success can be used.
346

    
347
Version 10 to 15
348
^^^^^^^^^^^^^^^^
349

    
350
The ``variants.list`` file has been added, so OSes should support at
351
least one variant, declaring it in that file and must be prepared to
352
parse the OS_VARIANT environment variable. OSes are free to support more
353
variants than just the declared ones. Note that this file is optional;
354
without it, the variants functionality is disabled.
355

    
356
Version 5 to 10
357
^^^^^^^^^^^^^^^
358

    
359
The method for passing data has changed from command line options
360
to environment variables, so scripts should be modified to use
361
these. For an example of how this can be done in a way compatible
362
with both versions, feel free to look at the debootstrap instance's
363
common.sh auxiliary script.
364

    
365
Also, instances can have now a variable number of disks, not only
366
two, and a variable number of NICs (instead of fixed one), so the
367
scripts should deal with this. The biggest change is in the
368
import/export, which are called once per disk, instead of once per
369
instance.
370

    
371
Version 4 to 5
372
^^^^^^^^^^^^^^
373

    
374
The rename script has been added. If you don't want to do any
375
changes on the instances after a rename, you can migrate the OS
376
definition to version 5 by creating the rename script simply as:
377

    
378
.. code-block:: bash
379

    
380
    #!/bin/sh
381

    
382
    exit 0
383

    
384
Note that the script must be executable.
385

    
386
.. vim: set textwidth=72 :
387
.. Local Variables:
388
.. mode: rst
389
.. fill-column: 72
390
.. End: