logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

gdnsd-plugin-simplefo - gdnsd plugin for simple primary->secondary address failover

Description

gdnsd-plugin-simplefo 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 "service_types"
       monitoring.  If you need more than a simple two-address failover list, the "metafo" plugin is more
       appropriate.

Name

       gdnsd-plugin-simplefo - gdnsd plugin for simple primary->secondary address failover

Operational Mechanics

       For each address family for which you have supplied data, the following logic is applied independently:

       •   First,  the  worst monitored state of all "service_types" checks for the primary address is obtained.
           If this state is "UP", the primary address is used.

       •   If the primary address was "DOWN", the secondary address is checked: If the  secondary  is  "UP",  it
           will be used.  If the secondary is also "DOWN", then the primary is used.

       •   In any case other than the primary being exactly "UP", the response RR-set TTL from the zonefile will
           be cut in half for both address families.

       If  both  "primary"  and "secondary" were "DOWN" for either 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-"UP" primary.

Resource Config

       Within a resource, "service_types" is again supported, to set the monitored service type(s) for this
       specific resource.

       If "addrs_v4" is defined, it must be a hash containing two keys: "primary" and "secondary", each of which
       has an IPv4 string address value.

       Similarly, if "addrs_v6" is defined, it must be a hash containing two keys: "primary" and "secondary",
       each of which has an IPv6 string address value.

       If neither of those two sub-stanzas is defined, you must define a single pair of "primary" and
       "secondary" addresses for the whole resource.  These can be of either address family, so long as they are
       both the same family.

       When "addrs_v4" and/or "addrs_v6" are used, "service_types" can also be overridden within each, for
       different behavior per-address-family (e.g.  force one protocol always up/down).

See Also

gdnsd.config(5), gdnsd.zonefile(5), gdnsd(8), gdnsd-plugin-multifo(8)

       The gdnsd manual.

Synopsis

       Example gdnsd config fragment using this plugin:

         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
               }
             }
           }
         }

       Example zonefile RRs:

         www 180 DYNA simplefo!pubwww
         www6 180 DYNA simplefo!www6
         mix 180 DYNA simplefo!mixed

Top-Level Plugin Config

       At the top level of the plugin's configuration stanza, the special parameter "service_types" is
       supported. These sets the default per-resource "service_types" for all resources.  The default default
       "service_types" is "[ up ]", which simply sets them all "UP" statically.

       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.

See Also