Class: Fog::DNS::PowerDNS::Real
- Inherits:
-
Object
- Object
- Fog::DNS::PowerDNS::Real
- Defined in:
- lib/fog/dns/powerdns.rb,
lib/fog/dns/powerdns/requests/get_zone.rb,
lib/fog/dns/powerdns/requests/get_server.rb,
lib/fog/dns/powerdns/requests/list_zones.rb,
lib/fog/dns/powerdns/requests/search_log.rb,
lib/fog/dns/powerdns/requests/create_zone.rb,
lib/fog/dns/powerdns/requests/delete_zone.rb,
lib/fog/dns/powerdns/requests/notify_zone.rb,
lib/fog/dns/powerdns/requests/update_zone.rb,
lib/fog/dns/powerdns/requests/list_servers.rb,
lib/fog/dns/powerdns/requests/get_cryptokey.rb,
lib/fog/dns/powerdns/requests/retrieve_zone.rb,
lib/fog/dns/powerdns/requests/update_rrsets.rb,
lib/fog/dns/powerdns/requests/list_cryptokeys.rb,
lib/fog/dns/powerdns/requests/get_server_stats.rb,
lib/fog/dns/powerdns/requests/get_server_config.rb,
lib/fog/dns/powerdns/requests/list_server_configs.rb,
lib/fog/dns/powerdns/requests/update_server_config.rb
Instance Method Summary collapse
-
#create_zone(server, name, nameservers, options = {}) ⇒ Object
Create a single zone in PowerDNS Server, name and nameservers LIST are required.
-
#delete_zone(server, zone) ⇒ Object
Parameters * server<~String> - server id * zone<~String> - zone id.
-
#get_cryptokey(server, zone, cryptokey) ⇒ Object
Returns * response<~Excon::Response>: * body<~Hash>: * ‘type’: <~String>, * ‘id’: <~Integer>, * ‘active’: <~Boolean>, * ‘keytype’: <~String>, * ‘dnskey’: <~String>, * ‘content’: <~String>, * ‘ds’: <~Array> * status<~Integer> - 200 when successful.
-
#get_server(server) ⇒ Object
Get details of a DNS server.
-
#get_server_config(server, config) ⇒ Object
Get a specific config setting of one server TODO: Can only get / retrieve recursor’s allow_from.
-
#get_server_stats(server) ⇒ Object
Retrieves server stats.
-
#get_zone(server, zone) ⇒ Object
Get details of a DNS zone.
-
#initialize(options = {}) ⇒ Real
constructor
A new instance of Real.
-
#list_cryptokeys(server, zone) ⇒ Object
Get details of all public cryptokeys.
-
#list_server_configs(server) ⇒ Object
Get all of a DNS server’s config settings.
-
#list_servers ⇒ Object
Get details of all powerdns servers.
-
#list_zones(server) ⇒ Object
Get details of a server’s DNS zones.
-
#notify_zone(server, zone) ⇒ Object
DNS Notify all slaves of the zone Authoritative only, zone must be set up as master or slave (fails otherwise).
- #reload ⇒ Object
- #request(params) ⇒ Object
-
#retrieve_zone(server, zone) ⇒ Object
Retrieves master Authoritative only, zone must be set up as slave (fails otherwise).
-
#search_log(server, term) ⇒ Object
Searches for term in server logs.
-
#update_rrsets(server, zone, options = {}) ⇒ Object
Modify existing RRset’s of a zone.
-
#update_server_config(server, config, body) ⇒ Object
Update a specific config setting of one server TODO: Can only get / retrieve recursor’s allow_from.
-
#update_zone(server, zone, options = {}) ⇒ Object
Modify a single zone in PowerDNS.
Constructor Details
#initialize(options = {}) ⇒ Real
Returns a new instance of Real.
37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/fog/dns/powerdns.rb', line 37 def initialize( = {}) @pdns_api_key = [:pdns_api_key] @connection_options = [:connection_options] || {} @host = [:host] || '127.0.0.1' @persistent = [:persistent] || false @port = [:port] || 8081 @scheme = [:scheme] || 'http' @api_version = [:api_version] || 'v1' @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) end |
Instance Method Details
#create_zone(server, name, nameservers, options = {}) ⇒ Object
Create a single zone in PowerDNS Server, name and nameservers LIST are required
Parameters
-
server<~String> - Server ID
-
name<~String> - Name of domain
-
nameservers<~Array> - List of nameservers
-
options<~Hash> - Other options
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘id’: <~String>,
-
“name”: <~String>,
-
‘type’: <~String>,
-
‘url’: <~String>,
-
‘kind’: <~String>,
-
‘serial’: <~Integer>,
-
‘notified_serial’: <~Int>,
-
‘masters’: <~Array,
-
‘dnssec’: <~Boolean>,
-
‘nsec3param’: <~String>,
-
‘nsec3narrow’: <~Boolean>,
-
‘presigned’: <~Boolean>,
-
‘soa_edit’: ‘<~String>’,
-
‘soa_edit_api’: ‘<~String>’,
-
‘account’: ‘<~String>’,
-
‘nameservers’: <~Array>,
-
‘servers’: <~Array>,
-
‘recursion_desired’: <~Boolean>,
-
‘records’: <~Array>,
-
‘comments’: <~Array>,
-
-
status<~Integer> 201 when successful
-
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/fog/dns/powerdns/requests/create_zone.rb', line 41 def create_zone(server, name, nameservers, = {}) body = { 'name' => name, 'nameservers' => nameservers } .each do |option, value| body[option] = value end request( body: Fog::JSON.encode(body), expects: 201, method: 'POST', path: "/api/#{@api_version}/servers/#{server}/zones" ).body end |
#delete_zone(server, zone) ⇒ Object
Parameters
-
server<~String> - server id
-
zone<~String> - zone id
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
status<~Integer> - 204 when successful
-
21 22 23 24 25 26 27 |
# File 'lib/fog/dns/powerdns/requests/delete_zone.rb', line 21 def delete_zone(server, zone) request( expects: 204, method: 'DELETE', path: "/api/#{@api_version}/servers/#{server}/zones/#{zone}" ) end |
#get_cryptokey(server, zone, cryptokey) ⇒ Object
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘type’: <~String>,
-
‘id’: <~Integer>,
-
‘active’: <~Boolean>,
-
‘keytype’: <~String>,
-
‘dnskey’: <~String>,
-
‘content’: <~String>,
-
‘ds’: <~Array>
-
-
status<~Integer> - 200 when successful
-
28 29 30 31 32 33 34 |
# File 'lib/fog/dns/powerdns/requests/get_cryptokey.rb', line 28 def get_cryptokey(server, zone, cryptokey) request( expects: 200, method: 'GET', path: "/api/#{@api_version}/servers/#{server}/zones/#{zone}/cryptokeys/#{cryptokey}" ).body end |
#get_server(server) ⇒ Object
Get details of a DNS server
Parameters
-
server<~String> - server id
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘type’: <~String>,
-
‘id’: <~String>,
-
‘url’: <~String>,
-
‘daemon_type’: <~String>,
-
‘version’: <~String>,
-
‘config_url’: <~String>,
-
‘zones_url’: <~String>,
-
-
status<~String> - 200 when successful
-
24 25 26 27 28 29 30 |
# File 'lib/fog/dns/powerdns/requests/get_server.rb', line 24 def get_server(server) request( expects: 200, method: 'GET', path: "/api/#{@api_version}/servers/#{server}" ).body end |
#get_server_config(server, config) ⇒ Object
Get a specific config setting of one server TODO: Can only get / retrieve recursor’s allow_from
Parameters
-
server<~String> - server id
-
config<~String> - config name
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘type’: <~String>,
-
‘name’: <~String>,
-
‘value’: <~String>
-
-
status<~String> - 200 when successful
-
22 23 24 25 26 27 28 |
# File 'lib/fog/dns/powerdns/requests/get_server_config.rb', line 22 def get_server_config(server, config) request( expects: 200, method: 'GET', path: "/api/#{@api_version}/servers/#{server}/config/#{config}" ).body end |
#get_server_stats(server) ⇒ Object
Retrieves server stats
Parameters
-
server<~String> - server id
Returns
-
response<~Excon::Response>:
-
body<~Array>:
* statistics<~Hash>: * 'type': <~String>, * 'name': <~String>, * 'value': <~String>
-
status<~Integer> - 200 when successful
-
21 22 23 24 25 26 27 |
# File 'lib/fog/dns/powerdns/requests/get_server_stats.rb', line 21 def get_server_stats(server) request( expects: 200, method: 'GET', path: "/api/#{@api_version}/servers/#{server}/statistics" ).body end |
#get_zone(server, zone) ⇒ Object
Get details of a DNS zone
Parameters
-
zone<~String> - Zone id
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘id’: <~String>,
-
“name”: <~String>,
-
‘type’: <~String>,
-
‘url’: <~String>,
-
‘kind’: <~String>,
-
‘serial’: <~Integer>,
-
‘notified_serial’: <~Int>,
-
‘masters’: <~Array,
-
‘dnssec’: <~Boolean>,
-
‘nsec3param’: <~String>,
-
‘nsec3narrow’: <~Boolean>,
-
‘presigned’: <~Boolean>,
-
‘soa_edit’: ‘<~String>’,
-
‘soa_edit_api’: ‘<~String>’,
-
‘account’: ‘<~String>’,
-
‘nameservers’: <~Array>,
-
‘servers’: <~Array>,
-
‘recursion_desired’: <~Boolean>,
-
‘records’: <~Array>,
-
‘comments’: <~Array>,
-
-
status<~Integer> 200 when successful
-
37 38 39 40 41 42 43 |
# File 'lib/fog/dns/powerdns/requests/get_zone.rb', line 37 def get_zone(server, zone) request( expects: 200, method: 'GET', path: "/api/#{@api_version}/servers/#{server}/zones/#{zone}" ).body end |
#list_cryptokeys(server, zone) ⇒ Object
Get details of all public cryptokeys
Parameters
server<~String> - server id zone<~String> - zone id
Returns
-
response<~Excon::Response>:
-
body<~Array>:
* Cryptokey<~Hash>: * 'type': <~String>, * 'id': <~Integer>, * 'active': <~Boolean>, * 'keytype': <~String>, * 'dnskey': <~String>, * 'content': <~String>, * 'ds': <~Array>
-
status<~Integer> - 200 when successful
-
27 28 29 30 31 32 33 |
# File 'lib/fog/dns/powerdns/requests/list_cryptokeys.rb', line 27 def list_cryptokeys(server, zone) request( expects: 200, method: 'GET', path: "/api/#{@api_version}/servers/#{server}/zones/#{zone}/cryptokeys" ).body end |
#list_server_configs(server) ⇒ Object
Get all of a DNS server’s config settings
Parameters
-
server<~String> - server id
Returns
-
response<~Excon::Response>:
-
body<~Array>:
* Config<~Hash>: * 'type': <~String>, * 'name': <~String>, * 'value': <~String>
-
status<~String> - 200 when successful
-
21 22 23 24 25 26 27 |
# File 'lib/fog/dns/powerdns/requests/list_server_configs.rb', line 21 def list_server_configs(server) request( expects: 200, method: 'GET', path: "/api/#{@api_version}/servers/#{server}/config" ).body end |
#list_servers ⇒ Object
Get details of all powerdns servers
Parameters
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
server<~Array>:
-
‘type’: <~String>,
-
‘id’: <~String>,
-
‘url’: <~String>,
-
‘daemon_type’: <~String>,
-
‘version’: <~String>,
-
‘config_url’: <~String>,
-
‘zones_url’: <~String>,
-
-
-
status<~String> - 200 when successful
-
25 26 27 28 29 30 31 |
# File 'lib/fog/dns/powerdns/requests/list_servers.rb', line 25 def list_servers request( expects: 200, method: 'GET', path: "/api/#{@api_version}/servers" ).body end |
#list_zones(server) ⇒ Object
Get details of a server’s DNS zones
Parameters
-
server<~String> - server id
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
zone<~Hash>:
-
‘id’: <~String>,
-
“name”: <~String>,
-
‘type’: <~String>,
-
‘url’: <~String>,
-
‘kind’: <~String>,
-
‘serial’: <~Integer>,
-
‘notified_serial’: <~Int>,
-
‘masters’: <~Array,
-
‘dnssec’: <~Boolean>,
-
‘nsec3param’: <~String>,
-
‘nsec3narrow’: <~Boolean>,
-
‘presigned’: <~Boolean>,
-
‘soa_edit’: ‘<~String>’,
-
‘soa_edit_api’: ‘<~String>’,
-
‘account’: ‘<~String>’,
-
‘nameservers’: <~Array>,
-
‘servers’: <~Array>,
-
‘recursion_desired’: <~Boolean>,
-
‘records’: <~Array>,
-
‘comments’: <~Array>,
-
-
-
status<~Integer> 200 when successful
-
38 39 40 41 42 43 44 |
# File 'lib/fog/dns/powerdns/requests/list_zones.rb', line 38 def list_zones(server) request( expects: 200, method: 'GET', path: "/api/#{@api_version}/servers/#{server}/zones" ).body end |
#notify_zone(server, zone) ⇒ Object
DNS Notify all slaves of the zone Authoritative only, zone must be set up as master or slave (fails otherwise)
Parameters
-
server<~String> - server id
-
zone<~String> - zone name
Returns
TODO: Untested
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘id’: <~String>,
-
“name”: <~String>,
-
‘type’: <~String>,
-
‘url’: <~String>,
-
‘kind’: <~String>,
-
‘serial’: <~Integer>,
-
‘notified_serial’: <~Int>,
-
‘masters’: <~Array,
-
‘dnssec’: <~Boolean>,
-
‘nsec3param’: <~String>,
-
‘nsec3narrow’: <~Boolean>,
-
‘presigned’: <~Boolean>,
-
‘soa_edit’: ‘<~String>’,
-
‘soa_edit_api’: ‘<~String>’,
-
‘account’: ‘<~String>’,
-
‘nameservers’: <~Array>,
-
‘servers’: <~Array>,
-
‘recursion_desired’: <~Boolean>,
-
‘records’: <~Array>,
-
‘comments’: <~Array>,
-
-
status<~Integer> 200 when successful
-
41 42 43 44 45 46 47 |
# File 'lib/fog/dns/powerdns/requests/notify_zone.rb', line 41 def notify_zone(server, zone) request( expects: 200, method: 'PUT', path: "/api/#{@api_version}/servers/#{server}/zones/#{zone}/notify" ) end |
#reload ⇒ Object
49 50 51 |
# File 'lib/fog/dns/powerdns.rb', line 49 def reload @connection.reset end |
#request(params) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/fog/dns/powerdns.rb', line 53 def request(params) params[:headers] ||= {} params[:headers]['X-API-key'] = @pdns_api_key.to_s params[:headers].merge!( 'Accept' => 'application/json', 'Content-Type' => 'application/json' ) response = @connection.request(params) response.body = Fog::JSON.decode(response.body) unless response.body.empty? response end |
#retrieve_zone(server, zone) ⇒ Object
Retrieves master Authoritative only, zone must be set up as slave (fails otherwise)
Parameters
-
server<~String> - server id
-
zone<~String> - zone name
Returns
TODO: Untested
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘id’: <~String>,
-
“name”: <~String>,
-
‘type’: <~String>,
-
‘url’: <~String>,
-
‘kind’: <~String>,
-
‘serial’: <~Integer>,
-
‘notified_serial’: <~Int>,
-
‘masters’: <~Array,
-
‘dnssec’: <~Boolean>,
-
‘nsec3param’: <~String>,
-
‘nsec3narrow’: <~Boolean>,
-
‘presigned’: <~Boolean>,
-
‘soa_edit’: ‘<~String>’,
-
‘soa_edit_api’: ‘<~String>’,
-
‘account’: ‘<~String>’,
-
‘nameservers’: <~Array>,
-
‘servers’: <~Array>,
-
‘recursion_desired’: <~Boolean>,
-
‘records’: <~Array>,
-
‘comments’: <~Array>,
-
-
status<~Integer> 201 when successful
-
41 42 43 44 45 46 47 |
# File 'lib/fog/dns/powerdns/requests/retrieve_zone.rb', line 41 def retrieve_zone(server, zone) request( expects: 200, method: 'PUT', path: "/api/#{@api_version}/servers/#{server}/zones/#{zone}/axfr-retrieve" ) end |
#search_log(server, term) ⇒ Object
Searches for term in server logs
Parameters
-
server<~String> - server id
-
term<~String> - search term
Returns
-
response<~Excon::Response>:
-
body<~Array>:
-
log-line<~String>
-
-
status<~Integer> - 200 when successful
-
19 20 21 22 23 24 25 |
# File 'lib/fog/dns/powerdns/requests/search_log.rb', line 19 def search_log(server, term) request( expects: 200, method: 'GET', path: "/api/#{@api_version}/servers/#{server}/search-log?q=#{term}" ).body end |
#update_rrsets(server, zone, options = {}) ⇒ Object
Modify existing RRset’s of a zone
Parameters
server<~String> - server id zone<~String> - zone id options<~Hash> - see pdns api for rules
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘rrsets’<~Hash> The representation of the rrsets:
-
‘name’: <~String>,
-
‘type’: <~String>,
-
‘changetype’: <~String>,
-
‘records’ <~Hash> domain records:
-
‘content’: <~String>,
-
‘name’: <~String>,
-
‘ttl’: <~Integer>,
-
‘type’: <~String>,
-
‘disabled’: <~Boolean>,
-
‘set-ptr’: <~Boolean>
-
-
‘comments’ <~Hash> comments:
-
‘account’: <~String>,
-
‘content’: <~String>,
-
‘modfied_at’: <~Integer>
-
-
-
-
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/fog/dns/powerdns/requests/update_rrsets.rb', line 33 def update_rrsets(server, zone, = {}) body = {} .each do |option, value| body[option] = value end request( body: Fog::JSON.encode(body), expects: 204, method: 'PATCH', path: "/api/#{@api_version}/servers/#{server}/zones/#{zone}" ) end |
#update_server_config(server, config, body) ⇒ Object
Update a specific config setting of one server TODO: Can only get / retrieve recursor’s allow_from
Parameters
-
server<~String> - server id
-
config<~String> - config name
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘type’: <~String>,
-
‘name’: <~String>,
-
‘value’: <~String>
-
-
status<~String> - 200 when successful
-
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/fog/dns/powerdns/requests/update_server_config.rb', line 22 def update_server_config(server, config, body) if config == 'allows_from' request( body: body, expects: 200, method: 'PUT', path: "/api/#{@api_version}/servers/#{server}/config/#{config}" ).body else puts 'Only allows_from config is allowed.' end end |
#update_zone(server, zone, options = {}) ⇒ Object
Modify a single zone in PowerDNS
Parameters
server<~String> - server id zone<~String> - zone id options<~Hash> - pairs enumerated below
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
‘id’: <~String>,
-
“name”: <~String>,
-
‘type’: <~String>,
-
‘url’: <~String>,
-
‘kind’: <~String>,
-
‘serial’: <~Integer>,
-
‘notified_serial’: <~Int>,
-
‘masters’: <~Array,
-
‘dnssec’: <~Boolean>,
-
‘nsec3param’: <~String>,
-
‘nsec3narrow’: <~Boolean>,
-
‘presigned’: <~Boolean>,
-
‘soa_edit’: ‘<~String>’,
-
‘soa_edit_api’: ‘<~String>’,
-
‘account’: ‘<~String>’,
-
‘nameservers’: <~Array>,
-
‘servers’: <~Array>,
-
‘recursion_desired’: <~Boolean>,
-
‘records’: <~Array>,
-
‘comments’: <~Array>,
-
-
status<~Integer> 200 when successful
-
40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/fog/dns/powerdns/requests/update_zone.rb', line 40 def update_zone(server, zone, = {}) body = {} .each do |option, value| body[option] = value end request( body: Fog::JSON.encode(body), expects: 200, method: 'PUT', path: "/api/#{@api_version}/servers/#{server}/zones/#{zone}" ).body end |