-======================================
-Ganeti shared storage support for 2.3+
-======================================
+=============================
+Ganeti shared storage support
+=============================
This document describes the changes in Ganeti 2.3+ compared to Ganeti
-2.3 storage model.
+2.3 storage model. It also documents the ExtStorage Interface.
.. contents:: :depth: 4
.. highlight:: shell-example
Background
==========
+
DRBD is currently the only shared storage backend supported by Ganeti.
DRBD offers the advantages of high availability while running on
commodity hardware at the cost of high network I/O for block-level
Use cases
=========
+
We consider the following use cases:
- A virtualization cluster with FibreChannel shared storage, mapping at
storage.
- Introduction of a shared file storage disk template for use with networked
filesystems.
-- Introduction of shared block device disk template with device
+- Introduction of a shared block device disk template with device
adoption.
-- Introduction of an External Storage Interface.
+- Introduction of the External Storage Interface.
Additionally, mid- to long-term goals include:
- The device will be available with the same path under all nodes in the
node group.
-Introduction of an External Storage Interface
+Introduction of the External Storage Interface
==============================================
+
Overview
--------
- Grow a disk
- Attach a disk to a given node
- Detach a disk from a given node
+- SetInfo to a disk (add metadata)
- Verify its supported parameters
The proposed ExtStorage interface borrows heavily from the OS
- ``grow``
- ``attach``
- ``detach``
+- ``setinfo``
- ``verify``
All scripts will be called with no arguments and get their input via
``EXTP_name``
ExtStorage parameter, where `name` is the parameter in
upper-case (same as OS interface's ``OSP_*`` parameters).
+``VOL_METADATA``
+ A string containing metadata to be set for the volume.
+ This is exported only to the ``setinfo`` script.
All scripts except `attach` should return 0 on success and non-zero on
error, accompanied by an appropriate error message on stderr. The
To support the ExtStorage interface, we will introduce a new disk
template called `ext`. This template will implement the existing Ganeti
disk interface in `lib/bdev.py` (create, remove, attach, assemble,
-shutdown, grow), and will simultaneously pass control to the external
-scripts to actually handle the above actions. The `ext` disk template
-will act as a translation layer between the current Ganeti disk
+shutdown, grow, setinfo), and will simultaneously pass control to the
+external scripts to actually handle the above actions. The `ext` disk
+template will act as a translation layer between the current Ganeti disk
interface and the ExtStorage providers.
We will also introduce a new IDISK_PARAM called `IDISK_PROVIDER =