Files
gluetun/internal/publicip/update.go

55 lines
1.3 KiB
Go
Raw Normal View History

package publicip
import (
"fmt"
"os"
"reflect"
"github.com/qdm12/gluetun/internal/configuration/settings"
"github.com/qdm12/gluetun/internal/publicip/api"
)
func (l *Loop) update(partialUpdate settings.PublicIP) (err error) {
l.settingsMutex.Lock()
defer l.settingsMutex.Unlock()
updatedSettings, err := l.settings.UpdateWith(partialUpdate)
if err != nil {
return err
}
if *l.settings.IPFilepath != *updatedSettings.IPFilepath {
switch {
case *l.settings.IPFilepath == "":
err = persistPublicIP(*updatedSettings.IPFilepath,
l.ipData.IP.String(), l.puid, l.pgid)
if err != nil {
return fmt.Errorf("persisting ip data: %w", err)
}
case *updatedSettings.IPFilepath == "":
err = os.Remove(*l.settings.IPFilepath)
if err != nil {
return fmt.Errorf("removing ip data file path: %w", err)
}
default:
err = os.Rename(*l.settings.IPFilepath, *updatedSettings.IPFilepath)
if err != nil {
return fmt.Errorf("renaming ip data file path: %w", err)
}
}
}
if !reflect.DeepEqual(l.settings.APIs, updatedSettings.APIs) {
newFetchers, err := api.New(makeNameTokenPairs(updatedSettings.APIs), l.httpClient)
if err != nil {
return fmt.Errorf("creating fetchers: %w", err)
}
l.fetcher.UpdateFetchers(newFetchers)
}
l.settings = updatedSettings
return nil
}