2013-11-21 21:52:05 +00:00
|
|
|
#
|
2016-08-08 19:36:31 +00:00
|
|
|
# This playbook lets you safely reboot a virthost and all it's guests.
|
|
|
|
#
|
2013-03-04 22:37:13 +00:00
|
|
|
# requires --extra-vars="target=somevhost fqdn"
|
2015-07-22 21:52:30 +00:00
|
|
|
# Might add nodns=true or nonagios=true to the extra vars
|
2012-11-21 21:09:19 +00:00
|
|
|
|
2024-11-25 18:24:56 +10:00
|
|
|
# General overview:
|
2012-11-21 17:56:10 +00:00
|
|
|
# talk to the vhost
|
|
|
|
# get back list of instances
|
|
|
|
# add each of their hostnames to an addhoc group
|
|
|
|
# halt each of them in a second play
|
2012-11-21 21:09:19 +00:00
|
|
|
# wait for them to die
|
2012-11-21 17:56:10 +00:00
|
|
|
# third play, reboot the vhost
|
|
|
|
# wait for vhost to come back
|
2012-11-21 21:09:19 +00:00
|
|
|
|
2016-08-08 19:36:31 +00:00
|
|
|
# TODO: Figure out how to compare virt info pre and post boot.
|
2012-11-21 17:56:10 +00:00
|
|
|
|
2024-11-25 18:24:56 +10:00
|
|
|
---
|
2012-11-21 17:56:10 +00:00
|
|
|
- name: find instances
|
2024-09-30 10:01:06 -07:00
|
|
|
vars_prompt:
|
2024-11-25 18:24:56 +10:00
|
|
|
- name: target
|
2025-03-25 19:22:40 -04:00
|
|
|
prompt: What is the target vhost (to reboot)
|
2024-11-25 18:24:56 +10:00
|
|
|
private: false
|
2025-03-25 19:22:40 -04:00
|
|
|
# Use a simple regexp to ignore spaces people might accidentally paste.
|
|
|
|
hosts: "{{ target | regex_search('[-a-z0-9.]+')}}"
|
2024-11-25 18:24:56 +10:00
|
|
|
gather_facts: false
|
2012-11-21 17:56:10 +00:00
|
|
|
user: root
|
|
|
|
|
|
|
|
tasks:
|
|
|
|
- name: get list of guests
|
2018-01-05 12:25:23 +00:00
|
|
|
virt: command=list_vms state=running
|
2012-11-21 17:56:10 +00:00
|
|
|
register: vmlist
|
2012-11-21 17:59:07 +00:00
|
|
|
|
2013-11-21 21:52:05 +00:00
|
|
|
# - name: get info on guests (prereboot)
|
|
|
|
# virt: command=info
|
|
|
|
# register: vminfo_pre
|
|
|
|
|
2012-11-21 21:09:19 +00:00
|
|
|
- name: add them to myvms_new group
|
2013-11-21 22:07:02 +00:00
|
|
|
local_action: add_host hostname={{ item }} groupname=myvms_new
|
2016-11-29 01:45:38 +00:00
|
|
|
with_items: "{{ vmlist.list_vms }}"
|
2012-11-21 17:56:10 +00:00
|
|
|
|
2024-09-30 10:01:06 -07:00
|
|
|
- name: add the vmhost to target group
|
2025-03-25 20:36:02 -04:00
|
|
|
# Use a simple regexp to ignore spaces people might accidentally paste.
|
|
|
|
local_action: add_host hostname={{ target | regex_search('[-a-z0-9.]+') }} groupname=target
|
2024-09-30 10:01:06 -07:00
|
|
|
|
2014-12-15 21:36:50 +00:00
|
|
|
# Call out to another playbook. Disable any proxies that may live here
|
2023-08-14 14:10:16 -07:00
|
|
|
- name: update proxy dns if needed
|
|
|
|
import_playbook: update-proxy-dns.yml
|
2023-05-19 09:53:27 -07:00
|
|
|
vars:
|
|
|
|
status: enable
|
|
|
|
proxies: myvms_new:&proxies
|
2017-01-24 20:00:30 +00:00
|
|
|
when: nodns is not defined or not "true" in nodns
|
2014-12-15 21:36:50 +00:00
|
|
|
|
2012-11-21 17:56:10 +00:00
|
|
|
- name: halt instances
|
|
|
|
hosts: myvms_new
|
|
|
|
user: root
|
2024-11-25 18:24:56 +10:00
|
|
|
gather_facts: false
|
2013-01-28 21:27:18 +00:00
|
|
|
serial: 1
|
2012-11-21 17:56:10 +00:00
|
|
|
|
|
|
|
tasks:
|
2024-09-30 10:41:51 -07:00
|
|
|
|
2013-11-21 21:52:05 +00:00
|
|
|
- name: schedule regular host downtime
|
2015-05-04 14:38:03 +00:00
|
|
|
nagios: action=downtime minutes=30 service=host host={{ inventory_hostname_short }}{{ env_suffix }}
|
2020-06-14 14:14:31 -07:00
|
|
|
delegate_to: noc01.iad2.fedoraproject.org
|
2013-05-07 21:50:45 +00:00
|
|
|
ignore_errors: true
|
2015-12-15 20:25:54 +00:00
|
|
|
when: nonagios is not defined or not nonagios
|
2013-01-28 21:27:18 +00:00
|
|
|
|
2022-03-29 10:15:31 -07:00
|
|
|
- name: shutdown vms
|
|
|
|
virt: command=shutdown name={{ inventory_hostname }}
|
2012-11-21 18:45:20 +00:00
|
|
|
ignore_errors: true
|
2024-09-30 10:39:29 -07:00
|
|
|
delegate_to: "{{ hostvars[groups['target'][0]]['ansible_fqdn'] }}"
|
2012-11-21 18:45:20 +00:00
|
|
|
|
2013-11-21 10:24:17 +00:00
|
|
|
- name: wait for the whole set to die.
|
|
|
|
hosts: myvms_new
|
2024-11-25 18:24:56 +10:00
|
|
|
gather_facts: false
|
2013-11-21 10:24:17 +00:00
|
|
|
user: root
|
|
|
|
|
|
|
|
tasks:
|
2012-11-21 18:45:20 +00:00
|
|
|
- name: wait for them to die
|
2013-11-21 21:52:05 +00:00
|
|
|
local_action: wait_for port=22 delay=30 timeout=300 state=stopped host={{ inventory_hostname }}
|
2013-11-21 10:24:17 +00:00
|
|
|
|
2012-11-21 18:22:03 +00:00
|
|
|
- name: reboot vhost
|
2024-09-30 10:01:06 -07:00
|
|
|
hosts: "target"
|
2024-11-25 18:24:56 +10:00
|
|
|
gather_facts: false
|
2012-11-21 18:22:03 +00:00
|
|
|
user: root
|
|
|
|
|
|
|
|
tasks:
|
2013-03-01 16:24:16 +00:00
|
|
|
- name: tell nagios to shush
|
2015-05-04 14:38:03 +00:00
|
|
|
nagios: action=downtime minutes=60 service=host host={{ inventory_hostname_short }}{{ env_suffix }}
|
2020-06-14 14:14:31 -07:00
|
|
|
delegate_to: noc01.iad2.fedoraproject.org
|
2013-05-07 21:50:45 +00:00
|
|
|
ignore_errors: true
|
2015-12-15 20:25:54 +00:00
|
|
|
when: nonagios is not defined or not nonagios
|
2013-01-28 21:27:18 +00:00
|
|
|
|
2024-10-01 18:27:14 -04:00
|
|
|
# With drive firmware and sometimes needed to poke things, make this 30m
|
2013-11-21 21:52:05 +00:00
|
|
|
- name: reboot the virthost
|
2024-10-01 18:27:14 -04:00
|
|
|
reboot: reboot_timeout=1800
|
2012-11-21 18:45:20 +00:00
|
|
|
|
2013-12-19 20:25:13 +00:00
|
|
|
- name: wait for libvirtd to come back on the virthost
|
2023-03-27 15:24:31 -07:00
|
|
|
wait_for: path=/run/libvirt/libvirt-sock state=present
|
2013-12-19 20:25:13 +00:00
|
|
|
|
2012-11-21 18:58:50 +00:00
|
|
|
- name: look up vmlist
|
2013-11-21 21:52:05 +00:00
|
|
|
virt: command=list_vms
|
2012-11-21 18:45:20 +00:00
|
|
|
register: newvmlist
|
2012-11-21 21:09:19 +00:00
|
|
|
|
2018-10-03 03:34:03 +00:00
|
|
|
- name: add them to myvms_postreboot group
|
|
|
|
local_action: add_host hostname={{ item }} groupname=myvms_postreboot
|
|
|
|
with_items: "{{ newvmlist.list_vms }}"
|
|
|
|
|
2018-11-06 21:22:45 +00:00
|
|
|
# - name: sync time
|
2024-12-19 11:22:24 +10:00
|
|
|
# ansible.builtin.command: ntpdate -u 1.rhel.pool.ntp.org
|
2013-11-21 21:52:05 +00:00
|
|
|
|
2014-10-01 01:53:33 +00:00
|
|
|
- name: tell nagios to unshush
|
2015-05-04 14:38:03 +00:00
|
|
|
nagios: action=unsilence service=host host={{ inventory_hostname_short }}{{ env_suffix }}
|
2020-06-14 14:14:31 -07:00
|
|
|
delegate_to: noc01.iad2.fedoraproject.org
|
2014-10-01 01:53:33 +00:00
|
|
|
ignore_errors: true
|
2015-12-15 20:25:54 +00:00
|
|
|
when: nonagios is not defined or not nonagios
|
2014-10-01 01:53:33 +00:00
|
|
|
|
2018-10-03 02:25:38 +00:00
|
|
|
- name: post reboot tasks
|
2018-10-03 03:34:03 +00:00
|
|
|
hosts: myvms_postreboot
|
2018-10-03 02:25:38 +00:00
|
|
|
user: root
|
2024-11-25 18:24:56 +10:00
|
|
|
gather_facts: false
|
2018-10-03 02:25:38 +00:00
|
|
|
serial: 1
|
|
|
|
|
2018-10-03 03:21:14 +00:00
|
|
|
tasks:
|
2020-05-31 13:33:53 -04:00
|
|
|
|
2024-10-01 13:58:49 -04:00
|
|
|
- name: Wait for host to come back (ipa or rabbitmq)
|
|
|
|
local_action: wait_for port=22 delay=30 timeout=300 state=started host={{ inventory_hostname }}
|
|
|
|
when: inventory_hostname.startswith(('ipa', 'rabbitmq'))
|
|
|
|
|
2019-05-21 15:56:08 +00:00
|
|
|
- name: restart gssproxy if we rebooted a ipa server
|
|
|
|
service: name=gssproxy state=restarted
|
|
|
|
when: inventory_hostname.startswith('ipa')
|
|
|
|
|
|
|
|
- name: restart rabbitmq if we rebooted a rabbit server
|
|
|
|
service: name=rabbitmq-server state=restarted
|
|
|
|
when: inventory_hostname.startswith('rabbitmq')
|
|
|
|
|
2014-12-15 21:36:50 +00:00
|
|
|
# Call out to that dns playbook. Put proxies back in now that they're back
|
2023-08-14 14:10:16 -07:00
|
|
|
- name: update proxy dns if needed
|
|
|
|
import_playbook: update-proxy-dns.yml
|
2023-05-19 09:53:27 -07:00
|
|
|
vars:
|
|
|
|
status: enable
|
|
|
|
proxies: myvms_new:&proxies
|
2015-12-15 20:25:54 +00:00
|
|
|
when: nodns is not defined or not nodns
|
2014-12-15 21:36:50 +00:00
|
|
|
|
2013-11-21 21:52:05 +00:00
|
|
|
# - name: get info on guests (postreboot)
|
|
|
|
# virt: command=info
|
|
|
|
# register: vminfo_post
|