Erstellen von Service Providern
Codesphere ermöglicht es, bestehende Codesphere Landscapes als Managed Service Provider zu veröffentlichen. Dadurch können andere Entwickler eure individuellen Lösungen entdecken und bereitstellen.
Landscape-basierte Service Provider
Ein Landscape-basierter Service Provider ermöglicht es anderen, eure Codesphere Landscape als vorkonfigurierten Managed Service zu instanziieren, den sie über den Service-Katalog bereitstellen und verwalten können.
info
Das Veröffentlichen von Providern erfordert Cluster-Admin-Berechtigungen. Team-Admins können beantragen, dass Provider auf bestimmte Teams beschränkt werden.
Voraussetzungen
Bevor ein Landscape-basierter Service Provider erstellt werden kann, benötigt man:
- Ein Git-Repository, das eine gültige Codesphere Landscape mit einer
ci.yml-Datei enthält. - (Optional) Eine
provider.yml-Datei im Wurzelverzeichnis des Repositorys, die die Provider-Konfiguration definiert. Dies ist nur erforderlich, wenn die Veröffentlichung über die Git-URL-Methode erfolgen soll; andernfalls kann die vollständige Spezifikation direkt in der API-Anfrage angegeben werden. - Git-Provider-Berechtigungen, die im Codesphere-Konto konfiguriert sind. Git-Verbindungen können in den Benutzereinstellungen verwaltet werden.
Git Branch
Codesphere bezieht sich beim Deployment von Landscape-basierten Service Providern derzeit immer auf den Standard-Branch (main/master) des Git-Repositorys.
Provider-Definition
Die Datei provider.yml definiert sämtliche Metadaten und Konfigurationsschemata für den Service Provider.
name: mattermost
version: v1
author: Your Team
displayName: Mattermost
iconUrl: https://example.com/mattermost-icon.png
category: collaboration
description: |
Open-source team messaging and collaboration platform.
Supports channels, direct messaging, and file sharing.
backend:
landscape:
gitUrl: https://github.com/your-org/mattermost-landscape
ciProfile: production
configSchema:
type: object
properties:
SITE_NAME:
type: string
description: Display name for your Mattermost instance
MAX_USERS:
type: integer
description: Maximum number of users allowed
x-update-constraint: increase-only
secretsSchema:
type: object
properties:
ADMIN_PASSWORD:
type: string
format: password
detailsSchema:
type: object
properties:
hostname:
type: string
port:
type: integer
Provider-Felder
| Feld | Beschreibung |
|---|---|
name | Eindeutige Kennung für den Provider. Muss dem Muster ^[-a-z0-9_]+$ entsprechen. |
version | Versionsangabe im Format v[0-9]+ (z. B. v1, v2). |
displayName | Menschenlesbarer Name, der im Marketplace-UI angezeigt wird. |
iconUrl | URL zum Provider-Icon (absoluter oder relativer Pfad). |
category | Gruppierungskategorie (z. B. databases, messaging, monitoring). |
author | Organisation oder Person, die für den Provider verantwortlich ist. |
description | Markdown-formatierte Beschreibung des Service. |
backend.landscape.gitUrl | Git-Repository-URL, die die Landscape-Konfiguration enthält. |
backend.landscape.ciProfile | Name des CI-Profils aus der ci.yml, das für Deployments verwendet wird. |
configSchema | JSON Schema zur Definition benutzerkonfigurierbarer Optionen. Diese Werte werden als Umgebungsvariablen an die Landscape übergeben. |
secretsSchema | JSON Schema zur Definition geheimer Werte (z. B. Passwörter). Diese Werte werden im Secrets-Vault der Landscape gespeichert. |
detailsSchema | JSON Schema zur Definition von Runtime-Details, die nach der Bereitstellung angezeigt werden. |
Nachfolgend ist dargestellt, wo die einzelnen Schema-Typen in der Codesphere-UI erscheinen:
- ConfigSchema
- SecretsSchema
- DetailsSchema
Konfigurationswerte aus configSchema erscheinen im Konfigurationsbereich der Service-Einstellungen und können aktualisiert werden.

Secrets aus secretsSchema werden im Dialog zum Erstellen eines Service angezeigt und müssen vom Nutzer ausgefüllt werden.

Details aus detailsSchema werden im Detailbereich der Service-Einstellungen angezeigt.

Veröffentlichen eines Landscape-basierten Providers
Provider werden über die Codesphere Public API veröffentlicht. Man kann entweder eine Git-URL angeben, die die Datei provider.yml enthält, oder die vollständige Provider-Spezifikation direkt im Payload übergeben.
- provider.yml aus Git abrufen
- Vollständige Spezifikation angeben
Der einfachste Ansatz ist die Angabe der Git-Repository-URL. Codesphere ruft die Datei provider.yml automatisch aus dem Repository ab und validiert sie.
hinweis
Wird gitRef nicht angegeben, wird der Standard-Branch des Repositorys verwendet, um die provider.yml-Datei abzurufen.
curl -X POST "https://<your-codesphere-url>/api/managed-services/providers" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"gitUrl": "https://github.com/your-org/mattermost-landscape",
"gitRef": "my-branch",
"scope": {
"type": "global"
}
}'
Für mehr Kontrolle, oder falls keine provider.yml im Repository enthalten sein soll, kann die vollständige Provider-Spezifikation direkt in der API-Anfrage übergeben werden:
curl -X POST "https://<your-codesphere-instance-url>/api/managed-services/providers" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "mattermost",
"version": "v1",
"author": "Your Team",
"displayName": "Mattermost",
"iconUrl": "https://example.com/mattermost-icon.png",
"category": "collaboration",
"description": "Open-source team messaging platform.",
"backend": {
"landscape": {
"gitUrl": "https://github.com/your-org/mattermost-landscape",
"ciProfile": "production"
}
},
"configSchema": {
"type": "object",
"properties": {
"SITE_NAME": {
"type": "string",
"description": "Display name for your Mattermost instance"
},
"MAX_USERS": {
"type": "integer",
"description": "Maximum number of users allowed"
}
}
},
"secretsSchema": {
"type": "object",
"properties": {
"ADMIN_PASSWORD": {
"type": "string",
"format": "password"
}
}
},
"detailsSchema": {
"type": "object",
"properties": {
"hostname": { "type": "string" },
"port": { "type": "integer" }
}
},
"plans": [],
"scope": {
"type": "team",
"teamIds": [42, 43]
}
}'
Provider-Geltungsbereiche
Beim Erstellen eines Providers kann der Sichtbarkeitsbereich (Scope) festgelegt werden:
| Scope-Typ | Beschreibung |
|---|---|
global | Für alle Teams der Codesphere-Instanz verfügbar. Erfordert Cluster-Admin-Berechtigungen. |
team | Nur für angegebene Teams verfügbar. Ein Array von teamIds angeben. |
Übergabe von Konfigurationen an Landscapes
Konfigurationswerte im Provider-Schema werden als Umgebungsvariablen an die Landscape übergeben. Diese können in der ci.yml referenziert werden:
schemaVersion: v0.2
run:
my-service:
steps:
- command: ./start.sh
env:
APP_VERSION: ${{ workspace.env['APP_VERSION'] }}
ADMIN_PASSWORD: ${{ vault.ADMIN_PASSWORD }}
Geheime Werte werden in den Vault der Landscape eingespeist und können in der ci.yml über die Syntax ${{ vault.SECRET_NAME }} abgerufen werden.
Update-Beschränkungen mit x-update-constraint
Das configSchema unterstützt eine benutzerdefinierte Erweiterung x-update-constraint, mit der eingeschränkt werden kann, wie einzelne
Eigenschaften nach dem Erstellen eines Service geändert werden können. Dies ist nützlich, um betriebliche Regeln durchzusetzen — zum Beispiel um zu verhindern,
dass Speicherplatz verringert wird, oder um die Version einer Datenbank-Engine nach der Erstkonfiguration festzuschreiben.
Das Schlüsselwort x-update-constraint kann jeder Eigenschaft im configSchema hinzugefügt werden:
configSchema:
type: object
properties:
storage:
type: integer
description: Storage allocation in GB
x-update-constraint: increase-only
version:
type: string,
description: Version of the Postgres DB.
enum: ['17.6', '16.10', '15.14', '14.19', '13.22']
x-update-constraint: immutable,
Verfügbare Beschränkungen
| Beschränkung | Verhalten |
|---|---|
increase-only | Der neue Wert muss größer oder gleich dem aktuellen Wert sein. Gilt nur für numerische Felder. |
immutable | Die Eigenschaft kann nach dem erstmaligen Setzen nicht mehr geändert werden. |
info
Update-Beschränkungen werden nur beim Aktualisieren eines bestehenden Service durchgesetzt. Bei der Erstellung werden alle Werte akzeptiert, solange sie die standardmäßige Schema-Validierung durchlaufen.
Unterstützte Formate
Provider-Schemata verwenden die Validierung von JSON Schema. Die folgenden format-Werte werden in Schema-Eigenschaften unterstützt:
int32, int64, float, double, byte, binary, date, date-time, password, uri, hostname
Dynamische Details mit x-endpoint
Das detailsSchema unterstützt eine benutzerdefinierte OpenAPI-Erweiterung x-endpoint, mit der Runtime-Details dynamisch vom eigenen Service abgerufen werden können. Dies ist nützlich, um Live-Statusinformationen, Metriken oder andere Daten abzurufen, die sich nach der Bereitstellung ändern.
Wenn x-endpoint für eine Eigenschaft gesetzt ist, ruft Codesphere den Wert vom angegebenen Endpoint ab. Die Endpoint-URL unterstützt Interpolation mithilfe anderer Details-Felder.
detailsSchema:
type: object
properties:
hostname:
type: string
port:
type: integer
status:
type: object
properties:
state:
type: string
uptime:
type: number
x-endpoint: "https://{{hostname}}:{{port}}/status"
In diesem Beispiel wird die Eigenschaft status dynamisch vom /status-Endpoint des Service unter Verwendung der Werte hostname und port abgerufen.
info
Für x-endpoint werden nur GET-Anfragen unterstützt. Der Endpoint muss JSON zurückgeben, das der Schema-Definition der Eigenschaft entspricht.
Individuelle REST-Backends
Die Managed-Services-Architektur von Codesphere ist erweiterbar gestaltet. Falls Landscape-basierte Provider nicht euren spezifischen Anforderungen entsprechen, könnt ihr ein eigenes individuelles REST-Backend implementieren.
tipp
Eine vollständige Anleitung zur Implementierung der Managed Service Adapter API-Spezifikation findet sich unter Ein individuelles REST-Backend erstellen.