rancher / terraform-provider-rancher2

Terraform Rancher2 provider
https://www.terraform.io/docs/providers/rancher2/
Mozilla Public License 2.0
255 stars 222 forks source link

Customizable late initialization function for a resource #963

Closed sboschman closed 2 years ago

sboschman commented 2 years ago

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 an issue I believe. This custom function should be able to handle the following use cases:

  1. Have access to the forProvider fields to use as decision input which parameters from the terraform state to ignore
  2. Use a wildcard glob or regex to match terraform state parameters to exclude

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.

sboschman commented 2 years ago

My apologies, wrong repository, this is a Crossplane Terrajet issue (286)