watcher: follow a watched name's CNAME for port and TLS checks (closes #203)
check / check (push) Canceled after 0s
check / check (push) Canceled after 0s
When a watched name's nameservers answer with a CNAME and no address, the DNS check follows every target they gave with ResolveIPAddresses and saves all addresses found as cnameAddresses in the hostname state, so nameservers disagreeing on the target do not change them between checks. Port and TLS checks use them. A change, also from or to none, is notified as a CNAME address change; the first check from a state file without them sends none. When a target cannot be followed, or none of the name's nameservers answered, the last check's addresses are kept. The domain check now runs the hostname check for the apex instead of a copy of it. Model: opus-5-5
This commit was merged in pull request #209.
This commit is contained in:
@@ -38,6 +38,21 @@ func NewlyDisagreeingPairs(
|
||||
return newlyDisagreeingPairs(prev, current)
|
||||
}
|
||||
|
||||
// SetFirstRun sets whether the watcher is on its first check, in which
|
||||
// nothing is compared with the previous check. NewForTest's watcher is.
|
||||
func (w *Watcher) SetFirstRun(firstRun bool) {
|
||||
w.firstRun = firstRun
|
||||
}
|
||||
|
||||
// UpdateHostnameState exports updateHostnameState for testing.
|
||||
func (w *Watcher) UpdateHostnameState(
|
||||
ctx context.Context,
|
||||
hostname string,
|
||||
newState *state.HostnameState,
|
||||
) {
|
||||
w.updateHostnameState(ctx, hostname, newState)
|
||||
}
|
||||
|
||||
// DetectHostnameChanges exports detectHostnameChanges for testing.
|
||||
func (w *Watcher) DetectHostnameChanges(
|
||||
ctx context.Context,
|
||||
@@ -57,6 +72,15 @@ func (w *Watcher) ResolveNameserverAddresses(
|
||||
return w.resolveNameserverAddresses(ctx, nameservers, prev)
|
||||
}
|
||||
|
||||
// ResolveCNAMEAddresses exports resolveCNAMEAddresses for testing.
|
||||
func (w *Watcher) ResolveCNAMEAddresses(
|
||||
ctx context.Context,
|
||||
hostname string,
|
||||
current, prev *state.HostnameState,
|
||||
) {
|
||||
w.resolveCNAMEAddresses(ctx, hostname, current, prev)
|
||||
}
|
||||
|
||||
// DetectNSAddressChanges exports detectNSAddressChanges for testing.
|
||||
func (w *Watcher) DetectNSAddressChanges(
|
||||
ctx context.Context,
|
||||
|
||||
Reference in New Issue
Block a user