From 863a4369153bf1787ff65ac2d4ba2dcf507838aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Thu, 19 Dec 2019 16:57:22 +0100 Subject: [PATCH] don't write secret-data if not needed --- Dockerfile | 2 +- cmd/dkl-local-server/secrets.go | 27 ++++++++++++++++++++++----- go.mod | 1 + go.sum | 4 ++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index ccde4ef..d2f971d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # ------------------------------------------------------------------------ -from mcluseau/golang-builder:1.13.4 as build +from mcluseau/golang-builder:1.13.5 as build # ------------------------------------------------------------------------ from debian:stretch diff --git a/cmd/dkl-local-server/secrets.go b/cmd/dkl-local-server/secrets.go index acb45c1..c7af48c 100644 --- a/cmd/dkl-local-server/secrets.go +++ b/cmd/dkl-local-server/secrets.go @@ -13,6 +13,7 @@ import ( "sort" "sync" + "github.com/cespare/xxhash" "github.com/cloudflare/cfssl/config" "github.com/cloudflare/cfssl/csr" "github.com/cloudflare/cfssl/helpers" @@ -32,6 +33,8 @@ var ( type SecretData struct { l sync.Mutex + prevHash uint64 + clusters map[string]*ClusterSecrets changed bool config *config.Config @@ -85,6 +88,8 @@ func loadSecretData(config *config.Config) (err error) { return } + sd.prevHash = xxhash.Sum64(ba) + secretData = sd return } @@ -93,20 +98,32 @@ func (sd *SecretData) Changed() bool { return sd.changed } -func (sd *SecretData) Save() error { +func (sd *SecretData) Save() (err error) { if DontSave { - return nil + return } sd.l.Lock() defer sd.l.Unlock() - log.Info("Saving secret data") ba, err := json.Marshal(sd.clusters) if err != nil { - return err + return } - return ioutil.WriteFile(secretDataPath(), ba, 0600) + + h := xxhash.Sum64(ba) + if h == sd.prevHash { + return + } + + log.Info("Saving secret data") + err = ioutil.WriteFile(secretDataPath(), ba, 0600) + + if err == nil { + sd.prevHash = h + } + + return } func newClusterSecrets() *ClusterSecrets { diff --git a/go.mod b/go.mod index 450afab..4f3c256 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module novit.nc/direktil/local-server require ( github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e + github.com/cespare/xxhash v1.1.0 github.com/cloudflare/cfssl v0.0.0-20181213083726-b94e044bb51e github.com/emicklei/go-restful v2.10.0+incompatible github.com/emicklei/go-restful-openapi v1.2.0 diff --git a/go.sum b/go.sum index 8bac425..b283117 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,6 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= @@ -14,6 +15,8 @@ github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e h1:hHg27A0RSSp2Om9lubZpiMgVbvn39bsUmW9U5h0twqc= github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e/go.mod h1:oDpT4efm8tSYHXV5tHSdRvBet/b/QzxZ+XyyPehvm3A= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cloudflare/cfssl v0.0.0-20181213083726-b94e044bb51e h1:Qux+lbuMaRzkQyTdzgtz8MgzPtzmaPQy6DXmxpdxT3U= github.com/cloudflare/cfssl v0.0.0-20181213083726-b94e044bb51e/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -153,6 +156,7 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=