22.5 Γράψιμο Tests 📝

verify.yml — Ansible-based tests

# roles/nginx/molecule/default/verify.yml
---
- name: Verify nginx role
  hosts: all
  gather_facts: true

  tasks:

    # ── Service check ──────────────────────
    - name: " Nginx service is running"
      ansible.builtin.service_facts:

    - name: Assert nginx is active
      ansible.builtin.assert:
        that:
          - "'nginx' in services"
          - "services['nginx'].state == 'running'"
          - "services['nginx'].status == 'enabled'"
        fail_msg:    " Nginx δεν τρέχει!"
        success_msg: " Nginx τρέχει"

    # ── Port check ─────────────────────────
    - name: " Port 80 is open"
      ansible.builtin.wait_for:
        port:    80
        timeout: 5
        state:   started

    # ── HTTP response ──────────────────────
    - name: " HTTP response OK"
      ansible.builtin.uri:
        url:         "http://localhost"
        status_code: 200
      register:  http_test
      retries:   3
      delay:     2
      until:     http_test.status == 200

    # ── File existence ─────────────────────
    - name: Check nginx config
      ansible.builtin.stat:
        path: /etc/nginx/nginx.conf
      register: nginx_conf

    - name: Assert nginx config exists
      ansible.builtin.assert:
        that:
          - nginx_conf.stat.exists
          - nginx_conf.stat.mode == '0644'
        fail_msg: " nginx.conf δεν υπάρχει ή λάθος permissions"

    # ── Config content check ──────────────
    - name: Read nginx config
      ansible.builtin.slurp:
        src: /etc/nginx/nginx.conf
      register: nginx_conf_content

    - name: Assert config content
      ansible.builtin.assert:
        that:
          - "'worker_processes' in (nginx_conf_content.content | b64decode)"
          - "'events' in (nginx_conf_content.content | b64decode)"
        fail_msg: " nginx.conf λείπουν απαιτούμενα sections"

    # ── Cross-distro checks ────────────────
    - name: " Package installed (Debian)"
      ansible.builtin.package_facts:
        manager: apt
      when: ansible_facts['os_family'] == "Debian"

    - name: Assert nginx package (Debian)
      ansible.builtin.assert:
        that:
          - "'nginx' in packages"
        fail_msg: " nginx package δεν εγκαταστάθηκε"
      when: ansible_facts['os_family'] == "Debian"

Idempotency — Αυτόματος έλεγχος

Το molecule idempotency τρέχει το role δεύτερη φορά και ελέγχει ότι changed=0:

molecule idempotency

# Αποτέλεσμα:
# PLAY RECAP ****
# instance-ubuntu: ok=12  changed=0  failed=0
#                               ↑ Idempotent! ✅

# Αν δεν είναι idempotent:
# instance-ubuntu: ok=12  changed=3  failed=0
# ERROR! Idempotency check failed on instance-ubuntu

Σύνοψη 22.5

verify.yml Tests
│
├── service_facts → service running/enabled
├── wait_for     → port open
├── uri          → HTTP response
├── stat         → file exists + permissions
├── slurp        → file content check
└── package_facts → package installed

Idempotency:
└── molecule idempotency → changed=0 ✅