User Tools

Site Tools


Example of PowerDNS web API usage

Prepare

Create a base zone

$ curl -X POST -H 'X-API-Key: powerdns' \
   -d '{"name": "kubes.unix7.org.", "kind": "Native", "masters": [],  \
    "nameservers": ["v7.unix7.org."]}' \
    http://v7.unix7.org:8081/api/v1/servers/localhost/zones

{
   "soa_edit_api" : "DEFAULT",
   "edited_serial" : 2023041101,
   "masters" : [],
   "api_rectify" : false,
   "dnssec" : false,
   "rrsets" : [
      {
         "ttl" : 180,
         "records" : [
            {
               "content" : "a.misconfigured.dns.server.invalid. hostmaster.kubes.unix7.org. 2023041101 10800 3600 604800 3600",
               "disabled" : false
            }
         ],
         "comments" : [],
         "name" : "kubes.unix7.org.",
         "type" : "SOA"
      },
      {
         "records" : [
            {
               "disabled" : false,
               "content" : "v7.unix7.org."
            }
         ],
         "ttl" : 180,
         "type" : "NS",
         "name" : "kubes.unix7.org.",
         "comments" : []
      }
   ],
   "soa_edit" : "",
   "nsec3param" : "",
   "last_check" : 0,
   "master_tsig_key_ids" : [],
   "account" : "",
   "catalog" : "",
   "slave_tsig_key_ids" : [],
   "kind" : "Native",
   "notified_serial" : 0,
   "name" : "kubes.unix7.org.",
   "url" : "/api/v1/servers/localhost/zones/kubes.unix7.org.",
   "serial" : 2023041101,
   "id" : "kubes.unix7.org.",
   "nsec3narrow" : false
}

Show the base zone

$ curl -X GET -H 'X-API-Key: powerdns' \
    http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kubes.unix7.org/export 

kubes.unix7.org.	180	IN	NS	v7.unix7.org.
kubes.unix7.org.	180	IN	SOA	a.misconfigured.dns.server.invalid. hostmaster.kubes.unix7.org. 2023041101 10800 3600 604800 3600

Usage

Create of delegated NS record for subzone

$ curl -X PATCH -H 'X-API-Key: powerdns' \
   -d '{"rrsets": [{"name": "kube7.kubes.unix7.org.", "type": "NS", "ttl": 300, \
     "changetype": "REPLACE", "records": [{"content": "v7.unix7.org.", "disabled": false}]}]}' \
     http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kubes.unix7.org 

Show prepared base zone

$ curl -X GET -H 'X-API-Key: powerdns' \
   http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kubes.unix7.org/export 
kube7.kubes.unix7.org.	300	IN	NS	v7.unix7.org.
kubes.unix7.org.	180	IN	NS	v7.unix7.org.
kubes.unix7.org.	180	IN	SOA	a.misconfigured.dns.server.invalid. hostmaster.kubes.unix7.org. 2023041102 10800 3600 604800 3600

Create sub-zone

$ curl -X POST -H 'X-API-Key: powerdns' \
  -d '{"name": "kube7.kubes.unix7.org.", "kind": "Native", "masters": [], "nameservers": ["v7.unix7.org."]}' \  
  http://v7.unix7.org:8081/api/v1/servers/localhost/zones

{
   "account" : "",
   "api_rectify" : false,
   "catalog" : "",
   "dnssec" : false,
   "edited_serial" : 2023041101,
   "id" : "kube7.kubes.unix7.org.",
   "kind" : "Native",
   "last_check" : 0,
   "master_tsig_key_ids" : [],
   "masters" : [],
   "name" : "kube7.kubes.unix7.org.",
   "notified_serial" : 0,
   "nsec3narrow" : false,
   "nsec3param" : "",
   "rrsets" : [
      {
         "comments" : [],
         "name" : "kube7.kubes.unix7.org.",
         "records" : [
            {
               "content" : "a.misconfigured.dns.server.invalid. hostmaster.kube7.kubes.unix7.org. 2023041101 10800 3600 604800 3600",
               "disabled" : false
            }
         ],
         "ttl" : 180,
         "type" : "SOA"
      },
      {
         "comments" : [],
         "name" : "kube7.kubes.unix7.org.",
         "records" : [
            {
               "content" : "v7.unix7.org.",
               "disabled" : false
            }
         ],
         "ttl" : 180,
         "type" : "NS"
      }
   ],
   "serial" : 2023041101,
   "slave_tsig_key_ids" : [],
   "soa_edit" : "",
   "soa_edit_api" : "DEFAULT",
   "url" : "/api/v1/servers/localhost/zones/kube7.kubes.unix7.org."
}

Show raw sub-zone

$ curl -X GET -H 'X-API-Key: powerdns' \
  http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kube7.kubes.unix7.org/export 

kube7.kubes.unix7.org.	180	IN	NS	v7.unix7.org.
kube7.kubes.unix7.org.	180	IN	SOA	a.misconfigured.dns.server.invalid. hostmaster.kube7.kubes.unix7.org. 2023041101 10800 3600 604800 3600

Add A-address record to subzone

$ curl -X PATCH -H 'X-API-Key: powerdns' \
  -d '{"rrsets": [{"name": "gitlab.kube7.kubes.unix7.org.", "type": "A", "ttl": 300, \
    "changetype": "REPLACE", "records": [{"content": "176.118.164.136", "disabled": false}]}]}' \
    http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kube7.kubes.unix7.org

Show raw sub-zone

$ curl -X GET -H 'X-API-Key: powerdns' \ 
   http://v7.unix7.org:8081/api/v1/servers/localhost/zones/kube7.kubes.unix7.org/export 

gitlab.kube7.kubes.unix7.org.	300	IN	A	176.118.164.136
kube7.kubes.unix7.org.	180	IN	NS	v7.unix7.org.
kube7.kubes.unix7.org.	180	IN	SOA	a.misconfigured.dns.server.invalid. hostmaster.kube7.kubes.unix7.org. 2023041102 10800 3600 604800 3600

Check A record from subzone with third party servers

$ host gitlab.kube7.kubes.unix7.org. 1.1.1.1
Using domain server:
Name: 1.1.1.1
Address: 1.1.1.1#53
Aliases: 

gitlab.kube7.kubes.unix7.org has address 176.118.164.136

$ host gitlab.kube7.kubes.unix7.org. 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases: 

gitlab.kube7.kubes.unix7.org has address 176.118.164.136