Skip to content

Resource Discrimination Based on Desired State in Dependent Resources #2197

Closed

Description

@csviri

If there are multiple resources of same type we use resource discriminators in Dependent Resources to identify the one that is managed by the dependent resource. Usually those discriminate by name, in most use cases. In terms of KubernetesDependentResource the default behavior could be improved in a way, that it would take a desired state and based on the name/namespace of the desired state would select the managed resource from the resources. So there will be no need for resource discriminator in most of the cases.

This is a bit more problematic for external resources, however there the POJO representing the resource could implement an interface that would mark the id(s) of the managed resource

Activity

  1. added this to the 5.0 milestone on Jan 11, 2024
  2. metacosm commented on Jan 11, 2024

    @metacosm
    Collaborator

    This idea sounds interesting but could you elaborate with a concrete example, please?

  3. csviri commented on Jan 12, 2024

    @csviri
    CollaboratorAuthor

    Consider this sample:

    @ControllerConfiguration(dependents = {
    @Dependent(type = MultipleManagedDependentResourceConfigMap1.class,
    useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE),
    @Dependent(type = MultipleManagedDependentResourceConfigMap2.class,
    useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE)
    })
    public class MultipleManagedDependentResourceReconciler

    Where both Config Map Dependents needs a discriminator:

    @KubernetesDependent(resourceDiscriminator = ConfigMap1Discriminator.class)
    public class MultipleManagedDependentResourceConfigMap1
    

    However that discriminator typically what just does is maps primary resource to name (+namespaces) of the secondary resource. However based on desired state we already could know the name/namespace of the resource to select. So we could just override in this case for KubernetesDependentResource the getSecondaryResource to get the desired and if there are more of a type select one based on the name+namespace of the desired.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions