From e5fe76bb431642a8190f77eec2a44d8df38e1cc9 Mon Sep 17 00:00:00 2001 From: Timothy Smith Date: Mon, 22 Jan 2024 11:08:43 -0500 Subject: [PATCH] avoid needless per-resource dry-run apply validation --- lib/krane/deploy_task.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/krane/deploy_task.rb b/lib/krane/deploy_task.rb index 88e669208..4cdb28b06 100644 --- a/lib/krane/deploy_task.rb +++ b/lib/krane/deploy_task.rb @@ -142,7 +142,6 @@ def run(**args) def run!(verify_result: true, prune: true) start = Time.now.utc @logger.reset - @logger.phase_heading("Initializing deploy") validate_configuration(prune: prune) resources = discover_resources @@ -285,10 +284,13 @@ def validate_configuration(prune:) measure_method(:validate_configuration) def validate_resources(resources) - validate_globals(resources) - batch_dry_run_success = validate_dry_run(resources) resources.select! { |r| r.selected?(@selector) } if @selector_as_filter - Krane::Concurrency.split_across_threads(resources) do |r| + validate_globals(resources) + applyables, individuals = resources.partition { |r| r.deploy_method == :apply } + batch_dry_run_success = validate_dry_run(applyables) + resources_to_validate = batch_dry_run_success ? individuals : resources + + Krane::Concurrency.split_across_threads(resources_to_validate) do |r| # No need to pass in kubectl (and do per-resource dry run apply) if batch dry run succeeded if batch_dry_run_success r.validate_definition(kubectl: nil, selector: @selector, dry_run: false) @@ -296,6 +298,7 @@ def validate_resources(resources) r.validate_definition(kubectl: kubectl, selector: @selector, dry_run: true) end end + failed_resources = resources.select(&:validation_failed?) if failed_resources.present? failed_resources.each do |r|