]> Frank Brehm's Git Trees - pixelpark/pp-admin-tools.git/commitdiff
Better error handling on requesting the PDNS server.
authorFrank Brehm <frank.brehm@pixelpark.com>
Tue, 16 Jan 2024 16:10:37 +0000 (17:10 +0100)
committerFrank Brehm <frank.brehm@pixelpark.com>
Tue, 16 Jan 2024 16:10:37 +0000 (17:10 +0100)
lib/pp_admintools/app/dns_deploy_zones.py
lib/pp_admintools/app/pdns.py

index 70b82718512db5cdecd9aa709bb998b0a72c58b2..f9388dc12ea5db68006b1c2e3165935193d785c8 100644 (file)
@@ -25,6 +25,8 @@ from pathlib import Path
 from subprocess import PIPE, Popen, TimeoutExpired
 
 # Third party modules
+from fb_pdnstools.errors import PowerDNSHandlerError
+
 from fb_tools.app import BaseApplication
 from fb_tools.common import to_str
 from fb_tools.pidfile import PidFile, PidFileError
@@ -40,7 +42,7 @@ from .. import pp
 from ..config.dns_deploy_zones import DnsDeployZonesConfig
 from ..xlate import XLATOR
 
-__version__ = '0.8.9'
+__version__ = '0.8.10'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
@@ -533,7 +535,13 @@ class PpDeployZonesApp(PpPDNSApplication):
     def generate_zone_config(self, zone_name):
         """Generate configuration block for the given Nameserver."""
         zone = self.zones[zone_name]
-        zone.update()
+        try:
+            zone.update()
+        except PowerDNSHandlerError as e:
+            msg = _('Could not get zone info for {z!r} - {cls}: {msg}').format(
+                z=zone_name, cls=e.__class__.__name__, msg=str(e))
+            LOG.error(msg)
+            self.exit(7)
 
         canonical_name = zone.name_unicode
         match = self.re_ipv4_zone.search(zone.name)
index 0d491187ea0c35e4b312017ca1ce6be1ccde422e..abcadceefcbcb48813d59ff1e90a11bb5c53932f 100644 (file)
@@ -21,6 +21,7 @@ import socket
 # Third party modules
 from fb_pdnstools.errors import PDNSApiNotFoundError
 from fb_pdnstools.errors import PDNSApiValidationError
+from fb_pdnstools.errors import PowerDNSHandlerError
 from fb_pdnstools.server import PowerDNSServer
 from fb_pdnstools.zone import PowerDNSZone
 
@@ -40,7 +41,7 @@ from ..config.pdns import PdnsConfiguration
 # from ..config.pdns import PdnsConfigError, PdnsConfiguration
 from ..xlate import XLATOR
 
-__version__ = '0.9.12'
+__version__ = '0.9.13'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
@@ -470,7 +471,11 @@ class PpPDNSApplication(BaseMailApplication):
         if not self.pdns.initialized:
             raise PpPDNSAppError(_('The PDNS server object is not initialized.'))
 
-        return self.pdns.get_api_zones()
+        try:
+            return self.pdns.get_api_zones()
+        except PowerDNSHandlerError as e:
+            LOG.error('{cls}: {msg}'.format(cls=e.__class__.__name__, msg=str(e)))
+            self.exit(5)
 
     # -------------------------------------------------------------------------
     def get_api_zone(self, zone_name):
@@ -494,6 +499,10 @@ class PpPDNSApplication(BaseMailApplication):
         except (PDNSApiNotFoundError, PDNSApiValidationError):
             LOG.error(_('The given zone {} was not found.').format(zout))
             return None
+        except PowerDNSHandlerError as e:
+            LOG.error('{cls}: {msg}'.format(cls=e.__class__.__name__, msg=str(e)))
+            self.exit(6)
+
         if self.verbose > 2:
             LOG.debug(_('Got a response:') + '\n' + pp(json_response))