summaryrefslogtreecommitdiff
path: root/lib/nola/subnet.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nola/subnet.ex')
-rw-r--r--lib/nola/subnet.ex67
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