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 <jesper.nylend@gmail.com>

* Wrap the generator to avoid refs in the generated schema

Signed-off-by: Knut-Erik Johnsen <abstract@knut-erik.org>

---------

Signed-off-by: Jesper Nylend <jesper.nylend@gmail.com>
Signed-off-by: Knut-Erik Johnsen <abstract@knut-erik.org>
Co-authored-by: Jesper Nylend <jesper.nylend@gmail.com>
This commit is contained in:
Knut-Erik Johnsen 2024-10-07 15:58:44 +02:00 committed by GitHub
parent ed71e066b7
commit a400a84f81
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 19 additions and 6 deletions

View File

@ -74,7 +74,6 @@ public class CrossplaneCompositeResourceService {
public static <T extends CustomResource<?, Void>> CompositeResourceDefinition createCompositeResourceDefinition(T compositionDefinition) { //}, Class functionMixin) { public static <T extends CustomResource<?, Void>> CompositeResourceDefinition createCompositeResourceDefinition(T compositionDefinition) { //}, Class functionMixin) {
CompositeResourceDefinition compositeResourceDefinition = new CompositeResourceDefinition(); CompositeResourceDefinition compositeResourceDefinition = new CompositeResourceDefinition();
compositeResourceDefinition.setMetadata(CrossplaneMetadataBuilder.createMetadata(compositionDefinition.getCRDName()));
CompositeResourceDefinitionSpec spec = new CompositeResourceDefinitionSpec(); CompositeResourceDefinitionSpec spec = new CompositeResourceDefinitionSpec();
spec.setGroup(compositionDefinition.getGroup()); spec.setGroup(compositionDefinition.getGroup());
@ -99,10 +98,11 @@ public class CrossplaneCompositeResourceService {
Versions versions = new Versions(); Versions versions = new Versions();
versions.setName(compositionDefinition.getVersion()); 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.setReferenceable(compositionDefinition.isStorage());
versions.setServed(compositionDefinition.isServed()); versions.setServed(compositionDefinition.isServed());
compositeResourceDefinition.setMetadata(CrossplaneMetadataBuilder.createMetadata(namePrefix + compositionDefinition.getCRDName()));
Schema schema = new Schema(); Schema schema = new Schema();
schema.setOpenAPIV3Schema(getOpenAPIV3Schema(compositionDefinition.getClass(), CrossplaneCompositeResourceMixin.class)); schema.setOpenAPIV3Schema(getOpenAPIV3Schema(compositionDefinition.getClass(), CrossplaneCompositeResourceMixin.class));

View File

@ -1,10 +1,13 @@
package io.crossplane.compositefunctions.starter.registration; package io.crossplane.compositefunctions.starter.registration;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatTypes; import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatTypes;
import com.fasterxml.jackson.module.jsonSchema.jakarta.JsonSchema; import com.fasterxml.jackson.module.jsonSchema.jakarta.JsonSchema;
import com.fasterxml.jackson.module.jsonSchema.jakarta.JsonSchemaGenerator; 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 com.fasterxml.jackson.module.jsonSchema.jakarta.types.ArraySchema;
import io.crossplane.apiextensions.v1.compositeresourcedefinitionspec.versions.schema.OpenAPIV3Schema; import io.crossplane.apiextensions.v1.compositeresourcedefinitionspec.versions.schema.OpenAPIV3Schema;
import io.fabric8.kubernetes.api.model.apiextensions.v1.JSONSchemaProps; 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. //Add mixin class to ignore id field as OpenShift does not support it.
mapper.addMixIn(clazz, mixin); mapper.addMixIn(clazz, mixin);
// apper.addMixIn(ObjectMeta.class, MetadataIgnorer.class); // 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); JsonSchema jsonSchema = generator.generateSchema(clazz);
removeIdField(jsonSchema); removeIdField(jsonSchema);

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.1</version> <version>3.3.3</version>
</parent> </parent>
<groupId>io.crossplane.compositefunctions</groupId> <groupId>io.crossplane.compositefunctions</groupId>
@ -25,8 +25,8 @@
<maven.compiler.source>17</maven.compiler.source> <maven.compiler.source>17</maven.compiler.source>
<!-- Dependency versions --> <!-- Dependency versions -->
<spring-boot.version>3.3.1</spring-boot.version> <spring-boot.version>3.3.3</spring-boot.version>
<kubernetes-client.version>6.13.0</kubernetes-client.version> <kubernetes-client.version>6.13.3</kubernetes-client.version>
<os-maven-plugin.version>1.7.1</os-maven-plugin.version> <os-maven-plugin.version>1.7.1</os-maven-plugin.version>
<protobuf.version>3.25.1</protobuf.version> <protobuf.version>3.25.1</protobuf.version>
<grpc.version>1.63.0</grpc.version> <grpc.version>1.63.0</grpc.version>