From a400a84f819d87a64457b7a40aa1a925171e62df Mon Sep 17 00:00:00 2001 From: Knut-Erik Johnsen Date: Mon, 7 Oct 2024 15:58:44 +0200 Subject: [PATCH] Backports/1.16 custom2 (#22) * Include namePrefix in CRD name of CompositionResourceDefinition as CRD name must match plural.group (#20) Signed-off-by: Jesper Nylend * Wrap the generator to avoid refs in the generated schema Signed-off-by: Knut-Erik Johnsen --------- Signed-off-by: Jesper Nylend Signed-off-by: Knut-Erik Johnsen Co-authored-by: Jesper Nylend --- .../CrossplaneCompositeResourceService.java | 4 ++-- .../CrossplaneJsonSchemaGenerator.java | 15 ++++++++++++++- pom.xml | 6 +++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/crossplane-function-springboot-starter/src/main/java/io/crossplane/compositefunctions/starter/registration/CrossplaneCompositeResourceService.java b/crossplane-function-springboot-starter/src/main/java/io/crossplane/compositefunctions/starter/registration/CrossplaneCompositeResourceService.java index f5d1528..6220c08 100644 --- a/crossplane-function-springboot-starter/src/main/java/io/crossplane/compositefunctions/starter/registration/CrossplaneCompositeResourceService.java +++ b/crossplane-function-springboot-starter/src/main/java/io/crossplane/compositefunctions/starter/registration/CrossplaneCompositeResourceService.java @@ -74,7 +74,6 @@ public class CrossplaneCompositeResourceService { public static > CompositeResourceDefinition createCompositeResourceDefinition(T compositionDefinition) { //}, Class functionMixin) { CompositeResourceDefinition compositeResourceDefinition = new CompositeResourceDefinition(); - compositeResourceDefinition.setMetadata(CrossplaneMetadataBuilder.createMetadata(compositionDefinition.getCRDName())); CompositeResourceDefinitionSpec spec = new CompositeResourceDefinitionSpec(); spec.setGroup(compositionDefinition.getGroup()); @@ -99,10 +98,11 @@ public class CrossplaneCompositeResourceService { Versions versions = new Versions(); versions.setName(compositionDefinition.getVersion()); - // This is not 100%. isStorage vs referencable. Need to check the crossplan docs + // This is not 100%. isStorage vs referencable. Need to check the crossplane docs versions.setReferenceable(compositionDefinition.isStorage()); versions.setServed(compositionDefinition.isServed()); + compositeResourceDefinition.setMetadata(CrossplaneMetadataBuilder.createMetadata(namePrefix + compositionDefinition.getCRDName())); Schema schema = new Schema(); schema.setOpenAPIV3Schema(getOpenAPIV3Schema(compositionDefinition.getClass(), CrossplaneCompositeResourceMixin.class)); diff --git a/crossplane-function-springboot-starter/src/main/java/io/crossplane/compositefunctions/starter/registration/CrossplaneJsonSchemaGenerator.java b/crossplane-function-springboot-starter/src/main/java/io/crossplane/compositefunctions/starter/registration/CrossplaneJsonSchemaGenerator.java index 4d95937..1a49e81 100644 --- a/crossplane-function-springboot-starter/src/main/java/io/crossplane/compositefunctions/starter/registration/CrossplaneJsonSchemaGenerator.java +++ b/crossplane-function-springboot-starter/src/main/java/io/crossplane/compositefunctions/starter/registration/CrossplaneJsonSchemaGenerator.java @@ -1,10 +1,13 @@ package io.crossplane.compositefunctions.starter.registration; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatTypes; import com.fasterxml.jackson.module.jsonSchema.jakarta.JsonSchema; import com.fasterxml.jackson.module.jsonSchema.jakarta.JsonSchemaGenerator; +import com.fasterxml.jackson.module.jsonSchema.jakarta.factories.SchemaFactoryWrapper; +import com.fasterxml.jackson.module.jsonSchema.jakarta.factories.VisitorContext; import com.fasterxml.jackson.module.jsonSchema.jakarta.types.ArraySchema; import io.crossplane.apiextensions.v1.compositeresourcedefinitionspec.versions.schema.OpenAPIV3Schema; import io.fabric8.kubernetes.api.model.apiextensions.v1.JSONSchemaProps; @@ -29,7 +32,17 @@ public class CrossplaneJsonSchemaGenerator { //Add mixin class to ignore id field as OpenShift does not support it. mapper.addMixIn(clazz, mixin); // apper.addMixIn(ObjectMeta.class, MetadataIgnorer.class); - JsonSchemaGenerator generator = new JsonSchemaGenerator(mapper); + + SchemaFactoryWrapper visitor = new SchemaFactoryWrapper(); + visitor.setVisitorContext(new VisitorContext(){ + @Override + public String addSeenSchemaUri(JavaType aSeenSchema) { + return javaTypeToUrn(aSeenSchema); + } + }); + + + JsonSchemaGenerator generator = new JsonSchemaGenerator(mapper, visitor); JsonSchema jsonSchema = generator.generateSchema(clazz); removeIdField(jsonSchema); diff --git a/pom.xml b/pom.xml index 047dc1a..af22ea1 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.1 + 3.3.3 io.crossplane.compositefunctions @@ -25,8 +25,8 @@ 17 - 3.3.1 - 6.13.0 + 3.3.3 + 6.13.3 1.7.1 3.25.1 1.63.0