Hello team,

Until now, Ganeti can handle shared storage in two ways:

 - with the `drbd' disk template (internally)
 - with the `blockdev' and `sharedfile' template (externally)

As stated in the shared-storage design doc, the blockdev and sharedfile
template cannot handle operations on the storage, except for adoption.
This means that all provisioning, removal, resizing, attachment,
detachment of volumes has to be done manually by the administrator; the
volumes are then passed to Ganeti via adoption.

This patch series implements the external shared storage interface
(ExtStorage) for Ganeti, as introduced in the shared-storage design doc.
The ExtStorage interface introduces a generic way for Ganeti to handle
external shared storage. The set also updates the design doc, to reflect
additional design adjustments and features that emerged during the
implementation.

The ExtStorage interface is heavily influenced by the gnt-os-interface.
Similarly to OS definitions, it features distinct ExtStorage providers;
each provider is a set of scripts which handles all operations on an
external storage hardware.

The patch set introduces a new disk template called `ext', which is a
DTS_EXT_MIRROR template.  The template implements the existing disk
interface, but passes control to the appropriate external script to
perform the actual operations. It is the glue between the existing disk
interface and the ExtStorage providers.

In correspondence with OS parameters, every ExtStorage provider
introduces ext-params, which the user can pass dynamically to the
scripts. 

We introduce a new client called `gnt-storage'. It diagnoses the
providers and also shows information about them, similarly to
gnt-os {diagnose, info}. This client can be extended in the future to
handle generic storage pool management and also diagnose other types of
templates too.

I'm looking forward to your comments,
Constantinos


Constantinos Venetsanopoulos (5):
      Implement the External Storage Interface
      Multiple ExtStorage Providers and ext-params
      Add the gnt-storage client
      Add external storage interface related man pages
      Update the shared storage design document

 .gitignore                          |    1 +
 Makefile.am                         |    9 +-
 autotools/build-bash-completion     |    4 +
 configure.ac                        |   12 ++
 doc/design-shared-storage.rst       |  204 +++++++++++---------
 lib/backend.py                      |   45 +++++
 lib/bdev.py                         |  352 ++++++++++++++++++++++++++++++++++-
 lib/cli.py                          |   12 +-
 lib/client/gnt_cluster.py           |    2 +
 lib/client/gnt_storage.py           |  197 +++++++++++++++++++
 lib/cmdlib.py                       |  211 ++++++++++++++++++++-
 lib/constants.py                    |   52 +++++-
 lib/objects.py                      |   22 ++-
 lib/opcodes.py                      |   66 +++++++
 lib/query.py                        |   34 ++++
 lib/rpc_defs.py                     |    7 +-
 lib/server/noded.py                 |    9 +
 man/footer.rst                      |   11 +-
 man/ganeti-extstorage-interface.rst |  212 +++++++++++++++++++++
 man/gnt-storage.rst                 |   63 +++++++
 tools/burnin                        |    1 +
 21 files changed, 1406 insertions(+), 120 deletions(-)

Reply via email to