Skip to content

Commit

Permalink
Support Quarkus 3
Browse files Browse the repository at this point in the history
  • Loading branch information
Sgitario committed Apr 20, 2023
1 parent ec1bf13 commit 35645b6
Show file tree
Hide file tree
Showing 15 changed files with 227 additions and 114 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ The documentation for this extension can be found [here](https://quarkiverse.git

| Quarkus Cert-Manager Version | Quarkus Version |
|---|---|
| 0.1.0 | Quarkus 3+ |
| 0.0.2 | Quarkus 2.12+ |
| 0.0.1 | Quarkus 2.12+ |

Expand Down
5 changes: 4 additions & 1 deletion deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@
<dependency>
<groupId>io.dekorate</groupId>
<artifactId>certmanager-annotations</artifactId>
<classifier>noapt</classifier>
<!-- Workaround for: https://github.com/dekorateio/dekorate/pull/1189 -->
<!-- To be revert in Quarkus 3.1, when Quarkus uses Dekorate 3.5.5+ -->
<!-- <classifier>noapt</classifier> -->
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>io.dekorate</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,15 @@ public class CertManagerProcessor {
private static final Logger LOGGER = Logger.getLogger(CertManagerProcessor.class);

@BuildStep
FeatureBuildItem feature(Capabilities capabilities, ApplicationInfoBuildItem applicationInfo, CertificateConfig config,
public FeatureBuildItem feature(Capabilities capabilities, ApplicationInfoBuildItem applicationInfo,
CertificateConfig config,
BuildProducer<ConfigurationSupplierBuildItem> configurationSupplier,
BuildProducer<DecoratorBuildItem> decorators) {
validate(config);
configureDekorateToGenerateCertManagerResources(config, configurationSupplier);
configureSecuredEndpoints(capabilities, applicationInfo, config, decorators);
String name = getResourceName(capabilities, applicationInfo);

configureDekorateToGenerateCertManagerResources(name, config, configurationSupplier);
configureSecuredEndpoints(name, capabilities, config, decorators);
return new FeatureBuildItem(FEATURE);
}

Expand All @@ -74,36 +77,36 @@ private void validate(CertificateConfig config) {
}
}

private static void configureSecuredEndpoints(Capabilities capabilities, ApplicationInfoBuildItem applicationInfo,
CertificateConfig config, BuildProducer<DecoratorBuildItem> decorators) {
private static void configureSecuredEndpoints(String name, Capabilities capabilities, CertificateConfig config,
BuildProducer<DecoratorBuildItem> decorators) {
if (config.autoconfigure() == AutoConfigureMode.NONE) {
return;
}

if (config.autoconfigure() == AutoConfigureMode.AUTOMATIC) {
if (isOpenShift(capabilities) && isRouteExposed()) {
configureRouteTsl(capabilities, applicationInfo, config, decorators);
configureRouteTsl(name, config, decorators);
} else if (isIngressExposed()) {
configureIngressTsl(capabilities, applicationInfo, config, decorators);
configureIngressTsl(name, config, decorators);
} else {
configureQuarkusHttpSsl(config, decorators);
}
} else if (config.autoconfigure() == AutoConfigureMode.ALL) {
configureQuarkusHttpSsl(config, decorators);
if (isOpenShift(capabilities) && isRouteExposed()) {
configureRouteTsl(capabilities, applicationInfo, config, decorators);
configureRouteTsl(name, config, decorators);
}

if (isIngressExposed()) {
configureIngressTsl(capabilities, applicationInfo, config, decorators);
configureIngressTsl(name, config, decorators);
}
} else if (config.autoconfigure() == AutoConfigureMode.CLUSTER_ONLY) {
if (isOpenShift(capabilities) && isRouteExposed()) {
configureRouteTsl(capabilities, applicationInfo, config, decorators);
configureRouteTsl(name, config, decorators);
}

if (isIngressExposed()) {
configureIngressTsl(capabilities, applicationInfo, config, decorators);
configureIngressTsl(name, config, decorators);
}
} else if (config.autoconfigure() == AutoConfigureMode.HTTPS_ONLY) {
configureQuarkusHttpSsl(config, decorators);
Expand Down Expand Up @@ -143,39 +146,35 @@ private static void configureQuarkusHttpSsl(CertificateConfig config, BuildProdu
}
}

private static void configureRouteTsl(Capabilities capabilities, ApplicationInfoBuildItem applicationInfo,
CertificateConfig certificateConfig, BuildProducer<DecoratorBuildItem> decorators) {
private static void configureRouteTsl(String name, CertificateConfig certificateConfig,
BuildProducer<DecoratorBuildItem> decorators) {
if (certificateConfig.issuerRef().isPresent()) {
String issuerName = certificateConfig.issuerRef().get().name();
if (CLUSTER_ISSUER.equals(certificateConfig.issuerRef().get().kind())) {
addAnnotationIntoRoute(CertManagerAnnotations.CLUSTER_ISSUER, issuerName, capabilities, applicationInfo,
decorators);
Optional<String> kind = certificateConfig.issuerRef().get().kind();
if (kind.isPresent() && CLUSTER_ISSUER.equals(kind.get())) {
addAnnotationIntoRoute(name, CertManagerAnnotations.CLUSTER_ISSUER, issuerName, decorators);
} else {
addAnnotationIntoRoute(CertManagerAnnotations.ISSUER, issuerName, capabilities, applicationInfo, decorators);
addAnnotationIntoRoute(name, CertManagerAnnotations.ISSUER, issuerName, decorators);
}
} else {
addAnnotationIntoRoute(CertManagerAnnotations.ISSUER, getResourceName(capabilities, applicationInfo),
capabilities, applicationInfo, decorators);
addAnnotationIntoRoute(name, CertManagerAnnotations.ISSUER, name, decorators);
}
}

private static void configureIngressTsl(Capabilities capabilities, ApplicationInfoBuildItem applicationInfo,
CertificateConfig certificateConfig,
private static void configureIngressTsl(String name, CertificateConfig certificateConfig,
BuildProducer<DecoratorBuildItem> decorators) {
String[] tlsHosts = certificateConfig.dnsNames().map(l -> l.toArray(new String[0])).orElse(new String[0]);
decorators.produce(new DecoratorBuildItem(KUBERNETES,
new AddIngressTlsDecorator(getResourceName(capabilities, applicationInfo),
new AddIngressTlsDecorator(name,
new IngressBuilder()
.withTlsSecretName(certificateConfig.secretName())
.withTlsHosts(tlsHosts)
.build())));
}

private static void addAnnotationIntoRoute(String annotation, String value, Capabilities capabilities,
ApplicationInfoBuildItem applicationInfo,
private static void addAnnotationIntoRoute(String name, String annotation, String value,
BuildProducer<DecoratorBuildItem> decorators) {
decorators.produce(new DecoratorBuildItem(OPENSHIFT_GROUP,
new AddAnnotationDecorator(getResourceName(capabilities, applicationInfo), annotation, value, ROUTE)));
decorators.produce(new DecoratorBuildItem(OPENSHIFT_GROUP, new AddAnnotationDecorator(name, annotation, value, ROUTE)));
}

private static void configureQuarkusHttpSslWithKeystore(CertificateConfig config, KeystoreType type,
Expand All @@ -196,16 +195,16 @@ private static void configureQuarkusHttpSslWithKeystore(CertificateConfig config

}

private static void configureDekorateToGenerateCertManagerResources(CertificateConfig config,
private static void configureDekorateToGenerateCertManagerResources(String name, CertificateConfig config,
BuildProducer<ConfigurationSupplierBuildItem> configurationSupplier) {
configurationSupplier.produce(
new ConfigurationSupplierBuildItem(
new PropertyConfiguration(
CertificateConfigAdapter.newBuilder(
CertManagerConfigUtil.transformToDekorateProperties(config)))));
CertManagerConfigUtil.transformToDekorateProperties(name, config)))));
}

public static String getResourceName(Capabilities capabilities, ApplicationInfoBuildItem info) {
private static String getResourceName(Capabilities capabilities, ApplicationInfoBuildItem info) {
Config config = ConfigProvider.getConfig();
Optional<String> resourceName;
if (isOpenShift(capabilities)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,13 @@

public final class CertManagerConfigUtil {
private static final String QUARKUS_PREFIX = "quarkus.certificate.";
private static final String DEKORATE_PREFIX = "dekorate.certificate.";
private static final String MULTIPART_SEPARATOR_PATTERN = Pattern.quote(".");

private CertManagerConfigUtil() {

}

public static Map<String, Object> transformToDekorateProperties(CertificateConfig certificateConfig) {
public static Map<String, Object> transformToDekorateProperties(String name, CertificateConfig certificateConfig) {
Config config = ConfigProvider.getConfig();
Map<String, Object> certificateProperties = StreamSupport.stream(config.getPropertyNames().spliterator(), false)
.filter(k -> k.startsWith(QUARKUS_PREFIX))
Expand All @@ -33,6 +32,8 @@ public static Map<String, Object> transformToDekorateProperties(CertificateConfi
// workaround to deal with properties that are Optional<List<String>>. ConfigProvider.getConfig() retrieves these
// properties as string "a,b" instead of the type Optional<List<String>>, so we need to manually add it.
overwriteNonStringProperties(certificateConfig, certificateProperties);
// set the name if it does not exist
certificateProperties.putIfAbsent("name", name);
return certificateProperties;
}

Expand Down
2 changes: 1 addition & 1 deletion docs/modules/ROOT/pages/includes/attributes.adoc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
:quarkus-version: 2.16.0.Final
:quarkus-version: 3.0.0.Final
:quarkus-certmanager-version: 0.0.2
:maven-version: 3.8.1+

Expand Down
Loading

0 comments on commit 35645b6

Please sign in to comment.