initial commit: dynamic infra tooling cli
This commit is contained in:
commit
db843ceec8
9 changed files with 339 additions and 0 deletions
82
infra_cli/main.py
Normal file
82
infra_cli/main.py
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue