Crossplane Docs · v2.3 · Command Reference (original) (raw)
This documentation is for the crossplane CLI v2.3.0.
crossplane
A command line tool for interacting with Crossplane.
Please report issues and feature requests at https://github.com/crossplane/cli.
Usage
crossplane <command> [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -h | --help | Show context-sensitive help. |
| --config=PATH | Path to the crossplane CLI configuration file. | |
| --verbose | Print verbose logging statements. |
crossplane cluster
[BETA] Inspect a Crossplane cluster.
Beta features may change in a future release.
Usage
crossplane cluster <command> [flags]
crossplane cluster top
[BETA] Display resource (CPU/memory) usage by Crossplane related pods.
Beta features may change in a future release.
The cluster top command returns current resource usage (CPU and memory) by Crossplane pods. Like kubectl top pods, it requires theMetrics Server.
Examples
Show resource usage for all Crossplane pods in the crossplane-systemnamespace:
Show resource usage for all Crossplane pods in the default namespace:
1crossplane cluster top -n default
Add a summary of resource usage for all Crossplane pods on top of the results:
1crossplane cluster top -s
Usage
crossplane cluster top [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -s | --summary | Adds summary header for all Crossplane pods. |
| -n | --namespace="crossplane-system" | Show pods from a specific namespace, defaults to crossplane-system. |
crossplane completions
Get shell (bash/zsh/fish) completions. You can source this command to get completions for the login shell. Example: ‘source <(crossplane completions)’
Usage
crossplane completions [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --uninstall |
crossplane composition
Work with Crossplane Compositions.
Usage
crossplane composition <command> [flags]
crossplane composition convert
[BETA] Convert a Composition to a newer version.
Beta features may change in a future release.
The composition convert command converts a Crossplane composition to use a different version or migrate away from features that are no longer supported.
The supported conversions are:
- Native Composition Environment →
function-environment-configs
Usage
crossplane composition convert <command>
crossplane composition convert composition-environment
[BETA] Convert a Pipeline Composition to use function-environment-configs.
Beta features may change in a future release.
The composition convert composition-environment command converts a Crossplane Composition to use function-environment-configs in place of native Composition Environments (removed in Crossplane 1.18).
It adds a function pipeline step usingcrossplane-contrib/function-environment-configs if needed. By default the function name is function-environment-configs, but this can be overridden with--function-environment-configs-ref.
Examples
Convert an existing pipeline mode Composition using native Composition Environment to function-environment-configs:
1crossplane composition convert composition-environment composition.yaml \
2 -o composition-environment.yaml
Use a different functionRef and output to stdout:
1crossplane composition convert composition-environment composition.yaml \
2 --function-environment-configs-ref=local-function-environment-configs
Read a composition from stdin and output the updated composition on stdout:
1cat composition.yaml | crossplane composition convert composition-environment
Usage
crossplane composition convert composition-environment [<input-file>] [flags]
Arguments
| Argument | Description |
|---|---|
| [] | (optional) The Composition file to convert or ‘-’ for stdin. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -o | --output-file=PATH | The file to write the generated Composition to; omit for stdout. |
| --function-environment-configs-ref="function-environment-configs" | Name of the installed function-environment-configs Function. |
crossplane composition generate
[BETA] Generate a Composition for a CompositeResourceDefinition (XRD).
Beta features may change in a future release.
The composition generate command creates a Composition for a CompositeResourceDefinition (XRD). The generated Composition contains a single pipeline step that runs function-auto-ready, which is automatically added to the project’s dependencies if it isn’t already present.
Examples
Generate a Composition from a CompositeResourceDefinition (XRD) and save it next to the XRD under the project’s APIs directory:
1crossplane composition generate apis/network/definition.yaml
Generate a Composition with a custom name prefix:
1crossplane composition generate examples/network/network-aws.yaml --name aws
Generate a Composition with a custom plural form, useful when automatic pluralization is wrong (for example, “postgres”):
1crossplane composition generate examples/database/database.yaml --plural postgreses
Write the generated Composition to a specific path:
1crossplane composition generate apis/network/definition.yaml --path apis/network/composition.yaml
Usage
crossplane composition generate <xrd> [flags]
Arguments
| Argument | Description |
|---|---|
| Path to the CompositeResourceDefinition (XRD) file. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --name=STRING | Name prefix for the composition. | |
| --plural=STRING | Custom plural for the referenced kind. | |
| --path=STRING | Output file. | |
| -f | --project-file="crossplane-project.yaml" | Path to project definition file. |
| --cache-dir=STRING | Directory for cached xpkg package contents. |
crossplane composition render
Render a composite resource (XR).
The composition render command shows you what resources a Composition would create or mutate by running the composition locally and printing its results. It also prints any changes to the status of the XR. It runs the Crossplane render engine (either in a Docker container or via a local binary) to produce high-fidelity output that matches what the real reconciler would produce.
By default, render prints only the status and metadata.name of the XR. Use--include-full-xr (-x) to include the full XR spec and metadata.
This command runs composition functions and the Crossplane render engine using Docker by default, requiring a working Docker installation. See the function annotations and --crossplane-binary option below to understand how to render without Docker.
Function runtime configuration
By default, the render command pulls and runs Composition Functions using Docker. You can add the following annotations to each Function to change how they’re run:
| Annotation | Purpose |
|---|---|
| render.crossplane.io/runtime: "Development" | Connect to a Function running locally, instead of using Docker, for example when developing or debugging a new Function. The Function must be listening at localhost:9443 and running with the --insecure flag. |
| render.crossplane.io/runtime-development-target: "dns:///example.org:7443" | Connect to a Function running somewhere other than localhost:9443. The target uses gRPC target syntax (for example, dns:///example.org:7443 or example.org:7443). |
| render.crossplane.io/runtime-docker-cleanup: "Orphan" | Don’t stop the Function’s Docker container after rendering. |
| render.crossplane.io/runtime-docker-name: "" | Create or reuse a container with the given name. Restart the container if needed. |
| render.crossplane.io/runtime-docker-pull-policy: "Always" | Always pull the Function’s package, even if it already exists locally. Other supported values are Never or IfNotPresent. |
| render.crossplane.io/runtime-docker-publish-address: "0.0.0.0" | Host address that Docker should publish the Function’s container port to. Defaults to 127.0.0.1 (localhost only). Use 0.0.0.0 to publish to all host network interfaces, enabling access from remote machines. |
| render.crossplane.io/runtime-docker-target: "docker-host" | Address that the render CLI should use to connect to the Function’s Docker container. If not specified, uses the publish address. |
Use the standard DOCKER_HOST, DOCKER_API_VERSION, DOCKER_CERT_PATH, andDOCKER_TLS_VERIFY environment variables to configure how this command connects to the Docker daemon. See theDocker environment variablesreference.
Project support
When running render in a Crossplane Project (any directory containing acrossplane-project.yaml project metadata file), you may omit the functions file argument in favor of using function dependencies defined in the project metadata and embedded functions from the project.
Function context
The --context-files and --context-values flags pass data to each Function’scontext. The context is JSON-formatted data.
Function results
If a Function emits events with statuses, use --include-function-results(-r) to print them alongside the rendered resources.
Observed (mock) resources
--observed-resources (-o) lets you pass mocked managed resources to the Function pipeline. render treats those inputs as if they were resources observed in a Crossplane cluster, so Functions can reference and manipulate them.
The argument may be a single YAML file containing multiple resources or a directory of YAML files. The schema of the mocked resources isn’t validated and may contain any data.
1apiVersion: example.org/v1alpha1
2kind: ComposedResource
3metadata:
4 name: test-render-b
5 annotations:
6 crossplane.io/composition-resource-name: resource-b
7spec:
8 coolerField: "I'm cooler!"
Required resources let a Composition request Crossplane objects on the cluster that aren’t part of the Composition. Pass them with --required-resources(-e), a YAML file or directory of YAML files of resources to mock. Use this with a Function likefunction-extra-resourcesor the built-in support infunction-go-templating.
Examples
Simulate creating a new XR:
1crossplane composition render xr.yaml composition.yaml functions.yaml
Simulate updating an XR that already exists:
1crossplane composition render xr.yaml composition.yaml functions.yaml \
2 --observed-resources=existing-observed-resources.yaml
Pin the Crossplane version used for rendering:
1crossplane composition render xr.yaml composition.yaml functions.yaml \
2 --crossplane-version=v2.3.0
Use a local crossplane binary instead of Docker:
1crossplane composition render xr.yaml composition.yaml functions.yaml \
2 --crossplane-binary=/usr/local/bin/crossplane
Pass context values to the Function pipeline:
1crossplane composition render xr.yaml composition.yaml functions.yaml \
2 --context-values=apiextensions.crossplane.io/environment='{"key": "value"}'
Pass required resources Functions in the pipeline can request:
1crossplane composition render xr.yaml composition.yaml functions.yaml \
2 --required-resources=required-resources.yaml
Pass OpenAPI schemas for Functions that need them:
1crossplane composition render xr.yaml composition.yaml functions.yaml \
2 --required-schemas=schemas/
Pass credentials to Functions in the pipeline that need them:
1crossplane composition render xr.yaml composition.yaml functions.yaml \
2 --function-credentials=credentials.yaml
Override function annotations for a remote Docker daemon:
1DOCKER_HOST=tcp://192.168.1.100:2376 crossplane composition render xr.yaml composition.yaml functions.yaml \
2 -a render.crossplane.io/runtime-docker-publish-address=0.0.0.0 \
3 -a render.crossplane.io/runtime-docker-target=192.168.1.100
Force all functions to use development runtime:
1crossplane composition render xr.yaml composition.yaml functions.yaml \
2 -a render.crossplane.io/runtime=Development \
3 -a render.crossplane.io/runtime-development-target=localhost:9444
Usage
crossplane composition render <composite-resource> <composition> [<functions>] [flags]
Arguments
| Argument | Description |
|---|---|
| A YAML file specifying the composite resource (XR) to render. | |
| A YAML file specifying the Composition to use to render the XR. Must be mode: Pipeline. | |
| [] | (optional) A YAML file or directory of YAML files specifying the Composition Functions to use to render the XR. Optional when running in a project. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --crossplane-version=VERSION | Version of the Crossplane image to use for rendering. Defaults to the latest stable version. | |
| --crossplane-image=IMAGE | Override the full Crossplane Docker image reference for rendering. | |
| --crossplane-binary=PATH | Path to a local crossplane binary to use instead of Docker. | |
| --context-files=KEY=VALUE;... | Comma-separated context key-value pairs to pass to the Function pipeline. Values must be files containing JSON/YAML. | |
| --context-values=KEY=VALUE;... | Comma-separated context key-value pairs to pass to the Function pipeline. Values must be JSON/YAML. Keys take precedence over –context-files. | |
| -r | --include-function-results | Include informational and warning messages from Functions in the rendered output as resources of kind: Result. |
| -x | --include-full-xr | Include a direct copy of the input XR’s spec and metadata fields in the rendered output. |
| -o | --observed-resources=PATH | A YAML file or directory of YAML files specifying the observed state of composed resources. |
| --extra-resources=PATH | A YAML file or directory of YAML files specifying required resources (deprecated, use –required-resources). | |
| -e | --required-resources=PATH | A YAML file or directory of YAML files specifying required resources to pass to the Function pipeline. |
| -s | --required-schemas=DIR | A directory of JSON files specifying OpenAPI v3 schemas (from kubectl get –raw /openapi/v3/). |
| -c | --include-context | Include the context in the rendered output as a resource of kind: Context. |
| --function-credentials=PATH | A YAML file or directory of YAML files specifying credentials to use for Functions to render the XR. | |
| -a | --function-annotations=KEY=VALUE,... | Override function annotations for all functions. Provide multiple annotations by repeating the argument. |
| --cache-dir=STRING | Directory for cached xpkg package contents. | |
| --max-concurrency=8 | Maximum concurrency for building embedded functions. | |
| -f | --project-file="crossplane-project.yaml" | Path to the project file. Optional. |
| --timeout=1m | How long to run before timing out. | |
| --xrd=PATH | A YAML file specifying the CompositeResourceDefinition (XRD) that defines the XR’s schema and properties. |
crossplane config
View and update the crossplane CLI configuration file.
The config command manages the configuration file for the crossplaneCLI. The configuration file location is, in priority order:
- The
--configflag. - The
CROSSPLANE_CONFIGenvironment variable. $XDG_CONFIG_HOME/crossplane/config.yaml(or~/.config/crossplane/config.yaml).
Examples
Show the current effective configuration:
Enable alpha commands:
1crossplane config set features.enableAlpha true
Usage
crossplane config <command> [flags]
crossplane config set
Set a value and write it to the configuration file.
Usage
crossplane config set <key> <value>
Arguments
| Argument | Description |
|---|---|
| Key to set (for example, features.enableAlpha). | |
| Value to assign. |
crossplane config view
Print the current effective configuration as YAML.
Usage
crossplane config view
crossplane dependency
[BETA] Manage dependencies of control plane Projects.
Beta features may change in a future release.
Usage
crossplane dependency <command> [flags]
crossplane dependency add
[BETA] Add a dependency to the current project.
Beta features may change in a future release.
The dependency add command adds a dependency to a Crossplane Project metadata file and generates language bindings (schemas) for the dependency package’s CRDs.
Dependency types
Projects support three kinds of dependencies:
- Crossplane packages from an OCI registry (xpkgs).
- Arbitrary CRDs fetched from either an HTTP(S) URL or a Git repository.
- Kubernetes core APIs.
An xpkg dependency may be either a runtime dependency (the default) or a build-time dependency. Runtime dependencies become dependencies of the Configuration produced by crossplane project build or crossplane project runand are thus installed into a cluster with the Configuration. Build-time dependencies have schemas generated but don’t become Configuration dependencies. Use the --api-only flag to add a build-time xpkg dependency.
Non-xpkg dependencies are always build-time dependencies.
Examples
Retrieve the latest available semantic version of provider-aws-eks, generate schemas for its CRDs, and add it to the project as a runtime dependency:
1crossplane dependency add xpkg.crossplane.io/crossplane-contrib/provider-aws-eks
Retrieve the latest available version greater than v1.1.0 ofprovider-gcp-storage, generate schemas for its CRDs, and add it to the project as a build-time only dependency:
1crossplane dependency add --api-only 'xpkg.crossplane.io/crossplane-contrib/provider-gcp-storage:>v1.1.0'
Generate schemas for the core resources from Kubernetes v1.33.0 and add it to the project as a build-time dependency:
1crossplane dependency add k8s:v1.33.0
Generate schemas for a specific CRD from an HTTP URL and add it to the project as a build-time dependency:
1crossplane dependency add https://raw.githubusercontent.com/cert-manager/cert-manager/refs/heads/master/deploy/crds/cert-manager.io_certificaterequests.yaml
Generate schemas for CRDs from a specific subdirectory of a git repository and add it to the project as a build-time dependency:
1crossplane dependency add https://github.com/kubernetes-sigs/cluster-api \
2 --git-ref=release-1.11 --git-path=config/crd/bases
Usage
crossplane dependency add <package> [flags]
Arguments
| Argument | Description |
|---|---|
| Package to add (xpkg OCI reference, k8s:, git repository URL, or HTTP(S) URL). |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -f | --project-file="crossplane-project.yaml" | Path to project definition file. |
| --cache-dir=STRING | Directory for cached xpkg package contents. | |
| --api-only | Mark an xpkg dependency as API-only (not a runtime dependency). | |
| --git-ref=STRING | Git ref for CRD dependencies (branch, tag, or commit SHA). | |
| --git-path=STRING | Path to CRDs in the git repository. |
crossplane dependency clean-cache
[BETA] Clean the dependency cache.
Beta features may change in a future release.
The clean-cache command removes all cached package images from the local cache directory and removes generated schemas. This can help free up disk space, force re-generation of schemas, or resolve issues with corrupted cache entries.
Usage
crossplane dependency clean-cache [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -f | --project-file="crossplane-project.yaml" | Path to project definition file. |
| --cache-dir=STRING | Directory for cached xpkg package contents. | |
| --keep-packages | Keep cached xpkg package contents; remove only generated schemas. |
crossplane dependency update-cache
[BETA] Update the dependency cache for the current project.
Beta features may change in a future release.
The dependency update-cache command updates the local dependency cache for the current project. It re-resolves semantic version constraints to specific versions (fetching newer versions if available), caches all dependencies, and re-generates language bindings (schemas) for them if needed.
Usage
crossplane dependency update-cache [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -f | --project-file="crossplane-project.yaml" | Path to project definition file. |
| --cache-dir=STRING | Directory for cached xpkg package contents. | |
| --git-token=STRING | Token for git HTTPS authentication. | |
| --git-username="x-access-token" | Username for git HTTPS authentication. |
crossplane function
[BETA] Work with functions in control plane Projects.
Beta features may change in a future release.
Usage
crossplane function <command> [flags]
crossplane function generate
[BETA] Generate a Function for a Composition.
Beta features may change in a future release.
The function generate command creates an embedded function in the specified language under the project’s functions/ directory. It optionally idempotently adds the new function to the end of a Composition’s pipeline when given a Composition path.
Supported languages
The following are valid arguments to the --language / -l flag:
go-templating(default)gokclpython
Examples
Create a function with the default language (go-templating) infunctions/fn1:
1crossplane function generate fn1
Create a Python function in functions/fn2:
1crossplane function generate fn2 --language python
Create a Go function in functions/compose-cluster and add it as a pipeline step in the given Composition:
1crossplane function generate compose-cluster apis/cluster/composition.yaml --language go
Usage
crossplane function generate <name> [<pipeline-path>] [flags]
Arguments
| Argument | Description |
|---|---|
| Name of the function to generate. Must be a valid DNS-1035 label. | |
| [] | (optional) Path to a Composition YAML file to add a pipeline step to. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -l | --language="go-templating" | Language to use for the function. |
| -f | --project-file="crossplane-project.yaml" | Path to project definition file. |
crossplane operation
[ALPHA] Work with Crossplane Operations.
Alpha features are experimental and may change or disappear in a future release.
Usage
crossplane operation <command> [flags]
crossplane operation render
[ALPHA] Render an Operation.
Alpha features are experimental and may change or disappear in a future release.
The operation render command shows you what resources an Operation would create or mutate by running the operation locally and printing its results. It runs the Crossplane render engine (either in a Docker container or via a local binary) to produce high-fidelity output that matches what the real reconciler would produce.
This command runs operation functions and the Crossplane render engine using Docker by default, requiring a working Docker installation. See the function annotations and --crossplane-binary option below to understand how to render without Docker.
Function runtime configuration
By default, the render command pulls and runs Operation Functions using Docker. You can add the following annotations to each Function to change how they’re run:
| Annotation | Purpose |
|---|---|
| render.crossplane.io/runtime: "Development" | Connect to a Function running locally, instead of using Docker, for example when developing or debugging a new Function. The Function must be listening at localhost:9443 and running with the --insecure flag. |
| render.crossplane.io/runtime-development-target: "dns:///example.org:7443" | Connect to a Function running somewhere other than localhost:9443. The target uses gRPC target syntax (for example, dns:///example.org:7443 or example.org:7443). |
| render.crossplane.io/runtime-docker-cleanup: "Orphan" | Don’t stop the Function’s Docker container after rendering. |
| render.crossplane.io/runtime-docker-name: "" | Create or reuse a container with the given name. Restart the container if needed. |
| render.crossplane.io/runtime-docker-pull-policy: "Always" | Always pull the Function’s package, even if it already exists locally. Other supported values are Never or IfNotPresent. |
| render.crossplane.io/runtime-docker-publish-address: "0.0.0.0" | Host address that Docker should publish the Function’s container port to. Defaults to 127.0.0.1 (localhost only). Use 0.0.0.0 to publish to all host network interfaces, enabling access from remote machines. |
| render.crossplane.io/runtime-docker-target: "docker-host" | Address that the render CLI should use to connect to the Function’s Docker container. If not specified, uses the publish address. |
Use the standard DOCKER_HOST, DOCKER_API_VERSION, DOCKER_CERT_PATH, andDOCKER_TLS_VERIFY environment variables to configure how this command connects to the Docker daemon. See theDocker environment variablesreference.
Project support
When running render in a Crossplane Project (any directory containing acrossplane-project.yaml project metadata file), you may omit the functions file argument in favor of using function dependencies defined in the project metadata and embedded functions from the project.
Examples
Render an Operation:
1crossplane operation render operation.yaml functions.yaml
Pin the Crossplane version used for rendering:
1crossplane operation render operation.yaml functions.yaml \
2 --crossplane-version=v2.2.1
Use a local crossplane binary instead of Docker:
1crossplane operation render operation.yaml functions.yaml \
2 --crossplane-binary=/usr/local/bin/crossplane
Pass context values to the function pipeline:
1crossplane operation render operation.yaml functions.yaml \
2 --context-values=apiextensions.crossplane.io/environment='{"key": "value"}'
Pass required resources functions can request:
1crossplane operation render operation.yaml functions.yaml \
2 --required-resources=required-resources.yaml
Pass OpenAPI schemas for functions that need them:
1crossplane operation render operation.yaml functions.yaml \
2 --required-schemas=schemas/
Render a WatchOperation with a watched resource:
1crossplane operation render watchoperation.yaml functions.yaml \
2 --watched-resource=watched-configmap.yaml
Pass credentials to functions that need them:
1crossplane operation render operation.yaml functions.yaml \
2 --function-credentials=credentials.yaml
Include function results and context in output:
1crossplane operation render operation.yaml functions.yaml -r -c
Include the full Operation with original spec and metadata:
1crossplane operation render operation.yaml functions.yaml -o
Override function annotations for remote Docker daemon:
1crossplane operation render operation.yaml functions.yaml \
2 -a render.crossplane.io/runtime-docker-publish-address=0.0.0.0 \
3 -a render.crossplane.io/runtime-docker-target=192.168.1.100
Use development runtime with custom target for all functions:
1crossplane operation render operation.yaml functions.yaml \
2 -a render.crossplane.io/runtime=Development \
3 -a render.crossplane.io/runtime-development-target=localhost:9444
Usage
crossplane operation render <operation> [<functions>] [flags]
Arguments
| Argument | Description |
|---|---|
| A YAML file specifying the Operation to render. | |
| [] | (optional) A YAML file or directory of YAML files specifying the Composition Functions to use to render the XR. Optional when running in a project. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --crossplane-version=VERSION | Version of the Crossplane image to use for rendering. Defaults to the latest stable version. | |
| --crossplane-image=IMAGE | Override the full Crossplane Docker image reference for rendering. | |
| --crossplane-binary=PATH | Path to a local crossplane binary to use instead of Docker. | |
| --context-files=KEY=VALUE;... | Comma-separated context key-value pairs to pass to the function pipeline. Values must be files containing JSON. | |
| --context-values=KEY=VALUE;... | Comma-separated context key-value pairs to pass to the function pipeline. Values must be JSON. Keys take precedence over –context-files. | |
| --function-credentials=PATH | A YAML file or directory of YAML files specifying credentials to use for functions. | |
| -a | --function-annotations=KEY=VALUE,... | Override function annotations for all functions. Provide multiple annotations by repeating the argument. |
| -c | --include-context | Include the context in the rendered output as a resource of kind: Context. |
| -o | --include-full-operation | Include a direct copy of the input Operation’s spec and metadata fields in the rendered output. |
| -r | --include-function-results | Include informational and warning messages from functions in the rendered output as resources of kind: Result. |
| -e | --required-resources=PATH | A YAML file or directory of YAML files specifying required resources to pass to the function pipeline. |
| --required-schemas=DIR | A directory of JSON files specifying OpenAPI schemas to pass to the function pipeline. | |
| -w | --watched-resource=PATH | A YAML file specifying the watched resource for WatchOperation rendering. The resource is also added to required resources. |
| --cache-dir=STRING | Directory for cached xpkg package contents. | |
| --max-concurrency=8 | Maximum concurrency for building embedded functions. | |
| -f | --project-file="crossplane-project.yaml" | Path to the project file. Optional. |
| --timeout=1m | How long to run before timing out. |
crossplane project
[BETA] Work with control plane Projects.
Beta features may change in a future release.
Usage
crossplane project <command> [flags]
crossplane project build
[BETA] Build a project into Crossplane packages.
Beta features may change in a future release.
The project build command builds a Crossplane Project into a set of xpkgs. It builds each embedded function in the project and a Configuration package that ties everything together. The output of the build is a special .xpkg file containing all the built packages, placed in the project’s output directory (_output/ by default). The project push command can consume packages from the output file and push them to an OCI registry.
The build command constructs the repository for the built Configuration fromspec.repository in crossplane-project.yaml. Override it for a single build with --repository.
The repository influences the function names used for embedded function references in compositions. You must specify the same repository when building and pushing a project.
The build reuses the dependency cache populated by crossplane dependency addand crossplane dependency update-cache. Override the cache location with--cache-dir or the CROSSPLANE_XPKG_CACHE environment variable.
Examples
Build the project in the current directory:
1crossplane project build
Build the project, overriding the repository:
1crossplane project build --repository=xpkg.crossplane.io/my-org/my-project
Build the project into a custom output directory:
1crossplane project build -o ./packages
Usage
crossplane project build [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -f | --project-file="crossplane-project.yaml" | Path to project definition. |
| --repository=STRING | Override the repository in the project file. | |
| -o | --output-dir="_output" | Output directory for packages. |
| --max-concurrency=8 | Max concurrent function builds. | |
| --cache-dir=STRING | Directory for cached xpkg package contents. |
crossplane project init
[BETA] Initialize a new project.
Beta features may change in a future release.
The project init command scaffolds a new, empty Crossplane Project. It creates a target directory containing a minimal crossplane-project.yaml along with the standard sub-directories used by the DevEx tooling: apis,functions, examples, tests, and operations.
The project name must be a valid DNS-1035 label. By default, the init command creates a new directory named after the project; use --directory (-d) to choose a different target directory.
Examples
Create a new project named my-project in ./my-project/:
1crossplane project init my-project
Create a new project in a specific directory:
1crossplane project init my-project --directory ./projects/new-project
Usage
crossplane project init <name> [flags]
Arguments
| Argument | Description |
|---|---|
| The name of the new project. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -d | --directory=STRING | Directory to initialize. Defaults to project name. |
crossplane project push
[BETA] Push a built project to an OCI registry.
Beta features may change in a future release.
The project push command pushes the xpkgs produced by crossplane project build to an OCI registry. It pushes both the Configuration package and any embedded function packages built from the project. The push command uses registry credentials from the local docker configuration; pushing to a private registry may require a prior docker login.
By default the command pushes to the repository specified incrossplane-project.yaml and uses a tag generated from the package contents. Override either with --repository and --tag (-t). To push a specific package file instead of the project’s default output, use --package-file.
The repository influences the function names used for embedded function references in compositions. You must specify the same repository when building and pushing a project.
Examples
Push the project’s packages using the repository and a generated tag:
Push using an explicit tag:
1crossplane project push --tag=v1.2.3
Push to a different repository than the one in the project file:
1crossplane project push --repository=xpkg.crossplane.io/my-org/my-project --tag=v1.2.3
Usage
crossplane project push [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -f | --project-file="crossplane-project.yaml" | Path to project definition. |
| --repository=STRING | Override the repository in the project file. | |
| -t | --tag="" | Tag for the pushed package. Defaults to a time-based semver-like tag. |
| --package-file=STRING | Package file to push. Defaults to /.xpkg. | |
| -o | --output-dir="_output" | Directory containing built packages. |
| --max-concurrency=8 | Max concurrent function pushes. | |
| --insecure-skip-tls-verify | [INSECURE] Skip verifying TLS certificates. |
crossplane project run
[BETA] Build and run a project in a local dev control plane.
Beta features may change in a future release.
The project run command builds a Crossplane Project and runs it on a local development control plane for testing.
This command:
- Builds all embedded functions defined in the project.
- Creates (or reuses) a local development control plane running in a KIND cluster, with a local OCI registry for packages.
- Loads the project’s packages into the local OCI registry.
- Installs the project’s Configuration on the control plane.
- Updates kubeconfig so
kubectlpoints at the development control plane.
By default, run names the control plane after the project. Use--control-plane-name to choose a different name, which is useful when running multiple projects side-by-side.
You can use a Crossplane version other than the latest stable version by specifying the --crossplane-version flag.
You can provide resources to apply around the project install:
--init-resourcesapplies one or more files before installing the Configuration (useful for things likeImageConfig).--extra-resourcesapplies one or more files after installing the Configuration and its dependencies (useful for things likeProviderConfig).
Examples
Build and run the project on the default local development control plane:
Run on a control plane with a specific name (created if it doesn’t exist):
1crossplane project run --control-plane-name=my-dev-ctp
Pin the Crossplane version installed in the dev control plane:
1crossplane project run --crossplane-version=v2.2.1
Apply imageconfig.yaml before installing the Configuration, andproviderconfig.yaml after:
1crossplane project run --init-resources=imageconfig.yaml --extra-resources=providerconfig.yaml
Usage
crossplane project run [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -f | --project-file="crossplane-project.yaml" | Path to project definition. |
| --repository=STRING | Override the repository. | |
| --max-concurrency=8 | Max concurrent builds. | |
| --cache-dir=STRING | Directory for cached xpkg package contents. | |
| --control-plane-name=STRING | Name of the dev control plane. Defaults to project name. | |
| --crossplane-version=STRING | Version of Crossplane to install. | |
| --registry-dir=STRING | Directory for local registry images. | |
| --cluster-admin | Grant Crossplane the cluster-admin role. | |
| --timeout=5m | Max wait for project readiness. | |
| --init-resources=INIT-RESOURCES | Resources to apply before installing. | |
| --extra-resources=EXTRA-RESOURCES | Resources to apply after installing. |
crossplane project stop
[BETA] Tear down a local dev control plane.
Beta features may change in a future release.
The project stop command tears down the local development control plane created by crossplane project run. It removes both the KIND cluster and the local OCI registry.
When run from a project directory, the stop command tears down the control plane whose name matches the project name. When run outside a project directory, pass --control-plane-name to identify the control plane to tear down. If you passed --registry-dir to crossplane project run, pass it to crossplane project stop as well to clean up the registry data.
Examples
Tear down the development control plane for the project in the current directory:
Tear down a specific local dev control plane by name:
1crossplane project stop --control-plane-name=my-dev-cp
Usage
crossplane project stop [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -f | --project-file="crossplane-project.yaml" | Path to project definition. |
| --control-plane-name=STRING | Name of the dev control plane. Defaults to project name. | |
| --registry-dir=STRING | Directory for local registry images. |
crossplane resource
[BETA] Work with Crossplane resources.
Beta features may change in a future release.
Usage
crossplane resource <command> [flags]
crossplane resource trace
[BETA] Trace a Crossplane resource for troubleshooting.
Beta features may change in a future release.
The resource trace command traces a Crossplane resource (Claim, Composite, or Managed Resource) to give a detailed view of its relationships and help troubleshoot compositions.
The command requires a resource type and a resource name:
1crossplane resource trace <resource kind> <resource name>
Kubernetes-style <kind>/<name> input works too: for example, crossplane resource trace example.crossplane.io/my-xr.
You can further specify the kind as TYPE[.VERSION][.GROUP] if needed; for example, mykind.example.org or mykind.v1alpha1.example.org.
By default, crossplane resource trace uses the Kubernetes configuration at~/.kube/config. Override with the KUBECONFIG environment variable.
Output options
By default, trace prints to the terminal as a tree, truncating the Ready andStatus messages to 64 characters.
Change the format with -o (--output): wide, json, yaml, or dot (for a Graphviz graph).
Wide output
Use --output=wide to print the full Ready and Status messages even when they exceed 64 characters, and other kind-specific printer columns.
Graphviz dot output
Use --output=dot to print a textualGraphviz dot graph. Pipe to dot to render an image:
1crossplane resource trace cluster.aws.platformref.upbound.io platform-ref-aws -o dot | dot -Tpng -o graph.png
Print connection secrets
Use --show-connection-secrets to include connection-secret names alongside the other resources. Secret values are never printed. Output includes the secret name and namespace.
Print package dependencies
The --show-package-dependencies flag controls how the display of package dependencies:
unique(default): include each required package only once.all: show every package that requires the same dependency.none: hide all package dependencies.
Print package revisions
The --show-package-revisions flag controls the display of package revisions:
active(default): show only the active revisions.all: show all revisions, including inactive ones.none: hide all revisions.
Examples
Trace a MyKind resource named my-res in the namespace my-ns:
1crossplane resource trace mykind my-res -n my-ns
Trace all MyKind resources in the namespace my-ns:
1crossplane resource trace mykind -n my-ns
Wide format with full errors, condition messages, and kind-specific columns:
1crossplane resource trace mykind my-res -n my-ns -o wide
Show connection secret names alongside the resources:
1crossplane resource trace mykind my-res -n my-ns --show-connection-secrets
Output a Graphviz dot graph and pipe to dot to generate a PNG:
1crossplane resource trace mykind my-res -n my-ns -o dot | dot -Tpng -o output.png
Output all retrieved resources as JSON and pipe to jq for color:
1crossplane resource trace mykind my-res -n my-ns -o json | jq
Output debug logs to stderr while piping a dot graph to dot:
1crossplane resource trace mykind my-res -n my-ns -o dot --verbose | dot -Tpng -o output.png
Watch a resource continuously until its deletion:
1crossplane resource trace mykind my-res -n my-ns --watch
Usage
crossplane resource trace <resource> [<name>] [flags]
Arguments
| Argument | Description |
|---|---|
| Kind of the Crossplane resource, accepts the ‘TYPE[.VERSION][.GROUP][/NAME]’ format. | |
| [] | (optional) Name of the Crossplane resource, if not passed as part of the resource. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -c | --context="" | Kubernetes context. |
| -n | --namespace="" | Namespace of the resource. |
| -o | --output="default" | Output format. One of: default, wide, json, dot, yaml. |
| -s | --show-connection-secrets | Show connection secrets in the output. |
| --show-package-dependencies="unique" | Show package dependencies in the output. One of: unique, all, none. | |
| --show-package-revisions="active" | Show package revisions in the output. One of: active, all, none. | |
| --show-package-runtime-configs | Show package runtime configs in the output. | |
| --concurrency=5 | load concurrency | |
| -w | --watch | Watch for changes until resource deletion. |
crossplane resource validate
[BETA] Validate Crossplane resources.
Beta features may change in a future release.
The resource validate command validates the provided Crossplane resources against the schemas of the provided extensions (XRDs, CRDs, Providers, Functions, and Configurations). It uses the Kubernetes API server’s validation library plus other checks such as unknown-field detection, a common source of difficult-to-debug Crossplane issues.
The validate command downloads any Providers or Configurations provided as extensions, and loads their CRDs before validation. If --cache-dir isn’t set, it defaults to ~/.crossplane/cache. Clean the cache before downloading schemas with --clean-cache.
All validation happens offline using the Kubernetes API server’s validation library, without requiring a Crossplane instance or control plane.
crossplane resource validate supports validating:
- A managed or composite resource against a Provider or XRD schema.
- The output of
crossplane composition render. - An XRD’s Common Expression Language(CEL) rules.
- Resources against a directory of schemas.
Validate resources against a schema
When validating against a Provider, the command downloads the Provider package to --cache-dir. Access to a Kubernetes cluster or Crossplane pod isn’t required as validate downloads the Provider extracts it locally.
Create a Provider manifest:
1apiVersion: pkg.crossplane.io/v1
2kind: Provider
3metadata:
4 name: crossplane-contrib-provider-aws-iam
5spec:
6 package: xpkg.crossplane.io/crossplane-contrib/provider-aws-iam:v2.0.0
Provide a managed resource to validate:
1apiVersion: iam.aws.m.upbound.io/v1beta1
2kind: AccessKey
3metadata:
4 namespace: default
5 name: sample-access-key-0
6spec:
7 forProvider:
8 userSelector:
9 matchLabels:
10 example-name: test-user-0
Run validate with both files:
1crossplane resource validate provider.yaml managedResource.yaml
Validate render output
Pipe the output of crossplane composition render to validate to validate complete Crossplane resource pipelines, including XRs, Compositions, and Functions. Use --include-full-xr on render, and - (read stdin) onvalidate:
1crossplane composition render xr.yaml composition.yaml func.yaml --include-full-xr | \
2 crossplane resource validate schemas.yaml -
Validate Common Expression Language rules
XRDs can definevalidation rulesin CEL via x-kubernetes-validations. validate evaluates them:
1apiVersion: apiextensions.crossplane.io/v1
2kind: CompositeResourceDefinition
3metadata:
4 name: myxrs.example.crossplane.io
5spec:
6 # ... versions[].schema.openAPIV3Schema:
7 # spec:
8 # x-kubernetes-validations:
9 # - rule: "self.minReplicas <= self.replicas && self.replicas <= self.maxReplicas"
10 # message: "replicas should be in between minReplicas and maxReplicas."
Validate against a directory of schemas
validate can also take a directory of schema YAML files to use for validation. It ignores any files with extensions other than .yml or .yaml.
1schemas/
2├── platform-ref-aws.yaml
3├── providers/
4│ └── provider-aws-iam.yaml
5└── xrds/
6 └── xrd.yaml
1crossplane resource validate schemas/ resources.yaml
Examples
Validate resources against extensions in extensions.yaml:
1crossplane resource validate extensions.yaml resources.yaml
Validate resources in a directory against extensions in another directory:
1crossplane resource validate crossplane.yaml,extensionsDir/ resourceDir/
Pin the Crossplane image version used during validation:
1crossplane resource validate extensions.yaml resources.yaml \
2 --crossplane-image=xpkg.crossplane.io/crossplane/crossplane:v1.20.0
Skip success log lines (only print problems):
1crossplane resource validate extensionsDir/ resourceDir/ --skip-success-results
Validate the output of render against extensions in a directory:
1crossplane composition render xr.yaml composition.yaml func.yaml --include-full-xr | \
2 crossplane resource validate extensionsDir/ -
Use a custom cache directory and clean it before downloading schemas:
1crossplane resource validate extensionsDir/ resourceDir/ --cache-dir .cache --clean-cache
Usage
crossplane resource validate <extensions> <resources> [flags]
Arguments
| Argument | Description |
|---|---|
| Extension sources as a comma-separated list of files, directories, or ‘-’ for standard input. | |
| Resource sources as a comma-separated list of files, directories, or ‘-’ for standard input. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --cache-dir="~/.crossplane/cache" | Absolute path to the cache directory for downloaded schemas. | |
| --clean-cache | Clean the cache directory before downloading package schemas. | |
| --crossplane-image=STRING | Specify the Crossplane image for validating built-in schemas. | |
| --error-on-missing-schemas | Return non zero exit code if missing schemas. | |
| --skip-success-results | Skip printing success results. | |
| --update-cache | Update cached schemas by downloading the latest version that satisfies a constraint. May be useful if you are using semantic version constraints and want to get the latest version, but this slows down the cache lookup due to the required network calls. |
crossplane version
Print the client and server version information for the current context.
Usage
crossplane version [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --client | If true, shows client version only (no server required). |
crossplane xpkg
Work with Crossplane packages.
Crossplane packages, called xpkgs, allow you to add capabilities to your Crossplane installation. Crossplane supports Configuration, Provider, and Function packages.
A package is an opinionated OCI image that contains everything needed to extend a Crossplane control plane with new capabilities. For example, installing a Provider package extends Crossplane with support for new kinds of managed resource (MRs).
See the Crossplane packages documentationfor more information.
Usage
crossplane xpkg <command> [flags]
crossplane xpkg batch
Batch build and push a family of provider packages.
Usage
crossplane xpkg batch --family-base-image=STRING --provider-name=STRING --family-package-url-format=STRING [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --family-base-image=STRING | Required. Family image used as the base for the smaller provider packages. | |
| --provider-name=STRING | Required. Provider name prefix, such as provider-aws, for smaller provider package repositories. | |
| --family-package-url-format=STRING | Required. Family package URL format for the smaller provider packages. Must be a valid OCI image URL containing the format specifier ‘%s’, substituted with -. | |
| --smaller-providers=monolith,... | Smaller provider names to build and push, such as ec2, eks, or s3. | |
| --concurrency=0 | Maximum number of packages to process concurrently. 0 puts no limit on the concurrency, processing all packages in parallel. | |
| --push-retry=3 | Number of retries when pushing a provider package fails. | |
| --platform=linux_amd64,linux_arm64,... | Platforms to build the packages for. Each platform must use the _ syntax. An example is: linux_arm64. | |
| -p | --provider-bin-root=STRING | Provider binary paths root. Smaller provider binaries must be under the platform directories in this folder. |
| -o | --output-dir=STRING | Path of the package output directory. |
| --store-packages=STORE-PACKAGES,... | Smaller provider names whose provider package must be under the package output directory specified with the –output-dir option. | |
| --package-metadata-template="./package/crossplane.yaml.tmpl" | Smaller provider metadata template. The template variables {{ .Service }} and {{ .Name }} are always set; you may supply optional variables via –service-metadata and –template-var (the latter overrides on key conflicts). | |
| --template-var=KEY=VALUE;... | Smaller provider metadata template variables for the specified template. | |
| --service-metadata=STRING | Optional YAML file of per smaller-provider template variables. Top-level keys are smaller provider names (such as ec2, elb). Each entry is a map of variable names to scalars or lists; values get merged into the package metadata template as-is. Templates may use generic helpers toYAML and indent (YAML via gopkg.in/yaml.v3). Merged before –template-var. | |
| --examples-group-override=KEY=VALUE;... | Overrides for the location of the example manifests folder of a smaller provider. | |
| --crd-group-override=KEY=VALUE;... | Overrides for the locations of the CRD folders of the smaller providers. | |
| --package-repo-override=KEY=VALUE;... | Overrides for the package repository names of the smaller providers. | |
| -e | --examples-root="./examples" | Path to package examples directory. |
| --crd-root="./package/crds" | Path to package CRDs directory. | |
| --ignore=IGNORE,... | Paths to exclude from the smaller provider packages. | |
| --build-only | Only build the smaller provider packages and don’t push them to a package repository. | |
| --provider-name-suffix-for-push=STRING | Suffix for provider name when pushing the packages, to add to the service name for the corresponding provider before the service-scoped name. Examples: provider-family-aws-suffix, provider-aws-suffix-s3 |
crossplane xpkg build
Build a new package.
The xpkg build command builds a package file from a local directory of files. The CLI combines a directory of YAML files and packages them as anOCI container image, applying the annotations and values required by theCrossplane XPKG specification.
crossplane xpkg build supports building Configuration, Function, and Provider package types.
The command recursively looks in --package-root for files ending in .yml or.yaml and attempts to combine them into a package. All YAML files must be valid Kubernetes manifests with apiVersion, kind, metadata, and specfields.
Ignore files
Use --ignore to provide a comma-separated list of globs specifying files to exclude from the build, relative to --package-root.
1crossplane xpkg build --ignore="./test/*,kind-config.yaml"
Set the package name
By default, the build command constructs the package filename using a combination of metadata.name and a hash of the package contents, and writes it to --package-root. Override the location and filename with --package-file(-o):
1crossplane xpkg build -o /home/crossplane/example.xpkg
Include examples
Include YAML files demonstrating how to use the package with --examples-root(-e). Defaults to ./examples.
Include a runtime image
Function and Provider packages embed a controller container image. Configuration packages don’t have a runtime image.
Images referenced with --embed-runtime-image must be in the local Docker cache. Use docker pull to download a missing image.
Use --embed-runtime-image-tarball to embed a local OCI image tarball instead of an image from the Docker cache.
Examples
Build a package from the files in the ‘package’ directory:
1crossplane xpkg build --package-root=package/
Build a Provider package that embeds the controller OCI image so the package can also run the provider.
1crossplane xpkg build --embed-runtime-image=cc873e13cdc1
Usage
crossplane xpkg build [flags]
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --embed-runtime-image=NAME | An OCI image to embed in the package as its runtime. | |
| --embed-runtime-image-tarball=PATH | An OCI image tarball to embed in the package as its runtime. | |
| -e | --examples-root="./examples" | A directory of example YAML files to include in the package. |
| --ignore=PATH,... | comma-separated list of globs specifying files to exclude from the build, relative to –package-root. | |
| -o | --package-file=PATH | The file to write the package to. Defaults to a generated filename in –package-root. |
| -f | --package-root="." | The directory that contains the package’s crossplane.yaml file. |
Extract package contents into a Crossplane cache compatible format. Fetches from a remote registry by default.
Usage
crossplane xpkg extract [<package>] [flags]
Arguments
| Argument | Description |
|---|---|
| [] | (optional) Name of the package to extract. Must be a valid and fully qualified OCI image tag or a path if using –from-xpkg. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --from-daemon | Fetch the image from the Docker daemon. | |
| --from-xpkg | Extract a local xpkg file. If package isn’t specified, implies the only one in the current directory. | |
| -o | --output="out.gz" | Package output file. Extension must be .gz. |
crossplane xpkg init
Initialize a new package from a template.
The xpkg init command initializes a directory that you can use to build a package. It uses a template to initialize the directory, and can use any Git repository as a template.
Specify either a full Git URL or one of the following names as the template:
function-template-go(https://github.com/crossplane/function-template-go)function-template-python(https://github.com/crossplane/function-template-python)configuration-template(https://github.com/crossplane/configuration-template)provider-template(https://github.com/crossplane/provider-template)provider-template-upjet(https://github.com/crossplane/upjet-provider-template)
NOTES.txt
The init command prints the contents of any NOTES.txt file in the template root after initializing the directory. Useful for instructions on how to use the template.
init.sh
The init command executes any init.sh file in the template root (after user confirmation). Useful for scripts that personalize the template. Pass -r(--run-init-script) to run the script without prompting.
Examples
Initialize a new Go Composition Function named function-example:
1crossplane xpkg init function-example function-template-go
Initialize a new Provider named provider-example from a custom template:
1crossplane xpkg init provider-example https://github.com/crossplane/provider-template-custom
Initialize a new Go Composition Function and run its init.sh script (if any) without prompting or displaying its contents:
1crossplane xpkg init function-example function-template-go --run-init-script
Usage
crossplane xpkg init <name> <template> [flags]
Arguments
| Argument | Description |
|---|---|
| The name of the new package to initialize. | |
| The template name or URL to use to initialize the new package. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -d | --directory="." | The directory to initialize. It must be empty if it exists. |
| -r | --run-init-script | Runs the init.sh script if it exists without prompting |
| -b | --ref-name=STRING | The branch or tag to clone from the template repository. |
crossplane xpkg install
Install a package in a control plane.
The xpkg install command installs a package in a Crossplane control plane. It uses ~/.kube/config to connect to the control plane; override the path with the KUBECONFIG environment variable.
Specify the package kind, fully qualified package OCI reference, and optionally a name for the package inside Crossplane:
1crossplane xpkg install <package-kind> <oci-ref> [<optional-name>]
The <package-kind> is one of configuration, function, or provider.
The package reference must be fully qualified, including the registry, repository, and tag (for example, registry.example.com/package:v1.0.0).
Wait for package install
By default the command returns as soon as Crossplane accepts the package. It doesn’t wait for the download or install to complete. To inspect download or installation problems, run kubectl describe <kind>.
Use --wait (-w) to make the command wait for the package to become HEALTHYbefore returning. The command returns an error if the wait time expires before the package is healthy.
Require manual package activation
Pass -m (--manual-activation) to set the package’srevisionActivationPolicy to Manual, which prevents automatic upgrades of the package.
Authenticate to a private registry
To authenticate to a private package registry use --package-pull-secrets with a comma-separated list of Kubernetes Secret names.
The secrets must be in the same namespace as the Crossplane pod.
Customize the number of stored package revisions
By default Crossplane keeps only the active revision and one inactive revision in the local package cache. Increase the number of stored revisions with -r(--revision-history-limit).
Examples
Wait 1 minute for the package to finish installing before returning:
1crossplane xpkg install provider xpkg.crossplane.io/crossplane-contrib/provider-aws-eks:v0.41.0 --wait=1m
Install a Function named function-eg using a custom DeploymentRuntimeConfig:
1crossplane xpkg install function xpkg.crossplane.io/crossplane/function-example:v0.1.4 function-eg \
2 --runtime-config=customconfig
Usage
crossplane xpkg install <kind> <package> [<name>] [flags]
Arguments
| Argument | Description |
|---|---|
| The kind of package to install. One of ‘provider’, ‘configuration’, or ‘function’. | |
| The package to install, must be fully qualified, including the registry, repository, and tag. | |
| [] | (optional) The name of the new package in the Crossplane API. Derived from the package repository and tag by default. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --runtime-config=NAME | Install the package with a runtime configuration (for example a DeploymentRuntimeConfig). | |
| -m | --manual-activation | Require the new package’s first revision to be manually activated. |
| --package-pull-secrets=NAME,... | A comma-separated list of secrets the package manager should use to pull the package from the registry. | |
| -r | --revision-history-limit=LIMIT | Number of package revisions that can exist before garbage collection. |
| -w | --wait=0s | How long to wait for the package to install before returning. The command doesn’t wait by default. |
crossplane xpkg push
Push a package to a registry.
The xpkg push command pushes a Crossplane package file to any OCI registry. A package’s OCI tag must be a semantic version. The push command uses registry credentials from the local docker configuration; pushing to a private registry may require a prior docker login.
By default the command looks in the current directory for a single .xpkg file to push. To push multiple files (for example, a multi-platform package) or a specific .xpkg file, use -f (--package-files).
The destination must be fully qualified, including the registry, repository, and tag (for example, registry.example.com/package:v1.0.0).
Examples
Push a multi-platform package:
1crossplane xpkg push -f function-amd64.xpkg,function-arm64.xpkg \
2 xpkg.crossplane.io/crossplane/function-example:v1.0.0
Push the single xpkg file in the current directory:
1crossplane xpkg push xpkg.crossplane.io/crossplane/function-example:v1.0.0
Push to Docker Hub:
1crossplane xpkg push docker.io/crossplane/function-example:v1.0.0
Usage
crossplane xpkg push <package> [flags]
Arguments
| Argument | Description |
|---|---|
| Where to push the package. Must be a fully qualified OCI tag, including the registry, repository, and tag. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --insecure-skip-tls-verify | [INSECURE] Skip verifying TLS certificates. | |
| -f | --package-files=PATH | A comma-separated list of xpkg files to push. |
crossplane xpkg update
Update a package in a control plane.
The xpkg update command updates a package in a Crossplane control plane. It uses ~/.kube/config to connect to the control plane; override the path with the KUBECONFIG environment variable.
Specify the package kind, a new fully qualified package OCI reference, and optionally the name of the package already installed in Crossplane:
1crossplane xpkg update <package-kind> <oci-ref> [<optional-name>]
The package reference must be fully qualified, including the registry, repository, and tag (for example, registry.example.com/package:v1.0.0).
Examples
Update the Function named function-eg to a new version:
1crossplane xpkg update function xpkg.crossplane.io/crossplane/function-example:v0.1.5 function-eg
Update to the latest patch version of a Provider:
1crossplane xpkg update provider xpkg.crossplane.io/crossplane-contrib/provider-aws-s3:v2.0.0
Usage
crossplane xpkg update <kind> <package> [<name>]
Arguments
| Argument | Description |
|---|---|
| The kind of package to update. One of ‘provider’, ‘configuration’, or ‘function’. | |
| The package to update to. Must be fully qualified, including the registry, repository, and tag. | |
| [] | (optional) The name of the package to update in the Crossplane API. Derived from the package repository and tag by default. |
crossplane xrd
[BETA] Work with Crossplane Composite Resource Definitions (XRDs).
Beta features may change in a future release.
Usage
crossplane xrd <command> [flags]
crossplane xrd convert
[BETA] Convert an XRD to a Kubernetes CRD.
Beta features may change in a future release.
The xrd convert command converts a CompositeResourceDefinition (XRD) into one or more CustomResourceDefinitions that Crossplane derives from it internally.
Useful for inspecting the generated CRD shape, feeding it into kubectl-based tooling that doesn’t understand XRDs, or debugging composition behavior.
Output depends on the XRD type, detected automatically:
- Namespaced or Cluster-scoped XRD: 1 CRD for the XR
- Legacy XRD without
claimNames: 1 CRD for the XR - Legacy XRD with
claimNames: 2 CRDs: one for the XR and one for the Claim
Examples
Convert an XRD file and print the CRDs to stdout (multi-doc YAML for legacy XRDs):
1crossplane xrd convert xrd.yaml
Convert and write to a single file (multi-doc YAML for legacy XRDs):
1crossplane xrd convert xrd.yaml -o crds.yaml
Split per-CRD files into a directory (each named <crd.Name>.yaml):
1crossplane xrd convert xrd.yaml --output-dir ./crds/
Read the XRD from stdin:
1cat xrd.yaml | crossplane xrd convert -
Usage
crossplane xrd convert [<input-file>] [flags]
Arguments
| Argument | Description |
|---|---|
| [] | (optional) The XRD YAML file to convert, or ‘-’ for stdin. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| -o | --output-file=PATH | The file to write the generated CRD YAML to. Legacy XRDs produce a multi-doc YAML stream (XR CRD + Claim CRD). |
| --output-dir=DIR | A directory to write the generated CRDs to. Each CRD gets a separate file named after the CRD. |
crossplane xrd generate
[BETA] Generate an XRD from a Composite Resource (XR) or SimpleSchema definition.
Beta features may change in a future release.
The xrd generate command creates a CompositeResourceDefinition (XRD) from either an example Composite Resource (XR) or a SimpleSchema document, and writes it into the project’s APIs directory.
XR is the default input format; pass --from simpleschema to generate an XRD from a SimpleSchema definition instead.
Examples
Generate an XRD from an example Composite Resource (XR) and save it under the project’s APIs directory:
1crossplane xrd generate examples/cluster/example.yaml
Generate an XRD with a specific plural form, useful when automatic pluralization is wrong (for example, “postgres”):
1crossplane xrd generate examples/postgres/example.yaml --plural postgreses
Generate an XRD and save it to a custom path:
1crossplane xrd generate examples/postgres/example.yaml --path database/definition.yaml
Generate an XRD from a SimpleSchema document:
1crossplane xrd generate apis/network/schema.yaml --from simpleschema
Usage
crossplane xrd generate <file> [flags]
Arguments
| Argument | Description |
|---|---|
| Path to the XR or XRC YAML file. |
Flags
| Short flag | Long flag | Description |
|---|---|---|
| --from="xr" | Input format: xr or simpleschema. | |
| --path=STRING | Output path. | |
| --plural=STRING | Custom plural form for the XRD. | |
| -f | --project-file="crossplane-project.yaml" | Path to project definition. |