# -*- coding: utf-8 -*- from typing import Dict, Any, Tuple import logging from customer_local_ops import Ops, OpType LOG = logging.getLogger(__name__) class OSISPConfig: """Mixin class representing common functionality and constants for ISPConfig between all OSes""" class ISPConfig(Ops): op_type = OpType.CONTROL_PANEL os_op_instance = None def change_hostname(self, payload: Dict[str, Any], *args: Any) -> Any: """Changes the server hostname via an op for the local operating system and an op for ispconfig :param payload: A dict containing input data """ LOG.info("ISPConfig.change_hostname start") os_op = payload["os_op"] op_name = 'change_hostname' if self.os_op_instance is None: self.os_op_instance = self.get_os_op(os_op) LOG.info("ISPConfig.change_hostname deferring to OS operation: %s.%s", str( os_op), op_name) success, os_result = self._change_os_hostname(payload) if not success: return self.build_result_from_other_result((success, os_result), op_name) LOG.info("Change the hostname in ISPConfig.") self.os_op_instance.change_ispconfig_hostname(payload) return True, self.build_result_dict('hostname changed successfully', '', op_name) def _change_os_hostname(self, payload: Dict[str, Any]) -> Tuple[bool, Any]: """Changes the server hostname via an op for the local operating system :param payload: A dict containing input data """ os_result = self.os_op_instance.change_hostname(payload) data = self.get_result_data(os_result) LOG.info("ISPConfig.change_hostname os_op_result - %s - %s - %s", data.success, data.outs, data.errs) return data.as_tuple() def change_password(self, payload: Dict[str, Any], *args: Any) -> Any: """Changes the user password via an op for the local operating system and an op for ispconfig :param payload: A dict containing input data """ LOG.info("ISPConfig.change_password start") os_op = payload["os_op"] op_name = 'change_password' LOG.info("ISPConfig.change_password deferring to OS operation: %s.%s", str( os_op), op_name) if self.os_op_instance is None: self.os_op_instance = self.get_os_op(os_op) success, os_result = self._change_os_password(payload) if not success: return self.build_result_from_other_result((success, os_result), op_name) self.os_op_instance.change_ispconfig_password(payload, op_name) return True, self.build_result_dict('password changed successfully', '', op_name) def _change_os_password(self, payload: Dict[str, Any]) -> Tuple[bool, Any]: """Changes the user password via an op for the local operating system :param payload: A dict containing input data """ os_result = self.os_op_instance.change_password(payload) data = self.get_result_data(os_result) LOG.info("ISPConfig.change_password os_op_result - %s - %s - %s", data.success, data.outs, data.errs) return data.as_tuple()