Current section

Files

Jump to
libcluster lib strategy local_epmd.ex
Raw

lib/strategy/local_epmd.ex

defmodule Cluster.Strategy.LocalEpmd do
@moduledoc """
This clustering strategy relies on Erlang's built-in distribution protocol.
Unlike Cluster.Strategy.Empd, this strategy assumes that all nodes are on
the local host and can be discovered by epmd.
It should be configured as follows:
config :libcluster,
topologies: [
local_epmd_example: [
strategy: #{__MODULE__}]]
"""
use Cluster.Strategy
alias Cluster.Strategy.State
def start_link([%State{} = state]) do
nodes = discover_nodes()
Cluster.Strategy.connect_nodes(state.topology, state.connect, state.list_nodes, nodes)
:ignore
end
defp discover_nodes do
suffix = get_host_suffix(Node.self())
{:ok, names} = :erl_epmd.names()
for {n, _} <- names, do: List.to_atom(n ++ suffix)
end
defp get_host_suffix(self) do
self = Atom.to_charlist(self)
[_, suffix] = :string.split(self, '@')
'@' ++ suffix
end
end