summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python/vyos/version.py34
-rwxr-xr-xsrc/op_mode/version.py44
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:")