Skip to content

Commit

Permalink
Add first version of a Fabric8 Kubernetes Client extension
Browse files Browse the repository at this point in the history
  • Loading branch information
geoand committed Jun 21, 2019
1 parent a8452a1 commit 8be594c
Show file tree
Hide file tree
Showing 16 changed files with 535 additions and 5 deletions.
16 changes: 16 additions & 0 deletions bom/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@
<hibernate-quarkus-local-cache.version>0.1.0</hibernate-quarkus-local-cache.version>
<kogito.version>0.1.2</kogito.version>
<swagger.version>1.5.21</swagger.version>
<kubernetes-client.version>4.3.0</kubernetes-client.version>
</properties>

<dependencyManagement>
Expand Down Expand Up @@ -519,6 +520,11 @@
<artifactId>quarkus-kubernetes</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-client</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-keycloak</artifactId>
Expand Down Expand Up @@ -2062,6 +2068,16 @@
<artifactId>swagger-annotations</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>${kubernetes-client.version}</version>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-server-mock</artifactId>
<version>${kubernetes-client.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
10 changes: 10 additions & 0 deletions build-parent/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -711,6 +711,16 @@
<artifactId>quarkus-kubernetes-spi</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-client</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-client-deployment</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-flyway</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
public final class FeatureBuildItem extends MultiBuildItem {

public static final String AGROAL = "agroal";
public static final String KUBERNETES = "kubernetes";
public static final String CAMEL_CORE = "camel-core";
public static final String CAMEL_INFINISPAN = "camel-infinispan";
public static final String CAMEL_AWS_S3 = "camel-aws-s3";
Expand All @@ -36,6 +35,8 @@ public final class FeatureBuildItem extends MultiBuildItem {
public static final String KEYCLOAK = "keycloak";
public static final String KOGITO = "kogito";
public static final String KOTLIN = "kotlin";
public static final String KUBERNETES = "kubernetes";
public static final String KUBERNETES_CLIENT = "kubernetes-client";
public static final String MAILER = "mailer";
public static final String NARAYANA_JTA = "narayana-jta";
public static final String REACTIVE_PG_CLIENT = "reactive-pg-client";
Expand Down
16 changes: 12 additions & 4 deletions devtools/common/src/main/filtered/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@
"artifactId": "quarkus-arc",
"guide": "https://quarkus.io/guides/cdi-reference"
},
{
"name": "AWS Lambda",
"labels": [
"lambda",
"aws"
],
"groupId": "io.quarkus",
"artifactId": "quarkus-amazon-lambda"
},
{
"name": "Camel Core",
"labels": [
Expand Down Expand Up @@ -220,13 +229,12 @@
"guide": "https://quarkus.io/guides/kubernetes-guide"
},
{
"name": "AWS Lambda",
"name": "Kubernetes Client",
"labels": [
"lambda",
"aws"
"kubernetes-client"
],
"groupId": "io.quarkus",
"artifactId": "quarkus-amazon-lambda"
"artifactId": "quarkus-kubernetes-client"
},
{
"name": "Narayana JTA - Transaction manager",
Expand Down
42 changes: 42 additions & 0 deletions extensions/kubernetes-client/deployment/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>quarkus-kubernetes-client-parent</artifactId>
<groupId>io.quarkus</groupId>
<version>999-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>quarkus-kubernetes-client-deployment</artifactId>
<name>Quarkus - Kubernetes Client - Deployment</name>

<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-core-deployment</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-client</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-extension-processor</artifactId>
<version>${project.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package io.quarkus.kubernetes.client.deployment;

import javax.inject.Inject;

import org.jboss.jandex.DotName;

import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.substrate.ReflectiveClassBuildItem;

public class KubernetesClientProcessor {

@Inject
BuildProducer<FeatureBuildItem> featureProducer;

@Inject
BuildProducer<ReflectiveClassBuildItem> reflectiveClasses;

@BuildStep
public void process(CombinedIndexBuildItem combinedIndexBuildItem,
BuildProducer<ExtensionSslNativeSupportBuildItem> sslNativeSupport) {
featureProducer.produce(new FeatureBuildItem(FeatureBuildItem.KUBERNETES_CLIENT));

final String[] modelClasses = combinedIndexBuildItem.getIndex()
.getAllKnownImplementors(DotName.createSimple("io.fabric8.kubernetes.api.model.KubernetesResource"))
.stream()
.map(c -> c.name().toString())
.toArray(String[]::new);
reflectiveClasses.produce(ReflectiveClassBuildItem.weakClass(modelClasses));

final String[] doneables = combinedIndexBuildItem.getIndex()
.getAllKnownImplementors(DotName.createSimple("io.fabric8.kubernetes.api.model.Doneable"))
.stream()
.map(c -> c.name().toString())
.toArray(String[]::new);
reflectiveClasses.produce(ReflectiveClassBuildItem.weakClass(doneables));

final String[] deserializerClasses = combinedIndexBuildItem.getIndex()
.getAllKnownSubclasses(DotName.createSimple("com.fasterxml.jackson.databind.JsonDeserializer"))
.stream()
.map(c -> c.name().toString())
.filter(s -> s.startsWith("io.fabric8.kubernetes"))
.toArray(String[]::new);
reflectiveClasses.produce(new ReflectiveClassBuildItem(true, false, deserializerClasses));

reflectiveClasses
.produce(new ReflectiveClassBuildItem(true, false, "io.fabric8.kubernetes.internal.KubernetesDeserializer"));

// Enable SSL support by default
sslNativeSupport.produce(new ExtensionSslNativeSupportBuildItem(FeatureBuildItem.KUBERNETES_CLIENT));
}
}
20 changes: 20 additions & 0 deletions extensions/kubernetes-client/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>quarkus-build-parent</artifactId>
<groupId>io.quarkus</groupId>
<version>999-SNAPSHOT</version>
<relativePath>../../build-parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>quarkus-kubernetes-client-parent</artifactId>
<name>Quarkus - Kubernetes- Client</name>
<packaging>pom</packaging>
<modules>
<module>deployment</module>
<module>runtime</module>
</modules>
</project>
53 changes: 53 additions & 0 deletions extensions/kubernetes-client/runtime/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-client-parent</artifactId>
<version>999-SNAPSHOT</version>
</parent>

<artifactId>quarkus-kubernetes-client</artifactId>
<name>Quarkus - Kubernetes Client - Runtime</name>

<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-core</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.substratevm</groupId>
<artifactId>svm</artifactId>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-bootstrap-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-extension-processor</artifactId>
<version>${project.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>


</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.quarkus.kubernetes.client.runtime.graal;

import java.io.IOException;
import java.io.InputStream;
import java.security.PrivateKey;

import com.oracle.svm.core.annotate.Substitute;
import com.oracle.svm.core.annotate.TargetClass;

@TargetClass(className = "io.fabric8.kubernetes.client.internal.CertUtils")
public final class CertUtilsSubstitutions {

// take out this method so we can run the native image without '--allow-incomplete-classpath'
@Substitute
static PrivateKey handleECKey(InputStream keyInputStream) throws IOException {
throw new RuntimeException("EC Keys are not supported when using the native binary");
}
}
1 change: 1 addition & 0 deletions extensions/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@

<!-- Kubernetes -->
<module>kubernetes</module>
<module>kubernetes-client</module>

<!-- Database migrations -->
<module>flyway</module>
Expand Down
Loading

0 comments on commit 8be594c

Please sign in to comment.