---
####################################################################
# WARNING: These are designed specifically for Ansible tests       #
# and should not be used as examples of how to write Ansible roles #
####################################################################

# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
#

- name: Execute shutdown with custom message and delay
  community.general.shutdown:
    delay: 100
    msg: "Custom Message"
  register: shutdown_result
  check_mode: true

- name: Execute shutdown with minus delay
  community.general.shutdown:
    delay: -100
  register: shutdown_result_minus
  check_mode: true

- name: Verify Custom Message except Alpine, AIX
  assert:
    that:
      - '"Custom Message" in shutdown_result["shutdown_command"]'
      - '"Shut down initiated by Ansible" in shutdown_result_minus["shutdown_command"]'
      - '"Custom Message" not in shutdown_result_minus["shutdown_command"]'
  when:
    - 'ansible_os_family not in ["Alpine", "AIX"]'
    - '"systemctl" not in shutdown_result["shutdown_command"]'
    - '"systemctl" not in shutdown_result_minus["shutdown_command"]'

- name: Verify shutdown command is present except Alpine or AIX or systemd
  assert:
    that: '"shutdown" in shutdown_result["shutdown_command"]'
  when:
    - "ansible_os_family != 'Alpine'"
    - "ansible_system != 'VMKernel'"
    - '"systemctl" not in shutdown_result["shutdown_command"]'

- name: Verify shutdown command is present in Alpine except systemd
  assert:
    that: '"poweroff" in shutdown_result["shutdown_command"]'
  when: 
    - "ansible_os_family == 'Alpine'"
    - '"systemctl" not in shutdown_result["shutdown_command"]'


- name: Verify shutdown command is present in VMKernel except systemd
  assert:
    that: '"halt" in shutdown_result["shutdown_command"]'
  when: 
    - "ansible_system == 'VMKernel'"
    - '"systemctl" not in shutdown_result["shutdown_command"]'

- name: Verify shutdown delay is present in minutes in Linux except systemd
  assert:
    that:
      - '"-h 1" in shutdown_result["shutdown_command"]'
      - '"-h 0" in shutdown_result_minus["shutdown_command"]'
  when:
    - "ansible_system == 'Linux'"
    - "ansible_os_family != 'Alpine'"
    - '"systemctl" not in shutdown_result["shutdown_command"]'
    - '"systemctl" not in shutdown_result_minus["shutdown_command"]'

- name: Verify shutdown delay is present in minutes in Void, MacOSX, OpenBSD
  assert:
    that:
      - '"-h +1" in shutdown_result["shutdown_command"]'
      - '"-h +0" in shutdown_result_minus["shutdown_command"]'
  when: ansible_system in ['Void', 'Darwin', 'OpenBSD']

- name: Verify shutdown delay is present in seconds in FreeBSD
  assert:
    that:
      - '"-p +100s" in shutdown_result["shutdown_command"]'
      - '"-p +0s" in shutdown_result_minus["shutdown_command"]'
  when: ansible_system == 'FreeBSD'

- name: Verify shutdown delay is present in seconds in Solaris, SunOS
  assert:
    that:
      - '"-g 100" in shutdown_result["shutdown_command"]'
      - '"-g 0" in shutdown_result_minus["shutdown_command"]'
  when: ansible_system in ['Solaris', 'SunOS']

- name: Verify shutdown delay is present in seconds, VMKernel
  assert:
    that:
      - '"-d 100" in shutdown_result["shutdown_command"]'
      - '"-d 0" in shutdown_result_minus["shutdown_command"]'
  when: ansible_system == 'VMKernel'

- name: Ensure that systemd-sysv is absent in Ubuntu 18 and Debian
  apt:
    name: sytemd-sysv
    state: absent
  when: (ansible_distribution == 'Ubuntu' and ansible_distribution_major_version is version('18', '>=')) or (ansible_distribution == 'Debian')
  register: systemd_sysv_install

- name: Gather package facts
  package_facts:
    manager: apt
  when: (ansible_distribution == 'Ubuntu' and ansible_distribution_major_version is version('18', '>=')) or (ansible_distribution == 'Debian')

- name: Execute shutdown if no systemd-sysv
  community.general.shutdown:
  register: shutdown_result
  check_mode: true
  when: 
    - "(ansible_distribution == 'Ubuntu' and ansible_distribution_major_version is version('18', '>=')) or (ansible_distribution == 'Debian')"
    - '"systemd-sysv" not in ansible_facts.packages'

- name: Install systemd_sysv in case it has been removed in test
  apt:
    name: systemd-sysv
    state: present
  when:
    - "(ansible_distribution == 'Ubuntu' and ansible_distribution_major_version is version('18', '>=')) or (ansible_distribution == 'Debian')"
    - "systemd_sysv_install is changed"
