-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Complete alignment between fabric8 and k8s discovery clients #1500
Merged
ryanjbaxter
merged 28 commits into
spring-cloud:3.0.x
from
wind57:align-fabric8-k8s-discovery-clients-part-3
Nov 14, 2023
Merged
Changes from 23 commits
Commits
Show all changes
28 commits
Select commit
Hold shift + click to select a range
fad373c
correct order
wind57 eb7a681
checkstyle
wind57 042e722
trigger
wind57 8efbd58
fix test
wind57 57fc9c3
trigger
wind57 598c46e
drop a record used internally only
wind57 f0c59c0
Merge branch 'align-fabric8-k8s-discovery-clients-part-1' into align-…
wind57 01165e6
dirty
wind57 952a5c9
dirty
wind57 edd5bd4
dirty
wind57 fa77594
Merge branch '3.0.x' into align-fabric8-k8s-discovery-clients-part-3
wind57 a17e1c7
dirty
wind57 45ca67b
dirty
wind57 9ac791d
Merge branch '3.0.x' into align-fabric8-k8s-discovery-clients-part-3
wind57 39dd56c
before tests and IT
wind57 1ffe776
started working on tests
wind57 f6a22e1
started working on tests
wind57 77da363
merge 3.0.x
wind57 dba5c67
added one more tests
wind57 8463067
before integration tests
wind57 f986628
fix checkstyle
wind57 847ae34
started work on integration tests
wind57 485e39e
integration tests
wind57 f0c3bcd
fix test
wind57 b2a56ac
fix test
wind57 c2039fd
checkstyle
wind57 80a0380
fix test
wind57 1cd547f
fix test
wind57 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
78 changes: 78 additions & 0 deletions
78
...g/springframework/cloud/kubernetes/client/discovery/K8sInstanceIdHostPodNameSupplier.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
/* | ||
* Copyright 2013-2023 the original author or authors. | ||
* | ||
* 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 | ||
* | ||
* https://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 org.springframework.cloud.kubernetes.client.discovery; | ||
|
||
import java.util.Optional; | ||
import java.util.function.Supplier; | ||
|
||
import io.kubernetes.client.openapi.models.V1EndpointAddress; | ||
import io.kubernetes.client.openapi.models.V1ObjectReference; | ||
import io.kubernetes.client.openapi.models.V1Service; | ||
|
||
import org.springframework.cloud.kubernetes.commons.discovery.InstanceIdHostPodName; | ||
|
||
/** | ||
* @author wind57 | ||
*/ | ||
final class K8sInstanceIdHostPodNameSupplier implements Supplier<InstanceIdHostPodName> { | ||
|
||
private final V1EndpointAddress endpointAddress; | ||
|
||
private final V1Service service; | ||
|
||
private K8sInstanceIdHostPodNameSupplier(V1EndpointAddress endpointAddress, V1Service service) { | ||
this.endpointAddress = endpointAddress; | ||
this.service = service; | ||
} | ||
|
||
@Override | ||
public InstanceIdHostPodName get() { | ||
return new InstanceIdHostPodName(instanceId(), host(), podName()); | ||
} | ||
|
||
/** | ||
* to be used when .spec.type of the Service is != 'ExternalName'. | ||
*/ | ||
static K8sInstanceIdHostPodNameSupplier nonExternalName(V1EndpointAddress endpointAddress, V1Service service) { | ||
return new K8sInstanceIdHostPodNameSupplier(endpointAddress, service); | ||
} | ||
|
||
/** | ||
* to be used when .spec.type of the Service is == 'ExternalName'. | ||
*/ | ||
static K8sInstanceIdHostPodNameSupplier externalName(V1Service service) { | ||
return new K8sInstanceIdHostPodNameSupplier(null, service); | ||
} | ||
|
||
// instanceId is usually the pod-uid as seen in the .metadata.uid | ||
private String instanceId() { | ||
return Optional.ofNullable(endpointAddress).map(V1EndpointAddress::getTargetRef).map(V1ObjectReference::getUid) | ||
.orElseGet(() -> service.getMetadata().getUid()); | ||
} | ||
|
||
private String host() { | ||
return Optional.ofNullable(endpointAddress).map(V1EndpointAddress::getIp) | ||
.orElseGet(() -> service.getSpec().getExternalName()); | ||
} | ||
|
||
private String podName() { | ||
return Optional.ofNullable(endpointAddress).map(V1EndpointAddress::getTargetRef) | ||
.filter(objectReference -> "Pod".equals(objectReference.getKind())).map(V1ObjectReference::getName) | ||
.orElse(null); | ||
} | ||
|
||
} |
80 changes: 80 additions & 0 deletions
80
...springframework/cloud/kubernetes/client/discovery/K8sPodLabelsAndAnnotationsSupplier.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* | ||
* Copyright 2013-2023 the original author or authors. | ||
* | ||
* 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 | ||
* | ||
* https://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 org.springframework.cloud.kubernetes.client.discovery; | ||
|
||
import java.util.Map; | ||
import java.util.Optional; | ||
import java.util.function.Function; | ||
|
||
import io.kubernetes.client.openapi.ApiException; | ||
import io.kubernetes.client.openapi.apis.CoreV1Api; | ||
import io.kubernetes.client.openapi.models.V1ObjectMeta; | ||
import io.kubernetes.client.openapi.models.V1ObjectMetaBuilder; | ||
import org.apache.commons.logging.LogFactory; | ||
|
||
import org.springframework.cloud.kubernetes.commons.discovery.PodLabelsAndAnnotations; | ||
import org.springframework.core.log.LogAccessor; | ||
|
||
/** | ||
* @author wind57 | ||
*/ | ||
final class K8sPodLabelsAndAnnotationsSupplier implements Function<String, PodLabelsAndAnnotations> { | ||
|
||
private static final LogAccessor LOG = new LogAccessor(LogFactory.getLog(K8sPodLabelsAndAnnotationsSupplier.class)); | ||
|
||
private final CoreV1Api coreV1Api; | ||
|
||
private final String namespace; | ||
|
||
private K8sPodLabelsAndAnnotationsSupplier(CoreV1Api coreV1Api, String namespace) { | ||
this.coreV1Api = coreV1Api; | ||
this.namespace = namespace; | ||
} | ||
|
||
/** | ||
* to be used when .spec.type of the Service is != 'ExternalName'. | ||
*/ | ||
static K8sPodLabelsAndAnnotationsSupplier nonExternalName(CoreV1Api coreV1Api, String namespace) { | ||
return new K8sPodLabelsAndAnnotationsSupplier(coreV1Api, namespace); | ||
} | ||
|
||
/** | ||
* to be used when .spec.type of the Service is == 'ExternalName'. | ||
*/ | ||
static K8sPodLabelsAndAnnotationsSupplier externalName() { | ||
return new K8sPodLabelsAndAnnotationsSupplier(null, null); | ||
} | ||
|
||
@Override | ||
public PodLabelsAndAnnotations apply(String podName) { | ||
|
||
V1ObjectMeta objectMeta; | ||
|
||
try { | ||
objectMeta = Optional.ofNullable(coreV1Api.readNamespacedPod(podName, namespace, null).getMetadata()) | ||
.orElse(new V1ObjectMetaBuilder().withLabels(Map.of()).withAnnotations(Map.of()).build()); | ||
} | ||
catch (ApiException e) { | ||
LOG.warn(e, "Could not get pod metadata"); | ||
objectMeta = new V1ObjectMetaBuilder().withLabels(Map.of()).withAnnotations(Map.of()).build(); | ||
} | ||
|
||
return new PodLabelsAndAnnotations(Optional.ofNullable(objectMeta.getLabels()).orElse(Map.of()), | ||
Optional.ofNullable(objectMeta.getAnnotations()).orElse(Map.of())); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
a fabric8 equivalent of this was introduced a while ago, time to do the same for k8s-client