1#include <boost/program_options.hpp>
17 namespace bpo = boost::program_options;
18 bpo::options_description config_options{
"File"};
20 config_options.add_options()
22 bpo::value<std::string>()->default_value(
"dhcp"))
24 bpo::value<std::string>())
26 bpo::value<std::vector<std::string>>())
28 bpo::value<std::string>()->default_value(
"admindb"))
30 bpo::value<std::string>()->default_value(
"kea"))
32 bpo::value<std::string>())
34 bpo::value<std::string>())
36 bpo::value<std::string>()->default_value(
"kea"))
38 bpo::value<std::string>())
40 bpo::value<std::string>())
41 (
"ahri.icinga2-reporting-enabled",
44 bpo::value<std::string>())
46 bpo::value<std::string>())
47 (
"icinga2.api-password",
48 bpo::value<std::string>())
50 bpo::value<std::string>())
51 (
"icinga2.service-full-sync",
52 bpo::value<std::string>())
56 bpo::store(bpo::parse_config_file(config_stream, config_options),
vm);
63 if (
vm.count(
"localdb.password"))
69 if (
vm.count(
"localdb.server")) {
70 std::string localdb_server =
vm[
"localdb.server"].as<std::string>();
71 std::string_view localdb_server_view{localdb_server};
72 auto colon_pos = localdb_server_view.find_first_of(
':');
80 if (
vm.count(
"admindb.password"))
86 if (
vm.count(
"admindb.server")) {
87 for (
const std::string& server :
vm[
"admindb.server"].as<std::vector<std::string>>()) {
88 std::string_view server_view{server};
89 auto colon_pos = server_view.find_first_of(
':');
90 std::string_view host = server_view.substr(0, colon_pos);
91 std::string_view port = server_view.substr(colon_pos + 1);
100 if (
vm.count(
"ahri.api-url"))
102 if (
vm.count(
"ahri.kea-service"))
104 if (
vm.count(
"ahri.icinga2-reporting-enabled"))
107 if (
vm.count(
"icinga2.api-url"))
109 if (
vm.count(
"icinga2.api-user"))
111 if (
vm.count(
"icinga2.api-password"))
113 if (
vm.count(
"icinga2.host"))
115 if (
vm.count(
"icinga2.service-full-sync"))
116 icinga2.
services.at(
"full-sync") =
vm[
"icinga2.service-full-sync"].as<std::string>();
119 boost::program_options::variables_map
vm;
Exception for errors during configuration parsing.
const AdminDB & admindb() const
Return parsed AdminDB-specific configuration.
const Icinga2 & icinga2() const
Return parsed Icinga2 API information.
const AhriNode & ahri_node() const
Return parsed AHRI node information.
Config(std::istream &config)
Create an instance and parse the given std::istream as configuration file.
const LocalDB & localdb() const
Return parsed DHCP local DB specific configuration options.
boost::program_options::variables_map vm
Config::AhriNode ahri_node
void read_config(std::istream &config_stream)
ConfigPrivate(std::istream &config_stream)
AdminDB-specific configuration options.
std::vector< DBHost > servers
Configuration for a Kea node running ahri.
bool icinga2_reporting_enabled
Host configuration options for a database connection.
Configuration for a Icinga2 daemon monitoring this node.
std::map< std::string, std::string > services
DHCP local DB specific configuration options.