.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "GDNSD-PLUGIN-SIMPLEFO 8" .TH GDNSD-PLUGIN-SIMPLEFO 8 2024-03-15 "gdnsd 3.8.2" gdnsd .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME gdnsd\-plugin\-simplefo \- gdnsd plugin for simple primary\->secondary address failover .SH SYNOPSIS .IX Header "SYNOPSIS" Example gdnsd config fragment using this plugin: .PP .Vb 10 \& plugins => { \& simplefo => { \& service_types => [ www ], \& pubwww => { \& primary => 192.0.2.1 \& secondary => 192.0.2.100 \& } \& www6 => { \& primary => 2001:DB8::1 \& secondary => 2001:DB8::100 \& } \& mixed => { \& service_types => [ www, xmpp ] \& addrs_v4 => { \& primary => 192.0.2.1 \& secondary => 192.0.2.100 \& } \& addrs_v6 => { \& service_types => up \& primary => 2001:DB8::1 \& secondary => 2001:DB8::100 \& } \& } \& } \& } .Ve .PP Example zonefile RRs: .PP .Vb 3 \& www 180 DYNA simplefo!pubwww \& www6 180 DYNA simplefo!www6 \& mix 180 DYNA simplefo!mixed .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" \&\fBgdnsd-plugin-simplefo\fR is designed to do simple active/passive failover between one primary address and one secondary address. The status of the addresses are checked with standard gdnsd \&\f(CW\*(C`service_types\*(C'\fR monitoring. If you need more than a simple two-address failover list, the \f(CW\*(C`metafo\*(C'\fR plugin is more appropriate. .SH "TOP-LEVEL PLUGIN CONFIG" .IX Header "TOP-LEVEL PLUGIN CONFIG" At the top level of the plugin's configuration stanza, the special parameter \f(CW\*(C`service_types\*(C'\fR is supported. These sets the default per-resource \f(CW\*(C`service_types\*(C'\fR for all resources. The default default \&\f(CW\*(C`service_types\*(C'\fR is \f(CW\*(C`[ up ]\*(C'\fR, which simply sets them all \f(CW\*(C`UP\*(C'\fR statically. .PP The rest of the hash entries at the top level are the names of the resources you define. Each resource gets a configuration hash of its own for containing resource-specific address info. .SH "RESOURCE CONFIG" .IX Header "RESOURCE CONFIG" Within a resource, \f(CW\*(C`service_types\*(C'\fR is again supported, to set the monitored service type(s) for this specific resource. .PP If \f(CW\*(C`addrs_v4\*(C'\fR is defined, it must be a hash containing two keys: \&\f(CW\*(C`primary\*(C'\fR and \f(CW\*(C`secondary\*(C'\fR, each of which has an IPv4 string address value. .PP Similarly, if \f(CW\*(C`addrs_v6\*(C'\fR is defined, it must be a hash containing two keys: \f(CW\*(C`primary\*(C'\fR and \f(CW\*(C`secondary\*(C'\fR, each of which has an IPv6 string address value. .PP If neither of those two sub-stanzas is defined, you must define a single pair of \f(CW\*(C`primary\*(C'\fR and \f(CW\*(C`secondary\*(C'\fR addresses for the whole resource. These can be of either address family, so long as they are both the same family. .PP When \f(CW\*(C`addrs_v4\*(C'\fR and/or \f(CW\*(C`addrs_v6\*(C'\fR are used, \f(CW\*(C`service_types\*(C'\fR can also be overridden within each, for different behavior per-address-family (e.g. force one protocol always up/down). .SH "OPERATIONAL MECHANICS" .IX Header "OPERATIONAL MECHANICS" For each address family for which you have supplied data, the following logic is applied independently: .IP \(bu 4 First, the worst monitored state of all \f(CW\*(C`service_types\*(C'\fR checks for the primary address is obtained. If this state is \f(CW\*(C`UP\*(C'\fR, the primary address is used. .IP \(bu 4 If the primary address was \f(CW\*(C`DOWN\*(C'\fR, the secondary address is checked: If the secondary is \f(CW\*(C`UP\*(C'\fR, it will be used. If the secondary is also \f(CW\*(C`DOWN\*(C'\fR, then the primary is used. .IP \(bu 4 In any case other than the primary being exactly \f(CW\*(C`UP\*(C'\fR, the response RR-set TTL from the zonefile will be cut in half for both address families. .PP If both \f(CW\*(C`primary\*(C'\fR and \f(CW\*(C`secondary\*(C'\fR were \f(CW\*(C`DOWN\*(C'\fR for \fBeither\fR address family, this plugin will signal total resource failure to any upstream module (geoip or metafo). The cutting of the TTL only happens once for all address RRs, even if both families had a non\-\f(CW\*(C`UP\*(C'\fR primary. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fBgdnsd.config\fR\|(5), \fBgdnsd.zonefile\fR\|(5), \fBgdnsd\fR\|(8), \&\fBgdnsd\-plugin\-multifo\fR\|(8) .PP The gdnsd manual. .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright (c) 2012 Brandon L Black .PP This file is part of gdnsd. .PP gdnsd is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. .PP gdnsd is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .PP You should have received a copy of the GNU General Public License along with gdnsd. If not, see .