dynamic-infra-tooling/infra_cli/main.py
2026-02-05 11:29:34 +01:00

82 lines
1.9 KiB
Python

import click
from .config import Config
from .dns import DNSManager
from .ingress import IngressManager
from .router import RouterManager
import sys
@click.group()
@click.option('--config', help='Path to config file')
@click.pass_context
def cli(ctx, config):
"""LoopAware Infrastructure Management CLI"""
try:
ctx.obj = Config(config)
except Exception as e:
click.echo(f"Error: {e}", err=True)
sys.exit(1)
@cli.group()
def dns():
"""Manage DNS and DHCP"""
pass
@dns.command(name='add-host')
@click.argument('mac')
@click.argument('ip')
@click.argument('hostname')
@click.pass_obj
def dns_add_host(config, mac, ip, hostname):
mgr = DNSManager(config)
mgr.add_host(mac, ip, hostname)
click.echo(f"Added host {hostname} ({ip})")
@dns.command(name='remove-host')
@click.argument('mac')
@click.pass_obj
def dns_remove_host(config, mac):
mgr = DNSManager(config)
mgr.remove_host(mac)
click.echo(f"Removed host {mac}")
@dns.command(name='list')
@click.pass_obj
def dns_list(config):
mgr = DNSManager(config)
data = mgr.list()
click.echo(data['hosts'])
click.echo(data['dns'])
@cli.group()
def ingress():
"""Manage HAProxy Ingress"""
pass
@ingress.command(name='add')
@click.argument('domain')
@click.argument('ip')
@click.argument('port', type=int)
@click.option('--https', is_flag=True, help='Target uses HTTPS')
@click.pass_obj
def ingress_add(config, domain, ip, port, https):
mgr = IngressManager(config)
mgr.add(domain, ip, port, https)
click.echo(f"Added ingress for {domain}")
@cli.group()
def router():
"""Manage Router Port Forwards"""
pass
@router.command(name='list')
@click.pass_obj
def router_list(config):
mgr = RouterManager(config)
for rule in mgr.list():
click.echo(f"[{rule['section']}] {rule['name']}: {rule['proto']} {rule['port']} -> {rule['dest']}")
def main():
cli(obj={})
if __name__ == "__main__":
main()