Skip to content

Commit

Permalink
Merge pull request #34487 from radcortez/fix-34025
Browse files Browse the repository at this point in the history
Fallback specialized kubernetes config to vanilla kubernetes
  • Loading branch information
radcortez authored Aug 2, 2023
2 parents f78c8a9 + 154221b commit 411e594
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 15 deletions.
5 changes: 5 additions & 0 deletions extensions/kubernetes/openshift/deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@
<artifactId>quarkus-junit5-internal</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.smallrye.config</groupId>
<artifactId>smallrye-config-source-yaml</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package io.quarkus.openshift.deployment.config;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;

import java.nio.file.Path;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.test.ProdBuildResults;
import io.quarkus.test.ProdModeTestResults;
import io.quarkus.test.QuarkusProdModeTest;
import io.smallrye.config.source.yaml.YamlConfigSource;

public class OpenshiftConfigFallbackTest {
@RegisterExtension
static final QuarkusProdModeTest TEST = new QuarkusProdModeTest()
.setApplicationName("config")
.setApplicationVersion("0.1-SNAPSHOT")
.overrideConfigKey("quarkus.kubernetes.replicas", "10")
.overrideConfigKey("quarkus.openshift.version", "999-SNAPSHOT")
.overrideConfigKey("quarkus.openshift.labels.app", "openshift")
.setRun(true);

@ProdBuildResults
private ProdModeTestResults prodModeTestResults;

@Test
void configFallback() throws Exception {
Path kubernetesDir = prodModeTestResults.getBuildDir().resolve("kubernetes");
YamlConfigSource kubernetes = new YamlConfigSource(kubernetesDir.resolve("kubernetes.yml").toUri().toURL());
YamlConfigSource openshift = new YamlConfigSource(kubernetesDir.resolve("openshift.yml").toUri().toURL());

// Only in Kubernetes, must fallback to Openshift
assertEquals("10", kubernetes.getValue("spec.replicas"));
assertEquals("10", openshift.getValue("spec.replicas"));

// In both, each should retain the value
assertEquals("0.1-SNAPSHOT", kubernetes.getValue("spec.template.metadata.labels.\"app.kubernetes.io/version\""));
assertEquals("999-SNAPSHOT", openshift.getValue("spec.template.metadata.labels.\"app.kubernetes.io/version\""));

// Only in Openshift
assertNull(kubernetes.getValue("spec.template.metadata.labels.app"));
assertEquals("openshift", openshift.getValue("spec.template.metadata.labels.app"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
import io.quarkus.container.image.deployment.ContainerImageConfig;
import io.quarkus.container.image.deployment.util.ImageUtil;
import io.quarkus.container.spi.BaseImageInfoBuildItem;
import io.quarkus.container.spi.ContainerImageCustomNameBuildItem;
import io.quarkus.container.spi.ContainerImageInfoBuildItem;
import io.quarkus.container.spi.ContainerImageLabelBuildItem;
import io.quarkus.container.spi.FallbackContainerImageRegistryBuildItem;
Expand Down Expand Up @@ -102,12 +101,6 @@ public void checkOpenshift(ApplicationInfoBuildItem applicationInfo, Capabilitie
}
}

@BuildStep
public void populateCustomImageName(OpenshiftConfig openshiftConfig,
BuildProducer<ContainerImageCustomNameBuildItem> containerImageCustomName) {
openshiftConfig.name.ifPresent(name -> containerImageCustomName.produce(new ContainerImageCustomNameBuildItem(name)));
}

@BuildStep
public void populateInternalRegistry(OpenshiftConfig openshiftConfig, ContainerImageConfig containerImageConfig,
Capabilities capabilities,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.quarkus.kubernetes.runtime.config;

import java.util.function.Function;

import io.smallrye.config.FallbackConfigSourceInterceptor;

public class KubernetesConfigFallback extends FallbackConfigSourceInterceptor {
private static final String QUARKUS_KUBERNETES_CONFIG_PREFIX = "quarkus.kubernetes.";
private static final String QUARKUS_OPENSHIFT_CONFIG_PREFIX = "quarkus.openshift.";
private static final int OPENSHIFT_CONFIG_NAME_BEGIN = QUARKUS_OPENSHIFT_CONFIG_PREFIX.length();
private static final String QUARKUS_KNATIVE_CONFIG_PREFIX = "quarkus.knative.";
private static final int KNATIVE_CONFIG_NAME_BEGIN = QUARKUS_KNATIVE_CONFIG_PREFIX.length();

public KubernetesConfigFallback() {
super(new Function<String, String>() {
@Override
public String apply(final String name) {
if (name.startsWith(QUARKUS_OPENSHIFT_CONFIG_PREFIX)) {
return QUARKUS_KUBERNETES_CONFIG_PREFIX + name.substring(OPENSHIFT_CONFIG_NAME_BEGIN);
} else if (name.startsWith(QUARKUS_KNATIVE_CONFIG_PREFIX)) {
return QUARKUS_KUBERNETES_CONFIG_PREFIX + name.substring(KNATIVE_CONFIG_NAME_BEGIN);
}
return name;
}
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
io.quarkus.kubernetes.runtime.config.KubernetesConfigFallback
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,6 @@ public void assertGeneratedResources() throws IOException {
assertThat(t.getMetadata()).satisfies(metadata -> assertThat(metadata.getLabels()).containsAnyOf(
entry("app.kubernetes.io/name", CUSTOM_NAME),
entry("app.kubernetes.io/version", "0.1-SNAPSHOT")));

assertThat(t.getSpec()).satisfies(podSpec -> {
assertThat(podSpec.getContainers()).singleElement().satisfies(container -> {
assertThat(container.getImage())
.isEqualTo(
"testme/" + CUSTOM_NAME + ":0.1-SNAPSHOT");
});
});
});
});
});
Expand Down

0 comments on commit 411e594

Please sign in to comment.