pdns: reconstruct zone URLs to enable non-root folder API endpoints (#2141)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
This commit is contained in:
parent
f89e257694
commit
5eb87685e2
2 changed files with 54 additions and 2 deletions
|
@ -117,7 +117,7 @@ func (c *Client) GetHostedZone(ctx context.Context, authZone string) (*HostedZon
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) UpdateRecords(ctx context.Context, zone *HostedZone, sets RRSets) error {
|
func (c *Client) UpdateRecords(ctx context.Context, zone *HostedZone, sets RRSets) error {
|
||||||
endpoint := c.joinPath("/", zone.URL)
|
endpoint := c.joinPath("/", "servers", c.serverName, "zones", zone.ID)
|
||||||
|
|
||||||
req, err := newJSONRequest(ctx, http.MethodPatch, endpoint, sets)
|
req, err := newJSONRequest(ctx, http.MethodPatch, endpoint, sets)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -137,7 +137,7 @@ func (c *Client) Notify(ctx context.Context, zone *HostedZone) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
endpoint := c.joinPath("/", zone.URL, "/notify")
|
endpoint := c.joinPath("/", "servers", c.serverName, "zones", zone.ID, "notify")
|
||||||
|
|
||||||
req, err := newJSONRequest(ctx, http.MethodPut, endpoint, nil)
|
req, err := newJSONRequest(ctx, http.MethodPut, endpoint, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -256,6 +256,7 @@ func TestClient_GetHostedZone_v0(t *testing.T) {
|
||||||
func TestClient_UpdateRecords(t *testing.T) {
|
func TestClient_UpdateRecords(t *testing.T) {
|
||||||
client := setupTest(t, http.MethodPatch, "/api/v1/servers/localhost/zones/example.org.", http.StatusOK, "zone.json")
|
client := setupTest(t, http.MethodPatch, "/api/v1/servers/localhost/zones/example.org.", http.StatusOK, "zone.json")
|
||||||
client.apiVersion = 1
|
client.apiVersion = 1
|
||||||
|
client.serverName = "localhost"
|
||||||
|
|
||||||
zone := &HostedZone{
|
zone := &HostedZone{
|
||||||
ID: "example.org.",
|
ID: "example.org.",
|
||||||
|
@ -282,9 +283,41 @@ func TestClient_UpdateRecords(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestClient_UpdateRecords_NonRootApi(t *testing.T) {
|
||||||
|
client := setupTest(t, http.MethodPatch, "/some/path/api/v1/servers/localhost/zones/example.org.", http.StatusOK, "zone.json")
|
||||||
|
client.Host = client.Host.JoinPath("some", "path")
|
||||||
|
client.apiVersion = 1
|
||||||
|
client.serverName = "localhost"
|
||||||
|
|
||||||
|
zone := &HostedZone{
|
||||||
|
ID: "example.org.",
|
||||||
|
Name: "example.org.",
|
||||||
|
URL: "some/path/api/v1/servers/server/zones/example.org.",
|
||||||
|
Kind: "Master",
|
||||||
|
}
|
||||||
|
|
||||||
|
rrSets := RRSets{
|
||||||
|
RRSets: []RRSet{{
|
||||||
|
Name: "example.org.",
|
||||||
|
Type: "NS",
|
||||||
|
ChangeType: "REPLACE",
|
||||||
|
Records: []Record{{
|
||||||
|
Content: "192.0.2.5",
|
||||||
|
Name: "ns1.example.org.",
|
||||||
|
TTL: 86400,
|
||||||
|
Type: "A",
|
||||||
|
}},
|
||||||
|
}},
|
||||||
|
}
|
||||||
|
|
||||||
|
err := client.UpdateRecords(context.Background(), zone, rrSets)
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestClient_UpdateRecords_v0(t *testing.T) {
|
func TestClient_UpdateRecords_v0(t *testing.T) {
|
||||||
client := setupTest(t, http.MethodPatch, "/servers/localhost/zones/example.org.", http.StatusOK, "zone.json")
|
client := setupTest(t, http.MethodPatch, "/servers/localhost/zones/example.org.", http.StatusOK, "zone.json")
|
||||||
client.apiVersion = 0
|
client.apiVersion = 0
|
||||||
|
client.serverName = "localhost"
|
||||||
|
|
||||||
zone := &HostedZone{
|
zone := &HostedZone{
|
||||||
ID: "example.org.",
|
ID: "example.org.",
|
||||||
|
@ -314,6 +347,7 @@ func TestClient_UpdateRecords_v0(t *testing.T) {
|
||||||
func TestClient_Notify(t *testing.T) {
|
func TestClient_Notify(t *testing.T) {
|
||||||
client := setupTest(t, http.MethodPut, "/api/v1/servers/localhost/zones/example.org./notify", http.StatusOK, "")
|
client := setupTest(t, http.MethodPut, "/api/v1/servers/localhost/zones/example.org./notify", http.StatusOK, "")
|
||||||
client.apiVersion = 1
|
client.apiVersion = 1
|
||||||
|
client.serverName = "localhost"
|
||||||
|
|
||||||
zone := &HostedZone{
|
zone := &HostedZone{
|
||||||
ID: "example.org.",
|
ID: "example.org.",
|
||||||
|
@ -326,8 +360,26 @@ func TestClient_Notify(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestClient_Notify_NonRootApi(t *testing.T) {
|
||||||
|
client := setupTest(t, http.MethodPut, "/some/path/api/v1/servers/localhost/zones/example.org./notify", http.StatusOK, "")
|
||||||
|
client.Host = client.Host.JoinPath("some", "path")
|
||||||
|
client.apiVersion = 1
|
||||||
|
client.serverName = "localhost"
|
||||||
|
|
||||||
|
zone := &HostedZone{
|
||||||
|
ID: "example.org.",
|
||||||
|
Name: "example.org.",
|
||||||
|
URL: "/some/path/api/v1/servers/server/zones/example.org.",
|
||||||
|
Kind: "Master",
|
||||||
|
}
|
||||||
|
|
||||||
|
err := client.Notify(context.Background(), zone)
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestClient_Notify_v0(t *testing.T) {
|
func TestClient_Notify_v0(t *testing.T) {
|
||||||
client := setupTest(t, http.MethodPut, "/api/v1/servers/localhost/zones/example.org./notify", http.StatusOK, "")
|
client := setupTest(t, http.MethodPut, "/api/v1/servers/localhost/zones/example.org./notify", http.StatusOK, "")
|
||||||
|
client.apiVersion = 0
|
||||||
|
|
||||||
zone := &HostedZone{
|
zone := &HostedZone{
|
||||||
ID: "example.org.",
|
ID: "example.org.",
|
||||||
|
|
Loading…
Reference in a new issue