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(-)