Warum Polycrate?¶
Benutzerfreundliches Interface¶
Mit Hilfe von simplen Actions können komplexe, vor-konfigurierte Infrastruktur-Prozesse abstrahiert und technisch weniger versierten Anwendern zugänglich gemacht werden.
# block.poly
name: nginx
actions:
- name: install
playbook: playbooks/install.yml
- name: uninstall
playbook: playbooks/uninstall.yml
- name: status
playbook: playbooks/status.yml
Obige Actions können ohne Kenntnis der eigentlichen Implementierung durch den Anwender ausgeführt werden:
polycrate run nginx installpolycrate run nginx statuspolycrate run nginx uninstall
Cloud-native Toolchain im Gepäck¶
Polycrate hat cloud-native Tools wie Ansible, kubectl, Helm oder Python im Gepäck. Dadurch können Anwender direkt mit der Entwicklung von Blöcken und Programm-Logik beginnen, ohne sich Gedanken zu machen, welche Version von Ansible sie für Ihr Betriebssystem installieren müssen und ob diese Version Abhängigkeits-Probleme mit älteren Python-Versionen hervorruft.
Komplexe Prozesse einfach abstrahiert¶
Um Actions auszuführen ist kein Wissen über die eigentliche Implementierung einer Action notwendig. Ein Polycrate Workspace kann als sehr simples, benutzer-freundliches Interface für komplexe Anwendungs-Logik gestaltet werden - es liegt ganz in der Hand des Workspace Entwicklers, die komplexität des Workspaces vor dem Benutzer zu verstecken und ihm einfache Mittel an die Hand zu geben, Infrastruktur mit Hilfe des Workspace zu verwalten.
Nur eine Konfigurations-Datei¶
Ein Workspace wird über eine einzelne Datei - die Workspace Konfigurations-Datei (workspace.poly) beschrieben und konfiguriert. Alle Blöcke eines Workspace erben von dieser Datei. Das macht es unglaublich einfach, selbst komplexe Systeme an einer zentralen Stelle zu beschreiben und instrumentierbar zu machen.
Keine neue Sprache¶
Polycrate baut auf Industrie-Standards wie YAML auf. Es ist nicht nötig, eine neue DSL oder Programmiersprache zu lernen, um mit Polycrate Erfolge zu erzielen.
Für Teamwork gemacht¶
Blöcke mit verständlichen Actions erlauben es auch nicht-technischen Kollegen Tasks rund um einen Workspace zu übernehmen, ohne die Implementierungs-Details zu kennen. Das Installieren von Anwendungen oder Infrastruktur kann so einfach sein wie polycrate run app install oder polycrate run app restart.
# workspace.poly
name: my-workspace
blocks:
- name: aks
from: registry.my-org.com/blocks/cloud/azure-aks:1.0.0
- name: myapp
kubeconfig:
from: aks # Nutzt Kubeconfig vom aks-Block
# blocks/myapp/block.poly
name: myapp
actions:
- name: dns-logs
playbook: playbooks/dns-logs.yml
- name: ingress-logs
playbook: playbooks/ingress-logs.yml
- name: restart-myapp
playbook: playbooks/restart.yml
Funktioniert mit existenten Tools¶
Es ist nicht nötig, existierenden Code für die Arbeit mit Polycrate umzuschreiben. Polycrate kann wie eine Runtime betrachtet werden, die Code einfach nur ausführt. Entsprechend kann z.B. aus einem existenten Python-Script, das Daten aus einem Zielsystem abholt, einfach ein Block gemacht werden, der dann im Workspace nutzbar ist:
# block.poly
name: random-data
actions:
- name: get
playbook: playbooks/get.yml
- name: delete
playbook: playbooks/delete.yml
Mit Ansible integriert¶
Polycrate hat eine sehr tiefe Integration in Ansible, welches Unterstützung für die meisten der aktuell verfügbaren Systeme und Provider im cloud-nativen Ökosystem mitbringt. Dadurch ergeben sich zahlreiche Möglichkeiten, mit Ansible Automatisierungen zu erstellen, Kubernetes oder Docker Deployments zu machen oder Infrastruktur bei einem Cloud-Provider zu erstellen.
# workspace.poly
blocks:
- name: servers
from: registry.my-org.com/blocks/infra/base:1.0.0
# Generiert inventory.yml
- name: docker
from: registry.my-org.com/blocks/ansible/docker:1.0.0
inventory:
from: servers # Nutzt Inventory vom servers-Block
Polycrate stellt sicher, dass Ansible ein gültiges Inventory zur Verfügung gestellt wird und Verbindungs-relevante Komponenten wie SSH-Keys oder ein Kubeconfig-File bei Ausführung von Ansible richtig integriert sind.
Block-Registry¶
Polycrate nutzt OCI-kompatible Registries als Medium um Blöcke mit Anderen teilen zu können. Blöcke können mit Polycrate in eine Registry gepusht oder aus einer Registry gepullt werden, was auf Workspace-Ebene ein seichtes Dependency-Management ermöglicht.
Häufig genutzte Blöcke können generalisiert und der Allgemeinheit oder anderen internen Teams zur Nutzung zur Verfügung gestellt werden.
Polycrate macht keinen Unterschied zwischen SaaS-Registries wie dem Docker Hub oder selbst-gehosteten Registries wie Harbor oder der offiziellen Docker Container Registry. Blöcke werden verpackt wie reguläre Docker Images und können auch ohne die Polycrate CLI mittels docker pull oder docker push transportiert werden.
- Block pullen:
polycrate blocks pull registry.my-org.com/blocks/k8s/cluster:0.0.1 - Block pushen:
polycrate blocks push registry.my-org.com/infra/my-block
Block-Namen müssen immer den vollständigen Registry-Pfad enthalten. Es gibt keine Default-Registry – Kurznamen werden als lokale Blocks interpretiert.
Mit Git integriert¶
Ein Workspace ist wie eine Blackbox und enthält alle nötigen Informationen und Komponenten um zu funktionieren. Entsprechend kann ein Workspace mit Hilfe von Git versioniert, verwaltet und mit anderen geteilt werden.
Polycrate hat außerdem eine automatische Logging-Funktion, die bei Ausführung der CLI getriggert wird und Informationen zum letzten Stand des Workspaces bei Ausführung einer Action in Form eines Snapshots im Workspace persistiert und (sofern mit Git integriert) die Änderungen in Form eines Commits im Repository festhält.