diff options
author | John Estabrook <jestabro@vyos.io> | 2025-04-02 14:58:42 -0500 |
---|---|---|
committer | John Estabrook <jestabro@vyos.io> | 2025-04-02 22:57:51 -0500 |
commit | 76e6589470b98f08d2a778b207bd9bc94c2d3db3 (patch) | |
tree | fbbf229bf2e23e0d7ded514b364115570268ffbf | |
parent | 8c1474f99481f5226b1d47d1690b34d9740bf23b (diff) | |
download | vyos1x-config-76e6589470b98f08d2a778b207bd9bc94c2d3db3.tar.gz vyos1x-config-76e6589470b98f08d2a778b207bd9bc94c2d3db3.zip |
T7292: add utility functions to set tag/leaf data on newly defined path
The vyconfd set operation requires configuration of tag and leaf fields
from reference_tree data.
-rw-r--r-- | src/reference_tree.ml | 29 | ||||
-rw-r--r-- | src/reference_tree.mli | 4 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/reference_tree.ml b/src/reference_tree.ml index 65725a8..a2c0f22 100644 --- a/src/reference_tree.ml +++ b/src/reference_tree.ml @@ -509,6 +509,35 @@ let refpath reftree path = | _, [] -> acc in aux [] path +let flag path = + let len = List.length path in + let aux p i = + Util.drop_last_n p (len - i - 1) + in + List.mapi (fun k _ -> aux path k) path + +let set_tag_data rtree ctree path = + let ext = Vytree.exists ctree path in + match ext with + | false -> ctree + | true -> + let set_tag rt ct p = + let refp = refpath rt p in + if is_tag rt refp && not (Config_tree.is_tag_value ct p) + then Config_tree.set_tag ct p true + else ct + in + List.fold_left (set_tag rtree) ctree (flag path) + +let set_leaf_data rtree ctree path = + let ext = Vytree.exists ctree path in + match ext with + | false -> ctree + | true -> + let refp = refpath rtree path in + if is_leaf rtree refp then Config_tree.set_leaf ctree path true + else ctree + let get_ceil_data f reftree path = let data_of_path d p = let data = Vytree.get_data reftree p in diff --git a/src/reference_tree.mli b/src/reference_tree.mli index b2942a3..9c583df 100644 --- a/src/reference_tree.mli +++ b/src/reference_tree.mli @@ -83,4 +83,8 @@ val refpath : t -> string list -> string list val get_ceil_data : (ref_node_data -> string option) -> t -> string list -> string option +val set_tag_data : t -> Config_tree.t -> string list -> Config_tree.t + +val set_leaf_data : t -> Config_tree.t -> string list -> Config_tree.t + val render_json : t -> string |