Crossplane · Schema

Crossplane CompositeResourceDefinition (XRD)

Schema for a Crossplane CompositeResourceDefinition that defines the API schema for composite resources and optional claims, extending the Kubernetes API with custom infrastructure abstractions.

Apache 2.0CNCFCloud NativeCompositionControl PlaneCustom Resource DefinitionsGraduatedInfrastructure as CodeKubernetesMulti-CloudOpen SourcePlatform EngineeringProviders

Properties

Name Type Description
apiVersion string API version for the Crossplane XRD resource.
kind string Resource kind identifier.
metadata object Standard Kubernetes object metadata.
spec object Specification for the CompositeResourceDefinition.
View JSON Schema on GitHub

JSON Schema

crossplane-xrd-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://github.com/api-evangelist/crossplane/blob/main/xrd-schema.json",
  "title": "Crossplane CompositeResourceDefinition (XRD)",
  "description": "Schema for a Crossplane CompositeResourceDefinition that defines the API schema for composite resources and optional claims, extending the Kubernetes API with custom infrastructure abstractions.",
  "type": "object",
  "required": ["apiVersion", "kind", "metadata", "spec"],
  "properties": {
    "apiVersion": {
      "type": "string",
      "const": "apiextensions.crossplane.io/v1",
      "description": "API version for the Crossplane XRD resource."
    },
    "kind": {
      "type": "string",
      "const": "CompositeResourceDefinition",
      "description": "Resource kind identifier."
    },
    "metadata": {
      "type": "object",
      "description": "Standard Kubernetes object metadata.",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the XRD, conventionally in the format 'xplural.group'.",
          "pattern": "^x[a-z]+\\.[a-z]+(\\.[a-z]+)*$"
        },
        "labels": {
          "type": "object",
          "description": "Key-value pairs for organizing XRDs.",
          "additionalProperties": { "type": "string" }
        },
        "annotations": {
          "type": "object",
          "description": "Non-identifying metadata.",
          "additionalProperties": { "type": "string" }
        }
      }
    },
    "spec": {
      "type": "object",
      "description": "Specification for the CompositeResourceDefinition.",
      "required": ["group", "names", "versions"],
      "properties": {
        "group": {
          "type": "string",
          "description": "API group for the composite resource, typically a domain name.",
          "pattern": "^[a-z]+(\\.[a-z]+)+$"
        },
        "names": {
          "type": "object",
          "description": "Names to use for the composite resource type.",
          "required": ["kind", "plural"],
          "properties": {
            "kind": {
              "type": "string",
              "description": "PascalCase singular kind for the composite resource.",
              "pattern": "^X[A-Z][a-zA-Z]*$"
            },
            "plural": {
              "type": "string",
              "description": "Lowercase plural name for API discovery.",
              "pattern": "^x[a-z]+$"
            },
            "singular": {
              "type": "string",
              "description": "Lowercase singular name."
            },
            "shortNames": {
              "type": "array",
              "description": "Short aliases for the composite resource.",
              "items": { "type": "string" }
            },
            "listKind": {
              "type": "string",
              "description": "Name of the list kind."
            },
            "categories": {
              "type": "array",
              "description": "Categories the composite resource belongs to.",
              "items": { "type": "string" }
            }
          }
        },
        "claimNames": {
          "type": "object",
          "description": "Names to use for the namespace-scoped claim resource. If omitted, no claim is generated.",
          "required": ["kind", "plural"],
          "properties": {
            "kind": {
              "type": "string",
              "description": "PascalCase singular kind for the claim."
            },
            "plural": {
              "type": "string",
              "description": "Lowercase plural name for the claim."
            },
            "singular": {
              "type": "string",
              "description": "Lowercase singular name for the claim."
            },
            "shortNames": {
              "type": "array",
              "description": "Short aliases for the claim.",
              "items": { "type": "string" }
            },
            "categories": {
              "type": "array",
              "description": "Categories the claim belongs to.",
              "items": { "type": "string" }
            }
          }
        },
        "connectionSecretKeys": {
          "type": "array",
          "description": "Keys that the composite resource and its claims expect in their connection secrets.",
          "items": { "type": "string" }
        },
        "defaultCompositeDeletePolicy": {
          "type": "string",
          "enum": ["Background", "Foreground"],
          "description": "Default delete policy for composite resources."
        },
        "defaultCompositionRef": {
          "type": "object",
          "description": "Default Composition to use when none is specified.",
          "required": ["name"],
          "properties": {
            "name": {
              "type": "string",
              "description": "Name of the default Composition."
            }
          }
        },
        "defaultCompositionUpdatePolicy": {
          "type": "string",
          "enum": ["Automatic", "Manual"],
          "description": "Default update policy for Composition revisions."
        },
        "enforcedCompositionRef": {
          "type": "object",
          "description": "Composition that must always be used, overriding user selection.",
          "required": ["name"],
          "properties": {
            "name": {
              "type": "string",
              "description": "Name of the enforced Composition."
            }
          }
        },
        "versions": {
          "type": "array",
          "description": "Versions of the composite resource API.",
          "minItems": 1,
          "items": {
            "type": "object",
            "required": ["name", "served", "referenceable", "schema"],
            "properties": {
              "name": {
                "type": "string",
                "description": "Version name, e.g. 'v1alpha1', 'v1beta1', 'v1'."
              },
              "served": {
                "type": "boolean",
                "description": "Whether this version is served by the API server."
              },
              "referenceable": {
                "type": "boolean",
                "description": "Whether this version can be referenced by Compositions."
              },
              "deprecated": {
                "type": "boolean",
                "description": "Whether this version is deprecated."
              },
              "deprecationMessage": {
                "type": "string",
                "description": "Message shown when this deprecated version is used."
              },
              "schema": {
                "type": "object",
                "description": "OpenAPI v3 schema for the composite resource spec.",
                "required": ["openAPIV3Schema"],
                "properties": {
                  "openAPIV3Schema": {
                    "type": "object",
                    "description": "OpenAPI v3 schema definition for the composite resource.",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "object"
                      },
                      "properties": {
                        "type": "object",
                        "description": "Properties of the composite resource spec."
                      },
                      "required": {
                        "type": "array",
                        "items": { "type": "string" }
                      },
                      "description": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "additionalPrinterColumns": {
                "type": "array",
                "description": "Additional columns to display in kubectl output.",
                "items": {
                  "type": "object",
                  "required": ["name", "type", "jsonPath"],
                  "properties": {
                    "name": { "type": "string" },
                    "type": { "type": "string" },
                    "jsonPath": { "type": "string" },
                    "description": { "type": "string" }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}