mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-10-24 04:54:00 -07:00
Add reboot action plugin (#35205)
* Update docs * Add reboot action plugin Refactor win_reboot so it is subclassed from reboot * Use new connection methods * Test fixes * Use better uptime command for Linux Use who -b to get the last time the system was booted rather than uptime, which changes every second. * Use distribution specefic commands and flags Query the managed node to determien its distribution, then set the appropriate command and flags. * Tune debug messages a bit * Update module docs with details about pre_reboot_delay s docs * Ensure that post_reboot_delay is a positive number * Remove the stringification * Add integration tests * Make sure aliases are honored * Handle systems that have an incorrect last boot time SystemD and fakehw-clock do not properly set the last boot time and instead always set it to epoch. Use a different command if that is the case. * Copyright and encoding fixes * Minor fixes based on feedback * Add exponential backoff to sucess check method * Update integration test Skip the integration test if it would try to reboot the control node. We need a new mechanism to account for this scenario in ansible-test, so tests must currently be run manually for this plugin. * Update integration test Skip the integration test if it would try to reboot the control node. We need a new mechanism to account for this scenario in ansible-test, so tests must currently be run manually for this plugin. * Fail early with running with local connection * Update docs based on feedback * minor refactoring, state mgmt changes
This commit is contained in:
parent
60e3af42d5
commit
4d9218cec4
5 changed files with 459 additions and 175 deletions
2
test/integration/targets/reboot/aliases
Normal file
2
test/integration/targets/reboot/aliases
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# No current way to split controller and test node
|
||||
unsupported
|
||||
50
test/integration/targets/reboot/tasks/main.yml
Normal file
50
test/integration/targets/reboot/tasks/main.yml
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
- block:
|
||||
# This block can be removed once we have a mechanism in ansible-test to separate
|
||||
# the control node from the managed node.
|
||||
- block:
|
||||
- name: Write temp file for sanity checking this is not the controller
|
||||
copy:
|
||||
content: 'I am the control node'
|
||||
dest: /tmp/Anything-Nutlike-Nuzzle-Plow-Overdue
|
||||
delegate_to: localhost
|
||||
|
||||
- name: See if the temp file exists on the managed node
|
||||
stat:
|
||||
path: /tmp/Anything-Nutlike-Nuzzle-Plow-Overdue
|
||||
register: controller_temp_file
|
||||
|
||||
- name: EXPECT FAILURE | Check if the managed node is the control node
|
||||
assert:
|
||||
msg: >
|
||||
This test must be run manually by modifying the inventory file to point
|
||||
"{{ inventory_hostname }}" at a remote host rather than "{{ ansible_host }}".
|
||||
Skipping reboot test.
|
||||
that:
|
||||
- not controller_temp_file.stat.exists
|
||||
|
||||
- name: Get current boot time
|
||||
command: who -b
|
||||
register: before_boot_time
|
||||
|
||||
- name: Reboot with default settings
|
||||
reboot:
|
||||
register: reboot_result
|
||||
|
||||
- name: Get current boot time
|
||||
command: who -b
|
||||
register: after_boot_time
|
||||
|
||||
- name: Enusure system was actually rebooted
|
||||
assert:
|
||||
that:
|
||||
- reboot_result is changed
|
||||
- reboot_result.elapsed > 10
|
||||
- before_boot_time.stdout != after_boot_time.stdout
|
||||
|
||||
always:
|
||||
- name: Cleanup temp file
|
||||
file:
|
||||
path: /tmp/Anything-Nutlike-Nuzzle-Plow-Overdue
|
||||
state: absent
|
||||
|
||||
when: ansible_virtualization_type | default('') != 'docker'
|
||||
Loading…
Add table
Add a link
Reference in a new issue