mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Merge branch 'main' into reverse-proxy
This commit is contained in:
		
						commit
						e6e5872b4b
					
				| @ -2,12 +2,19 @@ | ||||
| 
 | ||||
| ## 0.17.0 (2022-XX-XX) | ||||
| 
 | ||||
| ### BREAKING | ||||
| 
 | ||||
| - Log level option `log_level` was moved to a distinct `log` config section and renamed to `level` [#768](https://github.com/juanfont/headscale/pull/768) | ||||
| 
 | ||||
| ### Changes | ||||
| 
 | ||||
| - Added support for Tailscale TS2021 protocol [#738](https://github.com/juanfont/headscale/pull/738) | ||||
| - Add ability to specify config location via env var `HEADSCALE_CONFIG` [#674](https://github.com/juanfont/headscale/issues/674) | ||||
| - Target Go 1.19 for Headscale [#778](https://github.com/juanfont/headscale/pull/778) | ||||
| - Target Tailscale v1.30.0 to build Headscale [#780](https://github.com/juanfont/headscale/pull/780) | ||||
| - Give a warning when running Headscale with reverse proxy improperly configured for WebSockets [#788](https://github.com/juanfont/headscale/pull/788) | ||||
| - Fix subnet routers with Primary Routes [#811](https://github.com/juanfont/headscale/pull/811) | ||||
| - Added support for JSON logs [#653](https://github.com/juanfont/headscale/issues/653) | ||||
| 
 | ||||
| ## 0.16.4 (2022-08-21) | ||||
| 
 | ||||
|  | ||||
| @ -47,7 +47,7 @@ func initConfig() { | ||||
| 
 | ||||
| 	machineOutput := HasMachineOutputFlag() | ||||
| 
 | ||||
| 	zerolog.SetGlobalLevel(cfg.LogLevel) | ||||
| 	zerolog.SetGlobalLevel(cfg.Log.Level) | ||||
| 
 | ||||
| 	// If the user has requested a "machine" readable format,
 | ||||
| 	// then disable login so the output remains valid.
 | ||||
| @ -55,6 +55,10 @@ func initConfig() { | ||||
| 		zerolog.SetGlobalLevel(zerolog.Disabled) | ||||
| 	} | ||||
| 
 | ||||
| 	if cfg.Log.Format == headscale.JSONLogFormat { | ||||
| 		log.Logger = log.Output(os.Stdout) | ||||
| 	} | ||||
| 
 | ||||
| 	if !cfg.DisableUpdateCheck && !machineOutput { | ||||
| 		if (runtime.GOOS == "linux" || runtime.GOOS == "darwin") && | ||||
| 			Version != "dev" { | ||||
|  | ||||
| @ -172,7 +172,10 @@ tls_letsencrypt_listen: ":http" | ||||
| tls_cert_path: "" | ||||
| tls_key_path: "" | ||||
| 
 | ||||
| log_level: info | ||||
| log: | ||||
|   # Output formatting for logs: text or json | ||||
|   format: text | ||||
|   level: info | ||||
| 
 | ||||
| # Path to a file containg ACL policies. | ||||
| # ACLs can be defined as YAML or HUJSON. | ||||
|  | ||||
							
								
								
									
										50
									
								
								config.go
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								config.go
									
									
									
									
									
								
							| @ -22,6 +22,9 @@ import ( | ||||
| const ( | ||||
| 	tlsALPN01ChallengeType = "TLS-ALPN-01" | ||||
| 	http01ChallengeType    = "HTTP-01" | ||||
| 
 | ||||
| 	JSONLogFormat = "json" | ||||
| 	TextLogFormat = "text" | ||||
| ) | ||||
| 
 | ||||
| // Config contains the initial Headscale configuration.
 | ||||
| @ -37,7 +40,7 @@ type Config struct { | ||||
| 	PrivateKeyPath                 string | ||||
| 	NoisePrivateKeyPath            string | ||||
| 	BaseDomain                     string | ||||
| 	LogLevel                       zerolog.Level | ||||
| 	Log                            LogConfig | ||||
| 	DisableUpdateCheck             bool | ||||
| 
 | ||||
| 	DERP DERPConfig | ||||
| @ -124,6 +127,11 @@ type ACLConfig struct { | ||||
| 	PolicyPath string | ||||
| } | ||||
| 
 | ||||
| type LogConfig struct { | ||||
| 	Format string | ||||
| 	Level  zerolog.Level | ||||
| } | ||||
| 
 | ||||
| func LoadConfig(path string, isFile bool) error { | ||||
| 	if isFile { | ||||
| 		viper.SetConfigFile(path) | ||||
| @ -147,7 +155,8 @@ func LoadConfig(path string, isFile bool) error { | ||||
| 	viper.SetDefault("tls_letsencrypt_challenge_type", http01ChallengeType) | ||||
| 	viper.SetDefault("tls_client_auth_mode", "relaxed") | ||||
| 
 | ||||
| 	viper.SetDefault("log_level", "info") | ||||
| 	viper.SetDefault("log.level", "info") | ||||
| 	viper.SetDefault("log.format", TextLogFormat) | ||||
| 
 | ||||
| 	viper.SetDefault("dns_config", nil) | ||||
| 
 | ||||
| @ -334,6 +343,34 @@ func GetACLConfig() ACLConfig { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func GetLogConfig() LogConfig { | ||||
| 	logLevelStr := viper.GetString("log.level") | ||||
| 	logLevel, err := zerolog.ParseLevel(logLevelStr) | ||||
| 	if err != nil { | ||||
| 		logLevel = zerolog.DebugLevel | ||||
| 	} | ||||
| 
 | ||||
| 	logFormatOpt := viper.GetString("log.format") | ||||
| 	var logFormat string | ||||
| 	switch logFormatOpt { | ||||
| 	case "json": | ||||
| 		logFormat = JSONLogFormat | ||||
| 	case "text": | ||||
| 		logFormat = TextLogFormat | ||||
| 	case "": | ||||
| 		logFormat = TextLogFormat | ||||
| 	default: | ||||
| 		log.Error(). | ||||
| 			Str("func", "GetLogConfig"). | ||||
| 			Msgf("Could not parse log format: %s. Valid choices are 'json' or 'text'", logFormatOpt) | ||||
| 	} | ||||
| 
 | ||||
| 	return LogConfig{ | ||||
| 		Format: logFormat, | ||||
| 		Level:  logLevel, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func GetDNSConfig() (*tailcfg.DNSConfig, string) { | ||||
| 	if viper.IsSet("dns_config") { | ||||
| 		dnsConfig := &tailcfg.DNSConfig{} | ||||
| @ -430,12 +467,6 @@ func GetHeadscaleConfig() (*Config, error) { | ||||
| 	configuredPrefixes := viper.GetStringSlice("ip_prefixes") | ||||
| 	parsedPrefixes := make([]netip.Prefix, 0, len(configuredPrefixes)+1) | ||||
| 
 | ||||
| 	logLevelStr := viper.GetString("log_level") | ||||
| 	logLevel, err := zerolog.ParseLevel(logLevelStr) | ||||
| 	if err != nil { | ||||
| 		logLevel = zerolog.DebugLevel | ||||
| 	} | ||||
| 
 | ||||
| 	legacyPrefixField := viper.GetString("ip_prefix") | ||||
| 	if len(legacyPrefixField) > 0 { | ||||
| 		log. | ||||
| @ -488,7 +519,6 @@ func GetHeadscaleConfig() (*Config, error) { | ||||
| 		GRPCAddr:           viper.GetString("grpc_listen_addr"), | ||||
| 		GRPCAllowInsecure:  viper.GetBool("grpc_allow_insecure"), | ||||
| 		DisableUpdateCheck: viper.GetBool("disable_check_updates"), | ||||
| 		LogLevel:           logLevel, | ||||
| 
 | ||||
| 		IPPrefixes: prefixes, | ||||
| 		PrivateKeyPath: AbsolutePathFromConfigPath( | ||||
| @ -550,5 +580,7 @@ func GetHeadscaleConfig() (*Config, error) { | ||||
| 		}, | ||||
| 
 | ||||
| 		ACL: GetACLConfig(), | ||||
| 
 | ||||
| 		Log: GetLogConfig(), | ||||
| 	}, nil | ||||
| } | ||||
|  | ||||
| @ -28,7 +28,9 @@ ip_prefixes: | ||||
|   - fd7a:115c:a1e0::/48 | ||||
|   - 100.64.0.0/10 | ||||
| listen_addr: 0.0.0.0:18080 | ||||
| log_level: disabled | ||||
| log: | ||||
|   level: disabled | ||||
|   format: text | ||||
| logtail: | ||||
|   enabled: false | ||||
| metrics_listen_addr: 127.0.0.1:19090 | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| log_level: trace | ||||
| log: | ||||
|   level: trace | ||||
| acl_policy_path: "" | ||||
| db_type: sqlite3 | ||||
| ephemeral_node_inactivity_timeout: 30m | ||||
|  | ||||
| @ -27,7 +27,9 @@ ip_prefixes: | ||||
|   - fd7a:115c:a1e0::/48 | ||||
|   - 100.64.0.0/10 | ||||
| listen_addr: 0.0.0.0:18080 | ||||
| log_level: disabled | ||||
| log: | ||||
|   level: disabled | ||||
|   format: text | ||||
| logtail: | ||||
|   enabled: false | ||||
| metrics_listen_addr: 127.0.0.1:19090 | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| log_level: trace | ||||
| log: | ||||
|   level: trace | ||||
| acl_policy_path: "" | ||||
| db_type: sqlite3 | ||||
| ephemeral_node_inactivity_timeout: 30m | ||||
|  | ||||
| @ -28,7 +28,9 @@ ip_prefixes: | ||||
|   - fd7a:115c:a1e0::/48 | ||||
|   - 100.64.0.0/10 | ||||
| listen_addr: 0.0.0.0:8080 | ||||
| log_level: disabled | ||||
| log: | ||||
|   format: text | ||||
|   level: disabled | ||||
| logtail: | ||||
|   enabled: false | ||||
| metrics_listen_addr: 127.0.0.1:9090 | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| log_level: trace | ||||
| log: | ||||
|   level: trace | ||||
| acl_policy_path: "" | ||||
| db_type: sqlite3 | ||||
| ephemeral_node_inactivity_timeout: 30m | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user