quad-ops

module
v0.31.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 3, 2026 License: MIT

README

Quad-Ops

Build Docs GitHub License GitHub Release codecov

GitOps for Quadlet

Quad-Ops is a lightweight GitOps framework for Podman containers managed by Quadlet. It watches Git repositories for standard Docker Compose files and automatically converts them into systemd unit files to run your containers.

For comprehensive documentation, visit https://trly.github.io/quad-ops/

Key Features

  • GitOps workflow - Monitor multiple Git repositories for container configurations
  • Standard Docker Compose - Full support for Docker Compose files (services, networks, volumes, secrets)
  • Quadlet integration - Generates native systemd Quadlet unit files
  • Flexible deployment - Works in both system-wide and user (rootless) modes
  • Validation - Check Compose files for compatibility before deployment

Compose Specification Support

Quad-Ops converts standard Docker Compose files to Podman Quadlet units. It supports all container runtime features that work with standalone Podman.

Fully Supported

Core container configuration:

  • image, build, command, entrypoint, working_dir, hostname

Environment and labels:

  • environment, env_file, labels, annotations

Networking:

  • networks (bridge, host, custom networks)
  • ports (host mode only)
  • dns, dns_search, dns_opt, extra_hosts
  • network_mode (bridge, host)

Storage:

  • volumes (bind mounts, named volumes)
  • secrets with file/content/environment sources

Resources:

  • memory, cpus, cpu_shares, cpuset
  • pids_limit, shm_size, sysctls, ulimits

Security:

  • cap_add, cap_drop, privileged, security_opt, read_only
  • group_add, pid mode, ipc mode (private, shareable)

Devices and hardware:

  • devices

Health and lifecycle:

  • healthcheck (test, interval, timeout, retries, start_period)
  • restart (maps to systemd restart policies)
  • stop_signal (SIGTERM, SIGKILL), stop_grace_period
  • depends_on with service_started condition (maps to systemd After/Requires)
  • tty, stdin_open, init, pull_policy
Partially Supported

Secrets and configs:

  • File sources (file: ./secret.txt)
  • Content sources (content: "secret data")
  • Environment sources (environment: SECRET_VAR)
  • NOT supported: Swarm driver (external: true with driver)

Resource constraints:

  • deploy.resources.limits (memory, cpus, pids)
  • deploy.resources.reservations (partial - depends on cgroups v2)

Dependency conditions:

  • depends_on with service_started maps to systemd After + Requires
  • NOT supported: service_healthy, service_completed_successfully conditions

Logging:

  • Supported: json-file, journald
  • NOT supported: Other logging drivers
Not Supported - Use Alternatives

Standard Compose fields:

  • user - Use systemd user mapping instead
  • tmpfs - Use named volumes, bind mounts, or x-quad-ops-mounts
  • volumes_from - Use named volumes or bind mounts
  • extends - Use YAML anchors or include directives
Explicitly Out of Scope - Swarm Orchestration

Quad-Ops is NOT a Swarm orchestrator. These features are rejected with validation errors:

  • deploy.mode: global - Multi-node replication
  • deploy.replicas > 1 - Multi-instance services
  • deploy.placement - Node placement constraints
  • deploy.update_config, deploy.rollback_config - Rolling updates
  • deploy.endpoint_mode (vip/dnsrr) - Swarm service discovery
  • ports.mode: ingress - Swarm load balancing (use mode: host)
  • configs/secrets with driver field - Swarm secret store

For these features, use:

  • Kubernetes - Cloud-native orchestration with full feature set
  • Nomad - Lightweight orchestrator for VMs and containers
  • Docker Swarm - If you need Swarm-specific features

Use quad-ops validate to check your Compose files for unsupported features.

Reference: Podman Quadlet Documentation

Getting Started with Development

# Clone the repository
git clone https://github.com/trly/quad-ops.git
cd quad-ops

# Install task runner (if not already installed)
# Linux: sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin

# Build, lint, test, and format (all-in-one)
task build

# Individual commands
task test          # Run all tests
task lint          # Run golangci-lint
task fmt           # Format code
go build -o quad-ops ./cmd/quad-ops  # Build binary only

Directories

Path Synopsis
cmd
quad-ops command
internal
compose
Package compose provides utilities for interacting with compose files.
Package compose provides utilities for interacting with compose files.
config
Package config provides application configuration structures and utilities.
Package config provides application configuration structures and utilities.
git
Package git provides git repository management functionality for quad-ops
Package git provides git repository management functionality for quad-ops
podman
Package podman wraps podman CLI operations for testability.
Package podman wraps podman CLI operations for testability.
state
Package state manages deployment state for quad-ops, tracking current and previous commit hashes per repository to enable rollback, and content hashes per unit for change detection.
Package state manages deployment state for quad-ops, tracking current and previous commit hashes per repository to enable rollback, and content hashes per unit for change detection.
systemd
Package systemd provides utilities for interacting with systemd units.
Package systemd provides utilities for interacting with systemd units.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL