We are excited to announce the release of Upjet v1.4.0, which includes several enhancements and new features aimed at improving the flexibility, usability, and efficiency of the code generation pipeline and API management. Below are the key updates in this release.
Release Highlights
1. Generate singleton lists as embedded objects
Terraform configuration blocks with a MaxItems constraint of 1 are now generated as embedded objects in MR APIs instead of lists. This change simplifies updates and patches via SSA by eliminating the need for specific configuration for associative lists.
Introduced runtime conversion logic to convert embedded objects back to singleton lists for Terraform operations and vice versa for updates to spec.forProvider, status.atProvider, and connection details.
Added a schema traverser to decouple Terraform schema traversal from various actions, allowing providers to generate singleton lists as embedded objects using the ujconfig.SingletonListEmbedder configuration.
Supported the generation of new CRD API versions with embedded object schemas while maintaining existing versions.
2. Support for specifying the controller reconciliation/watch version
Added config.Resource.ControllerReconcileVersion to specify the CRD API version that the associated controller will watch and reconcile, preventing unnecessary webhook conversions for multi-versioned CRDs.
3. TerraformConversions interface for handling conversions between Crossplane and Terraform
Introduced config.Resource.TerraformConversions for handling data transformations between Crossplane and Terraform layers. The initial implementation, config.singletonListConversion, manages conversions between singleton lists and embedded objects.
4. Dynamic code generation pipeline for multi-version APIs
Addressed name conflicts in the code generation pipeline by making it aware of previous CRD versions. This allows dynamic resolution of conflicts when generating new API versions, such as v1beta2, while older versions like v1beta1 exist.
Deprecated the config.Resource.OverrideFieldNames API in favor of the new config.Resource.PreviousVersions mechanism, ensuring more efficient and dynamic prevention of type name conflicts.
5. Support for Secret References in spec.initProvider
Enabled generation of secret references for sensitive parameters under the spec.initProvider API tree. This allows full specification of sensitive parameters, such as passwords, in the initProvider.
Adjusted code generation and runtime logic to support secret references from both spec.initProvider and spec.forProvider, with forProvider references taking precedence when conflicts arise.
Introduced a new late-init API to skip fields in spec.initProvider that are already filled, preventing the late-init operation in forProvider from overriding these fields. This ensures the integrity and intended configuration of fields specified in initProvider.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps github.com/crossplane/upjet from 1.3.0 to 1.4.0.
Release notes
Sourced from github.com/crossplane/upjet's releases.
... (truncated)
Commits
a444cc1
Merge pull request #407 from sergenyalcin/cond-late-init89a7d0a
Merge pull request #406 from ulucinar/sensitive-initProviderbe0cde1
Add conditionalIgnoredCanonicalFieldPaths to IgnoreFields to fix the unit testsa6de4b1
Add unit tests for spec.initProvider secret referenceseadba75
Add a new late-init API to skip already filled field in spec.initProviderec75edf
Add support for resolving secret references from spec.initProviderf577a54
Generate the corresponding Kubernetes secret references for the sensitive Ter...92d1af8
Merge pull request #402 from ulucinar/available-versions942508c
Merge pull request #397 from sergenyalcin/example-convertere364702
Address review commentsDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show