Current section
Files
Jump to
Current section
Files
lib/dns/dns.ex
defmodule MemcachedDiscovery.DNS do
@moduledoc """
Discovers memcached nodes via a DNS query against
an A-record (for example against a kubernetes headless
service)
"""
@behaviour Herd.Discovery
require Logger
def nodes() do
service = service_name() |> to_charlist()
case :inet_res.getbyname(service, :a) do
{:ok, {:hostent, _fqdn, [], :inet, _value, addresses}} ->
addresses
|> Enum.map(&:inet_parse.ntoa(&1))
|> Memcachir.Util.parse_hostname()
{:error, reason} ->
Logger.error("lookup against #{service} failed: #{inspect(reason)}")
[]
end
end
def service_name(),
do: Application.get_env(:memcachir, __MODULE__)[:dns]
end