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
