import click import requests @click.group() @click.pass_context def virtual_machines(ctx): """Commands for managing Virtual Machines.""" pass @virtual_machines.command("list") @click.pass_context def list_command(ctx): """List all virtual machines.""" base_url = ctx.obj["BASE_URL"] list_virtual_machines(base_url) @virtual_machines.command("add") @click.pass_context def add_command(ctx): """Add a new virtual machine.""" base_url = ctx.obj["BASE_URL"] add_virtual_machine(base_url) @virtual_machines.command("delete") @click.pass_context def delete_command(ctx): """Delete a virtual machine.""" base_url = ctx.obj["BASE_URL"] delete_virtual_machine(base_url) def list_virtual_machines(base_url): """List all virtual machines.""" vm_url = f"{base_url}/vm/data" try: response = requests.get(vm_url) if response.status_code == 200: virtual_machines = response.json().get("virtual_machines", []) click.echo("\nšŸ’» Virtual Machines:") for vm in virtual_machines: click.echo( f"ID: {vm[0]}, Name: {vm[1]}, Location: {vm[2]}, " f"CPU: {vm[3]}, Memory: {vm[4]}, Storage: {vm[5]}, " f"Type: {vm[6]}" ) else: click.echo(f"Error: {response.status_code} - {response.text}") except requests.RequestException as e: click.echo(f"Error: {e}") def add_virtual_machine(base_url): """Add a new virtual machine.""" vm_url = f"{base_url}/vm/data" try: name = click.prompt("Name") location = click.prompt("Location") cpu = click.prompt("CPU (cores)", type=int) memory = click.prompt("Memory (GB)") storage = click.prompt("Storage (e.g., 500GB SSD)") vm_type = click.prompt("Type (e.g., cx-21)") data = { "name": name, "location": location, "cpu": cpu, "memory": memory, "storage": storage, "type": vm_type, } response = requests.post(vm_url, json=data) if response.status_code in [200, 201]: response_data = response.json() message = response_data.get("message", "Virtual machine added successfully!") click.echo(f"āœ… {message}") else: click.echo(f"Error: {response.status_code} - {response.text}") except requests.RequestException as e: click.echo(f"Error: {e}") def delete_virtual_machine(base_url): """Delete a virtual machine.""" vm_url = f"{base_url}/vm/data" try: vm_id = click.prompt("Enter the ID of the virtual machine to delete", type=int) response = requests.delete(f"{vm_url}/{vm_id}") if response.status_code == 200: click.echo("āœ… Virtual machine deleted successfully!") else: click.echo(f"Error: {response.status_code} - {response.text}") except requests.RequestException as e: click.echo(f"Error: {e}")