From 024e157f5122f45bd2796265c2e25a1bdfa99ad6 Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Mon, 9 Feb 2009 14:04:08 +0000
Subject: [PATCH] =?UTF-8?q?Add=20a=20new=20instance=20query=20flag=20?=
 =?UTF-8?q?=E2=80=98disk=5Fusage=E2=80=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch adds a new instance query flag called disk_usage that
retrieves the overall space used by an instance on each of its nodes.
This can be used when balancing the cluster or checking N+1 status.

The flag is also exported in RAPI. Note the flag is currently broken for
file-based instances, as it represents the amount of space in the
cluster volume group.

Reviewed-by: ultrotter
---
 lib/cmdlib.py        | 5 ++++-
 lib/rapi/rlib2.py    | 2 +-
 scripts/gnt-instance | 1 +
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 3f974ee53..bf66dda73 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -3087,7 +3087,7 @@ class LUQueryInstances(NoHooksLU):
                                     "sda_size", "sdb_size", "vcpus", "tags",
                                     "network_port", "beparams",
                                     "(disk).(size)/([0-9]+)",
-                                    "(disk).(sizes)",
+                                    "(disk).(sizes)", "disk_usage",
                                     "(nic).(mac|ip|bridge)/([0-9]+)",
                                     "(nic).(macs|ips|bridges)",
                                     "(disk|nic).(count)",
@@ -3244,6 +3244,9 @@ class LUQueryInstances(NoHooksLU):
             val = instance.FindDisk(idx).size
           except errors.OpPrereqError:
             val = None
+        elif field == "disk_usage": # total disk usage per node
+          disk_sizes = [{'size': disk.size} for disk in instance.disks]
+          val = _ComputeDiskSize(instance.disk_template, disk_sizes)
         elif field == "tags":
           val = list(instance.GetTags())
         elif field == "serial_no":
diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py
index 67d802d10..a84ce3257 100644
--- a/lib/rapi/rlib2.py
+++ b/lib/rapi/rlib2.py
@@ -34,7 +34,7 @@ I_FIELDS = ["name", "admin_state", "os",
             "pnode", "snodes",
             "disk_template",
             "nic.ips", "nic.macs", "nic.bridges",
-            "disk.sizes",
+            "disk.sizes", "disk_usage",
             "beparams", "hvparams",
             "oper_state", "oper_ram", "status",
             "tags"]
diff --git a/scripts/gnt-instance b/scripts/gnt-instance
index b09f4d760..4cbc30b9b 100755
--- a/scripts/gnt-instance
+++ b/scripts/gnt-instance
@@ -226,6 +226,7 @@ def ListInstances(opts, args):
       "ip": "IP_address", "mac": "MAC_address",
       "bridge": "Bridge",
       "sda_size": "Disk/0", "sdb_size": "Disk/1",
+      "disk_usage": "DiskUsage",
       "status": "Status", "tags": "Tags",
       "network_port": "Network_port",
       "hv/kernel_path": "Kernel_path",
-- 
GitLab