Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Customizable late initialization function for a resource #286

@sboschman

Description

@sboschman

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:

  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 (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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions