Skip to content

Modules

fscm includes specialized modules for common infrastructure tasks.

Available Modules

systemd

Create and manage systemd services, timers, and socket units. Includes helpers for Gunicorn, Docker Compose, and user services.

docker

Docker and container management utilities. Check container status, manage volumes, and detect compose commands.

wireguard

WireGuard VPN configuration. Generate server and peer configs, manage keys, and set up iptables rules.

pki

Certificate Authority and TLS certificate generation. Create CAs, issue certificates, and manage certificate chains.

dotfiles

Dotfiles management with symlinks. Install dotfiles from a repository with support for hostname-specific overrides.

Usage

Import modules as needed:

from fscm.modules import systemd
from fscm.modules import docker
from fscm.modules import wireguard
from fscm.modules import pki
from fscm.modules import dotfiles

Module Dependencies

Some modules require optional dependencies:

Module Dependency Install Command
wireguard jinja2 pip install jinja2
pki cryptography pip install "fscm[pki]"

Creating Custom Modules

You can create your own modules following the fscm patterns:

# mymodules/nginx.py
import fscm
from fscm import file, run, template
from fscm.modules import systemd

def setup_site(name: str, domain: str, root: str):
    """Set up an nginx site."""
    # Create site config
    config = template("nginx-site.j2", domain=domain, root=root)
    file(f"/etc/nginx/sites-available/{name}", config)

    # Enable site
    run(f"ln -sf /etc/nginx/sites-available/{name} /etc/nginx/sites-enabled/")

    # Test and reload
    run("nginx -t")
    run("systemctl reload nginx", sudo=True)

    return fscm.CHANGELIST

Use your module:

from mymodules import nginx

nginx.setup_site("myapp", "example.com", "/var/www/myapp")