Skip to content

Commit

Permalink
Print valid api versions when specifying one in K8s Client Dev Services
Browse files Browse the repository at this point in the history
Plus, accept api-versions that use either the major version `v1` only or both the major and the minor versions `v1.22`. 

Fix quarkusio#33007
  • Loading branch information
Sgitario committed May 2, 2023
1 parent 032e041 commit 4e32f4a
Showing 1 changed file with 15 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import java.util.Objects;
import java.util.Optional;
import java.util.function.Supplier;
import java.util.stream.Stream;
import java.util.stream.Collectors;

import org.jboss.logging.Logger;
import org.testcontainers.DockerClientFactory;
Expand Down Expand Up @@ -199,17 +199,19 @@ private RunningDevService startKubernetes(DockerStatusBuildItem dockerStatusBuil
switch (config.flavor) {
case API_ONLY:
container = new ApiServerContainer(
config.apiVersion.map(version -> findOrElseThrow(version, ApiServerContainerVersion.class))
config.apiVersion
.map(version -> findOrElseThrow(config.flavor, version, ApiServerContainerVersion.class))
.orElseGet(() -> latest(ApiServerContainerVersion.class)));
break;
case K3S:
container = new K3sContainer(
config.apiVersion.map(version -> findOrElseThrow(version, K3sContainerVersion.class))
config.apiVersion.map(version -> findOrElseThrow(config.flavor, version, K3sContainerVersion.class))
.orElseGet(() -> latest(K3sContainerVersion.class)));
break;
case KIND:
container = new KindContainer(
config.apiVersion.map(version -> findOrElseThrow(version, KindContainerVersion.class))
config.apiVersion
.map(version -> findOrElseThrow(config.flavor, version, KindContainerVersion.class))
.orElseGet(() -> latest(KindContainerVersion.class)));
break;
default:
Expand Down Expand Up @@ -241,12 +243,17 @@ private RunningDevService startKubernetes(DockerStatusBuildItem dockerStatusBuil
.orElseGet(defaultKubernetesClusterSupplier);
}

<T extends KubernetesVersionEnum<T>> T findOrElseThrow(final String version, final Class<T> versions) {
<T extends KubernetesVersionEnum<T>> T findOrElseThrow(final Flavor flavor, final String version, final Class<T> versions) {
final String versionWithPrefix = !version.startsWith("v") ? "v" + version : version;
return Stream.of(versions.getEnumConstants())
.filter(v -> v.descriptor().getKubernetesVersion().equalsIgnoreCase(versionWithPrefix))
return KubernetesVersionEnum.ascending(versions)
.stream()
.filter(v -> v.descriptor().getKubernetesVersion().startsWith(versionWithPrefix))
.findFirst()
.orElseThrow();
.orElseThrow(() -> new IllegalArgumentException(
String.format("Invalid API version '%s' for flavor '%s'. Options are: [%s]", versionWithPrefix, flavor,
KubernetesVersionEnum.ascending(versions).stream()
.map(v -> v.descriptor().getKubernetesVersion())
.collect(Collectors.joining(", ")))));
}

private Map<String, String> getKubernetesClientConfigFromKubeConfig(KubeConfig kubeConfig) {
Expand Down

0 comments on commit 4e32f4a

Please sign in to comment.