tools: frr-reload.py should exit non-zero when "set src x.x.x.x" fails

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Daniel Walton 2017-05-17 00:14:37 +00:00
parent 9b938b384c
commit 825be4c27b
2 changed files with 30 additions and 6 deletions

View File

@ -346,6 +346,7 @@ end
"debug ", "debug ",
"dump ", "dump ",
"enable ", "enable ",
"frr ",
"hostname ", "hostname ",
"ip ", "ip ",
"ipv6 ", "ipv6 ",
@ -888,11 +889,15 @@ if __name__ == '__main__':
# Verify the new config file is valid # Verify the new config file is valid
if not os.path.isfile(args.filename): if not os.path.isfile(args.filename):
print "Filename %s does not exist" % args.filename msg = "Filename %s does not exist" % args.filename
print msg
log.error(msg)
sys.exit(1) sys.exit(1)
if not os.path.getsize(args.filename): if not os.path.getsize(args.filename):
print "Filename %s is an empty file" % args.filename msg = "Filename %s is an empty file" % args.filename
print msg
log.error(msg)
sys.exit(1) sys.exit(1)
# Verify that 'service integrated-vtysh-config' is configured # Verify that 'service integrated-vtysh-config' is configured
@ -909,7 +914,9 @@ if __name__ == '__main__':
break break
if not service_integrated_vtysh_config: if not service_integrated_vtysh_config:
print "'service integrated-vtysh-config' is not configured, this is required for 'service frr reload'" msg = "'service integrated-vtysh-config' is not configured, this is required for 'service frr reload'"
print msg
log.error(msg)
sys.exit(1) sys.exit(1)
if args.debug: if args.debug:
@ -920,6 +927,7 @@ if __name__ == '__main__':
# Create a Config object from the config generated by newconf # Create a Config object from the config generated by newconf
newconf = Config() newconf = Config()
newconf.load_from_file(args.filename) newconf.load_from_file(args.filename)
reload_ok = True
if args.test: if args.test:
@ -1029,7 +1037,7 @@ if __name__ == '__main__':
# 'no ip ospf authentication message-digest 1.1.1.1' in # 'no ip ospf authentication message-digest 1.1.1.1' in
# our example above # our example above
# - Split that last entry by whitespace and drop the last word # - Split that last entry by whitespace and drop the last word
log.warning('Failed to execute %s', ' '.join(cmd)) log.info('Failed to execute %s', ' '.join(cmd))
last_arg = cmd[-1].split(' ') last_arg = cmd[-1].split(' ')
if len(last_arg) <= 2: if len(last_arg) <= 2:
@ -1064,9 +1072,25 @@ if __name__ == '__main__':
with open(filename, 'w') as fh: with open(filename, 'w') as fh:
for line in lines_to_configure: for line in lines_to_configure:
fh.write(line + '\n') fh.write(line + '\n')
subprocess.call(['/usr/bin/vtysh', '-f', filename])
output = subprocess.check_output(['/usr/bin/vtysh', '-f', filename])
# exit non-zero if we see these errors
for x in ('BGP instance name and AS number mismatch',
'BGP instance is already running',
'% not a local address'):
for line in output.splitlines():
if x in line:
msg = "ERROR: %s" % x
log.error(msg)
print msg
reload_ok = False
os.unlink(filename) os.unlink(filename)
# Make these changes persistent # Make these changes persistent
if args.overwrite or args.filename != '/etc/frr/frr.conf': if args.overwrite or args.filename != '/etc/frr/frr.conf':
subprocess.call(['/usr/bin/vtysh', '-c', 'write']) subprocess.call(['/usr/bin/vtysh', '-c', 'write'])
if not reload_ok:
sys.exit(1)

View File

@ -635,7 +635,7 @@ vtysh_mark_file (const char *filename)
} }
} }
/* This is the end */ /* This is the end */
fprintf(stdout, "end\n"); fprintf(stdout, "\nend\n");
vty_close(vty); vty_close(vty);
XFREE(MTYPE_VTYSH_CMD, vty_buf_copy); XFREE(MTYPE_VTYSH_CMD, vty_buf_copy);