Creates a new peer list with name <peersect>. It is an independent section,
which is referenced by one or more stick-tables.
+disabled
+ Disables a peers section. It disables both listening and any synchronization
+ related to this section. This is provided to disable synchronization of stick
+ tables without having to comment out all "peers" references.
+
+enable
+ This re-enables a disabled peers section which was previously disabled.
+
peer <peername> <ip>:<port>
Defines a peer inside a peers section.
If <peername> is set to the local peer name (by default hostname, or forced
curpeers->conf.line = linenum;
curpeers->last_change = now.tv_sec;
curpeers->id = strdup(args[1]);
+ curpeers->state = PR_STNEW;
}
else if (strcmp(args[0], "peer") == 0) { /* peer definition */
struct sockaddr_storage *sk;
}
}
} /* neither "peer" nor "peers" */
+ else if (!strcmp(args[0], "disabled")) { /* disables this peers section */
+ curpeers->state = PR_STSTOPPED;
+ }
+ else if (!strcmp(args[0], "enabled")) { /* enables this peers section (used to revert a disabled default) */
+ curpeers->state = PR_STNEW;
+ }
else if (*args[0] != 0) {
Alert("parsing [%s:%d] : unknown keyword '%s' in '%s' section\n", file, linenum, args[0], cursection);
err_code |= ERR_ALERT | ERR_FATAL;
curproxy->table.peers.p = NULL;
cfgerr++;
}
+ else if (curpeers->state == PR_STSTOPPED) {
+ /* silently disable this peers section */
+ curproxy->table.peers.p = NULL;
+ }
else if (!curpeers->peers_fe) {
Alert("Proxy '%s': unable to find local peer '%s' in peers section '%s'.\n",
curproxy->id, localpeer, curpeers->id);
last = &peers;
while (*last) {
curpeers = *last;
- if (curpeers->peers_fe) {
+
+ if (curpeers->state == PR_STSTOPPED) {
+ /* the "disabled" keyword was present */
+ if (curpeers->peers_fe)
+ stop_proxy(curpeers->peers_fe);
+ curpeers->peers_fe = NULL;
+ }
+ else if (!curpeers->peers_fe) {
+ Warning("Removing incomplete section 'peers %s' (no peer named '%s').\n",
+ curpeers->id, localpeer);
+ }
+ else {
last = &curpeers->next;
continue;
}
- Warning("Removing incomplete section 'peers %s' (no peer named '%s').\n",
- curpeers->id, localpeer);
-
+ /* clean what has been detected above */
p = curpeers->remote;
while (p) {
pb = p->next;