--- - name: Erstelle VMware Snapshot vor Upgrade community.vmware.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 ansible.builtin.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 ansible.builtin.set_fact: rollback: true when: snapshot_result is failed - name: Breche Playbook ab, wenn Snapshot-Erstellung fehlschlägt ansible.builtin.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)" community.vmware.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) community.vmware.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