summaryrefslogtreecommitdiff
path: root/packages/frr/patches/0003-tools-frr-reload-capture-vtysh-msg-upon-failure.patch
blob: cbd1acb0480ec5553554d780a38c692b3285bc0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
From 0c202b5867a17936200e40b44a55a2c842e15bb2 Mon Sep 17 00:00:00 2001
From: Chirag Shah <chirag@nvidia.com>
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 <chirag@nvidia.com>

(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