public static <T extends HasMetadata, L extends KubernetesResourceList, D extends Doneable<T>>
void applyIfDifferent(File resourceDir,
NonNamespaceOperation<T, L, D, Resource<T, D>> operation,
Class<T> resourceClass,
Comparator<T> comparator) {
if (resourceDir.isDirectory()) {
File[] files = resourceDir.listFiles();
if (files != null) {
for (File file : files) {
T newResource = readAndParse(file, resourceClass);
if (newResource != null) {
T currentResource = operation.withName(newResource.getMetadata().getName()).get();
if (currentResource == null) {
log.info("Creating {} {}", newResource.getKind(), newResource.getMetadata().getName());
operation.create(newResource);
} else if (comparator.compare(currentResource, newResource) != 0) {
log.info("Updating {} {}", newResource.getKind(), newResource.getMetadata().getName());
operation.createOrReplace(newResource);
}
}
}
}
}
}