Source code for cobbler.items.options.virt

"""
Virtualization option management for Cobbler items.
"""

from typing import TYPE_CHECKING, Any, Union

from cobbler import enums, validate
from cobbler.items.options.base import ItemOption

if TYPE_CHECKING:
    from cobbler.api import CobblerAPI
    from cobbler.items.image import Image
    from cobbler.items.profile import Profile
    from cobbler.items.system import System

    InheritableProperty = property
    LazyProperty = property
else:
    from cobbler.decorator import InheritableProperty, LazyProperty


[docs] class VirtOption(ItemOption[Union["Image", "Profile", "System"]]): """ Option class for managing virtualization settings for Cobbler Image, Profile, and System items. Provides properties for auto boot, CPU core count, disk driver, RAM, and other virtualization options. """ def __init__( self, api: "CobblerAPI", item: Union["Image", "Profile", "System"], **kwargs: Any ) -> None: super().__init__(api=api, item=item, **kwargs) self._auto_boot: Union[bool, str] = enums.VALUE_INHERITED self._cpus: Union[int, str] = enums.VALUE_INHERITED self._disk_driver = enums.VirtDiskDrivers.INHERITED self._file_size: Union[float, str] = enums.VALUE_INHERITED self._path = enums.VALUE_INHERITED self._pxe_boot = False self._ram: Union[int, str] = enums.VALUE_INHERITED self._type = enums.VirtType.INHERITED if len(kwargs) > 0: self.from_dict(kwargs) @property def parent_name(self) -> str: return "virt" @InheritableProperty def auto_boot(self) -> bool: """ auto_boot property. .. note:: This property can be set to ``<<inherit>>``. :getter: Returns the value for ``auto_boot``. :setter: Sets the value for the property ``auto_boot``. """ return self._resolve([self.parent_name, "auto_boot"]) @auto_boot.setter def auto_boot(self, value: Union[bool, str]): """ Setter for the auto_boot of the System class. :param value: Weather the VM should automatically boot or not. """ if value == enums.VALUE_INHERITED: self._auto_boot = enums.VALUE_INHERITED return # TODO: An Image cannot inherit from anything self._auto_boot = validate.validate_virt_auto_boot(value) @InheritableProperty def cpus(self) -> int: """ cpus property. .. note:: This property can be set to ``<<inherit>>``. :getter: Returns the value for ``virt_cpus``. :setter: Sets the value for the property ``virt_cpus``. """ return self._resolve([self.parent_name, "cpus"]) @cpus.setter def cpus(self, num: Union[int, str]): """ Setter for the cpus of the System class. :param num: The new value for the number of CPU cores. """ if num == enums.VALUE_INHERITED: self._cpus = enums.VALUE_INHERITED return self._cpus = validate.validate_virt_cpus(num) @InheritableProperty def file_size(self) -> float: """ file_size property. .. note:: This property can be set to ``<<inherit>>``. :getter: Returns the value for ``file_size``. :setter: Sets the value for the property ``file_size``. """ return self._resolve([self.parent_name, "file_size"]) @file_size.setter def file_size(self, num: float): """ Setter for the file_size of the System class. :param num: """ self._file_size = validate.validate_virt_file_size(num) @InheritableProperty def disk_driver(self) -> enums.VirtDiskDrivers: """ disk_driver property. .. note:: This property can be set to ``<<inherit>>``. :getter: Returns the value for ``disk_driver``. :setter: Sets the value for the property ``disk_driver``. """ return self._resolve_enum( [self.parent_name, "disk_driver"], enums.VirtDiskDrivers ) @disk_driver.setter def disk_driver(self, driver: Union[str, enums.VirtDiskDrivers]): """ Setter for the disk_driver of the System class. :param driver: The new disk driver for the virtual disk. """ self._disk_driver = enums.VirtDiskDrivers.to_enum(driver) @LazyProperty def pxe_boot(self) -> bool: """ pxe_boot property. :getter: Returns the value for ``pxe_boot``. :setter: Sets the value for the property ``pxe_boot``. """ return self._pxe_boot @pxe_boot.setter def pxe_boot(self, num: bool): """ Setter for the pxe_boot of the System class. :param num: """ self._pxe_boot = validate.validate_virt_pxe_boot(num) @InheritableProperty def ram(self) -> int: """ ram property. .. note:: This property can be set to ``<<inherit>>``. :getter: Returns the value for ``ram``. :setter: Sets the value for the property ``ram``. """ return self._resolve([self.parent_name, "ram"]) @ram.setter def ram(self, num: Union[int, str]): """ Setter for the ram of the System class. :param num: The new amount of RAM in MBs. """ self._ram = validate.validate_virt_ram(num) @InheritableProperty def type(self) -> enums.VirtType: """ type property. .. note:: This property can be set to ``<<inherit>>``. :getter: Returns the value for ``type``. :setter: Sets the value for the property ``type``. """ return self._resolve_enum([self.parent_name, "type"], enums.VirtType) @type.setter def type(self, vtype: Union[enums.VirtType, str]): """ Setter for the type of the System class. :param vtype: The new virtual type. """ self._type = enums.VirtType.to_enum(vtype) @InheritableProperty def path(self) -> str: """ path property. .. note:: This property can be set to ``<<inherit>>``. :getter: Returns the value for ``path``. :setter: Sets the value for the property ``path``. """ if self._item.TYPE_NAME in ("profile", "image"): # type: ignore return self._path return self._resolve([self.parent_name, "path"]) @path.setter def path(self, path: str): """ Setter for the path of the System class. :param path: The new path. """ if self._item.TYPE_NAME in ("profile", "image") and path == enums.VALUE_INHERITED: # type: ignore raise ValueError("Profiles and Images cannot set virt.path as inherited!") self._path = validate.validate_virt_path( path, for_system=self._item.TYPE_NAME == "system" # type: ignore )