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.
polycrate run ausführbar – ohne lokale Ansible-Installation.Viele Windows-Admins kennen das Dilemma: Microsoft Endpoint Configuration Manager (früher SCCM) ist mächtig, aber:
Gleichzeitig ist der Bedarf klar:
An dieser Stelle sind Chocolatey, Ansible und Polycrate eine spannende Kombination: Du erreichst viele der Vorteile von SCCM (standardisiert, wiederholbar, auditierbar), ohne dessen Kosten und Komplexität.
Chocolatey ist – vereinfacht gesagt – apt oder yum für Windows:
choco install, choco upgrade, choco uninstall).Für Admins bedeutet das:
choco install 7zip --version 22.1.0.Wichtig: In produktiven Umgebungen setzt du meist ein internes Chocolatey-Repository ein. Das Prinzip ändert sich aber nicht – nur die URL der Quelle.
Ansible bringt mit win_chocolatey ein eigenes Modul mit, das genau diese Chocolatey-Funktionalität kapselt.
Ein minimales Beispiel-Playbook (ohne Polycrate, nur zur Einordnung):
- name: Windows Baseline mit Chocolatey
hosts: windows_office
gather_facts: false
tasks:
- name: Sicherstellen, dass Chocolatey installiert ist
ansible.windows.win_chocolatey:
name: chocolatey
state: present
- name: 7zip installieren
ansible.windows.win_chocolatey:
name: 7zip
version: '22.1.0'
state: present
- name: Google Chrome installieren
ansible.windows.win_chocolatey:
name: googlechrome
version: '118.0.5993.90'
state: presentMit plain Ansible bedeutet das für dich:
ansible.cfg, Collections) selbst organisieren und dokumentieren.Genau hier setzt Polycrate an.
Polycrate löst nicht Ansible ab – es gibt Ansible eine saubere, wiederverwendbare Verpackung.
Die relevanten Vorteile in diesem Szenario:
Dependency-Problem gelöst
Dockerfile.poly oder ein Setup-Skript kommen zusätzliche Tools (z. B. choco, pwsh, kubectl) konsistent dazu.Mehr dazu in der Ansible-Integration von Polycrate.
Guardrails und Sharable Automation
block.poly).registry.acme-corp.com/acme/windows/windows-software-baseline:0.1.0 ist ein „Produkt“, das dein Team nutzen, testen und weitergeben kann – intern oder über den PolyHub.Best Practices dazu findest du unter Polycrate Best Practices.
Sichere Konfiguration
polycrate workspace encrypt.Für dich als Windows-Admin heißt das: Du konzentrierst dich auf die Playbooks und die Software-Baselines – Polycrate kümmert sich um Toolchain, Struktur und Wiederverwendung.
Wir bauen ein Beispiel für die fiktive acme-corp.com:
office-workstationdeveloper-workstationserverEin minimales inventory.yml im Workspace-Root könnte so aussehen:
all:
hosts:
win-office-01.acme-corp.com: {}
win-office-10.acme-corp.com: {}
win-dev-01.acme-corp.com: {}
win-srv-01.acme-corp.com: {}
children:
windows_office_test:
hosts:
win-office-01.acme-corp.com:
vars:
ansible_user: Administrator
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
windows_office_prod:
hosts:
win-office-10.acme-corp.com:
vars:
ansible_user: Administrator
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
windows_developer:
hosts:
win-dev-01.acme-corp.com:
vars:
ansible_user: Administrator
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
windows_servers:
hosts:
win-srv-01.acme-corp.com:
vars:
ansible_user: Administrator
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignoreKeine Passwörter im Inventory – ansible_password setzen Sie in den Playbooks aus secrets.poly / workspace.secrets.* (siehe Workspace-Verschlüsselung).
Polycrate setzt ANSIBLE_INVENTORY automatisch auf diese Datei. Du brauchst keine zusätzliche ansible.cfg.
Unser workspace.poly definiert, welche Blöcke es gibt:
name: acme-corp-automation
organization: acme
blocks:
- name: windows-office-baseline
from: registry.acme-corp.com/acme/windows/windows-software-baseline:0.1.0
config:
profile: office
target_group: windows_office_test
- name: windows-developer-baseline
from: registry.acme-corp.com/acme/windows/windows-software-baseline:0.1.0
config:
base_profile: office
profile: developer-extra
target_group: windows_developer
- name: windows-server-baseline
from: registry.acme-corp.com/acme/windows/windows-software-baseline:0.1.0
config:
profile: server
target_group: windows_servers
allow_reboot: falsefrom: enthält die vollständige OCI-Registry-Referenz inklusive Versions-Tag; die Registry registry.acme-corp.com ist ein Beispiel (kein Bezug zu einer konkreten Produkt-Registry).
Wichtig:
blocks/registry.acme-corp.com/acme/windows/windows-software-baseline/.profile, base_profile, etc.).Mehr zu generischer Vererbung in Polycrate findest du in der Doku zu Vererbung.
name als vollständige Registry-Referenz in block.polyJetzt definieren wir den Block selbst unter blocks/registry.acme-corp.com/acme/windows/windows-software-baseline/block.poly (Verzeichnisbaum = Registry-Pfad). In block.poly muss name die vollständige Registry-URL sein – dieselbe Zeichenkette wie in from: im workspace.poly, aber ohne Versions-Tag (also ohne :0.1.0 am Ende). Kurz: from: = name + : + Tag. Das ist nicht derselbe Bezeichner wie die Block-Instanzen im workspace.poly (windows-office-baseline, windows-developer-baseline, …).
# name = from: ohne Tag (vollständiger Registry-Pfad)
name: "registry.acme-corp.com/acme/windows/windows-software-baseline"
version: 0.1.0
kind: generic
config:
chocolatey_source: "https://community.chocolatey.org/api/v2/"
# Zentrale Definition der Software-Profile
software_profiles:
office:
- name: 7zip
version: "22.1.0"
- name: googlechrome
version: "118.0.5993.90"
- name: sumatrapdf
version: "3.4.6"
developer-extra:
- name: vscode
version: "1.84.0"
- name: git
version: "2.44.0"
- name: postman
version: "10.21.0"
server:
- name: sysinternals
version: "2023.9.23"
- name: notepadplusplus
version: "8.6.2"
actions:
- name: baseline
playbook: baseline.ymlEin paar Punkte dazu:
polycrate run windows-office-baseline … und ähnliche Befehle nutzen den Instanznamen aus workspace.poly, nicht die vollständige Registry-Referenz in name (block.poly).latest wäre bequemer, aber du verlierst dabei jede Reproduzierbarkeit. Dein Ziel: „Eine Workstation im April 2026 sieht genauso aus wie eine im Juni – solange du nicht bewusst die Block-Version erhöhst.“office, developer-extra und server sind zentral definiert. Workspace-spezifisch entscheidest du nur, welches Profil genutzt wird.Wenn dieser Block später stabil läuft, kannst du ihn in eure OCI-Registry pushen – beispielhaft (fiktive Registry, gleiches Pfadschema wie oben):
registry.acme-corp.com/acme/windows/windows-software-baseline:0.1.0Damit wird deine Software-Baseline zur sharable automation für andere Teams.
Jetzt fehlt noch das Playbook blocks/registry.acme-corp.com/acme/windows/windows-software-baseline/baseline.yml, das Chocolatey nutzt und Profile kombiniert:
- name: Windows Software-Baseline mit Chocolatey
hosts: "{{ block.config.target_group }}"
gather_facts: false
vars:
choco_source: "{{ block.config.chocolatey_source }}"
base_profile_name: "{{ block.config.base_profile | default(None) }}"
profile_name: "{{ block.config.profile }}"
tasks:
- name: Sicherstellen, dass Chocolatey installiert ist
ansible.windows.win_chocolatey:
name: chocolatey
state: present
- name: Basispakete laden (z. B. office)
ansible.builtin.set_fact:
base_packages: "{{ block.config.software_profiles[base_profile_name] | default([]) }}"
- name: Profilpakete laden (z. B. developer-extra oder server)
ansible.builtin.set_fact:
profile_packages: "{{ block.config.software_profiles[profile_name] }}"
- name: Gesamtliste der Pakete zusammenführen
ansible.builtin.set_fact:
final_packages: "{{ base_packages + profile_packages }}"
- name: Alle Pakete in gewünschter Version installieren/aktualisieren
ansible.windows.win_chocolatey:
name: "{{ item.name }}"
version: "{{ item.version }}"
state: present
source: "{{ choco_source }}"
loop: "{{ final_packages }}"
- name: Optional: Neustart nach Installation zulassen
ansible.windows.win_reboot:
msg: "Reboot nach Baseline-Installation durch Polycrate/Ansible"
pre_reboot_delay: 60
when: block.config.allow_reboot | default(true)Wichtige Details:
hosts: "{{ block.config.target_group }}" sorgt dafür, dass du je Block-Instanz steuern kannst, welche Host-Gruppe angesprochen wird – ideal für Rolling-Rollouts.base_profile und profile implementieren unsere Konfigurations-Vererbung:
profile: office ohne base_profile.base_profile: office und profile: developer-extra – das entspricht „Developer erbt von Office + extra Tools“.ansible.windows.win_chocolatey und ansible.windows.win_reboot stammen aus den Windows-Collections; Polycrate sorgt im Container für eine passende Ansible-Umgebung.Mit plain Ansible müsstest du alle Variablenquellen (z. B. group_vars, host_vars, extra_vars) und die CLI-Aufrufe sauber orchestrieren. Mit Polycrate werden diese Parameter Teil des Blocks und sind versioniert.
Der Rolling-Rollout ergibt sich jetzt fast von selbst, weil wir mit Inventar-Gruppen arbeiten:
Test-Gruppe definieren
Im oben gezeigten inventory.yml gibt es windows_office_test und windows_office_prod. In workspace.poly ist target_group der Office-Baseline zunächst auf windows_office_test gesetzt.
Baseline auf Test-Gruppe ausführen
polycrate run windows-office-baseline baselinePolycrate:
baseline.yml mit den in windows-office-baseline hinterlegten Parametern aus.Nach Tests: Zielgruppe auf Produktion umschalten
Du änderst in workspace.poly:
- name: windows-office-baseline
from: registry.acme-corp.com/acme/windows/windows-software-baseline:0.1.0
config:
profile: office
target_group: windows_office_prodWorkspace speichern, ins Git committen – damit ist dokumentiert, ab welcher Version der Workspace-Definition die Baseline auf Produktion ausgerollt wurde.
Produktion ausrollen
polycrate run windows-office-baseline baselineWenn du willst, kannst du diese Schritte später in einem Polycrate-Workflow bündeln. Für viele Teams ist es aber schon ein großer Gewinn, dass Test vs. Produktion klar über Inventory-Gruppen und Git-Historie nachvollziehbar sind.
Nein, technisch kannst du auch direkt das öffentliche Chocolatey-Repository verwenden, wie im Beispiel (https://community.chocolatey.org/api/v2/). In vielen Unternehmen spricht aber Folgendes für ein internes Repository:
Im Polycrate-Block ist die Quelle nur eine Konfigurationsvariable (chocolatey_source), du kannst also problemlos von extern auf intern umschalten – ohne das Playbook umzuschreiben.
Zwei Punkte sind besonders wichtig:
registry.acme-corp.com/acme/windows/windows-software-baseline:0.1.0) mit welcher Workspace-Konfiguration auf welche Systeme ausgerollt wurde. Das unterstützt Nachvollziehbarkeit bei Audits.polycrate workspace encrypt verschlüsselt. Das erleichtert es, Anforderungen aus Standards wie ISO 27001 oder internen Richtlinien umzusetzen, ohne auf externe Secrets-Manager angewiesen zu sein.Mehr dazu findest du in der Dokumentation zur Workspace-Verschlüsselung.
Mit plain Ansible kannst du alles aus diesem Beitrag ebenfalls umsetzen. Der Unterschied liegt im Drumherum:
Polycrate bringt:
Kurz: Polycrate ist dann interessant, wenn du mehr als ein paar Ad-hoc-Playbooks hast und du Automatisierung als „Produkt“ im Team etablieren willst.
Weitere Fragen? Siehe unsere FAQ
Mit Chocolatey, Ansible und Polycrate hast du einen praktikablen Weg, Windows-Software-Deployment ohne SCCM-Infrastruktur zu betreiben:
win_chocolatey bleibt die Automatisierung idempotent und nachvollziehbar, während Polycrate dir die Container-Toolchain, Workspace-Struktur und Wiederverwendbarkeit abnimmt.target_group-Parameters und eines Git-Commits – nicht zur neuen SCCM-Infrastruktur.In unseren Projekten sehen wir immer wieder, dass Windows-Teams genau mit solchen Bausteinen anfangen und dann Schritt für Schritt weitere Themen integrieren: Patch-Management, lokale Admin-Gruppen, Browser-Hardening, bis hin zu kombinierten Workspaces für Linux-, Windows- und Edge-Umgebungen.
Wenn du diesen Ansatz in deiner Umgebung konkret durchspielen willst – von der ersten Workspace-Struktur bis zum getesteten Rollout in deine Testgruppe – begleiten wir dich gern in einem gemeinsamen Software-Deployment Workshop.
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 …