Documentation ¶
Index ¶
- Constants
- func CanonicalizeTargets(recs []*RecordConfig, origin string)
- func DebugUnmanagedConfig(uc []*UnmanagedConfig) string
- func Downcase(recs []*RecordConfig)
- func IsQuoted(s string) bool
- func NameserversToStrings(nss []*Nameserver) (s []string)
- func ParseQuotedFields(s string) ([]string, error)
- func ParseQuotedTxt(s string) []string
- func PostProcessRecords(recs []*RecordConfig)
- func StripQuotes(s string) string
- func WarnNameserverDot(p, w string)
- type Correction
- type DNSConfig
- type DNSProvider
- type DNSProviderConfig
- type DNSProviderInstance
- type DomainConfig
- func (dc *DomainConfig) Copy() (*DomainConfig, error)
- func (dc *DomainConfig) Filter(f func(r *RecordConfig) bool)
- func (dc *DomainConfig) GetSplitHorizonNames() (name, uniquename, tag string)
- func (dc *DomainConfig) GetUniqueName() (uniquename string)
- func (dc *DomainConfig) Punycode() error
- func (dc *DomainConfig) UpdateSplitHorizonNames()
- type IgnoreName
- type IgnoreTarget
- type Nameserver
- type ProviderBase
- type RecordConfig
- func (rc *RecordConfig) Copy() (*RecordConfig, error)
- func (rc *RecordConfig) GetLabel() string
- func (rc *RecordConfig) GetLabelFQDN() string
- func (rc *RecordConfig) GetTargetCombined() string
- func (rc *RecordConfig) GetTargetDebug() string
- func (rc *RecordConfig) GetTargetField() string
- func (rc *RecordConfig) GetTargetIP() net.IP
- func (rc *RecordConfig) GetTargetRFC1035Quoted() string
- func (rc *RecordConfig) GetTargetSortable() string
- func (rc *RecordConfig) GetTargetTXTJoined() string
- func (rc *RecordConfig) HasFormatIdenticalToTXT() bool
- func (rc *RecordConfig) Key() RecordKey
- func (rc *RecordConfig) MarshalJSON() ([]byte, error)
- func (rc *RecordConfig) PopulateFromString(rtype, contents, origin string) error
- func (rc *RecordConfig) SetLOCParams(d1 uint8, m1 uint8, s1 float32, ns string, d2 uint8, m2 uint8, s2 float32, ...) error
- func (rc *RecordConfig) SetLabel(short, origin string)
- func (rc *RecordConfig) SetLabelFromFQDN(fqdn, origin string)
- func (rc *RecordConfig) SetTarget(target string) error
- func (rc *RecordConfig) SetTargetCAA(flag uint8, tag string, target string) error
- func (rc *RecordConfig) SetTargetCAAString(s string) error
- func (rc *RecordConfig) SetTargetCAAStrings(flag, tag, target string) error
- func (rc *RecordConfig) SetTargetDS(keytag uint16, algorithm, digesttype uint8, digest string) error
- func (rc *RecordConfig) SetTargetDSString(s string) error
- func (rc *RecordConfig) SetTargetDSStrings(keytag, algorithm, digesttype, digest string) error
- func (rc *RecordConfig) SetTargetIP(ip net.IP) error
- func (rc *RecordConfig) SetTargetLOC(ver uint8, lat uint32, lon uint32, alt uint32, siz uint8, hzp uint8, vtp uint8) error
- func (rc *RecordConfig) SetTargetLOCString(origin string, contents string) error
- func (rc *RecordConfig) SetTargetMX(pref uint16, target string) error
- func (rc *RecordConfig) SetTargetMXString(s string) error
- func (rc *RecordConfig) SetTargetMXStrings(pref, target string) error
- func (rc *RecordConfig) SetTargetNAPTR(order uint16, preference uint16, flags string, service string, regexp string, ...) error
- func (rc *RecordConfig) SetTargetNAPTRString(s string) error
- func (rc *RecordConfig) SetTargetNAPTRStrings(order, preference, flags string, service string, regexp string, target string) error
- func (rc *RecordConfig) SetTargetSOA(ns, mbox string, serial, refresh, retry, expire, minttl uint32) error
- func (rc *RecordConfig) SetTargetSOAString(s string) error
- func (rc *RecordConfig) SetTargetSOAStrings(ns, mbox, serial, refresh, retry, expire, minttl string) error
- func (rc *RecordConfig) SetTargetSRV(priority, weight, port uint16, target string) error
- func (rc *RecordConfig) SetTargetSRVPriorityString(priority uint16, s string) error
- func (rc *RecordConfig) SetTargetSRVString(s string) error
- func (rc *RecordConfig) SetTargetSRVStrings(priority, weight, port, target string) (err error)
- func (rc *RecordConfig) SetTargetSSHFP(algorithm uint8, fingerprint uint8, target string) error
- func (rc *RecordConfig) SetTargetSSHFPString(s string) error
- func (rc *RecordConfig) SetTargetSSHFPStrings(algorithm, fingerprint, target string) error
- func (rc *RecordConfig) SetTargetTLSA(usage, selector, matchingtype uint8, target string) error
- func (rc *RecordConfig) SetTargetTLSAString(s string) error
- func (rc *RecordConfig) SetTargetTLSAStrings(usage, selector, matchingtype, target string) (err error)
- func (rc *RecordConfig) SetTargetTXT(s string) error
- func (rc *RecordConfig) SetTargetTXTfromRFC1035Quoted(s string) error
- func (rc *RecordConfig) SetTargetTXTs(s []string) error
- func (rc *RecordConfig) String() string
- func (rc *RecordConfig) ToComparableNoTTL() string
- func (rc *RecordConfig) ToDiffable(extraMaps ...map[string]string) string
- func (rc *RecordConfig) ToRR() dns.RR
- func (rc *RecordConfig) UnmarshalJSON(b []byte) error
- func (rc *RecordConfig) UnsafeSetLabelNull()
- type RecordDB
- type RecordKey
- type Records
- func (recs Records) FQDNMap() (m map[string]bool)
- func (recs Records) GetByType(typeName string) Records
- func (recs Records) GroupedByFQDN() ([]string, map[string]Records)
- func (recs Records) GroupedByKey() map[RecordKey]Records
- func (recs Records) GroupedByLabel() ([]string, map[string]Records)
- func (recs Records) HasRecordTypeName(rtype, name string) bool
- type Registrar
- type RegistrarConfig
- type RegistrarInstance
- type UnmanagedConfig
Constants ¶
const ( // DomainUniqueName is the full `example.com!tag` name` DomainUniqueName = "dnscontrol_uniquename" // DomainTag is the tag part of `example.com!tag` name DomainTag = "dnscontrol_tag" )
const DefaultTTL = uint32(300)
DefaultTTL is applied to any DNS record without an explicit TTL.
Variables ¶
This section is empty.
Functions ¶
func CanonicalizeTargets ¶ added in v4.1.1
func CanonicalizeTargets(recs []*RecordConfig, origin string)
CanonicalizeTargets turns Targets into FQDNs
func DebugUnmanagedConfig ¶
func DebugUnmanagedConfig(uc []*UnmanagedConfig) string
DebugUnmanagedConfig returns a string version of an []*UnmanagedConfig for debugging purposes.
func Downcase ¶
func Downcase(recs []*RecordConfig)
Downcase converts all labels and targets to lowercase in a list of RecordConfig.
func NameserversToStrings ¶
func NameserversToStrings(nss []*Nameserver) (s []string)
NameserversToStrings constructs a list of strings from *Nameserver structs
func ParseQuotedFields ¶
ParseQuotedFields is like strings.Fields except individual fields might be quoted using `"`.
func ParseQuotedTxt ¶
ParseQuotedTxt returns the individual strings of a combined quoted string.
`foo` -> []string{"foo"} `"foo"` -> []string{"foo"} `"foo" "bar"` -> []string{"foo", "bar"} `"f"oo" "bar"` -> []string{`f"oo`, "bar"}
NOTE: It is assumed there is exactly one space between the quotes. NOTE: This doesn't handle escaped quotes. NOTE: You probably want to use ParseQuotedFields() for RFC 1035-compliant quoting.
func PostProcessRecords ¶
func PostProcessRecords(recs []*RecordConfig)
PostProcessRecords does any post-processing of the downloaded DNS records. Deprecated. zonerecords.CorrectZoneRecords() calls Downcase directly.
func StripQuotes ¶
StripQuotes returns the string with the starting and ending quotes removed. If it is not quoted, the original string is returned.
func WarnNameserverDot ¶
func WarnNameserverDot(p, w string)
WarnNameserverDot prints a warning about issue 491 never more than once.
Types ¶
type Correction ¶
Correction is anything that can be run. Implementation is up to the specific provider.
type DNSConfig ¶
type DNSConfig struct { Registrars []*RegistrarConfig `json:"registrars"` DNSProviders []*DNSProviderConfig `json:"dns_providers"` Domains []*DomainConfig `json:"domains"` RegistrarsByName map[string]*RegistrarConfig `json:"-"` DNSProvidersByName map[string]*DNSProviderConfig `json:"-"` SkipRecordAudit bool `json:"skiprecordaudit,omitempty"` }
DNSConfig describes the desired DNS configuration, usually loaded from dnsconfig.js.
func (*DNSConfig) DomainContainingFQDN ¶
func (config *DNSConfig) DomainContainingFQDN(fqdn string) *DomainConfig
DomainContainingFQDN finds the best domain from the dns config for the given record fqdn. It will chose the domain whose name is the longest suffix match for the fqdn.
func (*DNSConfig) FindDomain ¶
func (config *DNSConfig) FindDomain(query string) *DomainConfig
FindDomain returns the *DomainConfig for domain query in config.
type DNSProvider ¶
type DNSProvider interface { GetNameservers(domain string) ([]*Nameserver, error) GetZoneRecords(domain string, meta map[string]string) (Records, error) GetZoneRecordsCorrections(dc *DomainConfig, existing Records) ([]*Correction, error) }
DNSProvider is an interface for DNS Provider plug-ins.
type DNSProviderConfig ¶
type DNSProviderConfig struct { Name string `json:"name"` Type string `json:"type"` Metadata json.RawMessage `json:"meta,omitempty"` }
DNSProviderConfig describes a DNS service provider.
type DNSProviderInstance ¶
type DNSProviderInstance struct { ProviderBase Driver DNSProvider NumberOfNameservers int }
DNSProviderInstance is a single DNS provider.
type DomainConfig ¶
type DomainConfig struct { Name string `json:"name"` // NO trailing "." RegistrarName string `json:"registrar"` DNSProviderNames map[string]int `json:"dnsProviders"` // Metadata[DomainUniqueName] // .Name + "!" + .Tag // Metadata[DomainTag] // split horizon tag Metadata map[string]string `json:"meta,omitempty"` Records Records `json:"records"` Nameservers []*Nameserver `json:"nameservers,omitempty"` EnsureAbsent Records `json:"recordsabsent,omitempty"` // ENSURE_ABSENT KeepUnknown bool `json:"keepunknown,omitempty"` // NO_PURGE IgnoredNames []*IgnoreName `json:"ignored_names,omitempty"` IgnoredTargets []*IgnoreTarget `json:"ignored_targets,omitempty"` Unmanaged []*UnmanagedConfig `json:"unmanaged,omitempty"` // IGNORE() UnmanagedUnsafe bool `json:"unmanaged_disable_safety_check,omitempty"` // DISABLE_IGNORE_SAFETY_CHECK AutoDNSSEC string `json:"auto_dnssec,omitempty"` // "", "on", "off" // These fields contain instantiated provider instances once everything is linked up. // This linking is in two phases: // 1. Metadata (name/type) is available just from the dnsconfig. Validation can use that. // 2. Final driver instances are loaded after we load credentials. Any actual provider interaction requires that. RegistrarInstance *RegistrarInstance `json:"-"` DNSProviderInstances []*DNSProviderInstance `json:"-"` }
DomainConfig describes a DNS domain (technically a DNS zone).
func (*DomainConfig) Copy ¶
func (dc *DomainConfig) Copy() (*DomainConfig, error)
Copy returns a deep copy of the DomainConfig.
func (*DomainConfig) Filter ¶
func (dc *DomainConfig) Filter(f func(r *RecordConfig) bool)
Filter removes all records that don't match the filter f.
func (*DomainConfig) GetSplitHorizonNames ¶
func (dc *DomainConfig) GetSplitHorizonNames() (name, uniquename, tag string)
GetSplitHorizonNames returns the domain's name, uniquename, and tag.
func (*DomainConfig) GetUniqueName ¶
func (dc *DomainConfig) GetUniqueName() (uniquename string)
GetUniqueName returns the domain's uniquename.
func (*DomainConfig) Punycode ¶
func (dc *DomainConfig) Punycode() error
Punycode will convert all records to punycode format. It will encode: - Name - NameFQDN - Target (CNAME and MX only)
func (*DomainConfig) UpdateSplitHorizonNames ¶
func (dc *DomainConfig) UpdateSplitHorizonNames()
UpdateSplitHorizonNames updates the split horizon fields (uniquename and tag) based on name.
type IgnoreName ¶
type IgnoreName struct { Pattern string `json:"pattern"` // Glob pattern. Types string `json:"types"` // All caps rtype names, comma separated. }
IgnoreName describes an IGNORE_NAME rule.
type IgnoreTarget ¶
type IgnoreTarget struct { Pattern string `json:"pattern"` // Glob pattern. Type string `json:"type"` // All caps rtype name. }
IgnoreTarget describes an IGNORE_TARGET rule.
func (*IgnoreTarget) String ¶
func (i *IgnoreTarget) String() string
type Nameserver ¶
type Nameserver struct {
Name string `json:"name"` // Normalized to a FQDN with NO trailing "."
}
Nameserver describes a nameserver.
func ToNameservers ¶
func ToNameservers(nss []string) ([]*Nameserver, error)
ToNameservers turns a list of strings into a list of Nameservers. It is an error if any string has a trailing dot. Either remove the trailing dot before you call this or (much preferred) use ToNameserversStripTD.
func ToNameserversStripTD ¶
func ToNameserversStripTD(nss []string) ([]*Nameserver, error)
ToNameserversStripTD is like ToNameservers but strips the trailing dot from each item. It is an error if there is no trailing dot.
func (*Nameserver) String ¶
func (n *Nameserver) String() string
type ProviderBase ¶
ProviderBase describes providers.
type RecordConfig ¶
type RecordConfig struct { Type string `json:"type"` // All caps rtype name. Name string `json:"name"` // The short name. See above. SubDomain string `json:"subdomain,omitempty"` NameFQDN string `json:"-"` // Must end with ".$origin". See above. TTL uint32 `json:"ttl,omitempty"` Metadata map[string]string `json:"meta,omitempty"` Original interface{} `json:"-"` // Store pointer to provider-specific record object. Used in diffing. // If you add a field to this struct, also add it to the list on MarshalJSON. MxPreference uint16 `json:"mxpreference,omitempty"` SrvPriority uint16 `json:"srvpriority,omitempty"` SrvWeight uint16 `json:"srvweight,omitempty"` SrvPort uint16 `json:"srvport,omitempty"` CaaTag string `json:"caatag,omitempty"` CaaFlag uint8 `json:"caaflag,omitempty"` DsKeyTag uint16 `json:"dskeytag,omitempty"` DsAlgorithm uint8 `json:"dsalgorithm,omitempty"` DsDigestType uint8 `json:"dsdigesttype,omitempty"` DsDigest string `json:"dsdigest,omitempty"` LocVersion uint8 `json:"locversion,omitempty"` LocSize uint8 `json:"locsize,omitempty"` LocHorizPre uint8 `json:"lochorizpre,omitempty"` LocVertPre uint8 `json:"locvertpre,omitempty"` LocLatitude uint32 `json:"loclatitude,omitempty"` LocLongitude uint32 `json:"loclongitude,omitempty"` LocAltitude uint32 `json:"localtitude,omitempty"` NaptrOrder uint16 `json:"naptrorder,omitempty"` NaptrPreference uint16 `json:"naptrpreference,omitempty"` NaptrFlags string `json:"naptrflags,omitempty"` NaptrService string `json:"naptrservice,omitempty"` NaptrRegexp string `json:"naptrregexp,omitempty"` SshfpAlgorithm uint8 `json:"sshfpalgorithm,omitempty"` SshfpFingerprint uint8 `json:"sshfpfingerprint,omitempty"` SoaMbox string `json:"soambox,omitempty"` SoaSerial uint32 `json:"soaserial,omitempty"` SoaRefresh uint32 `json:"soarefresh,omitempty"` SoaRetry uint32 `json:"soaretry,omitempty"` SoaExpire uint32 `json:"soaexpire,omitempty"` SoaMinttl uint32 `json:"soaminttl,omitempty"` TlsaUsage uint8 `json:"tlsausage,omitempty"` TlsaSelector uint8 `json:"tlsaselector,omitempty"` TlsaMatchingType uint8 `json:"tlsamatchingtype,omitempty"` TxtStrings []string `json:"txtstrings,omitempty"` // TxtStrings stores all strings (including the first). Target stores all the strings joined. R53Alias map[string]string `json:"r53_alias,omitempty"` AzureAlias map[string]string `json:"azure_alias,omitempty"` // contains filtered or unexported fields }
RecordConfig stores a DNS record. Valid types:
Official: (alphabetical) A AAAA ANAME // Technically not an official rtype yet. CAA CNAME LOC MX NAPTR NS PTR SOA SRV SSHFP TLSA TXT Pseudo-Types: (alphabetical) ALIAS CF_REDIRECT CF_TEMP_REDIRECT CF_WORKER_ROUTE CLOUDNS_WR FRAME IMPORT_TRANSFORM NAMESERVER NO_PURGE NS1_URLFWD PAGE_RULE PURGE URL URL301 WORKER_ROUTE
Notes about the fields:
Name:
This is the shortname i.e. the NameFQDN without the origin suffix. It should never have a trailing "." It should never be null. The apex (naked domain) is stored as "@". If the origin is "foo.com." and Name is "foo.com", this means the intended FQDN is "foo.com.foo.com." (which may look odd)
NameFQDN:
This is the FQDN version of Name. It should never have a trailing ".".
NOTE: Eventually we will unexport Name/NameFQDN. Please start using the setters (SetLabel/SetLabelFromFQDN) and getters (GetLabel/GetLabelFQDN). as they will always work.
target:
This is the host or IP address of the record, with the other related parameters (weight, priority, etc.) stored in individual fields.
NOTE: Eventually we will unexport Target. Please start using the setters (SetTarget*) and getters (GetTarget*) as they will always work.
SubDomain:
This is the subdomain path, if any, imported from the configuration. If present at the time of canonicalization it is inserted between the Name and origin when constructing a canonical (FQDN) target.
Idioms:
rec.Label() == "@" // Is this record at the apex?
func RRtoRC ¶
func RRtoRC(rr dns.RR, origin string) (RecordConfig, error)
RRtoRC converts dns.RR to RecordConfig
func (*RecordConfig) Copy ¶
func (rc *RecordConfig) Copy() (*RecordConfig, error)
Copy returns a deep copy of a RecordConfig.
func (*RecordConfig) GetLabel ¶
func (rc *RecordConfig) GetLabel() string
GetLabel returns the shortname of the label associated with this RecordConfig. It will never end with ".". It does not need further shortening (i.e. if it returns "foo.com" and the domain is "foo.com" then the FQDN is actually "foo.com.foo.com"). It will never be "" (the apex is returned as "@").
func (*RecordConfig) GetLabelFQDN ¶
func (rc *RecordConfig) GetLabelFQDN() string
GetLabelFQDN returns the FQDN of the label associated with this RecordConfig. It will not end with ".".
func (*RecordConfig) GetTargetCombined ¶
func (rc *RecordConfig) GetTargetCombined() string
GetTargetCombined returns a string with the various fields combined. For example, an MX record might output `10 mx10.example.tld`.
func (*RecordConfig) GetTargetDebug ¶
func (rc *RecordConfig) GetTargetDebug() string
GetTargetDebug returns a string with the various fields spelled out.
func (*RecordConfig) GetTargetField ¶
func (rc *RecordConfig) GetTargetField() string
GetTargetField returns the target. There may be other fields (for example an MX record also has a .MxPreference field.
func (*RecordConfig) GetTargetIP ¶
func (rc *RecordConfig) GetTargetIP() net.IP
GetTargetIP returns the net.IP stored in .target.
func (*RecordConfig) GetTargetRFC1035Quoted ¶
func (rc *RecordConfig) GetTargetRFC1035Quoted() string
GetTargetRFC1035Quoted returns the target as it would be in an RFC1035-style zonefile. Do not use this function if RecordConfig might be a pseudo-rtype such as R53_ALIAS. Use GetTargetCombined() instead.
func (*RecordConfig) GetTargetSortable ¶
func (rc *RecordConfig) GetTargetSortable() string
GetTargetSortable returns a string that is sortable.
func (*RecordConfig) GetTargetTXTJoined ¶
func (rc *RecordConfig) GetTargetTXTJoined() string
GetTargetTXTJoined returns the TXT target as one string. If it was stored as multiple strings, concatenate them.
func (*RecordConfig) HasFormatIdenticalToTXT ¶
func (rc *RecordConfig) HasFormatIdenticalToTXT() bool
HasFormatIdenticalToTXT returns if a RecordConfig has a format which is identical to TXT, such as SPF. For more details, read https://tools.ietf.org/html/rfc4408#section-3.1.1
func (*RecordConfig) Key ¶
func (rc *RecordConfig) Key() RecordKey
Key converts a RecordConfig into a RecordKey.
func (*RecordConfig) MarshalJSON ¶
func (rc *RecordConfig) MarshalJSON() ([]byte, error)
MarshalJSON marshals RecordConfig.
func (*RecordConfig) PopulateFromString ¶
func (rc *RecordConfig) PopulateFromString(rtype, contents, origin string) error
func (*RecordConfig) SetLOCParams ¶
func (rc *RecordConfig) SetLOCParams(d1 uint8, m1 uint8, s1 float32, ns string, d2 uint8, m2 uint8, s2 float32, ew string, al int32, sz float32, hp float32, vp float32) error
SetLOCParams is an intermediate function which passes the 12 input parameters for further processing to the LOC native 7 input binary format: LocVersion (0), LocLatitude, LocLongitude, LocAltitude, LocSize, LocVertPre, LocHorizPre
func (*RecordConfig) SetLabel ¶
func (rc *RecordConfig) SetLabel(short, origin string)
SetLabel sets the .Name/.NameFQDN fields given a short name and origin. origin must not have a trailing dot: The entire code base maintains dc.Name without the trailig dot. Finding a dot here means something is very wrong.
short must not have a training dot: That would mean you have a FQDN, and shouldn't be using SetLabel(). Maybe SetLabelFromFQDN()?
func (*RecordConfig) SetLabelFromFQDN ¶
func (rc *RecordConfig) SetLabelFromFQDN(fqdn, origin string)
SetLabelFromFQDN sets the .Name/.NameFQDN fields given a FQDN and origin. fqdn may have a trailing "." but it is not required. origin may not have a trailing dot.
func (*RecordConfig) SetTarget ¶
func (rc *RecordConfig) SetTarget(target string) error
SetTarget sets the target, assuming that the rtype is appropriate.
func (*RecordConfig) SetTargetCAA ¶
func (rc *RecordConfig) SetTargetCAA(flag uint8, tag string, target string) error
SetTargetCAA sets the CAA fields.
func (*RecordConfig) SetTargetCAAString ¶
func (rc *RecordConfig) SetTargetCAAString(s string) error
SetTargetCAAString is like SetTargetCAA but accepts one big string. Ex: `0 issue "letsencrypt.org"`
func (*RecordConfig) SetTargetCAAStrings ¶
func (rc *RecordConfig) SetTargetCAAStrings(flag, tag, target string) error
SetTargetCAAStrings is like SetTargetCAA but accepts strings.
func (*RecordConfig) SetTargetDS ¶
func (rc *RecordConfig) SetTargetDS(keytag uint16, algorithm, digesttype uint8, digest string) error
SetTargetDS sets the DS fields.
func (*RecordConfig) SetTargetDSString ¶
func (rc *RecordConfig) SetTargetDSString(s string) error
SetTargetDSString is like SetTargetDS but accepts one big string.
func (*RecordConfig) SetTargetDSStrings ¶
func (rc *RecordConfig) SetTargetDSStrings(keytag, algorithm, digesttype, digest string) error
SetTargetDSStrings is like SetTargetDS but accepts strings.
func (*RecordConfig) SetTargetIP ¶
func (rc *RecordConfig) SetTargetIP(ip net.IP) error
SetTargetIP sets the target to an IP, verifying this is an appropriate rtype.
func (*RecordConfig) SetTargetLOC ¶
func (rc *RecordConfig) SetTargetLOC(ver uint8, lat uint32, lon uint32, alt uint32, siz uint8, hzp uint8, vtp uint8) error
SetTargetLOC sets the LOC fields from the rr.LOC type properties.
func (*RecordConfig) SetTargetLOCString ¶
func (rc *RecordConfig) SetTargetLOCString(origin string, contents string) error
SetTargetLOCString is like SetTargetLOC but accepts one big string and origin Normally this is used when we receive a record string from provider records because e.g. the provider API passed rc.PopulateFromString()
func (*RecordConfig) SetTargetMX ¶
func (rc *RecordConfig) SetTargetMX(pref uint16, target string) error
SetTargetMX sets the MX fields.
func (*RecordConfig) SetTargetMXString ¶
func (rc *RecordConfig) SetTargetMXString(s string) error
SetTargetMXString is like SetTargetMX but accepts one big string.
func (*RecordConfig) SetTargetMXStrings ¶
func (rc *RecordConfig) SetTargetMXStrings(pref, target string) error
SetTargetMXStrings is like SetTargetMX but accepts strings.
func (*RecordConfig) SetTargetNAPTR ¶
func (rc *RecordConfig) SetTargetNAPTR(order uint16, preference uint16, flags string, service string, regexp string, target string) error
SetTargetNAPTR sets the NAPTR fields.
func (*RecordConfig) SetTargetNAPTRString ¶
func (rc *RecordConfig) SetTargetNAPTRString(s string) error
SetTargetNAPTRString is like SetTargetNAPTR but accepts one big string.
func (*RecordConfig) SetTargetNAPTRStrings ¶
func (rc *RecordConfig) SetTargetNAPTRStrings(order, preference, flags string, service string, regexp string, target string) error
SetTargetNAPTRStrings is like SetTargetNAPTR but accepts strings.
func (*RecordConfig) SetTargetSOA ¶
func (rc *RecordConfig) SetTargetSOA(ns, mbox string, serial, refresh, retry, expire, minttl uint32) error
SetTargetSOA sets the SOA fields.
func (*RecordConfig) SetTargetSOAString ¶
func (rc *RecordConfig) SetTargetSOAString(s string) error
SetTargetSOAString is like SetTargetSOA but accepts one big string.
func (*RecordConfig) SetTargetSOAStrings ¶
func (rc *RecordConfig) SetTargetSOAStrings(ns, mbox, serial, refresh, retry, expire, minttl string) error
SetTargetSOAStrings is like SetTargetSOA but accepts strings.
func (*RecordConfig) SetTargetSRV ¶
func (rc *RecordConfig) SetTargetSRV(priority, weight, port uint16, target string) error
SetTargetSRV sets the SRV fields.
func (*RecordConfig) SetTargetSRVPriorityString ¶
func (rc *RecordConfig) SetTargetSRVPriorityString(priority uint16, s string) error
SetTargetSRVPriorityString is like SetTargetSRV but accepts priority as an uint16 and the rest of the values joined in a string that needs to be parsed. This is a helper function that comes in handy when a provider re-uses the MX preference field as the SRV priority.
func (*RecordConfig) SetTargetSRVString ¶
func (rc *RecordConfig) SetTargetSRVString(s string) error
SetTargetSRVString is like SetTargetSRV but accepts one big string to be parsed.
func (*RecordConfig) SetTargetSRVStrings ¶
func (rc *RecordConfig) SetTargetSRVStrings(priority, weight, port, target string) (err error)
SetTargetSRVStrings is like SetTargetSRV but accepts all parameters as strings.
func (*RecordConfig) SetTargetSSHFP ¶
func (rc *RecordConfig) SetTargetSSHFP(algorithm uint8, fingerprint uint8, target string) error
SetTargetSSHFP sets the SSHFP fields.
func (*RecordConfig) SetTargetSSHFPString ¶
func (rc *RecordConfig) SetTargetSSHFPString(s string) error
SetTargetSSHFPString is like SetTargetSSHFP but accepts one big string.
func (*RecordConfig) SetTargetSSHFPStrings ¶
func (rc *RecordConfig) SetTargetSSHFPStrings(algorithm, fingerprint, target string) error
SetTargetSSHFPStrings is like SetTargetSSHFP but accepts strings.
func (*RecordConfig) SetTargetTLSA ¶
func (rc *RecordConfig) SetTargetTLSA(usage, selector, matchingtype uint8, target string) error
SetTargetTLSA sets the TLSA fields.
func (*RecordConfig) SetTargetTLSAString ¶
func (rc *RecordConfig) SetTargetTLSAString(s string) error
SetTargetTLSAString is like SetTargetTLSA but accepts one big string.
func (*RecordConfig) SetTargetTLSAStrings ¶
func (rc *RecordConfig) SetTargetTLSAStrings(usage, selector, matchingtype, target string) (err error)
SetTargetTLSAStrings is like SetTargetTLSA but accepts strings.
func (*RecordConfig) SetTargetTXT ¶
func (rc *RecordConfig) SetTargetTXT(s string) error
SetTargetTXT sets the TXT fields when there is 1 string. The string is stored in .Target, and split into 255-octet chunks for .TxtStrings.
func (*RecordConfig) SetTargetTXTfromRFC1035Quoted ¶
func (rc *RecordConfig) SetTargetTXTfromRFC1035Quoted(s string) error
SetTargetTXTfromRFC1035Quoted parses a series of quoted strings and sets .TxtStrings based on the result. Note: Most APIs do notThis is rarely used. Try using SetTargetTXT() first. Ex:
"foo" << 1 string "foo bar" << 1 string "foo" "bar" << 2 strings foo << error. No quotes! Did you intend to use SetTargetTXT?
func (*RecordConfig) SetTargetTXTs ¶
func (rc *RecordConfig) SetTargetTXTs(s []string) error
SetTargetTXTs sets the TXT fields when there are many strings. The individual strings are stored in .TxtStrings, and joined to make .Target.
func (*RecordConfig) String ¶
func (rc *RecordConfig) String() string
String returns the text representation of the resource record.
func (*RecordConfig) ToComparableNoTTL ¶
func (rc *RecordConfig) ToComparableNoTTL() string
ToComparableNoTTL returns a comparison string. If you need to compare two RecordConfigs, you can simply compare the string returned by this function. The comparison includes all fields except TTL and any provider-specific metafields. Provider-specific metafields like CF_PROXY are not the same as pseudo-records like ANAME or R53_ALIAS This replaces ToDiff()
func (*RecordConfig) ToDiffable ¶
func (rc *RecordConfig) ToDiffable(extraMaps ...map[string]string) string
ToDiffable returns a string that is comparable by a differ. extraMaps: a list of maps that should be included in the comparison. NB(tlim): This will be deprecated when pkg/diff is replaced by pkg/diff2. Use // ToComparableNoTTL() instead.
func (*RecordConfig) ToRR ¶
func (rc *RecordConfig) ToRR() dns.RR
ToRR converts a RecordConfig to a dns.RR.
func (*RecordConfig) UnmarshalJSON ¶
func (rc *RecordConfig) UnmarshalJSON(b []byte) error
UnmarshalJSON unmarshals RecordConfig.
func (*RecordConfig) UnsafeSetLabelNull ¶
func (rc *RecordConfig) UnsafeSetLabelNull()
UnsafeSetLabelNull sets the label to "". Normally the FQDN is denoted by .Name being "@" however this can be used to violate that assertion. It should only be used on copies of a RecordConfig that is being used for non-standard things like Marshalling yaml.
type RecordDB ¶
type RecordDB struct {
// contains filtered or unexported fields
}
RecordDB is a container of many RecordConfig, queryable by various methods. The first to be implemented is as a hash with label:type as the index.
func NewRecordDBFromRecords ¶
NewRecordDBFromRecords creates a RecordDB from a list of RecordConfig.
func (*RecordDB) ContainsLT ¶
func (recdb *RecordDB) ContainsLT(rec *RecordConfig) bool
ContainsLT returns true if recdb contains rec. Matching is done on the record's label and type (i.e. the RecordKey)
type Records ¶
type Records []*RecordConfig
Records is a list of *RecordConfig.
func (Records) FQDNMap ¶
FQDNMap returns a map of all LabelFQDNs. Useful for making a truthtable of labels that exist in Records.
func (Records) GroupedByFQDN ¶
GroupedByFQDN returns a map of keys to records, grouped by FQDN.
func (Records) GroupedByKey ¶
GroupedByKey returns a map of keys to records.
func (Records) GroupedByLabel ¶
GroupedByLabel returns a map of keys to records, and their original key order.
func (Records) HasRecordTypeName ¶
HasRecordTypeName returns True if there is a record with this rtype and name.
type Registrar ¶
type Registrar interface {
GetRegistrarCorrections(dc *DomainConfig) ([]*Correction, error)
}
Registrar is an interface for Registrar plug-ins.
type RegistrarConfig ¶
type RegistrarConfig struct { Name string `json:"name"` Type string `json:"type"` Metadata json.RawMessage `json:"meta,omitempty"` }
RegistrarConfig describes a registrar.
type RegistrarInstance ¶
type RegistrarInstance struct { ProviderBase Driver Registrar }
RegistrarInstance is a single registrar.
type UnmanagedConfig ¶
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 }
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