os-upgrade-automation/playbook/roles/vmware_snapshot/tasks/main.yml

66 lines
2.5 KiB
YAML

---
- name: Erstelle VMware Snapshot vor Upgrade
vmware_guest_snapshot:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_user }}"
password: "{{ vcenter_password }}"
validate_certs: no
datacenter: "{{ vcenter_datacenter }}"
folder: "{{ vcenter_folder | default('/') }}"
name: "{{ inventory_hostname }}"
state: present
snapshot_name: "pre-upgrade-{{ inventory_hostname }}-{{ ansible_date_time.iso8601_basic }}"
description: "Snapshot vor Auto-Upgrade"
memory: yes
quiesce: yes
delegate_to: localhost
register: snapshot_result
failed_when: snapshot_result.failed is defined and snapshot_result.failed
retries: 3
delay: 10
- name: Logge Fehler bei Snapshot-Erstellung
copy:
content: "Snapshot-Fehler: {{ snapshot_result.msg | default('Unbekannter Fehler') }}"
dest: "{{ log_dir }}/snapshot_error_{{ inventory_hostname }}.log"
when: snapshot_result is failed
- name: Setze Rollback-Flag, falls Snapshot-Erstellung fehlschlägt
set_fact:
rollback: true
when: snapshot_result is failed
- name: Breche Playbook ab, wenn Snapshot-Erstellung fehlschlägt
fail:
msg: "Snapshot-Erstellung fehlgeschlagen, Upgrade wird abgebrochen! Siehe Log: {{ log_dir }}/snapshot_error_{{ inventory_hostname }}.log"
when: snapshot_result is failed
- name: Rollback: Setze VM auf Snapshot zurück (nur bei Fehler und wenn aktiviert)
vmware_guest_snapshot:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_user }}"
password: "{{ vcenter_password }}"
validate_certs: no
datacenter: "{{ vcenter_datacenter }}"
folder: "{{ vcenter_folder | default('/') }}"
name: "{{ inventory_hostname }}"
state: revert
snapshot_name: "pre-upgrade-{{ inventory_hostname }}-{{ ansible_date_time.iso8601_basic }}"
when: rollback is defined and rollback
delegate_to: localhost
- name: Lösche VMware Snapshot nach erfolgreichem Patchlauf (optional)
vmware_guest_snapshot:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_user }}"
password: "{{ vcenter_password }}"
validate_certs: no
datacenter: "{{ vcenter_datacenter }}"
folder: "{{ vcenter_folder | default('/') }}"
name: "{{ inventory_hostname }}"
state: absent
snapshot_name: "pre-upgrade-{{ inventory_hostname }}-{{ ansible_date_time.iso8601_basic }}"
delegate_to: localhost
when: (upgrade_result is defined and upgrade_result is not failed) and (snapshot_cleanup | default(true))
ignore_errors: true