"""Power control for host.""" import logging from ..coresys import CoreSysAttributes from ..exceptions import HostNotSupportedError _LOGGER: logging.Logger = logging.getLogger(__name__) MANAGER = "manager" HOSTNAME = "hostname" class SystemControl(CoreSysAttributes): """Handle host power controls.""" def __init__(self, coresys): """Initialize host power handling.""" self.coresys = coresys def _check_dbus(self, flag): """Check if systemd is connect or raise error.""" if flag == MANAGER and self.sys_dbus.systemd.is_connected: return if flag == HOSTNAME and self.sys_dbus.hostname.is_connected: return _LOGGER.error("No %s D-Bus connection available", flag) raise HostNotSupportedError() async def reboot(self): """Reboot host system.""" self._check_dbus(MANAGER) _LOGGER.info("Initialize host reboot over systemd") try: await self.sys_core.shutdown() finally: await self.sys_dbus.systemd.reboot() async def shutdown(self): """Shutdown host system.""" self._check_dbus(MANAGER) _LOGGER.info("Initialize host power off over systemd") try: await self.sys_core.shutdown() finally: await self.sys_dbus.systemd.power_off() async def set_hostname(self, hostname): """Set local a new Hostname.""" self._check_dbus(HOSTNAME) _LOGGER.info("Set hostname %s", hostname) await self.sys_dbus.hostname.set_static_hostname(hostname) await self.sys_host.info.update()