Zum Hauptinhalt springen
Version: 1.89.x (Q2 26)

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:

  1. Ein Git-Repository, das eine gültige Codesphere Landscape mit einer ci.yml-Datei enthält.
  2. (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.
  3. 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

FeldBeschreibung
nameEindeutige Kennung für den Provider. Muss dem Muster ^[-a-z0-9_]+$ entsprechen.
versionVersionsangabe im Format v[0-9]+ (z. B. v1, v2).
displayNameMenschenlesbarer Name, der im Marketplace-UI angezeigt wird.
iconUrlURL zum Provider-Icon (absoluter oder relativer Pfad).
categoryGruppierungskategorie (z. B. databases, messaging, monitoring).
authorOrganisation oder Person, die für den Provider verantwortlich ist.
descriptionMarkdown-formatierte Beschreibung des Service.
backend.landscape.gitUrlGit-Repository-URL, die die Landscape-Konfiguration enthält.
backend.landscape.ciProfileName des CI-Profils aus der ci.yml, das für Deployments verwendet wird.
configSchemaJSON Schema zur Definition benutzerkonfigurierbarer Optionen. Diese Werte werden als Umgebungsvariablen an die Landscape übergeben.
secretsSchemaJSON Schema zur Definition geheimer Werte (z. B. Passwörter). Diese Werte werden im Secrets-Vault der Landscape gespeichert.
detailsSchemaJSON 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:

Konfigurationswerte aus configSchema erscheinen im Konfigurationsbereich der Service-Einstellungen und können aktualisiert werden.

Config Schema in den Service-Einstellungen

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.

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"
}
}'

Provider-Geltungsbereiche

Beim Erstellen eines Providers kann der Sichtbarkeitsbereich (Scope) festgelegt werden:

Scope-TypBeschreibung
globalFür alle Teams der Codesphere-Instanz verfügbar. Erfordert Cluster-Admin-Berechtigungen.
teamNur 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änkungVerhalten
increase-onlyDer neue Wert muss größer oder gleich dem aktuellen Wert sein. Gilt nur für numerische Felder.
immutableDie 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.