Closed ulucinar closed 1 month ago
/test-examples="examples/container/v1beta2/nodepool.yaml"
/test-examples="examples/container/v1beta2/nodepool.yaml"
/test-examples="examples/container/v1beta2/nodepool.yaml"
/test-examples="examples/container/v1beta2/nodepool.yaml"
/test-examples="examples/container/v1beta2/nodepool.yaml"
/test-examples="examples/container/v1beta2/nodepool.yaml"
/test-examples="examples/container/v1beta2/nodepool.yaml"
/test-examples="examples/gke/v1beta2/backupbackupplan.yaml"
/test-examples="examples/gke/v1beta2/backupbackupplan.yaml"
/test-examples="examples/gke/v1beta2/backupbackupplan.yaml"
/test-examples="examples/gke/v1beta2/backupbackupplan.yaml"
/test-examples="examples/container/v1beta2/nodepool.yaml"
Hi @JonathanO,
This PR converts the singleton lists in the provider API to embedded objects together with the converter functions invoked by the conversion webhooks to convert between the (old) v1beta1
APIs (where the APIs are singleton lists) and the new v1beta2
APIs (where the APIs are embedded objects).
We've done some preliminary tests using the {Cluster,NodePool}.eks
, ServiceAccount.cloudplatform
and BackupBackupPlan.gke
resources using uptest. Also built resource providers using the v1.1.0-db914f4f8174cbf845f9df9895b9826ed26d2e6c
tag.
It would be great if you could provide us some feedback using these providers:
xpkg.upbound.io/upbound/provider-family-gcp:v1.1.0-db914f4f8174cbf845f9df9895b9826ed26d2e6c
xpkg.upbound.io/upbound/provider-gcp:v1.1.0-db914f4f8174cbf845f9df9895b9826ed26d2e6c
As discussed above, the resource providers (except for the new containerattached
provider) have also the same tag v1.1.0-db914f4f8174cbf845f9df9895b9826ed26d2e6c
, i.e., xpkg.upbound.io/upbound/provider-gcp-container:v1.1.0-db914f4f8174cbf845f9df9895b9826ed26d2e6c
.
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 v1beta1
clients). I would really appreciate if you could give these providers a try in your test environment if you can spare some time.
Not all v1beta2
example manifests have been updated to reflect the API changes. However, if you'd like to check here are some manifests updated to facilitate testing:
P.S. There's also a counterpart of this PR in crossplane-contrib/provider-upjet-azuread
.
/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/secretmanager/v1beta1/secret.yaml"
/test-examples="examples/secretmanager/v1beta1/secret.yaml"
Uptest run: https://github.com/crossplane-contrib/provider-upjet-gcp/actions/runs/8787492987
/test-examples="examples/sql/v1beta1/user.yaml"
/test-examples="examples/dns/v1beta1/policy.yaml"
Uptest run: https://github.com/crossplane-contrib/provider-upjet-gcp/actions/runs/8787497642
/test-examples="examples/bigquery/v1beta1/routine.yaml"
Uptest run: https://github.com/crossplane-contrib/provider-upjet-gcp/actions/runs/8787501144
/test-examples="examples/container/v1beta2/nodepool.yaml"
/test-examples="examples/gke/v1beta2/backupbackupplan.yaml"
/test-examples="examples/secretmanager/v1beta1/secret.yaml"
/test-examples="examples/bigquery/v1beta1/routine.yaml"
/test-examples="examples/dns/v1beta1/policy.yaml"
/test-examples="examples/sql/v1beta1/user.yaml"
/test-examples="examples/gke/v1beta2/backupbackupplan.yaml"
/test-examples="examples/cloudrun/v1beta2/v2service.yaml"
/test-examples="examples/compute/v1beta2/firewall.yaml"
/test-examples="examples/compute/v1beta2/image.yaml"
/test-examples="examples/compute/v1beta2/instance.yaml"
/test-examples="examples/compute/v1beta2/router.yaml"
/test-examples="examples/compute/v1beta2/securitypolicy.yaml"
/test-examples="examples/compute/v1beta2/urlmap.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/pubsub/v1beta2/litetopic.yaml"
/test-examples="examples/redis/v1beta2/instance.yaml"
/test-examples="examples/spanner/v1beta2/database.yaml"
/test-examples="examples/storage/v1beta2/bucket.yaml"
/test-examples="examples/container/v1beta2/cluster.yaml"
/test-examples="examples/dns/v1beta2/policy.yaml"
/test-examples="examples/secretmanager/v1beta2/secret.yaml"
/test-examples="examples/sql/v1beta2/user.yaml"
/test-examples="examples/compute/v1beta2/image.yaml"
/test-examples="examples/compute/v1beta2/firewall.yaml"
Description of your changes
Depends on: https://github.com/crossplane/upjet/pull/387, https://github.com/crossplane/upjet/pull/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: