From c4b35c729838ead95fc2a32ef763ed0db2d3076e Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Fri, 28 Sep 2018 09:43:16 -0700 Subject: [PATCH] Check --cache-repo is provided with --cache and --no-push As described in #373, kaniko panics when provided with --cache and --no-push since it tries to infer a cache repo from the destination, which doesn't exist. To fix this, I added a check to make sure --cache-repo is passed in when both these flags are provided. --- cmd/executor/cmd/root.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/cmd/executor/cmd/root.go b/cmd/executor/cmd/root.go index b2e623f1c8..62136522eb 100644 --- a/cmd/executor/cmd/root.go +++ b/cmd/executor/cmd/root.go @@ -55,6 +55,9 @@ var RootCmd = &cobra.Command{ if !opts.NoPush && len(opts.Destinations) == 0 { return errors.New("You must provide --destination, or use --no-push") } + if err := cacheFlagsValid(); err != nil { + return errors.Wrap(err, "cache flags invalid") + } if err := resolveSourceContext(); err != nil { return errors.Wrap(err, "error resolving source context") } @@ -112,6 +115,19 @@ func checkContained() bool { return err == nil } +// cacheFlagsValid makes sure the flags passed in related to caching are valid +func cacheFlagsValid() error { + if !opts.Cache { + return nil + } + // If --cache=true and --no-push=true, then cache repo must be provided + // since cache can't be inferred from destination + if opts.CacheRepo == "" && opts.NoPush { + return errors.New("if using cache with --no-push, specify cache repo with --cache-repo") + } + return nil +} + // resolveDockerfilePath resolves the Dockerfile path to an absolute path func resolveDockerfilePath() error { if util.FilepathExists(opts.DockerfilePath) {