move schema in new repo
This commit is contained in:
parent
f56d1be2cc
commit
fcd33f4372
|
@ -0,0 +1,255 @@
|
|||
from typing import List, Tuple, Optional
|
||||
from enum import Enum, IntEnum
|
||||
from uuid import UUID, uuid4
|
||||
from pydantic_xml import element, attr, wrapped
|
||||
from pydantic import UUID4, Field, field_serializer, ConfigDict, ValidationInfo, field_validator
|
||||
from pydantic import BaseModel as _BaseModel
|
||||
from pydantic_core import core_schema as cs
|
||||
import libvirt
|
||||
|
||||
from pydantic_core import core_schema
|
||||
from pydantic.json_schema import GetJsonSchemaHandler, JsonSchemaValue
|
||||
|
||||
from deevirt_common.lib.virt import vm as domain
|
||||
from deevirt_common.schemas import datacenter_schema, storage_schema, network_schema, libvirt
|
||||
|
||||
class BaseModel(_BaseModel):
|
||||
class Config:
|
||||
@staticmethod
|
||||
def json_schema_extra(schema: dict, _):
|
||||
props = {}
|
||||
for k, v in schema.get('properties', {}).items():
|
||||
if not v.get("hidden", False):
|
||||
props[k] = v
|
||||
schema["properties"] = props
|
||||
|
||||
|
||||
""" Common """
|
||||
class VMResource(BaseModel):
|
||||
"""Experimental"""
|
||||
name:Optional[str] = Field(default=None, description="Nom du pool")
|
||||
|
||||
class VMVCPU(BaseModel):
|
||||
value:int = Field(description="Nombre de VCPU")
|
||||
dedicated:Optional[bool] = Field(default=False, description="VCPU dédié")
|
||||
hotplug:Optional[bool] = Field(default=False, description="Ajout de VCPU à chaud.")
|
||||
|
||||
class VMMemory(BaseModel):
|
||||
unit:Optional[libvirt.UnitEnum] = Field(default=libvirt.UnitEnum.GiB, description="Unité de mesure.")
|
||||
value:int = Field(description="Taille de la mémoire.")
|
||||
hotplug:Optional[bool] = Field(default=False,description="Ajout à chaud de la mémoire.")
|
||||
|
||||
class VMOSBootMenu(BaseModel):
|
||||
enable:Optional[bool] = Field(default=False,description="Activation du menu de démarrage.")
|
||||
delay:Optional[int] = Field(default=0, description="Delai maximal pour entrer dans le menu démarrage en millisecondes")
|
||||
|
||||
class VMOSBootOrder(BaseModel):
|
||||
dev:Optional[libvirt.OSBoot.bootEnum] = Field(default=None, description="Périphérique.")
|
||||
|
||||
class VMOSInfo(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
name:str = Field(alias="os.name", serialization_alias="name")
|
||||
version:str = Field(alias="os.version-id", serialization_alias="version")
|
||||
machine:str = Field(alias="os.machine", serialization_alias="architecture")
|
||||
kernel:str = Field(alias="os.kernel-release", serialization_alias="kernel")
|
||||
|
||||
class VMOS(BaseModel):
|
||||
firmware:libvirt.OS.firmwareEnum = Field(default=libvirt.OS.firmwareEnum.bios, description="Microprogramme")
|
||||
enrolled_keys:Optional[bool] = Field(default=None, description="Vérification de la signature du chargeur de démarrage")
|
||||
secure_boot:Optional[bool] = Field(default=None, description="Démarrage sécurisé")
|
||||
boot_order:Optional[List[libvirt.OSBoot.bootEnum]] = Field(default=None, description="Ordre de démarrage des périphériques")
|
||||
boot_menu:VMOSBootMenu = Field(default=VMOSBootMenu(), description="Menu de démarrage")
|
||||
|
||||
class VMClock(BaseModel):
|
||||
class offsetEnum(str, Enum):
|
||||
utc = "utc"
|
||||
localtime = "localtime"
|
||||
timezone = "timezone"
|
||||
variable = "variable"
|
||||
absolute = "absolute"
|
||||
|
||||
offset:offsetEnum = Field(default=offsetEnum.utc, description="Sélection de l'offset ?")
|
||||
|
||||
class VMEvent(BaseModel):
|
||||
class on_poweroffEnum(str, Enum):
|
||||
destroy = "destroy"
|
||||
restart = "restart"
|
||||
preserve = "preverse"
|
||||
|
||||
class on_rebootEnum(str, Enum):
|
||||
restart = "restart"
|
||||
preserve = "preverse"
|
||||
|
||||
class on_crashEnum(str, Enum):
|
||||
destroy = "destroy"
|
||||
restart = "restart"
|
||||
preserve = "preverse"
|
||||
|
||||
class on_failurelockEnum(str, Enum):
|
||||
poweroff = "poweroff"
|
||||
restart = "restart"
|
||||
pause = "pause"
|
||||
ignore = "ignore"
|
||||
|
||||
on_poweroff:on_poweroffEnum = Field(default=on_poweroffEnum.destroy, description="Action lors d'un poweroff")
|
||||
on_reboot:on_rebootEnum = Field(default=on_rebootEnum.restart, description="Action lors d'un redémarrage")
|
||||
on_crash:on_crashEnum = Field(default=on_crashEnum.restart, description="Action lors d'un crash de la VM")
|
||||
on_failurelock:on_failurelockEnum = element(default=on_failurelockEnum.ignore, description="A tester")
|
||||
|
||||
class VMDevicesDisk(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
pool_id:UUID4 = Field()
|
||||
id:UUID4 = Field()
|
||||
size:int = Field()
|
||||
unit:libvirt.UnitEnum = Field(default=libvirt.UnitEnum.GiB)
|
||||
bus:libvirt.DevicesDiskTarget.busEnum = Field(default=libvirt.DevicesDiskTarget.busEnum.scsi)
|
||||
|
||||
class VMDevicesCDROMSource(BaseModel):
|
||||
class protocolEnum(str, Enum):
|
||||
http = "http"
|
||||
https = "https"
|
||||
ftp = "ftp"
|
||||
ftps = "ftps"
|
||||
|
||||
protocol:protocolEnum = attr(default=protocolEnum.https)
|
||||
name:str = attr()
|
||||
|
||||
class VMDevicesCDROM(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
device:libvirt.DevicesDisk.deviceEnum = Field(default=libvirt.DevicesDisk.deviceEnum.cdrom, json_schema_extra={"hidden": True})
|
||||
source:VMDevicesCDROMSource = element(default=None)
|
||||
|
||||
class VMDevicesInterfaceGuest(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
addr:str = Field()
|
||||
|
||||
class VMDevicesInterface(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
switch_id:UUID4
|
||||
id:UUID4
|
||||
mac_addr:str = Field()
|
||||
|
||||
class VMGraphics(BaseModel):
|
||||
port:int = Field(default=-1)
|
||||
autoport:bool = Field(default=False)
|
||||
websocket:int = Field(default=-1)
|
||||
password:Optional[str] = Field(default=None)
|
||||
keymap:libvirt.Graphics.keymapEnum = Field(default=libvirt.Graphics.keymapEnum.fr)
|
||||
power_control:bool = Field(default=False)
|
||||
|
||||
class VMAudio(BaseModel):
|
||||
pass
|
||||
|
||||
class VMVideoModel(BaseModel):
|
||||
type:libvirt.VideoModel.typeEnum = Field(default=libvirt.VideoModel.typeEnum.cirrus)
|
||||
vram:int = Field(default=16384)
|
||||
primary:libvirt.YesNoEnum = Field(default=libvirt.YesNoEnum.YES)
|
||||
|
||||
class VMVideo(BaseModel):
|
||||
model:VMVideoModel = element()
|
||||
|
||||
class VMWatchdog(BaseModel):
|
||||
model:libvirt.Watchdog.modelEnum = Field(default=libvirt.Watchdog.modelEnum.itco)
|
||||
action:libvirt.Watchdog.actionEnum = Field(default=libvirt.Watchdog.actionEnum.reset)
|
||||
|
||||
class VMTPM(BaseModel):
|
||||
model:libvirt.TPM.modelEnum = attr(default=libvirt.TPM.modelEnum.tpm_tis)
|
||||
version:libvirt.TPMBackend.versionEnum = Field(default=libvirt.TPMBackend.versionEnum.v20)
|
||||
|
||||
class VMDevices(BaseModel):
|
||||
disks:Optional[List[VMDevicesDisk]] = Field(default=None, description="Disques virtuel")
|
||||
cdrom:VMDevicesCDROM = Field(default=None, description="CDROM virtuel")
|
||||
interfaces:Optional[List[VMDevicesInterface]] = Field(default=None, description="Interfaces réseau")
|
||||
graphics:Optional[VMGraphics] = Field(default=None, description="Console VNC")
|
||||
audio:VMAudio = Field(default=None, description="Carte Audio")
|
||||
video:VMVideo = Field(default=None, description="Carte Vidéo")
|
||||
watchdog:VMWatchdog = Field(default=None, description="Chien de garde")
|
||||
tpm:VMTPM = Field(default=None, description="Puce de sécurité")
|
||||
|
||||
class VM(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
# General metadata
|
||||
id:UUID4 = Field()
|
||||
datacenter_id:Optional[UUID4] = Field(default=None)
|
||||
name:str = Field()
|
||||
description:Optional[str] = Field(default=None)
|
||||
|
||||
# CPU Allocation
|
||||
vcpu:VMVCPU = Field()
|
||||
|
||||
# Memory Allocation
|
||||
memory:VMMemory = Field()
|
||||
|
||||
# Pool of resource (Experimental)
|
||||
resource:VMResource = Field(default=VMResource(), description="Pool de resources")
|
||||
|
||||
# BIOS BootLoader
|
||||
os:VMOS = Field(default=VMOS(), description="Options VM: Options de démarrage.")
|
||||
|
||||
# Clock configuration
|
||||
clock:VMClock = Field(default=VMClock(), description="Options VM: Gestion de l'horloge")
|
||||
|
||||
# Event configuration
|
||||
event:VMEvent = Field(default=VMEvent(), description="Options VM: Gestion des évènements")
|
||||
|
||||
# Devices
|
||||
devices:VMDevices = Field(default=VMDevices(), description="Matériel virtuel: Périphériques")
|
||||
|
||||
"""VM LIST GET"""
|
||||
class VMs(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class Datacenter(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
id:UUID4
|
||||
name:str
|
||||
|
||||
id:UUID4
|
||||
name:str
|
||||
state:int
|
||||
datacenter:Optional[Datacenter] = Field(default=[])
|
||||
|
||||
"""VM GET"""
|
||||
class VMGetVCPU(VMVCPU):
|
||||
max:Optional[int] = Field(default=None, description="Maximum de VCPUs")
|
||||
|
||||
class VMGetOS(VMOS):
|
||||
guest_info:Optional[VMOSInfo] = Field(default=None, description="Information de l'OS client")
|
||||
|
||||
class VMGetDevicesDisk(VMDevicesDisk):
|
||||
allocated:float = Field(default=None)
|
||||
|
||||
class VMGetDevicesInterface(VMDevicesInterface):
|
||||
guest_info:Optional[List[VMDevicesInterfaceGuest]] = Field(default=None, description="Information de configuration de la carte réseau.")
|
||||
|
||||
class VMGetDevices(VMDevices):
|
||||
disks:Optional[List[VMGetDevicesDisk]] = Field(default=None, description="Disques virtuel")
|
||||
interfaces:Optional[List[VMGetDevicesInterface]] = Field(default=None, description="Interfaces réseau")
|
||||
|
||||
class VMGet(VM):
|
||||
vcpu:VMGetVCPU = Field()
|
||||
gen_id:Optional[UUID4] = Field(default=None)
|
||||
os:VMGetOS = Field(default=VMGetOS(), description="Options VM: Options de démarrage.")
|
||||
devices:VMGetDevices = Field(default=VMGetDevices(), description="Matériel virtuel: Périphériques")
|
||||
|
||||
"""VM POST"""
|
||||
class VMCreate(VM):
|
||||
id:UUID4 = Field(default_factory=uuid4)
|
||||
datacenter_id:UUID4 = Field()
|
||||
|
||||
"""VM DELETE"""
|
||||
class VMDelete(BaseModel):
|
||||
id:UUID4 = Field()
|
||||
|
||||
class VMHardDisk(BaseModel):
|
||||
pass
|
||||
|
||||
class VMNetInterfaceCreate(BaseModel):
|
||||
pass
|
|
@ -0,0 +1,688 @@
|
|||
from enum import Enum
|
||||
from typing import List, Optional
|
||||
from uuid import uuid4
|
||||
from pydantic import UUID4
|
||||
from pydantic_xml import BaseXmlModel, attr, element, wrapped
|
||||
|
||||
from deevirt_schema.libvirt.enum import YesNoEnum, OnOffEnum, UnitEnum
|
||||
|
||||
class Metadata(BaseXmlModel, search_mode='ordered'):
|
||||
# wrapped("metadata", element(default=None, ns="deevirt", nsmap={'deevirt': 'https://deevirt.com/'}))
|
||||
pass
|
||||
|
||||
class OSType(BaseXmlModel, search_mode='ordered'):
|
||||
class archEnum(str, Enum):
|
||||
x86 = "x86"
|
||||
x86_64 = "x86_64"
|
||||
|
||||
arch:archEnum = attr(default=archEnum.x86_64)
|
||||
machine:Optional[str] = attr(default="q35")
|
||||
|
||||
class OSFirmwareFeature(BaseXmlModel, search_mode='ordered'):
|
||||
class nameEnum(str, Enum):
|
||||
enrolled_keys = "enrolled-keys"
|
||||
secure_boot = "secure-boot"
|
||||
|
||||
enabled:YesNoEnum = attr(default=YesNoEnum.YES)
|
||||
name:nameEnum = attr()
|
||||
|
||||
class OSFirmware(BaseXmlModel, search_mode='ordered'):
|
||||
feature:List[OSFirmwareFeature] = element(default=[
|
||||
OSFirmwareFeature(
|
||||
name=OSFirmwareFeature.nameEnum.enrolled_keys
|
||||
),
|
||||
OSFirmwareFeature(
|
||||
name=OSFirmwareFeature.nameEnum.secure_boot
|
||||
)
|
||||
]
|
||||
)
|
||||
|
||||
class OSLoader(BaseXmlModel, search_mode='ordered'):
|
||||
class typeEnum(str, Enum):
|
||||
nvram = "nvram"
|
||||
pflash = "pflash"
|
||||
|
||||
readonly:YesNoEnum = attr(default=YesNoEnum.YES)
|
||||
secure:YesNoEnum = attr(default=YesNoEnum.YES)
|
||||
type:typeEnum = attr(default=typeEnum.pflash)
|
||||
path:Optional[str] = ""
|
||||
|
||||
class OSBoot(BaseXmlModel, search_mode='ordered'):
|
||||
class bootEnum(str, Enum):
|
||||
hd = "hd",
|
||||
network = "network",
|
||||
cdrom = "cdrom"
|
||||
|
||||
dev:bootEnum = attr()
|
||||
|
||||
class OSBootMenu(BaseXmlModel, search_mode='ordered'):
|
||||
enable:YesNoEnum = attr(default=YesNoEnum.NO)
|
||||
timeout:int = attr(default=0)
|
||||
|
||||
class OSSmbios(BaseXmlModel, search_mode='ordered'):
|
||||
class modeEnum(str, Enum):
|
||||
sysinfo = "sysinfo"
|
||||
|
||||
mode:modeEnum = attr(default=modeEnum.sysinfo)
|
||||
|
||||
class OS(BaseXmlModel, search_mode='ordered'):
|
||||
class firmwareEnum(str, Enum):
|
||||
bios = "bios"
|
||||
efi = "efi"
|
||||
|
||||
firmware:Optional[firmwareEnum] = attr(default=firmwareEnum.efi)
|
||||
type:OSType = element(default=OSType())
|
||||
firmware_options:OSFirmware = element(tag="firmware", default=OSFirmware())
|
||||
loader:OSLoader = element(default=OSLoader())
|
||||
nvram:Optional[str] = element(default="")
|
||||
boot:List[OSBoot] = element(default=[
|
||||
OSBoot(dev="hd"),
|
||||
OSBoot(dev="cdrom"),
|
||||
OSBoot(dev="network")
|
||||
])
|
||||
bootmenu:OSBootMenu = element(default=OSBootMenu())
|
||||
smbios:OSSmbios = element(default=OSSmbios())
|
||||
|
||||
class SysinfoEntry(BaseXmlModel, search_mode='ordered'):
|
||||
name:str = attr()
|
||||
value:str
|
||||
|
||||
class SysinfoBIOS(BaseXmlModel, search_mode='ordered'):
|
||||
entry:SysinfoEntry = element(default=None)
|
||||
|
||||
class SysinfoSystem(BaseXmlModel, search_mode='ordered'):
|
||||
entry:List[SysinfoEntry] = element(default=[
|
||||
SysinfoEntry(
|
||||
name="manufacturer",
|
||||
value="Celeonet"
|
||||
),
|
||||
SysinfoEntry(
|
||||
name="product",
|
||||
value="Celeonet Compute"
|
||||
),
|
||||
SysinfoEntry(
|
||||
name="version",
|
||||
value="1.0"
|
||||
),
|
||||
SysinfoEntry(
|
||||
name="family",
|
||||
value="Virtual Machine"
|
||||
)
|
||||
])
|
||||
|
||||
class SysinfoBaseBoard(BaseXmlModel, search_mode='ordered'):
|
||||
entry:List[SysinfoEntry] = element(default=None)
|
||||
|
||||
class SysinfoChassis(BaseXmlModel, search_mode='ordered'):
|
||||
entry:List[SysinfoEntry] = element(default=None)
|
||||
|
||||
class SysinfoOEMStrings(BaseXmlModel, search_mode='ordered'):
|
||||
entry:List[SysinfoEntry] = element(default=None)
|
||||
|
||||
class Sysinfo(BaseXmlModel, search_mode='ordered'):
|
||||
bios:SysinfoBIOS = element(default=SysinfoBIOS())
|
||||
system:Optional[SysinfoSystem] = element(default=SysinfoSystem())
|
||||
baseBoard:Optional[SysinfoBaseBoard] = element(default=SysinfoBaseBoard())
|
||||
chassis:Optional[SysinfoChassis] = element(default=SysinfoChassis())
|
||||
oemStrings:Optional[SysinfoOEMStrings] = element(default=SysinfoOEMStrings())
|
||||
|
||||
class VCPU(BaseXmlModel, search_mode='ordered'):
|
||||
class placementEnum(str, Enum):
|
||||
static = "static"
|
||||
auto = "auto"
|
||||
|
||||
placement:placementEnum = attr(default=placementEnum.auto)
|
||||
cpuset:str = attr(default=None)
|
||||
current:int = attr()
|
||||
max:int = None
|
||||
|
||||
class VCPUS(BaseXmlModel, search_mode='ordered'):
|
||||
id:int = attr()
|
||||
enabled:YesNoEnum = attr(default=YesNoEnum.YES)
|
||||
hotpluggable:YesNoEnum = attr(default=YesNoEnum.YES)
|
||||
order:int = attr()
|
||||
|
||||
class CPUTune(BaseXmlModel, search_mode='ordered'):
|
||||
"""Not implemented"""
|
||||
pass
|
||||
|
||||
class MaxMemory(BaseXmlModel, search_mode='ordered'):
|
||||
slots:int = attr()
|
||||
unit:UnitEnum = attr(default=UnitEnum.MiB)
|
||||
value:int
|
||||
|
||||
class Memory(BaseXmlModel, search_mode='ordered'):
|
||||
unit:UnitEnum = attr(default=UnitEnum.MiB)
|
||||
value:int
|
||||
|
||||
class CurrentMemory(BaseXmlModel, search_mode='ordered'):
|
||||
unit:UnitEnum = attr(default=UnitEnum.MiB)
|
||||
value:int
|
||||
|
||||
class MemoryBacking(BaseXmlModel, search_mode='ordered'):
|
||||
"""Not implemented"""
|
||||
pass
|
||||
|
||||
class MemTune(BaseXmlModel, search_mode='ordered'):
|
||||
"""Not implemented"""
|
||||
pass
|
||||
|
||||
class NumaTuneMemory(BaseXmlModel, search_mode='ordered'):
|
||||
class modeEnum(str, Enum):
|
||||
interleave = "interleave"
|
||||
strict = "strict"
|
||||
preferred = "preferred"
|
||||
restrictive = "restrictive"
|
||||
|
||||
mode:modeEnum = attr()
|
||||
modeset:str = attr()
|
||||
|
||||
class NumaMemnode(BaseXmlModel, search_mode='ordered'):
|
||||
cellid:int = attr()
|
||||
mode:NumaTuneMemory.modeEnum = attr()
|
||||
nodeset:str = attr()
|
||||
|
||||
class NumaTune(BaseXmlModel, search_mode='ordered'):
|
||||
memory:NumaTuneMemory = element()
|
||||
memnode:NumaMemnode = element()
|
||||
|
||||
class ResourcePartition(BaseXmlModel, search_mode='ordered'):
|
||||
value:str
|
||||
|
||||
class Resource(BaseXmlModel, search_mode='ordered'):
|
||||
partition:ResourcePartition = element()
|
||||
|
||||
class CPUModel(BaseXmlModel, search_mode='ordered'):
|
||||
class fallbackEnum(str, Enum):
|
||||
force = "force"
|
||||
require = "require"
|
||||
optional = "optional"
|
||||
disable = "disable"
|
||||
forbird = "forbid"
|
||||
|
||||
fallback:fallbackEnum = attr()
|
||||
value:str
|
||||
|
||||
class CPUTopology(BaseXmlModel, search_mode='ordered'):
|
||||
sockets:int = attr()
|
||||
dies:Optional[int] = attr(default=None)
|
||||
clusters:Optional[int] = attr(default=None)
|
||||
cores:int = attr()
|
||||
threads:int = attr()
|
||||
|
||||
class CPUCache(BaseXmlModel, search_mode='ordered'):
|
||||
class modeEnum(str, Enum):
|
||||
emulate = "emulate"
|
||||
passthrough = "passthrough"
|
||||
disable = "disable"
|
||||
|
||||
level:int = attr()
|
||||
mode:modeEnum = attr()
|
||||
|
||||
class CPUMaxphysaddr(BaseXmlModel, search_mode='ordered'):
|
||||
class modeEnum(str, Enum):
|
||||
emulate = "emulate"
|
||||
passthrough = "passthrough"
|
||||
|
||||
mode:modeEnum = attr()
|
||||
bits:int = attr()
|
||||
|
||||
class CPUFeature(BaseXmlModel, search_mode='ordered'):
|
||||
class policyEnum(str, Enum):
|
||||
force = "force"
|
||||
require = "require"
|
||||
optional = "optional"
|
||||
disable = "disable"
|
||||
forbid = "forbid"
|
||||
|
||||
policy:policyEnum = attr()
|
||||
name:str = attr()
|
||||
|
||||
class CPUDistancesSibling(BaseXmlModel, search_mode='ordered'):
|
||||
id:int = attr()
|
||||
value:int = attr()
|
||||
|
||||
class CPUDistances(BaseXmlModel, search_mode='ordered'):
|
||||
sibling:Optional[List[CPUDistancesSibling]] = element(default=None)
|
||||
|
||||
class CPUNumaCell(BaseXmlModel, search_mode='ordered'):
|
||||
class memaccessEnum(str, Enum):
|
||||
shared = "shared"
|
||||
private = "private"
|
||||
|
||||
id:Optional[int] = attr()
|
||||
cpus:Optional[str] = attr()
|
||||
memory:Optional[int] = attr()
|
||||
unit:Optional[UnitEnum] = attr(default=UnitEnum.KiB)
|
||||
discard:Optional[YesNoEnum] = attr(default=None)
|
||||
memaccess:Optional[memaccessEnum] = attr(default=None)
|
||||
distances:Optional[CPUDistances] = element()
|
||||
|
||||
class CPUNuma(BaseXmlModel, search_mode='ordered'):
|
||||
cell:Optional[List[CPUNumaCell]] = element(default=[])
|
||||
|
||||
class CPU(BaseXmlModel, search_mode='ordered'):
|
||||
class matchEnum(str, Enum):
|
||||
minimum = "minimum"
|
||||
exact = "exact"
|
||||
strict = "strict"
|
||||
|
||||
class modeEnum(str, Enum):
|
||||
custom = "custom"
|
||||
host_model = "host-model"
|
||||
|
||||
class checkEnum(str, Enum):
|
||||
none = "none"
|
||||
partial = "partial"
|
||||
full = "full"
|
||||
|
||||
match:Optional[matchEnum] = attr(default=None)
|
||||
mode:modeEnum = attr(default=modeEnum.host_model)
|
||||
check:Optional[checkEnum] = attr(default=None)
|
||||
model:Optional[CPUModel] = element(default=None)
|
||||
vendor:Optional[str] = element(default=None)
|
||||
topology:Optional[CPUTopology] = element(default=None)
|
||||
cache:Optional[CPUCache] = element(default=None)
|
||||
maxphysaddr:Optional[CPUMaxphysaddr] = element(default=None)
|
||||
feature:Optional[CPUFeature] = element(default=None)
|
||||
numa:Optional[CPUNuma] = element(default=None)
|
||||
|
||||
class PMSuspendToDisk(BaseXmlModel, search_mode='ordered'):
|
||||
enabled:YesNoEnum = attr(default=YesNoEnum.NO)
|
||||
|
||||
class PMSuspendToMem(BaseXmlModel, search_mode='ordered'):
|
||||
enabled:YesNoEnum = attr(default=YesNoEnum.NO)
|
||||
|
||||
class PM(BaseXmlModel, search_mode='ordered'):
|
||||
suspend_to_disk:PMSuspendToDisk = element(tag="suspend-to-disk", default=PMSuspendToDisk())
|
||||
suspend_to_mem:PMSuspendToMem = element(tag="suspend-to-mem", default=PMSuspendToMem())
|
||||
|
||||
class FeaturesKVMHidden(BaseXmlModel, search_mode='ordered'):
|
||||
state:OnOffEnum = attr()
|
||||
|
||||
class FeaturesKVMHintDedicated(BaseXmlModel, search_mode='ordered'):
|
||||
state:OnOffEnum = attr()
|
||||
|
||||
class FeaturesKVMPollControl(BaseXmlModel, search_mode='ordered'):
|
||||
state:OnOffEnum = attr()
|
||||
|
||||
class FeaturesKVMPvIpi(BaseXmlModel, search_mode='ordered'):
|
||||
state:OnOffEnum = attr()
|
||||
|
||||
class FeaturesKVMDirtyRing(BaseXmlModel, search_mode='ordered'):
|
||||
state:OnOffEnum = attr()
|
||||
size:int = attr()
|
||||
|
||||
class FeaturesKVM(BaseXmlModel, search_mode='ordered'):
|
||||
hidden:Optional[FeaturesKVMHidden] = element(default=None)
|
||||
hint_dedicated:Optional[FeaturesKVMHintDedicated] = element(tag="hint-dedicated", default=None)
|
||||
poll_control:Optional[FeaturesKVMPollControl] = element(tag="poll-control", default=None)
|
||||
pv_ipi:Optional[FeaturesKVMPvIpi] = element(tag="pv-ipi", default=None)
|
||||
dirty_ring:Optional[FeaturesKVMDirtyRing] = element(tag="dirty-ring", default=None)
|
||||
|
||||
class Features(BaseXmlModel, search_mode='ordered'):
|
||||
pae:str = element(default=None)
|
||||
acpi:str = element(default="enable")
|
||||
apic:str = element(default="enable")
|
||||
hap:str = element(default=None)
|
||||
privnet:str = element(default=None)
|
||||
kvm:FeaturesKVM = element(default=None)
|
||||
|
||||
class ClockTimerCatchup(BaseXmlModel, search_mode='ordered'):
|
||||
threshold:int = attr()
|
||||
slew:int = attr()
|
||||
limit:int = attr()
|
||||
|
||||
class ClockTimer(BaseXmlModel, search_mode='ordered'):
|
||||
class nameEnum(str, Enum):
|
||||
kvmclock = "kvmclock"
|
||||
|
||||
class tickpolicyEnum(str, Enum):
|
||||
delay = "delay"
|
||||
catchup = "catchup"
|
||||
merge = "merge"
|
||||
discard = "discard"
|
||||
|
||||
class trackEnum(str, Enum):
|
||||
boot = "boot"
|
||||
guest = "guest"
|
||||
wall = "wall"
|
||||
|
||||
name:nameEnum = attr(default=nameEnum.kvmclock)
|
||||
tickpolicy:Optional[tickpolicyEnum] = attr(default=None)
|
||||
track:Optional[trackEnum] = attr(default=None)
|
||||
catchup:Optional[ClockTimerCatchup] = element(default=None)
|
||||
|
||||
class Clock(BaseXmlModel, search_mode='ordered'):
|
||||
class offsetEnum(str, Enum):
|
||||
utc = "utc"
|
||||
localtime = "localtime"
|
||||
timezone = "timezone"
|
||||
variable = "variable"
|
||||
absolute = "absolute"
|
||||
|
||||
offset:offsetEnum = attr(default=offsetEnum.localtime)
|
||||
timer:ClockTimer = element(default=None)
|
||||
|
||||
class Perf(BaseXmlModel, search_mode='ordered'):
|
||||
"""Not implemented"""
|
||||
pass
|
||||
|
||||
class DevicesDiskDriver(BaseXmlModel, search_mode='ordered'):
|
||||
class nameEnum(str, Enum):
|
||||
qemu = "qemu"
|
||||
|
||||
class typeEnum(str, Enum):
|
||||
raw = "raw"
|
||||
|
||||
class discardEnum(str, Enum):
|
||||
ignore = "ignore"
|
||||
unmap = "unmap"
|
||||
|
||||
name:nameEnum = attr(default=nameEnum.qemu)
|
||||
type:typeEnum = attr(default=typeEnum.raw)
|
||||
discard:discardEnum = attr(default=discardEnum.unmap)
|
||||
|
||||
class DevicesDiskAuthSecret(BaseXmlModel, search_mode='ordered'):
|
||||
class typeEnum(str, Enum):
|
||||
ceph = "ceph"
|
||||
|
||||
type:typeEnum = attr(default=typeEnum.ceph)
|
||||
uuid:str = attr(default="1")
|
||||
|
||||
class DevicesDiskAuth(BaseXmlModel, search_mode='ordered'):
|
||||
username:str = attr(default="1")
|
||||
secret:DevicesDiskAuthSecret = element(default=DevicesDiskAuthSecret())
|
||||
|
||||
class DevicesDiskSourceHost(BaseXmlModel, search_mode='ordered'):
|
||||
name:str = attr()
|
||||
port:int = attr()
|
||||
|
||||
class DevicesDiskSource(BaseXmlModel, search_mode='ordered'):
|
||||
class protocolEnum(str, Enum):
|
||||
rbd = "rbd"
|
||||
http = "http"
|
||||
https = "https"
|
||||
ftp = "ftp"
|
||||
ftps = "ftps"
|
||||
|
||||
protocol:protocolEnum = attr(default=protocolEnum.rbd)
|
||||
name:str = attr()
|
||||
host:List[DevicesDiskSourceHost] = element(default=None)
|
||||
|
||||
class DevicesDiskTarget(BaseXmlModel, search_mode='ordered'):
|
||||
class busEnum(str, Enum):
|
||||
virtio = "virtio"
|
||||
scsi = "scsi"
|
||||
ide = "ide"
|
||||
|
||||
dev:str = attr()
|
||||
bus:busEnum = attr(default=busEnum.virtio)
|
||||
|
||||
class DevicesDisk(BaseXmlModel, search_mode='ordered'):
|
||||
"""
|
||||
Disk: CEPH Storage only
|
||||
CDROM: Network Only
|
||||
"""
|
||||
|
||||
class typeEnum(str, Enum):
|
||||
network = "network"
|
||||
|
||||
class deviceEnum(str, Enum):
|
||||
disk = "disk"
|
||||
cdrom = "cdrom"
|
||||
|
||||
type:typeEnum = attr(default=typeEnum.network)
|
||||
device:deviceEnum = attr(default=deviceEnum.disk)
|
||||
driver:DevicesDiskDriver = element(default=DevicesDiskDriver())
|
||||
auth:DevicesDiskAuth = element(default=None)
|
||||
source:DevicesDiskSource = element(default=None)
|
||||
target:DevicesDiskTarget = element(default=None)
|
||||
serial:UUID4 = element(default_factory=uuid4)
|
||||
|
||||
class DevicesInterfaceMAC(BaseXmlModel, search_mode='ordered'):
|
||||
address:Optional[str] = attr(default=None)
|
||||
|
||||
class DevicesInterfaceSource(BaseXmlModel, search_mode='ordered'):
|
||||
bridge:str = attr(default="br-int")
|
||||
|
||||
class DevicesInterfaceVirtualPortParameters(BaseXmlModel, search_mode='ordered'):
|
||||
interfaceid:UUID4 = attr(default=None)
|
||||
|
||||
class DevicesInterfaceVirtualport(BaseXmlModel, search_mode='ordered'):
|
||||
class typeEnum(str, Enum):
|
||||
openvswitch = "openvswitch"
|
||||
|
||||
type:typeEnum = attr(default=typeEnum.openvswitch)
|
||||
parameters:DevicesInterfaceVirtualPortParameters = element(default=DevicesInterfaceVirtualPortParameters())
|
||||
|
||||
class DevicesInterfaceModel(BaseXmlModel, search_mode='ordered'):
|
||||
class typeEnum(str, Enum):
|
||||
virtio = "virtio"
|
||||
|
||||
type:typeEnum = attr(default=typeEnum.virtio)
|
||||
|
||||
class DevicesInterfaceMTU(BaseXmlModel, search_mode='ordered'):
|
||||
mtu:int = attr(default=1500)
|
||||
|
||||
class DevicesInterface(BaseXmlModel, search_mode='ordered'):
|
||||
"""Openvswitch Only"""
|
||||
|
||||
class typeEnum(str, Enum):
|
||||
bridge = "bridge"
|
||||
|
||||
type:typeEnum = attr(default=typeEnum.bridge)
|
||||
mac:DevicesInterfaceMAC = element(default=DevicesInterfaceMAC())
|
||||
source:DevicesInterfaceSource = element(default=DevicesInterfaceSource())
|
||||
virtualport:DevicesInterfaceVirtualport = element(default=DevicesInterfaceVirtualport())
|
||||
model:DevicesInterfaceModel = element(default=DevicesInterfaceModel())
|
||||
mtu:DevicesInterfaceMTU = element(default=DevicesInterfaceMTU())
|
||||
|
||||
class DevicesChannelSource(BaseXmlModel, search_mode='ordered'):
|
||||
class modeEnum(str, Enum):
|
||||
bind = "bind"
|
||||
|
||||
mode:modeEnum = attr(default=modeEnum.bind)
|
||||
path:str = attr(default=None)
|
||||
|
||||
class DevicesChannelTarget(BaseXmlModel, search_mode='ordered'):
|
||||
class typeEnum(str, Enum):
|
||||
virtio = "virtio"
|
||||
|
||||
type:typeEnum = attr(default=typeEnum.virtio)
|
||||
name:str = attr(default="org.qemu.guest_agent.0")
|
||||
|
||||
class DevicesChannel(BaseXmlModel):
|
||||
class typeEnum(str, Enum):
|
||||
unix = "unix"
|
||||
|
||||
type:typeEnum = attr(default=typeEnum.unix)
|
||||
source:DevicesChannelSource = element(default=DevicesChannelSource())
|
||||
target:DevicesChannelTarget = element(default=DevicesChannelTarget())
|
||||
|
||||
class Graphics(BaseXmlModel, search_mode='ordered'):
|
||||
class typeEnum(str, Enum):
|
||||
vnc = "vnc"
|
||||
|
||||
class keymapEnum(str, Enum):
|
||||
ar = "ar"
|
||||
bepo = "bepo"
|
||||
cz = "cz"
|
||||
da = "da"
|
||||
de = "de"
|
||||
de_ch = "de-ch"
|
||||
en_gb = "en-gb"
|
||||
en_us = "en-us"
|
||||
es = "es"
|
||||
et = "et"
|
||||
fi = "fi"
|
||||
fo = "fo"
|
||||
fr = "fr"
|
||||
fr_be = "fr-be"
|
||||
fr_ca = "fr-ca"
|
||||
fr_ch = "fr-ch"
|
||||
hr = "hr"
|
||||
hu = "hu"
|
||||
it = "it"
|
||||
lv = "lv"
|
||||
mk = "mk"
|
||||
nl = "nl"
|
||||
no = "no"
|
||||
pl = "pl"
|
||||
pt = "pt"
|
||||
pt_br = "pt-br"
|
||||
ru = "ru"
|
||||
sl = "sl"
|
||||
sv = "sv"
|
||||
th = "th"
|
||||
tr = "tr"
|
||||
|
||||
type:typeEnum = attr(default=typeEnum.vnc)
|
||||
port:int = attr(default=-1)
|
||||
autoport:YesNoEnum = attr(default=YesNoEnum.YES)
|
||||
websocket:int = attr(default=-1)
|
||||
listen:str = attr(default="0.0.0.0")
|
||||
password:Optional[str] = attr(default=None)
|
||||
keymap:keymapEnum = attr(default=keymapEnum.en_us)
|
||||
powerControl:YesNoEnum = attr(default=YesNoEnum.YES)
|
||||
|
||||
class Audio(BaseXmlModel, search_mode='ordered'):
|
||||
pass
|
||||
|
||||
class VideoModel(BaseXmlModel, search_mode='ordered'):
|
||||
class typeEnum(str, Enum):
|
||||
vga = "vga"
|
||||
cirrus = "cirrus"
|
||||
virtio = "virtio"
|
||||
|
||||
type:typeEnum = attr()
|
||||
vram:int = attr(default=16384)
|
||||
primary:YesNoEnum = attr(default=YesNoEnum.YES)
|
||||
|
||||
class Video(BaseXmlModel, search_mode='ordered'):
|
||||
model:VideoModel = element()
|
||||
|
||||
class Watchdog(BaseXmlModel, search_mode='ordered'):
|
||||
class modelEnum(str, Enum):
|
||||
itco = "itco"
|
||||
|
||||
class actionEnum(str, Enum):
|
||||
reset = "reset"
|
||||
shutdown = "shutdown"
|
||||
poweroff = "poweroff"
|
||||
pause = "pause"
|
||||
none = "none"
|
||||
dump = "dump"
|
||||
inject_nmi = "inject-nmi"
|
||||
|
||||
|
||||
model:modelEnum = attr(default=modelEnum.itco)
|
||||
action:actionEnum = attr(default=actionEnum.reset)
|
||||
|
||||
class TPMBackendEncryption(BaseXmlModel):
|
||||
secret:UUID4 = attr()
|
||||
|
||||
class TPMBackend(BaseXmlModel, search_mode='ordered'):
|
||||
class typeEnum(str, Enum):
|
||||
emulator = "emulator"
|
||||
|
||||
class versionEnum(str, Enum):
|
||||
v12 = "1.2"
|
||||
v20 = "2.0"
|
||||
|
||||
type:typeEnum = attr(default=typeEnum.emulator)
|
||||
version:versionEnum = attr(default=versionEnum.v20)
|
||||
encryption:Optional[TPMBackendEncryption] = element(default=None)
|
||||
|
||||
class TPM(BaseXmlModel, search_mode='ordered'):
|
||||
class modelEnum(str, Enum):
|
||||
tpm_tis = "tpm-tis"
|
||||
tpm_crb = "tpm-crb"
|
||||
|
||||
model:modelEnum = attr(default=modelEnum.tpm_tis)
|
||||
backend:TPMBackend = element(default=TPMBackend())
|
||||
|
||||
class Devices(BaseXmlModel, search_mode='ordered'):
|
||||
emulator:str = element(default="/usr/libexec/qemu-kvm")
|
||||
disk:Optional[List[DevicesDisk]] = element(default=[])
|
||||
interface:Optional[List[DevicesInterface]] = element(default=[])
|
||||
channel:Optional[DevicesChannel] = element(default=None)
|
||||
graphics:Optional[Graphics] = element(default=None)
|
||||
audio:Optional[Audio] = element(default=None)
|
||||
video:Optional[Video] = element(default=None)
|
||||
watchdog:Optional[Watchdog] = element(default=None)
|
||||
tpm:Optional[TPM] = element(default=None)
|
||||
|
||||
class VM(BaseXmlModel, tag='domain', search_mode='ordered'):
|
||||
class on_poweroffEnum(str, Enum):
|
||||
destroy = "destroy"
|
||||
restart = "restart"
|
||||
preserve = "preverse"
|
||||
|
||||
class on_rebootEnum(str, Enum):
|
||||
restart = "restart"
|
||||
preserve = "preverse"
|
||||
|
||||
class on_crashEnum(str, Enum):
|
||||
destroy = "destroy"
|
||||
restart = "restart"
|
||||
preserve = "preverse"
|
||||
|
||||
class on_failurelockEnum(str, Enum):
|
||||
poweroff = "poweroff"
|
||||
restart = "restart"
|
||||
pause = "pause"
|
||||
ignore = "ignore"
|
||||
|
||||
# General metadata
|
||||
uuid:Optional[UUID4] = element(default=None)
|
||||
genid:Optional[UUID4] = element(default=None)
|
||||
title:Optional[str] = element(default=None)
|
||||
description:Optional[str] = element(default=None)
|
||||
metadata:Optional[Metadata] = element(default=None)
|
||||
|
||||
# Memory Allocation
|
||||
maxMemory:Optional[MaxMemory] = element(default=None)
|
||||
memory:Memory = element()
|
||||
currentMemory:Optional[CurrentMemory] = element(default=None)
|
||||
memoryBacking:Optional[MemoryBacking] = element(default=None)
|
||||
memtune:Optional[MemTune] = element(default=None)
|
||||
numatune:Optional[NumaTune] = element(default=None)
|
||||
|
||||
# CPU Allocation
|
||||
vcpu:VCPU = element()
|
||||
vcpus:Optional[List[VCPUS]] = element(default=None)
|
||||
cputune:Optional[CPUTune] = element(default=None)
|
||||
|
||||
# Resource patitioning
|
||||
resource:Optional[Resource] = element(default=None)
|
||||
|
||||
# BIOS BootLoader
|
||||
os:OS = element(default=OS())
|
||||
|
||||
# SMBIOS System Information
|
||||
sysinfo:Sysinfo = element(default=Sysinfo())
|
||||
|
||||
# CPU model and topology
|
||||
cpu:CPU = element(default=CPU())
|
||||
|
||||
# Power Management
|
||||
pm:PM = element(default=None)
|
||||
|
||||
# Hypervisor features
|
||||
features:Features = element(default=Features())
|
||||
|
||||
# Time keeping
|
||||
clock:Clock = element(default=Clock())
|
||||
|
||||
# Events configuration
|
||||
on_poweroff:on_poweroffEnum = element(default=on_poweroffEnum.destroy)
|
||||
on_reboot:on_rebootEnum = element(default=on_rebootEnum.restart)
|
||||
on_crash:on_crashEnum = element(default=on_crashEnum.restart)
|
||||
on_failurelock:on_failurelockEnum = element(default=on_failurelockEnum.ignore)
|
||||
|
||||
# Performance monitoring events
|
||||
perf:Perf = element(default=None)
|
||||
|
||||
# Devices
|
||||
devices:Devices = element(default=Devices())
|
|
@ -0,0 +1,15 @@
|
|||
from enum import Enum
|
||||
|
||||
class YesNoEnum(str, Enum):
|
||||
YES = "yes"
|
||||
NO = "no"
|
||||
|
||||
class OnOffEnum(str, Enum):
|
||||
ON = "on"
|
||||
OFF = "off"
|
||||
|
||||
class UnitEnum(str, Enum):
|
||||
KiB = "KiB"
|
||||
MiB = "MiB"
|
||||
GiB = "GiB"
|
||||
TiB = "TiB"
|
Loading…
Reference in New Issue