topogen: added JSON output support for vtysh_cmd

Allow vtysh_cmd() to convert JSON output to Python data structures.
This feature will be used to get vtysh JSON outputs for tests
comparsions.

Usage example:

```py
router = get_topogen().gears['r1']
json_output = router.vtysh_cmd('show ip ospf json', isjson=True)
json_cmp(json_output, {'important_key': 'important_value'})
```
This commit is contained in:
Rafael Zalamena 2017-06-28 15:30:44 -03:00 committed by Donald Sharp
parent 09e21b4487
commit a40daddc4c

View file

@ -40,6 +40,7 @@ Basic usage instructions:
import os
import sys
import json
from mininet.net import Mininet
from mininet.log import setLogLevel
@ -388,7 +389,7 @@ class TopoRouter(TopoGear):
"""
return self.tgen.net[self.name].startRouter()
def vtysh_cmd(self, command):
def vtysh_cmd(self, command, isjson=False):
"""
Runs the provided command string in the vty shell and returns a string
with the response.
@ -401,7 +402,11 @@ class TopoRouter(TopoGear):
return self.vtysh_multicmd(command)
vtysh_command = 'vtysh -c "{}" 2>/dev/null'.format(command)
return self.run(vtysh_command)
output = self.run(vtysh_command)
if isjson is False:
return output
return json.loads(output)
def vtysh_multicmd(self, commands, pretty_output=True):
"""