summaryrefslogtreecommitdiff
path: root/cloudinit/config/cc_runcmd.py
diff options
context:
space:
mode:
authorBrett Holman <bholman.devel@gmail.com>2021-12-06 15:27:12 -0700
committerGitHub <noreply@github.com>2021-12-06 15:27:12 -0700
commitbedac77e9348e7a54c0ec364fb61df90cd893972 (patch)
tree73a0ddaada5ceb256e22c053fec50db82671d14c /cloudinit/config/cc_runcmd.py
parentf428ed1611bdb685598832dd42495f0bcda40ec4 (diff)
downloadvyos-cloud-init-bedac77e9348e7a54c0ec364fb61df90cd893972.tar.gz
vyos-cloud-init-bedac77e9348e7a54c0ec364fb61df90cd893972.zip
Add Strict Metaschema Validation (#1101)
Improve schema validation. This adds strict validation of config module definitions at testing time, with plumbing included for future runtime validation. This eliminates a class of bugs resulting from schemas that have definitions that are incorrect, but get interpreted by jsonschema as "additionalProperties" that are therefore ignored. - Add strict meta-schema for jsonschema unit test validation - Separate schema from module metadata structure - Improve type annotations for various functions and data types Cleanup: - Remove unused jsonschema "required" elements - Eliminate manual memoization in schema.py:get_schema(), reference module.__doc__ directly
Diffstat (limited to 'cloudinit/config/cc_runcmd.py')
-rw-r--r--cloudinit/config/cc_runcmd.py11
1 files changed, 6 insertions, 5 deletions
diff --git a/cloudinit/config/cc_runcmd.py b/cloudinit/config/cc_runcmd.py
index 15960c7d..2f5e02cb 100644
--- a/cloudinit/config/cc_runcmd.py
+++ b/cloudinit/config/cc_runcmd.py
@@ -8,8 +8,7 @@
"""Runcmd: run arbitrary commands at rc.local with output to the console"""
-from cloudinit.config.schema import (
- get_schema_doc, validate_cloudconfig_schema)
+from cloudinit.config.schema import get_meta_doc, validate_cloudconfig_schema
from cloudinit.distros import ALL_DISTROS
from cloudinit.settings import PER_INSTANCE
from cloudinit import util
@@ -26,7 +25,7 @@ from textwrap import dedent
distros = [ALL_DISTROS]
-schema = {
+meta = {
'id': 'cc_runcmd',
'name': 'Runcmd',
'title': 'Run arbitrary commands',
@@ -58,6 +57,9 @@ schema = {
- [ wget, "http://example.org", -O, /tmp/index.html ]
""")],
'frequency': PER_INSTANCE,
+}
+
+schema = {
'type': 'object',
'properties': {
'runcmd': {
@@ -71,12 +73,11 @@ schema = {
'additionalItems': False, # Reject items of non-string non-list
'additionalProperties': False,
'minItems': 1,
- 'required': [],
}
}
}
-__doc__ = get_schema_doc(schema) # Supplement python help()
+__doc__ = get_meta_doc(meta, schema) # Supplement python help()
def handle(name, cfg, cloud, log, _args):