From 130a6a6ff0223537219f70aea30ee14136e81040 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Sun, 22 Jun 2008 10:57:52 +0000 Subject: [PATCH] =?UTF-8?q?Add=20a=20=E2=80=98tags=E2=80=99=20field=20to?= =?UTF-8?q?=20instance=20and=20node=20listing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently there isn't any easy way to list all nodes or instance and their tags; you have to query each node in turn, or list all the tags via something like βgnt-cluster search-tags '.*'β. Of course, this is not optimal. The patch adds a new fields to βgnt-instance listβ and βgnt-node listβ called βtagsβ, that will list the tags of the object in comma-separated form. This field will be empty if there are no tags (when using a separator this output can still be parsed by other scripts). At opcode level, there is a new fields called βtagsβ that returns a (python) list of the object tags. Reviewed-by: ultrotter --- lib/cmdlib.py | 8 ++++++-- man/gnt-instance.sgml | 7 +++++++ man/gnt-node.sgml | 7 +++++++ scripts/gnt-instance | 5 ++++- scripts/gnt-node | 6 +++--- 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 1789d2006..cf028bcd5 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -1271,7 +1271,7 @@ class LUQueryNodes(NoHooksLU): _CheckOutputFields(static=["name", "pinst_cnt", "sinst_cnt", "pinst_list", "sinst_list", - "pip", "sip"], + "pip", "sip", "tags"], dynamic=self.dynamic_fields, selected=self.op.output_fields) @@ -1342,6 +1342,8 @@ class LUQueryNodes(NoHooksLU): val = node.primary_ip elif field == "sip": val = node.secondary_ip + elif field == "tags": + val = list(node.GetTags()) elif field in self.dynamic_fields: val = live_data[node.name].get(field, None) else: @@ -2488,7 +2490,7 @@ class LUQueryInstances(NoHooksLU): _CheckOutputFields(static=["name", "os", "pnode", "snodes", "admin_state", "admin_ram", "disk_template", "ip", "mac", "bridge", - "sda_size", "sdb_size", "vcpus"], + "sda_size", "sdb_size", "vcpus", "tags"], dynamic=self.dynamic_fields, selected=self.op.output_fields) @@ -2581,6 +2583,8 @@ class LUQueryInstances(NoHooksLU): val = disk.size elif field == "vcpus": val = instance.vcpus + elif field == "tags": + val = list(instance.GetTags()) else: raise errors.ParameterError(field) iout.append(val) diff --git a/man/gnt-instance.sgml b/man/gnt-instance.sgml index d1f8a9444..0095fbf9a 100644 --- a/man/gnt-instance.sgml +++ b/man/gnt-instance.sgml @@ -575,6 +575,13 @@ instance</simpara> </listitem> </varlistentry> + <varlistentry> + <term>tags</term> + <listitem> + <simpara>comma-separated list of the instances's + tags</simpara> + </listitem> + </varlistentry> </variablelist> </para> diff --git a/man/gnt-node.sgml b/man/gnt-node.sgml index cae8a8f4b..65b8d81f5 100644 --- a/man/gnt-node.sgml +++ b/man/gnt-node.sgml @@ -326,6 +326,13 @@ changes in this value)</simpara> </listitem> </varlistentry> + <varlistentry> + <term>tags</term> + <listitem> + <simpara>comma-separated list of the node's + tags</simpara> + </listitem> + </varlistentry> </variablelist> </para> diff --git a/scripts/gnt-instance b/scripts/gnt-instance index 497a528a7..06caf943f 100755 --- a/scripts/gnt-instance +++ b/scripts/gnt-instance @@ -188,7 +188,7 @@ def ListInstances(opts, args): "ip": "IP Address", "mac": "MAC Address", "bridge": "Bridge", "vcpus": "VCPUs", "sda_size": "Disk/0", "sdb_size": "Disk/1", - "status": "Status", + "status": "Status", "tags": "Tags", } else: headers = None @@ -200,6 +200,7 @@ def ListInstances(opts, args): numfields = ["admin_ram", "oper_ram", "sda_size", "sdb_size", "vcpus"] + list_type_fields = ("tags",) # change raw values to nicer strings for row in output: for idx, field in enumerate(selected_fields): @@ -224,6 +225,8 @@ def ListInstances(opts, args): elif field == "sda_size" or field == "sdb_size": if val is None: val = "N/A" + elif field in list_type_fields: + val = ",".join(val) row[idx] = str(val) data = GenerateTable(separator=opts.separator, headers=headers, diff --git a/scripts/gnt-node b/scripts/gnt-node index 3c2189a94..6b310964d 100755 --- a/scripts/gnt-node +++ b/scripts/gnt-node @@ -70,6 +70,7 @@ def ListNodes(opts, args): "mtotal": "MTotal", "mnode": "MNode", "mfree": "MFree", "bootid": "BootID", "ctotal": "CTotal", + "tags": "Tags", } else: headers = None @@ -84,13 +85,12 @@ def ListNodes(opts, args): "pinst_cnt", "sinst_cnt", "ctotal"] + list_type_fields = ("pinst_list", "sinst_list", "tags") # change raw values to nicer strings for row in output: for idx, field in enumerate(selected_fields): val = row[idx] - if field == "pinst_list": - val = ",".join(val) - elif field == "sinst_list": + if field in list_type_fields: val = ",".join(val) elif val is None: val = "?" -- GitLab