mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-09-07 23:32:53 +02:00
wire up configuration.
New config block in local.conf for controllers: ``` { "settings": { ...standard zt1 local.conf settings... }, "controller": { "listenMode": (pgsql|redis|pubsub), "statusMode": (pgsql|redis|bigtable), "redis": { "hostname": ..., "port": 6379, "clusterMode": true }, "pubsub": { "project_id": <gcp-project-id> }, "bigtable": { "project_id": <gcp-project-id>, "instance_id": <bigtable-instance-id>, "table_id": <bigtable-table-id> } } } ```
This commit is contained in:
parent
a5bd262b3a
commit
0753556aa3
3 changed files with 57 additions and 13 deletions
|
@ -184,9 +184,9 @@ CentralDB::CentralDB(
|
||||||
case LISTENER_MODE_PUBSUB:
|
case LISTENER_MODE_PUBSUB:
|
||||||
if (cc->pubSubConfig != NULL) {
|
if (cc->pubSubConfig != NULL) {
|
||||||
_membersDbWatcher =
|
_membersDbWatcher =
|
||||||
std::make_shared<PubSubMemberListener>(_myAddressStr, cc->pubSubConfig->project, this);
|
std::make_shared<PubSubMemberListener>(_myAddressStr, cc->pubSubConfig->project_id, this);
|
||||||
_networksDbWatcher =
|
_networksDbWatcher =
|
||||||
std::make_shared<PubSubNetworkListener>(_myAddressStr, cc->pubSubConfig->project, this);
|
std::make_shared<PubSubNetworkListener>(_myAddressStr, cc->pubSubConfig->project_id, this);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
|
|
|
@ -8,11 +8,7 @@
|
||||||
namespace ZeroTier {
|
namespace ZeroTier {
|
||||||
|
|
||||||
struct PubSubConfig {
|
struct PubSubConfig {
|
||||||
std::string project;
|
std::string project_id;
|
||||||
};
|
|
||||||
|
|
||||||
struct PostgresNotifyConfig {
|
|
||||||
std::string channel;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BigTableConfig {
|
struct BigTableConfig {
|
||||||
|
@ -27,7 +23,6 @@ struct ControllerConfig {
|
||||||
std::string statusMode;
|
std::string statusMode;
|
||||||
RedisConfig* redisConfig;
|
RedisConfig* redisConfig;
|
||||||
PubSubConfig* pubSubConfig;
|
PubSubConfig* pubSubConfig;
|
||||||
PostgresNotifyConfig* postgresNotifyConfig;
|
|
||||||
BigTableConfig* bigTableConfig;
|
BigTableConfig* bigTableConfig;
|
||||||
|
|
||||||
ControllerConfig()
|
ControllerConfig()
|
||||||
|
@ -36,7 +31,6 @@ struct ControllerConfig {
|
||||||
, statusMode("")
|
, statusMode("")
|
||||||
, redisConfig(nullptr)
|
, redisConfig(nullptr)
|
||||||
, pubSubConfig(nullptr)
|
, pubSubConfig(nullptr)
|
||||||
, postgresNotifyConfig(nullptr)
|
|
||||||
, bigTableConfig(nullptr)
|
, bigTableConfig(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -51,10 +45,6 @@ struct ControllerConfig {
|
||||||
delete pubSubConfig;
|
delete pubSubConfig;
|
||||||
pubSubConfig = nullptr;
|
pubSubConfig = nullptr;
|
||||||
}
|
}
|
||||||
if (postgresNotifyConfig) {
|
|
||||||
delete postgresNotifyConfig;
|
|
||||||
postgresNotifyConfig = nullptr;
|
|
||||||
}
|
|
||||||
if (bigTableConfig) {
|
if (bigTableConfig) {
|
||||||
delete bigTableConfig;
|
delete bigTableConfig;
|
||||||
bigTableConfig = nullptr;
|
bigTableConfig = nullptr;
|
||||||
|
|
|
@ -1790,6 +1790,60 @@ class OneServiceImpl : public OneService {
|
||||||
_node->setPhysicalPathConfiguration(
|
_node->setPhysicalPathConfiguration(
|
||||||
reinterpret_cast<const struct sockaddr_storage*>(&(i->first)), &(i->second));
|
reinterpret_cast<const struct sockaddr_storage*>(&(i->first)), &(i->second));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ZT1_CENTRAL_CONTROLLER
|
||||||
|
// Central Controller Mode Settings
|
||||||
|
json& cc = lc["controller"];
|
||||||
|
if (cc.is_object()) {
|
||||||
|
_controllerConfig.listenMode = OSUtils::jsonString(cc["listenMode"], "pgsql");
|
||||||
|
_controllerConfig.statusMode = OSUtils::jsonString(cc["statusMode"], "pgsql");
|
||||||
|
|
||||||
|
// redis settings
|
||||||
|
if (cc["redis"].is_object() && _rc == NULL) {
|
||||||
|
json& redis = cc["redis"];
|
||||||
|
_rc = new RedisConfig;
|
||||||
|
_rc->hostname = OSUtils::jsonString(redis["hostname"], "");
|
||||||
|
_rc->port = OSUtils::jsonInt(redis["port"], 6379);
|
||||||
|
_rc->password = OSUtils::jsonString(redis["password"], "");
|
||||||
|
_rc->clusterMode = OSUtils::jsonBool(redis["clusterMode"], false);
|
||||||
|
_controllerConfig.redisConfig = _rc;
|
||||||
|
}
|
||||||
|
else if (cc["redis"].is_object() && _rc != NULL) {
|
||||||
|
_controllerConfig.redisConfig = _rc;
|
||||||
|
}
|
||||||
|
if ((_controllerConfig.listenMode == "redis" || _controllerConfig.statusMode == "redis")
|
||||||
|
&& ! _controllerConfig.redisConfig) {
|
||||||
|
fprintf(
|
||||||
|
stderr,
|
||||||
|
"ERROR: redis listenMode or statusMode requires redis configuration in local.conf" ZT_EOL_S);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// pubsub settings
|
||||||
|
if (cc["pubsub"].is_object()) {
|
||||||
|
json& ps = cc["pubsub"];
|
||||||
|
_controllerConfig.pubSubConfig = new PubSubConfig();
|
||||||
|
_controllerConfig.pubSubConfig->project_id = OSUtils::jsonString(ps["project_id"], "");
|
||||||
|
}
|
||||||
|
if (_controllerConfig.listenMode == "pubsub" && ! _controllerConfig.pubSubConfig) {
|
||||||
|
fprintf(stderr, "ERROR: pubsub listenMode requires pubsub configuration in local.conf" ZT_EOL_S);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// bigtable settings
|
||||||
|
if (cc["bigtable"].is_object()) {
|
||||||
|
json& bt = cc["bigtable"];
|
||||||
|
_controllerConfig.bigTableConfig = new BigTableConfig();
|
||||||
|
_controllerConfig.bigTableConfig->project_id = OSUtils::jsonString(bt["project_id"], "");
|
||||||
|
_controllerConfig.bigTableConfig->instance_id = OSUtils::jsonString(bt["instance_id"], "");
|
||||||
|
_controllerConfig.bigTableConfig->table_id = OSUtils::jsonString(bt["table_id"], "");
|
||||||
|
}
|
||||||
|
if (_controllerConfig.listenMode == "bigtable" && ! _controllerConfig.bigTableConfig) {
|
||||||
|
fprintf(stderr, "ERROR: bigtable listenMode requires bigtable configuration in local.conf" ZT_EOL_S);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ReasonForTermination reasonForTermination() const
|
virtual ReasonForTermination reasonForTermination() const
|
||||||
|
|
Loading…
Add table
Reference in a new issue