aboutsummaryrefslogtreecommitdiff
path: root/middleware/backend.go
blob: 3ce7ab5fd1bab700b06ac14303f688a62198d9c9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package middleware

import (
	"github.com/coredns/coredns/middleware/etcd/msg"
	"github.com/coredns/coredns/request"

	"github.com/miekg/dns"
)

// ServiceBackend defines a (dynamic) backend that returns a slice of service definitions.
type ServiceBackend interface {
	// Services communicates with the backend to retrieve the service definition. Exact indicates
	// on exact much are that we are allowed to recurs.
	Services(state request.Request, exact bool, opt Options) ([]msg.Service, []msg.Service, error)

	// Reverse communicates with the backend to retrieve service definition based on a IP address
	// instead of a name. I.e. a reverse DNS lookup.
	Reverse(state request.Request, exact bool, opt Options) ([]msg.Service, []msg.Service, error)

	// Lookup is used to find records else where.
	Lookup(state request.Request, name string, typ uint16) (*dns.Msg, error)

	// IsNameError return true if err indicated a record not found condition
	IsNameError(err error) bool

	// Debug returns a string used when returning debug services.
	Debug() string

	// Returns _all_ services that matches a certain name.
	// Note: it does not implement a specific service.
	Records(name string, exact bool) ([]msg.Service, error)
}

// Options are extra options that can be specified for a lookup.
type Options struct {
	Debug string // This is a debug query. A query prefixed with debug.o-o
}