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/commit-confirm-notify.py | |
| 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/commit-confirm-notify.py')
| -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) | 
