summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicardo Hermida Ruiz <ricardo.ruiz@locaweb.com.br>2021-02-11 14:35:27 -0300
committerGitHub <noreply@github.com>2021-02-11 14:35:27 -0300
commit9de84ccb4e65cd7e71485f6c479e48902bde8aed (patch)
tree8d699e133ec46a099306884c39e5cb3f3c2666d1
parentInitialize poolboy app (diff)
parentFix zone path light (diff)
Merge pull request #17 from daviluis321/zone_whithout_rrset
Add zone without rrset
-rw-r--r--README.md3
-rw-r--r--lib/powerdnsex.ex18
-rw-r--r--lib/powerdnsex/gen_server/server.ex9
-rw-r--r--lib/powerdnsex/http_client.ex3
-rw-r--r--lib/powerdnsex/managers/records_manager.ex4
-rw-r--r--lib/powerdnsex/managers/zones_manager.ex12
-rw-r--r--test/lib/powerdnsex/config_test.exs5
-rw-r--r--test/lib/powerdnsex/managers/zones_manager_test.exs10
-rw-r--r--test/support/cassettes/zones_manager/get_zone/success.json28
-rw-r--r--test/support/fake_config.exs1
10 files changed, 87 insertions, 6 deletions
diff --git a/README.md b/README.md
index 3aba62c..5614f2c 100644
--- a/README.md
+++ b/README.md
@@ -56,6 +56,9 @@ zone_model = %PowerDNSex.Models.Zone{
# SHOW ZONE:
{:ok, zone} = PowerDNSex.show_zone("example.com")
+# SHOW ZONE without RRSets:
+{:ok, zone} = PowerDNSex.get_zone("example.com")
+
# DELETE ZONE:
res = PowerDNSex.delete_zone("example.com")
```
diff --git a/lib/powerdnsex.ex b/lib/powerdnsex.ex
index b77389c..cc6db9e 100644
--- a/lib/powerdnsex.ex
+++ b/lib/powerdnsex.ex
@@ -48,6 +48,14 @@ defmodule PowerDNSex do
call({:show_zone, zone, server_name})
end
+ @spec get_zone(String.t(), String.t()) :: :ok | {:error, String.t()}
+ @doc """
+ Show / Retrive info of the specific Zone without RRSets
+ """
+ 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
@@ -84,6 +92,14 @@ defmodule PowerDNSex do
call({:update_record, zone, rrset_attrs})
end
+ @spec put_record(Zone.t(), struct) :: :ok | {:error, String.t()}
+ @doc """
+ Update Record of the given Zone
+ """
+ def put_record(%Zone{} = zone, %{} = rrset_attrs) do
+ call({:put_record, zone, rrset_attrs})
+ end
+
@spec delete_record(Zone.t(), struct) :: :ok | {:error, String.t()}
@doc """
Delete specific Record of given Zone
@@ -107,7 +123,7 @@ defmodule PowerDNSex do
defp call(params) do
:poolboy.transaction(@name, fn pid ->
- GenServer.call(pid, params, Config.powerdns_timeout)
+ GenServer.call(pid, params, Config.powerdns_timeout())
end)
end
end
diff --git a/lib/powerdnsex/gen_server/server.ex b/lib/powerdnsex/gen_server/server.ex
index df8a453..149351b 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
@@ -43,6 +47,11 @@ defmodule PowerDNSex.Server do
{:reply, RecordsManager.update(zone, attrs), state}
end
+ def handle_call({:put_record, zone, rrset_attrs}, _from, state) do
+ attrs = Converter.keys_to_atom(rrset_attrs)
+ {:reply, RecordsManager.put(zone, attrs), state}
+ end
+
def handle_call({:delete_record, zone, rrset_attrs}, _from, state) do
{:reply, RecordsManager.delete(zone, rrset_attrs), state}
end
diff --git a/lib/powerdnsex/http_client.ex b/lib/powerdnsex/http_client.ex
index 3431795..98e299d 100644
--- a/lib/powerdnsex/http_client.ex
+++ b/lib/powerdnsex/http_client.ex
@@ -15,8 +15,7 @@ defmodule PowerDNSex.HttpClient do
end
def process_request_options(options) do
- custom_options = [ssl: [{:versions, [:'tlsv1.1']}], recv_timeout: Config.powerdns_timeout()]
+ custom_options = [ssl: [{:versions, [:"tlsv1.1"]}], recv_timeout: Config.powerdns_timeout()]
Keyword.merge(options, custom_options)
end
-
end
diff --git a/lib/powerdnsex/managers/records_manager.ex b/lib/powerdnsex/managers/records_manager.ex
index f2ef6b5..e377322 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, %{} = 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..b1567ef 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_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/config_test.exs b/test/lib/powerdnsex/config_test.exs
index c8649ae..394d97c 100644
--- a/test/lib/powerdnsex/config_test.exs
+++ b/test/lib/powerdnsex/config_test.exs
@@ -67,9 +67,10 @@ defmodule PowerDNSex.ConfigTest do
@tag :configs
test "uses default timeout" do
existing = Application.get_env(:powerdnsex, :timeout)
- on_exit fn ->
+
+ on_exit(fn ->
Application.put_env(:powerdnsex, :timeout, existing)
- end
+ end)
Application.delete_env(:powerdnsex, :timeout)
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
diff --git a/test/support/fake_config.exs b/test/support/fake_config.exs
index e05db22..80912e1 100644
--- a/test/support/fake_config.exs
+++ b/test/support/fake_config.exs
@@ -7,7 +7,6 @@ defmodule PowerDNSex.FakeConfig do
def set_token, do: Application.put_env(:powerdnsex, :token, @app_config_token)
def set_timeout, do: Application.put_env(:powerdnsex, :timeout, @app_config_timeout)
-
def token, do: @app_config_token
def url, do: @app_config_url
def timeout, do: @app_config_timeout