diff options
author | Daniil Baturin <daniil@baturin.org> | 2018-05-15 02:51:00 +0200 |
---|---|---|
committer | Daniil Baturin <daniil@baturin.org> | 2018-05-15 02:51:00 +0200 |
commit | ddca0778f36266ce2416a064833410afeeb202d0 (patch) | |
tree | 819864269ec9a6af8f7ea8018cdaa726dec90fd5 | |
parent | a3fdcdcfdb471a51cd1ee2b8cc65621e86ae2628 (diff) | |
download | vyos-1x-ddca0778f36266ce2416a064833410afeeb202d0.tar.gz vyos-1x-ddca0778f36266ce2416a064833410afeeb202d0.zip |
Correct the logic of generating tag nodes for op mode.
Unlike conf mode tag nodes, op mode "pseudo-tag nodes" have the real
node.def inside the node.tag dir rather than at the top level.
The required node.def at the top level is populated with the help string
from the real one.
A side effect is that commands that take arguments now must have their own
words, e.g. "run show arp" and "run show arp eth0" is impossible and has to be
"run show arp" and "run show arp interface eth0", which is probably a good thing.
-rwxr-xr-x | scripts/build-command-op-templates | 61 |
1 files changed, 33 insertions, 28 deletions
diff --git a/scripts/build-command-op-templates b/scripts/build-command-op-templates index 72879fe74..865590c2c 100755 --- a/scripts/build-command-op-templates +++ b/scripts/build-command-op-templates @@ -93,7 +93,7 @@ def get_properties(p): try: props["help"] = p.find("help").text except: - pass + props["help"] = "No help available" # Get the completion help strings @@ -113,7 +113,7 @@ def get_properties(p): for i in paths: comp_exprs.append("/bin/cli-shell-api listNodes {0}".format(i.text)) for i in scripts: - comp_exprs.append("sh -c \"{0}\"".format(i.text)) + comp_exprs.append("{0}".format(i.text)) comp_help = " && ".join(comp_exprs) props["comp_help"] = comp_help except: @@ -128,14 +128,6 @@ def make_node_def(props, command): node_def = "" - if "tag" in props: - node_def += "tag:\n" - - - if "type" in props: - node_def += "type: {0}\n".format(props["type"]) - - if "help" in props: node_def += "help: {0}\n".format(props["help"]) @@ -173,32 +165,45 @@ def process_node(n, tmpl_dir): props = get_properties(props_elem) - # Type should not be set for non-tag, non-leaf nodes - if node_type != "node": - props["type"] = "txt" + if node_type == "node": + if debug: + print("Processing node {}".format(name)) + + with open(os.path.join(make_path(my_tmpl_dir), "node.def"), "w") as f: + f.write(make_node_def(props, command)) + + if children is not None: + inner_nodes = children.iterfind("*") + for inner_n in inner_nodes: + process_node(inner_n, my_tmpl_dir) if node_type == "tagNode": - props["tag"] = "True" - + if debug: + print("Processing tag node {}".format(name)) - with open(os.path.join(make_path(my_tmpl_dir), "node.def"), "w") as f: - f.write(make_node_def(props, command)) + os.makedirs(make_path(my_tmpl_dir), exist_ok=True) + with open(os.path.join(make_path(my_tmpl_dir), "node.def"), "w") as f: + f.write('help: {0}\0'.format(props['help'])) - if node_type == "node": - inner_nodes = children.iterfind("*") - for inner_n in inner_nodes: - process_node(inner_n, my_tmpl_dir) - if node_type == "tagNode": my_tmpl_dir.append("node.tag") - if debug: - print("Created path for the tagNode:", end="") os.makedirs(make_path(my_tmpl_dir), exist_ok=True) - inner_nodes = children.iterfind("*") - for inner_n in inner_nodes: - process_node(inner_n, my_tmpl_dir) + if debug: + print("Created path for the tagNode: {}".format(make_path(my_tmpl_dir)), end="") + + with open(os.path.join(make_path(my_tmpl_dir), "node.def"), "w") as f: + f.write(make_node_def(props, command)) + + if children is not None: + inner_nodes = children.iterfind("*") + for inner_n in inner_nodes: + process_node(inner_n, my_tmpl_dir) else: # This is a leaf node - pass + if debug: + print("Processing leaf node {}".format(name)) + + with open(os.path.join(make_path(my_tmpl_dir), "node.def"), "w") as f: + f.write(make_node_def(props, command)) root = xml.getroot() |