From 390b34ed348f736466ed93e21e5c4bee4fcbcdb6 Mon Sep 17 00:00:00 2001 From: Danny Turner Date: Mon, 11 Nov 2019 08:21:45 -0800 Subject: [PATCH] Add optional revision flag (#613) * Add optional current-sha flag * Add current-sha to exe/kubernetes- tasks for backwards compatibility * Avoid sending the sha: statsd tag unnecessarily --- exe/kubernetes-deploy | 4 +++- exe/kubernetes-render | 4 +++- lib/krane/cli/deploy_command.rb | 4 +++- lib/krane/cli/render_command.rb | 3 ++- lib/krane/deprecated_deploy_task.rb | 3 ++- test/exe/deploy_test.rb | 6 ++++++ test/exe/render_test.rb | 10 ++++------ test/integration/krane_test.rb | 12 +++--------- 8 files changed, 26 insertions(+), 20 deletions(-) diff --git a/exe/kubernetes-deploy b/exe/kubernetes-deploy index a4173fd49..779f4b305 100755 --- a/exe/kubernetes-deploy +++ b/exe/kubernetes-deploy @@ -17,6 +17,7 @@ bindings = {} verbose_log_prefix = false max_watch_seconds = nil selector = nil +current_sha = ENV["REVISION"] ARGV.options do |opts| parser = Krane::BindingsParser.new @@ -52,6 +53,7 @@ ARGV.options do |opts| puts "v#{Krane::VERSION}" exit end + opts.on("--current-sha=CURRENT_SHA", "Expose SHA `current_sha` in ERB bindings") { |r| current_sha = r } opts.parse! bindings = parser.parse end @@ -72,7 +74,7 @@ begin runner = KubernetesDeploy::DeployTask.new( namespace: namespace, context: context, - current_sha: ENV["REVISION"], + current_sha: current_sha, template_paths: paths, bindings: bindings, logger: logger, diff --git a/exe/kubernetes-render b/exe/kubernetes-render index 25b2e94f5..fd4ce1ef3 100755 --- a/exe/kubernetes-render +++ b/exe/kubernetes-render @@ -9,6 +9,7 @@ require 'optparse' template_dir = [] bindings = {} +current_sha = ENV["REVISION"] ARGV.options do |opts| parser = Krane::BindingsParser.new @@ -17,6 +18,7 @@ ARGV.options do |opts| opts.on("--template-dir=DIR", "Set the template dir (default: config/deploy/$ENVIRONMENT).") do |d| template_dir = [d] end + opts.on("--current-sha=CURRENT_SHA", "Expose SHA `current_sha` in ERB bindings") { |r| current_sha = r } opts.parse! bindings = parser.parse end @@ -27,7 +29,7 @@ logger = Krane::FormattedLogger.build(verbose_prefix: false) begin Krane::OptionsHelper.with_processed_template_paths(template_dir) do |dir| runner = KubernetesDeploy::RenderTask.new( - current_sha: ENV["REVISION"], + current_sha: current_sha, template_dir: dir.first, bindings: bindings, ) diff --git a/lib/krane/cli/deploy_command.rb b/lib/krane/cli/deploy_command.rb index 6db08fa2e..214334b84 100644 --- a/lib/krane/cli/deploy_command.rb +++ b/lib/krane/cli/deploy_command.rb @@ -31,6 +31,8 @@ class DeployCommand default: true }, "verify-result" => { type: :boolean, default: true, desc: "Verify workloads correctly deployed" }, + "current-sha" => { type: :string, banner: "SHA", desc: "Expose SHA `current_sha` in ERB bindings" }, + } def self.from_options(namespace, context, options) @@ -57,7 +59,7 @@ def self.from_options(namespace, context, options) deploy = ::Krane::DeployTask.new( namespace: namespace, context: context, - current_sha: ENV["REVISION"], + current_sha: options['current-sha'], template_paths: paths, bindings: bindings_parser.parse, logger: logger, diff --git a/lib/krane/cli/render_command.rb b/lib/krane/cli/render_command.rb index f5a790580..ff3df62ca 100644 --- a/lib/krane/cli/render_command.rb +++ b/lib/krane/cli/render_command.rb @@ -7,6 +7,7 @@ class RenderCommand bindings: { type: :array, banner: "foo=bar abc=def", desc: 'Bindings for erb' }, filenames: { type: :array, banner: 'config/deploy/production config/deploy/my-extra-resource.yml', required: true, aliases: 'f', desc: 'Directories and files to render' }, + 'current-sha': { type: :string, banner: "SHA", desc: "Expose SHA `current_sha` in ERB bindings" }, } def self.from_options(options) @@ -19,7 +20,7 @@ def self.from_options(options) ::Krane::OptionsHelper.with_processed_template_paths(options[:filenames]) do |paths| runner = ::Krane::RenderTask.new( - current_sha: ENV["REVISION"], + current_sha: options['current-sha'], template_paths: paths, bindings: bindings_parser.parse, ) diff --git a/lib/krane/deprecated_deploy_task.rb b/lib/krane/deprecated_deploy_task.rb index d1f2a9e82..aea89342d 100644 --- a/lib/krane/deprecated_deploy_task.rb +++ b/lib/krane/deprecated_deploy_task.rb @@ -388,7 +388,8 @@ def ejson_keys_secret end def statsd_tags - %W(namespace:#{@namespace} sha:#{@current_sha} context:#{@context}) | @namespace_tags + tags = %W(namespace:#{@namespace} context:#{@context}) | @namespace_tags + @current_sha.nil? ? tags : %W(sha:#{@current_sha}) | tags end def with_retries(limit) diff --git a/test/exe/deploy_test.rb b/test/exe/deploy_test.rb index 02a27cd1a..09912ce93 100644 --- a/test/exe/deploy_test.rb +++ b/test/exe/deploy_test.rb @@ -79,6 +79,12 @@ def test_deploy_fails_without_filename end end + def test_deploy_uses_current_sha + test_sha = "TEST" + set_krane_deploy_expectations(new_args: { current_sha: test_sha }) + krane_deploy!(flags: "--current-sha #{test_sha}") + end + private def set_krane_deploy_expectations(new_args: {}, run_args: {}) diff --git a/test/exe/render_test.rb b/test/exe/render_test.rb index 9709e7dfa..96116043b 100644 --- a/test/exe/render_test.rb +++ b/test/exe/render_test.rb @@ -3,7 +3,6 @@ require 'krane/cli/krane' class RendertTest < Krane::TestCase - include EnvTestHelper def test_render_with_default_options install_krane_render_expectations krane_render! @@ -25,10 +24,8 @@ def test_render_parses_bindings def test_render_uses_current_sha test_sha = "TEST" - with_env("REVISION", test_sha) do - install_krane_render_expectations - krane_render! - end + install_krane_render_expectations(current_sha: test_sha) + krane_render!("--current-sha #{test_sha}") end private @@ -40,7 +37,8 @@ def install_krane_render_expectations(new_args = {}) Krane::RenderTask.expects(:new).with(options).returns(response) end - def krane_render!(flags = '-f /dev/null') + def krane_render!(flags = "") + flags += ' -f /dev/null' unless flags.include?("-f") krane = Krane::CLI::Krane.new( [], flags.split diff --git a/test/integration/krane_test.rb b/test/integration/krane_test.rb index eaf87136a..eb34b37b8 100644 --- a/test/integration/krane_test.rb +++ b/test/integration/krane_test.rb @@ -2,8 +2,6 @@ require 'integration_test_helper' class KraneTest < Krane::IntegrationTest - include EnvTestHelper - def test_restart_black_box assert_deploy_success(deploy_fixtures("hello-cloud", subset: ["configmap-data.yml", "web.yml.erb", "redis.yml"])) refute(fetch_restarted_at("web"), "RESTARTED_AT env on fresh deployment") @@ -38,19 +36,15 @@ def test_render_black_box bindings = "data=#{data_value}" test_sha = rand(10_000).to_s - out, err, status = nil - with_env("REVISION", test_sha) do - out, err, status = krane_black_box("render", "-f #{paths.join(' ')} --bindings #{bindings}") - end + out, err, status = krane_black_box("render", + "-f #{paths.join(' ')} --bindings #{bindings} --current-sha #{test_sha}") assert_predicate(status, :success?) assert_match("Success", err) assert_match(test_sha, out) assert_match(data_value, out) - with_env("REVISION", test_sha) do - out, err, status = krane_black_box("render", "-f #{paths.join(' ')}") - end + out, err, status = krane_black_box("render", "-f #{paths.join(' ')} --current-sha #{test_sha}") refute_predicate(status, :success?) assert_match("FAILURE", err)