forked from Mirror/frr
tests: keep revisions of configs
Signed-off-by: Christian Hopps <chopps@labn.net>
This commit is contained in:
parent
1973df1d39
commit
04464749b6
|
@ -488,6 +488,9 @@ def reset_config_on_routers(tgen, routerName=None):
|
||||||
|
|
||||||
logger.debug("Entering API: reset_config_on_routers")
|
logger.debug("Entering API: reset_config_on_routers")
|
||||||
|
|
||||||
|
tgen.cfg_gen += 1
|
||||||
|
gen = tgen.cfg_gen
|
||||||
|
|
||||||
# Trim the router list if needed
|
# Trim the router list if needed
|
||||||
router_list = tgen.routers()
|
router_list = tgen.routers()
|
||||||
if routerName:
|
if routerName:
|
||||||
|
@ -496,9 +499,10 @@ def reset_config_on_routers(tgen, routerName=None):
|
||||||
return True
|
return True
|
||||||
router_list = { routerName: router_list[routerName] }
|
router_list = { routerName: router_list[routerName] }
|
||||||
|
|
||||||
delta_fmt = tgen.logdir + "/{}/delta.conf"
|
delta_fmt = tgen.logdir + "/{}/delta-{}.conf"
|
||||||
init_cfg_fmt = tgen.logdir + "/{}/frr_json_initial.conf"
|
# FRRCFG_BKUP_FILE
|
||||||
run_cfg_fmt = tgen.logdir + "/{}/frr.sav"
|
target_cfg_fmt = tgen.logdir + "/{}/frr_json_initial.conf"
|
||||||
|
run_cfg_fmt = tgen.logdir + "/{}/frr-{}.sav"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Get all running configs in parallel
|
# Get all running configs in parallel
|
||||||
|
@ -509,7 +513,7 @@ def reset_config_on_routers(tgen, routerName=None):
|
||||||
procs[rname] = router_list[rname].popen(
|
procs[rname] = router_list[rname].popen(
|
||||||
["/usr/bin/env", "vtysh", "-c", "show running-config no-header"],
|
["/usr/bin/env", "vtysh", "-c", "show running-config no-header"],
|
||||||
stdin=None,
|
stdin=None,
|
||||||
stdout=open(run_cfg_fmt.format(rname), "w"),
|
stdout=open(run_cfg_fmt.format(rname, gen), "w"),
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
)
|
)
|
||||||
for rname, p in procs.items():
|
for rname, p in procs.items():
|
||||||
|
@ -523,16 +527,16 @@ def reset_config_on_routers(tgen, routerName=None):
|
||||||
#
|
#
|
||||||
procs = {}
|
procs = {}
|
||||||
for rname in router_list:
|
for rname in router_list:
|
||||||
logger.info("Generating delta for router %s to new configuration", rname)
|
logger.info("Generating delta for router %s to new configuration (gen %d)", rname, gen)
|
||||||
procs[rname] = tgen.net.popen(
|
procs[rname] = tgen.net.popen(
|
||||||
[ "/usr/lib/frr/frr-reload.py",
|
[ "/usr/lib/frr/frr-reload.py",
|
||||||
"--test-reset",
|
"--test-reset",
|
||||||
"--input",
|
"--input",
|
||||||
run_cfg_fmt.format(rname),
|
run_cfg_fmt.format(rname, gen),
|
||||||
"--test",
|
"--test",
|
||||||
init_cfg_fmt.format(rname) ],
|
target_cfg_fmt.format(rname) ],
|
||||||
stdin=None,
|
stdin=None,
|
||||||
stdout=open(delta_fmt.format(rname), "w"),
|
stdout=open(delta_fmt.format(rname, gen), "w"),
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
)
|
)
|
||||||
for rname, p in procs.items():
|
for rname, p in procs.items():
|
||||||
|
@ -549,14 +553,14 @@ def reset_config_on_routers(tgen, routerName=None):
|
||||||
logger.info("Applying delta config on router %s", rname)
|
logger.info("Applying delta config on router %s", rname)
|
||||||
|
|
||||||
procs[rname] = router_list[rname].popen(
|
procs[rname] = router_list[rname].popen(
|
||||||
["/usr/bin/env", "vtysh", "-f", delta_fmt.format(rname)],
|
["/usr/bin/env", "vtysh", "-f", delta_fmt.format(rname, gen)],
|
||||||
stdin=None,
|
stdin=None,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.STDOUT,
|
stderr=subprocess.STDOUT,
|
||||||
)
|
)
|
||||||
for rname, p in procs.items():
|
for rname, p in procs.items():
|
||||||
output, _ = p.communicate()
|
output, _ = p.communicate()
|
||||||
vtysh_command = "vtysh -f {}".format(delta_fmt.format(rname))
|
vtysh_command = "vtysh -f {}".format(delta_fmt.format(rname, gen))
|
||||||
if not p.returncode:
|
if not p.returncode:
|
||||||
router_list[rname].logger.info(
|
router_list[rname].logger.info(
|
||||||
'\nvtysh config apply => "{}"\nvtysh output <= "{}"'.format(vtysh_command, output)
|
'\nvtysh config apply => "{}"\nvtysh output <= "{}"'.format(vtysh_command, output)
|
||||||
|
@ -615,6 +619,9 @@ def load_config_to_routers(tgen, routers, save_bkup=False):
|
||||||
|
|
||||||
logger.debug("Entering API: load_config_to_routers")
|
logger.debug("Entering API: load_config_to_routers")
|
||||||
|
|
||||||
|
tgen.cfg_gen += 1
|
||||||
|
gen = tgen.cfg_gen
|
||||||
|
|
||||||
base_router_list = tgen.routers()
|
base_router_list = tgen.routers()
|
||||||
router_list = {}
|
router_list = {}
|
||||||
for router in routers:
|
for router in routers:
|
||||||
|
@ -623,6 +630,7 @@ def load_config_to_routers(tgen, routers, save_bkup=False):
|
||||||
router_list[router] = base_router_list[router]
|
router_list[router] = base_router_list[router]
|
||||||
|
|
||||||
frr_cfg_file_fmt = tgen.logdir + "/{}/" + FRRCFG_FILE
|
frr_cfg_file_fmt = tgen.logdir + "/{}/" + FRRCFG_FILE
|
||||||
|
frr_cfg_save_file_fmt = tgen.logdir + "/{}/{}-" + FRRCFG_FILE
|
||||||
frr_cfg_bkup_fmt = tgen.logdir + "/{}/" + FRRCFG_BKUP_FILE
|
frr_cfg_bkup_fmt = tgen.logdir + "/{}/" + FRRCFG_BKUP_FILE
|
||||||
|
|
||||||
procs = {}
|
procs = {}
|
||||||
|
@ -630,6 +638,7 @@ def load_config_to_routers(tgen, routers, save_bkup=False):
|
||||||
router = router_list[rname]
|
router = router_list[rname]
|
||||||
try:
|
try:
|
||||||
frr_cfg_file = frr_cfg_file_fmt.format(rname)
|
frr_cfg_file = frr_cfg_file_fmt.format(rname)
|
||||||
|
frr_cfg_save_file = frr_cfg_save_file_fmt.format(rname, gen)
|
||||||
frr_cfg_bkup = frr_cfg_bkup_fmt.format(rname)
|
frr_cfg_bkup = frr_cfg_bkup_fmt.format(rname)
|
||||||
with open(frr_cfg_file, "r+") as cfg:
|
with open(frr_cfg_file, "r+") as cfg:
|
||||||
data = cfg.read()
|
data = cfg.read()
|
||||||
|
@ -637,6 +646,9 @@ def load_config_to_routers(tgen, routers, save_bkup=False):
|
||||||
"Applying following configuration on router %s (gen: %d):\n%s",
|
"Applying following configuration on router %s (gen: %d):\n%s",
|
||||||
rname, gen, data
|
rname, gen, data
|
||||||
)
|
)
|
||||||
|
# Always save a copy of what we just did
|
||||||
|
with open(frr_cfg_save_file, "w") as bkup:
|
||||||
|
bkup.write(data)
|
||||||
if save_bkup:
|
if save_bkup:
|
||||||
with open(frr_cfg_bkup, "w") as bkup:
|
with open(frr_cfg_bkup, "w") as bkup:
|
||||||
bkup.write(data)
|
bkup.write(data)
|
||||||
|
|
|
@ -172,6 +172,7 @@ class Topogen(object):
|
||||||
self.exabgp_cmd = None
|
self.exabgp_cmd = None
|
||||||
self._init_topo(topodef)
|
self._init_topo(topodef)
|
||||||
|
|
||||||
|
|
||||||
logger.info("loading topology: {}".format(self.modname))
|
logger.info("loading topology: {}".format(self.modname))
|
||||||
|
|
||||||
# @staticmethod
|
# @staticmethod
|
||||||
|
|
Loading…
Reference in a new issue