CLI: Add a test config flag

Adding a -t configuration flag that will make biboumi check the
configuration file syntax.

Such a syntax check is handy for some deployment tools. It helps the
tooling to statically analyse the configuration file and prevent
unecessesary deployments when the configuration file is clearly
incorrect.

Updating the synopsis with this new flag.
This commit is contained in:
Félix Baylac-Jacqué
2020-09-23 23:55:50 +02:00
committed by louiz’
parent 579d46f78a
commit 0bb4f144fc
2 changed files with 33 additions and 6 deletions
+16 -1
View File
@@ -1,4 +1,19 @@
Synopsis Synopsis
======== ========
biboumi [*config_filename*] biboumi [-ht] [*config_filename*]
Command-Line Options
========
-h, \\-\\-help
~~~~~~~~
Display a help message and exit.
-t, \\-\\-test-config
~~~~~~~~
Do not run, just test the configuration file syntax. Exit with a 0
status if the configuration is valid, exits with a non-zero status
otherwise.
+17 -5
View File
@@ -38,7 +38,7 @@ int config_help(const std::string& missing_option)
int display_help() int display_help()
{ {
std::cout << "Usage: biboumi [configuration_file]" << std::endl; std::cout << "Usage: biboumi [-ht] [configuration_file]" << std::endl;
return 0; return 0;
} }
@@ -194,13 +194,19 @@ static int main_loop(std::string hostname, std::string password)
int main(int ac, char** av) int main(int ac, char** av)
{ {
std::string cli_conf_filename;
bool test_conf = false;
if (ac > 1) if (ac > 1)
{ {
const std::string arg = av[1]; for (int i = 1; i < ac; i++)
if (arg.size() >= 2 && arg[0] == '-' && arg[1] == '-')
{ {
if (arg == "--help") const std::string arg = av[i];
if ((arg == "-h") || (arg == "--help"))
return display_help(); return display_help();
else if ((arg == "-t") || (arg == "--test-config"))
test_conf = true;
else if (i + 1 == ac)
cli_conf_filename = arg;
else else
{ {
std::cerr << "Unknow command line option: " << arg std::cerr << "Unknow command line option: " << arg
@@ -210,7 +216,7 @@ int main(int ac, char** av)
} }
} }
const std::string conf_filename = const std::string conf_filename =
ac > 1 ? av[1]: xdg_config_path("biboumi.cfg"); cli_conf_filename.empty() ? xdg_config_path("biboumi.cfg"): cli_conf_filename;
std::cout << "Using configuration file: " << conf_filename << std::endl; std::cout << "Using configuration file: " << conf_filename << std::endl;
if (!Config::read_conf(conf_filename)) if (!Config::read_conf(conf_filename))
@@ -222,6 +228,12 @@ int main(int ac, char** av)
const std::string hostname = Config::get("hostname", ""); const std::string hostname = Config::get("hostname", "");
if (hostname.empty()) if (hostname.empty())
return config_help("hostname"); return config_help("hostname");
if (test_conf)
{
std::cout << "biboumi: the configuration file " << conf_filename
<< " syntax is ok" << std::endl;
return 0;
}
#ifdef USE_DATABASE #ifdef USE_DATABASE
try try