#!/usr/bin/env python import click from fast_api_client import Client import json from fast_api_client.models import Environment,HTTPValidationError,ValidationError from fast_api_client.api.default import root_get,get_inventory_api_v1_environments_inventory_post,create_environments_api_v1_environments_post,delete_environments_api_v1_environments_delete,list_environments_api_v1_environments_list_post,get_ports_api_v1_environments_ports_post from fast_api_client.types import Response client = Client(base_url="http://bla:8000", timeout=120.0) @click.command(no_args_is_help=True) @click.option("--create",'-c', type=(str),is_flag=False, help="Create environment (non root user)") @click.option("--delete", '-d', type=(str),is_flag=False, help="Delete environment") @click.option("--getlist", "-l", help="List environments") @click.option("--inventory", "-i", type=(str), help="Get ansible inventory of environment") @click.option("--ports", "-p", type=(str), help="Get ports of environment") @click.option("--uid", '-u', type=(str),is_flag=False, help="Uniq identifier") @click.version_option(version="1.0", prog_name="Dragontool client", message="%(prog)s version %(version)s") def dragontool_client(create, delete, getlist, inventory, uid, ports): """Dragontool client for managing environments""" if create: response: Response[Environment] = create_environments_api_v1_environments_post.sync_detailed(client=client,json_body=Environment(username=create,uid=uid)) #print(f"{response.status_code}") if response.status_code == 200: #click.echo(f"Environment {create} created!") data = json.loads(response.content.decode('utf-8')) print(data['uid']) #print(f"{response.content.decode('utf-8')}") elif response.status_code == 500: click.echo(f"Environment {create} not created, could be it already exists!") elif delete: if uid is None: click.echo(f"Missing uid, please add -u ") else: response: Response[Environment] = delete_environments_api_v1_environments_delete.sync_detailed(client=client,json_body=Environment(username=delete,uid=uid)) if response.status_code == 200: click.echo(f"Environment {delete} deleted!") elif getlist: response: Response[Environment] = list_environments_api_v1_environments_list_post.sync_detailed(client=client,json_body=Environment(username=getlist)) response_json = json.loads(response.content.decode('utf-8')) click.echo(f"Environments:") for json_data in response_json: if "uid" in json_data.keys(): click.echo(f"\t- {json_data['uid']}") #click.echo(f"{response.content.decode('utf-8')}") elif inventory: if uid is None: click.echo(f"Missing uid, please add -u ") else: response: Response[Environment] = get_inventory_api_v1_environments_inventory_post.sync_detailed(client=client,json_body=Environment(username=inventory,uid=uid)) click.echo(f"{response.content.decode('utf-8')}") elif ports: if uid is None: click.echo(f"Missing uid, please add -u ") else: response: Response[Environment] = get_ports_api_v1_environments_ports_post.sync_detailed(client=client,json_body=Environment(username=ports,uid=uid)) response_json = json.loads(response.content.decode('utf-8')) for json_data in response_json: if "container_pub_ssh_port" in json_data.keys(): click.echo(f"SSH:\t{json_data['container_alias']} on {json_data['host_ip']}:{json_data['container_pub_ssh_port']}") elif "container_pub_ldap_port" in json_data.keys(): click.echo(f"LDAP:\t{json_data['container_alias']} on {json_data['host_ip']}:{json_data['container_pub_ldap_port']}\n") #print(f"{data[0]}") #print(f"{response.content.decode('utf-8')}") #click.echo(f"{data}") if __name__ == '__main__': dragontool_client()