diff --git a/cmd/tk/workflow.go b/cmd/tk/workflow.go index 121e53ca2..e3927766a 100644 --- a/cmd/tk/workflow.go +++ b/cmd/tk/workflow.go @@ -44,6 +44,7 @@ func applyCmd() *cobra.Command { } vars := workflowFlags(cmd.Flags()) force := cmd.Flags().Bool("force", false, "force applying (kubectl apply --force)") + validate := cmd.Flags().Bool("validate", true, "validation of resources (kubectl --validate=false)") autoApprove := cmd.Flags().Bool("dangerous-auto-approve", false, "skip interactive approval. Only for automation!") getExtCode := extCodeParser(cmd.Flags()) @@ -52,6 +53,7 @@ func applyCmd() *cobra.Command { tanka.WithTargets(stringsToRegexps(vars.targets)...), tanka.WithExtCode(getExtCode()), tanka.WithApplyForce(*force), + tanka.WithApplyValidate(*validate), tanka.WithApplyAutoApprove(*autoApprove), ) if err != nil { diff --git a/pkg/kubernetes/client/apply.go b/pkg/kubernetes/client/apply.go index 6ac6dcbfd..c40e3ab6e 100644 --- a/pkg/kubernetes/client/apply.go +++ b/pkg/kubernetes/client/apply.go @@ -31,6 +31,10 @@ func (k Kubectl) apply(data manifest.List, opts ApplyOpts) error { argv = append(argv, "--force") } + if !opts.Validate { + argv = append(argv, "--validate=false") + } + cmd := exec.Command("kubectl", argv...) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr diff --git a/pkg/kubernetes/client/client.go b/pkg/kubernetes/client/client.go index a67e0c210..14710c85a 100644 --- a/pkg/kubernetes/client/client.go +++ b/pkg/kubernetes/client/client.go @@ -51,6 +51,9 @@ type ApplyOpts struct { // force allows to ignore checks and force the operation Force bool + // validate allows to enable/disable kubectl validation + Validate bool + // autoApprove allows to skip the interactive approval AutoApprove bool } diff --git a/pkg/tanka/tanka.go b/pkg/tanka/tanka.go index a80a261e1..95c24b145 100644 --- a/pkg/tanka/tanka.go +++ b/pkg/tanka/tanka.go @@ -77,6 +77,13 @@ func WithApplyForce(b bool) Modifier { } } +// WithApplyValidate allows to invoke `kubectl apply` with the `--validate=false` flag +func WithApplyValidate(b bool) Modifier { + return func(opts *options) { + opts.apply.Validate = b + } +} + // WithApplyAutoApprove allows to skip the interactive approval func WithApplyAutoApprove(b bool) Modifier { return func(opts *options) {