---
# Gravity Platform Rollback Playbook
# Rolls back to previous version

- name: Rollback Gravity Platform
  hosts: all
  become: yes
  vars:
    rollback_version: "{{ previous_version | default('latest') }}"

  pre_tasks:
    - name: Display rollback info
      debug:
        msg: "Rolling back {{ inventory_hostname }} to version {{ rollback_version }}"

  tasks:
    - name: Update .env with rollback version
      lineinfile:
        path: /opt/gravity/.env
        regexp: "^GRAVITY_VERSION="
        line: "GRAVITY_VERSION={{ rollback_version }}"

    - name: Pull previous version images
      command: docker compose pull --quiet
      args:
        chdir: /opt/gravity
      environment:
        GRAVITY_VERSION: "{{ rollback_version }}"

    - name: Stop current services
      command: docker compose down
      args:
        chdir: /opt/gravity

    - name: Start services with previous version
      command: docker compose up -d {{ gravity_services | join(' ') }}
      args:
        chdir: /opt/gravity

    - name: Wait for services to be healthy
      uri:
        url: "http://localhost:{{ item.port }}/health"
        status_code: 200
      register: health_check
      until: health_check.status == 200
      retries: 30
      delay: 2
      loop:
        - { name: unoverse, port: 4105 }
      when: item.name in gravity_services

  post_tasks:
    - name: Display rollback status
      debug:
        msg: "{{ inventory_hostname }} rolled back to {{ rollback_version }}"
