Documentation ¶
Index ¶
- Constants
- 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
- 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) 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) 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) SetTargetTXTString(s string) errordeprecated
- 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 DefaultTTL = uint32(300)
DefaultTTL is applied to any DNS record without an explicit TTL.
Variables ¶
This section is empty.
Functions ¶
func NameserversToStrings ¶
func NameserversToStrings(nss []*Nameserver) (s []string)
NameserversToStrings constructs a list of strings from *Nameserver structs
func ParseQuotedFields ¶ added in v3.14.0
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.
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) (Records, error) GetDomainCorrections(dc *DomainConfig) ([]*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 "." Tag string `json:"-"` // split horizon tag UniqueName string `json:"-"` // .Name + "!" + .Tag RegistrarName string `json:"registrar"` DNSProviderNames map[string]int `json:"dnsProviders"` 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"` // UNMANAGED() UnmanagedUnsafe bool `json:"unmanaged_disable_safety_check,omitempty"` // DISABLE_UNMANAGED_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 (tecnically 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) Punycode ¶
func (dc *DomainConfig) Punycode() error
Punycode will convert all records to punycode format. It will encode: - Name - NameFQDN - Target (CNAME and MX only)
type IgnoreName ¶ added in v3.22.0
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 ¶ added in v3.3.0
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 ¶ added in v3.3.0
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"` 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 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 ¶ added in v3.17.0
func (rc *RecordConfig) GetTargetRFC1035Quoted() string
GetTargetRFC1035Quoted returns the target as it would be in an RFC1035-style zonefile.
func (*RecordConfig) GetTargetSortable ¶
func (rc *RecordConfig) GetTargetSortable() string
GetTargetSortable returns a string that is sortable.
func (*RecordConfig) GetTargetTXTJoined ¶ added in v3.17.0
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 ¶ added in v3.6.0
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 ¶ added in v3.8.0
func (rc *RecordConfig) MarshalJSON() ([]byte, error)
MarshalJSON marshals RecordConfig.
func (*RecordConfig) PopulateFromString ¶
func (rc *RecordConfig) PopulateFromString(rtype, contents, origin string) error
PopulateFromString populates a RecordConfig given a type and string. Many providers give all the parameters of a resource record in one big string. This helper function lets you not re-invent the wheel.
NOTE: You almost always want to special-case TXT records. Every provider seems to quote them differently.
Recommended calling convention: Process the exceptions first, then use the function for everything else.
var err error switch rType { case "MX": // MX priority in a separate field. if err := rc.SetTargetMX(cr.Priority, target); err != nil { return nil, fmt.Errorf("unparsable MX record received from cloudflare: %w", err) } case "TXT": // TXT records are stored verbatim; no quoting/escaping to parse. err = rc.SetTargetTXT(target) // ProTip: Use rc.SetTargetTXTs(manystrings) if the API or parser returns a list of substrings. default: err = rec.PopulateFromString(rType, target, origin) } if err != nil { return nil, fmt.Errorf("unparsable record received from CHANGE_TO_PROVDER_NAME: %w", err) }
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 ¶ added in v3.2.0
func (rc *RecordConfig) SetTargetDS(keytag uint16, algorithm, digesttype uint8, digest string) error
SetTargetDS sets the DS fields.
func (*RecordConfig) SetTargetDSString ¶ added in v3.2.0
func (rc *RecordConfig) SetTargetDSString(s string) error
SetTargetDSString is like SetTargetDS but accepts one big string.
func (*RecordConfig) SetTargetDSStrings ¶ added in v3.2.0
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) 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) SetTargetTXTString
deprecated
func (rc *RecordConfig) SetTargetTXTString(s string) error
SetTargetTXTString is like SetTargetTXTs but accepts one big string, which is parsed into individual strings. Ex:
foo << 1 string foo bar << 1 string "foo bar" << 1 string "foo" "bar" << 2 strings "f"oo" "bar" << 2 strings, one has a quote in it
BUG: This function doesn't handle escaped quotes ("like \" this").
FIXME(tlim): This function is badly named. It obscures the fact that the string is parsed for quotes and stores a list of strings.
Deprecated: This function has a confusing name. Most providers API return a single string, in which case you should use SetTargetTXT(). If your provider returns multiple strings, use SetTargetTXTs(). If your provider returns a single string that must be parsed to extract the individual strings, use SetTargetTXTfromRFC1035Quoted(). Sadly we have not figured out an integration test that will fail if you chose the wrong function. As a result, we recommend trying SetTargetTXT() before you try SetTargetTXTfromRFC1035Quoted().
func (*RecordConfig) SetTargetTXTfromRFC1035Quoted ¶ added in v3.17.0
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 ¶ added in v3.27.0
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 ¶ added in v3.8.0
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 ¶ added in v3.27.0
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 ¶ added in v3.27.0
NewRecordDBFromRecords creates a RecordDB from a list of RecordConfig.
func (*RecordDB) ContainsLT ¶ added in v3.27.0
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) GetByType ¶ added in v3.12.0
GetByType returns the records that match rtype typeName.
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 ¶ added in v3.24.0
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 UNMANAGED() rule.