-
Notifications
You must be signed in to change notification settings - Fork 37
Customizable late initialization function for a resource #286
Description
Currently late initialization is configured with
r.LateInitializer = config.LateInitializer{
IgnoredFields: []string{"address_prefix"},
}
As the generation template defaults to using the GenericLateInitializer I don't see a way to have a custom late init function for a specific resource.
A configurable custom late init function per resource would be helpful to solve this issue I believe.
This custom function should be able to handle the following use cases:
- Have access to the
forProviderfields to use as decision input which parameters from the terraform state to ignore - Use a wildcard glob or regex to match terraform state parameters to exclude (exclude all labels/annotations containing
cattle.io)
Scenario 1:
forProvider:
gkeConfigV2:
- imported: true
This imported=true use case requires only a specific few attributes to be set, the terraform state on the other hand returns more computed attributes. These computed attributes should be ignored during a tf plan/apply, otherwise they conflict with the imported=true attribute.
Scenario 2:
forProvider:
annotations:
example.com/crossplane: hello
gkeConfigV2:
- imported: true
Terraform state return additional annotations and labels, but these are externally managed (imported=true). These labels/annotations should be excluded from tf plan/apply and resource drift detection. Crossplane should not be trying to 'revert' the values of these labels/annotations to the value it got after the create/initial apply.
For example, Rancher adds annotations for its own internal housekeeping with a timestamp value:
clusters.management.cattle.io/ke-last-refresh: "1658949309"
When Rancher refreshes, and updates the value of this annotation, Crossplane triggers resource drift and tries to revert the value, which is obviously not what should be happening.