diff options
author | Matthew Holt <[email protected]> | 2021-03-30 14:15:20 -0600 |
---|---|---|
committer | Matthew Holt <[email protected]> | 2021-03-30 14:15:20 -0600 |
commit | aac1ccf12d0076ce7ae2b67ed9cbdf55dc99e14e (patch) | |
tree | 5ea606d8e769dcd70df1491deb063ea811497381 /caddy.go | |
parent | f35a7fa466ffb06c38dcb3216e30c13aa8e14ce5 (diff) | |
download | caddy-aac1ccf12d0076ce7ae2b67ed9cbdf55dc99e14e.tar.gz caddy-aac1ccf12d0076ce7ae2b67ed9cbdf55dc99e14e.zip |
caddy: Add InstanceID() method
Caddy can now generate and persist its own instance ID, a UUID that is stored in
the data directory.
This makes it possible to differentiate it from other instances in a cluster.
Diffstat (limited to 'caddy.go')
-rw-r--r-- | caddy.go | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -33,6 +33,7 @@ import ( "time" "github.com/caddyserver/certmagic" + "github.com/google/uuid" "go.uber.org/zap" ) @@ -662,6 +663,26 @@ func ParseDuration(s string) (time.Duration, error) { return time.ParseDuration(s) } +// InstanceID returns the UUID for this instance, and generates one if it +// does not already exist. The UUID is stored in the local data directory, +// regardless of storage configuration, since each instance is intended to +// have its own unique ID. +func InstanceID() (uuid.UUID, error) { + uuidFilePath := filepath.Join(AppDataDir(), "instance.uuid") + uuidFileBytes, err := os.ReadFile(uuidFilePath) + if os.IsNotExist(err) { + uuid, err := uuid.NewRandom() + if err != nil { + return uuid, err + } + err = ioutil.WriteFile(uuidFilePath, []byte(uuid.String()), 0644) + return uuid, err + } else if err != nil { + return [16]byte{}, err + } + return uuid.ParseBytes(uuidFileBytes) +} + // GoModule returns the build info of this Caddy // build from debug.BuildInfo (requires Go modules). // If no version information is available, a non-nil |