diff options
Diffstat (limited to 'lib/nola/subnet.ex')
-rw-r--r-- | lib/nola/subnet.ex | 67 |
1 files changed, 47 insertions, 20 deletions
diff --git a/lib/nola/subnet.ex b/lib/nola/subnet.ex index ac9d8e6..de469a6 100644 --- a/lib/nola/subnet.ex +++ b/lib/nola/subnet.ex @@ -17,22 +17,24 @@ defmodule Nola.Subnet do end def assign(binary) when is_binary(binary) do - result = if subnet = find_subnet_for(binary) do - {:ok, subnet} - else - Agent.get_and_update(__MODULE__, fn(dets) -> - {subnet, _} = available_select(dets) - :dets.insert(dets, {subnet, binary}) - :dets.sync(dets) - {{:new, subnet}, dets} - end) - end + result = + if subnet = find_subnet_for(binary) do + {:ok, subnet} + else + Agent.get_and_update(__MODULE__, fn dets -> + {subnet, _} = available_select(dets) + :dets.insert(dets, {subnet, binary}) + :dets.sync(dets) + {{:new, subnet}, dets} + end) + end case result do {:new, subnet} -> ip = Pfx.host(subnet, 1) set_reverse(binary, ip) subnet + {:ok, subnet} -> subnet end @@ -49,16 +51,40 @@ defmodule Nola.Subnet do ip_fqdn = Pfx.dns_ptr(ip) ip_local = String.replace(ip_fqdn, ".#{ptr_zone}", "") rev? = String.ends_with?(value, ".users.goulag.org") + if rev? do {:ok, rev_zone} = PowerDNSex.show_zone("users.goulag.org") - rev_update? = Enum.any?(rev_zone.rrsets, fn(rr) -> rr.name == "#{ip_fqdn}." end) - record = %{name: "#{value}.", type: "AAAA", ttl: 8600, records: [%{content: ip, disabled: false}]} - if(rev_update?, do: PowerDNSex.update_record(rev_zone, record), else: PowerDNSex.create_record(rev_zone, record)) + rev_update? = Enum.any?(rev_zone.rrsets, fn rr -> rr.name == "#{ip_fqdn}." end) + + record = %{ + name: "#{value}.", + type: "AAAA", + ttl: 8600, + records: [%{content: ip, disabled: false}] + } + + if(rev_update?, + do: PowerDNSex.update_record(rev_zone, record), + else: PowerDNSex.create_record(rev_zone, record) + ) end + {:ok, zone} = PowerDNSex.show_zone(ptr_zone) - update? = Enum.any?(zone.rrsets, fn(rr) -> rr.name == "#{ip_fqdn}." end) - record = %{name: "#{ip_fqdn}.", type: "PTR", ttl: 3600, records: [%{content: "#{value}.", disabled: false}]} - pdns = if(update?, do: PowerDNSex.update_record(zone, record), else: PowerDNSex.create_record(zone, record)) + update? = Enum.any?(zone.rrsets, fn rr -> rr.name == "#{ip_fqdn}." end) + + record = %{ + name: "#{ip_fqdn}.", + type: "PTR", + ttl: 3600, + records: [%{content: "#{value}.", disabled: false}] + } + + pdns = + if(update?, + do: PowerDNSex.update_record(zone, record), + else: PowerDNSex.create_record(zone, record) + ) + :ok end @@ -76,9 +102,10 @@ defmodule Nola.Subnet do defp available_select(dets) do spec = [{{:"$1", :"$2"}, [is_integer: :"$2"], [{{:"$1", :"$2"}}]}] {subnets, _} = :dets.select(dets, spec, 20) - subnet = subnets - |> Enum.sort_by(fn({_, last}) -> last end) - |> List.first() - end + subnet = + subnets + |> Enum.sort_by(fn {_, last} -> last end) + |> List.first() + end end |