58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
"""Live smoke test: list, create, verify, delete subnet on real Cloud.ru."""
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent / "src"))
|
|
|
|
from dotenv import load_dotenv
|
|
load_dotenv(Path(__file__).resolve().parent / ".env")
|
|
|
|
import os
|
|
from cloud.vm_manager import VMManager, VMAPIError
|
|
from cloud.models import SubnetCreateRequest
|
|
|
|
token = os.environ["CLOUD_TOKEN"]
|
|
project_id = os.environ["CLOUD_PROJECT_ID"]
|
|
vpc_id = os.getenv("CLOUD_VPC_ID")
|
|
zone_id = "479a4ab3-3ff3-4972-95c5-7610bac5c0bb" # ru.AZ-2, from list_subnets
|
|
|
|
m = VMManager(token)
|
|
print("== list_subnets (before) ==")
|
|
try:
|
|
existing = m.list_subnets(project_id)
|
|
print(json.dumps(existing.model_dump(), indent=2)[:2000])
|
|
except VMAPIError as e:
|
|
print(f"LIST FAILED: status={e.status} msg={e} details={e.details}")
|
|
|
|
print("\n== create_subnet ==")
|
|
created = None
|
|
try:
|
|
created = m.create_subnet(SubnetCreateRequest(
|
|
name="kernel-live-test-subnet",
|
|
project_id=project_id,
|
|
availability_zone_id=zone_id,
|
|
subnet_address="10.250.0.0/20",
|
|
vpc_id=vpc_id,
|
|
description="kernel live test, safe to delete",
|
|
))
|
|
print(f"CREATED: id={created.id} name={created.name} addr={created.subnet_address} state={created.state}")
|
|
except VMAPIError as e:
|
|
print(f"CREATE FAILED: status={e.status} msg={e}")
|
|
print(f"details={json.dumps(e.details)[:2000]}")
|
|
sys.exit(1)
|
|
|
|
print("\n== get_subnet ==")
|
|
try:
|
|
got = m.get_subnet(created.id)
|
|
print(f"GET OK: id={got.id} addr={got.subnet_address} state={got.state}")
|
|
except VMAPIError as e:
|
|
print(f"GET FAILED: status={e.status} msg={e} details={json.dumps(e.details)[:1000]}")
|
|
|
|
print("\n== delete_subnet ==")
|
|
try:
|
|
m._request("DELETE", f"/api/v1/subnets/{created.id}")
|
|
print("DELETE OK")
|
|
except VMAPIError as e:
|
|
print(f"DELETE FAILED: status={e.status} msg={e} details={json.dumps(e.details)[:1000]}")
|