summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavi Oliveira <davi.oliveira@locaweb.com>2021-02-10 18:36:38 -0300
committerDavi Oliveira <davi.oliveira@locaweb.com>2021-02-10 18:36:38 -0300
commitc20723cfb5c3af983a42a54e1233e9b6f0550ce1 (patch)
treeb4a14d8852931925ea033c9adb101decd84b9833
parentInitialize poolboy app (diff)
Add zone without rrset
-rw-r--r--lib/powerdnsex.ex4
-rw-r--r--lib/powerdnsex/gen_server/server.ex4
-rw-r--r--lib/powerdnsex/managers/records_manager.ex4
-rw-r--r--lib/powerdnsex/managers/zones_manager.ex12
-rw-r--r--test/lib/powerdnsex/managers/zones_manager_test.exs10
-rw-r--r--test/support/cassettes/zones_manager/get_zone/success.json28
6 files changed, 62 insertions, 0 deletions
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