• Constantinos Venetsanopoulos's avatar
    Implement the External Storage Interface · 376631d1
    Constantinos Venetsanopoulos authored
    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
    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: default avatarConstantinos Venetsanopoulos <cven@grnet.gr>
    Signed-off-by: default avatarIustin Pop <iustin@google.com>
    [iustin@google.com: small simplification in bdev code, pylint fixes]
    Reviewed-by: default avatarIustin Pop <iustin@google.com>
cmdlib.py 584 KB