dnscontrol/models/unmanaged.go
Tom Limoncelli 0b7dabacc8
NEW FEATURE: IGNORE() (diff2 only) (#2388)
Co-authored-by: Jeffrey Cafferata <jeffrey@jcid.nl>
2023-05-24 15:14:36 -04:00

53 lines
1.5 KiB
Go

package models
import (
"bytes"
"fmt"
"github.com/gobwas/glob"
)
// UnmanagedConfig describes an IGNORE() rule.
// NB(tlim): This is called "Unmanaged" because the original design
// was to call this function UNMANAGED(). However we then realized
// that we could repurpose IGNORE() without any compatibility issues.
// NB(tlim): TechDebt: UnmanagedConfig and DebugUnmanagedConfig should
// be moved to pkg/diff2/handsoff.go and the following fields could be
// unexported: LabelGlob, RTypeMap, and TargetGlob
type UnmanagedConfig struct {
// Glob pattern for matching labels.
LabelPattern string `json:"label_pattern,omitempty"`
LabelGlob glob.Glob `json:"-"` // Compiled version
// Comma-separated list of DNS Resource Types.
RTypePattern string `json:"rType_pattern,omitempty"`
RTypeMap map[string]struct{} `json:"-"` // map of RTypes or len()=0 for all
// Glob pattern for matching targets.
TargetPattern string `json:"target_pattern,omitempty"`
TargetGlob glob.Glob `json:"-"` // Compiled version
}
// DebugUnmanagedConfig returns a string version of an []*UnmanagedConfig for debugging purposes.
func DebugUnmanagedConfig(uc []*UnmanagedConfig) string {
if len(uc) == 0 {
return "UnmanagedConfig{}"
}
var buf bytes.Buffer
b := &buf
fmt.Fprint(b, "UnmanagedConfig{\n")
for i, c := range uc {
fmt.Fprintf(b, "%00d: (%v, %+v, %v)\n",
i,
c.LabelGlob,
c.RTypeMap,
c.TargetGlob,
)
}
fmt.Fprint(b, "}")
return b.String()
}