Implement the External Storage Interface
authorConstantinos Venetsanopoulos <cven@grnet.gr>
Mon, 12 Mar 2012 15:49:18 +0000 (17:49 +0200)
committerIustin Pop <iustin@google.com>
Thu, 20 Dec 2012 15:06:02 +0000 (16:06 +0100)
commit376631d15d3672cfba323bdf384089fd65c08c9a
treef6849b5fe49c73bd5a5472a3b545d2eada16dbee
parent32ba31be5b6572ece8b03c1c0148f3c765edf6af
Implement the External Storage Interface

With this commit we introduce the External Storage Interface
to Ganeti, abbreviated: ExtStorage Interface.

The ExtStorage Interface provides Ganeti with the ability to interact
with externally connected shared storage pools, visible by all
VM-capable nodes. This means that Ganeti is able to handle VM disks
that reside inside a NAS/SAN or any distributed block storage provider.

The ExtStorage Interface provides a clear API, heavily inspired by the
gnt-os-interface API, that can be used by storage vendors or sysadmins
to write simple ExtStorage Providers (correlated to gnt-os-interface's
OS Definitions). Those Providers will glue externally attached shared
storage with Ganeti, without the need of preprovisioned block devices
on Ganeti VM-capable nodes as confined be the current `blockdev' disk
template.

To do so, we implement a new disk template called `ext' (of type
DTS_EXT_MIRROR) that passes control to externally provided scripts
(the ExtStorage Provider) for the template's basic functions:

 create / attach / detach / remove / grow

The scripts reside under ES_SEARCH_PATH (correlated to OS_SEARCH_PATH)
and only one ExtStorage Provider is supported called `ext'.

The disk's logical id is the tuple ('ext', UUID.ext.diskX), where UUID
is generated as in disk template `plain' and X is the disk's index.

Signed-off-by: Constantinos Venetsanopoulos <cven@grnet.gr>
Signed-off-by: Iustin Pop <iustin@google.com>
[iustin@google.com: small simplification in bdev code, pylint fixes]
Reviewed-by: Iustin Pop <iustin@google.com>
Makefile.am
configure.ac
lib/bdev.py
lib/client/gnt_cluster.py
lib/cmdlib.py
lib/constants.py
lib/masterd/instance.py
lib/objects.py
lib/pathutils.py
tools/burnin