import click import requests from .cli_main import main, auth_header, base_url from ...schemas import HostCreateParams from ...util.validation import validate_fqdn @main.group("host") def host(): pass @host.command("list") def host_list(): click.echo("Listing known hosts...") try: response = requests.get(f"{base_url()}/host", headers=auth_header()) response.raise_for_status() for h in response.json(): click.echo(f" - {h}") except requests.exceptions.HTTPError as e: raise click.ClickException(f"Failed to list hosts:\n{e}") @host.command("create") @click.argument("fqdn") @click.argument("parent", default=None) def host_create(fqdn: str, parent: str | None): click.echo("Creating host...") try: params = HostCreateParams( parent=parent ) response = requests.post(f"{base_url()}/host/{fqdn}", json=params.model_dump(), headers=auth_header()) response.raise_for_status() except requests.exceptions.HTTPError as e: raise click.ClickException(f"Failed to create host:\n{e}") click.echo(f"Host '{fqdn}' created!") @host.command("delete") @click.argument("fqdn") def host_delete(fqdn: str): if not validate_fqdn(fqdn): click.echo("Invalid FQDN") return if click.confirm(f"Are you sure you want to delete '{fqdn}'?"): click.echo("Deleting host...") try: response = requests.delete(f'{base_url}/host/{fqdn}', headers=auth_header()) response.raise_for_status() except requests.exceptions.HTTPError as e: raise click.ClickException(f"Failed to delete host:\n{e}")