mirror of
https://github.com/coredns/coredns.git
synced 2025-11-26 21:54:03 -05:00
plugin/metadata: metadata is just label=value (#1914)
This revert 17d807f0 and re-adds the metadata plugin as a plugin that
just sets a label to a value function.
Add package documentation on how to use the metadata package. Make it
clear that any caching is up to the Func implemented.
There are now - no in tree users. We could add the request metadata by
default under names that copy request.Request, i.e
request/ip - remote IP
request/port - remote port
Variables.go has been deleted.
Signed-off-by: Miek Gieben <miek@miek.nl>
This commit is contained in:
@@ -4,7 +4,6 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/coredns/coredns/plugin"
|
||||
"github.com/coredns/coredns/plugin/pkg/variables"
|
||||
"github.com/coredns/coredns/request"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
@@ -24,18 +23,13 @@ func (m *Metadata) Name() string { return "metadata" }
|
||||
// ServeDNS implements the plugin.Handler interface.
|
||||
func (m *Metadata) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
|
||||
|
||||
ctx = context.WithValue(ctx, metadataKey{}, M{})
|
||||
md, _ := FromContext(ctx)
|
||||
ctx = context.WithValue(ctx, key{}, md{})
|
||||
|
||||
state := request.Request{W: w, Req: r}
|
||||
if plugin.Zones(m.Zones).Matches(state.Name()) != "" {
|
||||
// Go through all Providers and collect metadata.
|
||||
for _, provider := range m.Providers {
|
||||
for _, varName := range provider.MetadataVarNames() {
|
||||
if val, ok := provider.Metadata(ctx, state, varName); ok {
|
||||
md.SetValue(varName, val)
|
||||
}
|
||||
}
|
||||
for _, p := range m.Providers {
|
||||
ctx = p.Metadata(ctx, state)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,14 +37,3 @@ func (m *Metadata) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Ms
|
||||
|
||||
return rcode, err
|
||||
}
|
||||
|
||||
// MetadataVarNames implements the plugin.Provider interface.
|
||||
func (m *Metadata) MetadataVarNames() []string { return variables.All }
|
||||
|
||||
// Metadata implements the plugin.Provider interface.
|
||||
func (m *Metadata) Metadata(ctx context.Context, state request.Request, varName string) (interface{}, bool) {
|
||||
if val, err := variables.GetValue(state, varName); err == nil {
|
||||
return val, true
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user