Workspaces¶
Was auch immer Sie mit Polycrate bauen passiert in einem Workspace. Der Workspace enthält Konfiguration, Credentials und Lifecycle-Artefakte, die beim Ausführen von Blöcken entstehen. Ein Workspace ist im Grunde genommen nur ein Ordner auf Ihrer Festplatte der mit Hilfe von git oder anderen Mechanismen versioniert und synchronisiert werden kann.
Workspace-Pfad
Standardmäßig nimmt Polycrate an, dass der aktuelle Pfad ($PWD), von dem Polycrate ausgeführt wurde, ein Workspace ist. Sie können einen anderen Pfad mit --workspace oder -w angeben.
Der Workspace kann mit Hilfe der Workspace-Konfiguration zusammengestellt werden.
Keine Template-Substitution
In workspace.poly ist keine Template-Substitution möglich (kein Jinja2, kein Bash). Verwenden Sie secrets.poly für sensitive Werte und Ansible-Playbooks für dynamische Logik. → Details zu Konfigurationseinschränkungen
Workspace Directory Layout¶
Ein Workspace folgt einer definierten Verzeichnisstruktur:
graph TB
WS[my-workspace/] --> Config[workspace.poly]
WS --> Secrets[secrets.poly]
WS --> DF[Dockerfile.poly]
WS --> CL[CHANGELOG.poly]
WS --> Blocks[blocks/]
WS --> Arts[artifacts/]
Blocks --> B1[block-1/]
Blocks --> B2[block-2/]
B1 --> BP1[block.poly]
B1 --> CL1[CHANGELOG.poly]
B1 --> RM1[README.md]
B1 --> PB1[playbooks/]
B1 --> T1[templates/]
Arts --> SecretsDir[secrets/]
Arts --> BlockArts[blocks/]
SecretsDir --> IdRsa[id_rsa]
SecretsDir --> IdRsaPub[id_rsa.pub]
SecretsDir --> WSKube[kubeconfig.yml]
SecretsDir --> B1Sec[block-1/]
B1Sec --> DbPwd[database.pwd]
BlockArts --> BA1[block-1/]
BA1 --> AInv[inventory.yml]
BA1 --> AKube[kubeconfig.yml]
BA1 --> Cache[hosts_cache.json] Wichtige Verzeichnisse und Dateien¶
Workspace-Root¶
| Datei/Verzeichnis | Pflicht | Sensibel | Beschreibung |
|---|---|---|---|
workspace.poly | ✅ | Nein | Workspace-Konfiguration |
secrets.poly | Nein | ⚠️ Ja | Sensitive Block-Konfiguration (unverschlüsselt) |
secrets.poly.age | Nein | Nein | Verschlüsselte Version von secrets.poly |
.workspace-encrypted | Nein | Nein | Encryption Marker |
Dockerfile.poly | Nein | Nein | Custom Docker-Image für den Workspace |
CHANGELOG.poly | Nein | Nein | Workspace-Changelog für Release-Tracking |
blocks/ | Nein | Nein | Template- und lokale Blocks |
artifacts/ | Nein | Teilweise | Von Blocks generierte und benötigte Dateien |
blocks/ – Block-Verzeichnisse¶
Jeder Block hat sein eigenes Unterverzeichnis unter blocks/:
| Datei/Verzeichnis | Pflicht | Beschreibung |
|---|---|---|
block.poly | ✅ | Block-Konfiguration und Actions |
CHANGELOG.poly | ✅ | Versionshistorie des Blocks |
README.md | Nein | Dokumentation des Blocks |
playbooks/ | Nein | Ansible-Playbooks |
templates/ | Nein | Jinja2-Templates für Ansible |
artifacts/secrets/ – Sensible Dateien¶
| Pfad | Beschreibung |
|---|---|
id_rsa | SSH Private Key |
id_rsa.pub | SSH Public Key |
kubeconfig.yml | Kubernetes-Konfiguration (workspace-weit) |
<BLOCKNAME>/ | Block-spezifische Secrets |
Niemals unverschlüsselt committen!
Alle Dateien unter artifacts/secrets/ werden bei aktivierter Verschlüsselung automatisch mit .age Suffix verschlüsselt.
artifacts/blocks// – Block-Artefakte¶
| Datei | Beschreibung |
|---|---|
inventory.yml | Generiertes oder geerbtes Ansible-Inventory |
kubeconfig.yml | Generierte oder geerbte Kubernetes-Config |
hosts_cache.json | SSH-Host-Cache für schnellere Verbindungen |
→ Ausführliche Dokumentation zu Artefakten
Git-Integration
Ein Workspace kann (und sollte) ein Git-Repository sein. Nutzen Sie die Git-Commands (polycrate git sync) für einfache Synchronisation.
Secrets verschlüsseln
Polycrate bietet eingebaute Verschlüsselung für sensible Daten in secrets.poly und artifacts/secrets/. Siehe Workspace-Verschlüsselung.
Workspace initialisieren¶
# Neuen Workspace erstellen
polycrate workspace init
# Mit SSH-Keys (werden in artifacts/secrets/ abgelegt)
polycrate workspace init --with-ssh-keys
# Mit Git-Repository
polycrate workspace init --git
Workspace-Organisation¶
Empfohlene Verzeichnisstruktur¶
Workspaces sollten unter $HOME/.polycrate/workspaces/ organisiert werden:
$HOME/.polycrate/workspaces/
├── acme/ # Organisation
│ ├── acme-production-1/ # Workspace
│ ├── acme-staging-1/
│ └── acme-development-1/
├── other-org/
│ └── other-org-production-1/
Naming-Schema¶
Workspace-Namen folgen dem Schema: $org-$purpose-$count
| Komponente | Beschreibung | Beispiel |
|---|---|---|
$org | Organisation (slugified) | acme |
$purpose | Zweck/Umgebung | production, staging, dev |
$count | Nummer (beginnend bei 1) | 1, 2, 3 |
Beispiele:
acme-production-1– Erste Produktionsumgebung von Acmeacme-staging-1– Staging-Umgebungstartup-dev-1– Entwicklungsumgebung
Naming Rules¶
Pflicht: Slugified Names
Sowohl name als auch organization müssen URL-freundlich sein und dem Regex-Pattern entsprechen:
Erlaubte Namen:
# Gut ✅
name: acme-production-1
organization: acme
# Gut ✅
name: internal-monitoring-1
organization: internal
# Gut ✅ (mit Unterstrichen)
name: my_workspace_v2
organization: my_org
Nicht erlaubte Namen:
# Schlecht ❌
organization: Demo GmbH # Leerzeichen und Sonderzeichen
organization: ACME Corp. # Punkt nicht erlaubt
name: 123-project # Muss mit Buchstabe beginnen
name: my workspace # Leerzeichen nicht erlaubt
Polycrate validiert diese Felder beim Laden des Workspaces und gibt eine aussagekräftige Fehlermeldung aus:
Validation error: option workspace.organization is malformed: 'Demo GmbH' (regex: `^[a-zA-Z]+([-/_]?[a-zA-Z0-9_]+)+$`)
Workspaces auflisten¶
Der workspace list Command zeigt Workspaces aus der Polycrate API oder aus dem lokalen Workspace-Verzeichnis an.
Remote-Modus (Standard)¶
Wenn die Polycrate API konfiguriert ist, werden Workspaces aus der API geladen:
# API-Workspaces (Standard)
polycrate workspace list
# Mit Filter
polycrate workspace list --filter production
# Tabellenausgabe
polycrate workspace list --no-pager
Action-Menü bei Auswahl (Remote):
open– Öffnet den Workspace in der Polycrate UIgitlab– Öffnet das GitLab-Repositoryclone– Klont das Repository lokal
Lokal-Modus¶
Mit --local werden Workspaces aus ~/.polycrate/workspaces/ gescannt:
# Lokale Workspaces
polycrate workspace list --local
# Mit Filter
polycrate workspace list --local --filter production
# Detaillierte Tabellenausgabe
polycrate workspace list --local --no-pager -v
Action-Menü bei Auswahl (Lokal):
open– Zeigt Workspace-Details und Pfadstatus– Ruft den Workspace-Status abgit-sync– Synchronisiert Git-Änderungen
Automatischer Fallback
Wenn keine API konfiguriert ist, wechselt workspace list automatisch in den lokalen Modus und zeigt einen entsprechenden Hinweis an.
→ CLI-Referenz: workspace list
Hybride Workspaces (Code + Workspace)¶
In der Praxis werden Workspaces oft gemeinsam mit Quellcode verwaltet – beispielsweise bei Softwareprojekten, die mit Polycrate gebaut und deployed werden. Die polycrate-cli selbst ist ein solches Beispiel: Go-Quellcode und Polycrate-Workspace koexistieren im selben Repository.
Workspace Core-Dateien¶
Diese Dateien und Ordner gehören exklusiv zum Polycrate-Workspace und sollten von Build-Prozessen (Docker, CI/CD) ausgeschlossen werden:
Pflicht-Dateien¶
| Datei | Beschreibung |
|---|---|
workspace.poly | Workspace-Konfiguration (einzige Pflichtdatei) |
Optionale Workspace-Dateien¶
| Datei/Ordner | Beschreibung | Sensibel? |
|---|---|---|
secrets.poly | Unverschlüsselte Block-Secrets | ⚠️ Ja |
secrets.poly.age | Verschlüsselte Secrets | Nein |
CHANGELOG.poly | Workspace-Changelog | Nein |
Dockerfile.poly | Custom Container-Image | Nein |
.workspace-encrypted | Encryption Marker | Nein |
inventory.yml | Legacy Ansible Inventory | Optional |
Standard-Verzeichnisse¶
| Verzeichnis | Beschreibung | Sensibel? |
|---|---|---|
blocks/ | Block-Definitionen | Nein |
artifacts/ | Generierte Dateien | ⚠️ Teilweise |
Sensible Dateien (artifacts/secrets/)¶
| Pfad | Beschreibung |
|---|---|
artifacts/secrets/id_rsa | SSH Private Key |
artifacts/secrets/id_rsa.pub | SSH Public Key |
artifacts/secrets/kubeconfig.yml | Kubernetes Config |
artifacts/secrets/<block>/ | Block-spezifische Secrets |
Niemals in Git oder Docker-Images!
Die Dateien unter artifacts/secrets/ und secrets.poly dürfen niemals unverschlüsselt in Git-Repositories oder Docker-Images landen. Nutzen Sie die Workspace-Verschlüsselung und konfigurieren Sie .gitignore/.dockerignore entsprechend.
.gitignore für hybride Workspaces¶
Bei hybriden Workspaces (Code + Polycrate) sollte .gitignore alle sensiblen Polycrate-Dateien ausschließen:
# ============================================
# Polycrate Workspace - Sensitive Files
# ============================================
# Unverschlüsselte Secrets (NIEMALS committen!)
secrets.poly
id_rsa
id_rsa.pub
# Sensible Artifacts
artifacts/secrets/*
!artifacts/secrets/*/
!artifacts/secrets/*.age
artifacts/secrets/*/*
!artifacts/secrets/*/*.age
# Kubeconfig im Root (legacy)
/kubeconfig.yml
/kubeconfig.yaml
# ============================================
# Polycrate Workspace - Optional excludes
# ============================================
# Build-Artefakte (falls vorhanden)
dist/
# Verschlüsselungs-Marker beibehalten
!.workspace-encrypted
Verschlüsselte Dateien committen
Dateien mit .age Suffix (z.B. secrets.poly.age, artifacts/secrets/id_rsa.age) können und sollten committed werden – sie sind mit AGE verschlüsselt.
.dockerignore für hybride Workspaces¶
Bei Docker-Builds ist es kritisch, dass keine Workspace-spezifischen Dateien ins Image gelangen:
# ============================================
# Polycrate Workspace - ALLE ausschließen!
# ============================================
# Workspace-Konfiguration (nicht für Runtime benötigt)
workspace.poly
secrets.poly
secrets.poly.age
CHANGELOG.poly
inventory.yml
# Workspace-Verzeichnisse
blocks/
artifacts/
# SSH-Keys (NIEMALS ins Image!)
id_rsa
id_rsa.pub
ssh-passphrase.poly
# Encryption Marker
.workspace-encrypted
# Custom Polycrate Dockerfile (nicht für App-Build)
Dockerfile.poly
# ============================================
# Development & Documentation
# ============================================
# Specs und Cursor Rules
.specs/
.cursor/
# Documentation
*.md
!README.md # Optional: README im Image behalten
# Git
.git/
.gitignore
.gitlab-ci.yml
# IDE
.vscode/
.idea/
Beispiel: polycrate-cli Repository¶
Die polycrate-cli demonstriert einen hybriden Workspace:
polycrate-cli/
├── # === Go-Quellcode ===
├── main.go
├── go.mod
├── go.sum
├── cmd/ # CLI-Commands
├── pkg/ # Packages
│
├── # === Docker ===
├── Dockerfile # Production-Build
├── Dockerfile.poly # Polycrate Container (optional)
│
├── # === Polycrate Workspace ===
├── workspace.poly # ← Workspace-Konfiguration
├── CHANGELOG.poly # ← Release-Changelog
├── blocks/ # ← Block-Definitionen
│ ├── app/ # Release-Management
│ ├── cargo.ayedo.cloud/ # Registry-Blocks
│ └── ayedo/
│ └── build-tools/
│ ├── golang/ # Go-Build
│ └── docker/ # Docker-Build
├── artifacts/ # ← Generierte Dateien
│ ├── secrets/ # SSH-Keys, Kubeconfigs
│ └── blocks/ # Block-Artefakte
│
├── # === Build Output ===
├── dist/ # Go-Binaries + Archives
│
├── # === Sonstiges ===
├── .gitignore
├── .dockerignore
├── Makefile
└── README.md
Best Practices für hybride Workspaces¶
-
Klare Trennung: Workspace-Dateien (
workspace.poly,blocks/,artifacts/) sind Infrastruktur-Konfiguration, nicht Quellcode. -
Secrets nie unverschlüsselt: Aktivieren Sie Workspace-Verschlüsselung bevor Sie committen.
-
Git-Hooks nutzen: Polycrate kann automatisch Pre-Commit-Hooks installieren, die vor unverschlüsselten Secrets warnen:
-
CI/CD-Separation: In CI/CD-Pipelines sollte der Workspace separat behandelt werden:
-
Docker Multi-Stage: Nutzen Sie Multi-Stage-Builds um sicherzustellen, dass nur benötigte Binaries im finalen Image landen:
Zusammenhang mit anderen Konzepten¶
- Blocks: Workspaces enthalten und orchestrieren Blocks
- Artefakte: Persistente Daten werden in
artifacts/gespeichert - Verschlüsselung: Secrets werden automatisch verschlüsselt
- Git-Integration: Versionskontrolle und Synchronisation
- Best Practices: Empfehlungen für Workspace-Organisation