Documentation
¶
Index ¶
- Variables
- func IsManagedRecord(record string, managedRecords, excludeRecords []string) bool
- type Changes
- type ConflictResolver
- type CreateOnlyPolicy
- type PerResource
- func (s PerResource) ResolveCreate(candidates []*endpoint.Endpoint) *endpoint.Endpoint
- func (s PerResource) ResolveRecordTypes(key planKey, row *planTableRow) map[string]*domainEndpoints
- func (s PerResource) ResolveUpdate(current *endpoint.Endpoint, candidates []*endpoint.Endpoint) *endpoint.Endpoint
- type Plan
- type Policy
- type PropertyComparator
- type SyncPolicy
- type UpsertOnlyPolicy
Constants ¶
This section is empty.
Variables ¶
var Policies = map[string]Policy{
"sync": &SyncPolicy{},
"upsert-only": &UpsertOnlyPolicy{},
"create-only": &CreateOnlyPolicy{},
}
Policies is a registry of available policies.
Functions ¶
func IsManagedRecord ¶
func IsManagedRecord(record string, managedRecords, excludeRecords []string) bool
Types ¶
type Changes ¶
type Changes struct {
// Records that need to be created
Create []*endpoint.Endpoint
// Records that need to be updated (current data)
UpdateOld []*endpoint.Endpoint
// Records that need to be updated (desired data)
UpdateNew []*endpoint.Endpoint
// Records that need to be deleted
Delete []*endpoint.Endpoint
}
Changes holds lists of actions to be executed by dns providers
func (*Changes) HasChanges ¶
func (c *Changes) HasChanges() bool
type ConflictResolver ¶
type ConflictResolver interface {
ResolveCreate(candidates []*endpoint.Endpoint) *endpoint.Endpoint
ResolveUpdate(current *endpoint.Endpoint, candidates []*endpoint.Endpoint) *endpoint.Endpoint
ResolveRecordTypes(key planKey, row *planTableRow) map[string]*domainEndpoints
}
ConflictResolver is used to make a decision in case of two or more different kubernetes resources are trying to acquire same DNS name
type CreateOnlyPolicy ¶
type CreateOnlyPolicy struct{}
CreateOnlyPolicy allows only creating DNS records.
type PerResource ¶
type PerResource struct{}
PerResource allows only one resource to own a given dns name
func (PerResource) ResolveCreate ¶
func (s PerResource) ResolveCreate(candidates []*endpoint.Endpoint) *endpoint.Endpoint
ResolveCreate is invoked when dns name is not owned by any resource ResolveCreate takes "minimal" (string comparison of Target) endpoint to acquire the DNS record
func (PerResource) ResolveRecordTypes ¶
func (s PerResource) ResolveRecordTypes(key planKey, row *planTableRow) map[string]*domainEndpoints
ResolveRecordTypes attempts to detect and resolve record type conflicts in desired endpoints for a domain. For eample if the there is more than 1 candidate and at lease one of them is a CNAME. Per RFC 1034 3.6.2 domains that contain a CNAME can not contain any other record types. The default policy will prefer A and AAAA record types when a conflict is detected (consistent with endpoint.Targets.Less).
func (PerResource) ResolveUpdate ¶
func (s PerResource) ResolveUpdate(current *endpoint.Endpoint, candidates []*endpoint.Endpoint) *endpoint.Endpoint
ResolveUpdate is invoked when dns name is already owned by "current" endpoint ResolveUpdate uses "current" record as base and updates it accordingly with new version of same resource if it doesn't exist then pick min
type Plan ¶
type Plan struct {
// List of current records
Current []*endpoint.Endpoint
// List of desired records
Desired []*endpoint.Endpoint
// Policies under which the desired changes are calculated
Policies []Policy
// List of changes necessary to move towards desired state
// Populated after calling Calculate()
Changes *Changes
// DomainFilter matches DNS names
DomainFilter endpoint.MatchAllDomainFilters
// ManagedRecords are DNS record types that will be considered for management.
ManagedRecords []string
// ExcludeRecords are DNS record types that will be excluded from management.
ExcludeRecords []string
// OwnerID of records to manage
OwnerID string
}
Plan can convert a list of desired and current records to a series of create, update and delete actions.
type Policy ¶
type Policy interface {
Apply(changes *Changes) *Changes
}
Policy allows to apply different rules to a set of changes.
type PropertyComparator ¶
type PropertyComparator func(name string, previous string, current string) bool
PropertyComparator is used in Plan for comparing the previous and current custom annotations.
type SyncPolicy ¶
type SyncPolicy struct{}
SyncPolicy allows for full synchronization of DNS records.
type UpsertOnlyPolicy ¶
type UpsertOnlyPolicy struct{}
UpsertOnlyPolicy allows everything but deleting DNS records.