summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2024-10-23 18:50:46 -0500
committerJohn Estabrook <jestabro@vyos.io>2024-10-27 21:17:35 -0500
commit085b22f7be84944a27e565be4227dc55720bec47 (patch)
tree7ff755934372cfc860408663848a752febff7d5a
parent60cc099df46e1cbcb7b37be3fe455978f800887f (diff)
downloadvyconf-085b22f7be84944a27e565be4227dc55720bec47.tar.gz
vyconf-085b22f7be84944a27e565be4227dc55720bec47.zip
T6718: read reference tree json file on startup
-rw-r--r--data/examples/vyconfd.conf1
-rw-r--r--src/startup.ml7
-rw-r--r--src/startup.mli2
-rw-r--r--src/vyconf_config.ml3
-rw-r--r--src/vyconf_config.mli1
-rw-r--r--src/vyconfd.ml12
6 files changed, 23 insertions, 3 deletions
diff --git a/data/examples/vyconfd.conf b/data/examples/vyconfd.conf
index db9e493..68b0531 100644
--- a/data/examples/vyconfd.conf
+++ b/data/examples/vyconfd.conf
@@ -9,6 +9,7 @@ config_dir = "/etc/testappliance"
# paths relative to config_dir
primary_config = "config.boot"
fallback_config = "config.failsafe"
+reference_tree = "reftree.cache"
[vyconf]
diff --git a/src/startup.ml b/src/startup.ml
index b3a967e..7418a81 100644
--- a/src/startup.ml
+++ b/src/startup.ml
@@ -124,3 +124,10 @@ let load_interface_definitions dir =
| Error msg -> Error msg end
with Bad_interface_definition msg -> Error msg
+module I = Vyos1x.Internal.Make(Vyos1x.Reference_tree)
+
+let read_reference_tree file =
+ try
+ let reftree = I.read_internal file in
+ Ok reftree
+ with Sys_error msg -> Error msg
diff --git a/src/startup.mli b/src/startup.mli
index 77c35ac..ab0e0f2 100644
--- a/src/startup.mli
+++ b/src/startup.mli
@@ -17,3 +17,5 @@ val load_config : string -> (Vyos1x.Config_tree.t, string) result
val load_config_failsafe : string -> string -> Vyos1x.Config_tree.t
val load_interface_definitions : string -> (Vyos1x.Reference_tree.t, string) result
+
+val read_reference_tree : string -> (Vyos1x.Reference_tree.t, string) result
diff --git a/src/vyconf_config.ml b/src/vyconf_config.ml
index 07ab3ef..2640c9b 100644
--- a/src/vyconf_config.ml
+++ b/src/vyconf_config.ml
@@ -7,6 +7,7 @@ type t = {
config_dir: string;
primary_config: string;
fallback_config: string;
+ reference_tree: string;
socket: string;
pid_file: string;
log_file: string option;
@@ -23,6 +24,7 @@ let empty_config = {
config_dir = "";
primary_config = "";
fallback_config = "";
+ reference_tree = "";
socket = "";
pid_file = "";
log_file = None;
@@ -61,6 +63,7 @@ let load filename =
let conf = {conf with program_dir = mandatory_field conf_toml "appliance" "program_dir"} in
let conf = {conf with primary_config = mandatory_field conf_toml "appliance" "primary_config"} in
let conf = {conf with fallback_config = mandatory_field conf_toml "appliance" "fallback_config"} in
+ let conf = {conf with reference_tree = mandatory_field conf_toml "appliance" "reference_tree"} in
(* Optional fields *)
let conf = {conf with pid_file = optional_field defaults.pid_file conf_toml "vyconf" "pid_file"} in
let conf = {conf with socket = optional_field defaults.socket conf_toml "vyconf" "socket"} in
diff --git a/src/vyconf_config.mli b/src/vyconf_config.mli
index ed30b35..1cfeffa 100644
--- a/src/vyconf_config.mli
+++ b/src/vyconf_config.mli
@@ -5,6 +5,7 @@ type t = {
config_dir: string;
primary_config: string;
fallback_config: string;
+ reference_tree: string;
socket: string;
pid_file: string;
log_file: string option;
diff --git a/src/vyconfd.ml b/src/vyconfd.ml
index 729be73..af7c309 100644
--- a/src/vyconfd.ml
+++ b/src/vyconfd.ml
@@ -2,6 +2,7 @@ open Lwt
open Vyconf_connect.Vyconf_pbt
open Vyconfd_config.Defaults
+open Vyconfd_config.Vyconf_config
module FP = FilePath
module CT = Vyos1x.Config_tree
@@ -197,16 +198,21 @@ let main_loop basepath world () =
serve ()
let load_interface_definitions dir =
-(* let open Session in *)
let reftree = Gen.load_interface_definitions dir in
match reftree with
| Ok r -> r
| Error s -> Startup.panic s
+let read_reference_tree file =
+ let reftree = Startup.read_reference_tree file in
+ match reftree with
+ | Ok r -> r
+ | Error s -> Startup.panic s
+
let make_world config dirs =
- let open Directories in
let open Session in
- let reftree = load_interface_definitions dirs.interface_definitions in
+ (* the reference_tree json file is generated at vyos-1x build time *)
+ let reftree = read_reference_tree (FP.concat config.config_dir config.reference_tree) in
let running_config = CT.make "root" in
{running_config=running_config; reference_tree=reftree; vyconf_config=config; dirs=dirs}