mirror of https://github.com/crossplane/docs.git
163 lines
4.7 KiB
Markdown
163 lines
4.7 KiB
Markdown
---
|
|
title: Upgrading to v0.14
|
|
weight: 210
|
|
---
|
|
|
|
Crossplane made a small handful of breaking changes in v0.14. The most broadly
|
|
impactful change was updating the `CompositeResourceDefinition` (XRD) schema to
|
|
support defining multiple versions of a composite resource (XR) at once. This
|
|
guide covers how to upgrade from v0.13 of Crossplane to v0.14.
|
|
|
|
- [Updating CompositeResourceDefinitions](#updating-compositeresourcedefinitions)
|
|
- [Updating Packages](#updating-packages)
|
|
|
|
## Updating CompositeResourceDefinitions
|
|
|
|
In v0.14 the schema of XRD was updated to support defining multiple versions of
|
|
an XR. This update requires manual update steps. To upgrade from v0.13 to v0.14
|
|
you must:
|
|
|
|
1. Ensure you have up-to-date YAML representations of all of your XRDs.
|
|
1. `helm upgrade` your Crossplane release.
|
|
1. Update and apply all of your XRDs.
|
|
|
|
Note that Crossplane will not actively reconcile your XRs between steps 2 and 3,
|
|
and you will see some errors in the events and logs, but your managed resources
|
|
(and thus infrastructure) will continue to run. Follow the below steps in order
|
|
to update your XRDs for v0.14:
|
|
|
|
1. Rename `spec.crdSpecTemplate` to `spec.versions`.
|
|
1. Move `spec.versions.group` to `spec.group`.
|
|
1. Move `spec.versions.names` to `spec.names`.
|
|
1. Rename `spec.versions.version` to `spec.versions.name`
|
|
1. Rename `spec.versions.validation` (if set) to `spec.versions.schema`.
|
|
1. Rename `spec.versions.additionalPrinterColumns[].JSONPath` (if set) to
|
|
`spec.versions.additionalPrinterColumns[].jsonPath`.
|
|
1. Set `spec.versions.served` to `true`.
|
|
1. Set `spec.versions.referenceable` to `true`.
|
|
1. Make `spec.versions` a single element array.
|
|
|
|
For example, the below XRD:
|
|
|
|
```yaml
|
|
apiVersion: apiextensions.crossplane.io/v1alpha1
|
|
kind: CompositeResourceDefinition
|
|
metadata:
|
|
name: xpostgresqlinstances.database.example.org
|
|
spec:
|
|
claimNames:
|
|
kind: PostgreSQLInstance
|
|
plural: postgresqlinstances
|
|
connectionSecretKeys:
|
|
- username
|
|
- password
|
|
- endpoint
|
|
- port
|
|
crdSpecTemplate:
|
|
group: database.example.org
|
|
version: v1alpha1
|
|
names:
|
|
kind: XPostgreSQLInstance
|
|
plural: xpostgresqlinstances
|
|
validation:
|
|
openAPIV3Schema:
|
|
type: object
|
|
properties:
|
|
spec:
|
|
type: object
|
|
properties:
|
|
parameters:
|
|
type: object
|
|
properties:
|
|
storageGB:
|
|
type: integer
|
|
required:
|
|
- storageGB
|
|
required:
|
|
- parameters
|
|
```
|
|
|
|
Would become:
|
|
|
|
```yaml
|
|
apiVersion: apiextensions.crossplane.io/v1alpha1
|
|
kind: CompositeResourceDefinition
|
|
metadata:
|
|
name: xpostgresqlinstances.database.example.org
|
|
spec:
|
|
group: database.example.org
|
|
names:
|
|
kind: XPostgreSQLInstance
|
|
plural: xpostgresqlinstances
|
|
claimNames:
|
|
kind: PostgreSQLInstance
|
|
plural: postgresqlinstances
|
|
connectionSecretKeys:
|
|
- username
|
|
- password
|
|
- endpoint
|
|
- port
|
|
versions:
|
|
- name: v1alpha1
|
|
served: true
|
|
referenceable: true
|
|
schema:
|
|
openAPIV3Schema:
|
|
type: object
|
|
properties:
|
|
spec:
|
|
type: object
|
|
properties:
|
|
parameters:
|
|
type: object
|
|
properties:
|
|
storageGB:
|
|
type: integer
|
|
required:
|
|
- storageGB
|
|
required:
|
|
- parameters
|
|
```
|
|
|
|
## Updating Packages
|
|
|
|
A minor breaking change was made to on-disk package types
|
|
(`meta.pkg.crossplane.io`). In v0.13, the `spec.crossplane` field was present to
|
|
specify a compatible Crossplane version range, but it was not honored by the
|
|
package manager when packages were installed. The field was refactored to
|
|
`spec.crossplane.version` meaning that packages that previously specified
|
|
`spec.crossplane` will fail to parse when building with the Crossplane CLI or
|
|
installing into a Crossplane Kubernetes cluster. If `spec.crossplane` was not
|
|
specified, packages compatible with Crossplane v0.13 will continue to be
|
|
compatible in v0.14. This is true for both `Provider` and `Configuration`
|
|
packages.
|
|
|
|
The following example shows how a `Configuration` package that specified
|
|
`spec.crossplane` can be updated to specify Crossplane version constraints that
|
|
will be honored by the package manager in v0.14:
|
|
|
|
```yaml
|
|
apiVersion: meta.pkg.crossplane.io/v1alpha1
|
|
kind: Configuration
|
|
metadata:
|
|
name: my-configuration
|
|
spec:
|
|
crossplane: ">=v0.13.0"
|
|
```
|
|
|
|
Would become:
|
|
|
|
```yaml
|
|
apiVersion: meta.pkg.crossplane.io/v1alpha1
|
|
kind: Configuration
|
|
metadata:
|
|
name: my-configuration
|
|
spec:
|
|
crossplane:
|
|
version: ">=v0.13.0"
|
|
```
|
|
|
|
Please note that while `spec.dependsOn` is also a valid field in on-disk package
|
|
types, it is not yet honored by the package manager and will be ignored at
|
|
installation time.
|