Skip to content

Commit 72f9ab0

Browse files
committed
docs(design): service provider domain
On-behalf-of: @SAP christopher.junk@sap.com Signed-off-by: Christopher Junk <christopher.junk@sap.com>
1 parent 6a56ab5 commit 72f9ab0

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

docs/about/design/service-provider-design.md

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
- Define a `ServiceProvider` model that implements the higher level `API`/`Run` platform concept (to allow flexible deployment models, e.g. with `ClusterProvider` kcp)
88
- Define `ServiceProvider` contract to implement `ServiceProvider` as a loosely coupled component in the openMCP context
99
- Define how a `ServiceProvider` can be validated
10+
- (MCP) v1 learnings have been addressed
1011

1112
## Non-Goals
1213

@@ -101,7 +102,7 @@ The following validation flow validates that a `ServiceProvider` is working as e
101102

102103
## Runtime
103104

104-
What is a runtime? A runtime is a collection of abstractions and contracts that provides an environment in which user-defined logic is executed.
105+
A runtime is a collection of abstractions and contracts that provides an environment in which user-defined logic is executed.
105106

106107
The service provider runtime is built on top of controller-runtime and provides a service provider specific reconciliation loop.
107108

@@ -132,17 +133,18 @@ This may include special domain semantics similar to `ManagementPolicies` or the
132133

133134
Here we define the core interfaces that a consumer (`ServiceProvider` developer) has to implement, e.g. in Crossplane `ExternalConnector` creates `ExternalClient` which implements CRUD operations with `ExternalObservation`, `ExternalCreation`, etc. `Managed` interface defines what makes a k8s object a managed Crossplane resource, e.g. by referencing a `ProviderConfig`, specifying `ManagementPolicies`, `ConnectionSecrets`, etc.
134135

135-
### Observability
136-
137-
Logging, metrics, traces?
138-
139136
## Domain
140137

141138
The actual domain layer of a `ServiceProvider` (layer on top of the [runtime](#runtime)). The foundation to build a `ServiceProvider` template.
142139

143-
### RBAC
140+
A `ServiceProvider` has the following responsibilities:
141+
142+
- Manage the lifecycle of the `API` and `Run` of a `DomainService`.
143+
- Allow multiple `APIClusters` to target the same `RunCluster`, e.g. the Crossplane managed resources on `MCP` A and `MCP` B are reconciled by the same Crossplane installation on a shared `WorkloadCluster`.
144144

145-
What permissions does a service provider need...
145+
## Template / Builder
146+
147+
Do we want a CLI like kubebuilder or a template like crossplane provider template?
146148

147149
## Service Provider Manager
148150

@@ -151,3 +153,15 @@ The component that manages the lifecyclee of `ServiceProviders` and provides ser
151153
candidates e.g. `openmcp-operator` or `service-provider-operator`
152154

153155
out of scope?
156+
157+
## Ideas
158+
159+
- `SoftDelete` platform concept. A `managed` service can transition to a `unmanaged` service by soft deleting its corresponding `ServiceProviderAPI` or the `ServiceProvider` entirely without losing the `DomainService`. This way a tenant could offboard itself partially or entirely from the platform without losing the provisioned infrastructure. This obviously depends on the ownership model of the infrastructure.
160+
161+
## References
162+
163+
Projects in the same problem space:
164+
165+
- [Crossplane](https://www.crossplane.io/)
166+
- [kube-bind](https://github.com/kube-bind/kube-bind)
167+
- [multi-cluster-runtime](https://github.com/kubernetes-sigs/multicluster-runtime)

0 commit comments

Comments
 (0)