EntandoKubernetesResourceCollector.java
package org.entando.kubernetes.service;
import io.fabric8.kubernetes.api.model.HasMetadata;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.entando.kubernetes.model.namespace.ObservedNamespaces;
@Slf4j
@RequiredArgsConstructor
public abstract class EntandoKubernetesResourceCollector<T extends HasMetadata> {
protected final KubernetesUtils kubernetesUtils;
protected final ObservedNamespaces observedNamespaces;
public List<T> getAll() {
if (observedNamespaces.isClusterScoped()) {
return getInAnyNamespace();
} else {
return collectFromNamespaces(observedNamespaces.getNames());
}
}
public List<T> getAllInNamespace(String namespace) {
return getInNamespaceWithoutChecking(namespace);
}
protected abstract List<T> getInAnyNamespace();
protected abstract List<T> getInNamespaceWithoutChecking(String namespace);
public List<T> collectFromNamespaces(List<String> namespaceList) {
return namespaceList.stream().flatMap(ns -> getAllInNamespace(ns).stream()).collect(Collectors.toList());
}
public Optional<T> findByName(String name) {
return getAll().stream().filter(r -> r.getMetadata().getName().equals(name)).findFirst();
}
public Optional<T> findByNameAndNamespace(String name, String namespace) {
return getAllInNamespace(namespace)
.stream()
.filter(r -> r.getMetadata().getName().equals(name))
.findFirst();
}
public Optional<T> findByNameAndDefaultNamespace(String name) {
final String namespace = kubernetesUtils.getDefaultPluginNamespace();
return getAllInNamespace(namespace)
.stream()
.filter(r -> r.getMetadata().getName().equals(name))
.findFirst();
}
}