-
Notifications
You must be signed in to change notification settings - Fork 76
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Convert all singleton lists in the MR APIs to embedded objects #508
Conversation
a4b0953
to
20946ec
Compare
/test-examples="examples/container/v1beta2/nodepool.yaml" |
5653360
to
a26ceac
Compare
/test-examples="examples/container/v1beta2/nodepool.yaml" |
9158ca4
to
0aeb502
Compare
/test-examples="examples/container/v1beta2/nodepool.yaml" |
0ec1128
to
2242799
Compare
/test-examples="examples/container/v1beta2/nodepool.yaml" |
2 similar comments
/test-examples="examples/container/v1beta2/nodepool.yaml" |
/test-examples="examples/container/v1beta2/nodepool.yaml" |
6bfc693
to
94d21e8
Compare
/test-examples="examples/container/v1beta2/nodepool.yaml" |
535e79b
to
0d7096c
Compare
/test-examples="examples/gke/v1beta2/backupbackupplan.yaml" |
1 similar comment
/test-examples="examples/gke/v1beta2/backupbackupplan.yaml" |
0d7096c
to
8cfdcfa
Compare
/test-examples="examples/gke/v1beta2/backupbackupplan.yaml" |
8cfdcfa
to
db914f4
Compare
/test-examples="examples/gke/v1beta2/backupbackupplan.yaml" |
/test-examples="examples/container/v1beta2/nodepool.yaml" |
Hi @JonathanO, We've done some preliminary tests using the It would be great if you could provide us some feedback using these providers:
As discussed above, the resource providers (except for the new This is a relatively large & involved change (both the code generation pipelines and the provider runtime are affected and we also attempt to hide the breaking API changes from the Not all
P.S. There's also a counterpart of this PR in |
/test-examples="examples/bigquery/v1beta1/routine.yaml" |
/test-examples="examples/compute/v1beta1/nodegroup.yaml" |
/test-examples="examples/dns/v1beta1/policy.yaml" |
/test-examples="examples/sql/v1beta1/user.yaml" |
/test-examples="examples/compute/v1beta2/firewall.yaml" |
/test-examples="examples/compute/v1beta2/instance.yaml" |
/test-examples="examples/compute/v1beta2/router.yaml" |
/test-examples="examples/pubsub/v1beta2/litetopic.yaml" |
/test-examples="examples/cloudrun/v1beta2/v2service.yaml" |
/test-examples="examples/logging/v1beta2/metric.yaml" |
/test-examples="examples/monitoring/v1beta2/service.yaml" |
/test-examples="examples/notebooks/v1beta2/environment.yaml" |
/test-examples="examples/notebooks/v1beta2/instance.yaml" |
/test-examples="examples/secretmanager/v1beta2/secret.yaml" |
/test-examples="examples/sql/v1beta2/user.yaml" |
/test-examples="examples/dns/v1beta2/policy.yaml" |
/test-examples="examples/container/v1beta2/cluster.yaml" |
/test-examples="examples/storage/v1beta2/bucket.yaml" |
/test-examples="examples/spanner/v1beta2/database.yaml" |
/test-examples="examples/redis/v1beta2/instance.yaml" |
/test-examples="examples/compute/v1beta2/securitypolicy.yaml" |
/test-examples="examples/compute/v1beta2/urlmap.yaml" |
/test-examples="examples/container/v1beta2/nodepool.yaml" |
/test-examples="examples/compute/v1beta2/image.yaml" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @ulucinar for your amazing efforts on this PR, LGTM! I think after removing the replace in go.mod
and pointing to uptest latest, we will be ready to merge.
UPTEST_LOCAL_VERSION = v0.12.0-9.gac371c9 | ||
UPTEST_LOCAL_CHANNEL = main |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: We may consider using after releaseing the uptest with the import fix. I am not proposing to do this in this PR. I want to only note this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, agreed. Let's revisit this once upbound/build#255 is merged. Thanks for the note.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems that we need to fix the example generation pipeline to produce examples via using the new generated APIs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, this is another item we need to take care of. Let's merge this PR, and address the missing example manifests with a separate PR.
…e.PreviousVersions for the prevention of the type name conflicts in the generated multi-versioned CRDs. - config.Resource.OverrideFieldNames is being deprecated in favor of config.Resource.PreviousVersions. - Bump upjet to commit 92d1af84d242. Signed-off-by: Alper Rifat Ulucinar <[email protected]>
/test-examples="examples/container/v1beta2/nodepool.yaml" |
/test-examples="examples/compute/v1beta2/image.yaml" |
We've decided to merge this PR without the example manifests and @sergenyalcin is planning to open a follow-up PR to introduce the missing |
Description of your changes
Depends on: crossplane/upjet#387, crossplane/upjet#400
Terraform configuration blocks, even if they have a MaxItems constraint of 1, are (almost) always generated as lists. We
now generate the lists with a MaxItems constraint of 1 as embedded objects in our MR APIs.
This also helps when updating or patching via SSA the (previously list) objects. The merging strategy implemented by SSA requires configuration for associative lists and converting the singleton lists into embedded objects removes the configuration need.
The provider generates the converted embedded objects in the new
v1beta2
versions of the CRD APIs and registers upjet's identity converter and the singleton list converters to be invoked, in chain, by the CRD API conversion webhooks. This implies that thev1beta1
versions stay intact, and old clients not aware of the new APIs should continue functioning as before (backwards-compatibility). Any clients willing to use the embedded objects-based APIs should be updated to use thev1beta2
versions of the CRD APIs.If a resource contains no singleton lists, then the
v1beta2
version is not generated for it.We had to configure field name overrides for
HTTP{S}HealthCheck.compute
andVersion.dialogflowcx
so that the correspnding type names for thespec.forProvider
,spec.initParameter
andstate.atProvider
fields are not duplicated with the introduction ofv1beta2
packages.We have also removed the SSA merge strategy configurations from the
v1beta2
versions ofCluster.container
&NodePool.container
resources because the related fields are no longer lists and have been converted to embedded objects in theirv1beta2
versions.I have:
make reviewable
to ensure this PR is ready for review.backport release-x.y
labels to auto-backport this PR if necessary.config.Resource.References[*].Type
withconfig.Resource.References[*].TerraformName
How has this code been tested
A successful uptest run for the 'NodePool.container` resource with the API converters is registered here.
Another run with GKE back plans is here.
Also via the following uptest runs: