Polycrate API 0.11.27 released: Pod Status, DataSource & SLO Dashboard
Polycrate API 0.11.27 is a major feature release focusing on K8sApp pod status tracking, DataSource …
polycrate run execution as an “Action Run” – including block, action, exit code, timestamp, duration, CLI version, hostname, and OS user.~/.polycrate/polycrate.yml, the Polycrate CLI sends these Action Runs to the Polycrate API – without additional logging or audit tooling.“Who restarted the production database on Friday evening?”
“When did version 1.4.3 actually reach production?”
“What changes were made before the incident last night?”
These questions are familiar not only to DevOps teams but also to:
They must regularly answer these questions – often under time pressure, frequently to auditors, data protection officers, or management.
With plain Ansible, it’s possible but rarely convenient:
Polycrate takes a different approach: Every polycrate run execution is automatically an “Action Run” that, if configured, is reported to the Polycrate API and visible there (web UI / API). No extra setup, no own logging backend.
At the same time, what makes Polycrate strong remains unchanged:
In this post, we take a detailed look at Action Runs – from configuration to logged fields to remote re-triggering.
An Action Run is the technical record of a specific execution of:
polycrate run BLOCK ACTIONWhenever you start an action – whether from your laptop, a CI runner, or a makeshift VM – the Polycrate CLI internally creates an Action Run object. This includes, among other things:
Optionally, the CLI sends this object to the Polycrate API, which stores it and exposes it in the web UI and via the API.
Important:
This capture is completely independent of your Ansible playbook. Whether you’re patching Linux servers, managing Windows services, or deploying a Kubernetes cluster – the Action Run describes the execution of the Polycrate action, not the technical domain.
This automatically creates an auditable record of all infrastructure changes without needing to implement logging in each playbook individually.
~/.polycrate/polycrate.ymlTo ensure Action Runs reach the Polycrate API, configure the CLI once per user in ~/.polycrate/polycrate.yml.
A typical setup looks like this:
# ~/.polycrate/polycrate.yml
api:
url: "https://api.polycrate.io" # or your self-hosted endpoint
api_key: "pc_live_XXXXXXXXXXXXXXXX" # your personal or robotic API key
submit_action_runs: true # send Action Runs to the APIA few points about this:
api.url points to the Polycrate API instance (SaaS or self-hosted).api.api_key is your authentication token. Treat it like a password.api.submit_action_runs: true enables sending Action Runs. Without this switch, everything still executes locally, but nothing is sent to the API.cli.telemetry setting; ayedo does not collect anonymous usage telemetry from the CLI.For compliance officers, it’s important:
The API key is personal or clearly assigned to a technical user. This makes it possible to trace back who started the automation in the audit log – regardless of which device was used.
Action Runs are deliberately lean but informative. Typical fields include:
from:), including exact block versionrestart, deploy, patch)started_at)finished_at)polycrate 0.18.3)laptop-max, gitlab-runner-42)max, gitlab-runner)From a compliance perspective, especially considering the GDPR, which has been in force since May 25, 2018, two aspects are important:
What is not sent:
This keeps the audit trail informative without transporting more personal or sensitive data than necessary.
From a compliance perspective, it’s crucial that:
Polycrate addresses both:
Workspace Encryption with age
Your sensitive files (API keys, SSH keys, Kubeconfigs) are stored under artifacts/secrets/ in the workspace and encrypted via polycrate workspace encrypt. Details can be found in the documentation on Workspace Encryption.
Containerized Execution
Ansible and the entire toolchain run in a defined container. No “Python 2.7 vs. 3.x” chaos, no wild pip install sprees per laptop, fewer attack vectors. More on this in the Ansible Integration.
For you, this means:
The audit trail over Action Runs comes on top, without needing to invent additional security mechanisms. Polycrate provides the foundation – including clear best practices, see Best Practices.
Once submit_action_runs is activated, your Action Runs land in the Polycrate API (orchestration and management layer for workspaces, runs, and permissions). In the API UI or via the HTTP API you can answer questions per workspace and organization, for example. PolyHub remains the marketplace for blocks – separate from Action Runs and audit data.
db-maintenance.restart in workspace acme-prod on Friday at 21:17?deploy runs were there last month?cargo.ayedo.cloud/ayedo/infra/nginx:0.3.1 last deployed to production?The API aggregates Action Runs across:
This allows not only platform teams but also compliance and security officers to see at a glance which automations took place where – without relying on proprietary CI logs, chat histories, or manual change Excel lists.
For structured teams, Action Runs can also be a central element of a Platform Engineering approach: The platform provides standard blocks, and the Action Runs history shows how those building blocks are actually used in practice.
Another advantage of the Polycrate API: You can remotely re-trigger an existing Action Run.
Typical use cases:
Technically, the API uses:
polycrate run BLOCK ACTION again on a connected runner (e.g. CI or MCP).Details on API usage and the corresponding endpoints can be found in the Polycrate API documentation.
Important:
Re-triggering does not mindlessly duplicate every change. Your Ansible playbooks remain idempotent (strength of Ansible) and check themselves whether a change is necessary. Polycrate only ensures that you can initiate the identical automation again – traceable and auditable.
A typical compliance gut feeling: “If we make logging mandatory, the logging server might bring us down.”
Polycrate explicitly solves this dilemma:
This allows you to activate Action Runs even in sensitive environments where temporary API unavailability must not lead to a halt of maintenance windows or incident runbooks.
Let’s look at a concrete example: A block that restarts the production database.
# workspace.poly
name: acme-corp-automation
organization: acme
blocks:
- name: db-maintenance
from: db-maintenance
config:
env: production
db_host: db-prod01.acme-corp.com
db_service_name: "postgresql"The workspace follows the usual rules, see Workspaces. The block configuration holds only the necessary production-specific values.
A simple inventory for Ansible might look like this:
# inventory.yml (workspace root)
all:
hosts:
db-prod01.acme-corp.com:
ansible_user: "ubuntu"
ansible_ssh_private_key_file: "{{ workspace.secrets['prod-db.key'] }}"The inventory lives in the workspace root; Polycrate sets ANSIBLE_INVENTORY automatically. Secrets are protected via workspace encryption.
# blocks/db-maintenance/block.poly
name: db-maintenance
version: 0.1.0
kind: generic
config:
env: "{{ block.config.env }}"
db_host: "{{ block.config.db_host }}"
db_service_name: "{{ block.config.db_service_name }}"
actions:
- name: restart
description: "Restart the database service on the target host"
playbook: restart-db.ymlValues come from the block instance in workspace.poly and are available in templates and playbooks as block.config; cross-block access via workspace.blocks.* is not the intended pattern. Details: Inheritance.
The restart action points to an Ansible playbook in the same directory.
# blocks/db-maintenance/restart-db.yml
- name: Restart database service
hosts: all
become: true
gather_facts: false
vars:
db_service_name: "{{ block.config.db_service_name }}"
tasks:
- name: Ensure DB host is reachable
ansible.builtin.ping:
- name: Restart database service
ansible.builtin.service:
name: "{{ db_service_name }}"
state: restarted
- name: Check database service status
ansible.builtin.service_facts:
- name: Ensure service is running
ansible.builtin.assert:
that:
- ansible_facts.services[db_service_name].state == "running"
fail_msg: "Database service {{ db_service_name }} is not running"
success_msg: "Database service {{ db_service_name }} is running"Important:
hosts: all here means “all hosts from inventory.yml” – Polycrate runs the playbook in the container, but targets are reached via SSH.
The actual run is trivial:
polycrate run db-maintenance restartWhat happens?
acme-corp-automationdb-maintenancerestartsubmit_action_runs: true is set, the CLI sends the Action Run to the API.The answer to the opening question:
“Who restarted the production database on Friday evening?”
You will find it in the Polycrate API by:
acme-corp-automation,db-maintenance and action restart,With plain Ansible you would need to:
--verbose and kept the log.With Polycrate, this traceability is part of the normal workflow.
Action Runs help not only with “who did what when?” but also with questions like:
0.3.1 of our web server block last deployed to production?”Because the block reference (from: including version) and the workspace appear in Action Runs, you can for example:
cargo.ayedo.cloud/ayedo/infra/nginx:0.3.1 in workspace acme-prod.Together with PolyHub and registry integration, you get a full chain:
:latest).polycrate run with that block creates Action Runs – across all workspaces.The result is a change log for your infrastructure you can inspect anytime – without introducing a separate “deployment tracking” tool.
Ansible itself is an excellent automation tool – even without Polycrate. But as soon as you take auditability and team collaboration seriously, many teams hit recurring issues:
Polycrate addresses this:
Instead of replacing Ansible, Polycrate makes it a sustainable foundation for your automation – technically, organizationally, and compliance-ready.
Yes, potentially – especially via the personal API key and OS username. That is usually exactly what you want for traceable change management.
What matters:
Legal classification depends on your organization. Technically, Polycrate offers a clearly bounded dataset you can integrate into your privacy concept.
No. The Polycrate API can be self-hosted. You keep all Action Run data in your own infrastructure – often required in regulated industries and under strict GDPR interpretation since May 25, 2018.
The CLI configuration (api.url, api.api_key, api.submit_action_runs) stays the same; only the endpoint changes.
In practice, hardly:
If you have extremely latency-sensitive scenarios (e.g. very short IoT/edge cycles), you can disable submit_action_runs for those users or workspaces or use dedicated runners with good API connectivity.
More questions? See our FAQ.
Action Runs and the Polycrate API close a gap many teams could only address with heavy extra effort: a continuous, central audit trail for infrastructure automation – without your own logging stacks or proprietary lock-in.
In this post you have seen:
~/.polycrate/polycrate.yml,polycrate run is captured as an Action Run,As ayedo, we combine these technical building blocks with proven Platform Engineering concepts: from introducing a block-based automation platform to integrating with existing governance to training for admins and compliance teams.
If you want to see how Action Runs fit your existing automation – on Linux, Windows, IoT/edge, or hybrid environments – good next steps are:
Polycrate API 0.11.27 is a major feature release focusing on K8sApp pod status tracking, DataSource …
With Polycrate CLI 0.29.15, we have resolved the root cause of a persistent bug where endpoints with …
Polycrate API 0.11.23 introduces crucial fixes for API key authentication and enhances contact …