From 0c202b5867a17936200e40b44a55a2c842e15bb2 Mon Sep 17 00:00:00 2001 From: Chirag Shah Date: Thu, 4 Mar 2021 21:21:13 -0800 Subject: [PATCH] tools: frr-reload capture vtysh msg upon failure Log vtysh message for a failed command. Ticket:2556706 Reviewed By: Testing Done: frr reload fails to delete default bgp instance in presence of bgp vrf instance(s), it captures vtysh message and logs in frr-reload.log logs backend 2021-03-05 05:16:45,623 INFO: Failed to execute no router bgp 5544 2021-03-05 05:16:45,735 INFO: Failed to execute no router bgp 2021-03-05 05:16:45,846 INFO: Failed to execute no router 2021-03-05 05:16:45,846 ERROR: "no router" we failed to remove this command 2021-03-05 05:16:45,847 ERROR: % Cannot delete default BGP instance. Dependent VRF instances exist Signed-off-by: Chirag Shah (cherry picked from commit 641b032e23e614cec8dcbeb993a61f2ff08dfde2) --- tools/frr-reload.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/frr-reload.py b/tools/frr-reload.py index da240e919..e99bd2214 100755 --- a/tools/frr-reload.py +++ b/tools/frr-reload.py @@ -92,7 +92,7 @@ class Vtysh(object): args = ['-c', command] return self._call(args, stdin, stdout, stderr) - def __call__(self, command): + def __call__(self, command, stdouts=None): """ Call a CLI command (e.g. "show running-config") @@ -102,6 +102,8 @@ class Vtysh(object): proc = self._call_cmd(command, stdout=subprocess.PIPE) stdout, stderr = proc.communicate() if proc.wait() != 0: + if stdouts is not None: + stdouts.append(stdout.decode('UTF-8')) raise VtyshException('vtysh returned status %d for command "%s"' % (proc.returncode, command)) return stdout.decode('UTF-8') @@ -1560,9 +1562,10 @@ if __name__ == '__main__': # frr(config-if)# no ip ospf authentication # frr(config-if)# + stdouts = [] while True: try: - vtysh(['configure'] + cmd) + vtysh(['configure'] + cmd, stdouts) except VtyshException: @@ -1575,6 +1578,9 @@ if __name__ == '__main__': if len(last_arg) <= 2: log.error('"%s" we failed to remove this command', ' -- '.join(original_cmd)) + # Log first error msg for original_cmd + if stdouts: + log.error(stdouts[0]) reload_ok = False break -- 2.20.1