mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-31 16:11:03 +01:00 
			
		
		
		
	Make tailnet updates check configurable
This commit is contained in:
		
							parent
							
								
									e0b15c18ce
								
							
						
					
					
						commit
						cf3fc85196
					
				| @ -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 changes 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 on time. | ||||||
|  | # In case of doubts, do not touch the default 10s. | ||||||
|  | changes_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 | ||||||
|  | 	ChangesCheckInterval           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("changes_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 { | |||||||
| 		) | 		) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	maxChangesCheckInterval, _ := time.ParseDuration("60s") | ||||||
|  | 	if viper.GetDuration("changes_check_interval") > maxChangesCheckInterval { | ||||||
|  | 		errorText += fmt.Sprintf( | ||||||
|  | 			"Fatal config error: changes_check_interval (%s) is set too high, must be less than %s", | ||||||
|  | 			viper.GetString("changes_check_interval"), | ||||||
|  | 			maxChangesCheckInterval, | ||||||
|  | 		) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	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", | ||||||
| 		), | 		), | ||||||
| 
 | 
 | ||||||
|  | 		ChangesCheckInterval: viper.GetDuration( | ||||||
|  | 			"changes_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"), | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								poll.go
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								poll.go
									
									
									
									
									
								
							| @ -16,8 +16,7 @@ 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.ChangesCheckInterval) | ||||||
| 
 | 
 | ||||||
| 	defer closeChanWithLog( | 	defer closeChanWithLog( | ||||||
| 		updateChan, | 		updateChan, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user