From 2769a4e2cc3aadbf91e7f4f83ef57b7ebe43442a Mon Sep 17 00:00:00 2001 From: Daniel Jakots Date: Fri, 28 Sep 2018 16:07:44 -0400 Subject: [PATCH] Add support for OpenBSD (#46147) --- changelogs/fragments/reboot_openbsd_support.yaml | 2 ++ lib/ansible/modules/system/reboot.py | 2 +- lib/ansible/plugins/action/reboot.py | 16 ++++++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 changelogs/fragments/reboot_openbsd_support.yaml diff --git a/changelogs/fragments/reboot_openbsd_support.yaml b/changelogs/fragments/reboot_openbsd_support.yaml new file mode 100644 index 00000000000..563c634b9b0 --- /dev/null +++ b/changelogs/fragments/reboot_openbsd_support.yaml @@ -0,0 +1,2 @@ +bugfixes: + - reboot - add support for OpenBSD diff --git a/lib/ansible/modules/system/reboot.py b/lib/ansible/modules/system/reboot.py index ad611f5fb98..2277d7092e8 100644 --- a/lib/ansible/modules/system/reboot.py +++ b/lib/ansible/modules/system/reboot.py @@ -20,7 +20,7 @@ options: pre_reboot_delay: description: - Seconds for shutdown to wait before requesting reboot. - - On Linux and macOS, this is converted to minutes and rounded down. If less than 60, it will be set to 0. + - On Linux, macOS and OpenBSD, this is converted to minutes and rounded down. If less than 60, it will be set to 0. - On Solaris and FreeBSD, this will be seconds. default: 0 type: int diff --git a/lib/ansible/plugins/action/reboot.py b/lib/ansible/plugins/action/reboot.py index a440ff3875b..19c8943dddc 100644 --- a/lib/ansible/plugins/action/reboot.py +++ b/lib/ansible/plugins/action/reboot.py @@ -42,18 +42,24 @@ class ActionModule(ActionBase): DEPRECATED_ARGS = {} + BOOT_TIME_COMMANDS = { + 'openbsd': "/sbin/sysctl kern.boottime", + } + SHUTDOWN_COMMANDS = { 'linux': DEFAULT_SHUTDOWN_COMMAND, 'freebsd': DEFAULT_SHUTDOWN_COMMAND, 'sunos': '/usr/sbin/shutdown', 'darwin': '/sbin/shutdown', + 'openbsd': DEFAULT_SHUTDOWN_COMMAND, } SHUTDOWN_COMMAND_ARGS = { 'linux': '-r {delay_min} "{message}"', 'freebsd': '-r +{delay_sec}s "{message}"', 'sunos': '-y -g {delay_sec} -r "{message}"', - 'darwin': '-r +{delay_min_macos} "{message}"' + 'darwin': '-r +{delay_min_macos} "{message}"', + 'openbsd': '-r +{delay_min} "{message}"', } def __init__(self, *args, **kwargs): @@ -96,7 +102,13 @@ class ActionModule(ActionBase): def get_system_boot_time(self): stdout = u'' stderr = u'' - command_result = self._low_level_execute_command(self.DEFAULT_BOOT_TIME_COMMAND, sudoable=self.DEFAULT_SUDOABLE) + + # Determine the system distribution in order to use the correct shutdown command arguments + uname_result = self._low_level_execute_command('uname') + distribution = uname_result['stdout'].strip().lower() + + boot_time_command = self.BOOT_TIME_COMMANDS.get(distribution, self.DEFAULT_BOOT_TIME_COMMAND) + command_result = self._low_level_execute_command(boot_time_command, sudoable=self.DEFAULT_SUDOABLE) # For single board computers, e.g., Raspberry Pi, that lack a real time clock and are using fake-hwclock # launched by systemd, the update of utmp/wtmp is not done correctly.