From c20723cfb5c3af983a42a54e1233e9b6f0550ce1 Mon Sep 17 00:00:00 2001 From: Davi Oliveira Date: Wed, 10 Feb 2021 18:36:38 -0300 Subject: Add zone without rrset --- lib/powerdnsex.ex | 4 ++++ lib/powerdnsex/gen_server/server.ex | 4 ++++ lib/powerdnsex/managers/records_manager.ex | 4 ++++ lib/powerdnsex/managers/zones_manager.ex | 12 ++++++++++ .../lib/powerdnsex/managers/zones_manager_test.exs | 10 ++++++++ .../cassettes/zones_manager/get_zone/success.json | 28 ++++++++++++++++++++++ 6 files changed, 62 insertions(+) create mode 100644 test/support/cassettes/zones_manager/get_zone/success.json diff --git a/lib/powerdnsex.ex b/lib/powerdnsex.ex index b77389c..6b71f08 100644 --- a/lib/powerdnsex.ex +++ b/lib/powerdnsex.ex @@ -48,6 +48,10 @@ defmodule PowerDNSex do call({:show_zone, zone, server_name}) end + def get_zone(zone, server_name \\ @default_server) when is_binary(zone) do + call({:get_zone, zone, server_name}) + end + @spec delete_zone(String.t(), String.t()) :: :ok | {:error, String.t()} @doc """ Delete specific Zone on PowerDNS diff --git a/lib/powerdnsex/gen_server/server.ex b/lib/powerdnsex/gen_server/server.ex index df8a453..e015c7e 100644 --- a/lib/powerdnsex/gen_server/server.ex +++ b/lib/powerdnsex/gen_server/server.ex @@ -24,6 +24,10 @@ defmodule PowerDNSex.Server do {:reply, ZonesManager.show(zone, server_name), state} end + def handle_call({:get_zone, zone, server_name}, _from, state) do + {:reply, ZonesManager.get_zone(zone, server_name), state} + end + def handle_call({:delete_zone, zone, server_name}, _from, state) do {:reply, ZonesManager.delete(zone, server_name), state} end diff --git a/lib/powerdnsex/managers/records_manager.ex b/lib/powerdnsex/managers/records_manager.ex index f2ef6b5..89b8d4b 100644 --- a/lib/powerdnsex/managers/records_manager.ex +++ b/lib/powerdnsex/managers/records_manager.ex @@ -12,6 +12,10 @@ defmodule PowerDNSex.Managers.RecordsManager do patch(zone, rrset_attrs) end + def put_zone(%Zone{} = zone, %{} = rrset_attrs) do + create(zone, rrset_attrs) + end + def show(zone_name, %{} = rrset_attrs) do case ZonesManager.show(zone_name) do {:ok, zone} -> RRSet.find(zone.rrsets, rrset_attrs) diff --git a/lib/powerdnsex/managers/zones_manager.ex b/lib/powerdnsex/managers/zones_manager.ex index 23bab1d..1f16a6c 100644 --- a/lib/powerdnsex/managers/zones_manager.ex +++ b/lib/powerdnsex/managers/zones_manager.ex @@ -20,6 +20,14 @@ defmodule PowerDNSex.Managers.ZonesManager do |> process_request_response end + def get_zone(zone_name, server_name \\ @default_server) + when is_bitstring(zone_name) do + server_name + |> zone_path_light(zone_name) + |> HttpClient.get!() + |> process_request_response + end + def delete(zone_name, server_name \\ @default_server) when is_bitstring(zone_name) do server_name @@ -40,6 +48,10 @@ defmodule PowerDNSex.Managers.ZonesManager do zone_path(server_name) <> "/#{zone_name}" end + defp zone_path_light(server_name, zone_name) when is_bitstring(server_name) do + "api/v1/servers/#{server_name}/zones/#{zone_name}?rrsets=false" + end + defp process_request_response(%Response{body: body, status_code: status}) do case status do s when s == 204 -> diff --git a/test/lib/powerdnsex/managers/zones_manager_test.exs b/test/lib/powerdnsex/managers/zones_manager_test.exs index 1b4982e..e2ae2d8 100644 --- a/test/lib/powerdnsex/managers/zones_manager_test.exs +++ b/test/lib/powerdnsex/managers/zones_manager_test.exs @@ -86,6 +86,16 @@ defmodule PowerDNSex.Managers.ZonesManagerTest do end end + describe "ZonesManager.get_zone/1" do + @tag :zones_manager_get_zone + test "type of return given a correct zone name" do + use_cassette "zones_manager/show/success" do + {:ok, zone} = ZonesManager.get_zone(@valid_zone_test.name) + assert zone == @expected_zone + end + end + end + describe "ZonesManager.show/2" do @tag :zones_manager_show test "type of return given a correct zone name" do diff --git a/test/support/cassettes/zones_manager/get_zone/success.json b/test/support/cassettes/zones_manager/get_zone/success.json new file mode 100644 index 0000000..a6ca219 --- /dev/null +++ b/test/support/cassettes/zones_manager/get_zone/success.json @@ -0,0 +1,28 @@ +[ + { + "request": { + "body": "", + "headers": { + "X-API-Key": "S3cr37_70k3n" + }, + "method": "get", + "options": { + "ssl_options": { + "versions": [ + "tlsv1.1" + ] + }, + "recv_timeout": 300000 + }, + "request_body": "", + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/my-domain.art." + }, + "response": { + "binary": false, + "body": "nxdomain", + "headers": [], + "status_code": null, + "type": "error" + } + } +] \ No newline at end of file -- cgit v1.2.3