mirror of
https://ak-git.vectorsigma.ru/terghalin/metalcheck-cli.git
synced 2025-11-01 17:47:36 +09:00
90 lines
2.9 KiB
Python
90 lines
2.9 KiB
Python
import click
|
|
import requests
|
|
|
|
BASE_URL = "http://localhost:8000/vm" # Backend URL for Virtual Machines API
|
|
|
|
@click.group()
|
|
def virtual_machines():
|
|
"""Commands for managing Virtual Machines."""
|
|
pass
|
|
|
|
@virtual_machines.command("list")
|
|
def list_command():
|
|
handle_command("list")
|
|
|
|
@virtual_machines.command("add")
|
|
def add_command():
|
|
handle_command("add")
|
|
|
|
@virtual_machines.command("delete")
|
|
def delete_command():
|
|
handle_command("delete")
|
|
|
|
def handle_command(action):
|
|
"""Handle commands related to Virtual Machines."""
|
|
if action == "list":
|
|
list_virtual_machines()
|
|
elif action == "add":
|
|
add_virtual_machine()
|
|
elif action == "delete":
|
|
delete_virtual_machine()
|
|
|
|
def list_virtual_machines():
|
|
"""List all virtual machines."""
|
|
try:
|
|
response = requests.get(f"{BASE_URL}/data")
|
|
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():
|
|
"""Add a new virtual machine."""
|
|
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(f"{BASE_URL}/data", 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():
|
|
"""Delete a virtual machine."""
|
|
try:
|
|
vm_id = click.prompt("Enter the ID of the virtual machine to delete", type=int)
|
|
response = requests.delete(f"{BASE_URL}/data/{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}")
|