We add a new field providers to the RAPI output of basic instance
information. This field will be empty for all disk templates except for
external storage.

Signed-off-by: Lisa Velden <[email protected]>
---
 lib/query.py                 |  3 +++
 lib/rapi/rlib2.py            |  2 +-
 src/Ganeti/Objects/Disk.hs   |  5 +++++
 src/Ganeti/Query/Instance.hs | 11 +++++++++++
 4 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/lib/query.py b/lib/query.py
index 36f35eb..dbd254d 100644
--- a/lib/query.py
+++ b/lib/query.py
@@ -2011,6 +2011,9 @@ def _GetInstanceDiskFields():
     (_MakeField("disk.storage_ids", "Disk_storage_ids", QFT_OTHER,
                 "List of disk storage ids"),
      IQ_CONFIG, 0, lambda ctx, inst: [disk.storage_id for disk in inst.disks]),
+    (_MakeField("disk.providers", "Disk_providers", QFT_OTHER,
+                "List of disk ExtStorage providers"),
+     IQ_CONFIG, 0, lambda ctx, inst: [disk.provider for disk in inst.disks]),
     ]
 
   # Disks by number
diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py
index baec638..9d3fda4 100644
--- a/lib/rapi/rlib2.py
+++ b/lib/rapi/rlib2.py
@@ -83,7 +83,7 @@ I_FIELDS = ["name", "admin_state", "os",
             "nic.links", "nic.networks", "nic.networks.names", "nic.bridges",
             "network_port",
             "disk.sizes", "disk.spindles", "disk_usage", "disk.uuids",
-            "disk.names", "disk.storage_ids",
+            "disk.names", "disk.storage_ids", "disk.providers",
             "beparams", "hvparams",
             "oper_state", "oper_ram", "oper_vcpus", "status",
             "custom_hvparams", "custom_beparams", "custom_nicparams",
diff --git a/src/Ganeti/Objects/Disk.hs b/src/Ganeti/Objects/Disk.hs
index f402d7c..9fe6b4f 100644
--- a/src/Ganeti/Objects/Disk.hs
+++ b/src/Ganeti/Objects/Disk.hs
@@ -166,6 +166,11 @@ getStorageId dlid =
     LIDRados _ path -> Just path
     LIDExt _ uniqueName -> Just uniqueName
 
+-- | Returns the provider for ExtStorage and Nothing otherwise
+getExtProvider :: DiskLogicalId -> Maybe String
+getExtProvider (LIDExt provider _) = Just provider
+getExtProvider _ = Nothing
+
 -- | Custom encoder for DiskLogicalId (logical id only).
 encodeDLId :: DiskLogicalId -> JSValue
 encodeDLId (LIDPlain (LogicalVolume vg lv)) =
diff --git a/src/Ganeti/Query/Instance.hs b/src/Ganeti/Query/Instance.hs
index 9a7378a..a73a488 100644
--- a/src/Ganeti/Query/Instance.hs
+++ b/src/Ganeti/Query/Instance.hs
@@ -210,6 +210,9 @@ instanceFields =
   , (FieldDefinition "disk.storage_ids" "Disk_storage_ids" QFTOther
      "List of disk storage ids",
      FieldConfig getStorageIds, QffNormal)
+  , (FieldDefinition "disk.providers" "Disk_providers" QFTOther
+     "List of disk ExtStorage providers",
+     FieldConfig getProviders, QffNormal)
     -- For pre-2.14 backwards compatibility
   , (FieldDefinition "disk_template" "Disk_template" QFTText
      "Instance disk template",
@@ -419,6 +422,14 @@ getDiskUuids :: ConfigData -> Instance -> ResultEntry
 getDiskUuids cfg =
   rsErrorNoData . liftA (map uuidOf) . getInstDisksFromObj cfg
 
+-- | Get a list of ExtStorage providers for an instance
+getProviders :: ConfigData -> Instance -> ResultEntry
+getProviders cfg =
+  rsErrorNoData . liftA (map MaybeForJSON . filter isJust
+                         . mapMaybe getProvider) . getInstDisksFromObj cfg
+ where
+  getProvider x = getExtProvider <$> diskLogicalId x
+
 -- | Get a list of disk storage ids for an instance. Note that for DRBD the 
list
 -- will be empty.
 getStorageIds :: ConfigData -> Instance -> ResultEntry
-- 
2.6.0.rc2.230.g3dd15c0

Reply via email to