Search in sources :

Example 1 with Crd

use of io.strimzi.crdgenerator.annotations.Crd in project strimzi by strimzi.

the class CrdGenerator method buildStatus.

private ObjectNode buildStatus(Crd.Spec crd, ApiVersion crApiVersion) {
    ObjectNode status;
    long length = Arrays.stream(crd.subresources().status()).filter(st -> ApiVersion.parseRange(st.apiVersion()).contains(crApiVersion)).count();
    if (length == 1) {
        status = nf.objectNode();
    } else if (length > 1) {
        err("Each custom resource definition can have only one status sub-resource.");
        status = null;
    } else {
        status = null;
    }
    return status;
}
Also used : JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) Arrays(java.util.Arrays) YAMLGenerator(com.fasterxml.jackson.dataformat.yaml.YAMLGenerator) VersionRange(io.strimzi.api.annotations.VersionRange) Crd(io.strimzi.crdgenerator.annotations.Crd) Alternative(io.strimzi.crdgenerator.annotations.Alternative) Example(io.strimzi.crdgenerator.annotations.Example) YAMLMapper(com.fasterxml.jackson.dataformat.yaml.YAMLMapper) Locale(java.util.Locale) Arrays.asList(java.util.Arrays.asList) Map(java.util.Map) Property.properties(io.strimzi.crdgenerator.Property.properties) JsonNode(com.fasterxml.jackson.databind.JsonNode) Method(java.lang.reflect.Method) Collections.emptyList(java.util.Collections.emptyList) Collection(java.util.Collection) Property.hasAnyGetterAndAnySetter(io.strimzi.crdgenerator.Property.hasAnyGetterAndAnySetter) Pattern(io.strimzi.crdgenerator.annotations.Pattern) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) TextNode(com.fasterxml.jackson.databind.node.TextNode) Objects(java.util.Objects) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) MinimumItems(io.strimzi.crdgenerator.annotations.MinimumItems) Base64(java.util.Base64) List(java.util.List) JsonTypeInfo(com.fasterxml.jackson.annotation.JsonTypeInfo) Type(io.strimzi.crdgenerator.annotations.Type) JsonNodeFactory(com.fasterxml.jackson.databind.node.JsonNodeFactory) Modifier(java.lang.reflect.Modifier) Writer(java.io.Writer) Annotation(java.lang.annotation.Annotation) Minimum(io.strimzi.crdgenerator.annotations.Minimum) Property.sortedProperties(io.strimzi.crdgenerator.Property.sortedProperties) ApiVersion(io.strimzi.api.annotations.ApiVersion) Maximum(io.strimzi.crdgenerator.annotations.Maximum) AnnotatedElement(java.lang.reflect.AnnotatedElement) CustomResource(io.fabric8.kubernetes.client.CustomResource) JsonPropertyOrder(com.fasterxml.jackson.annotation.JsonPropertyOrder) HashMap(java.util.HashMap) Function(java.util.function.Function) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) KubeVersion(io.strimzi.api.annotations.KubeVersion) OutputStreamWriter(java.io.OutputStreamWriter) ContainerNode(com.fasterxml.jackson.databind.node.ContainerNode) Property.subtypes(io.strimzi.crdgenerator.Property.subtypes) Modifier.isAbstract(java.lang.reflect.Modifier.isAbstract) Collections.emptyMap(java.util.Collections.emptyMap) Files(java.nio.file.Files) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) Description(io.strimzi.crdgenerator.annotations.Description) Integer.parseInt(java.lang.Integer.parseInt) File(java.io.File) V1(io.strimzi.api.annotations.ApiVersion.V1) ParameterizedType(java.lang.reflect.ParameterizedType) TreeMap(java.util.TreeMap) OneOf(io.strimzi.crdgenerator.annotations.OneOf) JsonInclude(com.fasterxml.jackson.annotation.JsonInclude) Alternation(io.strimzi.crdgenerator.annotations.Alternation) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode)

Example 2 with Crd

use of io.strimzi.crdgenerator.annotations.Crd in project strimzi by strimzi.

the class CrdGenerator method buildScale.

private ObjectNode buildScale(Crd.Spec crd, ApiVersion crApiVersion) {
    ObjectNode scaleNode;
    Crd.Spec.Subresources.Scale[] scales = crd.subresources().scale();
    if (scales.length > 1 && !KubeVersion.supportsSchemaPerVersion(targetKubeVersions)) {
        err("Multiple scales specified but " + targetKubeVersions.lower() + " doesn't support schema per version");
    }
    List<Crd.Spec.Subresources.Scale> filteredScales = Arrays.stream(scales).filter(sc -> ApiVersion.parseRange(sc.apiVersion()).contains(crApiVersion)).collect(Collectors.toList());
    if (filteredScales.size() == 1) {
        scaleNode = nf.objectNode();
        Crd.Spec.Subresources.Scale scale = filteredScales.get(0);
        scaleNode.put("specReplicasPath", scale.specReplicasPath());
        scaleNode.put("statusReplicasPath", scale.statusReplicasPath());
        if (!scale.labelSelectorPath().isEmpty()) {
            scaleNode.put("labelSelectorPath", scale.labelSelectorPath());
        }
    } else if (filteredScales.size() > 1 && KubeVersion.supportsSchemaPerVersion(targetKubeVersions)) {
        throw new RuntimeException("Each custom resource definition can have only one scale sub-resource.");
    } else {
        scaleNode = null;
    }
    return scaleNode;
}
Also used : JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) Arrays(java.util.Arrays) YAMLGenerator(com.fasterxml.jackson.dataformat.yaml.YAMLGenerator) VersionRange(io.strimzi.api.annotations.VersionRange) Crd(io.strimzi.crdgenerator.annotations.Crd) Alternative(io.strimzi.crdgenerator.annotations.Alternative) Example(io.strimzi.crdgenerator.annotations.Example) YAMLMapper(com.fasterxml.jackson.dataformat.yaml.YAMLMapper) Locale(java.util.Locale) Arrays.asList(java.util.Arrays.asList) Map(java.util.Map) Property.properties(io.strimzi.crdgenerator.Property.properties) JsonNode(com.fasterxml.jackson.databind.JsonNode) Method(java.lang.reflect.Method) Collections.emptyList(java.util.Collections.emptyList) Collection(java.util.Collection) Property.hasAnyGetterAndAnySetter(io.strimzi.crdgenerator.Property.hasAnyGetterAndAnySetter) Pattern(io.strimzi.crdgenerator.annotations.Pattern) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) TextNode(com.fasterxml.jackson.databind.node.TextNode) Objects(java.util.Objects) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) MinimumItems(io.strimzi.crdgenerator.annotations.MinimumItems) Base64(java.util.Base64) List(java.util.List) JsonTypeInfo(com.fasterxml.jackson.annotation.JsonTypeInfo) Type(io.strimzi.crdgenerator.annotations.Type) JsonNodeFactory(com.fasterxml.jackson.databind.node.JsonNodeFactory) Modifier(java.lang.reflect.Modifier) Writer(java.io.Writer) Annotation(java.lang.annotation.Annotation) Minimum(io.strimzi.crdgenerator.annotations.Minimum) Property.sortedProperties(io.strimzi.crdgenerator.Property.sortedProperties) ApiVersion(io.strimzi.api.annotations.ApiVersion) Maximum(io.strimzi.crdgenerator.annotations.Maximum) AnnotatedElement(java.lang.reflect.AnnotatedElement) CustomResource(io.fabric8.kubernetes.client.CustomResource) JsonPropertyOrder(com.fasterxml.jackson.annotation.JsonPropertyOrder) HashMap(java.util.HashMap) Function(java.util.function.Function) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) KubeVersion(io.strimzi.api.annotations.KubeVersion) OutputStreamWriter(java.io.OutputStreamWriter) ContainerNode(com.fasterxml.jackson.databind.node.ContainerNode) Property.subtypes(io.strimzi.crdgenerator.Property.subtypes) Modifier.isAbstract(java.lang.reflect.Modifier.isAbstract) Collections.emptyMap(java.util.Collections.emptyMap) Files(java.nio.file.Files) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) Description(io.strimzi.crdgenerator.annotations.Description) Integer.parseInt(java.lang.Integer.parseInt) File(java.io.File) V1(io.strimzi.api.annotations.ApiVersion.V1) ParameterizedType(java.lang.reflect.ParameterizedType) TreeMap(java.util.TreeMap) OneOf(io.strimzi.crdgenerator.annotations.OneOf) JsonInclude(com.fasterxml.jackson.annotation.JsonInclude) Alternation(io.strimzi.crdgenerator.annotations.Alternation) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) Crd(io.strimzi.crdgenerator.annotations.Crd)

Example 3 with Crd

use of io.strimzi.crdgenerator.annotations.Crd in project strimzi by strimzi.

the class CrdGenerator method buildAdditionalPrinterColumns.

private ArrayNode buildAdditionalPrinterColumns(Crd.Spec crd, ApiVersion crApiVersion) {
    ArrayNode cols = nf.arrayNode();
    if (crd.additionalPrinterColumns().length != 0) {
        for (Crd.Spec.AdditionalPrinterColumn col : Arrays.stream(crd.additionalPrinterColumns()).filter(col -> crApiVersion == null || ApiVersion.parseRange(col.apiVersion()).contains(crApiVersion)).collect(Collectors.toList())) {
            ObjectNode colNode = cols.addObject();
            colNode.put("name", col.name());
            colNode.put("description", col.description());
            colNode.put(crdApiVersion.compareTo(V1) >= 0 ? "jsonPath" : "JSONPath", col.jsonPath());
            colNode.put("type", col.type());
            if (col.priority() != 0) {
                colNode.put("priority", col.priority());
            }
            if (!col.format().isEmpty()) {
                colNode.put("format", col.format());
            }
        }
    }
    return cols;
}
Also used : JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) Arrays(java.util.Arrays) YAMLGenerator(com.fasterxml.jackson.dataformat.yaml.YAMLGenerator) VersionRange(io.strimzi.api.annotations.VersionRange) Crd(io.strimzi.crdgenerator.annotations.Crd) Alternative(io.strimzi.crdgenerator.annotations.Alternative) Example(io.strimzi.crdgenerator.annotations.Example) YAMLMapper(com.fasterxml.jackson.dataformat.yaml.YAMLMapper) Locale(java.util.Locale) Arrays.asList(java.util.Arrays.asList) Map(java.util.Map) Property.properties(io.strimzi.crdgenerator.Property.properties) JsonNode(com.fasterxml.jackson.databind.JsonNode) Method(java.lang.reflect.Method) Collections.emptyList(java.util.Collections.emptyList) Collection(java.util.Collection) Property.hasAnyGetterAndAnySetter(io.strimzi.crdgenerator.Property.hasAnyGetterAndAnySetter) Pattern(io.strimzi.crdgenerator.annotations.Pattern) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) TextNode(com.fasterxml.jackson.databind.node.TextNode) Objects(java.util.Objects) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) MinimumItems(io.strimzi.crdgenerator.annotations.MinimumItems) Base64(java.util.Base64) List(java.util.List) JsonTypeInfo(com.fasterxml.jackson.annotation.JsonTypeInfo) Type(io.strimzi.crdgenerator.annotations.Type) JsonNodeFactory(com.fasterxml.jackson.databind.node.JsonNodeFactory) Modifier(java.lang.reflect.Modifier) Writer(java.io.Writer) Annotation(java.lang.annotation.Annotation) Minimum(io.strimzi.crdgenerator.annotations.Minimum) Property.sortedProperties(io.strimzi.crdgenerator.Property.sortedProperties) ApiVersion(io.strimzi.api.annotations.ApiVersion) Maximum(io.strimzi.crdgenerator.annotations.Maximum) AnnotatedElement(java.lang.reflect.AnnotatedElement) CustomResource(io.fabric8.kubernetes.client.CustomResource) JsonPropertyOrder(com.fasterxml.jackson.annotation.JsonPropertyOrder) HashMap(java.util.HashMap) Function(java.util.function.Function) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) KubeVersion(io.strimzi.api.annotations.KubeVersion) OutputStreamWriter(java.io.OutputStreamWriter) ContainerNode(com.fasterxml.jackson.databind.node.ContainerNode) Property.subtypes(io.strimzi.crdgenerator.Property.subtypes) Modifier.isAbstract(java.lang.reflect.Modifier.isAbstract) Collections.emptyMap(java.util.Collections.emptyMap) Files(java.nio.file.Files) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) Description(io.strimzi.crdgenerator.annotations.Description) Integer.parseInt(java.lang.Integer.parseInt) File(java.io.File) V1(io.strimzi.api.annotations.ApiVersion.V1) ParameterizedType(java.lang.reflect.ParameterizedType) TreeMap(java.util.TreeMap) OneOf(io.strimzi.crdgenerator.annotations.OneOf) JsonInclude(com.fasterxml.jackson.annotation.JsonInclude) Alternation(io.strimzi.crdgenerator.annotations.Alternation) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode)

Example 4 with Crd

use of io.strimzi.crdgenerator.annotations.Crd in project strimzi by strimzi.

the class CrdGenerator method generate.

public int generate(Class<? extends CustomResource> crdClass, Writer out) throws IOException {
    ObjectNode node = nf.objectNode();
    Crd crd = crdClass.getAnnotation(Crd.class);
    if (crd == null) {
        err(crdClass + " is not annotated with @Crd");
    } else {
        node.put("apiVersion", "apiextensions.k8s.io/" + crdApiVersion).put("kind", "CustomResourceDefinition").putObject("metadata").put("name", crd.spec().names().plural() + "." + crd.spec().group());
        if (!labels.isEmpty()) {
            ((ObjectNode) node.get("metadata")).putObject("labels").setAll(labels.entrySet().stream().collect(Collectors.<Map.Entry<String, String>, String, JsonNode, LinkedHashMap<String, JsonNode>>toMap(Map.Entry::getKey, e -> new TextNode(e.getValue().replace("%group%", crd.spec().group()).replace("%plural%", crd.spec().names().plural()).replace("%singular%", crd.spec().names().singular())), (x, y) -> x, LinkedHashMap::new)));
        }
        node.set("spec", buildSpec(crdApiVersion, crd.spec(), crdClass));
    }
    mapper.writeValue(out, node);
    return numErrors;
}
Also used : ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) Crd(io.strimzi.crdgenerator.annotations.Crd) JsonNode(com.fasterxml.jackson.databind.JsonNode) TextNode(com.fasterxml.jackson.databind.node.TextNode) LinkedHashMap(java.util.LinkedHashMap)

Example 5 with Crd

use of io.strimzi.crdgenerator.annotations.Crd in project strimzi-kafka-operator by strimzi.

the class CrdGenerator method buildAdditionalPrinterColumns.

private ArrayNode buildAdditionalPrinterColumns(Crd.Spec crd, ApiVersion crApiVersion) {
    ArrayNode cols = nf.arrayNode();
    if (crd.additionalPrinterColumns().length != 0) {
        for (Crd.Spec.AdditionalPrinterColumn col : Arrays.stream(crd.additionalPrinterColumns()).filter(col -> crApiVersion == null || ApiVersion.parseRange(col.apiVersion()).contains(crApiVersion)).collect(Collectors.toList())) {
            ObjectNode colNode = cols.addObject();
            colNode.put("name", col.name());
            colNode.put("description", col.description());
            colNode.put(crdApiVersion.compareTo(V1) >= 0 ? "jsonPath" : "JSONPath", col.jsonPath());
            colNode.put("type", col.type());
            if (col.priority() != 0) {
                colNode.put("priority", col.priority());
            }
            if (!col.format().isEmpty()) {
                colNode.put("format", col.format());
            }
        }
    }
    return cols;
}
Also used : JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) Arrays(java.util.Arrays) YAMLGenerator(com.fasterxml.jackson.dataformat.yaml.YAMLGenerator) VersionRange(io.strimzi.api.annotations.VersionRange) Crd(io.strimzi.crdgenerator.annotations.Crd) Alternative(io.strimzi.crdgenerator.annotations.Alternative) Example(io.strimzi.crdgenerator.annotations.Example) YAMLMapper(com.fasterxml.jackson.dataformat.yaml.YAMLMapper) Locale(java.util.Locale) Arrays.asList(java.util.Arrays.asList) Map(java.util.Map) Property.properties(io.strimzi.crdgenerator.Property.properties) JsonNode(com.fasterxml.jackson.databind.JsonNode) Method(java.lang.reflect.Method) Collections.emptyList(java.util.Collections.emptyList) Collection(java.util.Collection) Property.hasAnyGetterAndAnySetter(io.strimzi.crdgenerator.Property.hasAnyGetterAndAnySetter) Pattern(io.strimzi.crdgenerator.annotations.Pattern) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) TextNode(com.fasterxml.jackson.databind.node.TextNode) Objects(java.util.Objects) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) MinimumItems(io.strimzi.crdgenerator.annotations.MinimumItems) Base64(java.util.Base64) List(java.util.List) JsonTypeInfo(com.fasterxml.jackson.annotation.JsonTypeInfo) Type(io.strimzi.crdgenerator.annotations.Type) JsonNodeFactory(com.fasterxml.jackson.databind.node.JsonNodeFactory) Modifier(java.lang.reflect.Modifier) Writer(java.io.Writer) Annotation(java.lang.annotation.Annotation) Minimum(io.strimzi.crdgenerator.annotations.Minimum) Property.sortedProperties(io.strimzi.crdgenerator.Property.sortedProperties) ApiVersion(io.strimzi.api.annotations.ApiVersion) Maximum(io.strimzi.crdgenerator.annotations.Maximum) AnnotatedElement(java.lang.reflect.AnnotatedElement) CustomResource(io.fabric8.kubernetes.client.CustomResource) JsonPropertyOrder(com.fasterxml.jackson.annotation.JsonPropertyOrder) HashMap(java.util.HashMap) Function(java.util.function.Function) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) KubeVersion(io.strimzi.api.annotations.KubeVersion) OutputStreamWriter(java.io.OutputStreamWriter) ContainerNode(com.fasterxml.jackson.databind.node.ContainerNode) Property.subtypes(io.strimzi.crdgenerator.Property.subtypes) Modifier.isAbstract(java.lang.reflect.Modifier.isAbstract) Collections.emptyMap(java.util.Collections.emptyMap) Files(java.nio.file.Files) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) Description(io.strimzi.crdgenerator.annotations.Description) Integer.parseInt(java.lang.Integer.parseInt) File(java.io.File) V1(io.strimzi.api.annotations.ApiVersion.V1) ParameterizedType(java.lang.reflect.ParameterizedType) TreeMap(java.util.TreeMap) OneOf(io.strimzi.crdgenerator.annotations.OneOf) JsonInclude(com.fasterxml.jackson.annotation.JsonInclude) Alternation(io.strimzi.crdgenerator.annotations.Alternation) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode)

Aggregations

Crd (io.strimzi.crdgenerator.annotations.Crd)12 JsonNode (com.fasterxml.jackson.databind.JsonNode)10 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)10 TextNode (com.fasterxml.jackson.databind.node.TextNode)10 LinkedHashMap (java.util.LinkedHashMap)10 JsonInclude (com.fasterxml.jackson.annotation.JsonInclude)8 JsonProperty (com.fasterxml.jackson.annotation.JsonProperty)8 JsonPropertyOrder (com.fasterxml.jackson.annotation.JsonPropertyOrder)8 JsonTypeInfo (com.fasterxml.jackson.annotation.JsonTypeInfo)8 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)8 ArrayNode (com.fasterxml.jackson.databind.node.ArrayNode)8 ContainerNode (com.fasterxml.jackson.databind.node.ContainerNode)8 JsonNodeFactory (com.fasterxml.jackson.databind.node.JsonNodeFactory)8 YAMLGenerator (com.fasterxml.jackson.dataformat.yaml.YAMLGenerator)8 YAMLMapper (com.fasterxml.jackson.dataformat.yaml.YAMLMapper)8 CustomResource (io.fabric8.kubernetes.client.CustomResource)8 ApiVersion (io.strimzi.api.annotations.ApiVersion)8 V1 (io.strimzi.api.annotations.ApiVersion.V1)8 KubeVersion (io.strimzi.api.annotations.KubeVersion)8 VersionRange (io.strimzi.api.annotations.VersionRange)8