diff options
author | John Estabrook <jestabro@vyos.io> | 2020-01-14 09:18:16 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-14 09:18:16 -0600 |
commit | 29e3f990303c6d01c37f4fafc44d0d3cbcd4558e (patch) | |
tree | 2828d034d5ae467abbfb155015f40685d2518424 /python | |
parent | 91de4ec9d95a6a99df0ad5363633251bcb5f4874 (diff) | |
parent | 29e438755c8bd2b9598a2016a3c42891f0cbfa1d (diff) | |
download | vyos-1x-29e3f990303c6d01c37f4fafc44d0d3cbcd4558e.tar.gz vyos-1x-29e3f990303c6d01c37f4fafc44d0d3cbcd4558e.zip |
Merge pull request #205 from jestabro/syntax-version
Syntax version
Diffstat (limited to 'python')
-rw-r--r-- | python/vyos/defaults.py | 2 | ||||
-rw-r--r-- | python/vyos/systemversions.py | 28 |
2 files changed, 28 insertions, 2 deletions
diff --git a/python/vyos/defaults.py b/python/vyos/defaults.py index dedb929b4..a2ad142bc 100644 --- a/python/vyos/defaults.py +++ b/python/vyos/defaults.py @@ -29,6 +29,8 @@ cfg_vintage = 'vyatta' commit_lock = '/opt/vyatta/config/.lock' +version_file = '/usr/share/vyos/component-versions.json' + https_data = { 'listen_addresses' : { '*': ['_'] } } diff --git a/python/vyos/systemversions.py b/python/vyos/systemversions.py index 9b3f4f413..5c4deca29 100644 --- a/python/vyos/systemversions.py +++ b/python/vyos/systemversions.py @@ -16,12 +16,15 @@ import os import re import sys +import json + import vyos.defaults def get_system_versions(): """ - Get component versions from running system; critical failure if - unable to read migration directory. + Get component versions from running system: read vyatta directory + structure for versions, then read vyos JSON file. It is a critical + error if either migration directory or JSON file is unreadable. """ system_versions = {} @@ -36,4 +39,25 @@ def get_system_versions(): pair = info.split('@') system_versions[pair[0]] = int(pair[1]) + version_dict = {} + path = vyos.defaults.version_file + + if os.path.isfile(path): + with open(path, 'r') as f: + try: + version_dict = json.load(f) + except ValueError as err: + print(f"\nValue error in {path}: {err}") + sys.exit(1) + + for k, v in version_dict.items(): + if not isinstance(v, int): + print(f"\nType error in {path}; expecting Dict[str, int]") + sys.exit(1) + existing = system_versions.get(k) + if existing is None: + system_versions[k] = v + elif v > existing: + system_versions[k] = v + return system_versions |