operator-framework / deppy

Deppy: The dependency resolver for Kubernetes
Apache License 2.0
15 stars 21 forks source link

Remove the EntitySource API and replace it with the VariableSource API #97

Closed awgreene closed 9 months ago

awgreene commented 1 year ago

At a high level, the Deppy Library checks if a set of constraints can be satisfied by a set of entities. Today, the Deppy Library expects users to implement the EntitySource interface to provide the entities that Deppy considers. There are a number of shortcomings with the existing interface that justify moving to using the VariableSource interface.

  1. This API doesn't provide value: Deppy should not care if a user has given it an EntitySource, it should only rely on a set of Variables being provided, which are retrievable through the existing VariableSource interface
  2. Needless conversion:: When Deppy is given a EntitySource, it is converted into Entities, which are further converted into variables for resolution. After resolution, we again convert the variables to entities to get the final list of output. The flow looks like: Input -> Entities -> Variables -> Solver -> Solution set (variables) -> Entities.

Moving away from EntitySources / entities will yield the following benefits:

Open Questions:

Follow up:

Related PRs:

Demo Script:

awgreene commented 1 year ago

Tagging @perdasilva and @varshaprasad96 for review on this one.

varshaprasad96 commented 1 year ago

One change:

Catalogd should also be updated to use VariableSources.

Catalogd does not deal with deppy directly. Its only the operator controller that fetches in contents from v1 catalog and converts them into deppy consumable format. As such Catalogd project/repository shouldn't require any change (afaik).

github-actions[bot] commented 10 months ago

This issue has become stale because it has been open 60 days with no activity. The maintainers of this repo will remove this label during issue triage or it will be removed automatically after an update. Adding the lifecycle/frozen label will cause this issue to ignore lifecycle events.