Module: check_mk
Branch: master
Commit: 79563a4e6b41c969af25a7c725c6a13a53cb546e
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=79563a4e6b41c9…
Author: Sven Panne <sp(a)mathias-kettner.de>
Date: Fri Dec 14 14:02:28 2018 +0100
Verify werk fields.
Change-Id: Ia0a1b725ddbb68be19bc7440d1a4d90a594d2215
---
cmk/utils/werks.py | 34 ++++++++++++++++++++++++++++++----
1 file changed, 30 insertions(+), 4 deletions(-)
diff --git a/cmk/utils/werks.py b/cmk/utils/werks.py
index 9025336..a5a650c 100644
--- a/cmk/utils/werks.py
+++ b/cmk/utils/werks.py
@@ -129,9 +129,31 @@ def load_raw_files(werks_dir):
return werks
+_REQUIRED_WERK_FIELDS = {
+ "class",
+ "component",
+ "date",
+ "level",
+ "title",
+ "version",
+}
+
+_OPTIONAL_WERK_FIELDS = {
+ "compatible",
+ "edition",
+ # TODO: What's this? Can we simply nuke the fields below from all werks?
+ "state",
+ "targetversion",
+}
+
+_ALLOWED_WERK_FIELDS = _REQUIRED_WERK_FIELDS | _OPTIONAL_WERK_FIELDS
+
+
def _load_werk(path):
werk = {
"body": [],
+ "compatible": "compat",
+ "edition": "cre",
}
in_header = True
with path.open(encoding="utf-8") as fp:
@@ -145,13 +167,17 @@ def _load_werk(path):
value = int(text.strip())
except ValueError:
value = text.strip()
- werk[key.lower()] = value
+ field = key.lower()
+ if field not in _ALLOWED_WERK_FIELDS:
+ raise MKGeneralException("unknown werk field %s" % key)
+ werk[field] = value
else:
werk["body"].append(line)
- werk.setdefault("compatible", "compat")
- werk.setdefault("edition", "cre")
-
+ missing_fields = _REQUIRED_WERK_FIELDS - set(werk.keys())
+ if missing_fields:
+ raise MKGeneralException("missing fields: %s" %
",".join(missing_fields))
+ # TODO: Check if all fields have an allowed value, see .werks/config.
return werk