From a3d2f05a0d30053800da5aebc9476999c5471a6c Mon Sep 17 00:00:00 2001 From: David Radcliffe Date: Thu, 17 Jan 2019 16:34:16 -0500 Subject: [PATCH] prevent invalid const errors from lowercase resource kind (#413) * capitalize kind to prevent invalid const errors * catch the error instead of mutating the kind * PR feedback --- lib/kubernetes-deploy/kubernetes_resource.rb | 19 ++++++++++++------- .../kubernetes_resource_test.rb | 11 +++++++++++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/lib/kubernetes-deploy/kubernetes_resource.rb b/lib/kubernetes-deploy/kubernetes_resource.rb index 8f6743849..774ea3a79 100644 --- a/lib/kubernetes-deploy/kubernetes_resource.rb +++ b/lib/kubernetes-deploy/kubernetes_resource.rb @@ -36,14 +36,19 @@ def build(namespace:, context:, definition:, logger:, statsd_tags:) statsd_tags: statsd_tags } if definition["kind"].blank? raise InvalidTemplateError.new("Template missing 'Kind'", content: definition.to_yaml) - elsif KubernetesDeploy.const_defined?(definition["kind"]) - klass = KubernetesDeploy.const_get(definition["kind"]) - klass.new(**opts) - else - inst = new(**opts) - inst.type = definition["kind"] - inst end + + begin + if KubernetesDeploy.const_defined?(definition["kind"]) + klass = KubernetesDeploy.const_get(definition["kind"]) + return klass.new(**opts) + end + rescue NameError + end + + inst = new(**opts) + inst.type = definition["kind"] + inst end def timeout diff --git a/test/unit/kubernetes-deploy/kubernetes_resource_test.rb b/test/unit/kubernetes-deploy/kubernetes_resource_test.rb index 83eaa47e5..5f75e283c 100644 --- a/test/unit/kubernetes-deploy/kubernetes_resource_test.rb +++ b/test/unit/kubernetes-deploy/kubernetes_resource_test.rb @@ -288,6 +288,17 @@ def test_disappeared_is_false_if_resource_has_been_deployed_and_we_get_a_server_ refute_predicate(dummy, :disappeared?) end + def test_lowercase_custom_resource_kind_does_not_raise + definition = { "kind" => "foobar", "metadata" => { "name" => "test" } } + KubernetesDeploy::KubernetesResource.build( + namespace: 'test', + context: 'test', + definition: definition, + logger: logger, + statsd_tags: [] + ) + end + private def kubectl