Skip to main content

#Labops - A declarative, YAML-based homelab manager

A declarative, YAML-based homelab manager. labops is a CLI tool designed to simplify, automate, and standardize the setup, configuration, and maintenance of your homelab infrastructure utilizing simple configuration files and powerful backend automation.

Features

Current Capabilities

  • Declarative YAML Configuration: Define your complete homelab environment comprehensively using simple YAML configuration files.
  • Host Management: Automated setup, initialization, and system updates for a variety of host operating systems (Alpine, Debian, RedHat) powered by integrated Ansible playbooks.
  • Proxmox LXC: Update Proxmox Linux Containers (LXC) natively (through Proxmox Root Host)
  • Target Selection: Update an arbitrary slice of the homelab — by node kind, OS, tag, or position in the tree — either ad-hoc or from a reusable named set in your config.

Roadmap & Future Scope

  • Docker Stack Management: Seamlessly deploy, spin up, and manage Docker Compose stacks across your nodes.
  • DNS Automation: Automated updating of internal DNS records.
  • Reverse Proxy Orchestration: Manage, update, and automate reverse proxy routes

How it Works

labops acts as a bridge between simple, human-readable YAML configurations and powerful Ansible Commands.

  1. Configuration parsing: It reads a declarative .yml inventory representing your homelab layout, target servers, credentials, and settings.
  2. Validation: It validates the YAML structure and data format to stop misconfigurations early.
  3. Execution: Based on the commands executed, it triggers internal Python routines or dispatches built-in Ansible playbooks targeting the defined hosts. This ensures consistent host setups, OS updates (Debian, RedHat, Alpine), and more without writing raw playbook files manually.

Installation

You can install labops easily via pip:

pipx install labops
#or
pip install labops

Since labops is a standalone CLI tool, using pipx is highly recommended to isolate its dependencies

Usage

Once installed, the labops command becomes available. Point it to your YAML configuration file (e.g., test-samples/homelab-complete.yml):

# View all available CLI commands
labops --help

# Example: Update every host
labops host update --all

Custom updates

labops update acts on a selection rather than a single target. A selection is four optional filters — kind, OS, tag and position in the tree — combined as AND across filters and OR within one, and it covers both the matching nodes and the Docker stacks running on them.

labops update --kind lxc --os debian     # every Debian container
labops update --under cprox              # cprox and everything below it
labops update --tag prod --only stacks   # only the stacks on prod-tagged nodes
labops update --all --list               # preview everything, run nothing

--list prints the resolved targets and exits, and every run shows that same preview before it asks to proceed (--yes skips the prompt, --dry-run runs Ansible in check mode).

Tag your nodes to make them selectable. Tags are local — a container is only prod if it says so itself, so use --under to sweep a whole subtree:

hosts:
  cprox:
    tags: [prod, proxmox]

Selections you run often belong in the config as named target sets, invoked by name (labops update weekly):

settings:
  targets:
    weekly:
      kind: [vm, lxc]
      os: [debian]

Development & Building

This project utilizes Dev Containers to provide a seamless, consistent development environment, and uses uv for lightning-fast Python package management.

1. Development Environment

To start developing locally without installing system-level dependencies:

  1. Open the project in VS Code (or any editor supporting Dev Containers).
  2. When prompted, click Reopen in Container (this builds your development environment with Python, Ansible, and other necessary CLI tools pre-installed).
  3. Once the container is running and your terminal is open, sync the dependencies and activate the virtual environment:
# Create the virtual environment and install dependencies + the labops CLI
uv sync

# Activate the virtual environment
source .venv/bin/activate

# Now you can run the CLI
labops --help

2. Building the Package

The package does not have to be manually updated to PyPi, as it utalizes github actions to build and publish it.

To build the standard Python distribution files locally (Wheel .whl and Source Distribution .tar.gz) for testing:

uv build

This will generate the artifacts inside the dist/ directory.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

labops-0.9.0.tar.gz (231.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

labops-0.9.0-py3-none-any.whl (117.5 kB view details)

Uploaded Python 3

File details

Details for the file labops-0.9.0.tar.gz.

File metadata

  • Download URL: labops-0.9.0.tar.gz
  • Upload date:
  • Size: 231.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for labops-0.9.0.tar.gz
Algorithm Hash digest
SHA256 4294edba373b09ee26dcd25a841cc54ff134dd4673efa56c195ee7e0a2c958eb
MD5 4eab4325986974ebe056db740b18fe64
BLAKE2b-256 0bbd0a7fc878e4b070e51182359beb7046ec9f62a9594f5f48ecdc5237f9b5a6

See more details on using hashes here.

File details

Details for the file labops-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: labops-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 117.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for labops-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3b229def76ebe6346c50efcf430baa64fedcd8ea3d432e750d3edafc8af3995c
MD5 1044c1da1af9aaf77eba82e7f819a522
BLAKE2b-256 8f496a0143ee5769026a8e330426ceba842bfc090c02c36818819278ef29a34c

See more details on using hashes here.

Release history Release notifications | RSS feed

0.11.0

2 files

0.10.0

2 files

0.9.1

2 files

This release

0.9.0 This release

2 files

0.8.0

2 files

0.7.0

2 files

0.6.1

2 files

0.6.0

2 files

0.5.1

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page