diff --git a/plugins/kubernetes/app/models/kubernetes/resource.rb b/plugins/kubernetes/app/models/kubernetes/resource.rb index 5db14a0541..423f1f4ad5 100644 --- a/plugins/kubernetes/app/models/kubernetes/resource.rb +++ b/plugins/kubernetes/app/models/kubernetes/resource.rb @@ -195,10 +195,11 @@ def delete_pods end end - def request(method, *args) + def request(verb, *args) SamsonKubernetes.retry_on_connection_errors do begin - client.send("#{method}_#{@template.fetch(:kind).underscore}", *args) + method = "#{verb}_#{Kubeclient::ClientMixin.underscore_entity(@template.fetch(:kind))}" + client.send(method, *args) rescue Kubeclient::HttpError message = $!.message.to_s if message.include?(" is invalid:") || message.include?(" no kind ") diff --git a/plugins/kubernetes/test/models/kubernetes/resource_test.rb b/plugins/kubernetes/test/models/kubernetes/resource_test.rb index 1c9928f54c..2d94e996d0 100644 --- a/plugins/kubernetes/test/models/kubernetes/resource_test.rb +++ b/plugins/kubernetes/test/models/kubernetes/resource_test.rb @@ -784,6 +784,17 @@ def deployment_stub(replica_count) end end end + + it "works with kind APIService" do + template[:kind] = "APIService" + template[:apiVersion] = "apiregistration.k8s.io/v1beta1" + url = "http://foobar.server/apis/apiregistration.k8s.io/v1beta1/namespaces/pod1/apiservices/some-project" + assert_request(:get, url, to_return: {body: old.to_json}) do + assert_request(:put, url, to_return: {body: "{}"}) do + resource.deploy + end + end + end end end diff --git a/plugins/kubernetes/test/test_helper.rb b/plugins/kubernetes/test/test_helper.rb index 880a27ff6a..2de4751bec 100644 --- a/plugins/kubernetes/test/test_helper.rb +++ b/plugins/kubernetes/test/test_helper.rb @@ -150,10 +150,16 @@ def read_kubernetes_sample_file(file_name) {"name" => "poddisruptionbudgets", "namespaced" => true, "kind" => "PodDisruptionBudget"} ] }, + "apiregistration.k8s.io/v1beta1" => { + "kind" => "APIResourceList", + "resources" => [ + {"name" => "apiservices", "namespaced" => true, "kind" => "APIService"} + ] + } }.freeze before do - stub_request(:get, %r{http://foobar.server/(api/v1|apis/([a-z]+/[a-z\d]+))$}).to_return do |request| + stub_request(:get, %r{http://foobar.server/(api/v1|apis/([a-z.\d]+/[a-z\d]+))$}).to_return do |request| version = request.uri.path.split('/', 3).last body = KUBERNETES_VERSION_REPLIES[version] || raise("Missing version stub for #{version}") {body: body.to_json}