From 90c9d57558459dbd1954a101dc197306e563a476 Mon Sep 17 00:00:00 2001 From: David Radcliffe Date: Tue, 15 Jan 2019 16:00:06 -0500 Subject: [PATCH 1/3] capitalize kind to prevent invalid const errors --- lib/kubernetes-deploy/kubernetes_resource.rb | 4 ++-- .../kubernetes-deploy/kubernetes_resource_test.rb | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/kubernetes-deploy/kubernetes_resource.rb b/lib/kubernetes-deploy/kubernetes_resource.rb index 8f6743849..92d16d4d9 100644 --- a/lib/kubernetes-deploy/kubernetes_resource.rb +++ b/lib/kubernetes-deploy/kubernetes_resource.rb @@ -36,8 +36,8 @@ 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"]) + elsif KubernetesDeploy.const_defined?(definition["kind"].capitalize) + klass = KubernetesDeploy.const_get(definition["kind"].capitalize) klass.new(**opts) else inst = new(**opts) diff --git a/test/unit/kubernetes-deploy/kubernetes_resource_test.rb b/test/unit/kubernetes-deploy/kubernetes_resource_test.rb index 83eaa47e5..53d9810f2 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_custom_resource_kind + definition = { "kind" => "foobar", "metadata" => { "name" => "test" } } + KubernetesDeploy::KubernetesResource.build( + namespace: 'test', + context: 'test', + definition: definition, + logger: ::Logger.new($stderr), + statsd_tags: [] + ) + end + private def kubectl From ae994ad43020fc4f3740bfbabbb07553fc92067f Mon Sep 17 00:00:00 2001 From: David Radcliffe Date: Tue, 15 Jan 2019 16:52:18 -0500 Subject: [PATCH 2/3] catch the error instead of mutating the kind --- lib/kubernetes-deploy/kubernetes_resource.rb | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/kubernetes-deploy/kubernetes_resource.rb b/lib/kubernetes-deploy/kubernetes_resource.rb index 92d16d4d9..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"].capitalize) - klass = KubernetesDeploy.const_get(definition["kind"].capitalize) - 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 From 5c7cf64d8a15fb89fbedb59ce27e96ef8558dd0b Mon Sep 17 00:00:00 2001 From: David Radcliffe Date: Thu, 17 Jan 2019 14:42:30 -0500 Subject: [PATCH 3/3] PR feedback --- test/unit/kubernetes-deploy/kubernetes_resource_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unit/kubernetes-deploy/kubernetes_resource_test.rb b/test/unit/kubernetes-deploy/kubernetes_resource_test.rb index 53d9810f2..5f75e283c 100644 --- a/test/unit/kubernetes-deploy/kubernetes_resource_test.rb +++ b/test/unit/kubernetes-deploy/kubernetes_resource_test.rb @@ -288,13 +288,13 @@ def test_disappeared_is_false_if_resource_has_been_deployed_and_we_get_a_server_ refute_predicate(dummy, :disappeared?) end - def test_custom_resource_kind + 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.new($stderr), + logger: logger, statsd_tags: [] ) end