Skip to content

Commit c6ffd49

Browse files
committed
docs(serviceprovider): reworked based on review comments
On-behalf-of: @SAP christopher.junk@sap.com Signed-off-by: Christopher Junk <christopher.junk@sap.com>
1 parent 4c6872d commit c6ffd49

File tree

1 file changed

+17
-38
lines changed

1 file changed

+17
-38
lines changed

docs/about/design/service-provider.md

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ This document outlines the `ServiceProvider` domain and its technical considerat
1111

1212
## Non-Goals
1313

14-
- `ServiceProviders` are not required to deploy their `DomainService` on `WorkloadClusters`. For now, a `DomainService` can be deployed on either a `WorkloadCluster` or `MCPCluster`.
14+
- `ServiceProviders` are not required to deploy their `DomainService` on `WorkloadClusters`. For now, a `DomainService` can be deployed on either a `WorkloadCluster` or `MCPCluster`. However, newly developed services should prioritize deploying their workloads on `WorkloadClusters`.
1515
- Define a `ServiceProvider` model that implements a higher level `API`/`Run` platform concept (e.g., to allow flexible deployment models, e.g. with `ClusterProvider` [kcp](https://github.com/kcp-dev/kcp))
1616

1717
## Terminology
1818

19-
- `End users`: These are the consumers of services provided by an openMCP platform installation. They operate on the `OnboardingCluster` and `MCPCluster` (see [deployment model](#deployment-model)).
20-
- `Operators`: These are either human users or technical systems that are responsible for managing an openMCP platform installation. While they may operate on any cluster, their primary focus is on the `PlatformCluster` and `WorkloadCluster`.
19+
- `End Users`: These are the consumers of services provided by an openMCP platform installation. They operate on the `OnboardingCluster` and `MCPCluster` (see [deployment model](#deployment-model)).
20+
- `Platform Operators`: These are either human users or technical systems that are responsible for managing an openMCP platform installation. While they may operate on any cluster, their primary focus is on the `PlatformCluster` and `WorkloadCluster`.
2121

2222
## Domain
2323

@@ -42,7 +42,7 @@ A `ServiceProvider` defines a `ServiceProviderAPI` to allow end users to request
4242

4343
```mermaid
4444
graph LR
45-
USR[User]
45+
USR[EndUser]
4646
SPA[ServiceProviderAPI]
4747
DSA[DomainServiceAPI]
4848
USR -->|manages instances|SPA
@@ -57,7 +57,7 @@ While both are end user facing, they serve different purposes:
5757
```mermaid
5858
sequenceDiagram
5959
%% participants
60-
participant usr as User
60+
participant usr as EndUser
6161
participant sp as ServiceProvider
6262
participant ds as DomainService
6363
@@ -70,12 +70,12 @@ sequenceDiagram
7070

7171
### Config
7272

73-
A `ServiceProvider` defines a `ServiceProviderConfig` that enables platform operators to specify different offerings of a managed `DomainService`. For example, tenant 1 can consume the `ServiceProviderAPI` for `Crossplane` through a `CrossplaneProviderConfig` `A`, which allows the installation of Crossplane versions `v1` and `v2`. In contrast, tenant 2 is restricted to consuming only `Crossplane` version `v1` through `CrossplaneProviderConfig` `B`.
73+
A `ServiceProvider` defines a `ServiceProviderConfig` that contains provider-specific options for platform operators to specify a managed service offering. For example, [service-provider-crossplane](https://github.com/openmcp-project/service-provider-crossplane/) allows platform operators to decide which Crossplane providers can be installed by end user as part of the managed service.
7474

7575
```mermaid
7676
graph LR
77-
%% Operator
78-
OP[Operator]
77+
%% PlatformOperator
78+
OP[PlatformOperator]
7979
SP[ServiceProvider]
8080
SPA[ServiceProviderAPI]
8181
SPC[ServiceProviderConfig]
@@ -96,7 +96,7 @@ End users need to be aware of a) the available managed services, and b) valid in
9696

9797
A) The available service offerings are made visible by installing the `ServiceProviderAPI` on the `OnboardingCluster` (see [deployment model](#deployment-model)). This ensures that any platform tenant is aware of all available `ServiceProviderAPIs`. In other words, the platform does not hide its end-user-facing feature set, even if a user belongs to a tenant that cannot successfully consume a specific `ServiceProviderAPI`.
9898

99-
B) Valid input values are communicated through `ServiceProviderConfig` objects created on the `OnboardingCluster`. A user from a tenant without an associated `ServiceProviderConfig` can technically still request a `DomainService` through a `ServiceProviderAPI`, but any attempt to deploy the `DomainService` will be denied by the `ServiceProvider`. It is important to note that `ServiceProviderConfigs` are owned and managed by the platform operator.
99+
B) Valid input values are communicated through a yet-to-be-defined 'Marketplace'-like API provided by a `PlatformService`. Note: This is still work in progress and outside the scope of this document.
100100

101101
### Deployment Model
102102

@@ -107,13 +107,13 @@ graph TD
107107
%% Onboarding Cluster
108108
subgraph OnboardingCluster
109109
SPAPI[ServiceProviderAPI]
110-
SPC[ServiceProviderConfig]
111110
end
112111
113112
%% Platform Cluster
114113
subgraph PlatformCluster
115114
SPO[openMCP-operator]
116115
SP[ServiceProvider]
116+
SPC[ServiceProviderConfig]
117117
end
118118
119119
%% MCP Cluster
@@ -124,7 +124,7 @@ graph TD
124124
125125
%% edges
126126
SP -->|reconciles|SPAPI
127-
SPAPI -->|references|SPC
127+
SP -->|uses|SPC
128128
SP -->|manages|DSAPI
129129
SP -->|manages|DS
130130
DS -->|reconciles|DSAPI
@@ -152,6 +152,10 @@ graph TD
152152
Crossplane -->|reconciles|Bucket
153153
```
154154

155+
:::info
156+
In the long term, the goal is to deploy every `DomainService` on `WorkloadClusters`. Newly developed services should prioritize deploying their workloads on `WorkloadClusters` rather than `MCPClusters`.
157+
:::
158+
155159
## Validation
156160

157161
A `ServiceProvider` is considered healthy if both its `API` and `Run` components have been successfully synced and are ready for consumption.
@@ -193,9 +197,9 @@ Main tasks towards MCP/Workload Clusters (based on watching the `ServiceProvider
193197

194198
In this context, `reconcileScope` holds the `ServiceProviderConfig` and provides clients to access onboarding, mcp and workload clusters.
195199

196-
Main tasks towards Onboarding/Platform Cluster (based on `ServiceProviderConfig` location):
200+
Main tasks towards Platform Cluster:
197201

198-
- resolve and validate `ServiceProviderConfig` against `DomainService` context (e.g. available `ReleaseChannel` options)
202+
- Resolve `ServiceProviderConfig`. If no `ServiceProviderConfig` can be resolved, the service request will fail.
199203

200204
### Reconcile Sequence
201205

@@ -233,31 +237,6 @@ The following artifacts are derived from this document and must be continuously
233237

234238
The remainder of this document contains topics that are out of scope for now.
235239

236-
### Release Channel Detour
237-
238-
Technically, a `ServiceProvider` requires configuration information about the artifact versions it can use to deploy a service. To address this, openMCP introduces the concept of `ReleaseChannels`, which define the available artifacts (e.g. container images, helm charts, etc.) within the context of an openMCP installation. A `ServiceProvider` indirectly consumes a `ReleaseChannel` through its `ServiceProviderConfig`:
239-
240-
```mermaid
241-
graph TD
242-
subgraph Platform
243-
subgraph ServiceProvider
244-
SPC[ServiceProviderConfig]
245-
SP[ServiceProvider]
246-
end
247-
TN[Tenant]
248-
RC[ReleaseChannel]
249-
end
250-
251-
%% edges
252-
SP -->|one...uses...many|SPC
253-
SPC ---|many...references subset of artifacts...one|RC
254-
SPC ---|many...allows access...many|TN
255-
```
256-
257-
:::info
258-
A `ServiceProviderConfig` may include configuration parameters beyond just `ReleaseChannel` information or artifact versions. In this sense, it is more than just a 'version pinning' mechanism.
259-
:::
260-
261240
### Multicluster Execution Model
262241

263242
Multi-cluster functionality for `ServiceProvider` is a design goal for future iterations and might get integrated into `service-provider-runtime`. This would generally enable to run any `DomainService` on shared `WorkloadCluster`.

0 commit comments

Comments
 (0)