diff --git a/clouddriver-kubernetes-v2/src/main/java/com/netflix/spinnaker/clouddriver/kubernetes/v2/op/job/KubectlJobExecutor.java b/clouddriver-kubernetes-v2/src/main/java/com/netflix/spinnaker/clouddriver/kubernetes/v2/op/job/KubectlJobExecutor.java index 1c24dc13f9e..aa2ddb9195e 100644 --- a/clouddriver-kubernetes-v2/src/main/java/com/netflix/spinnaker/clouddriver/kubernetes/v2/op/job/KubectlJobExecutor.java +++ b/clouddriver-kubernetes-v2/src/main/java/com/netflix/spinnaker/clouddriver/kubernetes/v2/op/job/KubectlJobExecutor.java @@ -31,7 +31,6 @@ import com.netflix.spinnaker.clouddriver.kubernetes.v2.description.KubernetesPodMetric.ContainerMetric; import com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesKind; import com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesManifest; -import com.netflix.spinnaker.clouddriver.kubernetes.v2.security.KubernetesApiResourceParser; import com.netflix.spinnaker.clouddriver.kubernetes.v2.security.KubernetesSelectorList; import com.netflix.spinnaker.clouddriver.kubernetes.v2.security.KubernetesV2Credentials; import io.kubernetes.client.models.V1DeleteOptions; @@ -599,51 +598,6 @@ private String getOAuthToken(KubernetesV2Credentials credentials) { return status.getOutput(); } - public Set apiResources(KubernetesV2Credentials credentials) { - List command = kubectlAuthPrefix(credentials); - command.add("api-resources"); - - JobResult status = jobExecutor.runJob(new JobRequest(command)); - - // api-resources can return a non-zero status code but still return data - // log here as a warning - if (!status.getResult().equals(JobResult.Result.SUCCESS)) { - log.warn("There was an error reading api-resources. All available kinds may not be present."); - } - - String output = status.getOutput().trim(); - if (StringUtils.isEmpty(output)) { - return new HashSet<>(); - } - - return KubernetesApiResourceParser.parse(output); - } - - public boolean authCanI(KubernetesV2Credentials credentials, String kind, String verb) { - List command = kubectlAuthPrefix(credentials); - command.add("auth"); - command.add("can-i"); - command.add(verb); - command.add(kind); - - JobResult status = jobExecutor.runJob(new JobRequest(command)); - - return status.getResult() == JobResult.Result.SUCCESS; - } - - public boolean authCanINamespaced( - KubernetesV2Credentials credentials, String namespace, String kind, String verb) { - List command = kubectlNamespacedAuthPrefix(credentials, namespace); - command.add("auth"); - command.add("can-i"); - command.add(verb); - command.add(kind); - - JobResult status = jobExecutor.runJob(new JobRequest(command)); - - return status.getResult() == JobResult.Result.SUCCESS; - } - public Collection topPod( KubernetesV2Credentials credentials, String namespace, String pod) { List command = kubectlNamespacedAuthPrefix(credentials, namespace); diff --git a/clouddriver-kubernetes-v2/src/main/java/com/netflix/spinnaker/clouddriver/kubernetes/v2/security/KubernetesApiResourceParser.java b/clouddriver-kubernetes-v2/src/main/java/com/netflix/spinnaker/clouddriver/kubernetes/v2/security/KubernetesApiResourceParser.java deleted file mode 100644 index 30ee38c6dc6..00000000000 --- a/clouddriver-kubernetes-v2/src/main/java/com/netflix/spinnaker/clouddriver/kubernetes/v2/security/KubernetesApiResourceParser.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2019 Armory - * - * Licensed under the Apache License, Version 2.0 (the "License") - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.spinnaker.clouddriver.kubernetes.v2.security; - -import com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesApiGroup; -import com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesKind; -import java.util.HashSet; -import java.util.Set; - -public class KubernetesApiResourceParser { - - public static Set parse(String input) { - String[] lines = input.trim().split("\n"); - String headerRow = lines[0]; - int nameIndex = headerRow.indexOf("NAME"); - int apiGroupIndex = headerRow.indexOf("APIGROUP"); - int namespaceIndex = headerRow.indexOf("NAMESPACED"); - int kindIndex = headerRow.indexOf("KIND"); - - // we expect NAME to be at index 0 of the first row - // if it isn't, then we didn't get the data in the - // format we expected - if (nameIndex != 0) { - throw new IllegalArgumentException( - "api-resources input not in the proper format. expected to find NAME header."); - } - - Set kinds = new HashSet<>(); - - for (int i = 1; i < lines.length; i++) { - String line = lines[i]; - String apiGroup = line.substring(apiGroupIndex, namespaceIndex).trim(); - String kind = line.substring(kindIndex).trim(); - kinds.add(KubernetesKind.from(kind, KubernetesApiGroup.fromString(apiGroup))); - } - - return kinds; - } -} diff --git a/clouddriver-kubernetes-v2/src/test/groovy/com/netflix/spinnaker/clouddriver/kubernetes/v2/security/KubernetesApiResourceParserSpec.groovy b/clouddriver-kubernetes-v2/src/test/groovy/com/netflix/spinnaker/clouddriver/kubernetes/v2/security/KubernetesApiResourceParserSpec.groovy deleted file mode 100644 index 6db50d5147b..00000000000 --- a/clouddriver-kubernetes-v2/src/test/groovy/com/netflix/spinnaker/clouddriver/kubernetes/v2/security/KubernetesApiResourceParserSpec.groovy +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2019 Armory - * - * Licensed under the Apache License, Version 2.0 (the "License") - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.spinnaker.clouddriver.kubernetes.v2.security - -import com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesApiGroup -import com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesKind -import spock.lang.Specification - -class KubernetesApiResourceParserSpec extends Specification { - - def inputWithHeaders = """ -NAME SHORTNAMES APIGROUP NAMESPACED KIND -bindings true Binding -mutatingwebhookconfigurations admissionregistration.k8s.io false MutatingWebhookConfiguration -""" - - def "parses api-resources response properly"() { - when: - def result = KubernetesApiResourceParser.parse(inputWithHeaders) - - then: - [ - KubernetesKind.from("Binding", KubernetesApiGroup.fromString("")), - KubernetesKind.from("MutatingWebhookConfiguration", KubernetesApiGroup.fromString("admissionregistration.k8s.io")) - ] as Set == result - } -}