|
|
|
@ -401,19 +401,20 @@ func watchServeConfigChanges(ctx context.Context, path string, cdChanged <-chan
|
|
|
|
|
panic("cd must not be nil")
|
|
|
|
|
}
|
|
|
|
|
var tickChan <-chan time.Time
|
|
|
|
|
w, err := fsnotify.NewWatcher()
|
|
|
|
|
if err != nil {
|
|
|
|
|
var eventChan <-chan fsnotify.Event
|
|
|
|
|
if w, err := fsnotify.NewWatcher(); err != nil {
|
|
|
|
|
log.Printf("failed to create fsnotify watcher, timer-only mode: %v", err)
|
|
|
|
|
ticker := time.NewTicker(5 * time.Second)
|
|
|
|
|
defer ticker.Stop()
|
|
|
|
|
tickChan = ticker.C
|
|
|
|
|
} else {
|
|
|
|
|
defer w.Close()
|
|
|
|
|
if err := w.Add(filepath.Dir(path)); err != nil {
|
|
|
|
|
log.Fatalf("failed to add fsnotify watch: %v", err)
|
|
|
|
|
}
|
|
|
|
|
eventChan = w.Events
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := w.Add(filepath.Dir(path)); err != nil {
|
|
|
|
|
log.Fatalf("failed to add fsnotify watch: %v", err)
|
|
|
|
|
}
|
|
|
|
|
var certDomain string
|
|
|
|
|
var prevServeConfig *ipn.ServeConfig
|
|
|
|
|
for {
|
|
|
|
@ -423,7 +424,7 @@ func watchServeConfigChanges(ctx context.Context, path string, cdChanged <-chan
|
|
|
|
|
case <-cdChanged:
|
|
|
|
|
certDomain = *certDomainAtomic.Load()
|
|
|
|
|
case <-tickChan:
|
|
|
|
|
case <-w.Events:
|
|
|
|
|
case <-eventChan:
|
|
|
|
|
// We can't do any reasonable filtering on the event because of how
|
|
|
|
|
// k8s handles these mounts. So just re-read the file and apply it
|
|
|
|
|
// if it's changed.
|
|
|
|
|