Fixes unicode decode error when saving IOS router configs. Fixes #115.

This commit is contained in:
grossmj
2015-03-28 18:09:53 -06:00
parent 3c917c59fb
commit 056ff14437
2 changed files with 13 additions and 12 deletions

View File

@ -26,6 +26,7 @@ import sys
import os
import glob
import base64
import binascii
import logging
log = logging.getLogger(__name__)
@ -1183,8 +1184,7 @@ class Router(BaseVM):
slot_number=slot_number))
if adapter is None:
raise DynamipsError("Adapter is missing in {slot_number}".format( slot_number=slot_number))
raise DynamipsError("Adapter is missing in slot {slot_number}".format(slot_number=slot_number))
if not adapter.port_exists(port_number):
raise DynamipsError("Port {port_number} does not exist in adapter {adapter}".format(adapter=adapter,
@ -1221,7 +1221,8 @@ class Router(BaseVM):
raise DynamipsError('Slot {slot_number} does not exist on router "{name}"'.format(name=self._name,
slot_number=slot_number))
if adapter is None:
raise DynamipsError("Adapter is missing in slot {slot_number}".format(slot_number=slot_number))
if not adapter.port_exists(port_number):
raise DynamipsError("Port {port_number} does not exist in adapter {adapter}".format(adapter=adapter,
@ -1494,24 +1495,24 @@ class Router(BaseVM):
startup_config_base64, private_config_base64 = yield from self.extract_config()
if startup_config_base64:
try:
config = base64.decodebytes(startup_config_base64.encode("utf-8")).decode("utf-8")
config = base64.b64decode(startup_config_base64).decode(errors='replace')
config = "!\n" + config.replace("\r", "")
config_path = os.path.join(module_workdir, self.startup_config)
with open(config_path, "w") as f:
log.info("saving startup-config to {}".format(self.startup_config))
f.write(config)
except OSError as e:
except (binascii.Error, OSError) as e:
raise DynamipsError("Could not save the startup configuration {}: {}".format(config_path, e))
if private_config_base64:
try:
config = base64.decodebytes(private_config_base64.encode("utf-8")).decode("utf-8")
config = base64.b64decode(private_config_base64).decode(errors='replace')
config = "!\n" + config.replace("\r", "")
config_path = os.path.join(module_workdir, self.private_config)
with open(config_path, "w") as f:
log.info("saving private-config to {}".format(self.private_config))
f.write(config)
except OSError as e:
except (binascii.Error, OSError) as e:
raise DynamipsError("Could not save the private configuration {}: {}".format(config_path, e))
def delete(self):