mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 10:13:14 -04:00 
			
		
		
		
	plugin/metadata: add metadata plugin (#1894)
* plugin/metadata: add metadata plugin * plugin/metadata: Add MD struct, refactor code, fix doc * plugin/metadata: simplify metadata key * plugin/metadata: improve setup_test * Support of metadata by rewrite plugin. Move calculated variables to metadata. * Move variables from metadata to pkg, add UTs, READMEs change, metadata small fixes * Add client port validation to variables_test * plugin/metadata: improve README * plugin/metadata: rename methods * plugin/metadata: Update Metadataer interface, update doc, cosmetic code changes * plugin/metadata: move colllisions check to OnStartup(). Fix default variables metadataer. * plugin/metadata: Fix comment for method setValue * plugin/metadata: change variables order to fix linter warning * plugin/metadata: rename Metadataer to Provider
This commit is contained in:
		
				
					committed by
					
						 Miek Gieben
						Miek Gieben
					
				
			
			
				
	
			
			
			
						parent
						
							dae506b563
						
					
				
				
					commit
					17d807f05f
				
			
							
								
								
									
										71
									
								
								plugin/metadata/setup.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								plugin/metadata/setup.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| package metadata | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
|  | ||||
| 	"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() | ||||
| 		// Collect all plugins which implement Provider interface | ||||
| 		metadataVariables := map[string]bool{} | ||||
| 		for _, p := range plugins { | ||||
| 			if met, ok := p.(Provider); ok { | ||||
| 				for _, varName := range met.MetadataVarNames() { | ||||
| 					if _, ok := metadataVariables[varName]; ok { | ||||
| 						return fmt.Errorf("Metadata variable '%v' has duplicates", varName) | ||||
| 					} | ||||
| 					metadataVariables[varName] = true | ||||
| 				} | ||||
| 				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 | ||||
| } | ||||
		Reference in New Issue
	
	Block a user