# # This playbook lets you safely reboot a virthost and all it's guests. # # requires --extra-vars="target=somevhost fqdn" #General overview: # 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 # wait for them to die # third play, reboot the vhost # wait for vhost to come back # TODO: Figure out how to compare virt info pre and post boot. - name: find instances hosts: "{{ target }}" gather_facts: False user: root tasks: - name: get list of guests virt: command=list_vms register: vmlist # - name: get info on guests (prereboot) # virt: command=info # register: vminfo_pre - name: add them to myvms_new group local_action: add_host hostname={{ item }} groupname=myvms_new with_items: vmlist.list_vms - name: halt instances hosts: myvms_new user: root gather_facts: False serial: 1 tasks: - name: schedule regular host downtime nagios: action=downtime minutes=30 service=host host={{ inventory_hostname_short }} delegate_to: noc01.phx2.fedoraproject.org ignore_errors: true when: inventory_hostname.find('.stg.') == -1 - name: schedule stg host downtime nagios: action=downtime minutes=30 service=host host={{ inventory_hostname_short }}.stg delegate_to: noc01.phx2.fedoraproject.org ignore_errors: true when: inventory_hostname.find('.stg.') != -1 - name: halt the vm instances - to poweroff command: /sbin/shutdown -h 1 ignore_errors: true # if one of them is down we don't care - name: wait for the whole set to die. hosts: myvms_new gather_facts: False user: root tasks: - name: wait for them to die local_action: wait_for port=22 delay=30 timeout=300 state=stopped host={{ inventory_hostname }} - name: reboot vhost hosts: "{{ target }}" gather_facts: False user: root tasks: - name: tell nagios to shush nagios: action=downtime minutes=60 service=host host={{ inventory_hostname }} delegate_to: noc01.phx2.fedoraproject.org ignore_errors: true - name: reboot the virthost command: /sbin/shutdown -r 1 - name: wait for virthost to come back - up to 15 minutes local_action: wait_for host={{ target }} port=22 delay=120 timeout=900 search_regex=OpenSSH - name: wait for libvirtd to come back on the virthost wait_for: path=/var/run/libvirtd.pid state=present delay=10 - name: look up vmlist virt: command=list_vms register: newvmlist - name: sync time command: ntpdate -u 66.187.233.4 - name: serverbeach hosts need a special iptables config command: /root/fix-iptables.sh when: inventory_hostname_short.startswith('serverbeach') - name: tell nagios to unshush nagios: action=unsilence service=host host={{ inventory_hostname }} delegate_to: noc01.phx2.fedoraproject.org ignore_errors: true - name: Fix unbound if necessary # intersection - hosts that are in our dynamic group and also in unbound-dns hosts: "myvms_new:&unbound" user: root vars_files: - /srv/web/infra/ansible/vars/global.yml - /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml tasks: - include: "{{ tasks }}/restart_unbound.yml" # - name: get info on guests (postreboot) # virt: command=info # register: vminfo_post