summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2025-04-02 14:58:42 -0500
committerJohn Estabrook <jestabro@vyos.io>2025-04-02 22:57:51 -0500
commit76e6589470b98f08d2a778b207bd9bc94c2d3db3 (patch)
treefbbf229bf2e23e0d7ded514b364115570268ffbf
parent8c1474f99481f5226b1d47d1690b34d9740bf23b (diff)
downloadvyos1x-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.ml29
-rw-r--r--src/reference_tree.mli4
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