Execution
Date 11 Sep 2025 15:47:50 +0100
Duration 00:00:11.47
Controller ssh-gw-4.layershift.com
User root
Versions
Ansible 2.16.11
ara 1.7.3 / 1.7.3
Python 3.10.10
Summary
1 Hosts
9 Tasks
9 Results
1 Plays
1 Files
0 Records

File: /home/ssh-gateway/ansible/kuly/find_if_rpm_db_is_corrupted.yaml

---
- name: Check RPM Database Integrity
  hosts: all
  gather_facts: false

  tasks:
    - name: Test 1 - Basic RPM query (should show errors if corrupted)
      ansible.builtin.command: rpm -q rpm
      register: rpm_query_test
      ignore_errors: true
      changed_when: false
      # noqa: command-instead-of-module

    - name: Test 2 - List all packages (common corruption indicator)
      ansible.builtin.command: rpm -qa
      register: rpm_list_test
      ignore_errors: true
      changed_when: false
      # noqa: command-instead-of-module

    - name: Test 3 - Query specific system file (detects DB issues)
      ansible.builtin.command: rpm -qf /etc/os-release
      register: rpm_file_query
      ignore_errors: true
      changed_when: false
      # noqa: command-instead-of-module

    - name: Test 4 - Verify RPM database integrity
      ansible.builtin.command: rpm -Va rpm
      register: rpm_verify
      ignore_errors: true
      changed_when: false
      # noqa: command-instead-of-module

    - name: Test 5 - Try DNF operation (shows higher-level errors)
      ansible.builtin.command: dnf list installed rpm
      register: dnf_test
      ignore_errors: true
      changed_when: false

    - name: Test 6 - Check for database lock issues
      ansible.builtin.command: rpm -q yum
      register: rpm_lock_test
      ignore_errors: true
      changed_when: false
      # noqa: command-instead-of-module

    - name: Check for specific error patterns in outputs
      ansible.builtin.set_fact:
        has_errors: >-
          {{
            (rpm_query_test.stderr | length > 0 and 'error' in rpm_query_test.stderr | lower) or
            (rpm_list_test.stderr | length > 0 and 'error' in rpm_list_test.stderr | lower) or
            (rpm_file_query.stderr | length > 0 and 'error' in rpm_file_query.stderr | lower) or
            (dnf_test.stderr | length > 0 and ('error' in dnf_test.stderr | lower or 'db' in dnf_test.stderr | lower)) or
            (rpm_lock_test.stderr | length > 0 and 'lock' in rpm_lock_test.stderr | lower)
          }}

    - name: Display detailed error information
      ansible.builtin.debug:
        msg: |
          RPM Corruption Check Results:

          1. rpm -q rpm:
             RC: {{ rpm_query_test.rc }}
             STDERR: {{ rpm_query_test.stderr | default('') }}

          2. rpm -qa:
             RC: {{ rpm_list_test.rc }}
             STDERR: {{ rpm_list_test.stderr | default('') }}

          3. rpm -qf /etc/os-release:
             RC: {{ rpm_file_query.rc }}
             STDERR: {{ rpm_file_query.stderr | default('') }}

          4. rpm -Va rpm:
             RC: {{ rpm_verify.rc }}
             STDERR: {{ rpm_verify.stderr | default('') }}

          5. dnf list installed rpm:
             RC: {{ dnf_test.rc }}
             STDERR: {{ dnf_test.stderr | default('') }}

          CORRUPTION DETECTED: {{ 'YES' if has_errors else 'NO' }}

    - name: Announce corruption with actual error messages
      ansible.builtin.debug:
        msg: |
          ==========================================
          RPM DATABASE CORRUPTION DETECTED!
          ==========================================
          Host: {{ inventory_hostname }}

          Error Details:
          {% if 'error' in rpm_query_test.stderr | lower %}
          - rpm -q rpm failed: {{ rpm_query_test.stderr }}
          {% endif %}
          {% if 'error' in rpm_list_test.stderr | lower %}
          - rpm -qa failed: {{ rpm_list_test.stderr }}
          {% endif %}
          {% if 'error' in rpm_file_query.stderr | lower %}
          - rpm -qf failed: {{ rpm_file_query.stderr }}
          {% endif %}
          {% if 'error' in dnf_test.stderr | lower or 'db' in dnf_test.stderr | lower %}
          - dnf operation failed: {{ dnf_test.stderr }}
          {% endif %}

          Common fix commands:
          1. rm -f /var/lib/rpm/__db*
          2. rpm --rebuilddb
          3. Verify: rpm -qa | head -10
          ==========================================
      when: has_errors