diff options
Diffstat (limited to 'src/session.ml')
| -rw-r--r-- | src/session.ml | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/src/session.ml b/src/session.ml index 24a8153..9ce2807 100644 --- a/src/session.ml +++ b/src/session.ml @@ -1,8 +1,11 @@ module CT = Vyos1x.Config_tree +module IC = Vyos1x.Internal.Make(CT) +module CC = Commitd_client.Commit module CD = Vyos1x.Config_diff module VT = Vyos1x.Vytree module RT = Vyos1x.Reference_tree module D = Directories +module FP = FilePath exception Session_error of string @@ -24,15 +27,17 @@ type session_data = { changeset: cfg_op list; client_app: string; user: string; + client_pid: int32; } -let make world client_app user = { +let make world client_app user pid = { proposed_config = world.running_config; modified = false; conf_mode = false; changeset = []; client_app = client_app; - user = user + user = user; + client_pid = pid; } let string_of_op op = @@ -136,6 +141,55 @@ let save w s file = | Error e -> raise (Session_error (Printf.sprintf "Error saving config: %s" e)) | Ok () -> s +let prepare_commit ?(dry_run=false) w s id = + let at = w.running_config in + let wt = s.proposed_config in + let rt = w.reference_tree in + let vc = w.vyconf_config in + let () = + try + IC.write_internal at (FP.concat vc.session_dir vc.running_cache) + with + Vyos1x.Internal.Write_error msg -> raise (Session_error msg) + in + let () = + try + IC.write_internal wt (FP.concat vc.session_dir vc.session_cache) + with + Vyos1x.Internal.Write_error msg -> raise (Session_error msg) + in + CC.make_commit_data ~dry_run:dry_run rt at wt id + +let get_config w s id = + let at = w.running_config in + let wt = s.proposed_config in + let vc = w.vyconf_config in + let running_cache = Printf.sprintf "%s_%s" vc.running_cache id in + let session_cache = Printf.sprintf "%s_%s" vc.session_cache id in + let () = + try + IC.write_internal at (FP.concat vc.session_dir running_cache) + with + Vyos1x.Internal.Write_error msg -> raise (Session_error msg) + in + let () = + try + IC.write_internal wt (FP.concat vc.session_dir session_cache) + with + Vyos1x.Internal.Write_error msg -> raise (Session_error msg) + in id + +let cleanup_config w id = + let remove_file file = + if Sys.file_exists file then + Sys.remove file + in + let vc = w.vyconf_config in + let running_cache = Printf.sprintf "%s_%s" vc.running_cache id in + let session_cache = Printf.sprintf "%s_%s" vc.session_cache id in + remove_file (FP.concat vc.session_dir running_cache); + remove_file (FP.concat vc.session_dir session_cache) + let get_value w s path = if not (VT.exists s.proposed_config path) then raise (Session_error ("Config path does not exist")) |
