summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2024-10-03 15:27:27 -0500
committerDaniil Baturin <daniil@baturin.org>2024-10-07 16:29:21 +0100
commit8013e228320a414087e3456c1632b479483b856c (patch)
tree94546281e5e1e737795f78b5c7e8c1f76043a86f
parent9821aa7a47fddb2f9e9d36bfffc1d55a17682667 (diff)
downloadvyos-1x-8013e228320a414087e3456c1632b479483b856c.tar.gz
vyos-1x-8013e228320a414087e3456c1632b479483b856c.zip
cli: T6740: set_tag on created paths and add parse step for ordering
Signed-off-by: Daniil Baturin <daniil@baturin.org>
-rw-r--r--python/vyos/utils/config.py25
-rwxr-xr-xsrc/utils/vyos-commands-to-config7
2 files changed, 30 insertions, 2 deletions
diff --git a/python/vyos/utils/config.py b/python/vyos/utils/config.py
index b02621e7b..deda13c13 100644
--- a/python/vyos/utils/config.py
+++ b/python/vyos/utils/config.py
@@ -14,8 +14,14 @@
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
import os
+from typing import TYPE_CHECKING
+
from vyos.defaults import directories
+# https://peps.python.org/pep-0484/#forward-references
+if TYPE_CHECKING:
+ from vyos.configtree import ConfigTree
+
config_file = os.path.join(directories['config'], 'config.boot')
def read_saved_value(path: list):
@@ -38,6 +44,25 @@ def read_saved_value(path: list):
return ' '.join(res)
return res
+def flag(l: list) -> list:
+ res = [l[0:i] for i,_ in enumerate(l, start=1)]
+ return res
+
+def tag_node_of_path(p: list) -> list:
+ from vyos.xml_ref import is_tag
+
+ fl = flag(p)
+ res = list(map(is_tag, fl))
+
+ return res
+
+def set_tags(ct: 'ConfigTree', path: list) -> None:
+ fl = flag(path)
+ if_tag = tag_node_of_path(path)
+ for condition, target in zip(if_tag, fl):
+ if condition:
+ ct.set_tag(target)
+
def parse_commands(cmds: str) -> dict:
from re import split as re_split
from shlex import split as shlex_split
diff --git a/src/utils/vyos-commands-to-config b/src/utils/vyos-commands-to-config
index 85613b49d..927d9bd70 100755
--- a/src/utils/vyos-commands-to-config
+++ b/src/utils/vyos-commands-to-config
@@ -20,7 +20,7 @@ import json
from vyos.configtree import ConfigTree
from vyos.utils.config import parse_commands
-
+from vyos.utils.config import set_tags
def commands_to_config(cmds):
ct = ConfigTree('')
@@ -31,8 +31,10 @@ def commands_to_config(cmds):
if c["is_leaf"]:
replace = False if c["is_multi"] else True
ct.set(c["path"], value=c["value"], replace=replace)
+ set_tags(ct, c["path"])
else:
ct.create_node(c["path"])
+ set_tags(ct, c["path"])
else:
raise ValueError(
f"\"{c['op']}\" is not a supported config operation")
@@ -44,7 +46,8 @@ if __name__ == '__main__':
try:
cmds = sys.stdin.read()
ct = commands_to_config(cmds)
- print(str(ct))
+ out = ConfigTree(ct.to_string())
+ print(str(out))
except Exception as e:
print(e)
sys.exit(1)