From 34422788786010aa0e8b01e58e027967fcf5bbd1 Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Fri, 31 Jan 2025 09:36:08 -0600 Subject: T6946: add utils for assembling commit data --- src/dune | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/dune') diff --git a/src/dune b/src/dune index 2fef6cc..1d67dab 100644 --- a/src/dune +++ b/src/dune @@ -9,7 +9,8 @@ (library (name vyconfd_config) - (modules vyconf_config session directories defaults) + (public_name vyconf.vyconfd-config) + (modules vyconf_config session directories defaults commit) (libraries vyos1x-config vyconf_connect toml sha ppx_deriving.show) (preprocess (pps ppx_deriving.show ppx_deriving_yojson))) -- cgit v1.2.3 From f5152b3de2a52b7a8d05c3cdc18d5f690c76bfba Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Fri, 31 Jan 2025 09:36:24 -0600 Subject: T6946: add test function and executable --- src/commit.ml | 20 ++++++++++++++++++++ src/commit.mli | 2 +- src/dune | 13 ++++++++++--- src/startup.ml | 6 +++--- src/startup.mli | 6 +++--- src/test_commit_data.ml | 30 ++++++++++++++++++++++++++++++ src/vyconfd.ml | 1 + 7 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 src/test_commit_data.ml (limited to 'src/dune') diff --git a/src/commit.ml b/src/commit.ml index d85743a..3c593fd 100644 --- a/src/commit.ml +++ b/src/commit.ml @@ -2,6 +2,7 @@ module VT = Vyos1x.Vytree module CT = Vyos1x.Config_tree module CD = Vyos1x.Config_diff module RT = Vyos1x.Reference_tree +module FP = FilePath type commit_data = { script: string option; @@ -126,3 +127,22 @@ let calculate_priority_lists rt at wt = let cs_add' = get_commit_set rt add_tree in let cs_del, cs_add = legacy_order del_tree cs_del' cs_add' in List.rev (CS.elements cs_del), CS.elements cs_add + +let show_commit_data at wt = + let vc = + Startup.load_daemon_config Defaults.defaults.config_file in + let rt_opt = + Startup.read_reference_tree (FP.concat vc.reftree_dir vc.reference_tree) + in + match rt_opt with + | Error msg -> msg + | Ok rt -> + let del_list, add_list = + calculate_priority_lists rt at wt + in + let sprint_commit_data acc s = + acc ^ "\n" ^ (commit_data_to_yojson s |> Yojson.Safe.to_string) + in + let del_out = List.fold_left sprint_commit_data "" del_list in + let add_out = List.fold_left sprint_commit_data "" add_list in + del_out ^ "\n" ^ add_out diff --git a/src/commit.mli b/src/commit.mli index 881c2a0..db91195 100644 --- a/src/commit.mli +++ b/src/commit.mli @@ -1,2 +1,2 @@ -val test_commit_data : Vyos1x.Reference_tree.t -> Vyos1x.Config_tree.t -> unit +val show_commit_data : Vyos1x.Config_tree.t -> Vyos1x.Config_tree.t -> string diff --git a/src/dune b/src/dune index 1d67dab..3998f1e 100644 --- a/src/dune +++ b/src/dune @@ -10,9 +10,9 @@ (library (name vyconfd_config) (public_name vyconf.vyconfd-config) - (modules vyconf_config session directories defaults commit) + (modules vyconf_config startup session directories defaults commit) (libraries vyos1x-config vyconf_connect toml sha ppx_deriving.show) - (preprocess (pps ppx_deriving.show ppx_deriving_yojson))) + (preprocess (pps lwt_ppx ppx_deriving.show ppx_deriving_yojson))) (library (name client) @@ -25,7 +25,7 @@ (executable (name vyconfd) (public_name vyconfd) - (modules vyconfd startup version) + (modules vyconfd version) (libraries vyos1x-config vyconfd_config vyconf_connect) (preprocess (pps lwt_ppx))) @@ -42,6 +42,13 @@ (modules validate) (libraries client)) +(executable + (name test_commit_data) + (public_name test-commit-data) + (modules test_commit_data) + (libraries vyos1x-config vyconfd_config) + (preprocess (pps lwt_ppx))) + (rule (alias protoc) (mode promote) diff --git a/src/startup.ml b/src/startup.ml index 8d84c84..db2784d 100644 --- a/src/startup.ml +++ b/src/startup.ml @@ -33,7 +33,7 @@ let setup_logger daemonize log_file template = (** Load the config file or panic if it fails *) let load_daemon_config path = - let result = Vyconfd_config.Vyconf_config.load path in + let result = Vyconf_config.load path in match result with | Ok cfg -> cfg | Error err -> @@ -41,13 +41,13 @@ let load_daemon_config path = (** Check if appliance directories exist and panic if they don't *) let check_dirs dirs = - let res = Vyconfd_config.Directories.test dirs in + let res = Directories.test dirs in match res with | Ok _ -> () | Error err -> panic err let check_validators_dir dirs = - let res = Vyconfd_config.Directories.test_validators_dir dirs in + let res = Directories.test_validators_dir dirs in match res with | Ok _ -> () | Error err -> panic err diff --git a/src/startup.mli b/src/startup.mli index 84fb99e..dc84736 100644 --- a/src/startup.mli +++ b/src/startup.mli @@ -2,11 +2,11 @@ val panic : string -> 'a val setup_logger : bool -> string option -> Lwt_log.template -> unit Lwt.t -val load_daemon_config : string -> Vyconfd_config.Vyconf_config.t +val load_daemon_config : string -> Vyconf_config.t -val check_dirs : Vyconfd_config.Directories.t -> unit +val check_dirs : Directories.t -> unit -val check_validators_dir : Vyconfd_config.Directories.t -> unit +val check_validators_dir : Directories.t -> unit val create_socket : string -> Lwt_unix.file_descr Lwt.t diff --git a/src/test_commit_data.ml b/src/test_commit_data.ml new file mode 100644 index 0000000..81b6c19 --- /dev/null +++ b/src/test_commit_data.ml @@ -0,0 +1,30 @@ +module CT = Vyos1x.Config_tree +module FP = FilePath + +let active_config_file = ref "" +let working_config_file = ref "" + +let usage = "Usage: " ^ Sys.argv.(0) ^ " [options]" + +let args = [ + ("--running-config", Arg.String (fun s -> active_config_file:= s), "running config file"); + ("--proposed-config", Arg.String (fun s -> working_config_file := s), "proposed config file"); + ] + +let parse_ct file_name = + match file_name with + | "" -> CT.make "" + | _ -> + let ic = open_in file_name in + let s = really_input_string ic (in_channel_length ic) in + let ct = Vyos1x.Parser.from_string s in + close_in ic; ct + +let () = + let () = Arg.parse args (fun _ -> ()) usage in + let af = !active_config_file in + let wf = !working_config_file in + let at = parse_ct af in + let wt = parse_ct wf in + let out = Vyconfd_config.Commit.show_commit_data at wt + in print_endline out diff --git a/src/vyconfd.ml b/src/vyconfd.ml index 004ed6f..95915b3 100644 --- a/src/vyconfd.ml +++ b/src/vyconfd.ml @@ -9,6 +9,7 @@ module CT = Vyos1x.Config_tree module Gen = Vyos1x.Generate module Session = Vyconfd_config.Session module Directories = Vyconfd_config.Directories +module Startup = Vyconfd_config.Startup (* On UNIX, self_init uses /dev/random for seed *) let () = Random.self_init () -- cgit v1.2.3