added cli tool basics

This commit is contained in:
Linus Vogel 2026-02-01 21:00:13 +01:00
parent c867ef7cc0
commit 83f7cb390f
4 changed files with 84 additions and 0 deletions

View File

78
pillar_tool/ptcli.py Normal file
View File

@ -0,0 +1,78 @@
import base64
import click
import requests
from click import Context
from pillar_tool.util import config, load_config, Config
cfg: Config | None = None
base_url: str | None = None
auth_header: dict[str, str] | None = None
@click.group("command")
def main():
global cfg, base_url, auth_header
# load the configuration and store it
load_config()
cfg = config()
base_url = f"{cfg.ptcli.scheme}://{cfg.ptcli.host}:{cfg.ptcli.port}"
auth_header = { 'Authorization': f"Basic {base64.b64encode(f"{cfg.ptcli.user}:{cfg.ptcli.password}".encode('utf-8')).decode('ascii')}" }
# health check of the api
try:
response = requests.get(f"{base_url}/health")
response.raise_for_status()
except requests.exceptions.HTTPError as e:
raise click.ClickException(f"API seems to be unhealthy:\n{e}")
except requests.exceptions.ConnectionError as e:
raise click.ClickException("Unable to connect to PillarTool API")
@main.group("pillar")
def pillar():
pass
@main.group("host")
def host():
pass
@main.group("query")
def query():
pass
@pillar.command("get")
def pillar_get():
print("pillar_get")
@pillar.command("list")
def pillar_list():
print("pillar_list")
@host.command("list")
def host_list():
click.echo("Listing known hosts...")
try:
response = requests.get(f"{base_url}/hosts", headers=auth_header)
response.raise_for_status()
print(response.json())
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:
response = requests.post(f"{base_url}/host/{fqdn}", json={'parent': parent}, 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!")

0
pillar_tool/schemas.py Normal file
View File

View File

@ -5,11 +5,17 @@ description = "Add your description here"
requires-python = ">=3.13" requires-python = ">=3.13"
dependencies = [ dependencies = [
"alembic>=1.17.2", "alembic>=1.17.2",
"click>=8.3.1",
"fastapi>=0.126.0", "fastapi>=0.126.0",
"hypercorn>=0.18.0", "hypercorn>=0.18.0",
"jinja2>=3.1.6", "jinja2>=3.1.6",
"psycopg2>=2.9.11", "psycopg2>=2.9.11",
"pycryptodome>=3.23.0", "pycryptodome>=3.23.0",
"pydantic>=2.12.5", "pydantic>=2.12.5",
"requests>=2.32.5",
"sqlalchemy>=2.0.45", "sqlalchemy>=2.0.45",
] ]
[project.scripts]
ptcli = "pillar_tool.ptcli:main"