dynamic-infra-tooling/README.md

2.2 KiB

LoopAware Infrastructure CLI

A professional Python-based CLI for programmatically managing the LoopAware flat network (10.32.0.0/16).

Features

  • DNS/DHCP: Manage dnsmasq reservations and records on la-dnsmasq-01.
  • Ingress: Dynamic HAProxy routing for subdomains.
  • Router: Manage OpenWrt firewall DNAT rules (TCP/UDP).
  • Proxmox: Provision and manage LXC containers across physical nodes (vmh-07 to vmh-13).
  • Samba: Automated User and Group management for Active Directory.

Installation

cd external/dynamic-infra-tooling
pip install -e .

Configuration

The CLI requires a config.yaml file. A template is provided in config.yaml.example.

cp config.yaml.example config.yaml
# Update the nodes, IPs, and SSH key paths

Environment Variables

  • ROUTER_PASS: Required for router operations (if SSH keys are not deployed).
  • INFRA_CONFIG: Optional path to a custom config file.

Usage Guide

1. Identity & Access (Samba)

# List all users
infra samba list-users

# Create a new user
infra samba add-user "jdoe" "SecurePass123!"

# Grant XMPP access
infra samba add-to-group "xmpp-users" "jdoe"

2. Compute (Proxmox)

# List containers on a specific node
infra proxmox list-lxcs --node la-vmh-12

# Create a new container
infra proxmox create-lxc 12150 local:vztmpl/debian-13-standard "new-app" "10.32.70.100/16" "10.32.0.1" --node la-vmh-12

3. Networking (DNS & DHCP)

# Register the new machine in DHCP
infra dns add-host "aa:bb:cc:dd:ee:ff" "10.32.70.100" "new-app"

# Add a custom DNS record
infra dns add-dns "api.loopaware.com" "10.32.70.100"

4. Cloudflare DDNS

The list of domains to update is managed dynamically on the server.

# Add a domain to the update list
infra cloudflare add-ddns "my-new-domain.com"

# List all domains being updated
infra cloudflare list-ddns

# Run the update (usually via cron)
infra cloudflare update-ddns

Advanced Workflows for AI Agents

For detailed automation workflows, see Workflow Documentation.

Development and Testing

Run the integration test suite:

export ROUTER_PASS="..."
pytest tests/test_cli.py -s