Expand lab seed tiers, OpenAPI PARAMS, and console DATA/Params UX.
This commit is contained in:
@@ -38,6 +38,9 @@ async def create_folder(
|
||||
async def create_datacenter(database: Database, *, name: str, folder: str = "group-d1") -> str:
|
||||
import secrets
|
||||
|
||||
parent_obj = await inventory.get_object(database, folder)
|
||||
if parent_obj is None:
|
||||
raise not_found(f"Parent {folder} not found")
|
||||
moid = f"datacenter-{secrets.randbelow(900) + 100}"
|
||||
host_folder = f"group-h{secrets.randbelow(90) + 10}"
|
||||
vm_folder = f"group-v{secrets.randbelow(90) + 10}"
|
||||
@@ -83,6 +86,9 @@ async def create_cluster(
|
||||
) -> str:
|
||||
import secrets
|
||||
|
||||
parent_obj = await inventory.get_object(database, folder)
|
||||
if parent_obj is None:
|
||||
raise not_found(f"Parent {folder} not found")
|
||||
moid = f"domain-c{secrets.randbelow(900) + 100}"
|
||||
rp = f"resgroup-{secrets.randbelow(900) + 100}"
|
||||
await inventory.upsert_object(
|
||||
@@ -162,6 +168,9 @@ async def delete_managed(database: Database, moid: str) -> None:
|
||||
obj = await inventory.get_object(database, moid)
|
||||
if obj is None:
|
||||
raise not_found(f"Object {moid} not found")
|
||||
# Protect the lab seed spine so surface/matrix probes cannot empty the inventory dump.
|
||||
if moid in _SEED_PROTECTED_MOIDS or _is_seed_host_or_named_vm(moid, obj):
|
||||
raise invalid_argument(f"Cannot delete protected seed object {moid}")
|
||||
children = [
|
||||
child for child in await inventory.list_objects(database) if child.parent_moid == moid
|
||||
]
|
||||
@@ -170,6 +179,44 @@ async def delete_managed(database: Database, moid: str) -> None:
|
||||
await inventory.delete_object(database, moid)
|
||||
|
||||
|
||||
# Stable MOIDs from profiles._topology / small named VMs (all seed sizes).
|
||||
_SEED_PROTECTED_MOIDS = frozenset(
|
||||
{
|
||||
"group-d1",
|
||||
"datacenter-21",
|
||||
"group-h23",
|
||||
"group-v23",
|
||||
"group-s23",
|
||||
"group-n23",
|
||||
"domain-c21",
|
||||
"resgroup-22",
|
||||
"group-v100",
|
||||
"group-v101",
|
||||
"group-v102",
|
||||
"network-41",
|
||||
"dvs-51",
|
||||
*(f"datastore-{30 + n}" for n in range(1, 9)),
|
||||
*(f"dvportgroup-{40 + n}" for n in range(2, 9)),
|
||||
*(f"group-v{103 + n}" for n in range(0, 8)),
|
||||
"vm-101",
|
||||
"vm-102",
|
||||
"vm-103",
|
||||
"vm-104",
|
||||
"vm-105",
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def _is_seed_host_or_named_vm(moid: str, obj: Any) -> bool:
|
||||
if obj.type == "HostSystem" and moid.startswith("host-"):
|
||||
# Seed hosts are host-11..host-N; probe hosts use other patterns if any.
|
||||
try:
|
||||
return 11 <= int(moid.split("-", 1)[1]) <= 40
|
||||
except ValueError:
|
||||
return False
|
||||
return False
|
||||
|
||||
|
||||
async def set_host_maintenance(database: Database, host: str, enabled: bool) -> dict[str, Any]:
|
||||
obj = await inventory.get_object(database, host)
|
||||
if obj is None or obj.type != "HostSystem":
|
||||
|
||||
Reference in New Issue
Block a user