#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright: (c) 2018, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

ANSIBLE_METADATA = {'metadata_version': '1.1',
                    'status': ['preview'],
                    'supported_by': 'core'}

DOCUMENTATION = r'''
module: reboot
short_description: Reboot a machine
description:
     - Reboot a machine, wait for it to go down, come back up, and respond to commands.
version_added: "2.7"
options:
  pre_reboot_delay:
    description:
      - Seconds for shutdown to wait before requesting reboot.
      - 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
  post_reboot_delay:
    description:
      - Seconds to wait after the reboot was successful and the connection was re-established.
      - This is useful if you want wait for something to settle despite your connection already working.
    default: 0
    type: int
  reboot_timeout:
    description:
      - Maximum seconds to wait for machine to reboot and respond to a test command.
      - This timeout is evaluated separately for both network connection and test command success so the
        maximum execution time for the module is twice this amount.
    default: 600
    type: int
  connect_timeout:
    description:
      - Maximum seconds to wait for a successful connection to the managed hosts before trying again.
      - If unspecified, the default setting for the underlying connection plugin is used.
    type: int
  test_command:
    description:
      - Command to run on the rebooted host and expect success from to determine the machine is ready for
        further tasks.
    default: whoami
    type: str
  msg:
    description:
      - Message to display to users before reboot.
    default: Reboot initiated by Ansible
    type: str
notes:
    - For Windows targets, use the M(win_reboot) module instead.
author:
    - Matt Davis (@nitzmahone)
    - Sam Doran (@samdoran)
'''

EXAMPLES = r'''
- name: Unconditionally reboot the machine with all defaults
  reboot:

- name: Reboot a slow machine that might have lots of updates to apply
  reboot:
    reboot_timeout: 3600
'''

RETURN = r'''
rebooted:
  description: true if the machine was rebooted
  returned: always
  type: boolean
  sample: true
elapsed:
  description: The number of seconds that elapsed waiting for the system to be rebooted.
  returned: always
  type: int
  sample: 23
'''
