View Source gc_discover_dns_srv (gen_cluster v0.3.0)
Discovery method that takes a host name to query DNS SRV records for and
uses all the returned hosts as peers to connect or reconnect to. Whether
to use the hostname or IP for each hostname result is configured with
the option host_type which takes hostname or ip as values. The default
is hostname which keeps the result as is in the node name. When it
is ip each returned hostname is passed to inet_res:getbyname/3
to get an IP.
Since this is a built-in discovery module it has an alias, dns, which
can be used in place of the full module name, gc_discovery_dns_srv. The
alias dns covers both gc_discover_dns_ip and gc_discover_dns_srv.
This module (gc_discover_dns_srv) is used when the option
record_type => srv is given.
The name part of the node name to connect to is taken from the current node's name.
The following is an example relying on the alias, dns:
{gen_cluster, [{discovery, {dns, #{record_type => srv,
domain => "k8s-erlang-cluster.k8s-erlang-cluster"}}}]}This results in the SRV records for k8s-erlang-cluster.k8s-erlang-cluster
being queried for every gen_cluster refresh interval and it tries to
establish connections to those not already connected to.
To use IPv6 addresses as the host part of each node name set both
host_type to ip and ipv6 to true:
{gen_cluster, [{discovery, {dns, #{record_type => srv,
domain => "k8s-erlang-cluster.k8s-erlang-cluster",
host_type => ip,
ipv6 => true}}}]}
Summary
Types
Module options. Takes domain, the domain to query for, an optional host_type which
can be ip or hostname, the optional boolean ipv6 for whether to query for A or
AAAA record when host_type is ip and optional lookup_timeout which is the time
each DNS query can take (defaults to 5000 milliseconds).
Types
-type options() :: #{domain := string(), host_type => gc_discover_dns:host_type(), ipv6 => boolean(), lookup_opts => [inet_res:res_option()]}.
Module options. Takes domain, the domain to query for, an optional host_type which
can be ip or hostname, the optional boolean ipv6 for whether to query for A or
AAAA record when host_type is ip and optional lookup_timeout which is the time
each DNS query can take (defaults to 5000 milliseconds).
Functions
-spec init(options()) -> {ok, #state{node_name :: string(), srv :: gc_discover_dns:dns_name(), host_type :: gc_discover_dns:host_type(), ip_record_type :: gc_discover_dns:ip_record_type(), lookup_timeout :: erlang:timeout()}}.
-spec peers(#state{node_name :: string(), srv :: gc_discover_dns:dns_name(), host_type :: gc_discover_dns:host_type(), ip_record_type :: gc_discover_dns:ip_record_type(), lookup_timeout :: erlang:timeout()}) -> gen_cluster:peers().