summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2025-08-19 09:03:52 -0500
committerGitHub <noreply@github.com>2025-08-19 09:03:52 -0500
commite83507a30cc8082895a39a25052ebee03036b170 (patch)
tree2084750bf96544376f58518dffc9d2bca2f5edbd /src
parent4da82c6cfd8d46acbc198a0ecaf8b61763b62692 (diff)
parent41d0fc3270a40185112b4459767bac217e369212 (diff)
downloadvyos-1x-e83507a30cc8082895a39a25052ebee03036b170.tar.gz
vyos-1x-e83507a30cc8082895a39a25052ebee03036b170.zip
Merge pull request #4660 from jestabro/validate-tree
T7718: expose validate_tree* methods and add validate-config script
Diffstat (limited to 'src')
-rwxr-xr-xsrc/helpers/validate-config.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/helpers/validate-config.py b/src/helpers/validate-config.py
new file mode 100755
index 000000000..1c77d2240
--- /dev/null
+++ b/src/helpers/validate-config.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python3
+#
+# Copyright VyOS maintainers and contributors <maintainers@vyos.io>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+import sys
+import argparse
+
+from vyos.configtree import ConfigTree
+from vyos.configtree import validate_tree_filter
+from vyos.component_version import add_system_version
+
+
+parser = argparse.ArgumentParser()
+parser.add_argument('config_file', help='config file to validate')
+parser.add_argument('--filtered-config', help='write valid subset of config file')
+
+args = parser.parse_args()
+
+config_file = args.config_file
+filtered_config = args.filtered_config
+
+with open(config_file) as f:
+ config_str = f.read()
+
+config_tree = ConfigTree(config_str)
+
+valid_tree, out = validate_tree_filter(config_tree)
+
+if filtered_config:
+ add_system_version(valid_tree.to_string(), filtered_config)
+
+if out:
+ print(out)
+
+sys.exit(int(bool(out)))