mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-03 18:53:13 -05:00 
			
		
		
		
	
		
			
	
	
		
			62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package metadata
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"github.com/coredns/coredns/core/dnsserver"
							 | 
						||
| 
								 | 
							
									"github.com/coredns/coredns/plugin"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									"github.com/mholt/caddy"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func init() {
							 | 
						||
| 
								 | 
							
									caddy.RegisterPlugin("metadata", caddy.Plugin{
							 | 
						||
| 
								 | 
							
										ServerType: "dns",
							 | 
						||
| 
								 | 
							
										Action:     setup,
							 | 
						||
| 
								 | 
							
									})
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func setup(c *caddy.Controller) error {
							 | 
						||
| 
								 | 
							
									m, err := metadataParse(c)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									dnsserver.GetConfig(c).AddPlugin(func(next plugin.Handler) plugin.Handler {
							 | 
						||
| 
								 | 
							
										m.Next = next
							 | 
						||
| 
								 | 
							
										return m
							 | 
						||
| 
								 | 
							
									})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									c.OnStartup(func() error {
							 | 
						||
| 
								 | 
							
										plugins := dnsserver.GetConfig(c).Handlers()
							 | 
						||
| 
								 | 
							
										for _, p := range plugins {
							 | 
						||
| 
								 | 
							
											if met, ok := p.(Provider); ok {
							 | 
						||
| 
								 | 
							
												m.Providers = append(m.Providers, met)
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return nil
							 | 
						||
| 
								 | 
							
									})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return nil
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func metadataParse(c *caddy.Controller) (*Metadata, error) {
							 | 
						||
| 
								 | 
							
									m := &Metadata{}
							 | 
						||
| 
								 | 
							
									c.Next()
							 | 
						||
| 
								 | 
							
									zones := c.RemainingArgs()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if len(zones) != 0 {
							 | 
						||
| 
								 | 
							
										m.Zones = zones
							 | 
						||
| 
								 | 
							
										for i := 0; i < len(m.Zones); i++ {
							 | 
						||
| 
								 | 
							
											m.Zones[i] = plugin.Host(m.Zones[i]).Normalize()
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										m.Zones = make([]string, len(c.ServerBlockKeys))
							 | 
						||
| 
								 | 
							
										for i := 0; i < len(c.ServerBlockKeys); i++ {
							 | 
						||
| 
								 | 
							
											m.Zones[i] = plugin.Host(c.ServerBlockKeys[i]).Normalize()
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if c.NextBlock() || c.Next() {
							 | 
						||
| 
								 | 
							
										return nil, plugin.Error("metadata", c.ArgErr())
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return m, nil
							 | 
						||
| 
								 | 
							
								}
							 |