"""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]}")