From ea4327c9310755eedcfbd5791d06fb52901f81ce Mon Sep 17 00:00:00 2001 From: Katrina Verey Date: Wed, 27 Nov 2019 14:14:10 -0500 Subject: [PATCH] Force intepret kubectl response encoding as UTF8 --- lib/krane/kubectl.rb | 11 ++++++++++- test/unit/krane/kubectl_test.rb | 10 ++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/krane/kubectl.rb b/lib/krane/kubectl.rb index f3451e6ca..9e57f7ed6 100644 --- a/lib/krane/kubectl.rb +++ b/lib/krane/kubectl.rb @@ -34,7 +34,16 @@ def run(*args, log_failure: nil, use_context: true, use_namespace: true, output: (1..attempts).to_a.each do |current_attempt| logger.debug("Running command (attempt #{current_attempt}): #{cmd.join(' ')}") out, err, st = Open3.capture3(*cmd) - logger.debug("Kubectl out: " + out.gsub(/\s+/, ' ')) unless output_is_sensitive + + # https://github.com/Shopify/krane/issues/395 + if out.encoding != Encoding::UTF_8 + out = out.dup.force_encoding(Encoding::UTF_8) + end + + if logger.debug? && !output_is_sensitive + # don't do the gsub unless we're going to print this + logger.debug("Kubectl out: " + out.gsub(/\s+/, ' ')) + end break if st.success? raise(ResourceNotFoundError, err) if err.match(ERROR_MATCHERS[:not_found]) && raise_if_not_found diff --git a/test/unit/krane/kubectl_test.rb b/test/unit/krane/kubectl_test.rb index f13efb852..ad8498fbc 100644 --- a/test/unit/krane/kubectl_test.rb +++ b/test/unit/krane/kubectl_test.rb @@ -348,6 +348,16 @@ def test_retry_delay_backoff end end + def test_debug_level_output_log_uses_correct_encoding + logger.level = ::Logger::DEBUG + good = "hélas" + bad = good.dup.force_encoding(Encoding::US_ASCII) + + stub_open3(%W(kubectl get pods --namespace=testn --context=testc --request-timeout=#{timeout}), resp: bad) + out, _err, _st = build_kubectl.run("get", "pods") + assert_equal good, out + end + private def timeout