models

package
v3.31.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 10, 2023 License: MIT Imports: 14 Imported by: 1

Documentation

Index

Constants

View Source
const (
	DomainUniqueName = "dnscontrol_uniquename"
	DomainTag        = "dnscontrol_tag"
)
View Source
const DefaultTTL = uint32(300)

DefaultTTL is applied to any DNS record without an explicit TTL.

Variables

This section is empty.

Functions

func Downcase added in v3.29.0

func Downcase(recs []*RecordConfig)

Downcase converts all labels and targets to lowercase in a list of RecordConfig.

func IsQuoted

func IsQuoted(s string) bool

IsQuoted returns true if the string starts and ends with a double quote.

func NameserversToStrings

func NameserversToStrings(nss []*Nameserver) (s []string)

NameserversToStrings constructs a list of strings from *Nameserver structs

func ParseQuotedFields added in v3.14.0

func ParseQuotedFields(s string) ([]string, error)

ParseQuotedFields is like strings.Fields except individual fields might be quoted using `"`.

func ParseQuotedTxt

func ParseQuotedTxt(s string) []string

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

func StripQuotes(s string) string

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

type Correction struct {
	F   func() error `json:"-"`
	Msg string
}

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"`                      // 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 (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 added in v3.31.3

func (dc *DomainConfig) GetSplitHorizonNames() (name, uniquename, tag string)

GetSplitHorizonNames returns the domain's name, uniquename, and tag.

func (*DomainConfig) GetUniqueName added in v3.31.3

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 added in v3.31.3

func (dc *DomainConfig) UpdateSplitHorizonNames()

UpdateSplitHorizonNames updates the split horizon fields (uniquename and tag) based on name.

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

type ProviderBase struct {
	Name         string
	IsDefault    bool
	ProviderType string
}

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 added in v3.17.0

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 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) SetLOCParams added in v3.28.0

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 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) SetTargetLOC added in v3.28.0

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 added in v3.28.0

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) 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

func NewRecordDBFromRecords(recs Records, zone string) *RecordDB

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 RecordKey

type RecordKey struct {
	NameFQDN string
	Type     string
}

RecordKey represents a resource record in a format used by some systems.

func (*RecordKey) String added in v3.24.0

func (rk *RecordKey) String() string

type Records

type Records []*RecordConfig

Records is a list of *RecordConfig.

func RRstoRCs

func RRstoRCs(rrs []dns.RR, origin string) (Records, error)

RRstoRCs converts []dns.RR to []RecordConfigs.

func (Records) FQDNMap

func (recs Records) FQDNMap() (m map[string]bool)

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

func (recs Records) GetByType(typeName string) Records

GetByType returns the records that match rtype typeName.

func (Records) GroupedByFQDN

func (recs Records) GroupedByFQDN() ([]string, map[string]Records)

GroupedByFQDN returns a map of keys to records, grouped by FQDN.

func (Records) GroupedByKey

func (recs Records) GroupedByKey() map[RecordKey]Records

GroupedByKey returns a map of keys to records.

func (Records) GroupedByLabel

func (recs Records) GroupedByLabel() ([]string, map[string]Records)

GroupedByLabel returns a map of keys to records, and their original key order.

func (Records) HasRecordTypeName

func (recs Records) HasRecordTypeName(rtype, name string) bool

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL