Polycrate vs. plain Ansible: Was du gewinnst – und warum es sich lohnt
TL;DR Plain Ansible ist ein starkes Werkzeug für Ad-hoc-Automatisierung, schnelle Skripte und …
Diese Serie zeigt Schritt für Schritt, wie Ansible mit Polycrate zu einer strukturierten, teilbaren und compliance-fähigen Automatisierungsplattform wird – von den Grundlagen bis zu Enterprise-Szenarien.
acme-corp-automation) und eine einfache Verzeichnisstruktur verhindern Chaos, bevor es entsteht.:latest zu verwenden.hosts: localhost statt korrekter Inventories und fehlende Version-Pins; mit Polycrate und den Best Practices vermeiden Sie diese Fehler von Anfang an.Der erste produktive Workspace ist mehr als ein Testballon. Er legt fest, wie Sie in Zukunft automatisieren:
Mit plain Ansible starten viele mit einem schnellen ansible-playbook auf dem Laptop – und stehen Monate später vor einem Zoo aus Playbooks, Python-Versionen und Inventories. Ansible ist stark, aber ohne Rahmenbedingungen wächst die Komplexität schneller, als Ihnen lieb ist.
Polycrate gibt Ansible eine klare Struktur:
Dieser Beitrag zeigt eine konkrete Checkliste für Ihren ersten produktiven Workspace – inklusive Name, Struktur, ersten Blöcken, Verschlüsselung, Git und Team-Onboarding.
Ein guter Workspacename ist:
Bewährtes Muster:
{firma}-{bereich}-automation oder{firma}-{produkt}-platformBeispiele:
acme-corp-automation (gesamtunternehmensweite Automatisierung)acme-retail-platform (Plattform-Team für Retail-Geschäft)Vermeiden Sie: Namen mit persönlichen Bezügen oder Umgebungen (max-dev-playground, ansible-test).
Ein typischer Workspace nach den Best Practices für Polycrate-Workspaces sieht so aus:
acme-corp-automation/
workspace.poly
inventory.yml
artifacts/
secrets/
kubeconfig.yml # falls Sie K8s einsetzen
blocks/
linux-patch/
block.poly
patch.yml
windows-baseline/
block.poly
baseline.yml
k8s-deploy-app/
block.poly
deploy.yml
.git/workspace.poly definiert den Workspace und die Block-Instanzeninventory.yml (YAML!) ist das zentrale Inventory für alle Ansible-Playbooksblocks/ enthält Ihre lokalen Blöcke mit block.poly und Playbooks im gleichen Verzeichnisartifacts/secrets/ ist der naheliegende Ort für verschlüsselte Dateien (über Polycrate-Workspace-Verschlüsselung)name: acme-corp-automation
organization: acme
blocks:
- name: linux-patch
from: linux-patch
config:
target_hosts: "linux_servers"
- name: windows-baseline
from: windows-baseline
config:
target_hosts: "windows_servers"
- name: k8s-deploy-app
from: k8s-deploy-app
config:
kubeconfig_path: ""Wichtig:
from: zeigt bei lokalen Blöcken auf das Unterverzeichnis unter blocks/source: oder version: im Block-Eintrag (die Version steht in der Block-Definition bzw. im Registry-Tag)config auf Workspace-Ebene ist kein freies Key-Value-Mapping – nur dokumentierte Felder (z. B. Toolchain-Image, Pfade); siehe Konfiguration. SSH-Benutzer setzen Sie sinnvollerweise pro Host im inventory.yml (wie oben bei ansible_user)workspace.poly gibt es keine Auswertung von Jinja wie {{ workspace.secrets[...] }}. Sensible Werte für kubeconfig_path tragen Sie in secrets.poly nach (Merge mit workspace.poly), nicht als Template in der workspace.polykubeconfig_path: "" ersetzen Sie nach dem Anlegen von secrets.poly durch den effektiven Pfad bzw. lassen Overrides in secrets.polyStarten wir mit einem minimalen, aber produktiven Beispiel für Linux-Admins: ein Block zum Patchen aller Linux-Server.
name: linux-patch
version: 0.1.0
kind: generic
config:
target_hosts: "linux_servers"
actions:
- name: patch
description: "Linux-Server patchen"
playbook: patch.ymlversion des Blocks ist explizit gesetzt – niemals unversioniert arbeitenconfig.target_hosts definiert die Host-Gruppe, auf die das Playbook zieltpatch beschreibt klar, was passiert: Patching über Ansibleall:
children:
linux_servers:
hosts:
server01.acme-corp.com:
ansible_user: ubuntu
server02.acme-corp.com:
ansible_user: ubuntu
windows_servers:
hosts:
win01.acme-corp.com:
ansible_user: Administrator
ansible_connection: winrm
ansible_port: 5986
ansible_winrm_server_cert_validation: ignoreDieses Inventory liegt im Workspace-Root (inventory.yml). Polycrate setzt ANSIBLE_INVENTORY automatisch auf diese Datei; Sie müssen im Block nichts weiter konfigurieren.
- name: Linux-Server patchen
hosts: "{{ block.config.target_hosts }}"
become: true
gather_facts: true
tasks:
- name: Paket-Cache aktualisieren
ansible.builtin.apt:
update_cache: true
cache_valid_time: 3600
- name: Alle Pakete aktualisieren
ansible.builtin.apt:
upgrade: dist
autoremove: trueWichtig:
hosts: localhost und kein connection: local – das würde nur im Polycrate-Container wirkenhosts wird aus der Block-Konfiguration gezogen und verweist auf eine Gruppe aus inventory.ymlpolycrate run linux-patch patchDas unterscheidet sich fundamental von plain Ansible:
ansible-playbook -i inventory.yml patch.yml auf einem lokal konfigurierten Systemansible.cfgMehr zur Ansible-Integration finden Sie in der offiziellen Dokumentation:
https://docs.ayedo.de/polycrate/ansible/
Ziel: Routineaufgaben stabil und reproduzierbar machen.
Empfohlene erste Blöcke:
linux-patch (wie oben)linux-users)Für Hardening können Sie überlegen, einen offiziellen Block aus dem PolyHub (hub.polycrate.io) einzusetzen oder einen eigenen Block zu bauen, der interne Policies abbildet.
Ziel: Standardaufgaben rund um AD, GPO und Software-Ausbringung automatisieren.
Typische Start-Blöcke:
windows-baseline: Basisrollen, PowerShell-Policy, Agentenwindows-software-deploy: Standardsoftware per Ansible win_*-Modulead-user-mgmt: Benutzer- und Gruppenpflege via Ansible-Module für Active DirectoryEin block.poly für windows-baseline könnte z. B. so aussehen:
name: windows-baseline
version: 0.2.0
kind: generic
config:
target_hosts: "windows_servers"
actions:
- name: apply
description: "Windows-Baseline anwenden"
playbook: baseline.ymlDie Playbooks nutzen hosts: "{{ block.config.target_hosts }}" und die windows_servers-Gruppe aus dem Inventory – genau wie im Linux-Beispiel.
Ziel: Cluster-Operationen über Ansible und zusätzliche Tools (kubectl, Helm) automatisieren.
Sinnvolle erste Blöcke:
k8s-deploy-app: Anwendung ausliefern (Manifeste oder Helm-Charts)k8s-cert-manager (oft sinnvoll, per PolyHub-Block mit gepinnter Version)k8s-backup-ops: Wiederkehrende Backup-/Restore-AufgabenEin block.poly, der eine Kubeconfig aus dem Workspace nutzt:
name: k8s-deploy-app
version: 0.1.0
kind: generic
config:
kubeconfig_path: ""
actions:
- name: deploy
description: "App im Cluster ausrollen"
playbook: deploy.ymlIm Playbook arbeiten Sie dann mit hosts: localhost und connection: local, weil die API-Aufrufe (z. B. kubernetes.core.k8s) direkt aus dem Polycrate-Container gegen den Cluster gehen – das ist hier korrekt, da der Ziel-Endpunkt eine API, nicht der Container selbst ist. Mehr Details finden Sie in der Kubernetes-Dokumentation:
https://docs.ayedo.de/polycrate/kubernetes/
Diese Schritte haben sich für den Einstieg bewährt:
Git-Repository anlegen
git init acme-corp-automation.gitignore für lokale Artefakte, z. B. *.retry, temporäre DateienWorkspace erstellen
workspace.poly schreiben (siehe oben)inventory.yml anlegen und erste Hosts eintragen – sauber getrennt nach GruppenErsten Block anlegen
blocks/linux-patch/ block.poly und patch.yml anlegenversion: 0.1.0)polycrate run linux-patch patchWorkspace-Verschlüsselung aktivieren
Polycrate bringt eingebaute Verschlüsselung mit age.
Typischer Ablauf:
polycrate workspace encryptartifacts/secrets/kubeconfig.yml werden verschlüsselt gespeichertBlock-Versionen konsequent pinnen
version-Feld in block.poly pflegen- name: nginx-ingress
from: registry.acme-corp.com/acme/infra/nginx-ingress:0.3.1:latest verwenden – das ist die häufigste Quelle für “plötzlich ist alles anders”.PolyHub-Blöcke einbinden (wo sinnvoll)
Team-Readme schreiben
polycrate run linux-patch patch
polycrate run windows-baseline apply
polycrate run k8s-deploy-app deployMit dieser Checkliste haben Sie nach kurzer Zeit einen Workspace, der:
ist – nicht nur ein Experiment auf dem eigenen Laptop.
hosts: localhost für echte Server verwenden
inventory.yml verwenden (linux_servers, windows_servers etc.), kein connection: local, wenn Sie Hosts per SSH/WinRM verwaltenSecrets unverschlüsselt im Git-Repo speichern
artifacts/secrets/ legen und dort verschlüsselt verwaltenBlock-Versionen nicht pinnen
block.poly und Registry-Tags immer explizit setzen, Änderungen über neue Versionen ausrollenZu viele Blöcke auf einmal bauen
Playbooks nicht teamtauglich benennen
misc.yml eigentlich machtpatch.yml, baseline.yml, deploy.yml) und passende Action-Namen (patch, apply, deploy)Polycrate soll nicht das Tool einer einzelnen Person sein, sondern eine gemeinsame Plattform. Gute Erfahrungen machen Teams mit:
Einfachen Einstiegskommandos
polycrate run linux-patch patchRollenbasierten Einstiegen
linux-patch und linux-userswindows-baseline, windows-software-deployk8s-deploy-app, plus ggf. offizielle K8s-Blöcke aus PolyHubGemeinsam definierten Guardrails
Schulungen und Pairing
Mit Polycrate haben Sie dafür die richtige Grundlage: Containerisierte Ausführung löst das Dependency-Problem, das Block-Modell sorgt für Struktur und Guardrails, und Workspace-Verschlüsselung macht es leichter, Compliance-Anforderungen einzuhalten – ohne schwergewichtige externe Tools.
Nein. Polycrate löst genau dieses Dependency-Problem, indem Ansible vollständig im Container läuft. Sie brauchen lokal nur Polycrate und einen Container-Runtime (z. B. Docker oder Podman). Die Ansible-Version, Python-Pakete und zusätzliche Tools (kubectl, Helm, Azure-CLI usw.) definieren Sie zentral im Toolchain-Container – alle im Team arbeiten damit identisch.
Ja. In vielen Einstiegsprojekten packen wir vorhandene Playbooks in neue Blöcke, statt alles neu zu schreiben:
inventory nach inventory.yml im Workspace migrierenhosts-Angaben so anpassen, dass sie auf Host-Gruppen und/oder Block-Konfiguration verweisenansible-playbook-Aufrufe werden durch polycrate run BLOCK ACTION ersetztDer Mehrwert kommt dann aus der Struktur (Blocks, Workflows) und der containerisierten Ausführung. Eine tiefergehende Migration können wir im Rahmen unserer Beratung gemeinsam planen.
Typischerweise:
Ziel ist immer, dass Ihr Team Polycrate selbstständig weiterentwickeln kann – wir liefern das Anfangsgerüst und das Know-how. Wenn Sie dazu Fragen haben, melden Sie sich gerne über unser Kontaktformular oder direkt über https://ayedo.de/kontakt/.
Weitere Fragen? Siehe unsere FAQ
Am Ende dieser Artikel-Reihe steht nicht ein fertiges Produkt, sondern ein Werkzeugkasten: Mit einem ersten sauber aufgesetzten Workspace, klaren Blöcken und konsequenter Versionierung haben Sie die Basis für Automatisierung, die bleibt.
Polycrate adressiert typische Hürden, die viele Teams mit plain Ansible erleben:
Als Team hinter Polycrate unterstützen wir bei ayedo genau in dieser Phase: vom ersten produktiven Workspace bis hin zu unternehmensweiten Automatisierungsplattformen. In unseren Beratungsangeboten kombinieren wir Praxis aus Platform-Engineering-Projekten mit tiefem Verständnis für Compliance, Security und Enterprise-Architekturen.
Ob Sie Linux- und Windows-Administration vereinheitlichen, Kubernetes-Cluster integrieren oder Policy as Code für Audits etablieren möchten – gemeinsam definieren wir eine Workspace-Struktur und Block-Landschaft, die zu Ihrer Organisation passt, statt umgekehrt.
Wenn Sie Ihren ersten produktiven Workspace nicht allein planen möchten oder bestehende Ansible-Strukturen sauber in Polycrate überführen wollen, sprechen Sie uns an – gerne auch mit konkreten Beispielen aus Ihrem Alltag.
Einstieg mit Terminen und Formaten: Workshops · individuelle Begleitung: Beratung.
TL;DR Plain Ansible ist ein starkes Werkzeug für Ad-hoc-Automatisierung, schnelle Skripte und …
TL;DR Die meisten Umgebungen sind hybrid: Windows-Server fürs AD, Fileservices und Fachanwendungen, …
TL;DR Du richtest WinRM einmal sauber mit HTTPS, Zertifikat und Firewall-Regeln ein und hast danach …