From 760bf1a9bcac34bd786aa62edbe9a01d03e10f99 Mon Sep 17 00:00:00 2001 From: kroy-the-rabbit Date: Sun, 7 Jun 2020 10:08:58 -0500 Subject: op-mode: T2558: fix hypervisor bug, add CPU info to "show version" --- python/vyos/version.py | 34 ++++++++++++++++++++++++++++------ src/op_mode/version.py | 44 ++++++++++++++++++++++++++++++-------------- 2 files changed, 58 insertions(+), 20 deletions(-) diff --git a/python/vyos/version.py b/python/vyos/version.py index a524b36ea..f5eac5a58 100644 --- a/python/vyos/version.py +++ b/python/vyos/version.py @@ -31,6 +31,7 @@ Example of the version data dict:: import os import json +import logging import vyos.defaults @@ -76,13 +77,34 @@ def get_full_version_data(fname=version_file): # Get system architecture (well, kernel architecture rather) version_data['system_arch'], _ = popen('uname -m', stderr=DEVNULL) - # Get hypervisor name, if any - try: - hypervisor, _ = popen('hvinfo', stderr=DEVNULL) + cpu_json,code = popen('lscpu -J',stderr=DEVNULL) + + cpu = {} + if code == 0: + cpu_info = json.loads(cpu_json) + if len(cpu_info) > 0 and 'lscpu' in cpu_info: + for prop in cpu_info['lscpu']: + if (prop['field'].find('Thread(s)') > -1): cpu['threads'] = prop['data'] + if (prop['field'].find('Core(s)')) > -1: cpu['cores'] = prop['data'] + if (prop['field'].find('Socket(s)')) > -1: cpu['sockets'] = prop['data'] + if (prop['field'].find('CPU(s):')) > -1: cpu['cpus'] = prop['data'] + if (prop['field'].find('CPU MHz')) > -1: cpu['mhz'] = prop['data'] + if (prop['field'].find('CPU min MHz')) > -1: cpu['mhz_min'] = prop['data'] + if (prop['field'].find('CPU max MHz')) > -1: cpu['mhz_max'] = prop['data'] + if (prop['field'].find('Vendor ID')) > -1: cpu['vendor'] = prop['data'] + if (prop['field'].find('Model name')) > -1: cpu['model'] = prop['data'] + + if len(cpu) > 0: + version_data['cpu'] = cpu + + + + hypervisor,code = popen('hvinfo', stderr=DEVNULL) + if code == 1: + # hvinfo returns 1 if it cannot detect any hypervisor + version_data['system_type'] = 'bare metal' + else: version_data['system_type'] = f"{hypervisor} guest" - except OSError: - # hvinfo returns 1 if it cannot detect any hypervisor - version_data['system_type'] = 'bare metal' # Get boot type, it can be livecd, installed image, or, possible, a system installed # via legacy "install system" mechanism diff --git a/src/op_mode/version.py b/src/op_mode/version.py index 1baed2bd5..160aa9f26 100755 --- a/src/op_mode/version.py +++ b/src/op_mode/version.py @@ -21,6 +21,7 @@ import sys import argparse import json +import jinja2 import vyos.version import vyos.limericks @@ -33,22 +34,34 @@ parser.add_argument("-f", "--funny", action="store_true", help="Add something fu parser.add_argument("-j", "--json", action="store_true", help="Produce JSON output") version_output_tmpl = """ -Version: VyOS {version} -Release Train: {release_train} +Version: VyOS {{version}} +Release Train: {{release_train}} -Built by: {built_by} -Built on: {built_on} -Build UUID: {build_uuid} -Build Commit ID: {build_git} +Built by: {{built_by}} +Built on: {{built_on}} +Build UUID: {{build_uuid}} +Build Commit ID: {{build_git}} -Architecture: {system_arch} -Boot via: {boot_via} -System type: {system_type} +Architecture: {{system_arch}} +Boot via: {{boot_via}} +System type: {{system_type}} +{% if cpu %} -Hardware vendor: {hardware_vendor} -Hardware model: {hardware_model} -Hardware S/N: {hardware_serial} -Hardware UUID: {hardware_uuid} +{% if 'vendor' in cpu %}CPU Vendor: {{cpu.vendor}}{% endif %} +{% if 'model' in cpu %}Model: {{cpu.model}}{% endif %} +{% if 'cpus' in cpu %}Total CPUs: {{cpu.cpus}}{% endif %} +{% if 'sockets' in cpu %}Sockets: {{cpu.sockets}}{% endif %} +{% if 'cores' in cpu %}Cores: {{cpu.cores}}{% endif %} +{% if 'threads' in cpu %}Threads: {{cpu.threads}}{% endif %} +{% if 'mhz' in cpu %}Current MHz: {{cpu.mhz}}{% endif %} +{% if 'mhz_min' in cpu %}Minimum MHz: {{cpu.mhz_min}}{% endif %} +{% if 'mhz_max' in cpu %}Maximum MHz: {{cpu.mhz_max}}{% endif %} +{% endif %} + +Hardware vendor: {{hardware_vendor}} +Hardware model: {{hardware_model}} +Hardware S/N: {{hardware_serial}} +Hardware UUID: {{hardware_uuid}} Copyright: VyOS maintainers and contributors """ @@ -62,7 +75,10 @@ if __name__ == '__main__': print(json.dumps(version_data)) sys.exit(0) - print(version_output_tmpl.format(**version_data).strip()) + tmpl = jinja2.Template(version_output_tmpl) + print(tmpl.render(version_data)) + + #print(version_output_tmpl.format(**version_data).strip()) if args.all: print("Package versions:") -- cgit v1.2.3