def run(api, args, logger) -> int: """ Run the trigger via this method, meaning in this case that depending on the settings dns and/or dhcp services are restarted. :param api: The api to resolve settings. :param args: This parameter is not used currently. :param logger: The logger to audit the action with. :return: The return code of the service restarts. """ settings = api.settings() which_dhcp_module = module_loader.get_module_name("dhcp", "module").strip() which_dns_module = module_loader.get_module_name("dns", "module").strip() # special handling as we don't want to restart it twice has_restarted_dnsmasq = False rc = 0 if settings.manage_dhcp: if which_dhcp_module == "managers.isc": if settings.restart_dhcp: rc = utils.subprocess_call(logger, "dhcpd -t -q", shell=True) if rc != 0: logger.error("dhcpd -t failed") return 1 dhcp_service_name = utils.dhcp_service_name() dhcp_restart_command = "service %s restart" % dhcp_service_name rc = utils.subprocess_call(logger, dhcp_restart_command, shell=True) elif which_dhcp_module == "managers.dnsmasq": if settings.restart_dhcp: rc = utils.subprocess_call(logger, "service dnsmasq restart") has_restarted_dnsmasq = True else: logger.error("unknown DHCP engine: %s" % which_dhcp_module) rc = 411 if settings.manage_dns and settings.restart_dns: if which_dns_module == "managers.bind": named_service_name = utils.named_service_name() dns_restart_command = "service %s restart" % named_service_name rc = utils.subprocess_call(logger, dns_restart_command, shell=True) elif which_dns_module == "managers.dnsmasq" and not has_restarted_dnsmasq: rc = utils.subprocess_call(logger, "service dnsmasq restart", shell=True) elif which_dns_module == "managers.dnsmasq" and has_restarted_dnsmasq: rc = 0 elif which_dns_module == "managers.ndjbdns": # N-DJBDNS picks up configuration changes automatically and does not need to be restarted. pass else: logger.error("unknown DNS engine: %s" % which_dns_module) rc = 412 return rc
def run(api, args, logger): settings = api.settings() manage_dhcp = str(settings.manage_dhcp).lower() manage_dns = str(settings.manage_dns).lower() restart_dhcp = str(settings.restart_dhcp).lower() restart_dns = str(settings.restart_dns).lower() which_dhcp_module = module_loader.get_module_name("dhcp", "module").strip() which_dns_module = module_loader.get_module_name("dns", "module").strip() # special handling as we don't want to restart it twice has_restarted_dnsmasq = False rc = 0 if manage_dhcp != "0": if which_dhcp_module == "manage_isc": if restart_dhcp != "0": rc = utils.subprocess_call(logger, "dhcpd -t -q", shell=True) if rc != 0: logger.error("dhcpd -t failed") return 1 dhcp_service_name = utils.dhcp_service_name(api) dhcp_restart_command = "service %s restart" % dhcp_service_name rc = utils.subprocess_call(logger, dhcp_restart_command, shell=True) elif which_dhcp_module == "manage_dnsmasq": if restart_dhcp != "0": rc = utils.subprocess_call(logger, "service dnsmasq restart") has_restarted_dnsmasq = True else: logger.error("unknown DHCP engine: %s" % which_dhcp_module) rc = 411 if manage_dns != "0" and restart_dns != "0": if which_dns_module == "manage_bind": named_service_name = utils.named_service_name(api) dns_restart_command = "service %s restart" % named_service_name rc = utils.subprocess_call(logger, dns_restart_command, shell=True) elif which_dns_module == "manage_dnsmasq" and not has_restarted_dnsmasq: rc = utils.subprocess_call(logger, "service dnsmasq restart", shell=True) elif which_dns_module == "manage_dnsmasq" and has_restarted_dnsmasq: rc = 0 elif which_dns_module == "manage_ndjbdns": # N-DJBDNS picks up configuration changes automatically and does not need to be restarted. pass else: logger.error("unknown DNS engine: %s" % which_dns_module) rc = 412 return rc
def sync_dhcp(self): restart_dhcp = str(self.settings.restart_dhcp).lower() which_dhcp_module = module_loader.get_module_name("dhcp", "module").strip() if self.settings.manage_dhcp: self.write_dhcp() if which_dhcp_module == "manage_isc": service_name = utils.dhcp_service_name(self.api) if restart_dhcp != "0": rc = utils.subprocess_call(self.logger, "dhcpd -t -q", shell=True) if rc != 0: self.logger.error("dhcpd -t failed") return False service_restart = "service %s restart" % service_name rc = utils.subprocess_call(self.logger, service_restart, shell=True) if rc != 0: self.logger.error("%s failed" % service_name) return False elif which_dhcp_module == "manage_dnsmasq": if restart_dhcp != "0": rc = utils.subprocess_call(self.logger, "service dnsmasq restart") if rc != 0: self.logger.error("service dnsmasq restart failed") return False return True
def hashfun(text): """ Converts a str object to a hash which was configured in modules.conf of the cobbler settings. :param text: The text to hash. :type text: str :return: The hash of the text. This should output the same hash when entered the same text. """ hashfunction = get_module_name("authentication", "hash_algorithm", "sha3_512") if hashfunction == "sha3_224": hashalgorithm = hashlib.sha3_224(text.encode('utf-8')) elif hashfunction == "sha3_384": hashalgorithm = hashlib.sha3_384(text.encode('utf-8')) elif hashfunction == "sha3_256": hashalgorithm = hashlib.sha3_256(text.encode('utf-8')) elif hashfunction == "sha3_512": hashalgorithm = hashlib.sha3_512(text.encode('utf-8')) elif hashfunction == "blake2b": hashalgorithm = hashlib.blake2b(text.encode('utf-8')) elif hashfunction == "blake2s": hashalgorithm = hashlib.blake2s(text.encode('utf-8')) elif hashfunction == "shake_128": hashalgorithm = hashlib.shake_128(text.encode('utf-8')) elif hashfunction == "shake_256": hashalgorithm = hashlib.shake_256(text.encode('utf-8')) else: errortext = "The hashfunction (Currently: %s) must be one of the defined in /etc/cobbler/modules.conf!" \ % hashfunction raise ValueError(errortext) return hashalgorithm.hexdigest()
def sync_dhcp(self): restart_dhcp = str(self.settings.restart_dhcp).lower() which_dhcp_module = module_loader.get_module_name("dhcp", "module").strip() if self.settings.manage_dhcp: self.write_dhcp() if which_dhcp_module == "manage_isc": service_name = utils.dhcp_service_name(self.api) if restart_dhcp != "0": rc = utils.subprocess_call(self.logger, "dhcpd -t -q", shell=True) if rc != 0: error_msg = "dhcpd -t failed" self.logger.error(error_msg) raise CX(error_msg) service_restart = "service %s restart" % service_name rc = utils.subprocess_call(self.logger, service_restart, shell=True) if rc != 0: error_msg = "%s failed" % service_name self.logger.error(error_msg) raise CX(error_msg) elif which_dhcp_module == "manage_dnsmasq": if restart_dhcp != "0": rc = utils.subprocess_call(self.logger, "service dnsmasq restart") if rc != 0: error_msg = "service dnsmasq restart failed" self.logger.error(error_msg) raise CX(error_msg)
def test_get_module_name(module_section, fallback_name, expected_result, expected_exception): # Arrange -> Done in fixtures # Act with expected_exception: result_name = module_loader.get_module_name(module_section, "module", fallback_name) # Assert assert result_name == expected_result
def get_module_name_from_file(self, section, name, fallback=None): """ Looks up a module the same as get_module_from_file but returns the module name rather than the module itself """ return module_loader.get_module_name(section, name, fallback)