From 519192f0d82aa920b9870547b92d8f1a22837158 Mon Sep 17 00:00:00 2001 From: Runar Borge Date: Thu, 16 Aug 2018 20:00:43 +0200 Subject: T689: Rewritten poweroff/reboot script to use systemd-shutdownd service --- op-mode-definitions/poweroff.xml | 34 +++++++++++++++++++++------------- op-mode-definitions/reboot.xml | 28 ++++++++++++++++++---------- 2 files changed, 39 insertions(+), 23 deletions(-) (limited to 'op-mode-definitions') diff --git a/op-mode-definitions/poweroff.xml b/op-mode-definitions/poweroff.xml index 07cea7927..e6cab0222 100644 --- a/op-mode-definitions/poweroff.xml +++ b/op-mode-definitions/poweroff.xml @@ -2,37 +2,45 @@ - Poweroff the system + Shutdown the system - /opt/vyatta/bin/sudo-users/vyatta-poweroff.pl --action poweroff + sudo ${vyos_op_scripts_dir}/powerctrl.py --poweroff now + - Poweroff the system without confirmation + Shutdown the system imidiently - /opt/vyatta/bin/sudo-users/vyatta-poweroff.pl --action poweroff --now + sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --poweroff now - + - Cancel a pending poweroff + Cancel a pending reboot - /opt/vyatta/bin/sudo-users/vyatta-poweroff.pl --action poweroff_cancel + sudo ${vyos_op_scripts_dir}/powerctrl.py --cancel + + + Reboot in X minutes + + Minutes + + + sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --poweroff '$3' + + - Poweroff at a specific time + Reboot at a specific time HH:MM - MMDDYY - midnight - noon - /opt/vyatta/bin/sudo-users/vyatta-poweroff.pl --action poweroff_at --at_time '$3' - + sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --poweroff '$3' + diff --git a/op-mode-definitions/reboot.xml b/op-mode-definitions/reboot.xml index 2c5a85d95..ebdd5691a 100644 --- a/op-mode-definitions/reboot.xml +++ b/op-mode-definitions/reboot.xml @@ -4,35 +4,43 @@ Reboot the system - /opt/vyatta/bin/sudo-users/vyatta-reboot.pl --action reboot + sudo ${vyos_op_scripts_dir}/powerctrl.py --reboot now + - Reboot the system without confirmation + Reboot the system imidiently - /opt/vyatta/bin/sudo-users/vyatta-reboot.pl --action reboot --now + sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --reboot now - + Cancel a pending reboot - /opt/vyatta/bin/sudo-users/vyatta-reboot.pl --action reboot_cancel + sudo ${vyos_op_scripts_dir}/powerctrl.py --cancel + + + Reboot in X minutes + + Minutes + + + sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --reboot $3 + + Reboot at a specific time HH:MM - MMDDYY - midnight - noon - /opt/vyatta/bin/sudo-users/vyatta-reboot.pl --action reboot_at --at_time '$3' - + sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --reboot $3 + -- cgit v1.2.3 From 0a9bcf9a7706e4bc7f4884419790c8e3f1601d39 Mon Sep 17 00:00:00 2001 From: Runar Borge Date: Thu, 16 Aug 2018 22:44:51 +0200 Subject: T689: Undoing help text change on reboot and poweroff commands --- op-mode-definitions/poweroff.xml | 4 ++-- op-mode-definitions/reboot.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'op-mode-definitions') diff --git a/op-mode-definitions/poweroff.xml b/op-mode-definitions/poweroff.xml index e6cab0222..725d10225 100644 --- a/op-mode-definitions/poweroff.xml +++ b/op-mode-definitions/poweroff.xml @@ -2,14 +2,14 @@ - Shutdown the system + Poweroff the system sudo ${vyos_op_scripts_dir}/powerctrl.py --poweroff now - Shutdown the system imidiently + Poweroff the system without confirmation sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --poweroff now diff --git a/op-mode-definitions/reboot.xml b/op-mode-definitions/reboot.xml index ebdd5691a..214a39633 100644 --- a/op-mode-definitions/reboot.xml +++ b/op-mode-definitions/reboot.xml @@ -9,7 +9,7 @@ - Reboot the system imidiently + Reboot the system without confirmation sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --reboot now -- cgit v1.2.3 From ce35b9830e538bce50b42272bb457201dfae102e Mon Sep 17 00:00:00 2001 From: Runar Borge Date: Fri, 17 Aug 2018 00:22:16 +0200 Subject: T689: Added support for specifying date on poweroff and reboot --- op-mode-definitions/poweroff.xml | 24 ++++++++++++----- op-mode-definitions/reboot.xml | 16 ++++++++--- src/op_mode/powerctrl.py | 58 +++++++++++++++++++++++++++++++++------- 3 files changed, 79 insertions(+), 19 deletions(-) (limited to 'op-mode-definitions') diff --git a/op-mode-definitions/poweroff.xml b/op-mode-definitions/poweroff.xml index 725d10225..bb2eedcb1 100644 --- a/op-mode-definitions/poweroff.xml +++ b/op-mode-definitions/poweroff.xml @@ -16,31 +16,41 @@ - Cancel a pending reboot + Cancel a pending poweroff sudo ${vyos_op_scripts_dir}/powerctrl.py --cancel - Reboot in X minutes + Poweroff in X minutes - Minutes + <Minutes> - sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --poweroff '$3' + sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --poweroff $3 $4 - Reboot at a specific time + Poweroff at a specific time HH:MM - sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --poweroff '$3' - + sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --poweroff $3 + + + + Poweroff at a specific date + + <DDMMYYYY> <DD/MM/YYYY> <DD.MM.YYYY> <DD:MM:YYYY> + + + sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --poweroff $3 $5 + + diff --git a/op-mode-definitions/reboot.xml b/op-mode-definitions/reboot.xml index 214a39633..703304ff8 100644 --- a/op-mode-definitions/reboot.xml +++ b/op-mode-definitions/reboot.xml @@ -25,10 +25,10 @@ Reboot in X minutes - Minutes + <Minutes> - sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --reboot $3 + sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --reboot $3 $4 @@ -40,7 +40,17 @@ sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --reboot $3 - + + + + Reboot at a specific date + + <DDMMYYYY> <DD/MM/YYYY> <DD.MM.YYYY> <DD:MM:YYYY> + + + sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --reboot $3 $5 + + diff --git a/src/op_mode/powerctrl.py b/src/op_mode/powerctrl.py index 0200a09e8..f73d6c005 100755 --- a/src/op_mode/powerctrl.py +++ b/src/op_mode/powerctrl.py @@ -23,10 +23,25 @@ def yn(msg, default=False): def valid_time(s): try: - a = datetime.strptime(s, "%H:%M") - return True + return datetime.strptime(s, "%H:%M").time() except ValueError: - return False + return None + + +def valid_date(s): + try: + return datetime.strptime(s, "%d%m%Y").date() + except ValueError: + try: + return datetime.strptime(s, "%d/%m/%Y").date() + except ValueError: + try: + return datetime.strptime(s, "%d.%m.%Y").date() + except ValueError: + try: + return datetime.strptime(s, "%d:%m:%Y").date() + except ValueError: + return None def check_shutdown(): @@ -51,11 +66,36 @@ def execute_shutdown(time, reboot = True, ask=True): if not yn("Are you sure you want to %s this system?" % action): sys.exit(0) - if not (time.isdigit() or valid_time(time) or time.lower() == "now"): - sys.exit("minutes (45), valid time (12:34) or 'now' needs to be specified") - action = "-r" if reboot else "-P" - cmd = check_output(["/sbin/shutdown",action,time],stderr=STDOUT) + + if len(time) == 0: + cmd = check_output(["/sbin/shutdown",action,"now"],stderr=STDOUT) + print(cmd.decode().split(",",1)[0]) + return + + # Try to extract date from the first argument + if len(time) == 1: + time = time[0].split(" ",1) + + if len(time) == 1: + ts=valid_time(time[0]) + if time[0].isdigit() or valid_time(time[0]): + cmd = check_output(["/sbin/shutdown",action,time[0]],stderr=STDOUT) + else: + sys.exit("Timestamp needs to be in format of 12:34") + + elif len(time) == 2: + ts = valid_time(time[0]) + ds = valid_date(time[1]) + if ts and ds: + t = datetime.combine(ds, ts) + td = t-datetime.now() + t2 = 1+int(td.total_seconds())//60 # Get total minutes + cmd = check_output(["/sbin/shutdown",action,str(t2)],stderr=STDOUT) + else: + sys.exit("Timestamp needs to be in format of 12:34\nDatestamp in the format of DD.MM.YY") + else: + sys.exit("Could not decode time and date") print(cmd.decode().split(",",1)[0]) @@ -68,12 +108,12 @@ def main(): action = parser.add_mutually_exclusive_group(required=True) action.add_argument("--reboot", "-r", help="Reboot the system", - nargs="?", + nargs="*", metavar="Minutes|HH:MM") action.add_argument("--poweroff", "-p", help="Poweroff the system", - nargs="?", + nargs="*", metavar="Minutes|HH:MM") action.add_argument("--cancel", "-c", -- cgit v1.2.3 From 86088fa6e0816cb7e79ce497a89df2d004bc4764 Mon Sep 17 00:00:00 2001 From: Runar Borge Date: Fri, 17 Aug 2018 00:32:09 +0200 Subject: T689: poweroff/reboot added brackets around HH:MM help text --- op-mode-definitions/poweroff.xml | 2 +- op-mode-definitions/reboot.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'op-mode-definitions') diff --git a/op-mode-definitions/poweroff.xml b/op-mode-definitions/poweroff.xml index bb2eedcb1..ff27f4f4d 100644 --- a/op-mode-definitions/poweroff.xml +++ b/op-mode-definitions/poweroff.xml @@ -36,7 +36,7 @@ Poweroff at a specific time - HH:MM + <HH:MM> sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --poweroff $3 diff --git a/op-mode-definitions/reboot.xml b/op-mode-definitions/reboot.xml index 703304ff8..340c8ca82 100644 --- a/op-mode-definitions/reboot.xml +++ b/op-mode-definitions/reboot.xml @@ -36,7 +36,7 @@ Reboot at a specific time - HH:MM + <HH:MM> sudo ${vyos_op_scripts_dir}/powerctrl.py --yes --reboot $3 -- cgit v1.2.3