2017-01-30 22:10:16 +04:00
|
|
|
(**************************************************************************)
|
|
|
|
(* *)
|
2018-02-06 00:17:03 +04:00
|
|
|
(* Copyright (c) 2014 - 2018. *)
|
2017-01-30 22:10:16 +04:00
|
|
|
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
|
|
|
(* *)
|
|
|
|
(* All rights reserved. No warranty, explicit or implicit, provided. *)
|
|
|
|
(* *)
|
|
|
|
(**************************************************************************)
|
|
|
|
|
|
|
|
(** Commands *)
|
|
|
|
|
|
|
|
let show (args : Node_shared_arg.t) =
|
|
|
|
if not @@ Sys.file_exists args.config_file then
|
|
|
|
Format.eprintf
|
|
|
|
"\n\
|
|
|
|
Warning: no config file at %s,\n\
|
|
|
|
\ displaying the default configuration.\n@."
|
|
|
|
args.config_file ;
|
|
|
|
Node_shared_arg.read_and_patch_config_file args >>=? fun cfg ->
|
|
|
|
Node_config_file.check cfg >>= fun () ->
|
|
|
|
print_endline @@ Node_config_file.to_string cfg ;
|
|
|
|
return ()
|
|
|
|
|
|
|
|
let reset (args : Node_shared_arg.t) =
|
|
|
|
if Sys.file_exists args.config_file then
|
|
|
|
Format.eprintf
|
|
|
|
"Ignoring previous configuration file: %s.@."
|
|
|
|
args.config_file ;
|
|
|
|
Node_shared_arg.read_and_patch_config_file args >>=? fun cfg ->
|
|
|
|
Node_config_file.check cfg >>= fun () ->
|
|
|
|
Node_config_file.write args.config_file cfg
|
|
|
|
|
|
|
|
let init (args : Node_shared_arg.t) =
|
|
|
|
if Sys.file_exists args.config_file then
|
|
|
|
failwith
|
|
|
|
"Pre-existant config file at %s, use `reset`."
|
|
|
|
args.config_file
|
|
|
|
else
|
|
|
|
Node_shared_arg.read_and_patch_config_file args >>=? fun cfg ->
|
|
|
|
Node_config_file.check cfg >>= fun () ->
|
|
|
|
Node_config_file.write args.config_file cfg
|
|
|
|
|
|
|
|
let update (args : Node_shared_arg.t) =
|
|
|
|
if not (Sys.file_exists args.config_file) then
|
|
|
|
failwith
|
|
|
|
"Missing configuration file at %s. \
|
|
|
|
Use `%s config init [options]` to generate a new file"
|
|
|
|
args.config_file Sys.argv.(0)
|
|
|
|
else
|
|
|
|
Node_shared_arg.read_and_patch_config_file args >>=? fun cfg ->
|
|
|
|
Node_config_file.check cfg >>= fun () ->
|
|
|
|
Node_config_file.write args.config_file cfg
|
|
|
|
|
|
|
|
(** Main *)
|
|
|
|
|
|
|
|
module Term = struct
|
|
|
|
|
|
|
|
type subcommand = Show | Reset | Init | Update
|
|
|
|
|
|
|
|
let process subcommand args =
|
|
|
|
let res =
|
|
|
|
match subcommand with
|
|
|
|
| Show -> show args
|
|
|
|
| Reset -> reset args
|
|
|
|
| Init -> init args
|
|
|
|
| Update -> update args in
|
|
|
|
match Lwt_main.run res with
|
|
|
|
| Ok () -> `Ok ()
|
|
|
|
| Error err -> `Error (false, Format.asprintf "%a" pp_print_error err)
|
|
|
|
|
|
|
|
let subcommand_arg =
|
|
|
|
let parser = function
|
|
|
|
| "show" -> `Ok Show
|
|
|
|
| "reset" -> `Ok Reset
|
|
|
|
| "init" -> `Ok Init
|
|
|
|
| "update" -> `Ok Update
|
|
|
|
| s -> `Error ("invalid argument: " ^ s)
|
|
|
|
and printer ppf = function
|
|
|
|
| Show -> Format.fprintf ppf "show"
|
|
|
|
| Reset -> Format.fprintf ppf "reset"
|
|
|
|
| Init -> Format.fprintf ppf "init"
|
|
|
|
| Update -> Format.fprintf ppf "update" in
|
|
|
|
let open Cmdliner.Arg in
|
|
|
|
let doc =
|
|
|
|
"Operation to perform. \
|
2017-03-03 13:28:15 +04:00
|
|
|
Possible values: $(b,show), $(b,reset), $(b,init), $(b,update)." in
|
2017-01-30 22:10:16 +04:00
|
|
|
value & pos 0 (parser, printer) Show & info [] ~docv:"OPERATION" ~doc
|
|
|
|
|
|
|
|
let term =
|
|
|
|
let open Cmdliner.Term in
|
|
|
|
ret (const process $ subcommand_arg $ Node_shared_arg.Term.args)
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
module Manpage = struct
|
|
|
|
|
|
|
|
let command_description =
|
|
|
|
"The $(b,config) command is meant to inspect and amend the \
|
|
|
|
configuration of the Tezos node. \
|
|
|
|
This command is complementary to manually editing the tezos \
|
|
|
|
node configuration file. Its arguments are a subset of the $(i,run) \
|
|
|
|
command ones."
|
|
|
|
|
|
|
|
let description = [
|
|
|
|
`S "DESCRIPTION" ;
|
|
|
|
`P (command_description ^ " Several operations are possible: ");
|
|
|
|
`P "$(b,show) reads, parses and displays Tezos current config file. \
|
|
|
|
Use this command to see exactly what config file will be used by \
|
|
|
|
Tezos. If additional command-line arguments are provided, \
|
|
|
|
the displayed configuration will be amended accordingly. \
|
|
|
|
This is the default operation." ;
|
|
|
|
`P "$(b,reset) will overwrite the current configuration file with a \
|
|
|
|
factory default one. \
|
|
|
|
If additional command-line arguments are provided, \
|
|
|
|
they will amend the generated file. \
|
2017-07-22 01:16:53 +04:00
|
|
|
It assumes that a configuration file already exists \
|
2017-01-30 22:10:16 +04:00
|
|
|
and will abort otherwise." ;
|
|
|
|
`P "$(b,init) is like reset but assumes that \
|
2017-07-22 01:16:53 +04:00
|
|
|
no configuration file is present \
|
|
|
|
and will abort otherwise." ;
|
2017-03-03 13:28:15 +04:00
|
|
|
`P "$(b,update) is the main option to edit the configuration file of Tezos. \
|
2017-01-30 22:10:16 +04:00
|
|
|
It will parse command line arguments and add or replace corresponding \
|
|
|
|
entries in the Tezos configuration file."
|
|
|
|
]
|
|
|
|
|
2018-02-19 21:49:30 +04:00
|
|
|
let schema = Data_encoding.Json.schema (Node_config_file.encoding)
|
|
|
|
let options = [
|
|
|
|
`S "OPTIONS" ;
|
|
|
|
`P "All options available in the config file";
|
|
|
|
`Pre (Format.asprintf "@[%a@]" Json_schema.pp schema)
|
|
|
|
]
|
|
|
|
|
2017-01-30 22:10:16 +04:00
|
|
|
let man =
|
|
|
|
description @
|
|
|
|
Node_shared_arg.Manpage.args @
|
2018-02-19 21:49:30 +04:00
|
|
|
options @
|
2017-01-30 22:10:16 +04:00
|
|
|
Node_shared_arg.Manpage.bugs
|
|
|
|
|
|
|
|
let info =
|
|
|
|
Cmdliner.Term.info
|
|
|
|
~doc:"Manage node configuration"
|
|
|
|
~man
|
|
|
|
"config"
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
let cmd =
|
|
|
|
Term.term, Manpage.info
|