diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 7cd5100072c136bcb468cf1d3abca1d2c39bca6e..1c64ed234cad892c9b3d3c199c17e1dc452edec6 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -5063,7 +5063,10 @@ class LUQueryInstances(NoHooksLU): if name not in constants.HVC_GLOBALS] + ["be/%s" % name for name in constants.BES_PARAMETERS]) - _FIELDS_DYNAMIC = utils.FieldSet("oper_state", "oper_ram", "status") + _FIELDS_DYNAMIC = utils.FieldSet("oper_state", + "oper_ram", + "oper_vcpus", + "status") def CheckArguments(self): @@ -5194,6 +5197,13 @@ class LUQueryInstances(NoHooksLU): val = live_data[instance.name].get("memory", "?") else: val = "-" + elif field == "oper_vcpus": + if instance.primary_node in bad_nodes: + val = None + elif instance.name in live_data: + val = live_data[instance.name].get("vcpus", "?") + else: + val = "-" elif field == "vcpus": val = i_be[constants.BE_VCPUS] elif field == "disk_template": diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 628ca4ec1a09df02bb6909b68cd69fe675ac49b9..19da11500af0cb88b7a8cc260ee6bd55ba39d660 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -58,7 +58,7 @@ I_FIELDS = ["name", "admin_state", "os", "network_port", "disk.sizes", "disk_usage", "beparams", "hvparams", - "oper_state", "oper_ram", "status", + "oper_state", "oper_ram", "oper_vcpus", "status", ] + _COMMON_FIELDS N_FIELDS = ["name", "offline", "master_candidate", "drained", diff --git a/man/gnt-instance.sgml b/man/gnt-instance.sgml index 4ebd582fbb0036762a5619b3f652d8705afa2756..dd68fd15c6282d986e285af0da70a829376ac96a 100644 --- a/man/gnt-instance.sgml +++ b/man/gnt-instance.sgml @@ -1149,6 +1149,13 @@ instance5: 11225 by the hypervisor</simpara> </listitem> </varlistentry> + <varlistentry> + <term>oper_vcpus</term> + <listitem> + <simpara>the actual number of VCPUs the instance is using + as seen by the hypervisor</simpara> + </listitem> + </varlistentry> <varlistentry> <term>ip</term> <listitem> @@ -1400,7 +1407,8 @@ instance5: 11225 <para> There is a subtle grouping about the available output fields: all fields except for <option>oper_state</option>, - <option>oper_ram</option> and <option>status</option> are + <option>oper_ram</option>, <option>oper_vcpus</option> and + <option>status</option> are configuration value and not run-time values. So if you don't select any of the these fields, the query will be satisfied instantly from the cluster configuration, without having to diff --git a/qa/qa_rapi.py b/qa/qa_rapi.py index 09dd74a3abf9271462a95bf517ccebf5bb4fc740..a8a54f738219d1058fbad49c414ad8762be2ebde 100644 --- a/qa/qa_rapi.py +++ b/qa/qa_rapi.py @@ -88,7 +88,7 @@ INSTANCE_FIELDS = ("name", "os", "pnode", "snodes", "disk_template", "disk.sizes", "nic.ips", "nic.macs", "nic.modes", "nic.links", "beparams", "hvparams", - "oper_state", "oper_ram", "status", "tags") + "oper_state", "oper_ram", "oper_vcpus", "status", "tags") NODE_FIELDS = ("name", "dtotal", "dfree", "mtotal", "mnode", "mfree", diff --git a/scripts/gnt-instance b/scripts/gnt-instance index 475514e9b9f66005eba9cd1630243191a6ba864e..53491de535e3353ab08f91b2a94a715ae0930d9c 100755 --- a/scripts/gnt-instance +++ b/scripts/gnt-instance @@ -258,6 +258,7 @@ def ListInstances(opts, args): "snodes": "Secondary_Nodes", "admin_state": "Autostart", "oper_state": "Running", "oper_ram": "Memory", "disk_template": "Disk_template", + "oper_vcpus": "VCPUs", "ip": "IP_address", "mac": "MAC_address", "nic_mode": "NIC_Mode", "nic_link": "NIC_Link", "bridge": "Bridge", @@ -316,6 +317,9 @@ def ListInstances(opts, args): elif field == "oper_ram": if val is None: val = "(node down)" + elif field == "oper_vcpus": + if val is None: + val = "(node down)" elif field == "sda_size" or field == "sdb_size": if val is None: val = "N/A" @@ -1423,8 +1427,9 @@ commands = { "[<instance>...]", "Lists the instances and their status. The available fields are" " (see the man page for details): status, oper_state, oper_ram," - " name, os, pnode, snodes, admin_state, admin_ram, disk_template," - " ip, mac, nic_mode, nic_link, sda_size, sdb_size, vcpus, serial_no," + " oper_vcpus, name, os, pnode, snodes, admin_state, admin_ram," + " disk_template, ip, mac, nic_mode, nic_link, sda_size, sdb_size," + " vcpus, serial_no," " nic.count, nic.mac/N, nic.ip/N, nic.mode/N, nic.link/N," " nic.macs, nic.ips, nic.modes, nic.links," " disk.count, disk.size/N, disk.sizes,"