38 |
38 |
distribution (e.g. by allowing usage of public key infrastructure and
|
39 |
39 |
providing tools for management of basic software licensing).
|
40 |
40 |
|
41 |
|
There are no limitations regarding hard drive images used, as long as
|
42 |
|
the description is provided. Any hardware described in a proper
|
43 |
|
i.e. CIM - Common Information Model) format is accepted, although
|
44 |
|
there is no guarantee that every virtualization software will support
|
45 |
|
all types of hardware.
|
|
41 |
There are no limitations regarding disk images used, as long as the
|
|
42 |
description is provided. Any hardware described in a proper format
|
|
43 |
(i.e. CIM - Common Information Model) is accepted, although there is no
|
|
44 |
guarantee that every virtualization software will support all types of
|
|
45 |
hardware.
|
46 |
46 |
|
47 |
|
OVF package should contain one file with ``.ovf`` extension, which is an
|
48 |
|
XML file specifying the following (per virtual machine):
|
|
47 |
OVF package should contain exactly one file with ``.ovf`` extension,
|
|
48 |
which is an XML file specifying the following (per virtual machine):
|
49 |
49 |
|
50 |
50 |
- virtual disks
|
51 |
51 |
- network description
|
... | ... | |
58 |
58 |
Additionally, the package may have some disk image files and other
|
59 |
59 |
additional resources (e.g. ISO images).
|
60 |
60 |
|
|
61 |
In order to provide secure means of distribution for OVF packages, the
|
|
62 |
manifest and certificate are provided. Manifest (``.mf`` file) contains
|
|
63 |
checksums for all the files in OVF package, whereas certificate
|
|
64 |
(``.cert`` file) contains X.509 certificate and a checksum of manifest
|
|
65 |
file. Both files are not compulsory, but certificate requires manifest
|
|
66 |
to be present.
|
|
67 |
|
61 |
68 |
Supported disk formats
|
62 |
69 |
----------------------
|
63 |
70 |
|
64 |
71 |
Although OVF is claimed to support 'any disk format', what we are
|
65 |
|
interested in is which of the formats are supported by VM managers
|
66 |
|
that currently use OVF.
|
|
72 |
interested in is which formats are supported by VM managers that
|
|
73 |
currently use OVF.
|
67 |
74 |
|
68 |
75 |
- VMWare: ``.vmdk`` (which comes in at least 3 different flavours:
|
69 |
76 |
``sparse``, ``compressed`` and ``streamOptimized``)
|
... | ... | |
74 |
81 |
- Red Hat Enterprise Virtualization: ``.raw`` (raw disk format),
|
75 |
82 |
``.cow`` (qemu's ``QCOW2``)
|
76 |
83 |
- other: AbiCloud, OpenNode Cloud, SUSE Studio, Morfeo Claudia,
|
77 |
|
OpenStack
|
|
84 |
OpenStack: mostly ``.vmdk``
|
78 |
85 |
|
79 |
|
In our implementation of the OVF we plan to allow a choice between
|
80 |
|
raw, cow and vmdk disk formats for export. We will not limit the import
|
81 |
|
formats in any way, but the used format has to be supported by qemu-img.
|
|
86 |
In our implementation of the OVF we allow a choice between raw, cow and
|
|
87 |
vmdk disk formats for both import and export. Other formats covertable
|
|
88 |
using ``qemu-img`` are allowed, but not tested.
|
82 |
89 |
The justification is the following:
|
83 |
90 |
|
84 |
91 |
- Raw format is supported as it is the main format of disk images used
|
... | ... | |
88 |
95 |
has the advantage of producing relatively small disk images, which
|
89 |
96 |
is extremely important advantage when moving instances.
|
90 |
97 |
|
91 |
|
The conversion between RAW and the other formats will be done using
|
92 |
|
qemu-img, which transforms, among other, raw disk images to monolithic
|
93 |
|
sparse vmdk images.
|
94 |
|
|
95 |
98 |
Import and export - the closer look
|
96 |
99 |
===================================
|
97 |
100 |
|
... | ... | |
122 |
125 |
<gnt:DiskTemplate</gnt:DiskTemplate>
|
123 |
126 |
<gnt:OperatingSystem>
|
124 |
127 |
<gnt:Name/>
|
125 |
|
<gnt:Parameters>
|
126 |
|
</gnt:Parameters>
|
|
128 |
<gnt:Parameters></gnt:Parameters>
|
127 |
129 |
</gnt:OperatingSystem>
|
128 |
130 |
<gnt:Hypervisor>
|
129 |
131 |
<gnt:Name/>
|
130 |
|
<gnt:Parameters>
|
131 |
|
</gnt:Parameters>
|
|
132 |
<gnt:Parameters></gnt:Parameters>
|
132 |
133 |
</gnt:Hypervisor>
|
133 |
134 |
<gnt:Network>
|
134 |
135 |
<gnt:Mode/>
|
... | ... | |
151 |
152 |
[instance]
|
152 |
153 |
disk0_dump = filename => File in References
|
153 |
154 |
disk0_ivname = name => generated automatically
|
154 |
|
disk0_size = size_in_mb => calculated after conversion to RAW
|
|
155 |
disk0_size = size_in_mb => calculated after disk conversion
|
155 |
156 |
disk_count = number => generated automatically
|
156 |
157 |
disk_template = disk_type => gnt:DiskTemplate
|
157 |
158 |
hypervisor = hyp-name => gnt:Name in gnt:Hypervisor
|
... | ... | |
195 |
196 |
If this happens you can specify all the missing parameters in
|
196 |
197 |
the command line. Please refer to `Command Line`_ section.
|
197 |
198 |
|
198 |
|
In the `user's manual <TODO: link to manual>`_ we provide examples of
|
|
199 |
In the :doc:`ovfconverter` we provide examples of
|
199 |
200 |
options when converting from VirtualBox, VMWare and OpenSuseStudio.
|
200 |
201 |
|
201 |
202 |
Export to other virtualization software
|
... | ... | |
247 |
248 |
Disks
|
248 |
249 |
-----
|
249 |
250 |
|
250 |
|
As mentioned, Ganeti will allow exporting only ``raw``, ``cow`` and
|
251 |
|
``vmdk`` formats. As for import, we will support all that
|
252 |
|
``qemu-img`` can convert to raw format. At this point this means
|
253 |
|
``raw``, ``cow``, ``qcow``, ``qcow2``, ``vmdk`` and ``cloop``. We do
|
254 |
|
not plan for now to support ``vdi`` or ``vhd``.
|
|
251 |
As mentioned, Ganeti will allow export in ``raw``, ``cow`` and ``vmdk``
|
|
252 |
formats. This means i.e. that the appropriate ``ovf:format``
|
|
253 |
will be provided. It does not mean that other formats cannot be used,
|
|
254 |
rather that we did not test them.
|
|
255 |
As for import, we will support all formats that ``qemu-img`` can convert
|
|
256 |
to ``raw``. At this point this means ``raw``, ``cow``, ``qcow``,
|
|
257 |
``qcow2``, ``vmdk`` and ``cloop``. We do not plan for now to support
|
|
258 |
``vdi`` or ``vhd`` unless they become part of qemu-img supported formats.
|
255 |
259 |
|
256 |
|
We plan to support compression both for import and export - in tar.gz
|
|
260 |
We plan to support compression both for import and export - in gzip
|
257 |
261 |
format. There is also a possibility to provide virtual disk in chunks
|
258 |
262 |
of equal size. The latter will not be implemented in the first version,
|
259 |
263 |
but we do plan to support it eventually.
|
260 |
264 |
|
261 |
|
The ``ovf:format`` tag is not used in our case. Instead we use
|
262 |
|
``qemu-img info``, which provides enough information for our purposes
|
263 |
|
and is better standardized.
|
|
265 |
|
|
266 |
The ``ovf:format`` tag is not used in our case when importing. Instead
|
|
267 |
we use ``qemu-img info``, which provides enough information for our
|
|
268 |
purposes and is better standardized.
|
264 |
269 |
|
265 |
270 |
Please note, that due to security reasons we require the disk image to
|
266 |
271 |
be in the same directory as the ``.ovf`` description file.
|
... | ... | |
278 |
283 |
present, we perform a simple check - if network name specified in
|
279 |
284 |
``NetworkSection`` contains words ``bridged`` or ``routed``, we consider
|
280 |
285 |
this to be the network type. Otherwise option ``auto`` is chosen, in
|
281 |
|
which case the clusters' default value for that field will be used when
|
282 |
|
importing. This provides a safe fallback in case of NAT networks usage,
|
283 |
|
which are commonly used e.g. in VirtualBox.
|
|
286 |
which case the cluster's default value for that field will be used when
|
|
287 |
importing.
|
|
288 |
This provides a safe fallback in case of NAT networks usage, which are
|
|
289 |
commonly used e.g. in VirtualBox.
|
284 |
290 |
|
285 |
291 |
Hardware
|
286 |
292 |
--------
|
... | ... | |
299 |
305 |
Other
|
300 |
306 |
-----
|
301 |
307 |
|
302 |
|
The instance name (``gnt:VirtualSystem\gnt:Name``) has to be resolvable
|
303 |
|
in order for successful import using ``gnt-backup import``.
|
|
308 |
The instance name (``gnt:VirtualSystem\gnt:Name`` or command line's
|
|
309 |
``--name`` option ) has to be resolvable in order for successful import
|
|
310 |
using ``gnt-backup import``.
|
|
311 |
|
304 |
312 |
|
305 |
313 |
_`Command Line`
|
306 |
314 |
===============
|
... | ... | |
308 |
316 |
The basic usage of the ovf tool is one of the following::
|
309 |
317 |
|
310 |
318 |
ovfconverter import filename
|
311 |
|
ovfconverter export filename
|
|
319 |
ovfconverter export --format=<format> filename
|
312 |
320 |
|
313 |
321 |
This will result in a conversion based solely on the content of provided
|
314 |
322 |
file. In case some information required to make the conversion is
|
... | ... | |
339 |
347 |
Disks
|
340 |
348 |
^^^^^
|
341 |
349 |
``--disk-template=diskless`` causes the converter to ignore all other
|
342 |
|
disk option - both from .ovf file and the command line.
|
|
350 |
disk option - both from .ovf file and the command line. Other disk
|
|
351 |
template options include ``plain``, ``drdb``, ``file``, ``sharedfile``
|
|
352 |
and ``blockdev``.
|
343 |
353 |
|
344 |
354 |
``--disk=number:size=value`` causes to create disks instead of
|
345 |
355 |
converting them from OVF package; numbers should start with ``0`` and be
|
... | ... | |
370 |
380 |
``--tags=tag1,tag2,tag3`` is a means of providing tags specific for the
|
371 |
381 |
instance.
|
372 |
382 |
|
|
383 |
|
373 |
384 |
After the conversion is completed, you may use ``gnt-backup import`` to
|
374 |
385 |
import the instance into Ganeti.
|
375 |
386 |
|
376 |
387 |
Example::
|
377 |
388 |
|
378 |
|
ovfconverter file.ovf --disk-template=diskless \
|
379 |
|
--os-type=lenny-image \
|
380 |
|
--backend=vcpus=1,memory=512,auto_balance \
|
381 |
|
-H:xen-pvm \
|
382 |
|
--net=0:mode=bridged,link=xen-br0 \
|
383 |
|
--name=xen.i1 \
|
384 |
|
-v
|
385 |
|
[output]
|
|
389 |
ovfconverter import file.ovf --disk-template=diskless \
|
|
390 |
--os-type=lenny-image \
|
|
391 |
--backend=vcpus=1,memory=512,auto_balance \
|
|
392 |
-H:xen-pvm \
|
|
393 |
--net=0:mode=bridged,link=xen-br0 \
|
|
394 |
--name=xen.i1
|
|
395 |
[...]
|
386 |
396 |
gnt-backup import xen.i1
|
387 |
|
[output]
|
|
397 |
[...]
|
388 |
398 |
gnt-instance list
|
389 |
399 |
|
390 |
400 |
Export options
|
391 |
401 |
--------------
|
392 |
402 |
Export options include choice of disk formats to convert the disk image
|
393 |
|
(``--format``; default=``raw`` with no conversion) and compression of
|
394 |
|
the disk into tar.gz format (``--compress``).
|
395 |
|
User has also the choice of allowing to skip the Ganeti-specific part of
|
396 |
|
the OVF document (``--external``).
|
|
403 |
(``--format``) and compression of the disk into gzip format
|
|
404 |
(``--compress``). User has also the choice of allowing to skip the
|
|
405 |
Ganeti-specific part of the OVF document (``--external``).
|
397 |
406 |
|
398 |
407 |
By default, exported OVF package will not be contained in the OVA
|
399 |
408 |
package, but this may be changed by adding ``--ova`` option.
|
400 |
409 |
|
401 |
|
[TODO: examples of usage]
|
402 |
|
|
403 |
410 |
Please note that in order to create an OVF package, it is first
|
404 |
411 |
required that you export your VM using ``gnt-backup export``.
|
405 |
412 |
|
406 |
|
[TODO: complete example of export]
|
|
413 |
Example::
|
|
414 |
|
|
415 |
gnt-backup export -n node1.xen xen.i1
|
|
416 |
[...]
|
|
417 |
ovfconverter export --format=vmdk --ova --external \
|
|
418 |
--output-dir=~/xen.i1 \
|
|
419 |
/srv/ganeti/export/xen.i1.node1.xen/config.ini
|
407 |
420 |
|
408 |
421 |
Implementation details
|
409 |
422 |
======================
|
... | ... | |
412 |
425 |
---------------
|
413 |
426 |
|
414 |
427 |
Disk conversion for both import and export is done using external tool
|
415 |
|
called qemu-tools. The same tool is used to determine the type of disks.
|
|
428 |
called qemu-tools. The same tool is used to determine the type of disk,
|
|
429 |
as well as its virtual size.
|
416 |
430 |
|
417 |
431 |
|
418 |
432 |
Import
|
... | ... | |
454 |
468 |
|
455 |
469 |
- save gathered information in ``config.ini`` file
|
456 |
470 |
|
457 |
|
ToDo
|
458 |
|
====
|
459 |
|
|
460 |
|
This lists functionalities for import that are not yet implemented, but
|
461 |
|
should be before the initial release:
|
462 |
|
|
463 |
|
- Support for compressed disks
|
464 |
|
|
465 |
471 |
|
466 |
472 |
.. vim: set textwidth=72 :
|
467 |
473 |
.. Local Variables:
|