diff --git a/go.sum b/go.sum index 497b44be..0436570f 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,7 @@ dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1 dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.4.1 h1:CaDA1wAoM3rj9sAFyyZP37LloExUzxFGYt+DqJ870JA= github.com/Masterminds/semver v1.4.1/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= @@ -15,6 +16,7 @@ github.com/Masterminds/sprig v2.15.0+incompatible h1:0gSxPGWS9PAr7U2NsQ2YQg6juRD github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Masterminds/sprig v2.16.0+incompatible h1:QZbMUPxRQ50EKAq3LFMnxddMu88/EUUG3qmxwtDmPsY= github.com/Masterminds/sprig v2.16.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.20.0+incompatible h1:dJTKKuUkYW3RMFdQFXPU/s6hg10RgctmTjRcbZ98Ap8= github.com/Masterminds/sprig v2.20.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/aokoli/goutils v1.0.1 h1:7fpzNGoJ3VA8qcrm++XEE1QUe0mIwNeLa02Nwq7RDkg= diff --git a/pkg/state/state.go b/pkg/state/state.go index 3518d0fc..1654fd48 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -10,6 +10,7 @@ import ( "sort" "strconv" "strings" + "sync" "github.com/roboll/helmfile/pkg/environment" "github.com/roboll/helmfile/pkg/event" @@ -248,6 +249,8 @@ func (st *HelmState) prepareSyncReleases(helm helmexec.Interface, additionalValu res := []syncPrepareResult{} errs := []error{} + mut := sync.Mutex{} + st.scatterGather( concurrency, numReleases, @@ -272,7 +275,11 @@ func (st *HelmState) prepareSyncReleases(helm helmexec.Interface, additionalValu continue } + // TODO We need a long-term fix for this :) + // See https://github.com/roboll/helmfile/issues/737 + mut.Lock() flags, flagsErr := st.flagsForUpgrade(helm, release, workerIndex) + mut.Unlock() if flagsErr != nil { results <- syncPrepareResult{errors: []*ReleaseError{newReleaseError(release, flagsErr)}} continue @@ -683,6 +690,8 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu rs := []diffPrepareResult{} errs := []error{} + mut := sync.Mutex{} + st.scatterGather( concurrency, numReleases, @@ -698,7 +707,11 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu st.applyDefaultsTo(release) + // TODO We need a long-term fix for this :) + // See https://github.com/roboll/helmfile/issues/737 + mut.Lock() flags, err := st.flagsForDiff(helm, release, workerIndex) + mut.Unlock() if err != nil { errs = append(errs, err) }