lib: add and use Router.checkRouterVersion (based on bdpd version)

Signed-off-by: Lou Berger <lberger@labn.net>
This commit is contained in:
Lou Berger 2018-06-30 15:18:33 -04:00 committed by Donald Sharp
parent 95460a6b7e
commit fb80b81b26
2 changed files with 36 additions and 17 deletions

View File

@ -776,23 +776,7 @@ class TopoRouter(TopoGear):
Usage example: router.has_version('>', '1.0')
"""
rversion = self.version_info()['version']
if rversion is None:
return False
result = topotest.version_cmp(rversion, version)
if cmpop == '>=':
return result >= 0
if cmpop == '>':
return result > 0
if cmpop == '=':
return result == 0
if cmpop == '<':
return result < 0
if cmpop == '<':
return result < 0
if cmpop == '<=':
return result <= 0
return self.tgen.net[self.name].checkRouterVersion(cmpop, version)
def has_type(self, rtype):
"""

View File

@ -489,6 +489,7 @@ class Router(Node):
'ldpd': 0, 'eigrpd': 0, 'nhrpd': 0}
self.daemons_options = {'zebra': ''}
self.reportCores = True
self.version = None
def _config_frr(self, **params):
"Configure FRR binaries"
@ -688,6 +689,9 @@ class Router(Node):
self.cmd('umask 000')
#Re-enable to allow for report per run
self.reportCores = True
if self.version == None:
self.version = self.cmd(os.path.join(self.daemondir, 'bgpd')+' -v').split()[2]
logger.info('{}: running version: {}'.format(self.name,self.version))
# Start Zebra first
if self.daemons['zebra'] == 1:
zebra_path = os.path.join(self.daemondir, 'zebra')
@ -797,6 +801,37 @@ class Router(Node):
return "%s: Daemon %s not running" % (self.name, daemon)
return ""
def checkRouterVersion(self, cmpop, version):
"""
Compares router version using operation `cmpop` with `version`.
Valid `cmpop` values:
* `>=`: has the same version or greater
* '>': has greater version
* '=': has the same version
* '<': has a lesser version
* '<=': has the same version or lesser
Usage example: router.checkRouterVersion('>', '1.0')
"""
rversion = self.version
if rversion is None:
return False
result = version_cmp(rversion, version)
if cmpop == '>=':
return result >= 0
if cmpop == '>':
return result > 0
if cmpop == '=':
return result == 0
if cmpop == '<':
return result < 0
if cmpop == '<':
return result < 0
if cmpop == '<=':
return result <= 0
def get_ipv6_linklocal(self):
"Get LinkLocal Addresses from interfaces"