lib/pistis/cluster.ex

defmodule Pistis.Cluster do
  def boot() do
    Pistis.Cluster.Manager.boot()
    Pistis.Cluster.StateRefresher.boot()
    Pistis.Cluster.ConnectionRetrier.boot()
  end

  def primary_node_name(), do: :"primary@127.0.0.1"

  def node_name(node_host) do
    node_host
    |> to_string
    |> String.split("@")
    |> Enum.at(0)
    |> String.to_atom()
  end

  def setup_current_node() do
    toggle_distributed_if_necessary()
    boot_erl_server()
  end

  defp toggle_distributed_if_necessary() do
    if Node.self() |> Atom.to_string() |> String.contains?("nonode") do
      :net_kernel.start([Pistis.Cluster.primary_node_name()])
    end
  end

  defp boot_erl_server() do
    :erl_boot_server.start([])
    to_charlist("127.0.0.1") |> allow_boot()
  end

  defp allow_boot(host) do
    {:ok, ipv4} = :inet.parse_ipv4_address(host)
    :erl_boot_server.add_slave(ipv4)
  end
end