Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2-way reconciliation with external resources #290

Closed
jbw976 opened this issue Jan 18, 2019 · 4 comments
Closed

2-way reconciliation with external resources #290

jbw976 opened this issue Jan 18, 2019 · 4 comments
Labels
design performance reliability roadmap Issues that have priority and are included in the roadmap, or are candidates to add to the roadmap user experience

Comments

@jbw976
Copy link
Member

jbw976 commented Jan 18, 2019

External resources (which is most everything Crossplane manages) should participate in a 2-way reconciliation where Crossplane's changes to external resources are honored by the external provider and external changes to that resource are honored by Crossplane.

There are some big questions to answer here such as where is the final authoritative state stored? How does Crossplane know it should a change should be honored as opposed to the resource has diverged from the desired state and should therefore take corrective action?

Related to #289 to receive notifications for when changes are made to external resources.

@jbw976 jbw976 added the roadmap Issues that have priority and are included in the roadmap, or are candidates to add to the roadmap label Jun 10, 2019
@jbw976
Copy link
Member Author

jbw976 commented Jun 10, 2019

Related to #9

@hasheddan
Copy link
Member

hasheddan commented Jun 20, 2019

These three issues (this one along with #289 and #9) are very interesting to me. I would love to help out with this sort of functionality! I imagine we will need to have a community discussion around this before moving forward. For the authoritative state portion, I would lean toward making Crossplane the authority for the reason that you mentioned around when to take corrective action.

There is always a balance between flexibility of a system and enforcement of good practices. Sometimes a feature (i.e. the ability to choose where state lives in this case) just creates more opportunity for policy violations.

The only reason I can see to potentially allow for state to be shared or in an entity other than Crossplane is to allow for a "fell swoop" full resource migration to Crossplane, followed by a slower migration of management of those resources. Once again though, part of the value proposition is centralized and automatic (i.e. reconciliation) state management of external resources, so I am not sure that we want to even allow for another option.

@negz
Copy link
Member

negz commented Sep 5, 2019

I don't believe Crossplane should participate in "two way" reconciliation. Crossplane should consider the spec of its managed resources to be the authoritative desired state of their corresponding external resources, and should drive the state of those external resources toward the spec.

The one exception to this rule is "late initialisation", as described by the Kubernetes API conventions, which states that a controller may set unset spec fields. This allows for cases in which a managed resource spec field corresponds to an external resource API field that may be omitted, but is automatically set by the cloud provider when it is.

@negz
Copy link
Member

negz commented Jan 24, 2020

Per my last comment here, I don't think we should do this. Please reopen if you disagree.

@negz negz closed this as completed Jan 24, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
design performance reliability roadmap Issues that have priority and are included in the roadmap, or are candidates to add to the roadmap user experience
Projects
None yet
Development

No branches or pull requests

3 participants