import json import click import requests from .cli_main import main, auth_header, base_url @main.group("pillar") def pillar(): pass @pillar.command("get") @click.argument("fqdn") def pillar_get(fqdn): """Get pillar data for a given FQDN.""" try: response = requests.get( f"{base_url()}/pillar/{fqdn}", headers=auth_header(), ) response.raise_for_status() pillar_data = response.json() click.echo(pillar_data) except requests.exceptions.RequestException as e: click.echo(f"Error: {e}") @pillar.command("set") @click.argument("name") @click.option("--host") @click.option("--hostgroup") @click.option("--parameter-type") @click.option("--value") def pillar_set(name: str, host: str | None, hostgroup: str | None, parameter_type: str | None, value: str | None): try: if parameter_type == 'str': pass # there is nothing to do here elif parameter_type == 'int': _ = int(value) elif parameter_type == 'float': _ = float(value) elif parameter_type == 'bool': _ = bool(value) elif parameter_type == 'list': value = json.loads(value) elif parameter_type == 'dict': value = json.loads(value) else: raise ValueError("Invalid parameter type") except ValueError as e: print(f"Failed to validate value: {e}") else: data = { 'host': host, 'hostgroup': hostgroup, 'type': parameter_type, 'value': json.dumps(value) } requests.post(f"{base_url()}/pillar/{name}", headers=auth_header(), json=data)