Skip to content

Releases: crossplane/upjet

v2.2.0

09 Nov 13:20
e6784cf

Choose a tag to compare

New Features

  • Framework Diagnostics Error Support: Added terraform/errors.FrameworkDiagnosticsError to convert Terraform plugin framework diagnostic error messages into Go errors. This enhancement improves error handling and debugging capabilities when working with Terraform plugin framework resources.
  • Framework Resource Identity Configuration: Introduced config.FrameworkResourceWithComputedIdentifier external-name configuration specifically designed for Terraform plugin framework resources with computed identifier fields. This feature includes a new config.ExternalName.TFPluginFrameworkOptions struct for grouping framework-related configuration options and ComputedIdentifierAttributes to exclude computed identifier fields during drift calculations between desired and actual states.
  • Struct Tag Package & InitProvider Overrides: Added comprehensive pkg/types/structtag package providing a typed struct tag model with parsing, override capabilities, and validation. This enables per-field InitProvider overrides through config.InitProviderOverrides with both Kubebuilder marker and struct tag overrides. JSON tag values are now validated using regex patterns to prevent invalid CRD field names, and nil values in initProvider are properly handled to avoid spurious plan diffs.
  • Enhanced Tag Override System: Introduced structtag.Value.OverrideFrom method for overriding struct tags from another source, along with config.SchemaElementOption.InitProviderTagOverrides to customize generated tags for InitProvider types. This provides fine-grained control over code generation and CRD field specifications.

Bug Fixes

Critical Race Condition Fix - Conversion Webhooks

This release resolves a critical race condition in conversion path registration that was causing intermittent failures in provider packages.

Technical Details:

  • Problem: A data race existed in the conversion.Convert method where multiple goroutines could simultaneously modify registered conversion paths during in-place sorting
  • Impact: This race condition was observed in provider packages and could cause unexpected conversion webhook failures
  • Solution: Fixed by creating a copy of registered conversion paths before performing in-place sorting, preventing concurrent modifications

This fix addresses reliability issues that users may have experienced with conversion webhooks, particularly in high-load environments or during rapid resource operations.

What's Changed

  • Fix the race on the registered conversion paths in conversion.Convert by @ulucinar in #545
  • Add per-field InitProvider tag & kubebuilder marker overrides by @ulucinar in #544
  • linter: suppress linter false positives on switch-case by @erhancagirici in #550
  • Add config.FrameworkResourceWithComputedIdentifier external-name configuration by @ulucinar in #549
  • Add terraform/errors.FrameworkDiagnosticsError by @ulucinar in #551

Full Changelog: v2.1.0...v2.2.0

v1.11.0

07 Nov 13:47
95e421b

Choose a tag to compare

New Features

  • New External Name Configuration: Added config.FrameworkResourceWithComputedIdentifier for more flexible external name handling in Terraform provider configurations
  • Enhanced Struct Tag Support: Introduced comprehensive struct tag manipulation capabilities through the new pkg/types/structtag package
    • Introduce pkg/types/structtag with a typed struct tag model (Value, parsing, override, no-omit)
    • Add per-field InitProvider overrides:
      • config.InitProviderOverrides with kubebuilder.Options and config.TagOverrides
        • Tag overrides for json and tf via structtag.Value
        • Kubebuilder marker overrides via pkg/types/markers/kubebuilder.Options
    • Strengthen validation of JSON tag names and tag combinations, previously there was no validation for these.
      • json struct tag values are validated using the regex ^[a-zA-Z_][a-zA-Z0-9_]*$ to prevent upjet from generating invalid CRD field names.
      • tf tag values are currently not validated. This is future work (we need to investigate their syntax first)
    • Treat nil values in initProvider as absent when computing ignore list; avoids spurious plan diffs

Developer Experience Improvements

  • Improved Error Diagnostics: Enhanced error handling and diagnostics for Terraform plugin framework integration
  • Stricter Configuration Validation: Unknown struct tag options now properly trigger errors instead of being silently ignored

Technical Improvements

  • Enhanced conversion path management to prevent concurrent access issues
  • Strengthened validation for external name configuration options
  • Improved handling of edge cases in code generation for Crossplane providers
  • Better error reporting for configuration validation failures

What's Changed

  • [Backport release-1.11] PR#533 PR#534 PR#538 PR#549 PR#551 by @ulucinar in #553
  • [Backport release-1.11] Backport 544 to release 1.11 by @sergenyalcin in #554

Full Changelog: v1.10.0...v1.11.0

v1.10.0

06 Nov 13:38
bc8ec41

Choose a tag to compare

Critical Race Condition Fix - Conversion Webhooks

Important Stability Improvement: This release resolves a critical race condition in conversion path registration that was causing intermittent failures in provider packages.

Technical Details:

  • Problem: A data race existed in the conversion.Convert method where multiple goroutines could simultaneously modify registered conversion paths during in-place sorting
  • Impact: This race condition was observed in provider packages and could cause unexpected conversion webhook failures
  • Solution: Fixed by creating a copy of registered conversion paths before performing in-place sorting, preventing concurrent modifications

This fix addresses reliability issues that users may have experienced with conversion webhooks, particularly in high-load environments or during rapid resource operations.

Additional Bug Fixes

  • Panic Prevention: Fixed potential panic when ts.FrameworkProvider is nil (#500)
  • Wildcard Conversion: Corrected wildcard expand behavior during resource conversion (#504)
  • Connection Strings: Fixed incorrectly generated connection string maps (#506)
  • External Names: Removed unnecessary ID validation for resources without ID fields (#507)
  • State Management: Added custom state check configuration for Terraform Plugin Framework resources (#515)

What's Changed

  • Validate that ts.FrameworkProvider is not nil to avoid panic by @nikimanoledaki in #500
  • Fix wildcard expand behavior when if the field path is not found during conversion by @sergenyalcin in #504
  • Fix incorrectly generated connection string map by @sergenyalcin in #506
  • remove id validation from setExternalName for resources without id field by @erhancagirici in #507
  • Custom state check configuration for TF plugin framework resources by @sergenyalcin in #515
  • [Backport release-1.10] Fix the race on the registered conversion paths in conversion.Convert by @ulucinar in #552

New Contributors

Full Changelog: v1.9.0...v1.10.0

v2.1.0

16 Oct 15:21
bc4227e

Choose a tag to compare

What's new

✨ This release introduces support for for generating providers with Terraform Protocol version 6 features in their resource schemas. Resources with nested attributes and dynamic-pseudo type attributes are now can be generated. The changes are backward compatible and does not affect existing resources.

Warning

To incorporate the changes, existing providers should first upgrade the provider to adapt Upjet v2 first, referring to the upgrade guide
Fresh providers can start with the upjet-provider-template and follow provider generation guide

After upgrading your provider to Upjet v2, you can switch to this version in your provider's go.mod, configure protov6 resources and run make generate

What's Changed

  • chore: update OWNERS.md file with correct email domain for maintainers by @jbw976 in #533
  • docs: upjet v2 upgrade guide by @erhancagirici in #532
  • Do not duplicate base package controllers in the monolithic provider by @ulucinar in #534
  • Add config.Provider.ExampleManifestConfiguration to configure the example manifest generation pipeline by @ulucinar in #535
  • Introduce support for generating providers with TF protov6 features by @erhancagirici in #527
  • Rename examples/conversion.ConvertSingletonListToEmbeddedObject as ApplyAPIConverters by @ulucinar in #538

Full Changelog: v2.0.0...v2.1.0-rc.0

v2.0.0

17 Oct 08:20
4c6bfc2

Choose a tag to compare

We are excited to announce Upjet v2.0.0 is available. This release introduces support for generating Crossplane v2 compatible providers with namespaced MRs.

Crossplane v2 compatibility

Upjet v2 generates Crossplane v2-compatible namespaced Managed Resources (MRs) and providers.
During the transition period of the providers, Upjet continues to generate cluster-scoped MRs along with new namespace-scoped MRs.

Namespaced MR APIs

Namespaced MR Go types now embed v2.ManagedResourceSpec. Per Crossplane v2 changes, this effectively makes the generated namespaced MR API:

  • spec.writeConnectionSecretToRef: connection secret refs are now local references (without namespace)
  • remove spec.deletionPolicy from namespaced MR specs, this is now expected to be configured via management policies
  • remove spec.publishConnectionDetailsTo as XPv2 removed support for External Secret Stores (ESS)
  • generate local secret refs for sensitive input parameters in spec.forProvider, e.g. spec.forProvider.fooSecretRef.
  • generate optionally namespaced reference/selector fields for cross-resource references.

Directory Structure changes

To facilitate both cluster-scoped and namespace-scoped APIs at the same repository, generated providers will have apis/ internal/controller/ examples-generated/

Module changes

  • upjet module is bumped to v2
  • bumped crossplane-runtime to v2 and updated all the import paths

Upgrade guide

Existing providers can refere to the upgrade guide
Fresh providers can start with the upjet-provider-template and follow provider generation guide to generate a new provider.

What's Changed

New Contributors

Full Changelog: v1.9.0...v2.0.0

v1.9.0

09 May 14:59
55edf18

Choose a tag to compare

This release:

  • Adds support for change logs feature.
  • Bumps the crossplane-runtime version to the latest commit.

What's Changed

  • feat(changelogs): add support for change logs in controller templates by @jbw976 in #491
  • Bump crossplane-runtime dependency by @sergenyalcin in #493

Full Changelog: v1.8.0...v1.9.0

v1.8.1

09 May 15:02
108d2e0

Choose a tag to compare

This PR bumps the crossplane-runtime dependency.

What's Changed

  • [Backport release-1.8] Bump crossplane-runtime dependency by @github-actions in #494

Full Changelog: v1.8.0...v1.8.1

v1.5.1

08 May 07:34
dd35110

Choose a tag to compare

This release contains a bug fix for update reconciliations. Now, we will call runtime conversions before update calls.

What's Changed

  • [Backport release-1.5] call ApplyTFConversions in Update function from terraform plugin sdk external client by @github-actions in #492

Full Changelog: v1.5.0...v1.5.1

v1.8.0

28 Apr 09:55
aea6e7c

Choose a tag to compare

This release:

  • Bumps crossplane-runtime version to v1.19.0 and core crossplane to v1.19.1
  • Update some dependencies
  • Call runtime conversions before update calls.

With these releases, since the crossplane-runtime deprecates some functions that I related to reference resolvers, the users must be careful during the upjet bump in the providers. Because, if the upjet version is directly bumped, then the user can encounter some errors as following during generation:

zz_generated.resolvers.go:36:27: undefined: reference.FromPtrValue
zz_generated.resolvers.go:48:84: undefined: reference.ToPtrValue
zz_generated.resolvers.go:52:27: undefined: reference.FromPtrValue
zz_generated.resolvers.go:64:85: undefined: reference.ToPtrValue

Therefore, for a safe bump, you need to follow these steps:

  1. Generate the reference resolvers by bumping the crossplane-tools (angryjet). By this way, you will have the new reference resolvers that don’t use the deprecated functions. The version you need to update the crossplane-tools is: v0.0.0-20250424174524-de0e5107ea45. This version refers to this commit. Then, please observe the updated reference resolvers.
  2. After being sure that the reference resolvers are up-to-date, then bump upjet the version and run make generate. You will not get any error.

What's Changed

  • call ApplyTFConversions in Update function from terraform plugin sdk external client by @digna-ionos in #440
  • chore(deps): update dependencies by @Duologic in #488

New Contributors

Full Changelog: v1.7.0...v1.8.0

v1.7.0

22 Apr 10:59
ae37e28

Choose a tag to compare

  • Upgraded crossplane-runtime and core crossplane dependencies to v1.18.0, ensuring compatibility with the latest Crossplane ecosystem and taking advantage of recent improvements and bug fixes.
  • Because apimachinery version is bumped to v0.31.0, pass context to panic handlers, introduced by kubernetes/kubernetes#121970.
  • Because kubernetes client is bumped to v0.31.0, address deprecations introduced by kubernetes/kubernetes#124263.
  • Because controller-runtime is bumped to v0.19.0, address breaking changes introduced by kubernetes-sigs/controller-runtime#2799.

What's Changed

  • Bump crossplane-runtime version to v1.18.0 by @mergenci in #458

Full Changelog: v1.6.0...v1.7.0