mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-22 02:50:42 +00:00
cmd/natc: allow specifying the tsnet state dir
Which can make operating the service more convenient. It makes sense to put the cluster state with this if specified, so rearrange the logic to handle that. Updates #14667 Signed-off-by: Fran Bull <fran@tailscale.com>
This commit is contained in:
@@ -10,8 +10,6 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/netip"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/raft"
|
||||
@@ -155,11 +153,7 @@ func (ipp *ConsensusIPPool) domainLookup(from tailcfg.NodeID, addr netip.Addr) (
|
||||
func (ipp *ConsensusIPPool) StartConsensus(ctx context.Context, ts *tsnet.Server, clusterTag string, clusterStateDir string) error {
|
||||
cfg := tsconsensus.DefaultConfig()
|
||||
cfg.ServeDebugMonitor = true
|
||||
var err error
|
||||
cfg.StateDirPath, err = getStatePath(clusterStateDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cfg.StateDirPath = clusterStateDir
|
||||
cns, err := tsconsensus.Start(ctx, ts, ipp, clusterTag, cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -211,30 +205,6 @@ func (ps *consensusPerPeerState) unusedIPV4(ipset *netipx.IPSet, reuseDeadline t
|
||||
return netip.Addr{}, false, "", errors.New("ip pool exhausted")
|
||||
}
|
||||
|
||||
func getStatePath(pathFromFlag string) (string, error) {
|
||||
var dirPath string
|
||||
if pathFromFlag != "" {
|
||||
dirPath = pathFromFlag
|
||||
} else {
|
||||
confDir, err := os.UserConfigDir()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
dirPath = filepath.Join(confDir, "nat-connector-cluster-state")
|
||||
}
|
||||
|
||||
if err := os.MkdirAll(dirPath, 0700); err != nil {
|
||||
return "", err
|
||||
}
|
||||
if fi, err := os.Stat(dirPath); err != nil {
|
||||
return "", err
|
||||
} else if !fi.IsDir() {
|
||||
return "", fmt.Errorf("%v is not a directory", dirPath)
|
||||
}
|
||||
|
||||
return dirPath, nil
|
||||
}
|
||||
|
||||
// isCloseToExpiry returns true if the lastUsed and now times are more than
|
||||
// half the lifetime apart
|
||||
func isCloseToExpiry(lastUsed, now time.Time, lifetime time.Duration) bool {
|
||||
|
Reference in New Issue
Block a user