Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

ADR 26009: Adoption of Ansible for Idempotent Configuration Management

Title

Transitioning from procedural Bash-based server configuration to declarative, idempotent state management using Ansible.

Status

Proposed

Date

2026-01-17

Context

There is a server configuration system that consists of a complex tree of 69 bash scripts and 31 directories. While functional, thr “Scripts-as-Infrastructure” approach presents several architectural risks:

Decision

We will adopt Ansible as the primary engine for server configuration and SaaS deployment.

  1. Declarative Roles: The existing bash script system structure (e.g., forgejo_config, nextcloud_config) will be refactored into Ansible Roles following the standard roles/<role_name>/ structure.

  2. Native Podman Integration: We will utilize the containers.podman collection to manage Podman pods and containers, replacing manual podman play kube shell calls.

  3. Jinja2 Templating: The existing render_templates.py scripts will be deprecated in favor of Ansible’s native Jinja2 templating engine to maintain consistent environment parity.

  4. Agentless Execution: All configurations will be pushed from the local Fedora/Debian development environment over SSH, maintaining the “No vendor lock-in” and “runnable locally” requirements of our SVA audit.

Consequences

Positive

Negative

Alternatives

References

Participants

  1. Vadim Rudakov

  2. Senior DevOps Systems Architect (Gemini)