From 63f3e74cb13819ee1e2aa7f95386b39f4e7793db Mon Sep 17 00:00:00 2001 From: Steve Hawkins Date: Thu, 15 Dec 2022 08:38:45 -0500 Subject: [PATCH] fix #4014: refactoring to remove openshift client jar --- .../client/ServiceToURLProvider.java | 16 + .../extension/ExtensibleMixedOperation.java | 349 ++++++++++++++++++ .../client/extension/ExtensibleResource.java | 11 + .../extension/ExtensibleResourceAdapter.java | 11 + .../client/dsl/internal/BaseOperation.java | 46 ++- .../client/dsl/internal/OperationSupport.java | 40 +- .../internal/core/v1/PodOperationsImpl.java | 3 - .../client/impl/URLFromClusterIPImpl.java | 3 +- .../client/impl/URLFromIngressImpl.java | 2 +- .../client/impl/URLFromNodePortImpl.java | 3 +- .../utils/internal/URLFromServiceUtil.java | 32 +- openshift-client/pom.xml | 1 - .../project/ProjectOperationsImpl.java | 38 +- .../client/impl/OpenShiftClientImpl.java | 4 +- .../impl/OpenShiftExtensionAdapter.java | 3 - .../impl/URLFromOpenshiftRouteImpl.java | 3 +- 16 files changed, 448 insertions(+), 117 deletions(-) create mode 100644 kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleMixedOperation.java diff --git a/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/ServiceToURLProvider.java b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/ServiceToURLProvider.java index 98d96a56207..0f3422aea73 100644 --- a/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/ServiceToURLProvider.java +++ b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/ServiceToURLProvider.java @@ -17,6 +17,9 @@ package io.fabric8.kubernetes.client; import io.fabric8.kubernetes.api.model.Service; +import io.fabric8.kubernetes.api.model.ServicePort; + +import java.util.Objects; public interface ServiceToURLProvider { enum ServiceToUrlImplPriority { @@ -40,4 +43,17 @@ public int getValue() { int getPriority(); String getURL(Service service, String portName, String namespace, KubernetesClient client); + + static ServicePort getServicePortByName(Service service, String portName) { + if (portName.isEmpty()) { + return service.getSpec().getPorts().iterator().next(); + } + + for (ServicePort servicePort : service.getSpec().getPorts()) { + if (Objects.equals(servicePort.getName(), portName)) { + return servicePort; + } + } + return null; + } } diff --git a/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleMixedOperation.java b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleMixedOperation.java new file mode 100644 index 00000000000..e2b82fc2435 --- /dev/null +++ b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleMixedOperation.java @@ -0,0 +1,349 @@ +/** + * Copyright (C) 2015 Red Hat, Inc. + * + * 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 io.fabric8.kubernetes.client.extension; + +import io.fabric8.kubernetes.api.model.DeletionPropagation; +import io.fabric8.kubernetes.api.model.LabelSelector; +import io.fabric8.kubernetes.api.model.ListOptions; +import io.fabric8.kubernetes.api.model.ObjectReference; +import io.fabric8.kubernetes.api.model.StatusDetails; +import io.fabric8.kubernetes.client.Client; +import io.fabric8.kubernetes.client.GracePeriodConfigurable; +import io.fabric8.kubernetes.client.PropagationPolicyConfigurable; +import io.fabric8.kubernetes.client.Watch; +import io.fabric8.kubernetes.client.Watcher; +import io.fabric8.kubernetes.client.dsl.AnyNamespaceOperation; +import io.fabric8.kubernetes.client.dsl.Deletable; +import io.fabric8.kubernetes.client.dsl.DeletableWithOptions; +import io.fabric8.kubernetes.client.dsl.FilterNested; +import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; +import io.fabric8.kubernetes.client.dsl.Informable; +import io.fabric8.kubernetes.client.dsl.ItemWritableOperation; +import io.fabric8.kubernetes.client.dsl.MixedOperation; +import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; +import io.fabric8.kubernetes.client.dsl.Resource; +import io.fabric8.kubernetes.client.dsl.Watchable; +import io.fabric8.kubernetes.client.informers.ResourceEventHandler; +import io.fabric8.kubernetes.client.informers.SharedIndexInformer; + +import java.io.File; +import java.io.InputStream; +import java.net.URL; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Stream; + +public class ExtensibleMixedOperation> implements MixedOperation { + + protected final MixedOperation operation; + protected final Client client; + + public ExtensibleMixedOperation(Client client, MixedOperation operation) { + this.client = client; + this.operation = operation; + } + + @Override + public R withName(String name) { + return operation.withName(name); + } + + @Override + public NonNamespaceOperation inNamespace(String name) { + return operation.inNamespace(name); + } + + @Override + public T replaceStatus(T item) { + return operation.replaceStatus(item); + } + + @Override + public AnyNamespaceOperation inAnyNamespace() { + return operation.inAnyNamespace(); + } + + @Override + public Watchable withResourceVersion(String resourceVersion) { + return operation.withResourceVersion(resourceVersion); + } + + @Override + public L list() { + return operation.list(); + } + + @Override + public L list(Integer limitVal, String continueVal) { + return operation.list(limitVal, continueVal); + } + + @Override + public List delete() { + return operation.delete(); + } + + @Override + public T waitUntilReady(long amount, TimeUnit timeUnit) { + return operation.waitUntilReady(amount, timeUnit); + } + + @Override + public PropagationPolicyConfigurable withGracePeriod(long gracePeriodSeconds) { + return operation.withGracePeriod(gracePeriodSeconds); + } + + @Override + public T waitUntilCondition(Predicate condition, long amount, TimeUnit timeUnit) { + return operation.waitUntilCondition(condition, amount, timeUnit); + } + + @Override + public T createOrReplace(T item) { + return operation.createOrReplace(item); + } + + @Override + public Watch watch(Watcher watcher) { + return operation.watch(watcher); + } + + @Override + public GracePeriodConfigurable withPropagationPolicy(DeletionPropagation propagationPolicy) { + return operation.withPropagationPolicy(propagationPolicy); + } + + @Override + public FilterNested> withNewFilter() { + return operation.withNewFilter(); + } + + @Override + public T replace(T item) { + return operation.replace(item); + } + + @Override + public FilterWatchListDeletable withLabels(Map labels) { + return operation.withLabels(labels); + } + + @Override + public ItemWritableOperation dryRun() { + return operation.dryRun(); + } + + @Override + public FilterWatchListDeletable withoutLabels(Map labels) { + return operation.withoutLabels(labels); + } + + @Override + public DeletableWithOptions withTimeout(long timeout, TimeUnit unit) { + return operation.withTimeout(timeout, unit); + } + + @Override + public Watch watch(ListOptions options, Watcher watcher) { + return operation.watch(options, watcher); + } + + @Override + public L list(ListOptions listOptions) { + return operation.list(listOptions); + } + + @Override + public Informable withIndexers(Map>> indexers) { + return operation.withIndexers(indexers); + } + + @Override + public Stream resources() { + return operation.resources(); + } + + @Override + public DeletableWithOptions withTimeoutInMillis(long timeoutInMillis) { + return operation.withTimeoutInMillis(timeoutInMillis); + } + + @Override + public T create(T item) { + return operation.create(item); + } + + @Override + public FilterWatchListDeletable withLabelIn(String key, String... values) { + return operation.withLabelIn(key, values); + } + + @Override + public List delete(T item) { + return operation.delete(item); + } + + @Override + public FilterWatchListDeletable withLabelNotIn(String key, String... values) { + return operation.withLabelNotIn(key, values); + } + + @Override + public FilterWatchListDeletable withLabel(String key, String value) { + return operation.withLabel(key, value); + } + + @Override + public Informable withLimit(Long limit) { + return operation.withLimit(limit); + } + + @Override + public ItemWritableOperation dryRun(boolean isDryRun) { + return operation.dryRun(isDryRun); + } + + @Override + public FilterWatchListDeletable withLabel(String key) { + return operation.withLabel(key); + } + + @Override + public T updateStatus(T item) { + return operation.updateStatus(item); + } + + @Override + public FilterWatchListDeletable withoutLabel(String key, String value) { + return operation.withoutLabel(key, value); + } + + @Override + public Watch watch(String resourceVersion, Watcher watcher) { + return operation.watch(resourceVersion, watcher); + } + + @Override + public FilterWatchListDeletable withoutLabel(String key) { + return operation.withoutLabel(key); + } + + @Override + public FilterWatchListDeletable withFields(Map fields) { + return operation.withFields(fields); + } + + @Override + public FilterWatchListDeletable withField(String key, String value) { + return operation.withField(key, value); + } + + @Override + public FilterWatchListDeletable withoutFields(Map fields) { + return operation.withoutFields(fields); + } + + @Override + public T patchStatus(T item) { + return operation.patchStatus(item); + } + + @Override + public boolean delete(T... items) { + return operation.delete(items); + } + + @Override + public SharedIndexInformer inform() { + return operation.inform(); + } + + @Override + public FilterWatchListDeletable withoutField(String key, String value) { + return operation.withoutField(key, value); + } + + @Override + public FilterWatchListDeletable withLabelSelector(LabelSelector selector) { + return operation.withLabelSelector(selector); + } + + @Override + public boolean delete(List items) { + return operation.delete(items); + } + + @Override + public FilterWatchListDeletable withLabelSelector(String selectorAsString) { + return operation.withLabelSelector(selectorAsString); + } + + @Override + public FilterWatchListDeletable withInvolvedObject(ObjectReference objectReference) { + return operation.withInvolvedObject(objectReference); + } + + @Override + public R load(InputStream is) { + return operation.load(is); + } + + @Override + public R load(URL url) { + return operation.load(url); + } + + @Override + public SharedIndexInformer inform(ResourceEventHandler handler) { + return operation.inform(handler); + } + + @Override + public R load(File file) { + return operation.load(file); + } + + @Override + public R load(String path) { + return operation.load(path); + } + + @Override + public R resource(T item) { + return operation.resource(item); + } + + @Override + public SharedIndexInformer inform(ResourceEventHandler handler, long resync) { + return operation.inform(handler, resync); + } + + @Override + public SharedIndexInformer runnableInformer(long resync) { + return operation.runnableInformer(resync); + } + + @Override + public CompletableFuture> informOnCondition(Predicate> condition) { + return operation.informOnCondition(condition); + } + +} \ No newline at end of file diff --git a/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleResource.java b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleResource.java index 443a6f17d09..399bf477c91 100644 --- a/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleResource.java +++ b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleResource.java @@ -18,6 +18,7 @@ import io.fabric8.kubernetes.api.model.DeletionPropagation; import io.fabric8.kubernetes.client.Client; +import io.fabric8.kubernetes.client.OperationInfo; import io.fabric8.kubernetes.client.dsl.Nameable; import io.fabric8.kubernetes.client.dsl.Resource; import io.fabric8.kubernetes.client.dsl.WritableOperation; @@ -94,4 +95,14 @@ default WritableOperation withTimeoutInMillis(long timeoutInMillis) { return withTimeout(timeoutInMillis, TimeUnit.MILLISECONDS); } + OperationInfo forOperationType(String type); + + enum Scope { + NAMESPACE, + TYPE, + RESOURCE + } + + X operation(Scope scope, String method, Object payload, Class responseType, String... path); + } diff --git a/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleResourceAdapter.java b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleResourceAdapter.java index 26d5a1a9f78..50591a65948 100644 --- a/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleResourceAdapter.java +++ b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/extension/ExtensibleResourceAdapter.java @@ -18,6 +18,7 @@ import io.fabric8.kubernetes.api.model.DeletionPropagation; import io.fabric8.kubernetes.client.Client; +import io.fabric8.kubernetes.client.OperationInfo; import java.util.List; import java.util.Map; @@ -127,4 +128,14 @@ public ExtensibleResource withTimeoutInMillis(long timeoutInMillis) { return withTimeout(timeoutInMillis, TimeUnit.MILLISECONDS); } + @Override + public OperationInfo forOperationType(String type) { + return this.resource.forOperationType(type); + } + + @Override + public X operation(Scope scope, String method, Object payload, Class responseType, String... path) { + return this.resource.operation(scope, method, payload, responseType, path); + } + } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/BaseOperation.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/BaseOperation.java index 1fd26e7514a..35a8440b4c2 100755 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/BaseOperation.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/BaseOperation.java @@ -722,27 +722,43 @@ protected T handlePatch(PatchContext context, T current, T updated, boolean stat } protected Scale handleScale(Scale scaleParam) { - try { - return handleScale(getCompleteResourceUrl().toString(), scaleParam); - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - throw KubernetesClientException.launderThrowable(forOperationType("scale"), ie); - } catch (IOException e) { - throw KubernetesClientException.launderThrowable(forOperationType("scale"), e); - } - + return operation(Scope.RESOURCE, "PUT", scaleParam, Scale.class, "scale"); } protected Status handleDeploymentRollback(DeploymentRollback deploymentRollback) { + return operation(Scope.RESOURCE, "POST", deploymentRollback, Status.class, "rollback"); + } + + @Override + public X operation(Scope scope, String method, Object payload, Class responseType, String... path) { + String operationName = scope.name(); try { - return handleDeploymentRollback(getCompleteResourceUrl().toString(), deploymentRollback); - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - throw KubernetesClientException.launderThrowable(forOperationType("rollback"), ie); + URL baseUrl = null; + switch (scope) { + case NAMESPACE: + baseUrl = getNamespacedUrl(namespace, null); + break; + case TYPE: + baseUrl = getNamespacedUrl(); + break; + case RESOURCE: + baseUrl = getCompleteResourceUrl(); + break; + } + String uri = baseUrl.toString(); + if (path != null && path.length > 0) { + operationName = path[0]; + uri = Stream.concat(Stream.of(uri), Stream.of(path)).collect(Collectors.joining("/")); + } + HttpRequest.Builder requestBuilder = httpClient.newHttpRequestBuilder() + .uri(uri); + if (payload != null) { + requestBuilder.method(method, JSON, Serialization.asJson(payload)); + } + return handleResponse(requestBuilder, responseType); } catch (IOException e) { - throw KubernetesClientException.launderThrowable(forOperationType("rollback"), e); + throw KubernetesClientException.launderThrowable(forOperationType(operationName), e); } - } protected T handleGet(URL resourceUrl) throws InterruptedException, IOException { diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/OperationSupport.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/OperationSupport.java index da119314150..c6f1eb588b3 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/OperationSupport.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/OperationSupport.java @@ -25,8 +25,6 @@ import io.fabric8.kubernetes.api.model.Preconditions; import io.fabric8.kubernetes.api.model.Status; import io.fabric8.kubernetes.api.model.StatusBuilder; -import io.fabric8.kubernetes.api.model.autoscaling.v1.Scale; -import io.fabric8.kubernetes.api.model.extensions.DeploymentRollback; import io.fabric8.kubernetes.client.Client; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClientException; @@ -433,39 +431,6 @@ protected T handlePatch(PatchContext patchContext, T current, String patchFo return handleResponse(requestBuilder, type); } - /** - * Replace Scale of specified Kubernetes Resource - * - * @param resourceUrl Kubernetes resource URL - * @param scale Scale object which we want to inject - * @return updated Scale object - * @throws InterruptedException in case thread is interrupted - * @throws IOException in some other I/O problem - */ - protected Scale handleScale(String resourceUrl, Scale scale) throws InterruptedException, IOException { - HttpRequest.Builder requestBuilder = httpClient.newHttpRequestBuilder().uri(resourceUrl + "/scale"); - if (scale != null) { - requestBuilder.put(JSON, JSON_MAPPER.writeValueAsString(scale)); - } - return handleResponse(requestBuilder, Scale.class); - } - - /** - * Create rollback of a Deployment - * - * @param resourceUrl resource url - * @param deploymentRollback DeploymentRollback resource - * @return Status - * @throws InterruptedException in case thread is interrupted - * @throws IOException in some other I/O problem - */ - protected Status handleDeploymentRollback(String resourceUrl, DeploymentRollback deploymentRollback) - throws InterruptedException, IOException { - HttpRequest.Builder requestBuilder = httpClient.newHttpRequestBuilder().uri(resourceUrl + "/rollback").post(JSON, - JSON_MAPPER.writeValueAsString(deploymentRollback)); - return handleResponse(requestBuilder, Status.class); - } - /** * Send an http get. * @@ -550,7 +515,7 @@ protected T waitForResult(CompletableFuture future) throws IOException { * @throws InterruptedException Interrupted Exception * @throws IOException IOException */ - protected T handleResponse(HttpRequest.Builder requestBuilder, Class type) throws InterruptedException, IOException { + protected T handleResponse(HttpRequest.Builder requestBuilder, Class type) throws IOException { return handleResponse(requestBuilder, type, getParameters()); } @@ -801,9 +766,6 @@ public R1 restCall(Class result, String... path) { throw e; } return null; - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - throw KubernetesClientException.launderThrowable(ie); } catch (IOException e) { throw KubernetesClientException.launderThrowable(e); } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/core/v1/PodOperationsImpl.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/core/v1/PodOperationsImpl.java index 0f08a8ef655..f9705efd57f 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/core/v1/PodOperationsImpl.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/core/v1/PodOperationsImpl.java @@ -263,9 +263,6 @@ private boolean handleEvict(HasMetadata eviction) { return false; } catch (IOException exception) { throw KubernetesClientException.launderThrowable(forOperationType("evict"), exception); - } catch (InterruptedException interruptedException) { - Thread.currentThread().interrupt(); - throw KubernetesClientException.launderThrowable(forOperationType("evict"), interruptedException); } } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromClusterIPImpl.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromClusterIPImpl.java index 63f424ceaf3..47b4c8ae524 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromClusterIPImpl.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromClusterIPImpl.java @@ -19,7 +19,6 @@ import io.fabric8.kubernetes.api.model.ServicePort; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.ServiceToURLProvider; -import io.fabric8.kubernetes.client.utils.internal.URLFromServiceUtil; public class URLFromClusterIPImpl implements ServiceToURLProvider { @Override @@ -29,7 +28,7 @@ public int getPriority() { @Override public String getURL(Service service, String portName, String namespace, KubernetesClient client) { - ServicePort port = URLFromServiceUtil.getServicePortByName(service, portName); + ServicePort port = ServiceToURLProvider.getServicePortByName(service, portName); if (port != null && service.getSpec().getType().equals("ClusterIP")) { return port.getProtocol().toLowerCase() + "://" + service.getSpec().getClusterIP() + ":" + port.getPort(); } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromIngressImpl.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromIngressImpl.java index f049e54d38b..2d1c0ba7e10 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromIngressImpl.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromIngressImpl.java @@ -27,7 +27,7 @@ public class URLFromIngressImpl implements ServiceToURLProvider { @Override public String getURL(Service service, String portName, String namespace, KubernetesClient client) { - ServicePort port = URLFromServiceUtil.getServicePortByName(service, portName); + ServicePort port = ServiceToURLProvider.getServicePortByName(service, portName); String serviceName = service.getMetadata().getName(); if (port == null) { throw new RuntimeException("Couldn't find port: " + portName + " for service " + service.getMetadata().getName()); diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromNodePortImpl.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromNodePortImpl.java index 17a6b0f5e69..2ac13f77d09 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromNodePortImpl.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/impl/URLFromNodePortImpl.java @@ -20,7 +20,6 @@ import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientException; import io.fabric8.kubernetes.client.ServiceToURLProvider; -import io.fabric8.kubernetes.client.utils.internal.URLFromServiceUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,7 +30,7 @@ public class URLFromNodePortImpl implements ServiceToURLProvider { public static final Logger logger = LoggerFactory.getLogger(URLFromNodePortImpl.class); public String getURL(Service service, String portName, String namespace, KubernetesClient client) { - ServicePort port = URLFromServiceUtil.getServicePortByName(service, portName); + ServicePort port = ServiceToURLProvider.getServicePortByName(service, portName); String serviceProto = port.getProtocol(); NodePortUrlComponents urlComponents = null; Integer nodePort = port.getNodePort(); diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/utils/internal/URLFromServiceUtil.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/utils/internal/URLFromServiceUtil.java index 92be6e1bb27..45dbe3a82f9 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/utils/internal/URLFromServiceUtil.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/utils/internal/URLFromServiceUtil.java @@ -16,8 +16,17 @@ package io.fabric8.kubernetes.client.utils.internal; -import io.fabric8.kubernetes.api.model.*; -import io.fabric8.kubernetes.api.model.extensions.*; +import io.fabric8.kubernetes.api.model.HasMetadata; +import io.fabric8.kubernetes.api.model.IntOrString; +import io.fabric8.kubernetes.api.model.ObjectMeta; +import io.fabric8.kubernetes.api.model.ServicePort; +import io.fabric8.kubernetes.api.model.extensions.HTTPIngressPath; +import io.fabric8.kubernetes.api.model.extensions.HTTPIngressRuleValue; +import io.fabric8.kubernetes.api.model.extensions.Ingress; +import io.fabric8.kubernetes.api.model.extensions.IngressBackend; +import io.fabric8.kubernetes.api.model.extensions.IngressRule; +import io.fabric8.kubernetes.api.model.extensions.IngressSpec; +import io.fabric8.kubernetes.client.utils.KubernetesResourceUtil; import io.fabric8.kubernetes.client.utils.URLUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -181,23 +190,6 @@ private static boolean portsMatch(ServicePort servicePort, IntOrString intOrStri } public static String getNamespace(HasMetadata entity) { - if (entity != null) { - return entity.getMetadata() != null ? entity.getMetadata().getNamespace() : null; - } else { - return null; - } - } - - public static ServicePort getServicePortByName(Service service, String portName) { - if (portName.isEmpty()) { - return service.getSpec().getPorts().iterator().next(); - } - - for (ServicePort servicePort : service.getSpec().getPorts()) { - if (Objects.equals(servicePort.getName(), portName)) { - return servicePort; - } - } - return null; + return KubernetesResourceUtil.getNamespace(entity); } } diff --git a/openshift-client/pom.xml b/openshift-client/pom.xml index e084f917f51..e2d9469f072 100644 --- a/openshift-client/pom.xml +++ b/openshift-client/pom.xml @@ -110,7 +110,6 @@ org.slf4j slf4j-simple - ${slf4j.version} test diff --git a/openshift-client/src/main/java/io/fabric8/openshift/client/dsl/internal/project/ProjectOperationsImpl.java b/openshift-client/src/main/java/io/fabric8/openshift/client/dsl/internal/project/ProjectOperationsImpl.java index 9d68bb90391..87bf780cf63 100644 --- a/openshift-client/src/main/java/io/fabric8/openshift/client/dsl/internal/project/ProjectOperationsImpl.java +++ b/openshift-client/src/main/java/io/fabric8/openshift/client/dsl/internal/project/ProjectOperationsImpl.java @@ -19,11 +19,10 @@ import io.fabric8.kubernetes.api.model.rbac.RoleBinding; import io.fabric8.kubernetes.api.model.rbac.RoleBindingBuilder; import io.fabric8.kubernetes.client.Client; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.Resource; -import io.fabric8.kubernetes.client.dsl.internal.HasMetadataOperation; -import io.fabric8.kubernetes.client.dsl.internal.HasMetadataOperationsImpl; -import io.fabric8.kubernetes.client.dsl.internal.NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableListImpl; -import io.fabric8.kubernetes.client.dsl.internal.OperationContext; +import io.fabric8.kubernetes.client.extension.ExtensibleMixedOperation; import io.fabric8.openshift.api.model.Project; import io.fabric8.openshift.api.model.ProjectBuilder; import io.fabric8.openshift.api.model.ProjectList; @@ -32,33 +31,18 @@ import java.util.ArrayList; import java.util.List; -import static io.fabric8.openshift.client.OpenShiftAPIGroups.PROJECT; - -public class ProjectOperationsImpl extends HasMetadataOperation> +public class ProjectOperationsImpl extends ExtensibleMixedOperation> implements ProjectOperation { + public static final String OPENSHIFT_IO_DESCRIPTION_ANNOTATION = "openshift.io/description"; public static final String OPENSHIFT_IO_DISPLAY_NAME_ANNOTATION = "openshift.io/display-name"; public static final String OPENSHIFT_IO_REQUESTER_ANNOTATION = "openshift.io/requester"; public static final String RBAC_AUTHORIZATION_APIGROUP = "rbac.authorization.k8s.io"; public static final String CLUSTER_ROLE = "ClusterRole"; - public ProjectOperationsImpl(Client client) { - this(HasMetadataOperationsImpl.defaultContext(client)); - } - - public ProjectOperationsImpl(OperationContext context) { - super(context.withApiGroupName(PROJECT) - .withPlural("projects"), Project.class, ProjectList.class); - } - - @Override - public ProjectOperationsImpl newInstance(OperationContext context) { - return new ProjectOperationsImpl(context); - } - - @Override - public boolean isResourceNamespaced() { - return false; + public ProjectOperationsImpl(Client client, + MixedOperation> resources) { + super(client, resources); } @Override @@ -72,9 +56,7 @@ public List createProjectAndRoleBindings(String name, String descri result.add(create(project)); // Create Role Bindings - NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableListImpl listOp = new NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableListImpl( - context.withItem(projectRoleBindings)); - result.addAll(listOp.createOrReplace()); + result.addAll(this.client.adapt(KubernetesClient.class).resourceList(projectRoleBindings).createOrReplace()); return result; } @@ -173,4 +155,4 @@ private List initRoleBindings(String name, String adminUser) { return resources; } -} +} \ No newline at end of file diff --git a/openshift-client/src/main/java/io/fabric8/openshift/client/impl/OpenShiftClientImpl.java b/openshift-client/src/main/java/io/fabric8/openshift/client/impl/OpenShiftClientImpl.java index 3931bbdc252..f721b7e7e14 100644 --- a/openshift-client/src/main/java/io/fabric8/openshift/client/impl/OpenShiftClientImpl.java +++ b/openshift-client/src/main/java/io/fabric8/openshift/client/impl/OpenShiftClientImpl.java @@ -98,6 +98,8 @@ import io.fabric8.openshift.api.model.PodSecurityPolicyReview; import io.fabric8.openshift.api.model.PodSecurityPolicySelfSubjectReview; import io.fabric8.openshift.api.model.PodSecurityPolicySubjectReview; +import io.fabric8.openshift.api.model.Project; +import io.fabric8.openshift.api.model.ProjectList; import io.fabric8.openshift.api.model.ProjectRequest; import io.fabric8.openshift.api.model.RangeAllocation; import io.fabric8.openshift.api.model.RangeAllocationList; @@ -447,7 +449,7 @@ public NamespacedInOutCreateable