quad-ops

quad-ops quad-ops #

GitOps for Quadlet #

GitHub License Docs Workflow Status Build Workflow Status CodeQL Actions Workflow Status GitHub Release codecov

A lightweight GitOps framework for podman containers managed by Quadlet

Quad-Ops is a tool that helps you manage container deployments using Podman and systemd in a GitOps workflow. It watches Git repositories for standard Docker Compose files and automatically converts them into unit files that systemd can use to run your containers.

What Makes Quad-Ops Different #

While Quad-Ops uses Docker Compose as its configuration format, there are some key differences from traditional Docker Compose deployments:

  1. GitOps-Based: Changes to containers are driven by Git repositories, not manual commands
  2. Systemd Integration: Containers are managed by systemd instead of a Docker daemon
  3. Podman Backend: Uses Podman’s daemonless container engine instead of Docker
  4. Automated Dependencies: Service relationships are automatically converted to systemd unit dependencies
  5. Intelligent Restarts: Only restarts services that have changed and their dependents

Key Features: #

  • Monitor multiple Git repositories for container configurations
  • Supports standard Docker Compose files (services, networks, volumes, secrets)
  • Works in both system-wide and user (rootless) modes
  • Automates deployment and management of container infrastructure

How Quad-Ops Works #

Quad-Ops bridges the gap between Docker Compose and systemd by converting familiar Docker Compose configurations into Podman Quadlet units:

graph LR
    A[Git Repository] --> B[Docker Compose Files]
    B --> C[Quad-Ops Conversion]
    C --> D[Podman Quadlet Units]
    D --> E[systemd Services]
    E --> F[Running Containers]

The Conversion Process #

  1. Git Synchronization - Monitors repositories for Docker Compose file changes
  2. File Processing - Reads docker-compose.yml files and associated environment files
  3. Unit Generation - Converts services, volumes, and networks to .container, .volume, and .network Quadlet units
  4. systemd Integration - Loads units into systemd for native service management
  5. Dependency Resolution - Maps depends_on relationships to systemd After/Requires directives

Why This Approach? #

  • Familiar Configuration - Use standard Docker Compose files you already know
  • systemd Benefits - Leverage systemd’s robust service management, logging, and dependency handling
  • GitOps Workflow - All changes tracked in Git with rollback capability
  • Podman Integration - Daemonless, rootless container execution with enhanced security

Docker Compose Feature Support #

Quad-Ops converts Docker Compose version 3.x+ configurations into systemd-managed containers through Podman Quadlet. The following matrix shows which Docker Compose features are supported and how they’re implemented.

Feature Support Matrix #

This matrix describes Docker Compose feature support for systemd-managed containers through Quad-Ops conversion:


✅ Native Quadlet Support - Features that map directly to Podman Quadlet directives for optimal systemd integration.

⚠️ PodmanArgs Implementation - Features implemented using Quadlet’s PodmanArgs directive, providing full functionality with some limitations.

❌ Unsupported - Docker-specific features incompatible with systemd container management.


CategoryFeatureSupport LevelImplementation Method
ContainersImage/Command✅ FullNative Quadlet directives
Ports✅ FullNative Quadlet directives
Volumes✅ FullNative Quadlet directives
Environment✅ FullNative Quadlet directives
Restart Policy✅ FullNative Quadlet directives
Dependencies✅ Fullsystemd After/Requires
ResourcesMemory Limits⚠️ PartialPodmanArgs implementation
CPU Limits⚠️ PartialPodmanArgs implementation
PIDs Limit⚠️ PartialPodmanArgs implementation
SecurityPrivileged Mode⚠️ PartialPodmanArgs implementation
Capabilities⚠️ PartialPodmanArgs implementation
SELinux Labels⚠️ PartialPodmanArgs implementation
NetworkingCustom Networks✅ FullNative Quadlet directives
Network Aliases✅ FullNative Quadlet directives
DNS Configuration⚠️ PartialPodmanArgs implementation
Health ChecksHealth Commands⚠️ PartialNative Quadlet directives
Health Dependencies❌ NoneNot supported in systemd
BuildDockerfile Builds✅ FullQuadlet Build units
Build Arguments✅ FullQuadlet Build units
Multi-stage Builds✅ FullQuadlet Build units

Compose Extensions #

Quad-Ops extends Docker Compose with Podman-specific capabilities:

  • Environment secrets mapping for secure credential handling
  • Volume extensions for advanced mount options
  • Build extensions for enhanced build configurations

See Docker Compose Support for complete configuration examples and Supported Features for detailed implementation information.