mirror of
https://github.com/juanfont/headscale.git
synced 2024-12-02 03:33:05 +00:00
Merge pull request #675 from juanfont/configurable-update-interval
Make tailnet updates check interval configurable
This commit is contained in:
commit
c50d3aa9bd
9 changed files with 30 additions and 5 deletions
|
@ -30,11 +30,10 @@
|
||||||
- Add -c option to specify config file from command line [#285](https://github.com/juanfont/headscale/issues/285) [#612](https://github.com/juanfont/headscale/pull/601)
|
- Add -c option to specify config file from command line [#285](https://github.com/juanfont/headscale/issues/285) [#612](https://github.com/juanfont/headscale/pull/601)
|
||||||
- Add configuration option to allow Tailscale clients to use a random WireGuard port. [kb/1181/firewalls](https://tailscale.com/kb/1181/firewalls) [#624](https://github.com/juanfont/headscale/pull/624)
|
- Add configuration option to allow Tailscale clients to use a random WireGuard port. [kb/1181/firewalls](https://tailscale.com/kb/1181/firewalls) [#624](https://github.com/juanfont/headscale/pull/624)
|
||||||
- Improve obtuse UX regarding missing configuration (`ephemeral_node_inactivity_timeout` not set) [#639](https://github.com/juanfont/headscale/pull/639)
|
- Improve obtuse UX regarding missing configuration (`ephemeral_node_inactivity_timeout` not set) [#639](https://github.com/juanfont/headscale/pull/639)
|
||||||
- Fix nodes being shown as 'offline' in `tailscale status` [648](https://github.com/juanfont/headscale/pull/648)
|
|
||||||
- Fix nodes being shown as 'offline' in `tailscale status` [#648](https://github.com/juanfont/headscale/pull/648)
|
- Fix nodes being shown as 'offline' in `tailscale status` [#648](https://github.com/juanfont/headscale/pull/648)
|
||||||
- Improve shutdown behaviour [#651](https://github.com/juanfont/headscale/pull/651)
|
- Improve shutdown behaviour [#651](https://github.com/juanfont/headscale/pull/651)
|
||||||
- Drop Gin as web framework in Headscale [648](https://github.com/juanfont/headscale/pull/648)
|
- Drop Gin as web framework in Headscale [648](https://github.com/juanfont/headscale/pull/648)
|
||||||
|
- Make tailnet node updates check interval configurable [#675](https://github.com/juanfont/headscale/pull/675)
|
||||||
|
|
||||||
## 0.15.0 (2022-03-20)
|
## 0.15.0 (2022-03-20)
|
||||||
|
|
||||||
|
|
|
@ -103,6 +103,12 @@ disable_check_updates: false
|
||||||
# Time before an inactive ephemeral node is deleted?
|
# Time before an inactive ephemeral node is deleted?
|
||||||
ephemeral_node_inactivity_timeout: 30m
|
ephemeral_node_inactivity_timeout: 30m
|
||||||
|
|
||||||
|
# Period to check for node updates in the tailnet. A value too low will severily affect
|
||||||
|
# CPU consumption of Headscale. A value too high (over 60s) will cause problems
|
||||||
|
# to the nodes, as they won't get updates or keep alive messages in time.
|
||||||
|
# In case of doubts, do not touch the default 10s.
|
||||||
|
node_update_check_interval: 10s
|
||||||
|
|
||||||
# SQLite config
|
# SQLite config
|
||||||
db_type: sqlite3
|
db_type: sqlite3
|
||||||
db_path: /var/lib/headscale/db.sqlite
|
db_path: /var/lib/headscale/db.sqlite
|
||||||
|
|
16
config.go
16
config.go
|
@ -26,6 +26,7 @@ type Config struct {
|
||||||
GRPCAddr string
|
GRPCAddr string
|
||||||
GRPCAllowInsecure bool
|
GRPCAllowInsecure bool
|
||||||
EphemeralNodeInactivityTimeout time.Duration
|
EphemeralNodeInactivityTimeout time.Duration
|
||||||
|
NodeUpdateCheckInterval time.Duration
|
||||||
IPPrefixes []netaddr.IPPrefix
|
IPPrefixes []netaddr.IPPrefix
|
||||||
PrivateKeyPath string
|
PrivateKeyPath string
|
||||||
BaseDomain string
|
BaseDomain string
|
||||||
|
@ -162,6 +163,8 @@ func LoadConfig(path string, isFile bool) error {
|
||||||
|
|
||||||
viper.SetDefault("ephemeral_node_inactivity_timeout", "120s")
|
viper.SetDefault("ephemeral_node_inactivity_timeout", "120s")
|
||||||
|
|
||||||
|
viper.SetDefault("node_update_check_interval", "10s")
|
||||||
|
|
||||||
if err := viper.ReadInConfig(); err != nil {
|
if err := viper.ReadInConfig(); err != nil {
|
||||||
log.Warn().Err(err).Msg("Failed to read configuration from disk")
|
log.Warn().Err(err).Msg("Failed to read configuration from disk")
|
||||||
|
|
||||||
|
@ -217,6 +220,15 @@ func LoadConfig(path string, isFile bool) error {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maxNodeUpdateCheckInterval, _ := time.ParseDuration("60s")
|
||||||
|
if viper.GetDuration("node_update_check_interval") > maxNodeUpdateCheckInterval {
|
||||||
|
errorText += fmt.Sprintf(
|
||||||
|
"Fatal config error: node_update_check_interval (%s) is set too high, must be less than %s",
|
||||||
|
viper.GetString("node_update_check_interval"),
|
||||||
|
maxNodeUpdateCheckInterval,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
if errorText != "" {
|
if errorText != "" {
|
||||||
//nolint
|
//nolint
|
||||||
return errors.New(strings.TrimSuffix(errorText, "\n"))
|
return errors.New(strings.TrimSuffix(errorText, "\n"))
|
||||||
|
@ -478,6 +490,10 @@ func GetHeadscaleConfig() (*Config, error) {
|
||||||
"ephemeral_node_inactivity_timeout",
|
"ephemeral_node_inactivity_timeout",
|
||||||
),
|
),
|
||||||
|
|
||||||
|
NodeUpdateCheckInterval: viper.GetDuration(
|
||||||
|
"node_update_check_interval",
|
||||||
|
),
|
||||||
|
|
||||||
DBtype: viper.GetString("db_type"),
|
DBtype: viper.GetString("db_type"),
|
||||||
DBpath: AbsolutePathFromConfigPath(viper.GetString("db_path")),
|
DBpath: AbsolutePathFromConfigPath(viper.GetString("db_path")),
|
||||||
DBhost: viper.GetString("db_host"),
|
DBhost: viper.GetString("db_host"),
|
||||||
|
|
|
@ -20,6 +20,7 @@ dns_config:
|
||||||
nameservers:
|
nameservers:
|
||||||
- 1.1.1.1
|
- 1.1.1.1
|
||||||
ephemeral_node_inactivity_timeout: 30m
|
ephemeral_node_inactivity_timeout: 30m
|
||||||
|
node_update_check_interval: 10s
|
||||||
grpc_allow_insecure: false
|
grpc_allow_insecure: false
|
||||||
grpc_listen_addr: :50443
|
grpc_listen_addr: :50443
|
||||||
ip_prefixes:
|
ip_prefixes:
|
||||||
|
|
|
@ -2,6 +2,7 @@ log_level: trace
|
||||||
acl_policy_path: ""
|
acl_policy_path: ""
|
||||||
db_type: sqlite3
|
db_type: sqlite3
|
||||||
ephemeral_node_inactivity_timeout: 30m
|
ephemeral_node_inactivity_timeout: 30m
|
||||||
|
node_update_check_interval: 10s
|
||||||
ip_prefixes:
|
ip_prefixes:
|
||||||
- fd7a:115c:a1e0::/48
|
- fd7a:115c:a1e0::/48
|
||||||
- 100.64.0.0/10
|
- 100.64.0.0/10
|
||||||
|
|
|
@ -20,6 +20,7 @@ dns_config:
|
||||||
nameservers:
|
nameservers:
|
||||||
- 1.1.1.1
|
- 1.1.1.1
|
||||||
ephemeral_node_inactivity_timeout: 30m
|
ephemeral_node_inactivity_timeout: 30m
|
||||||
|
node_update_check_interval: 10s
|
||||||
grpc_allow_insecure: false
|
grpc_allow_insecure: false
|
||||||
grpc_listen_addr: :50443
|
grpc_listen_addr: :50443
|
||||||
ip_prefixes:
|
ip_prefixes:
|
||||||
|
|
|
@ -2,6 +2,7 @@ log_level: trace
|
||||||
acl_policy_path: ""
|
acl_policy_path: ""
|
||||||
db_type: sqlite3
|
db_type: sqlite3
|
||||||
ephemeral_node_inactivity_timeout: 30m
|
ephemeral_node_inactivity_timeout: 30m
|
||||||
|
node_update_check_interval: 10s
|
||||||
ip_prefixes:
|
ip_prefixes:
|
||||||
- fd7a:115c:a1e0::/48
|
- fd7a:115c:a1e0::/48
|
||||||
- 100.64.0.0/10
|
- 100.64.0.0/10
|
||||||
|
|
|
@ -2,6 +2,7 @@ log_level: trace
|
||||||
acl_policy_path: ""
|
acl_policy_path: ""
|
||||||
db_type: sqlite3
|
db_type: sqlite3
|
||||||
ephemeral_node_inactivity_timeout: 30m
|
ephemeral_node_inactivity_timeout: 30m
|
||||||
|
node_update_check_interval: 10s
|
||||||
ip_prefixes:
|
ip_prefixes:
|
||||||
- fd7a:115c:a1e0::/48
|
- fd7a:115c:a1e0::/48
|
||||||
- 100.64.0.0/10
|
- 100.64.0.0/10
|
||||||
|
|
3
poll.go
3
poll.go
|
@ -17,7 +17,6 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
keepAliveInterval = 60 * time.Second
|
keepAliveInterval = 60 * time.Second
|
||||||
updateCheckInterval = 10 * time.Second
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type contextKey string
|
type contextKey string
|
||||||
|
@ -640,7 +639,7 @@ func (h *Headscale) scheduledPollWorker(
|
||||||
machine *Machine,
|
machine *Machine,
|
||||||
) {
|
) {
|
||||||
keepAliveTicker := time.NewTicker(keepAliveInterval)
|
keepAliveTicker := time.NewTicker(keepAliveInterval)
|
||||||
updateCheckerTicker := time.NewTicker(updateCheckInterval)
|
updateCheckerTicker := time.NewTicker(h.cfg.NodeUpdateCheckInterval)
|
||||||
|
|
||||||
defer closeChanWithLog(
|
defer closeChanWithLog(
|
||||||
updateChan,
|
updateChan,
|
||||||
|
|
Loading…
Reference in a new issue