Polycrate API für Teams: Zentrales Monitoring und Remote-Triggering
TL;DR Die Polycrate API macht aus einzelnen Workspaces eine Team-Plattform: alle Workspaces, Action …
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.
apt upgrade) inklusive Service-Restart und verteilst Sensor- und Logging-Konfiguration auf deine Geräteflotte.serial: 10 rollst du Updates sicher in Wellen aus, zum Beispiel 50 Raspberry Pis in Gruppen à 10 – ideal für Fabrikhallen, Smart-Home-Flotten oder Industrie-4.0-Setups.Stell dir eine typische Fabrikhalle vor:
Alle machen „irgendetwas Wichtiges“: Daten sammeln, in die Cloud senden, Alarme auslösen. Aber:
Das ist nicht nur unkomfortabel, sondern riskant:
Ansible ist für solche Aufgaben hervorragend geeignet. Aber:
Viele IoT- und OT-Teams scheitern daran, Ansible selbst sauber aufzusetzen: Python-Versionen, Collections, SSH-Konfiguration, ansible.cfg, und so weiter.
Genau hier setzt Polycrate an: Du bekommst eine standardisierte Ansible-Umgebung im Container – ohne Installationsmarathon auf deinem Laptop. Du konzentrierst dich auf deine Geräte, nicht auf dein Tooling.
Raspberry Pis sind aus IoT- und Edge-Projekten kaum wegzudenken. Für Ansible sind sie ideale Ziele:
Wichtig: Die Architektur (armv7, arm64) ist Ansible egal. Ansible steuert die Geräte per SSH, die Module laufen direkt auf dem Zielsystem. Du brauchst also:
Mit „plain“ Ansible heißt das für dich:
community.general)ansible.cfg und Inventories pflegenUnd dann funktioniert es auf dem Laptop deines Kollegen anders als bei dir, weil Versionen leicht abweichen.
Mit Polycrate sieht das anders aus:
Mehr zur Ansible-Integration findest du in der Polycrate-Dokumentation zur Ansible-Integration.
Wir starten mit einem einfachen Polycrate-Workspace für eine kleine Flotte von Raspberry Pis.
Angenommen, dein Workspace liegt in einem Git-Repository und heißt acme-corp-automation. Im Wurzelverzeichnis des Workspaces liegt dein Inventory als YAML-Datei inventory.yml:
# inventory.yml (Ansible-YAML-Inventar)
all:
children:
edge:
hosts:
pi-01.acme-corp.com:
ansible_user: pi
pi-02.acme-corp.com:
ansible_user: pi
pi-03.acme-corp.com:
ansible_user: pi
pi-04.acme-corp.com:
ansible_user: pi
pi-05.acme-corp.com:
ansible_user: piHinweise:
edge ist die Gruppe, die du im Block über hosts_group: edge ansteuerst.inventory.yml.ANSIBLE_INVENTORY automatisch auf diese Datei.edge.hosts.Damit hast du die „Landkarte“ deiner Edge-Flotte zentral an einem Ort.
Als Nächstes definieren wir in Polycrate einen Block, der genau diese Hosts für OTA-Updates und Konfiguration nutzt.
Mehr zu Workspaces steht in der Dokumentation zu Workspaces.
Wir legen jetzt einen Block an, der:
apt upgrade durchführtVerzeichnisstruktur (vereinfacht):
acme-corp-automation/
workspace.poly
inventory.yml
blocks/
registry.acme-corp.com/acme/iot/edge-ota/
block.poly
ota-update.yml
deploy-config.yml
sensor-config.yml.j2(Nach polycrate pull registry.acme-corp.com/acme/iot/edge-ota:0.1.0 liegt der Block unter diesem Pfad.)
# blocks/registry.acme-corp.com/acme/iot/edge-ota/block.poly
name: registry.acme-corp.com/acme/iot/edge-ota
version: 0.1.0
kind: generic
config:
hosts_group: edge
service_name: edge-agent
serial: 10
config_path: /etc/edge-agent/config.yml
logging_level: INFO
actions:
- name: ota-update
description: Führe apt-Updates auf allen Edge-Nodes aus
playbook: ota-update.yml
- name: deploy-config
description: Verteile Konfiguration für Sensoren und Logging
playbook: deploy-config.ymlWichtig:
config definiert alle veränderbaren Parameter deines Blocks – ideal für unterschiedliche Flotten (z. B. andere Services, andere Pfade).actions sind benannte Einsprungpunkte. Deine Kolleginnen und Kollegen führen später einfach polycrate run edge-ota ota-update aus, ohne Ansible-CLI-Details kennen zu müssen.Mehr zu Blöcken findest du unter Blöcke und Actions.
Das dazugehörige Ansible-Playbook ota-update.yml liegt im gleichen Block-Verzeichnis:
# blocks/registry.acme-corp.com/acme/iot/edge-ota/ota-update.yml
- name: OTA-Updates für Edge-Nodes
hosts: "{{ block.config.hosts_group }}"
serial: "{{ block.config.serial }}"
become: true
gather_facts: false
tasks:
- name: Paketindex aktualisieren
ansible.builtin.apt:
update_cache: true
cache_valid_time: 3600
- name: Systempakete aktualisieren
ansible.builtin.apt:
upgrade: safe
notify: Edge-Service neu starten
handlers:
- name: Edge-Service neu starten
ansible.builtin.service:
name: "{{ block.config.service_name }}"
state: restartedWesentliche Punkte:
hosts: "{{ block.config.hosts_group }}"edge aus deinem inventory.yml. Du kannst sie im Block bei Bedarf umkonfigurieren.serial: "{{ block.config.serial }}"apt-Tasks sind idempotent: Wenn ein Gerät bereits aktuell ist, macht Ansible nichts weiter.notify-Handler).Mit „plain“ Ansible müsstest du:
ansible-playbook-CLI richtig aufrufen (-i inventory.yml ota-update.yml)Mit Polycrate reicht:
polycrate run edge-ota ota-updateDer Befehl:
inventory.ymlKeine lokale Ansible-Installation, keine Python-Konflikte, kein „funktioniert nur auf meinem Laptop“.
Updates sind nur die halbe Miete. Genauso wichtig ist zentrale Konfiguration:
DEBUG vs. INFO)Mit Polycrate steuerst du das über denselben Block – eine zweite Action verteilt eine Konfigurationsdatei.
# blocks/registry.acme-corp.com/acme/iot/edge-ota/deploy-config.yml
- name: Konfiguration für Edge-Nodes verteilen
hosts: "{{ block.config.hosts_group }}"
become: true
gather_facts: false
tasks:
- name: Konfigurationsverzeichnis anlegen
ansible.builtin.file:
path: "{{ block.config.config_path | dirname }}"
state: directory
owner: root
group: root
mode: "0755"
- name: Konfigurationsdatei aus Template bereitstellen
ansible.builtin.template:
src: sensor-config.yml.j2
dest: "{{ block.config.config_path }}"
owner: root
group: root
mode: "0644"
notify: Edge-Service neu starten
handlers:
- name: Edge-Service neu starten
ansible.builtin.service:
name: "{{ block.config.service_name }}"
state: restarted# blocks/registry.acme-corp.com/acme/iot/edge-ota/sensor-config.yml.j2
sensors:
sampling_interval_ms: 1000
logging:
level: "{{ block.config.logging_level }}"
destination: syslog
edge:
node_name: "{{ inventory_hostname }}"Hier siehst du Jinja2-Templates in Aktion:
{{ block.config.logging_level }}block.config in deiner block.poly.INFO auf DEBUG, wird die neue Einstellung auf alle Geräte ausgerollt.{{ inventory_hostname }}pi-01.acme-corp.com etc.).Die Ausführung ist wieder einfach:
polycrate run edge-ota deploy-configMit zwei Actions in einem Block hast du jetzt:
Alles ist versioniert, gut strukturiert und kann mit deinem Team geteilt werden – das ist der „Sharable Automation“-Gedanke von Polycrate.
Damit Polycrate weiß, welchen Block es in diesem Workspace verwenden soll, trägst du ihn in der workspace.poly ein:
# workspace.poly
name: acme-corp-automation
organization: acme
blocks:
- name: edge-ota
from: registry.acme-corp.com/acme/iot/edge-ota:0.1.0
config:
hosts_group: edge
service_name: edge-agent
serial: 10
config_path: /etc/edge-agent/config.yml
logging_level: INFOErläuterungen:
from: registry.acme-corp.com/acme/iot/edge-ota:0.1.0polycrate pull … liegt er unter blocks/registry.acme-corp.com/acme/iot/edge-ota/.config:block.poly. So kannst du z. B. für eine andere Halle einen zweiten Blockeintrag mit anderem Service-Namen anlegen.Eigene Blöcke kannst du in dieselbe Registry pushen und mit anderen Teams teilen – oder über den PolyHub zugänglich machen. Polycrate unterstützt dich dabei, siehe Registry-Dokumentation und PolyHub-Dokumentation.
Gerade in OT-Umgebungen liegen im Workspace oft sensible Daten:
Polycrate bringt eine eingebaute Workspace-Verschlüsselung mit age mit. Du musst keinen externen Secret-Store wie HashiCorp Vault betreiben, kannst ihn aber ergänzend nutzen, wenn du möchtest.
Typischer Ablauf:
Du legst geheime Dateien unter artifacts/secrets/ ab, z. B.:
artifacts/secrets/
id_ed25519
id_ed25519.pubDu verschlüsselst den Workspace:
polycrate workspace encryptVor der Arbeit entschlüsselst du ihn wieder:
polycrate workspace decryptPolycrate integriert diese Secrets automatisch, sodass du z. B. in Playbooks über workspace.secrets darauf zugreifen kannst, ohne Pfade hart zu codieren.
Details dazu findest du in der Dokumentation zur Workspace-Verschlüsselung und zur SSH-Integration.
Damit schlägst du die Brücke zwischen IoT-Praxis und Compliance-Anforderungen (z. B. interne Richtlinien, ISO 27001 oder branchenspezifische Vorgaben).
Um den Unterschied klarzumachen, schauen wir auf das, was du mit „plain“ Ansible tun müsstest:
ansible.cfg, inventory.yml, Playbooks und Secrets manuell koordinierenMit Polycrate:
polycrate run edge-ota ota-update oder polycrate run edge-ota deploy-config ausführenDer Rest passiert im Container – inklusive Ansible, Python und zusätzlicher Tools. Du bekommst:
Best Practices zur Strukturierung von Blöcken und Workspaces findest du in den Best Practices.
Nein. Ansible arbeitet agentlos. Du brauchst auf den Geräten:
pi mit sudo)Polycrate ändert daran nichts – es kümmert sich nur darum, dass Ansible bei dir sauber läuft. Auf den Edge-Nodes selbst musst du nichts Zusätzliches installieren.
Ansible meldet den Host als „unreachable“, bricht aber nicht dein gesamtes Rollout ab – besonders in Kombination mit serial.
Mit serial: 10 werden z. B. 10 Hosts auf einmal behandelt. Fällt einer davon aus, laufen die anderen 9 weiter. Der Host, der nicht erreichbar war, bleibt im Report sichtbar und kann später erneut angesteuert werden.
Weil die Playbooks idempotent sind, kannst du denselben Polycrate-Befehl einfach noch einmal ausführen, wenn die Netzwerkverbindung wieder steht. Ansible aktualisiert dann nur, was noch fehlt.
Ja. Typische Einsatzszenarien sind:
Weil Polycrate containerbasiert arbeitet, bekommst du überall die gleiche Umgebung. Du kannst schrittweise anfangen – z. B. nur mit einem OTA-Block – und später weitere Blöcke (Monitoring, Security, Backups) ergänzen.
Weitere Fragen? Siehe unsere FAQ
In diesem Beitrag hast du gesehen, wie du aus einer unübersichtlichen Sammlung von Edge-Nodes eine steuerbare Flotte machst:
Für viele IoT- und OT-Teams ist genau dieser Schritt entscheidend:
Weg von „jemand loggt sich ein und macht das schon irgendwie“ – hin zu nachvollziehbaren, versionierten und wiederholbaren Abläufen, die auch in einem Jahr noch funktionieren und prüfbar sind.
Bei ayedo unterstützen wir dich genau dabei:
Wenn du deine eigene Edge-Flotte strukturiert und sicher automatisieren möchtest, starten wir am besten gemeinsam mit einem fokussierten Workshop – Übersicht und Anmeldung: Workshops.
TL;DR Die Polycrate API macht aus einzelnen Workspaces eine Team-Plattform: alle Workspaces, Action …
TL;DR Polycrate protokolliert nicht nur Action Runs (Ansible-Playbooks), sondern auch SSH-Sessions, …
TL;DR Ein sauber benannter, klar strukturierter Polycrate-Workspace ist die halbe Miete: ein …