diff options
author | Nataliia S. <81954790+natali-rs1985@users.noreply.github.com> | 2024-10-21 10:30:38 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-21 10:30:38 +0300 |
commit | 18a9cec3deb6cc2dc49020a89208dc70defe9822 (patch) | |
tree | be0bcfa93d52d559da03bc97eb928fc508bacd7d /src/helpers | |
parent | 5c76607a9faef1fb5dc07459a38d37261ce988c1 (diff) | |
parent | fa272f5297177354714ee7867104f43e4e322df6 (diff) | |
download | vyos-1x-18a9cec3deb6cc2dc49020a89208dc70defe9822.tar.gz vyos-1x-18a9cec3deb6cc2dc49020a89208dc70defe9822.zip |
Merge branch 'current' into T6695
Diffstat (limited to 'src/helpers')
-rwxr-xr-x | src/helpers/commit-confirm-notify.py | 48 |
1 files changed, 37 insertions, 11 deletions
diff --git a/src/helpers/commit-confirm-notify.py b/src/helpers/commit-confirm-notify.py index 8d7626c78..af6167651 100755 --- a/src/helpers/commit-confirm-notify.py +++ b/src/helpers/commit-confirm-notify.py @@ -2,30 +2,56 @@ import os import sys import time +from argparse import ArgumentParser # Minutes before reboot to trigger notification. intervals = [1, 5, 15, 60] -def notify(interval): - s = "" if interval == 1 else "s" +parser = ArgumentParser() +parser.add_argument( + 'minutes', type=int, help='minutes before rollback to trigger notification' +) +parser.add_argument( + '--reboot', action='store_true', help="use 'soft' rollback instead of reboot" +) + + +def notify(interval, reboot=False): + s = '' if interval == 1 else 's' time.sleep((minutes - interval) * 60) - message = ('"[commit-confirm] System is going to reboot in ' - f'{interval} minute{s} to rollback the last commit.\n' - 'Confirm your changes to cancel the reboot."') - os.system("wall -n " + message) + if reboot: + message = ( + '"[commit-confirm] System will reboot in ' + f'{interval} minute{s}\nto rollback the last commit.\n' + 'Confirm your changes to cancel the reboot."' + ) + os.system('wall -n ' + message) + else: + message = ( + '"[commit-confirm] System will reload previous config in ' + f'{interval} minute{s}\nto rollback the last commit.\n' + 'Confirm your changes to cancel the reload."' + ) + os.system('wall -n ' + message) + -if __name__ == "__main__": +if __name__ == '__main__': # Must be run as root to call wall(1) without a banner. - if len(sys.argv) != 2 or os.getuid() != 0: + if os.getuid() != 0: print('This script requires superuser privileges.', file=sys.stderr) exit(1) - minutes = int(sys.argv[1]) + + args = parser.parse_args() + + minutes = args.minutes + reboot = args.reboot + # Drop the argument from the list so that the notification # doesn't kick in immediately. if minutes in intervals: intervals.remove(minutes) for interval in sorted(intervals, reverse=True): if minutes >= interval: - notify(interval) - minutes -= (minutes - interval) + notify(interval, reboot=reboot) + minutes -= minutes - interval exit(0) |