github crossplane/upjet v1.11.1

6 hours ago

This is a patch release on the release-1.11 branch that ships one new configuration capability and a set of stability and correctness fixes for upjet-based providers.

New Features

  • Customizable controller setup aggregator & terraformed templates (#697): In order to be able to address categorical issues in maps of status.atProvider in upjet-based providers, added the config.WithSetupAggregatorTemplate and config.WithTerraformedTemplate ProviderOptions, allowing upjet-based providers to override the controller setup aggregator and the resource.Terraformed templates used during code generation. The change is backward-compatible — providers that do not set these options continue to use the templates shipped with upjet. This mirrors the existing config.WithMainTemplate option and gives provider maintainers full control over the generated files (with the corresponding responsibility to keep customized templates up to date). A new Terraform.ResourceSchema template variable is also introduced, superseding Terraform.SchemaVersion for terraformed template rendering.

Bug Fixes

  • Fix data race on MR status between async callbacks and the managed reconciler (#674): The async Terraform plugin SDKv2 and framework external clients could race with crossplane-runtime's managed reconciler when calling SetObservation on the managed resource status. The Create/Update operations now operate on deep copies of the managed resource to eliminate the race. Also adds a test.race make target and a dedicated parallel CI job so races are caught earlier. Fixes #472.

  • Prevent Terraform provider panics when the external resource is not found (#687): InstanceState's RawConfig and RawPlan are now populated when a Terraform state was previously cached with zero-valued RawConfig/RawPlan but the external resource is (no longer) found. This prevents the underlying Terraform provider from panicking when it reads attributes from RawConfig/RawPlan (for example, the Terraform AWS provider's tagging interceptor), which could occur right after a successful Create.

  • Correctly nest dotted map keys populated from secret references (#646): When a SecretReference populates a map[string]string managed-resource attribute and a secret data key contained dots, fieldpath split the key at every dot and produced a wrongly-nested object instead of a flat string-to-string entry. Field paths now use bracket notation (attribute[key.with.dots]) so the full key is preserved as a single path segment. Addresses crossplane-contrib/provider-upjet-aws#1946.

  • Omit XValidation for required fields that have references (#691): When a field is marked required but also has a reference configured, it is satisfiable via its *Ref/*Selector fields, so no CEL XValidation required-parameter rule is emitted for it anymore. This avoids spurious validation errors for fields resolved through references.

What's Changed

  • [Backport release-1.11] fix: set dotted map keys with correct nesting by @erhancagirici in #646
  • [Backport release-1.11] Fix Race on MR Status Between Async Callbacks & Managed Reconciler by @ulucinar in #674
  • [Backport release-1.11] Set InstanceState's RawConfig & RawPlan if Resource is not found by @ulucinar in #687
  • [Backport release-1.11] fix(types): omit XValidation for required fields with references by @jonasz-lasut in #691
  • [Backport release-1.11] Allow Custom Controller Setup Aggregator & Terraformed Templates via config.Provider by @ulucinar in #697

Full Changelog: v1.11.0...v1.11.1

Don't miss a new upjet release

NewReleases is sending notifications on new releases.