Enables the behavior described in the statepath flag, where if only
statedir is passed, then state is statedir/tailscaled.state.
Signed-off-by: James Tucker <james@tailscale.com>
flag.StringVar(&args.httpProxyAddr,"outbound-http-proxy-listen","",`optional [ip]:port to run an outbound HTTP proxy (e.g. "localhost:8080")`)
flag.StringVar(&args.httpProxyAddr,"outbound-http-proxy-listen","",`optional [ip]:port to run an outbound HTTP proxy (e.g. "localhost:8080")`)
flag.StringVar(&args.tunname,"tun",defaultTunName(),`tunnel interface name; use "userspace-networking" (beta) to not use TUN`)
flag.StringVar(&args.tunname,"tun",defaultTunName(),`tunnel interface name; use "userspace-networking" (beta) to not use TUN`)
flag.Var(flagtype.PortValue(&args.port,0),"port","UDP port to listen on for WireGuard and peer-to-peer traffic; 0 means automatically select")
flag.Var(flagtype.PortValue(&args.port,0),"port","UDP port to listen on for WireGuard and peer-to-peer traffic; 0 means automatically select")
flag.StringVar(&args.statepath,"state",paths.DefaultTailscaledStateFile(),"absolute path of state file; use 'kube:<secret-name>' to use Kubernetes secrets or 'arn:aws:ssm:...' to store in AWS SSM; use 'mem:' to not store state and register as an emphemeral node. If empty and --statedir is provided, the default is <statedir>/tailscaled.state")
flag.StringVar(&args.statepath,"state","","absolute path of state file; use 'kube:<secret-name>' to use Kubernetes secrets or 'arn:aws:ssm:...' to store in AWS SSM; use 'mem:' to not store state and register as an emphemeral node. If empty and --statedir is provided, the default is <statedir>/tailscaled.state. Default: "+paths.DefaultTailscaledStateFile())
flag.StringVar(&args.statedir,"statedir","","path to directory for storage of config state, TLS certs, temporary incoming Taildrop files, etc. If empty, it's derived from --state when possible.")
flag.StringVar(&args.statedir,"statedir","","path to directory for storage of config state, TLS certs, temporary incoming Taildrop files, etc. If empty, it's derived from --state when possible.")
flag.StringVar(&args.socketpath,"socket",paths.DefaultTailscaledSocket(),"path of the service unix socket")
flag.StringVar(&args.socketpath,"socket",paths.DefaultTailscaledSocket(),"path of the service unix socket")
flag.StringVar(&args.birdSocketPath,"bird-socket","","path of the bird unix socket")
flag.StringVar(&args.birdSocketPath,"bird-socket","","path of the bird unix socket")
@ -187,6 +187,12 @@ func main() {
log.Fatalf("--bird-socket is not supported on %s",runtime.GOOS)
log.Fatalf("--bird-socket is not supported on %s",runtime.GOOS)
}
}
// Only apply a default statepath when neither have been provided, so that a
// user may specify only --statedir if they wish.
ifargs.statepath==""&&args.statedir==""{
args.statepath=paths.DefaultTailscaledStateFile()
}
err:=run()
err:=run()
// Remove file sharing from Windows shell (noop in non-windows)
// Remove file sharing from Windows shell (noop in non-windows)